From d799c045fd74e352edb606f26d21ded74fecb79d Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Thu, 1 May 2025 14:04:58 +0000 Subject: [PATCH 01/70] releaser: Prepare repository for 0.148.0-DEV [ci skip] --- common/hugo/version_current.go | 6 +++--- hugoreleaser.env | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index 9b396b110..ba367ceb5 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 147, - PatchLevel: 1, - Suffix: "", + Minor: 148, + PatchLevel: 0, + Suffix: "-DEV", } diff --git a/hugoreleaser.env b/hugoreleaser.env index 9d9a10112..4015dbc5c 100644 --- a/hugoreleaser.env +++ b/hugoreleaser.env @@ -1,7 +1,8 @@ # Release env. # These will be replaced by script before release. -HUGORELEASER_TAG=v0.147.0 -HUGORELEASER_COMMITISH=7d0039b86ddd6397816cc3383cb0cfa481b15f32 +HUGORELEASER_TAG=v0.147.1 +HUGORELEASER_COMMITISH=95666fc5a4fd2d87528a1a69d562e0538a97062a + From b39b24962350090122b5f3927456dde710cffb57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 2 May 2025 09:35:19 +0200 Subject: [PATCH 02/70] config: Add some more merge tests See #13681 --- .../allconfig/allconfig_integration_test.go | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/config/allconfig/allconfig_integration_test.go b/config/allconfig/allconfig_integration_test.go index 033947203..f8fbb22f7 100644 --- a/config/allconfig/allconfig_integration_test.go +++ b/config/allconfig/allconfig_integration_test.go @@ -273,6 +273,69 @@ GA ID: {{ site.Config.Services.GoogleAnalytics.ID }}. b.AssertFileContent("public/index.html", "GA ID: foo bar.") } +func TestMergeDeepBuildStats(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +baseURL = "https://example.com" +title = "Theme 1" +_merge = "deep" +[module] +[module.hugoVersion] +[[module.imports]] +path = "theme1" +-- themes/theme1/hugo.toml -- +[build] +[build.buildStats] +disableIDs = true +enable = true +-- layouts/home.html -- +Home. + +` + + b := hugolib.Test(t, files, hugolib.TestOptOsFs()) + + conf := b.H.Configs + base := conf.Base + + b.Assert(base.Title, qt.Equals, "Theme 1") + b.Assert(len(base.Module.Imports), qt.Equals, 1) + b.Assert(base.Build.BuildStats.Enable, qt.Equals, true) + b.AssertFileExists("/hugo_stats.json", true) +} + +func TestMergeDeepBuildStatsTheme(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +baseURL = "https://example.com" +_merge = "deep" +theme = ["theme1"] +-- themes/theme1/hugo.toml -- +title = "Theme 1" +[build] +[build.buildStats] +disableIDs = true +enable = true +-- layouts/home.html -- +Home. + +` + + b := hugolib.Test(t, files, hugolib.TestOptOsFs()) + + conf := b.H.Configs + base := conf.Base + + b.Assert(base.Title, qt.Equals, "Theme 1") + b.Assert(len(base.Module.Imports), qt.Equals, 1) + b.Assert(base.Build.BuildStats.Enable, qt.Equals, true) + b.AssertFileExists("/hugo_stats.json", true) +} + func TestDefaultConfigLanguageBlankWhenNoEnglishExists(t *testing.T) { t.Parallel() From 80f05953111ee750e652c30d40b5c64e6d6815dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 5 May 2025 10:11:28 +0200 Subject: [PATCH 03/70] tpl: Fix case issue in templates.Exists Fixes #13684 --- tpl/templates/templates_integration_test.go | 16 ++++++++++++++++ tpl/tplimpl/templatestore.go | 1 + 2 files changed, 17 insertions(+) diff --git a/tpl/templates/templates_integration_test.go b/tpl/templates/templates_integration_test.go index d16333ed4..baa917eee 100644 --- a/tpl/templates/templates_integration_test.go +++ b/tpl/templates/templates_integration_test.go @@ -299,3 +299,19 @@ P2. b := hugolib.Test(t, files) b.AssertFileContent("public/index.html", "P1: P1.\nP2: foo bar") } + +func TestTemplateExistsCaseIssue13684(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +-- layouts/home.html -- +P1: {{ templates.Exists "_partials/MyPartial.html" }}|P1: {{ templates.Exists "_partials/mypartial.html" }}| +-- layouts/_partials/MyPartial.html -- +MyPartial. + +` + + b := hugolib.Test(t, files) + b.AssertFileContent("public/index.html", "P1: true|P1: true|") +} diff --git a/tpl/tplimpl/templatestore.go b/tpl/tplimpl/templatestore.go index 4adf76b29..53880eb33 100644 --- a/tpl/tplimpl/templatestore.go +++ b/tpl/tplimpl/templatestore.go @@ -712,6 +712,7 @@ func (s *TemplateStore) RefreshFiles(include func(fi hugofs.FileMetaInfo) bool) } func (s *TemplateStore) HasTemplate(templatePath string) bool { + templatePath = strings.ToLower(templatePath) templatePath = paths.AddLeadingSlash(templatePath) return s.templatesByPath.Contains(templatePath) } From 363ab48a24fe4efcd602c963080c02b955119e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 6 May 2025 09:09:05 +0200 Subject: [PATCH 04/70] Fix handling of "outputs" from content adapter pages Fixes #13689 --- hugolib/content_map.go | 2 +- hugolib/page__meta.go | 24 ++--------- .../pagesfromgotmpl_integration_test.go | 42 +++++++++++++++++++ hugolib/site.go | 2 +- resources/page/pagemeta/page_frontmatter.go | 20 +++++++-- .../page/pagemeta/page_frontmatter_test.go | 3 +- 6 files changed, 66 insertions(+), 27 deletions(-) diff --git a/hugolib/content_map.go b/hugolib/content_map.go index 56a602f54..454d36df7 100644 --- a/hugolib/content_map.go +++ b/hugolib/content_map.go @@ -356,7 +356,7 @@ func (m *pageMap) addPagesFromGoTmplFi(fi hugofs.FileMetaInfo, buildConfig *Buil Watching: s.Conf.Watching(), HandlePage: func(pt *pagesfromdata.PagesFromTemplate, pc *pagemeta.PageConfig) error { s := pt.Site.(*Site) - if err := pc.Compile(pt.GoTmplFi.Meta().PathInfo.Base(), true, "", s.Log, s.conf.MediaTypes.Config); err != nil { + if err := pc.Compile(pt.GoTmplFi.Meta().PathInfo.Base(), true, "", s.Log, s.conf.OutputFormats.Config, s.conf.MediaTypes.Config); err != nil { return err } diff --git a/hugolib/page__meta.go b/hugolib/page__meta.go index 9516c482a..94dbbab3e 100644 --- a/hugolib/page__meta.go +++ b/hugolib/page__meta.go @@ -54,7 +54,6 @@ type pageMeta struct { resource.Staler *pageMetaParams - pageMetaFrontMatter // Set for standalone pages, e.g. robotsTXT. standaloneOutputFormat output.Format @@ -79,7 +78,6 @@ func (m *pageMeta) setMetaPostPrepareRebuild() { Path: m.pageConfig.Path, Params: params, } - m.pageMetaFrontMatter = pageMetaFrontMatter{} } type pageMetaParams struct { @@ -94,11 +92,6 @@ type pageMetaParams struct { cascadeOriginal *maps.Ordered[page.PageMatcher, maps.Params] // contains the original cascade as defined in the front matter. } -// From page front matter. -type pageMetaFrontMatter struct { - configuredOutputFormats output.Formats // outputs defined in front matter. -} - func (m *pageMetaParams) init(preserveOriginal bool) { if preserveOriginal { m.paramsOriginal = xmaps.Clone[maps.Params](m.pageConfig.Params) @@ -531,16 +524,7 @@ params: for i, s := range o { o[i] = strings.ToLower(s) } - if len(o) > 0 { - // Output formats are explicitly set in front matter, use those. - outFormats, err := p.s.conf.OutputFormats.Config.GetByNames(o...) - if err != nil { - p.s.Log.Errorf("Failed to resolve output formats: %s", err) - } else { - pm.configuredOutputFormats = outFormats - params[loki] = outFormats - } - } + pm.pageConfig.Outputs = o case "draft": draft = new(bool) *draft = cast.ToBool(v) @@ -672,7 +656,7 @@ params: return err } - if err := pcfg.Compile("", false, ext, p.s.Log, p.s.conf.MediaTypes.Config); err != nil { + if err := pcfg.Compile("", false, ext, p.s.Log, p.s.conf.OutputFormats.Config, p.s.conf.MediaTypes.Config); err != nil { return err } @@ -829,8 +813,8 @@ func (p *pageMeta) newContentConverter(ps *pageState, markup string) (converter. // The output formats this page will be rendered to. func (m *pageMeta) outputFormats() output.Formats { - if len(m.configuredOutputFormats) > 0 { - return m.configuredOutputFormats + if len(m.pageConfig.ConfiguredOutputFormats) > 0 { + return m.pageConfig.ConfiguredOutputFormats } return m.s.conf.C.KindOutputFormats[m.Kind()] } diff --git a/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go b/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go index a31b93999..f6e4221a0 100644 --- a/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go +++ b/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go @@ -779,3 +779,45 @@ Single. b.AssertFileContent("public/tags/index.html", "Terms: mytag: 1|§s") } + +func TestContentAdapterOutputsIssue13689(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['home','rss','section','sitemap','taxonomy','term'] +[outputs] +page = ['html','json'] +-- layouts/page.html -- +html: {{ .Title }} +-- layouts/page.json -- +json: {{ .Title }} +-- content/p1.md -- +--- +title: p1 +--- +-- content/p2.md -- +--- +title: p2 +outputs: + - html +--- +-- content/_content.gotmpl -- +{{ $page := dict "path" "p3" "title" "p3" }} +{{ $.AddPage $page }} + +{{ $page := dict "path" "p4" "title" "p4" "outputs" (slice "html") }} +{{ $.AddPage $page }} +` + + b := hugolib.Test(t, files) + + b.AssertFileExists("public/p1/index.html", true) + b.AssertFileExists("public/p1/index.json", true) + b.AssertFileExists("public/p2/index.html", true) + b.AssertFileExists("public/p2/index.json", false) + b.AssertFileExists("public/p3/index.html", true) + b.AssertFileExists("public/p3/index.json", true) + b.AssertFileExists("public/p4/index.html", true) + b.AssertFileExists("public/p4/index.json", false) // currently returns true +} diff --git a/hugolib/site.go b/hugolib/site.go index 728b036d2..0e658086b 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -804,7 +804,7 @@ func (s *Site) initRenderFormats() { Tree: s.pageMap.treePages, Handle: func(key string, n contentNodeI, match doctree.DimensionFlag) (bool, error) { if p, ok := n.(*pageState); ok { - for _, f := range p.m.configuredOutputFormats { + for _, f := range p.m.pageConfig.ConfiguredOutputFormats { if !formatSet[f.Name] { formats = append(formats, f) formatSet[f.Name] = true diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go index 7f98b1b88..eb52e5055 100644 --- a/resources/page/pagemeta/page_frontmatter.go +++ b/resources/page/pagemeta/page_frontmatter.go @@ -29,6 +29,7 @@ import ( "github.com/gohugoio/hugo/hugofs/files" "github.com/gohugoio/hugo/markup" "github.com/gohugoio/hugo/media" + "github.com/gohugoio/hugo/output" "github.com/gohugoio/hugo/resources/kinds" "github.com/gohugoio/hugo/resources/page" "github.com/gohugoio/hugo/resources/resource" @@ -114,9 +115,10 @@ type PageConfig struct { Content Source // Compiled values. - CascadeCompiled *maps.Ordered[page.PageMatcher, maps.Params] `mapstructure:"-" json:"-"` - ContentMediaType media.Type `mapstructure:"-" json:"-"` - IsFromContentAdapter bool `mapstructure:"-" json:"-"` + CascadeCompiled *maps.Ordered[page.PageMatcher, maps.Params] `mapstructure:"-" json:"-"` + ContentMediaType media.Type `mapstructure:"-" json:"-"` + ConfiguredOutputFormats output.Formats `mapstructure:"-" json:"-"` + IsFromContentAdapter bool `mapstructure:"-" json:"-"` } var DefaultPageConfig = PageConfig{ @@ -150,7 +152,7 @@ func (p *PageConfig) Validate(pagesFromData bool) error { } // Compile sets up the page configuration after all fields have been set. -func (p *PageConfig) Compile(basePath string, pagesFromData bool, ext string, logger loggers.Logger, mediaTypes media.Types) error { +func (p *PageConfig) Compile(basePath string, pagesFromData bool, ext string, logger loggers.Logger, outputFormats output.Formats, mediaTypes media.Types) error { // In content adapters, we always get relative paths. if basePath != "" { p.Path = path.Join(basePath, p.Path) @@ -195,6 +197,15 @@ func (p *PageConfig) Compile(basePath string, pagesFromData bool, ext string, lo p.Content.Markup = p.ContentMediaType.SubType } + if len(p.Outputs) > 0 { + outFormats, err := outputFormats.GetByNames(p.Outputs...) + if err != nil { + return fmt.Errorf("failed to resolve output formats %v: %w", p.Outputs, err) + } else { + p.ConfiguredOutputFormats = outFormats + } + } + if pagesFromData { if p.Kind == "" { p.Kind = kinds.KindPage @@ -205,6 +216,7 @@ func (p *PageConfig) Compile(basePath string, pagesFromData bool, ext string, lo // but also because people tend to use use the filename to name their resources (with spaces and all), // and this isn't relevant when creating resources from an API where it's easy to add textual meta data. p.Path = paths.NormalizePathStringBasic(p.Path) + } if p.Cascade != nil { diff --git a/resources/page/pagemeta/page_frontmatter_test.go b/resources/page/pagemeta/page_frontmatter_test.go index fe9d3d99c..de2932391 100644 --- a/resources/page/pagemeta/page_frontmatter_test.go +++ b/resources/page/pagemeta/page_frontmatter_test.go @@ -22,6 +22,7 @@ import ( "github.com/gohugoio/hugo/config" "github.com/gohugoio/hugo/config/testconfig" "github.com/gohugoio/hugo/media" + "github.com/gohugoio/hugo/output" "github.com/gohugoio/hugo/resources/page/pagemeta" @@ -175,7 +176,7 @@ func TestContentMediaTypeFromMarkup(t *testing.T) { } { var pc pagemeta.PageConfig pc.Content.Markup = test.in - c.Assert(pc.Compile("", true, "", logger, media.DefaultTypes), qt.IsNil) + c.Assert(pc.Compile("", true, "", logger, output.DefaultFormats, media.DefaultTypes), qt.IsNil) c.Assert(pc.ContentMediaType.Type, qt.Equals, test.expected) } } From c7feb15d10b29a94d7fb57c31e8bcb2e92718fb7 Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Tue, 6 May 2025 11:18:55 +0000 Subject: [PATCH 05/70] releaser: Bump versions for release of 0.147.2 [ci skip] --- common/hugo/version_current.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index ba367ceb5..73deea29b 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 148, - PatchLevel: 0, - Suffix: "-DEV", + Minor: 147, + PatchLevel: 2, + Suffix: "", } From d70f828e2bf20532b0644bd70635edba2488cac2 Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Tue, 6 May 2025 11:33:36 +0000 Subject: [PATCH 06/70] releaser: Prepare repository for 0.148.0-DEV [ci skip] --- common/hugo/version_current.go | 6 +++--- hugoreleaser.env | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index 73deea29b..ba367ceb5 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 147, - PatchLevel: 2, - Suffix: "", + Minor: 148, + PatchLevel: 0, + Suffix: "-DEV", } diff --git a/hugoreleaser.env b/hugoreleaser.env index 4015dbc5c..5d373cd71 100644 --- a/hugoreleaser.env +++ b/hugoreleaser.env @@ -1,7 +1,8 @@ # Release env. # These will be replaced by script before release. -HUGORELEASER_TAG=v0.147.1 -HUGORELEASER_COMMITISH=95666fc5a4fd2d87528a1a69d562e0538a97062a +HUGORELEASER_TAG=v0.147.2 +HUGORELEASER_COMMITISH=c7feb15d10b29a94d7fb57c31e8bcb2e92718fb7 + From 325a0dba63252599826c3ecc955c7919a4a3ba39 Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Tue, 6 May 2025 11:57:03 -0700 Subject: [PATCH 07/70] tpl/math: Add MaxInt64 function Closes #13693 --- tpl/math/init.go | 7 +++++++ tpl/math/math.go | 5 +++++ tpl/math/math_test.go | 11 +++++++++++ 3 files changed, 23 insertions(+) diff --git a/tpl/math/init.go b/tpl/math/init.go index bfaf4526a..bb3c02bd6 100644 --- a/tpl/math/init.go +++ b/tpl/math/init.go @@ -115,6 +115,13 @@ func init() { }, ) + ns.AddMethodMapping(ctx.MaxInt64, + nil, + [][2]string{ + {"{{ math.MaxInt64 }}", "9223372036854775807"}, + }, + ) + ns.AddMethodMapping(ctx.Min, nil, [][2]string{ diff --git a/tpl/math/math.go b/tpl/math/math.go index a0512c045..01e75e9c8 100644 --- a/tpl/math/math.go +++ b/tpl/math/math.go @@ -147,6 +147,11 @@ func (ns *Namespace) Max(inputs ...any) (maximum float64, err error) { return ns.applyOpToScalarsOrSlices("Max", math.Max, inputs...) } +// MaxInt64 returns the maximum value for a signed 64-bit integer. +func (ns *Namespace) MaxInt64() int64 { + return math.MaxInt64 +} + // Min returns the smaller of all numbers in inputs. Any slices in inputs are flattened. func (ns *Namespace) Min(inputs ...any) (minimum float64, err error) { return ns.applyOpToScalarsOrSlices("Min", math.Min, inputs...) diff --git a/tpl/math/math_test.go b/tpl/math/math_test.go index d45a2aace..cc4fe31eb 100644 --- a/tpl/math/math_test.go +++ b/tpl/math/math_test.go @@ -879,3 +879,14 @@ func TestToRadians(t *testing.T) { c.Assert(result, qt.Equals, test.expect) } } + +func TestMaxInt64(t *testing.T) { + t.Parallel() + ns := New(nil) + + var want int64 = 9223372036854775807 + got := ns.MaxInt64() + if want != got { + t.Errorf("want %d, got %d", want, got) + } +} From 84d7a108e892e67cde43560606c125cff0f5b4cc Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Fri, 9 May 2025 10:02:00 -0700 Subject: [PATCH 08/70] tpl/tplimpl: Fix vimeo shortcode test to accommodate API changes Fixes #13687 --- tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html | 2 +- tpl/tplimpl/shortcodes_integration_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html b/tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html index 86a6dfc9f..2e5f88282 100644 --- a/tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html +++ b/tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html @@ -37,7 +37,7 @@ {{- $thumbnail := .thumbnail_url -}} {{- $original := $thumbnail | replaceRE "(_.*\\.)" "." -}}
- + {{ .title }}
{{ template "__h_simple_icon_play" $.ctx.Page }} diff --git a/tpl/tplimpl/shortcodes_integration_test.go b/tpl/tplimpl/shortcodes_integration_test.go index 9d7af4a3d..838dc16d7 100644 --- a/tpl/tplimpl/shortcodes_integration_test.go +++ b/tpl/tplimpl/shortcodes_integration_test.go @@ -495,7 +495,7 @@ Content: {{ .Content }} // Simple mode files = strings.ReplaceAll(files, "privacy.vimeo.simple = false", "privacy.vimeo.simple = true") b = hugolib.Test(t, files) - b.AssertFileContent("public/p1/index.html", "c5bf16d87e2a370b") + b.AssertFileContent("public/p1/index.html", "04d861fc957ee638") // Simple mode with non-existent id files = strings.ReplaceAll(files, "{{< vimeo 55073825 >}}", "{{< vimeo __id_does_not_exist__ >}}") From 9d1d8c88997b6785e2d173ba5bab3ff2004c95dc Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Fri, 9 May 2025 08:45:06 -0700 Subject: [PATCH 09/70] commands: Fix description of new theme commands Fixes #13701 --- commands/new.go | 14 +++++--------- testscripts/commands/new.txt | 4 ++-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/commands/new.go b/commands/new.go index fdc1f65f2..81e1c65a4 100644 --- a/commands/new.go +++ b/commands/new.go @@ -76,10 +76,8 @@ Ensure you run this within the root directory of your site.`, &simpleCommand{ name: "site", use: "site [path]", - short: "Create a new site (skeleton)", - long: `Create a new site in the provided directory. -The new site will have the correct structure, but no content or theme yet. -Use ` + "`hugo new [contentPath]`" + ` to create new content.`, + short: "Create a new site", + long: `Create a new site at the specified path.`, run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error { if len(args) < 1 { return newUserError("path needs to be provided") @@ -124,11 +122,9 @@ Use ` + "`hugo new [contentPath]`" + ` to create new content.`, &simpleCommand{ name: "theme", use: "theme [name]", - short: "Create a new theme (skeleton)", - long: `Create a new theme (skeleton) called [name] in ./themes. -New theme is a skeleton. Please add content to the touched files. Add your -name to the copyright line in the license and adjust the theme.toml file -according to your needs.`, + short: "Create a new theme", + long: `Create a new theme with the specified name in the ./themes directory. +This generates a functional theme including template examples and sample content.`, run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error { if len(args) < 1 { return newUserError("theme name needs to be provided") diff --git a/testscripts/commands/new.txt b/testscripts/commands/new.txt index cd338203f..f8d7c1ec1 100644 --- a/testscripts/commands/new.txt +++ b/testscripts/commands/new.txt @@ -1,7 +1,7 @@ # Test the new command. hugo new site -h -stdout 'Create a new site in the provided directory' +stdout 'Create a new site at the specified path.' hugo new site my-yaml-site --format yml checkfile my-yaml-site/hugo.yml hugo new site mysite -f @@ -19,7 +19,7 @@ exists themes ! exists resources hugo new theme -h -stdout 'Create a new theme \(skeleton\) called \[name\] in ./themes' +stdout 'Create a new theme with the specified name in the ./themes directory.' hugo new theme mytheme --format yml stdout 'Creating new theme' ! exists resources From c745a3e10849198a401c600232ceda5d8cf7381f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 7 May 2025 10:40:39 +0200 Subject: [PATCH 10/70] Fix/implement cascade for content adapters Fixes #13692 --- config/allconfig/alldecoders.go | 2 +- hugolib/content_map.go | 2 +- hugolib/content_map_page.go | 16 +- hugolib/page__meta.go | 38 +++-- hugolib/pagesfromdata/pagesfromgotmpl.go | 11 +- .../pagesfromgotmpl_integration_test.go | 94 ++++++++++++ resources/page/page_matcher.go | 39 ++++- resources/page/page_matcher_test.go | 6 +- resources/page/pagemeta/page_frontmatter.go | 141 ++++++++++++------ .../page/pagemeta/page_frontmatter_test.go | 2 +- tpl/tplimpl/shortcodes_integration_test.go | 1 + 11 files changed, 273 insertions(+), 79 deletions(-) diff --git a/config/allconfig/alldecoders.go b/config/allconfig/alldecoders.go index 1cfa1afc4..035349790 100644 --- a/config/allconfig/alldecoders.go +++ b/config/allconfig/alldecoders.go @@ -330,7 +330,7 @@ var allDecoderSetups = map[string]decodeWeight{ key: "cascade", decode: func(d decodeWeight, p decodeConfig) error { var err error - p.c.Cascade, err = page.DecodeCascadeConfig(nil, p.p.Get(d.key)) + p.c.Cascade, err = page.DecodeCascadeConfig(nil, true, p.p.Get(d.key)) return err }, }, diff --git a/hugolib/content_map.go b/hugolib/content_map.go index 454d36df7..596a8f7f9 100644 --- a/hugolib/content_map.go +++ b/hugolib/content_map.go @@ -356,7 +356,7 @@ func (m *pageMap) addPagesFromGoTmplFi(fi hugofs.FileMetaInfo, buildConfig *Buil Watching: s.Conf.Watching(), HandlePage: func(pt *pagesfromdata.PagesFromTemplate, pc *pagemeta.PageConfig) error { s := pt.Site.(*Site) - if err := pc.Compile(pt.GoTmplFi.Meta().PathInfo.Base(), true, "", s.Log, s.conf.OutputFormats.Config, s.conf.MediaTypes.Config); err != nil { + if err := pc.CompileForPagesFromDataPre(pt.GoTmplFi.Meta().PathInfo.Base(), m.s.Log, s.conf.MediaTypes.Config); err != nil { return err } diff --git a/hugolib/content_map_page.go b/hugolib/content_map_page.go index be834fbb6..9e67fbb1b 100644 --- a/hugolib/content_map_page.go +++ b/hugolib/content_map_page.go @@ -1695,7 +1695,9 @@ func (sa *sitePagesAssembler) assembleTermsAndTranslations() error { pathInfo: pi, pageMetaParams: &pageMetaParams{ pageConfig: &pagemeta.PageConfig{ - Kind: kinds.KindTerm, + PageConfigEarly: pagemeta.PageConfigEarly{ + Kind: kinds.KindTerm, + }, }, }, } @@ -1956,7 +1958,9 @@ func (sa *sitePagesAssembler) addStandalonePages() error { pathInfo: s.Conf.PathParser().Parse(files.ComponentFolderContent, key+f.MediaType.FirstSuffix.FullSuffix), pageMetaParams: &pageMetaParams{ pageConfig: &pagemeta.PageConfig{ - Kind: kind, + PageConfigEarly: pagemeta.PageConfigEarly{ + Kind: kind, + }, }, }, standaloneOutputFormat: f, @@ -2082,7 +2086,9 @@ func (sa *sitePagesAssembler) addMissingRootSections() error { pathInfo: p, pageMetaParams: &pageMetaParams{ pageConfig: &pagemeta.PageConfig{ - Kind: kinds.KindHome, + PageConfigEarly: pagemeta.PageConfigEarly{ + Kind: kinds.KindHome, + }, }, }, } @@ -2115,7 +2121,9 @@ func (sa *sitePagesAssembler) addMissingTaxonomies() error { pathInfo: sa.Conf.PathParser().Parse(files.ComponentFolderContent, key+"/_index.md"), pageMetaParams: &pageMetaParams{ pageConfig: &pagemeta.PageConfig{ - Kind: kinds.KindTaxonomy, + PageConfigEarly: pagemeta.PageConfigEarly{ + Kind: kinds.KindTaxonomy, + }, }, }, singular: viewName.singular, diff --git a/hugolib/page__meta.go b/hugolib/page__meta.go index 94dbbab3e..e8bce20d1 100644 --- a/hugolib/page__meta.go +++ b/hugolib/page__meta.go @@ -72,12 +72,7 @@ type pageMeta struct { // Prepare for a rebuild of the data passed in from front matter. func (m *pageMeta) setMetaPostPrepareRebuild() { params := xmaps.Clone(m.paramsOriginal) - m.pageMetaParams.pageConfig = &pagemeta.PageConfig{ - Kind: m.pageConfig.Kind, - Lang: m.pageConfig.Lang, - Path: m.pageConfig.Path, - Params: params, - } + m.pageMetaParams.pageConfig = pagemeta.ClonePageConfigForRebuild(m.pageMetaParams.pageConfig, params) } type pageMetaParams struct { @@ -94,7 +89,11 @@ type pageMetaParams struct { func (m *pageMetaParams) init(preserveOriginal bool) { if preserveOriginal { - m.paramsOriginal = xmaps.Clone[maps.Params](m.pageConfig.Params) + if m.pageConfig.IsFromContentAdapter { + m.paramsOriginal = xmaps.Clone(m.pageConfig.ContentAdapterData) + } else { + m.paramsOriginal = xmaps.Clone(m.pageConfig.Params) + } m.cascadeOriginal = m.pageConfig.CascadeCompiled.Clone() } } @@ -254,7 +253,7 @@ func (p *pageMeta) setMetaPre(pi *contentParseInfo, logger loggers.Logger, conf // Check for any cascade define on itself. if cv, found := frontmatter["cascade"]; found { var err error - cascade, err := page.DecodeCascade(logger, cv) + cascade, err := page.DecodeCascade(logger, true, cv) if err != nil { return err } @@ -341,18 +340,29 @@ func (ps *pageState) setMetaPost(cascade *maps.Ordered[page.PageMatcher, maps.Pa } // Cascade is also applied to itself. + var err error cascade.Range(func(k page.PageMatcher, v maps.Params) bool { if !k.Matches(ps) { return true } for kk, vv := range v { - if _, found := ps.m.pageConfig.Params[kk]; !found { - ps.m.pageConfig.Params[kk] = vv + if ps.m.pageConfig.IsFromContentAdapter { + if _, found := ps.m.pageConfig.ContentAdapterData[kk]; !found { + ps.m.pageConfig.ContentAdapterData[kk] = vv + } + } else { + if _, found := ps.m.pageConfig.Params[kk]; !found { + ps.m.pageConfig.Params[kk] = vv + } } } return true }) + if err != nil { + return err + } + if err := ps.setMetaPostParams(); err != nil { return err } @@ -398,6 +408,12 @@ func (p *pageState) setMetaPostParams() error { PathOrTitle: p.pathOrTitle(), } + if isContentAdapter { + if err := pm.pageConfig.Compile(ext, p.s.Log, p.s.conf.OutputFormats.Config, p.s.conf.MediaTypes.Config); err != nil { + return err + } + } + // Handle the date separately // TODO(bep) we need to "do more" in this area so this can be split up and // more easily tested without the Page, but the coupling is strong. @@ -656,7 +672,7 @@ params: return err } - if err := pcfg.Compile("", false, ext, p.s.Log, p.s.conf.OutputFormats.Config, p.s.conf.MediaTypes.Config); err != nil { + if err := pcfg.Compile(ext, p.s.Log, p.s.conf.OutputFormats.Config, p.s.conf.MediaTypes.Config); err != nil { return err } diff --git a/hugolib/pagesfromdata/pagesfromgotmpl.go b/hugolib/pagesfromdata/pagesfromgotmpl.go index a704b39ee..72909a40b 100644 --- a/hugolib/pagesfromdata/pagesfromgotmpl.go +++ b/hugolib/pagesfromdata/pagesfromgotmpl.go @@ -91,17 +91,20 @@ func (p *pagesFromDataTemplateContext) AddPage(v any) (string, error) { pd := pagemeta.DefaultPageConfig pd.IsFromContentAdapter = true + pd.ContentAdapterData = m - if err := mapstructure.WeakDecode(m, &pd); err != nil { - return "", fmt.Errorf("failed to decode page map: %w", err) + // The rest will be handled after the cascade is calculated and applied. + if err := mapstructure.WeakDecode(pd.ContentAdapterData, &pd.PageConfigEarly); err != nil { + err = fmt.Errorf("failed to decode page map: %w", err) + return "", err } - p.p.buildState.NumPagesAdded++ - if err := pd.Validate(true); err != nil { return "", err } + p.p.buildState.NumPagesAdded++ + return "", p.p.HandlePage(p.p, &pd) } diff --git a/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go b/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go index f6e4221a0..db06fb4a4 100644 --- a/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go +++ b/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go @@ -821,3 +821,97 @@ outputs: b.AssertFileExists("public/p4/index.html", true) b.AssertFileExists("public/p4/index.json", false) // currently returns true } + +func TestContentAdapterOutputsIssue13692(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['page','home','sitemap','taxonomy','term'] +[[cascade]] +outputs = ['html','json'] +[cascade.target] +path = '{/s2,/s4}' +-- layouts/section.html -- +html: {{ .Title }} +-- layouts/section.json -- +json: {{ .Title }} +-- content/s1/_index.md -- +--- +title: s1 +--- +-- content/s2/_index.md -- +--- +title: s2 +--- +-- content/_content.gotmpl -- +{{ $page := dict "path" "s3" "title" "s3" "kind" "section" }} +{{ $.AddPage $page }} + +{{ $page := dict "path" "s4" "title" "s4" "kind" "section" }} +{{ $.AddPage $page }} + +{{ $page := dict "path" "s5" "title" "s5" "kind" "section" "outputs" (slice "html") }} + {{ $.AddPage $page }} +` + + b := hugolib.Test(t, files) + + b.AssertFileExists("public/s1/index.html", true) + b.AssertFileExists("public/s1/index.json", false) + b.AssertFileExists("public/s1/index.xml", true) + + b.AssertFileExists("public/s2/index.html", true) + b.AssertFileExists("public/s2/index.json", true) + b.AssertFileExists("public/s2/index.xml", false) + + b.AssertFileExists("public/s3/index.html", true) + b.AssertFileExists("public/s3/index.json", false) + b.AssertFileExists("public/s3/index.xml", true) + + b.AssertFileExists("public/s4/index.html", true) + b.AssertFileExists("public/s4/index.json", true) + b.AssertFileExists("public/s4/index.xml", false) + + b.AssertFileExists("public/s5/index.html", true) + b.AssertFileExists("public/s5/index.json", false) + b.AssertFileExists("public/s5/index.xml", false) +} + +func TestContentAdapterCascadeBasic(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableLiveReload = true +-- content/_index.md -- +--- +cascade: + - title: foo + target: + path: "**" +--- +-- layouts/all.html -- +Title: {{ .Title }}|Content: {{ .Content }}| +-- content/_content.gotmpl -- +{{ $content := dict + "mediaType" "text/markdown" + "value" "The _Hunchback of Notre Dame_ was written by Victor Hugo." +}} + +{{ $page := dict "path" "s1" "kind" "page" }} +{{ $.AddPage $page }} + {{ $page := dict "path" "s2" "kind" "page" "title" "bar" "content" $content }} +{{ $.AddPage $page }} + +` + + b := hugolib.TestRunning(t, files) + + b.AssertFileContent("public/s1/index.html", "Title: foo|") + b.AssertFileContent("public/s2/index.html", "Title: bar|", "Content:

The Hunchback of Notre Dame was written by Victor Hugo.

") + + b.EditFileReplaceAll("content/_index.md", "foo", "baz").Build() + + b.AssertFileContent("public/s1/index.html", "Title: baz|") +} diff --git a/resources/page/page_matcher.go b/resources/page/page_matcher.go index 1e98b0836..27a7c7e9e 100644 --- a/resources/page/page_matcher.go +++ b/resources/page/page_matcher.go @@ -16,6 +16,7 @@ package page import ( "fmt" "path/filepath" + "slices" "strings" "github.com/gohugoio/hugo/common/loggers" @@ -24,7 +25,6 @@ import ( "github.com/gohugoio/hugo/hugofs/glob" "github.com/gohugoio/hugo/resources/kinds" "github.com/mitchellh/mapstructure" - "slices" ) // A PageMatcher can be used to match a Page with Glob patterns. @@ -105,7 +105,7 @@ func CheckCascadePattern(logger loggers.Logger, m PageMatcher) { } } -func DecodeCascadeConfig(logger loggers.Logger, in any) (*config.ConfigNamespace[[]PageMatcherParamsConfig, *maps.Ordered[PageMatcher, maps.Params]], error) { +func DecodeCascadeConfig(logger loggers.Logger, handleLegacyFormat bool, in any) (*config.ConfigNamespace[[]PageMatcherParamsConfig, *maps.Ordered[PageMatcher, maps.Params]], error) { buildConfig := func(in any) (*maps.Ordered[PageMatcher, maps.Params], any, error) { cascade := maps.NewOrdered[PageMatcher, maps.Params]() if in == nil { @@ -120,7 +120,15 @@ func DecodeCascadeConfig(logger loggers.Logger, in any) (*config.ConfigNamespace for _, m := range ms { m = maps.CleanConfigStringMap(m) - c, err := mapToPageMatcherParamsConfig(m) + var ( + c PageMatcherParamsConfig + err error + ) + if handleLegacyFormat { + c, err = mapToPageMatcherParamsConfigLegacy(m) + } else { + c, err = mapToPageMatcherParamsConfig(m) + } if err != nil { return nil, nil, err } @@ -155,8 +163,8 @@ func DecodeCascadeConfig(logger loggers.Logger, in any) (*config.ConfigNamespace } // DecodeCascade decodes in which could be either a map or a slice of maps. -func DecodeCascade(logger loggers.Logger, in any) (*maps.Ordered[PageMatcher, maps.Params], error) { - conf, err := DecodeCascadeConfig(logger, in) +func DecodeCascade(logger loggers.Logger, handleLegacyFormat bool, in any) (*maps.Ordered[PageMatcher, maps.Params], error) { + conf, err := DecodeCascadeConfig(logger, handleLegacyFormat, in) if err != nil { return nil, err } @@ -164,6 +172,26 @@ func DecodeCascade(logger loggers.Logger, in any) (*maps.Ordered[PageMatcher, ma } func mapToPageMatcherParamsConfig(m map[string]any) (PageMatcherParamsConfig, error) { + var pcfg PageMatcherParamsConfig + for k, v := range m { + switch strings.ToLower(k) { + case "_target", "target": + var target PageMatcher + if err := decodePageMatcher(v, &target); err != nil { + return pcfg, err + } + pcfg.Target = target + default: + if pcfg.Params == nil { + pcfg.Params = make(maps.Params) + } + pcfg.Params[k] = v + } + } + return pcfg, pcfg.init() +} + +func mapToPageMatcherParamsConfigLegacy(m map[string]any) (PageMatcherParamsConfig, error) { var pcfg PageMatcherParamsConfig for k, v := range m { switch strings.ToLower(k) { @@ -190,7 +218,6 @@ func mapToPageMatcherParamsConfig(m map[string]any) (PageMatcherParamsConfig, er } pcfg.Target = target default: - // Legacy config. if pcfg.Params == nil { pcfg.Params = make(maps.Params) } diff --git a/resources/page/page_matcher_test.go b/resources/page/page_matcher_test.go index bc072ce15..2fe6ccc89 100644 --- a/resources/page/page_matcher_test.go +++ b/resources/page/page_matcher_test.go @@ -84,7 +84,7 @@ func TestPageMatcher(t *testing.T) { c.Run("mapToPageMatcherParamsConfig", func(c *qt.C) { fn := func(m map[string]any) PageMatcherParamsConfig { - v, err := mapToPageMatcherParamsConfig(m) + v, err := mapToPageMatcherParamsConfigLegacy(m) c.Assert(err, qt.IsNil) return v } @@ -129,7 +129,7 @@ func TestDecodeCascadeConfig(t *testing.T) { }, } - got, err := DecodeCascadeConfig(loggers.NewDefault(), in) + got, err := DecodeCascadeConfig(loggers.NewDefault(), true, in) c.Assert(err, qt.IsNil) c.Assert(got, qt.IsNotNil) @@ -143,7 +143,7 @@ func TestDecodeCascadeConfig(t *testing.T) { {Params: maps.Params{"b": string("bv")}, Target: PageMatcher{Kind: "page"}}, }) - got, err = DecodeCascadeConfig(loggers.NewDefault(), nil) + got, err = DecodeCascadeConfig(loggers.NewDefault(), true, nil) c.Assert(err, qt.IsNil) c.Assert(got, qt.IsNotNil) } diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go index eb52e5055..7dea7ca6b 100644 --- a/resources/page/pagemeta/page_frontmatter.go +++ b/resources/page/pagemeta/page_frontmatter.go @@ -33,6 +33,7 @@ import ( "github.com/gohugoio/hugo/resources/kinds" "github.com/gohugoio/hugo/resources/page" "github.com/gohugoio/hugo/resources/resource" + "github.com/mitchellh/mapstructure" "github.com/gohugoio/hugo/helpers" @@ -75,35 +76,43 @@ func (d Dates) IsAllDatesZero() bool { return d.Date.IsZero() && d.Lastmod.IsZero() && d.PublishDate.IsZero() && d.ExpiryDate.IsZero() } +// Page config that needs to be set early. These cannot be modified by cascade. +type PageConfigEarly struct { + Kind string // The kind of page, e.g. "page", "section", "home" etc. This is usually derived from the content path. + Path string // The canonical path to the page, e.g. /sect/mypage. Note: Leading slash, no trailing slash, no extensions or language identifiers. + Lang string // The language code for this page. This is usually derived from the module mount or filename. + Cascade []map[string]any + + // Content holds the content for this page. + Content Source +} + // PageConfig configures a Page, typically from front matter. // Note that all the top level fields are reserved Hugo keywords. // Any custom configuration needs to be set in the Params map. type PageConfig struct { Dates Dates `json:"-"` // Dates holds the four core dates for this page. DatesStrings - Title string // The title of the page. - LinkTitle string // The link title of the page. - Type string // The content type of the page. - Layout string // The layout to use for to render this page. - Weight int // The weight of the page, used in sorting if set to a non-zero value. - Kind string // The kind of page, e.g. "page", "section", "home" etc. This is usually derived from the content path. - Path string // The canonical path to the page, e.g. /sect/mypage. Note: Leading slash, no trailing slash, no extensions or language identifiers. - Lang string // The language code for this page. This is usually derived from the module mount or filename. - URL string // The URL to the rendered page, e.g. /sect/mypage.html. - Slug string // The slug for this page. - Description string // The description for this page. - Summary string // The summary for this page. - Draft bool // Whether or not the content is a draft. - Headless bool `json:"-"` // Whether or not the page should be rendered. - IsCJKLanguage bool // Whether or not the content is in a CJK language. - TranslationKey string // The translation key for this page. - Keywords []string // The keywords for this page. - Aliases []string // The aliases for this page. - Outputs []string // The output formats to render this page in. If not set, the site's configured output formats for this page kind will be used. + PageConfigEarly `mapstructure:",squash"` + Title string // The title of the page. + LinkTitle string // The link title of the page. + Type string // The content type of the page. + Layout string // The layout to use for to render this page. + Weight int // The weight of the page, used in sorting if set to a non-zero value. + URL string // The URL to the rendered page, e.g. /sect/mypage.html. + Slug string // The slug for this page. + Description string // The description for this page. + Summary string // The summary for this page. + Draft bool // Whether or not the content is a draft. + Headless bool `json:"-"` // Whether or not the page should be rendered. + IsCJKLanguage bool // Whether or not the content is in a CJK language. + TranslationKey string // The translation key for this page. + Keywords []string // The keywords for this page. + Aliases []string // The aliases for this page. + Outputs []string // The output formats to render this page in. If not set, the site's configured output formats for this page kind will be used. FrontMatterOnlyValues `mapstructure:"-" json:"-"` - Cascade []map[string]any Sitemap config.SitemapConfig Build BuildConfig Menus any // Can be a string, []string or map[string]any. @@ -111,8 +120,9 @@ type PageConfig struct { // User defined params. Params maps.Params - // Content holds the content for this page. - Content Source + // The raw data from the content adapter. + // TODO(bep) clean up the ContentAdapterData vs Params. + ContentAdapterData map[string]any `mapstructure:"-" json:"-"` // Compiled values. CascadeCompiled *maps.Ordered[page.PageMatcher, maps.Params] `mapstructure:"-" json:"-"` @@ -121,6 +131,20 @@ type PageConfig struct { IsFromContentAdapter bool `mapstructure:"-" json:"-"` } +func ClonePageConfigForRebuild(p *PageConfig, params map[string]any) *PageConfig { + pp := &PageConfig{ + PageConfigEarly: p.PageConfigEarly, + IsFromContentAdapter: p.IsFromContentAdapter, + } + if pp.IsFromContentAdapter { + pp.ContentAdapterData = params + } else { + pp.Params = params + } + + return pp +} + var DefaultPageConfig = PageConfig{ Build: DefaultBuildConfig, } @@ -151,8 +175,7 @@ func (p *PageConfig) Validate(pagesFromData bool) error { return nil } -// Compile sets up the page configuration after all fields have been set. -func (p *PageConfig) Compile(basePath string, pagesFromData bool, ext string, logger loggers.Logger, outputFormats output.Formats, mediaTypes media.Types) error { +func (p *PageConfig) CompileForPagesFromDataPre(basePath string, logger loggers.Logger, mediaTypes media.Types) error { // In content adapters, we always get relative paths. if basePath != "" { p.Path = path.Join(basePath, p.Path) @@ -160,12 +183,32 @@ func (p *PageConfig) Compile(basePath string, pagesFromData bool, ext string, lo if p.Params == nil { p.Params = make(maps.Params) - } else if pagesFromData { - p.Params = maps.PrepareParamsClone(p.Params) } else { - maps.PrepareParams(p.Params) + p.Params = maps.PrepareParamsClone(p.Params) } + if p.Kind == "" { + p.Kind = kinds.KindPage + } + + if p.Cascade != nil { + cascade, err := page.DecodeCascade(logger, false, p.Cascade) + if err != nil { + return fmt.Errorf("failed to decode cascade: %w", err) + } + p.CascadeCompiled = cascade + } + + // Note that NormalizePathStringBasic will make sure that we don't preserve the unnormalized path. + // We do that when we create pages from the file system; mostly for backward compatibility, + // but also because people tend to use use the filename to name their resources (with spaces and all), + // and this isn't relevant when creating resources from an API where it's easy to add textual meta data. + p.Path = paths.NormalizePathStringBasic(p.Path) + + return p.compilePrePost("", mediaTypes) +} + +func (p *PageConfig) compilePrePost(ext string, mediaTypes media.Types) error { if p.Content.Markup == "" && p.Content.MediaType == "" { if ext == "" { ext = "md" @@ -196,6 +239,29 @@ func (p *PageConfig) Compile(basePath string, pagesFromData bool, ext string, lo if p.Content.Markup == "" { p.Content.Markup = p.ContentMediaType.SubType } + return nil +} + +// Compile sets up the page configuration after all fields have been set. +func (p *PageConfig) Compile(ext string, logger loggers.Logger, outputFormats output.Formats, mediaTypes media.Types) error { + if p.IsFromContentAdapter { + if err := mapstructure.WeakDecode(p.ContentAdapterData, p); err != nil { + err = fmt.Errorf("failed to decode page map: %w", err) + return err + } + // Not needed anymore. + p.ContentAdapterData = nil + } + + if p.Params == nil { + p.Params = make(maps.Params) + } else { + maps.PrepareParams(p.Params) + } + + if err := p.compilePrePost(ext, mediaTypes); err != nil { + return err + } if len(p.Outputs) > 0 { outFormats, err := outputFormats.GetByNames(p.Outputs...) @@ -206,27 +272,6 @@ func (p *PageConfig) Compile(basePath string, pagesFromData bool, ext string, lo } } - if pagesFromData { - if p.Kind == "" { - p.Kind = kinds.KindPage - } - - // Note that NormalizePathStringBasic will make sure that we don't preserve the unnormalized path. - // We do that when we create pages from the file system; mostly for backward compatibility, - // but also because people tend to use use the filename to name their resources (with spaces and all), - // and this isn't relevant when creating resources from an API where it's easy to add textual meta data. - p.Path = paths.NormalizePathStringBasic(p.Path) - - } - - if p.Cascade != nil { - cascade, err := page.DecodeCascade(logger, p.Cascade) - if err != nil { - return fmt.Errorf("failed to decode cascade: %w", err) - } - p.CascadeCompiled = cascade - } - return nil } diff --git a/resources/page/pagemeta/page_frontmatter_test.go b/resources/page/pagemeta/page_frontmatter_test.go index de2932391..8d50f9b57 100644 --- a/resources/page/pagemeta/page_frontmatter_test.go +++ b/resources/page/pagemeta/page_frontmatter_test.go @@ -176,7 +176,7 @@ func TestContentMediaTypeFromMarkup(t *testing.T) { } { var pc pagemeta.PageConfig pc.Content.Markup = test.in - c.Assert(pc.Compile("", true, "", logger, output.DefaultFormats, media.DefaultTypes), qt.IsNil) + c.Assert(pc.Compile("", logger, output.DefaultFormats, media.DefaultTypes), qt.IsNil) c.Assert(pc.ContentMediaType.Type, qt.Equals, test.expected) } } diff --git a/tpl/tplimpl/shortcodes_integration_test.go b/tpl/tplimpl/shortcodes_integration_test.go index 838dc16d7..665760dec 100644 --- a/tpl/tplimpl/shortcodes_integration_test.go +++ b/tpl/tplimpl/shortcodes_integration_test.go @@ -460,6 +460,7 @@ title: p1 (de) } func TestVimeoShortcode(t *testing.T) { + t.Skip("Fix me: Upstream API changes") t.Parallel() files := ` From bc98e7a80d2e7ef8042356a17cd455bcd5e3d05f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 11 May 2025 11:54:34 +0200 Subject: [PATCH 11/70] config: Fix env override of slices Fixes #13707 --- .../allconfig/allconfig_integration_test.go | 22 +++++++ config/allconfig/load.go | 63 +++++++++++-------- 2 files changed, 59 insertions(+), 26 deletions(-) diff --git a/config/allconfig/allconfig_integration_test.go b/config/allconfig/allconfig_integration_test.go index f8fbb22f7..8f6cacf84 100644 --- a/config/allconfig/allconfig_integration_test.go +++ b/config/allconfig/allconfig_integration_test.go @@ -357,3 +357,25 @@ All. b.Assert(b.H.Conf.DefaultContentLanguage(), qt.Equals, "sv") } + +func TestDefaultConfigEnvDisableLanguagesIssue13707(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableLanguages = [] +[languages] +[languages.en] +weight = 1 +[languages.nn] +weight = 2 +[languages.sv] +weight = 3 +` + + b := hugolib.Test(t, files, hugolib.TestOptWithConfig(func(conf *hugolib.IntegrationTestConfig) { + conf.Environ = []string{`HUGO_DISABLELANGUAGES=sv nn`} + })) + + b.Assert(len(b.H.Sites), qt.Equals, 1) +} diff --git a/config/allconfig/load.go b/config/allconfig/load.go index 2d9185f6f..4fb8bbaef 100644 --- a/config/allconfig/load.go +++ b/config/allconfig/load.go @@ -233,40 +233,51 @@ func (l configLoader) applyOsEnvOverrides(environ []string) error { if existing != nil { val, err := metadecoders.Default.UnmarshalStringTo(env.Value, existing) - if err != nil { + if err == nil { + val = l.envValToVal(env.Key, val) + if owner != nil { + owner[nestedKey] = val + } else { + l.cfg.Set(env.Key, val) + } continue } - - if owner != nil { - owner[nestedKey] = val - } else { - l.cfg.Set(env.Key, val) - } - } else { - if nestedKey != "" { - owner[nestedKey] = env.Value - } else { - var val any - key := strings.ReplaceAll(env.Key, delim, ".") - _, ok := allDecoderSetups[key] - if ok { - // A map. - if v, err := metadecoders.Default.UnmarshalStringTo(env.Value, map[string]any{}); err == nil { - val = v - } - } - if val == nil { - // A string. - val = l.envStringToVal(key, env.Value) - } - l.cfg.Set(key, val) - } } + + if owner != nil && nestedKey != "" { + owner[nestedKey] = env.Value + } else { + var val any + key := strings.ReplaceAll(env.Key, delim, ".") + _, ok := allDecoderSetups[key] + if ok { + // A map. + if v, err := metadecoders.Default.UnmarshalStringTo(env.Value, map[string]any{}); err == nil { + val = v + } + } + + if val == nil { + // A string. + val = l.envStringToVal(key, env.Value) + } + l.cfg.Set(key, val) + } + } return nil } +func (l *configLoader) envValToVal(k string, v any) any { + switch v := v.(type) { + case string: + return l.envStringToVal(k, v) + default: + return v + } +} + func (l *configLoader) envStringToVal(k, v string) any { switch k { case "disablekinds", "disablelanguages": From 6def5a1ba9c7d3a54254969a607a8261cbaf91aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 12 May 2025 12:10:27 +0200 Subject: [PATCH 12/70] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e0b3f1567..9befa9c9d 100644 --- a/README.md +++ b/README.md @@ -65,9 +65,11 @@ See the [features] section of the documentation for a comprehensive summary of H

 

- Linode + Linode     - The complete IDE crafted for professional Go developers. + The complete IDE crafted for professional Go developers. +     + PinMe.

## Editions From 81426998b87592f32d73d48667ba8ec03f266791 Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Sun, 11 May 2025 11:39:42 -0700 Subject: [PATCH 13/70] tpl/tplimpl: Change calls to simple versions of embedded shortcodes Closes #13700 --- tpl/tplimpl/embedded/templates/_shortcodes/twitter.html | 2 +- tpl/tplimpl/embedded/templates/_shortcodes/vimeo.html | 2 +- tpl/tplimpl/embedded/templates/_shortcodes/x.html | 2 +- tpl/tplimpl/shortcodes_integration_test.go | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tpl/tplimpl/embedded/templates/_shortcodes/twitter.html b/tpl/tplimpl/embedded/templates/_shortcodes/twitter.html index ce356559d..849bad99e 100644 --- a/tpl/tplimpl/embedded/templates/_shortcodes/twitter.html +++ b/tpl/tplimpl/embedded/templates/_shortcodes/twitter.html @@ -2,7 +2,7 @@ {{- $pc := site.Config.Privacy.Twitter -}} {{- if not $pc.Disable -}} {{- if $pc.Simple -}} - {{- template "_internal/shortcodes/twitter_simple.html" . -}} + {{- template "_shortcodes/twitter_simple.html" . -}} {{- else -}} {{- $id := or (.Get "id") "" -}} {{- $user := or (.Get "user") "" -}} diff --git a/tpl/tplimpl/embedded/templates/_shortcodes/vimeo.html b/tpl/tplimpl/embedded/templates/_shortcodes/vimeo.html index 2588ac86c..fb8ea0d97 100644 --- a/tpl/tplimpl/embedded/templates/_shortcodes/vimeo.html +++ b/tpl/tplimpl/embedded/templates/_shortcodes/vimeo.html @@ -18,7 +18,7 @@ title, then loading. {{- $pc := site.Config.Privacy.Vimeo }} {{- if not $pc.Disable }} {{- if $pc.Simple }} - {{- template "_internal/shortcodes/vimeo_simple.html" . }} + {{- template "_shortcodes/vimeo_simple.html" . }} {{- else }} {{- $dnt := cond $pc.EnableDNT 1 0 }} diff --git a/tpl/tplimpl/embedded/templates/_shortcodes/x.html b/tpl/tplimpl/embedded/templates/_shortcodes/x.html index 28a5e331b..87455530c 100644 --- a/tpl/tplimpl/embedded/templates/_shortcodes/x.html +++ b/tpl/tplimpl/embedded/templates/_shortcodes/x.html @@ -1,7 +1,7 @@ {{- $pc := site.Config.Privacy.X -}} {{- if not $pc.Disable -}} {{- if $pc.Simple -}} - {{- template "_internal/shortcodes/x_simple.html" . -}} + {{- template "_shortcodes/x_simple.html" . -}} {{- else -}} {{- $id := or (.Get "id") "" -}} {{- $user := or (.Get "user") "" -}} diff --git a/tpl/tplimpl/shortcodes_integration_test.go b/tpl/tplimpl/shortcodes_integration_test.go index 665760dec..838dc16d7 100644 --- a/tpl/tplimpl/shortcodes_integration_test.go +++ b/tpl/tplimpl/shortcodes_integration_test.go @@ -460,7 +460,6 @@ title: p1 (de) } func TestVimeoShortcode(t *testing.T) { - t.Skip("Fix me: Upstream API changes") t.Parallel() files := ` From 05417512bd001c0b2cc0042dcc584575825b89b3 Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Mon, 12 May 2025 12:25:03 +0000 Subject: [PATCH 14/70] releaser: Bump versions for release of 0.147.3 [ci skip] --- common/hugo/version_current.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index ba367ceb5..b7967573d 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 148, - PatchLevel: 0, - Suffix: "-DEV", + Minor: 147, + PatchLevel: 3, + Suffix: "", } From e6574cf7a778bf2bf14bb635668f5aa84f8175ed Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Mon, 12 May 2025 12:40:04 +0000 Subject: [PATCH 15/70] releaser: Prepare repository for 0.148.0-DEV [ci skip] --- common/hugo/version_current.go | 6 +++--- hugoreleaser.env | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index b7967573d..ba367ceb5 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 147, - PatchLevel: 3, - Suffix: "", + Minor: 148, + PatchLevel: 0, + Suffix: "-DEV", } diff --git a/hugoreleaser.env b/hugoreleaser.env index 5d373cd71..82c1a31e7 100644 --- a/hugoreleaser.env +++ b/hugoreleaser.env @@ -1,7 +1,8 @@ # Release env. # These will be replaced by script before release. -HUGORELEASER_TAG=v0.147.2 -HUGORELEASER_COMMITISH=c7feb15d10b29a94d7fb57c31e8bcb2e92718fb7 +HUGORELEASER_TAG=v0.147.3 +HUGORELEASER_COMMITISH=05417512bd001c0b2cc0042dcc584575825b89b3 + From 6142bc701cc3b0b0ac59287d22e81de552e1382b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 16 May 2025 09:26:17 +0200 Subject: [PATCH 16/70] tpl: Fix theme overrides when theme has old layout setup (e.g. _default) Fixes #13715 --- tpl/tplimpl/templatestore.go | 21 +++++++++++++------ tpl/tplimpl/templatestore_integration_test.go | 17 +++++++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/tpl/tplimpl/templatestore.go b/tpl/tplimpl/templatestore.go index 53880eb33..c6a6d4cd5 100644 --- a/tpl/tplimpl/templatestore.go +++ b/tpl/tplimpl/templatestore.go @@ -1133,12 +1133,21 @@ func (s *TemplateStore) insertTemplate2( tree.Insert(key, m) } - if !replace { - if v, found := m[nk]; found { - if len(pi.Identifiers()) >= len(v.PathInfo.Identifiers()) { - // e.g. /pages/home.foo.html and /pages/home.html where foo may be a valid language name in another site. - return nil, nil - } + nkExisting, existingFound := m[nk] + if !replace && existingFound && fi != nil && nkExisting.Fi != nil { + // See issue #13715. + // We do the merge on the file system level, but from Hugo v0.146.0 we have a situation where + // the project may well have a different layouts layout compared to the theme(s) it uses. + // We could possibly have fixed that on a lower (file system) level, but since this is just + // a temporary situation (until all projects are updated), + // do a replace here if the file comes from higher up in the module chain. + replace = fi.Meta().ModuleOrdinal < nkExisting.Fi.Meta().ModuleOrdinal + } + + if !replace && existingFound { + if len(pi.Identifiers()) >= len(nkExisting.PathInfo.Identifiers()) { + // e.g. /pages/home.foo.html and /pages/home.html where foo may be a valid language name in another site. + return nil, nil } } diff --git a/tpl/tplimpl/templatestore_integration_test.go b/tpl/tplimpl/templatestore_integration_test.go index 75ec0376f..e10d7149a 100644 --- a/tpl/tplimpl/templatestore_integration_test.go +++ b/tpl/tplimpl/templatestore_integration_test.go @@ -1103,6 +1103,23 @@ All. b.AssertLogContains("unrecognized render hook") } +func TestLayoutOverrideThemeWhenThemeOnOldFormatIssue13715(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +theme = "mytheme" +-- layouts/list.html -- + layouts/list.html +-- themes/mytheme/layouts/_default/list.html -- +mytheme/layouts/_default/list.html + +` + + b := hugolib.Test(t, files) + b.AssertFileContent("public/index.html", "layouts/list.html") +} + func BenchmarkExecuteWithContext(b *testing.B) { files := ` -- hugo.toml -- From 61317821e463f8c6e980de6d0c27188148464c04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 16 May 2025 10:36:05 +0200 Subject: [PATCH 17/70] tpl: Narrow down the usage of plain text shortcodes when rendering HTML After this commit, if you want to resolve `layouts/_shortcodes/myshortcode.txt` when rendering HTML content, you need to use the `{{%` shortcode delimiter: ``` {{% myshortcode %}} ``` This should be what people would do anyway, but we have also as part of this improved the error message to inform about what needs to be done. Note that this is not relevant for partials. Fixes #13698 --- hugolib/shortcode.go | 9 ++-- hugolib/shortcode_test.go | 6 +-- tpl/tplimpl/shortcodes_integration_test.go | 33 +++++++++++++ tpl/tplimpl/templatedescriptor.go | 21 ++++++--- tpl/tplimpl/templatestore.go | 46 +++++++++++++++---- tpl/tplimpl/templatestore_integration_test.go | 36 ++++++++++++++- 6 files changed, 127 insertions(+), 24 deletions(-) diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go index cc8a145d9..56bf1ff9e 100644 --- a/hugolib/shortcode.go +++ b/hugolib/shortcode.go @@ -398,6 +398,10 @@ func doRenderShortcode( return true } base, layoutDescriptor := po.GetInternalTemplateBasePathAndDescriptor() + + // With shortcodes/mymarkdown.md (only), this allows {{% mymarkdown %}} when rendering HTML, + // but will not resolve any template when doing {{< mymarkdown >}}. + layoutDescriptor.AlwaysAllowPlainText = sc.doMarkup q := tplimpl.TemplateQuery{ Path: base, Name: sc.name, @@ -405,10 +409,9 @@ func doRenderShortcode( Desc: layoutDescriptor, Consider: include, } - v := s.TemplateStore.LookupShortcode(q) + v, err := s.TemplateStore.LookupShortcode(q) if v == nil { - s.Log.Errorf("Unable to locate template for shortcode %q in page %q", sc.name, p.File().Path()) - return zeroShortcode, nil + return zeroShortcode, err } tmpl = v hasVariants = hasVariants || len(ofCount) > 1 diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go index f1d90e22e..a1f12e77a 100644 --- a/hugolib/shortcode_test.go +++ b/hugolib/shortcode_test.go @@ -918,7 +918,7 @@ func TestShortcodeMarkdownOutputFormat(t *testing.T) { --- title: "p1" --- -{{< foo >}} +{{% foo %}} # The below would have failed using the HTML template parser. -- layouts/shortcodes/foo.md -- §§§ @@ -930,9 +930,7 @@ title: "p1" b := Test(t, files) - b.AssertFileContent("public/p1/index.html", ` -<x") } func TestShortcodePreserveIndentation(t *testing.T) { diff --git a/tpl/tplimpl/shortcodes_integration_test.go b/tpl/tplimpl/shortcodes_integration_test.go index 838dc16d7..e65f82eab 100644 --- a/tpl/tplimpl/shortcodes_integration_test.go +++ b/tpl/tplimpl/shortcodes_integration_test.go @@ -17,6 +17,7 @@ import ( "strings" "testing" + qt "github.com/frankban/quicktest" "github.com/gohugoio/hugo/htesting/hqt" "github.com/gohugoio/hugo/hugolib" ) @@ -696,3 +697,35 @@ title: p2 b.AssertFileContent("public/p1/index.html", "78eb19b5c6f3768f") b.AssertFileContent("public/p2/index.html", "a6db910a9cf54bc1") } + +func TestShortcodePlainTextVsHTMLTemplateIssue13698(t *testing.T) { + t.Parallel() + + filesTemplate := ` +-- hugo.toml -- +markup.goldmark.renderer.unsafe = true +-- layouts/all.html -- +Content: {{ .Content }}| +-- layouts/_shortcodes/mymarkdown.md -- +
Foo bar
+-- content/p1.md -- +--- +title: p1 +--- +## A shortcode + +SHORTCODE + +` + + files := strings.ReplaceAll(filesTemplate, "SHORTCODE", "{{% mymarkdown %}}") + b := hugolib.Test(t, files) + b.AssertFileContent("public/p1/index.html", "
Foo bar
") + + files = strings.ReplaceAll(filesTemplate, "SHORTCODE", "{{< mymarkdown >}}") + + var err error + b, err = hugolib.TestE(t, files) + b.Assert(err, qt.IsNotNil) + b.Assert(err.Error(), qt.Contains, `no compatible template found for shortcode "mymarkdown" in [/_shortcodes/mymarkdown.md]; note that to use plain text template shortcodes in HTML you need to use the shortcode {{% delimiter`) +} diff --git a/tpl/tplimpl/templatedescriptor.go b/tpl/tplimpl/templatedescriptor.go index ea47afc88..fd86f15fa 100644 --- a/tpl/tplimpl/templatedescriptor.go +++ b/tpl/tplimpl/templatedescriptor.go @@ -37,6 +37,7 @@ type TemplateDescriptor struct { // Misc. LayoutFromUserMustMatch bool // If set, we only look for the exact layout. IsPlainText bool // Whether this is a plain text template. + AlwaysAllowPlainText bool // Whether to e.g. allow plain text templates to be rendered in HTML. } func (d *TemplateDescriptor) normalizeFromFile() { @@ -64,7 +65,7 @@ func (s descriptorHandler) compareDescriptors(category Category, isEmbedded bool return weightNoMatch } - w := this.doCompare(category, isEmbedded, s.opts.DefaultContentLanguage, other) + w := this.doCompare(category, s.opts.DefaultContentLanguage, other) if w.w1 <= 0 { if category == CategoryMarkup && (this.Variant1 == other.Variant1) && (this.Variant2 == other.Variant2 || this.Variant2 != "" && other.Variant2 == "") { @@ -74,7 +75,12 @@ func (s descriptorHandler) compareDescriptors(category Category, isEmbedded bool } w.w1 = 1 - return w + } + + if category == CategoryShortcode { + if (this.IsPlainText == other.IsPlainText || !other.IsPlainText) || this.AlwaysAllowPlainText { + w.w1 = 1 + } } } @@ -82,13 +88,16 @@ func (s descriptorHandler) compareDescriptors(category Category, isEmbedded bool } //lint:ignore ST1006 this vs other makes it easier to reason about. -func (this TemplateDescriptor) doCompare(category Category, isEmbedded bool, defaultContentLanguage string, other TemplateDescriptor) weight { +func (this TemplateDescriptor) doCompare(category Category, defaultContentLanguage string, other TemplateDescriptor) weight { w := weightNoMatch - // HTML in plain text is OK, but not the other way around. - if other.IsPlainText && !this.IsPlainText { - return w + if !this.AlwaysAllowPlainText { + // HTML in plain text is OK, but not the other way around. + if other.IsPlainText && !this.IsPlainText { + return w + } } + if other.Kind != "" && other.Kind != this.Kind { return w } diff --git a/tpl/tplimpl/templatestore.go b/tpl/tplimpl/templatestore.go index c6a6d4cd5..2ea337274 100644 --- a/tpl/tplimpl/templatestore.go +++ b/tpl/tplimpl/templatestore.go @@ -19,6 +19,7 @@ import ( "bytes" "context" "embed" + "errors" "fmt" "io" "io/fs" @@ -608,7 +609,7 @@ func (s *TemplateStore) LookupShortcodeByName(name string) *TemplInfo { return ti } -func (s *TemplateStore) LookupShortcode(q TemplateQuery) *TemplInfo { +func (s *TemplateStore) LookupShortcode(q TemplateQuery) (*TemplInfo, error) { q.init() k1 := s.key(q.Path) @@ -630,13 +631,15 @@ func (s *TemplateStore) LookupShortcode(q TemplateQuery) *TemplInfo { } for k, vv := range v { + best.candidates = append(best.candidates, vv) if !q.Consider(vv) { continue } weight := s.dh.compareDescriptors(q.Category, vv.subCategory == SubCategoryEmbedded, q.Desc, k) weight.distance = distance - if best.isBetter(weight, vv) { + isBetter := best.isBetter(weight, vv) + if isBetter { best.updateValues(weight, k2, k, vv) } } @@ -644,8 +647,21 @@ func (s *TemplateStore) LookupShortcode(q TemplateQuery) *TemplInfo { return false, nil }) - // Any match will do. - return best.templ + if best.w.w1 <= 0 { + var err error + if s := best.candidatesAsStringSlice(); s != nil { + msg := fmt.Sprintf("no compatible template found for shortcode %q in %s", q.Name, s) + if !q.Desc.IsPlainText { + msg += "; note that to use plain text template shortcodes in HTML you need to use the shortcode {{% delimiter" + } + err = errors.New(msg) + } else { + err = fmt.Errorf("no template found for shortcode %q", q.Name) + } + return nil, err + } + + return best.templ, nil } // PrintDebug is for testing/debugging only. @@ -1817,10 +1833,11 @@ type TextTemplatHandler interface { } type bestMatch struct { - templ *TemplInfo - desc TemplateDescriptor - w weight - key string + templ *TemplInfo + desc TemplateDescriptor + w weight + key string + candidates []*TemplInfo // settings. defaultOutputformat string @@ -1831,6 +1848,18 @@ func (best *bestMatch) reset() { best.w = weight{} best.desc = TemplateDescriptor{} best.key = "" + best.candidates = nil +} + +func (best *bestMatch) candidatesAsStringSlice() []string { + if len(best.candidates) == 0 { + return nil + } + candidates := make([]string, len(best.candidates)) + for i, v := range best.candidates { + candidates[i] = v.PathInfo.Path() + } + return candidates } func (best *bestMatch) isBetter(w weight, ti *TemplInfo) bool { @@ -1840,7 +1869,6 @@ func (best *bestMatch) isBetter(w weight, ti *TemplInfo) bool { } if w.w1 <= 0 { - if best.w.w1 <= 0 { return ti.PathInfo.Path() < best.templ.PathInfo.Path() } diff --git a/tpl/tplimpl/templatestore_integration_test.go b/tpl/tplimpl/templatestore_integration_test.go index e10d7149a..0b3ce7a56 100644 --- a/tpl/tplimpl/templatestore_integration_test.go +++ b/tpl/tplimpl/templatestore_integration_test.go @@ -920,6 +920,26 @@ func TestPartialHTML(t *testing.T) { b.AssertFileContent("public/index.html", "") } +func TestPartialPlainTextInHTML(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +-- layouts/all.html -- + + +{{ partial "mypartial.txt" . }} + + +-- layouts/partials/mypartial.txt -- +My
partial
. +` + + b := hugolib.Test(t, files) + + b.AssertFileContent("public/index.html", "My <div>partial</div>.") +} + // Issue #13593. func TestGoatAndNoGoat(t *testing.T) { t.Parallel() @@ -1103,6 +1123,18 @@ All. b.AssertLogContains("unrecognized render hook") } +func TestLayoutNotFound(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +-- layouts/single.html -- +Single. +` + b := hugolib.Test(t, files, hugolib.TestOptWarn()) + b.AssertLogContains("WARN found no layout file for \"html\" for kind \"home\"") +} + func TestLayoutOverrideThemeWhenThemeOnOldFormatIssue13715(t *testing.T) { t.Parallel() @@ -1214,8 +1246,8 @@ s2. Category: tplimpl.CategoryShortcode, Desc: desc, } - v := store.LookupShortcode(q) - if v == nil { + v, err := store.LookupShortcode(q) + if v == nil || err != nil { b.Fatal("not found") } } From 5a81a3a4cf8fc0a75a5b7d1f1552664542592c48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sat, 17 May 2025 13:34:37 +0200 Subject: [PATCH 18/70] tpl: Add a test case I'm not able to reproduce this, but leaving it in. Closes #13699 --- tpl/tplimpl/shortcodes_integration_test.go | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tpl/tplimpl/shortcodes_integration_test.go b/tpl/tplimpl/shortcodes_integration_test.go index e65f82eab..e884c9a8d 100644 --- a/tpl/tplimpl/shortcodes_integration_test.go +++ b/tpl/tplimpl/shortcodes_integration_test.go @@ -729,3 +729,31 @@ SHORTCODE b.Assert(err, qt.IsNotNil) b.Assert(err.Error(), qt.Contains, `no compatible template found for shortcode "mymarkdown" in [/_shortcodes/mymarkdown.md]; note that to use plain text template shortcodes in HTML you need to use the shortcode {{% delimiter`) } + +func TestShortcodeOnlyLanguageInBaseIssue13699(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +baseURL = 'https://example.org/' +[languages] +[languages.en] +weight = 1 +disableLanguages = ['de'] +[languages.de] +weight = 2 +-- layouts/_shortcodes/de.html -- +de.html +-- layouts/all.html -- +{{ .Content }} +-- content/_index.md -- +--- +title: home +--- +{{< de >}} + +` + b := hugolib.Test(t, files) + + b.AssertFileContent("public/index.html", "de.html") +} From a03a245f0c00f05d7b0a224e42595092e3210cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 19 May 2025 12:08:40 +0200 Subject: [PATCH 19/70] Fix it so css.TailwindCSS inlineImports options isn't always enabled To avoid breaking existing setup and to make a better default option, the option is now `disableInlineImports` (default false). Fixes #13719 --- .../resource_transformers/cssjs/postcss.go | 6 +- .../cssjs/tailwindcss.go | 14 ++-- .../cssjs/tailwindcss_integration_test.go | 64 +++++++++++++++++++ 3 files changed, 79 insertions(+), 5 deletions(-) diff --git a/resources/resource_transformers/cssjs/postcss.go b/resources/resource_transformers/cssjs/postcss.go index 1a9e01142..98bdc9249 100644 --- a/resources/resource_transformers/cssjs/postcss.go +++ b/resources/resource_transformers/cssjs/postcss.go @@ -69,7 +69,6 @@ func (c *PostCSSClient) Process(res resources.ResourceTransformer, options map[s } type InlineImports struct { - // Service `mapstructure:",squash"` // Enable inlining of @import statements. // Does so recursively, but currently once only per file; // that is, it's not possible to import the same file in @@ -78,6 +77,11 @@ type InlineImports struct { // so you can have @import anywhere in the file. InlineImports bool + // See issue https://github.com/gohugoio/hugo/issues/13719 + // Disable inlining of @import statements + // This is currenty only used for css.TailwindCSS. + DisableInlineImports bool + // When InlineImports is enabled, we fail the build if an import cannot be resolved. // You can enable this to allow the build to continue and leave the import statement in place. // Note that the inline importer does not process url location or imports with media queries, diff --git a/resources/resource_transformers/cssjs/tailwindcss.go b/resources/resource_transformers/cssjs/tailwindcss.go index beda7a646..a60a16222 100644 --- a/resources/resource_transformers/cssjs/tailwindcss.go +++ b/resources/resource_transformers/cssjs/tailwindcss.go @@ -129,9 +129,11 @@ func (t *tailwindcssTransformation) Transform(ctx *resources.ResourceTransformat t.rs.Assets.Fs, t.rs.Logger, ctx.DependencyManager, ) - src, err = imp.resolve() - if err != nil { - return err + if !options.InlineImports.DisableInlineImports { + src, err = imp.resolve() + if err != nil { + return err + } } go func() { @@ -146,7 +148,11 @@ func (t *tailwindcssTransformation) Transform(ctx *resources.ResourceTransformat Cause: err, } } - return imp.toFileError(errBuf.String()) + s := errBuf.String() + if options.InlineImports.DisableInlineImports && strings.Contains(s, "Can't resolve") { + s += "You may want to set the 'disableInlineImports' option to false to inline imports, see https://gohugo.io/functions/css/tailwindcss/#disableinlineimports" + } + return imp.toFileError(s) } return nil diff --git a/resources/resource_transformers/cssjs/tailwindcss_integration_test.go b/resources/resource_transformers/cssjs/tailwindcss_integration_test.go index ae70042a0..734ffe759 100644 --- a/resources/resource_transformers/cssjs/tailwindcss_integration_test.go +++ b/resources/resource_transformers/cssjs/tailwindcss_integration_test.go @@ -17,6 +17,7 @@ import ( "testing" "github.com/bep/logg" + qt "github.com/frankban/quicktest" "github.com/gohugoio/hugo/htesting" "github.com/gohugoio/hugo/hugolib" ) @@ -70,3 +71,66 @@ CSS: {{ $css.Content | safeCSS }}| b.AssertFileContent("public/index.html", "/*! tailwindcss v4.") } + +func TestTailwindCSSNoInlineImportsIssue13719(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['page','rss','section','sitemap','taxonomy','term'] +theme = 'my-theme' + +[[module.mounts]] +source = 'assets' +target = 'assets' + +[[module.mounts]] +source = 'other' +target = 'assets/css' +-- assets/css/main.css -- +@import "tailwindcss"; + +@import "colors/red.css"; +@import "colors/blue.css"; +@import "colors/purple.css"; +-- assets/css/colors/red.css -- +@import "green.css"; + +.red {color: red;} +-- assets/css/colors/green.css -- +.green {color: green;} +-- themes/my-theme/assets/css/colors/blue.css -- +.blue {color: blue;} +-- other/colors/purple.css -- +.purple {color: purple;} +-- layouts/home.html -- +{{ with (templates.Defer (dict "key" "global")) }} + {{ with resources.Get "css/main.css" }} + {{ $opts := dict "disableInlineImports" true }} + {{ with . | css.TailwindCSS $opts }} + + {{ end }} + {{ end }} +{{ end }} +-- package.json -- +{ + "devDependencies": { + "@tailwindcss/cli": "^4.1.7", + "tailwindcss": "^4.1.7" + } +} +` + + b, err := hugolib.NewIntegrationTestBuilder( + hugolib.IntegrationTestConfig{ + T: t, + TxtarString: files, + NeedsOsFS: true, + NeedsNpmInstall: true, + LogLevel: logg.LevelInfo, + }).BuildE() + + b.Assert(err, qt.IsNotNil) + b.Assert(err.Error(), qt.Contains, "Can't resolve 'colors/red.css'") + b.Assert(err.Error(), qt.Contains, "You may want to set the 'disableInlineImports' option to false") +} From 84c8426f328a946b2e10611431c450b352cecd11 Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Tue, 20 May 2025 10:41:19 +0000 Subject: [PATCH 20/70] releaser: Bump versions for release of 0.147.4 [ci skip] --- common/hugo/version_current.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index ba367ceb5..48deb2858 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 148, - PatchLevel: 0, - Suffix: "-DEV", + Minor: 147, + PatchLevel: 4, + Suffix: "", } From b9b95e5aec76220838dd09ff4296e97f9d0da23d Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Tue, 20 May 2025 10:55:43 +0000 Subject: [PATCH 21/70] releaser: Prepare repository for 0.148.0-DEV [ci skip] --- common/hugo/version_current.go | 6 +++--- hugoreleaser.env | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index 48deb2858..ba367ceb5 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 147, - PatchLevel: 4, - Suffix: "", + Minor: 148, + PatchLevel: 0, + Suffix: "-DEV", } diff --git a/hugoreleaser.env b/hugoreleaser.env index 82c1a31e7..288189bdf 100644 --- a/hugoreleaser.env +++ b/hugoreleaser.env @@ -1,7 +1,8 @@ # Release env. # These will be replaced by script before release. -HUGORELEASER_TAG=v0.147.3 -HUGORELEASER_COMMITISH=05417512bd001c0b2cc0042dcc584575825b89b3 +HUGORELEASER_TAG=v0.147.4 +HUGORELEASER_COMMITISH=84c8426f328a946b2e10611431c450b352cecd11 + From 970b887ba1bba83ca843b9ece16dbf01fa1a022d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 18:01:19 +0000 Subject: [PATCH 22/70] build(deps): bump github.com/tdewolff/minify/v2 from 2.20.37 to 2.23.5 Bumps [github.com/tdewolff/minify/v2](https://github.com/tdewolff/minify) from 2.20.37 to 2.23.5. - [Release notes](https://github.com/tdewolff/minify/releases) - [Commits](https://github.com/tdewolff/minify/compare/v2.20.37...v2.23.5) --- updated-dependencies: - dependency-name: github.com/tdewolff/minify/v2 dependency-version: 2.23.5 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 13 ++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 6a83524d6..c51a5fc52 100644 --- a/go.mod +++ b/go.mod @@ -66,8 +66,8 @@ require ( github.com/spf13/cobra v1.9.1 github.com/spf13/fsync v0.10.1 github.com/spf13/pflag v1.0.6 - github.com/tdewolff/minify/v2 v2.20.37 - github.com/tdewolff/parse/v2 v2.7.15 + github.com/tdewolff/minify/v2 v2.23.5 + github.com/tdewolff/parse/v2 v2.8.0 github.com/tetratelabs/wazero v1.9.0 github.com/yuin/goldmark v1.7.11 github.com/yuin/goldmark-emoji v1.0.6 diff --git a/go.sum b/go.sum index 7dd0507b6..a70bc0390 100644 --- a/go.sum +++ b/go.sum @@ -449,13 +449,12 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/tdewolff/minify/v2 v2.20.37 h1:Q97cx4STXCh1dlWDlNHZniE8BJ2EBL0+2b0n92BJQhw= -github.com/tdewolff/minify/v2 v2.20.37/go.mod h1:L1VYef/jwKw6Wwyk5A+T0mBjjn3mMPgmjjA688RNsxU= -github.com/tdewolff/parse/v2 v2.7.15 h1:hysDXtdGZIRF5UZXwpfn3ZWRbm+ru4l53/ajBRGpCTw= -github.com/tdewolff/parse/v2 v2.7.15/go.mod h1:3FbJWZp3XT9OWVN3Hmfp0p/a08v4h8J9W1aghka0soA= -github.com/tdewolff/test v1.0.11-0.20231101010635-f1265d231d52/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= -github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739 h1:IkjBCtQOOjIn03u/dMQK9g+Iw9ewps4mCl1nB8Sscbo= -github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= +github.com/tdewolff/minify/v2 v2.23.5 h1:/P548KcpTkIOUvNg22zN83/GiaYSOIrbqtoue4I7kYM= +github.com/tdewolff/minify/v2 v2.23.5/go.mod h1:2RI9tiIrzJU1Z5EasXEPaI1MqobRyxKHOOgrRkq5oEw= +github.com/tdewolff/parse/v2 v2.8.0 h1:jW0afj6zpUGXuZTwJ7/UfP2SddyLalb/SDryjaMTkA4= +github.com/tdewolff/parse/v2 v2.8.0/go.mod h1:Hwlni2tiVNKyzR1o6nUs4FOF07URA+JLBLd6dlIXYqo= +github.com/tdewolff/test v1.0.11 h1:FdLbwQVHxqG16SlkGveC0JVyrJN62COWTRyUFzfbtBE= +github.com/tdewolff/test v1.0.11/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I= github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= From 0c7b1a3f2679755b0fde3a230e15471f404b3aa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 21 May 2025 11:25:32 +0200 Subject: [PATCH 23/70] Fix live reload when editing inline partials Fixes #13723 --- hugolib/rebuild_test.go | 54 ++++++ .../htmltemplate/hugo_template.go | 14 ++ .../texttemplate/hugo_template.go | 16 ++ .../go_templates/texttemplate/parse/parse.go | 2 +- tpl/tplimpl/templates.go | 52 +++-- tpl/tplimpl/templatestore.go | 179 +++++++++++------- 6 files changed, 227 insertions(+), 90 deletions(-) diff --git a/hugolib/rebuild_test.go b/hugolib/rebuild_test.go index f5c0befcc..0b22b9aa7 100644 --- a/hugolib/rebuild_test.go +++ b/hugolib/rebuild_test.go @@ -1766,6 +1766,60 @@ MyTemplate: {{ partial "MyTemplate.html" . }}| b.AssertFileContent("public/index.html", "MyTemplate: MyTemplate Edited") } +func TestRebuildEditInlinePartial13723(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +baseURL = "https://example.com" +disableLiveReload = true +title = "Foo" +-- layouts/baseof.html -- +{{ block "main" . }}Main.{{ end }} +{{ partial "myinlinepartialinbaseof.html" . }}| + {{- define "_partials/myinlinepartialinbaseof.html" }} + My inline partial in baseof. + {{ end }} +-- layouts/_partials/mypartial.html -- +Mypartial. +{{ partial "myinlinepartial.html" . }}| +{{- define "_partials/myinlinepartial.html" }} +Mypartial Inline.|{{ .Title }}| +{{ end }} +-- layouts/_partials/myotherpartial.html -- +Myotherpartial. +{{ partial "myotherinlinepartial.html" . }}| +{{- define "_partials/myotherinlinepartial.html" }} +Myotherpartial Inline.|{{ .Title }}| +{{ return "myotherinlinepartial" }} +{{ end }} +-- layouts/all.html -- +{{ define "main" }} +{{ partial "mypartial.html" . }}| +{{ partial "myotherpartial.html" . }}| + {{ partial "myinlinepartialinall.html" . }}| +{{ end }} + {{- define "_partials/myinlinepartialinall.html" }} + My inline partial in all. + {{ end }} + +` + b := TestRunning(t, files) + b.AssertFileContent("public/index.html", "Mypartial.", "Mypartial Inline.|Foo") + + // Edit inline partial in partial. + b.EditFileReplaceAll("layouts/_partials/mypartial.html", "Mypartial Inline.", "Mypartial Inline Edited.").Build() + b.AssertFileContent("public/index.html", "Mypartial Inline Edited.|Foo") + + // Edit inline partial in baseof. + b.EditFileReplaceAll("layouts/baseof.html", "My inline partial in baseof.", "My inline partial in baseof Edited.").Build() + b.AssertFileContent("public/index.html", "My inline partial in baseof Edited.") + + // Edit inline partial in all. + b.EditFileReplaceAll("layouts/all.html", "My inline partial in all.", "My inline partial in all Edited.").Build() + b.AssertFileContent("public/index.html", "My inline partial in all Edited.") +} + func TestRebuildEditAsciidocContentFile(t *testing.T) { if !asciidocext.Supports() { t.Skip("skip asciidoc") diff --git a/tpl/internal/go_templates/htmltemplate/hugo_template.go b/tpl/internal/go_templates/htmltemplate/hugo_template.go index cb7d0dc25..d91baac70 100644 --- a/tpl/internal/go_templates/htmltemplate/hugo_template.go +++ b/tpl/internal/go_templates/htmltemplate/hugo_template.go @@ -15,6 +15,7 @@ package template import ( "fmt" + "iter" "github.com/gohugoio/hugo/common/types" template "github.com/gohugoio/hugo/tpl/internal/go_templates/texttemplate" @@ -38,6 +39,19 @@ func (t *Template) Prepare() (*template.Template, error) { return t.text, nil } +func (t *Template) All() iter.Seq[*Template] { + return func(yield func(t *Template) bool) { + ns := t.nameSpace + ns.mu.Lock() + defer ns.mu.Unlock() + for _, v := range ns.set { + if !yield(v) { + return + } + } + } +} + // See https://github.com/golang/go/issues/5884 func StripTags(html string) string { return stripTags(html) diff --git a/tpl/internal/go_templates/texttemplate/hugo_template.go b/tpl/internal/go_templates/texttemplate/hugo_template.go index d179cb8c9..4f505d8c5 100644 --- a/tpl/internal/go_templates/texttemplate/hugo_template.go +++ b/tpl/internal/go_templates/texttemplate/hugo_template.go @@ -17,6 +17,7 @@ import ( "context" "fmt" "io" + "iter" "reflect" "github.com/gohugoio/hugo/common/herrors" @@ -433,3 +434,18 @@ func (s *state) evalCall(dot, fun reflect.Value, isBuiltin bool, node parse.Node func isTrue(val reflect.Value) (truth, ok bool) { return hreflect.IsTruthfulValue(val), true } + +func (t *Template) All() iter.Seq[*Template] { + return func(yield func(t *Template) bool) { + if t.common == nil { + return + } + t.muTmpl.RLock() + defer t.muTmpl.RUnlock() + for _, v := range t.tmpl { + if !yield(v) { + return + } + } + } +} diff --git a/tpl/internal/go_templates/texttemplate/parse/parse.go b/tpl/internal/go_templates/texttemplate/parse/parse.go index 27c84f31e..e05a33d6f 100644 --- a/tpl/internal/go_templates/texttemplate/parse/parse.go +++ b/tpl/internal/go_templates/texttemplate/parse/parse.go @@ -533,7 +533,7 @@ func (t *Tree) parseControl(context string) (pos Pos, line int, pipe *PipeNode, t.rangeDepth-- } switch next.Type() { - case nodeEnd: //done + case nodeEnd: // done case nodeElse: // Special case for "else if" and "else with". // If the "else" is followed immediately by an "if" or "with", diff --git a/tpl/tplimpl/templates.go b/tpl/tplimpl/templates.go index 19de48e38..7aeb7e2b9 100644 --- a/tpl/tplimpl/templates.go +++ b/tpl/tplimpl/templates.go @@ -2,6 +2,7 @@ package tplimpl import ( "io" + "iter" "regexp" "strconv" "strings" @@ -44,16 +45,15 @@ var embeddedTemplatesAliases = map[string][]string{ "_shortcodes/twitter.html": {"_shortcodes/tweet.html"}, } -func (s *TemplateStore) parseTemplate(ti *TemplInfo) error { - err := s.tns.doParseTemplate(ti) +func (s *TemplateStore) parseTemplate(ti *TemplInfo, replace bool) error { + err := s.tns.doParseTemplate(ti, replace) if err != nil { return s.addFileContext(ti, "parse of template failed", err) } - return err } -func (t *templateNamespace) doParseTemplate(ti *TemplInfo) error { +func (t *templateNamespace) doParseTemplate(ti *TemplInfo, replace bool) error { if !ti.noBaseOf || ti.category == CategoryBaseof { // Delay parsing until we have the base template. return nil @@ -68,7 +68,7 @@ func (t *templateNamespace) doParseTemplate(ti *TemplInfo) error { if ti.D.IsPlainText { prototype := t.parseText - if prototype.Lookup(name) != nil { + if !replace && prototype.Lookup(name) != nil { name += "-" + strconv.FormatUint(t.nameCounter.Add(1), 10) } templ, err = prototype.New(name).Parse(ti.content) @@ -77,7 +77,7 @@ func (t *templateNamespace) doParseTemplate(ti *TemplInfo) error { } } else { prototype := t.parseHTML - if prototype.Lookup(name) != nil { + if !replace && prototype.Lookup(name) != nil { name += "-" + strconv.FormatUint(t.nameCounter.Add(1), 10) } templ, err = prototype.New(name).Parse(ti.content) @@ -181,19 +181,24 @@ func (t *templateNamespace) applyBaseTemplate(overlay *TemplInfo, base keyTempla return nil } -func (t *templateNamespace) templatesIn(in tpl.Template) []tpl.Template { - var templs []tpl.Template - if textt, ok := in.(*texttemplate.Template); ok { - for _, t := range textt.Templates() { - templs = append(templs, t) +func (t *templateNamespace) templatesIn(in tpl.Template) iter.Seq[tpl.Template] { + return func(yield func(t tpl.Template) bool) { + switch in := in.(type) { + case *htmltemplate.Template: + for t := range in.All() { + if !yield(t) { + return + } + } + + case *texttemplate.Template: + for t := range in.All() { + if !yield(t) { + return + } + } } } - if htmlt, ok := in.(*htmltemplate.Template); ok { - for _, t := range htmlt.Templates() { - templs = append(templs, t) - } - } - return templs } /* @@ -337,8 +342,6 @@ func (t *templateNamespace) createPrototypes(init bool) error { t.prototypeHTML = htmltemplate.Must(t.parseHTML.Clone()) t.prototypeText = texttemplate.Must(t.parseText.Clone()) } - // t.execHTML = htmltemplate.Must(t.parseHTML.Clone()) - // t.execText = texttemplate.Must(t.parseText.Clone()) return nil } @@ -350,3 +353,14 @@ func newTemplateNamespace(funcs map[string]any) *templateNamespace { standaloneText: texttemplate.New("").Funcs(funcs), } } + +func isText(t tpl.Template) bool { + switch t.(type) { + case *texttemplate.Template: + return true + case *htmltemplate.Template: + return false + default: + panic("unknown template type") + } +} diff --git a/tpl/tplimpl/templatestore.go b/tpl/tplimpl/templatestore.go index 2ea337274..bbb7f27cc 100644 --- a/tpl/tplimpl/templatestore.go +++ b/tpl/tplimpl/templatestore.go @@ -114,17 +114,18 @@ func NewStore(opts StoreOptions, siteOpts SiteOptions) (*TemplateStore, error) { panic("HTML output format not found") } s := &TemplateStore{ - opts: opts, - siteOpts: siteOpts, - optsOrig: opts, - siteOptsOrig: siteOpts, - htmlFormat: html, - storeSite: configureSiteStorage(siteOpts, opts.Watching), - treeMain: doctree.NewSimpleTree[map[nodeKey]*TemplInfo](), - treeShortcodes: doctree.NewSimpleTree[map[string]map[TemplateDescriptor]*TemplInfo](), - templatesByPath: maps.NewCache[string, *TemplInfo](), - shortcodesByName: maps.NewCache[string, *TemplInfo](), - cacheLookupPartials: maps.NewCache[string, *TemplInfo](), + opts: opts, + siteOpts: siteOpts, + optsOrig: opts, + siteOptsOrig: siteOpts, + htmlFormat: html, + storeSite: configureSiteStorage(siteOpts, opts.Watching), + treeMain: doctree.NewSimpleTree[map[nodeKey]*TemplInfo](), + treeShortcodes: doctree.NewSimpleTree[map[string]map[TemplateDescriptor]*TemplInfo](), + templatesByPath: maps.NewCache[string, *TemplInfo](), + shortcodesByName: maps.NewCache[string, *TemplInfo](), + cacheLookupPartials: maps.NewCache[string, *TemplInfo](), + templatesSnapshotSet: maps.NewCache[*parse.Tree, struct{}](), // Note that the funcs passed below is just for name validation. tns: newTemplateNamespace(siteOpts.TemplateFuncs), @@ -143,10 +144,10 @@ func NewStore(opts StoreOptions, siteOpts SiteOptions) (*TemplateStore, error) { if err := s.insertEmbedded(); err != nil { return nil, err } - if err := s.parseTemplates(); err != nil { + if err := s.parseTemplates(false); err != nil { return nil, err } - if err := s.extractInlinePartials(); err != nil { + if err := s.extractInlinePartials(false); err != nil { return nil, err } if err := s.transformTemplates(); err != nil { @@ -424,10 +425,11 @@ type TemplateStore struct { siteOpts SiteOptions htmlFormat output.Format - treeMain *doctree.SimpleTree[map[nodeKey]*TemplInfo] - treeShortcodes *doctree.SimpleTree[map[string]map[TemplateDescriptor]*TemplInfo] - templatesByPath *maps.Cache[string, *TemplInfo] - shortcodesByName *maps.Cache[string, *TemplInfo] + treeMain *doctree.SimpleTree[map[nodeKey]*TemplInfo] + treeShortcodes *doctree.SimpleTree[map[string]map[TemplateDescriptor]*TemplInfo] + templatesByPath *maps.Cache[string, *TemplInfo] + shortcodesByName *maps.Cache[string, *TemplInfo] + templatesSnapshotSet *maps.Cache[*parse.Tree, struct{}] dh descriptorHandler @@ -709,12 +711,16 @@ func (s *TemplateStore) RefreshFiles(include func(fi hugofs.FileMetaInfo) bool) if err := s.insertTemplates(include, true); err != nil { return err } - if err := s.parseTemplates(); err != nil { + if err := s.createTemplatesSnapshot(); err != nil { return err } - if err := s.extractInlinePartials(); err != nil { + if err := s.parseTemplates(true); err != nil { return err } + if err := s.extractInlinePartials(true); err != nil { + return err + } + if err := s.transformTemplates(); err != nil { return err } @@ -940,59 +946,77 @@ func (s *TemplateStore) extractIdentifiers(line string) []string { return identifiers } -func (s *TemplateStore) extractInlinePartials() error { +func (s *TemplateStore) extractInlinePartials(rebuild bool) error { isPartialName := func(s string) bool { return strings.HasPrefix(s, "partials/") || strings.HasPrefix(s, "_partials/") } - p := s.tns // We may find both inline and external partials in the current template namespaces, // so only add the ones we have not seen before. - addIfNotSeen := func(isText bool, templs ...tpl.Template) error { - for _, templ := range templs { - if templ.Name() == "" || !isPartialName(templ.Name()) { - continue - } - name := templ.Name() - if !paths.HasExt(name) { - // Assume HTML. This in line with how the lookup works. - name = name + s.htmlFormat.MediaType.FirstSuffix.FullSuffix - } - if !strings.HasPrefix(name, "_") { - name = "_" + name - } - pi := s.opts.PathParser.Parse(files.ComponentFolderLayouts, name) - ti, err := s.insertTemplate(pi, nil, false, s.treeMain) - if err != nil { - return err - } - - if ti != nil { - ti.Template = templ - ti.noBaseOf = true - ti.subCategory = SubCategoryInline - ti.D.IsPlainText = isText - } - + for templ := range s.allRawTemplates() { + if templ.Name() == "" || !isPartialName(templ.Name()) { + continue } - return nil - } - addIfNotSeen(false, p.templatesIn(p.parseHTML)...) - addIfNotSeen(true, p.templatesIn(p.parseText)...) - - for _, t := range p.baseofHtmlClones { - if err := addIfNotSeen(false, p.templatesIn(t)...); err != nil { + if rebuild && s.templatesSnapshotSet.Contains(getParseTree(templ)) { + // This partial was not created during this build. + continue + } + name := templ.Name() + if !paths.HasExt(name) { + // Assume HTML. This in line with how the lookup works. + name = name + s.htmlFormat.MediaType.FirstSuffix.FullSuffix + } + if !strings.HasPrefix(name, "_") { + name = "_" + name + } + pi := s.opts.PathParser.Parse(files.ComponentFolderLayouts, name) + ti, err := s.insertTemplate(pi, nil, SubCategoryInline, false, s.treeMain) + if err != nil { return err } - } - for _, t := range p.baseofTextClones { - if err := addIfNotSeen(true, p.templatesIn(t)...); err != nil { - return err + + if ti != nil { + ti.Template = templ + ti.noBaseOf = true + ti.subCategory = SubCategoryInline + ti.D.IsPlainText = isText(templ) } } + return nil } +func (s *TemplateStore) allRawTemplates() iter.Seq[tpl.Template] { + p := s.tns + return func(yield func(tpl.Template) bool) { + for t := range p.templatesIn(p.parseHTML) { + if !yield(t) { + return + } + } + for t := range p.templatesIn(p.parseText) { + if !yield(t) { + return + } + } + + for _, tt := range p.baseofHtmlClones { + for t := range p.templatesIn(tt) { + if !yield(t) { + return + } + } + } + for _, tt := range p.baseofTextClones { + for t := range p.templatesIn(tt) { + if !yield(t) { + return + } + } + } + } +} + func (s *TemplateStore) insertEmbedded() error { return fs.WalkDir(embeddedTemplatesFs, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { @@ -1024,7 +1048,7 @@ func (s *TemplateStore) insertEmbedded() error { return err } } else { - ti, err = s.insertTemplate(pi, nil, false, s.treeMain) + ti, err = s.insertTemplate(pi, nil, SubCategoryEmbedded, false, s.treeMain) if err != nil { return err } @@ -1105,7 +1129,7 @@ func (s *TemplateStore) insertShortcode(pi *paths.Path, fi hugofs.FileMetaInfo, return ti, nil } -func (s *TemplateStore) insertTemplate(pi *paths.Path, fi hugofs.FileMetaInfo, replace bool, tree doctree.Tree[map[nodeKey]*TemplInfo]) (*TemplInfo, error) { +func (s *TemplateStore) insertTemplate(pi *paths.Path, fi hugofs.FileMetaInfo, subCategory SubCategory, replace bool, tree doctree.Tree[map[nodeKey]*TemplInfo]) (*TemplInfo, error) { key, _, category, d, err := s.toKeyCategoryAndDescriptor(pi) // See #13577. Warn for now. if err != nil { @@ -1119,7 +1143,7 @@ func (s *TemplateStore) insertTemplate(pi *paths.Path, fi hugofs.FileMetaInfo, r return nil, nil } - return s.insertTemplate2(pi, fi, key, category, d, replace, false, tree) + return s.insertTemplate2(pi, fi, key, category, subCategory, d, replace, false, tree) } func (s *TemplateStore) insertTemplate2( @@ -1127,6 +1151,7 @@ func (s *TemplateStore) insertTemplate2( fi hugofs.FileMetaInfo, key string, category Category, + subCategory SubCategory, d TemplateDescriptor, replace, isLegacyMapped bool, tree doctree.Tree[map[nodeKey]*TemplInfo], @@ -1160,6 +1185,11 @@ func (s *TemplateStore) insertTemplate2( replace = fi.Meta().ModuleOrdinal < nkExisting.Fi.Meta().ModuleOrdinal } + if !replace && existingFound { + // Always replace inline partials to allow for reloading. + replace = subCategory == SubCategoryInline && nkExisting.subCategory == SubCategoryInline + } + if !replace && existingFound { if len(pi.Identifiers()) >= len(nkExisting.PathInfo.Identifiers()) { // e.g. /pages/home.foo.html and /pages/home.html where foo may be a valid language name in another site. @@ -1190,7 +1220,7 @@ func (s *TemplateStore) insertTemplate2( return ti, nil } -func (s *TemplateStore) insertTemplates(include func(fi hugofs.FileMetaInfo) bool, replace bool) error { +func (s *TemplateStore) insertTemplates(include func(fi hugofs.FileMetaInfo) bool, partialRebuild bool) error { if include == nil { include = func(fi hugofs.FileMetaInfo) bool { return true @@ -1372,7 +1402,7 @@ func (s *TemplateStore) insertTemplates(include func(fi hugofs.FileMetaInfo) boo } - if replace && pi.NameNoIdentifier() == baseNameBaseof { + if partialRebuild && pi.NameNoIdentifier() == baseNameBaseof { // A baseof file has changed. resetBaseVariants = true } @@ -1380,12 +1410,12 @@ func (s *TemplateStore) insertTemplates(include func(fi hugofs.FileMetaInfo) boo var ti *TemplInfo var err error if pi.Type() == paths.TypeShortcode { - ti, err = s.insertShortcode(pi, fi, replace, s.treeShortcodes) + ti, err = s.insertShortcode(pi, fi, partialRebuild, s.treeShortcodes) if err != nil || ti == nil { return err } } else { - ti, err = s.insertTemplate(pi, fi, replace, s.treeMain) + ti, err = s.insertTemplate(pi, fi, SubCategoryMain, partialRebuild, s.treeMain) if err != nil || ti == nil { return err } @@ -1419,7 +1449,7 @@ func (s *TemplateStore) insertTemplates(include func(fi hugofs.FileMetaInfo) boo desc.IsPlainText = outputFormat.IsPlainText desc.MediaType = mediaType.Type - ti, err := s.insertTemplate2(pi, fi, targetPath, category, desc, true, true, s.treeMain) + ti, err := s.insertTemplate2(pi, fi, targetPath, category, SubCategoryMain, desc, true, true, s.treeMain) if err != nil { return err } @@ -1430,6 +1460,7 @@ func (s *TemplateStore) insertTemplates(include func(fi hugofs.FileMetaInfo) boo if err := s.tns.readTemplateInto(ti); err != nil { return err } + } if resetBaseVariants { @@ -1456,7 +1487,15 @@ func (s *TemplateStore) key(dir string) string { return paths.TrimTrailing(dir) } -func (s *TemplateStore) parseTemplates() error { +func (s *TemplateStore) createTemplatesSnapshot() error { + s.templatesSnapshotSet.Reset() + for t := range s.allRawTemplates() { + s.templatesSnapshotSet.Set(getParseTree(t), struct{}{}) + } + return nil +} + +func (s *TemplateStore) parseTemplates(replace bool) error { if err := func() error { // Read and parse all templates. for _, v := range s.treeMain.All() { @@ -1464,7 +1503,7 @@ func (s *TemplateStore) parseTemplates() error { if vv.state == processingStateTransformed { continue } - if err := s.parseTemplate(vv); err != nil { + if err := s.parseTemplate(vv, replace); err != nil { return err } } @@ -1484,7 +1523,7 @@ func (s *TemplateStore) parseTemplates() error { // The regular expression used to detect if a template needs a base template has some // rare false positives. Assume we don't need one. vv.noBaseOf = true - if err := s.parseTemplate(vv); err != nil { + if err := s.parseTemplate(vv, replace); err != nil { return err } continue @@ -1513,7 +1552,7 @@ func (s *TemplateStore) parseTemplates() error { if vvv.state == processingStateTransformed { continue } - if err := s.parseTemplate(vvv); err != nil { + if err := s.parseTemplate(vvv, replace); err != nil { return err } } From 7766fc62416ff95ed7768c19947ac0fcd96444cc Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Thu, 22 May 2025 11:37:19 +0000 Subject: [PATCH 24/70] releaser: Bump versions for release of 0.147.5 [ci skip] --- common/hugo/version_current.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index ba367ceb5..a6848dff9 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 148, - PatchLevel: 0, - Suffix: "-DEV", + Minor: 147, + PatchLevel: 5, + Suffix: "", } From e25db38467088c8ae8d848d4f42a56d9830affe0 Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Thu, 22 May 2025 11:51:47 +0000 Subject: [PATCH 25/70] releaser: Prepare repository for 0.148.0-DEV [ci skip] --- common/hugo/version_current.go | 6 +++--- hugoreleaser.env | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index a6848dff9..ba367ceb5 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 147, - PatchLevel: 5, - Suffix: "", + Minor: 148, + PatchLevel: 0, + Suffix: "-DEV", } diff --git a/hugoreleaser.env b/hugoreleaser.env index 288189bdf..61fc999d5 100644 --- a/hugoreleaser.env +++ b/hugoreleaser.env @@ -1,7 +1,8 @@ # Release env. # These will be replaced by script before release. -HUGORELEASER_TAG=v0.147.4 -HUGORELEASER_COMMITISH=84c8426f328a946b2e10611431c450b352cecd11 +HUGORELEASER_TAG=v0.147.5 +HUGORELEASER_COMMITISH=7766fc62416ff95ed7768c19947ac0fcd96444cc + From 013c8cfb25122e03c930692c234f4a4301dfbef9 Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Fri, 23 May 2025 08:22:25 -0700 Subject: [PATCH 26/70] tpl/transform: Expose the KaTeX strict option Closes #13729 --- hugolib/integrationtest_builder.go | 2 +- internal/warpc/katex.go | 18 ++++++++- tpl/transform/transform.go | 9 +++++ tpl/transform/transform_integration_test.go | 41 +++++++++++++++++++++ 4 files changed, 68 insertions(+), 2 deletions(-) diff --git a/hugolib/integrationtest_builder.go b/hugolib/integrationtest_builder.go index 3c2f1ad74..f28407fa1 100644 --- a/hugolib/integrationtest_builder.go +++ b/hugolib/integrationtest_builder.go @@ -263,7 +263,7 @@ func (s *IntegrationTestBuilder) AssertLogContains(els ...string) { } } -// AssertLogNotContains asserts that the last build log does matches the given regular expressions. +// AssertLogMatches asserts that the last build log matches the given regular expressions. // The regular expressions can be negated with a "! " prefix. func (s *IntegrationTestBuilder) AssertLogMatches(expression string) { s.Helper() diff --git a/internal/warpc/katex.go b/internal/warpc/katex.go index 23ca726ac..75c20117f 100644 --- a/internal/warpc/katex.go +++ b/internal/warpc/katex.go @@ -45,7 +45,7 @@ type KatexOptions struct { // A color string given in the format "#XXX" or "#XXXXXX" ErrorColor string `json:"errorColor"` - // A collection of custom macros. + // A collection of custom macros. Macros map[string]string `json:"macros,omitempty"` // Specifies a minimum thickness, in ems, for fraction lines. @@ -53,6 +53,22 @@ type KatexOptions struct { // If true, KaTeX will throw a ParseError when it encounters an unsupported command. ThrowOnError bool `json:"throwOnError"` + + // Controls how KaTeX handles LaTeX features that offer convenience but + // aren't officially supported, one of error (default), ignore, or warn. + // + // - error: Throws an error when convenient, unsupported LaTeX features + // are encountered. + // - ignore: Allows convenient, unsupported LaTeX features without any + // feedback. + // - warn: Emits a warning when convenient, unsupported LaTeX features are + // encountered. + // + // The "newLineInDisplayMode" error code, which flags the use of \\ + // or \newline in display mode outside an array or tabular environment, is + // intentionally designed not to throw an error, despite this behavior + // being questionable. + Strict string `json:"strict"` } type KatexOutput struct { diff --git a/tpl/transform/transform.go b/tpl/transform/transform.go index bc6d97cf2..e8765bace 100644 --- a/tpl/transform/transform.go +++ b/tpl/transform/transform.go @@ -19,6 +19,7 @@ import ( "context" "encoding/xml" "errors" + "fmt" "html" "html/template" "io" @@ -234,6 +235,7 @@ func (ns *Namespace) ToMath(ctx context.Context, args ...any) (template.HTML, er MinRuleThickness: 0.04, ErrorColor: "#cc0000", ThrowOnError: true, + Strict: "error", }, } @@ -243,6 +245,13 @@ func (ns *Namespace) ToMath(ctx context.Context, args ...any) (template.HTML, er } } + switch katexInput.Options.Strict { + case "error", "ignore", "warn": + // Valid strict mode, continue + default: + return "", fmt.Errorf("invalid strict mode; expected one of error, ignore, or warn; received %s", katexInput.Options.Strict) + } + s := hashing.HashString(args...) key := "tomath/" + s[:2] + "/" + s[2:] fileCache := ns.deps.ResourceSpec.FileCaches.MiscCache() diff --git a/tpl/transform/transform_integration_test.go b/tpl/transform/transform_integration_test.go index 2b3c7d40e..298097879 100644 --- a/tpl/transform/transform_integration_test.go +++ b/tpl/transform/transform_integration_test.go @@ -495,3 +495,44 @@ DATA } } } + +// Issue 13729 +func TestToMathStrictMode(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['page','rss','section','sitemap','taxonomy','term'] +-- layouts/all.html -- +{{ transform.ToMath "a %" dict }} +-- foo -- +` + + // strict mode: default + f := strings.ReplaceAll(files, "dict", "") + b, err := hugolib.TestE(t, f) + b.Assert(err.Error(), qt.Contains, "[commentAtEnd]") + + // strict mode: error + f = strings.ReplaceAll(files, "dict", `(dict "strict" "error")`) + b, err = hugolib.TestE(t, f) + b.Assert(err.Error(), qt.Contains, "[commentAtEnd]") + + // strict mode: ignore + f = strings.ReplaceAll(files, "dict", `(dict "strict" "ignore")`) + b = hugolib.Test(t, f, hugolib.TestOptWarn()) + b.AssertLogMatches("") + b.AssertFileContent("public/index.html", `a %`) + + // strict: warn + // TODO: see https://github.com/gohugoio/hugo/issues/13735 + // f = strings.ReplaceAll(files, "dict", `(dict "strict" "warn")`) + // b = hugolib.Test(t, f, hugolib.TestOptWarn()) + // b.AssertLogMatches("[commentAtEnd]") + // b.AssertFileContent("public/index.html", `a %`) + + // strict mode: invalid value + f = strings.ReplaceAll(files, "dict", `(dict "strict" "foo")`) + b, err = hugolib.TestE(t, f) + b.Assert(err.Error(), qt.Contains, "invalid strict mode") +} From f47193669d2f93343d95517a22e6e2b9648b85ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 23 May 2025 12:03:41 +0200 Subject: [PATCH 27/70] commands: Make sure the browser gets refreshed on changes when --disableFastRender is set Fixes #13727 --- commands/hugobuilder.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/commands/hugobuilder.go b/commands/hugobuilder.go index 778d85ca9..3b57ac5e9 100644 --- a/commands/hugobuilder.go +++ b/commands/hugobuilder.go @@ -972,6 +972,9 @@ func (c *hugoBuilder) handleEvents(watcher *watcher.Batcher, lrl.Logf("force refresh") livereload.ForceRefresh() } + } else { + lrl.Logf("force refresh") + livereload.ForceRefresh() } if len(cssChanges) > 0 { From 9ad26b69ad091ab51f4010c7cafd1daeed095ae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 26 May 2025 10:22:13 +0200 Subject: [PATCH 28/70] Fix it so e.g. de in layouts/_shortcodes/de.html is not interpreted as a language code Fixes #13740 --- common/paths/pathparser.go | 11 ++++++----- common/paths/pathparser_test.go | 11 ++++++++++- tpl/tplimpl/shortcodes_integration_test.go | 4 ++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/common/paths/pathparser.go b/common/paths/pathparser.go index b0a2f9fc4..d10523a84 100644 --- a/common/paths/pathparser.go +++ b/common/paths/pathparser.go @@ -120,11 +120,11 @@ func (pp *PathParser) parse(component, s string) (*Path, error) { return p, nil } -func (pp *PathParser) parseIdentifier(component, s string, p *Path, i, lastDot int) { +func (pp *PathParser) parseIdentifier(component, s string, p *Path, i, lastDot, numDots int) { if p.posContainerHigh != -1 { return } - mayHaveLang := p.posIdentifierLanguage == -1 && pp.LanguageIndex != nil + mayHaveLang := numDots > 1 && p.posIdentifierLanguage == -1 && pp.LanguageIndex != nil mayHaveLang = mayHaveLang && (component == files.ComponentFolderContent || component == files.ComponentFolderLayouts) mayHaveOutputFormat := component == files.ComponentFolderLayouts mayHaveKind := p.posIdentifierKind == -1 && mayHaveOutputFormat @@ -167,7 +167,6 @@ func (pp *PathParser) parseIdentifier(component, s string, p *Path, i, lastDot i if langFound { p.identifiersKnown = append(p.identifiersKnown, id) p.posIdentifierLanguage = len(p.identifiersKnown) - 1 - } } @@ -234,19 +233,21 @@ func (pp *PathParser) doParse(component, s string, p *Path) (*Path, error) { p.s = s slashCount := 0 lastDot := 0 + lastSlashIdx := strings.LastIndex(s, "/") + numDots := strings.Count(s[lastSlashIdx+1:], ".") for i := len(s) - 1; i >= 0; i-- { c := s[i] switch c { case '.': - pp.parseIdentifier(component, s, p, i, lastDot) + pp.parseIdentifier(component, s, p, i, lastDot, numDots) lastDot = i case '/': slashCount++ if p.posContainerHigh == -1 { if lastDot > 0 { - pp.parseIdentifier(component, s, p, i, lastDot) + pp.parseIdentifier(component, s, p, i, lastDot, numDots) } p.posContainerHigh = i + 1 } else if p.posContainerLow == -1 { diff --git a/common/paths/pathparser_test.go b/common/paths/pathparser_test.go index a6194e756..ad76b9367 100644 --- a/common/paths/pathparser_test.go +++ b/common/paths/pathparser_test.go @@ -563,11 +563,20 @@ func TestParseLayouts(t *testing.T) { c.Assert(p.Type(), qt.Equals, TypePartial) }, }, + { + "Shortcode lang in root", + "/_shortcodes/no.html", + func(c *qt.C, p *Path) { + c.Assert(p.Type(), qt.Equals, TypeShortcode) + c.Assert(p.Lang(), qt.Equals, "") + c.Assert(p.NameNoIdentifier(), qt.Equals, "no") + }, + }, } for _, test := range tests { c.Run(test.name, func(c *qt.C) { - if test.name != "Baseof" { + if test.name != "Shortcode lang in root" { // return } test.assert(c, testParser.Parse(files.ComponentFolderLayouts, test.path)) diff --git a/tpl/tplimpl/shortcodes_integration_test.go b/tpl/tplimpl/shortcodes_integration_test.go index e884c9a8d..275e8cc15 100644 --- a/tpl/tplimpl/shortcodes_integration_test.go +++ b/tpl/tplimpl/shortcodes_integration_test.go @@ -730,16 +730,16 @@ SHORTCODE b.Assert(err.Error(), qt.Contains, `no compatible template found for shortcode "mymarkdown" in [/_shortcodes/mymarkdown.md]; note that to use plain text template shortcodes in HTML you need to use the shortcode {{% delimiter`) } -func TestShortcodeOnlyLanguageInBaseIssue13699(t *testing.T) { +func TestShortcodeOnlyLanguageInBaseIssue13699And13740(t *testing.T) { t.Parallel() files := ` -- hugo.toml -- baseURL = 'https://example.org/' +disableLanguages = ['de'] [languages] [languages.en] weight = 1 -disableLanguages = ['de'] [languages.de] weight = 2 -- layouts/_shortcodes/de.html -- From eaf5ace30dafc40a8771ef97af0367e655ab0881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 26 May 2025 18:12:32 +0200 Subject: [PATCH 29/70] Fix recent regression with cascading of params to content adapters Fixes #13743 --- config/allconfig/allconfig.go | 4 +- hugolib/cascade_test.go | 21 ++++++ hugolib/content_map_page.go | 12 ++-- hugolib/page__meta.go | 29 ++++++--- resources/page/page_matcher.go | 72 ++++++++------------- resources/page/page_matcher_test.go | 8 +-- resources/page/pagemeta/page_frontmatter.go | 8 +-- 7 files changed, 82 insertions(+), 72 deletions(-) diff --git a/config/allconfig/allconfig.go b/config/allconfig/allconfig.go index d3ee28490..0db0be1d8 100644 --- a/config/allconfig/allconfig.go +++ b/config/allconfig/allconfig.go @@ -146,7 +146,7 @@ type Config struct { // The cascade configuration section contains the top level front matter cascade configuration options, // a slice of page matcher and params to apply to those pages. - Cascade *config.ConfigNamespace[[]page.PageMatcherParamsConfig, *maps.Ordered[page.PageMatcher, maps.Params]] `mapstructure:"-"` + Cascade *config.ConfigNamespace[[]page.PageMatcherParamsConfig, *maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig]] `mapstructure:"-"` // The segments defines segments for the site. Used for partial/segmented builds. Segments *config.ConfigNamespace[map[string]segments.SegmentConfig, segments.Segments] `mapstructure:"-"` @@ -776,7 +776,7 @@ type Configs struct { } func (c *Configs) Validate(logger loggers.Logger) error { - c.Base.Cascade.Config.Range(func(p page.PageMatcher, params maps.Params) bool { + c.Base.Cascade.Config.Range(func(p page.PageMatcher, cfg page.PageMatcherParamsConfig) bool { page.CheckCascadePattern(logger, p) return true }) diff --git a/hugolib/cascade_test.go b/hugolib/cascade_test.go index d0a6730db..10b47764f 100644 --- a/hugolib/cascade_test.go +++ b/hugolib/cascade_test.go @@ -917,3 +917,24 @@ title: p2 b.AssertFileExists("public/sx/index.html", true) // failing b.AssertFileExists("public/sx/p2/index.html", true) // failing } + +func TestCascadeGotmplIssue13743(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['home','rss','section','sitemap','taxonomy','term'] +[cascade.params] +foo = 'bar' +[cascade.target] +path = '/p1' +-- content/_content.gotmpl -- +{{ .AddPage (dict "title" "p1" "path" "p1") }} +-- layouts/all.html -- +{{ .Title }}|{{ .Params.foo }} +` + + b := Test(t, files) + + b.AssertFileContent("public/p1/index.html", "p1|bar") // actual content is "p1|" +} diff --git a/hugolib/content_map_page.go b/hugolib/content_map_page.go index 9e67fbb1b..ef2daca74 100644 --- a/hugolib/content_map_page.go +++ b/hugolib/content_map_page.go @@ -1412,7 +1412,7 @@ func (sa *sitePagesAssembler) applyAggregates() error { } // Handle cascades first to get any default dates set. - var cascade *maps.Ordered[page.PageMatcher, maps.Params] + var cascade *maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig] if keyPage == "" { // Home page gets it's cascade from the site config. cascade = sa.conf.Cascade.Config @@ -1424,7 +1424,7 @@ func (sa *sitePagesAssembler) applyAggregates() error { } else { _, data := pw.WalkContext.Data().LongestPrefix(paths.Dir(keyPage)) if data != nil { - cascade = data.(*maps.Ordered[page.PageMatcher, maps.Params]) + cascade = data.(*maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig]) } } @@ -1506,11 +1506,11 @@ func (sa *sitePagesAssembler) applyAggregates() error { pageResource := rs.r.(*pageState) relPath := pageResource.m.pathInfo.BaseRel(pageBundle.m.pathInfo) pageResource.m.resourcePath = relPath - var cascade *maps.Ordered[page.PageMatcher, maps.Params] + var cascade *maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig] // Apply cascade (if set) to the page. _, data := pw.WalkContext.Data().LongestPrefix(resourceKey) if data != nil { - cascade = data.(*maps.Ordered[page.PageMatcher, maps.Params]) + cascade = data.(*maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig]) } if err := pageResource.setMetaPost(cascade); err != nil { return false, err @@ -1574,10 +1574,10 @@ func (sa *sitePagesAssembler) applyAggregatesToTaxonomiesAndTerms() error { const eventName = "dates" if p.Kind() == kinds.KindTerm { - var cascade *maps.Ordered[page.PageMatcher, maps.Params] + var cascade *maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig] _, data := pw.WalkContext.Data().LongestPrefix(s) if data != nil { - cascade = data.(*maps.Ordered[page.PageMatcher, maps.Params]) + cascade = data.(*maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig]) } if err := p.setMetaPost(cascade); err != nil { return false, err diff --git a/hugolib/page__meta.go b/hugolib/page__meta.go index e8bce20d1..0d6d22e9a 100644 --- a/hugolib/page__meta.go +++ b/hugolib/page__meta.go @@ -83,8 +83,8 @@ type pageMetaParams struct { // These are only set in watch mode. datesOriginal pagemeta.Dates - paramsOriginal map[string]any // contains the original params as defined in the front matter. - cascadeOriginal *maps.Ordered[page.PageMatcher, maps.Params] // contains the original cascade as defined in the front matter. + paramsOriginal map[string]any // contains the original params as defined in the front matter. + cascadeOriginal *maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig] // contains the original cascade as defined in the front matter. } func (m *pageMetaParams) init(preserveOriginal bool) { @@ -291,7 +291,7 @@ func (p *pageMeta) setMetaPre(pi *contentParseInfo, logger loggers.Logger, conf return nil } -func (ps *pageState) setMetaPost(cascade *maps.Ordered[page.PageMatcher, maps.Params]) error { +func (ps *pageState) setMetaPost(cascade *maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig]) error { ps.m.setMetaPostCount++ var cascadeHashPre uint64 if ps.m.setMetaPostCount > 1 { @@ -303,15 +303,20 @@ func (ps *pageState) setMetaPost(cascade *maps.Ordered[page.PageMatcher, maps.Pa // Apply cascades first so they can be overridden later. if cascade != nil { if ps.m.pageConfig.CascadeCompiled != nil { - cascade.Range(func(k page.PageMatcher, v maps.Params) bool { + cascade.Range(func(k page.PageMatcher, v page.PageMatcherParamsConfig) bool { vv, found := ps.m.pageConfig.CascadeCompiled.Get(k) if !found { ps.m.pageConfig.CascadeCompiled.Set(k, v) } else { // Merge - for ck, cv := range v { - if _, found := vv[ck]; !found { - vv[ck] = cv + for ck, cv := range v.Params { + if _, found := vv.Params[ck]; !found { + vv.Params[ck] = cv + } + } + for ck, cv := range v.Fields { + if _, found := vv.Fields[ck]; !found { + vv.Fields[ck] = cv } } } @@ -341,11 +346,17 @@ func (ps *pageState) setMetaPost(cascade *maps.Ordered[page.PageMatcher, maps.Pa // Cascade is also applied to itself. var err error - cascade.Range(func(k page.PageMatcher, v maps.Params) bool { + cascade.Range(func(k page.PageMatcher, v page.PageMatcherParamsConfig) bool { if !k.Matches(ps) { return true } - for kk, vv := range v { + for kk, vv := range v.Params { + if _, found := ps.m.pageConfig.Params[kk]; !found { + ps.m.pageConfig.Params[kk] = vv + } + } + + for kk, vv := range v.Fields { if ps.m.pageConfig.IsFromContentAdapter { if _, found := ps.m.pageConfig.ContentAdapterData[kk]; !found { ps.m.pageConfig.ContentAdapterData[kk] = vv diff --git a/resources/page/page_matcher.go b/resources/page/page_matcher.go index 27a7c7e9e..306c2d03c 100644 --- a/resources/page/page_matcher.go +++ b/resources/page/page_matcher.go @@ -105,9 +105,9 @@ func CheckCascadePattern(logger loggers.Logger, m PageMatcher) { } } -func DecodeCascadeConfig(logger loggers.Logger, handleLegacyFormat bool, in any) (*config.ConfigNamespace[[]PageMatcherParamsConfig, *maps.Ordered[PageMatcher, maps.Params]], error) { - buildConfig := func(in any) (*maps.Ordered[PageMatcher, maps.Params], any, error) { - cascade := maps.NewOrdered[PageMatcher, maps.Params]() +func DecodeCascadeConfig(logger loggers.Logger, handleLegacyFormat bool, in any) (*config.ConfigNamespace[[]PageMatcherParamsConfig, *maps.Ordered[PageMatcher, PageMatcherParamsConfig]], error) { + buildConfig := func(in any) (*maps.Ordered[PageMatcher, PageMatcherParamsConfig], any, error) { + cascade := maps.NewOrdered[PageMatcher, PageMatcherParamsConfig]() if in == nil { return cascade, []map[string]any{}, nil } @@ -124,11 +124,7 @@ func DecodeCascadeConfig(logger loggers.Logger, handleLegacyFormat bool, in any) c PageMatcherParamsConfig err error ) - if handleLegacyFormat { - c, err = mapToPageMatcherParamsConfigLegacy(m) - } else { - c, err = mapToPageMatcherParamsConfig(m) - } + c, err = mapToPageMatcherParamsConfig(m) if err != nil { return nil, nil, err } @@ -147,23 +143,28 @@ func DecodeCascadeConfig(logger loggers.Logger, handleLegacyFormat bool, in any) if found { // Merge for k, v := range cfg.Params { - if _, found := c[k]; !found { - c[k] = v + if _, found := c.Params[k]; !found { + c.Params[k] = v + } + } + for k, v := range cfg.Fields { + if _, found := c.Fields[k]; !found { + c.Fields[k] = v } } } else { - cascade.Set(m, cfg.Params) + cascade.Set(m, cfg) } } return cascade, cfgs, nil } - return config.DecodeNamespace[[]PageMatcherParamsConfig, *maps.Ordered[PageMatcher, maps.Params]](in, buildConfig) + return config.DecodeNamespace[[]PageMatcherParamsConfig, *maps.Ordered[PageMatcher, PageMatcherParamsConfig]](in, buildConfig) } // DecodeCascade decodes in which could be either a map or a slice of maps. -func DecodeCascade(logger loggers.Logger, handleLegacyFormat bool, in any) (*maps.Ordered[PageMatcher, maps.Params], error) { +func DecodeCascade(logger loggers.Logger, handleLegacyFormat bool, in any) (*maps.Ordered[PageMatcher, PageMatcherParamsConfig], error) { conf, err := DecodeCascadeConfig(logger, handleLegacyFormat, in) if err != nil { return nil, err @@ -181,47 +182,22 @@ func mapToPageMatcherParamsConfig(m map[string]any) (PageMatcherParamsConfig, er return pcfg, err } pcfg.Target = target - default: + case "params": if pcfg.Params == nil { pcfg.Params = make(maps.Params) } - pcfg.Params[k] = v - } - } - return pcfg, pcfg.init() -} - -func mapToPageMatcherParamsConfigLegacy(m map[string]any) (PageMatcherParamsConfig, error) { - var pcfg PageMatcherParamsConfig - for k, v := range m { - switch strings.ToLower(k) { - case "params": - // We simplified the structure of the cascade config in Hugo 0.111.0. - // There is a small chance that someone has used the old structure with the params keyword, - // those values will now be moved to the top level. - // This should be very unlikely as it would lead to constructs like .Params.params.foo, - // and most people see params as an Hugo internal keyword. params := maps.ToStringMap(v) - if pcfg.Params == nil { - pcfg.Params = params - } else { - for k, v := range params { - if _, found := pcfg.Params[k]; !found { - pcfg.Params[k] = v - } + for k, v := range params { + if _, found := pcfg.Params[k]; !found { + pcfg.Params[k] = v } } - case "_target", "target": - var target PageMatcher - if err := decodePageMatcher(v, &target); err != nil { - return pcfg, err - } - pcfg.Target = target default: - if pcfg.Params == nil { - pcfg.Params = make(maps.Params) + if pcfg.Fields == nil { + pcfg.Fields = make(maps.Params) } - pcfg.Params[k] = v + + pcfg.Fields[k] = v } } return pcfg, pcfg.init() @@ -250,10 +226,14 @@ func decodePageMatcher(m any, v *PageMatcher) error { type PageMatcherParamsConfig struct { // Apply Params to all Pages matching Target. Params maps.Params + // Fields holds all fields but Params. + Fields maps.Params + // Target is the PageMatcher that this config applies to. Target PageMatcher } func (p *PageMatcherParamsConfig) init() error { maps.PrepareParams(p.Params) + maps.PrepareParams(p.Fields) return nil } diff --git a/resources/page/page_matcher_test.go b/resources/page/page_matcher_test.go index 2fe6ccc89..ad35da43c 100644 --- a/resources/page/page_matcher_test.go +++ b/resources/page/page_matcher_test.go @@ -84,19 +84,17 @@ func TestPageMatcher(t *testing.T) { c.Run("mapToPageMatcherParamsConfig", func(c *qt.C) { fn := func(m map[string]any) PageMatcherParamsConfig { - v, err := mapToPageMatcherParamsConfigLegacy(m) + v, err := mapToPageMatcherParamsConfig(m) c.Assert(err, qt.IsNil) return v } - // Legacy. c.Assert(fn(map[string]any{"_target": map[string]any{"kind": "page"}, "foo": "bar"}), qt.DeepEquals, PageMatcherParamsConfig{ - Params: maps.Params{ + Fields: maps.Params{ "foo": "bar", }, Target: PageMatcher{Path: "", Kind: "page", Lang: "", Environment: ""}, }) - // Current format. c.Assert(fn(map[string]any{"target": map[string]any{"kind": "page"}, "params": map[string]any{"foo": "bar"}}), qt.DeepEquals, PageMatcherParamsConfig{ Params: maps.Params{ "foo": "bar", @@ -134,7 +132,7 @@ func TestDecodeCascadeConfig(t *testing.T) { c.Assert(err, qt.IsNil) c.Assert(got, qt.IsNotNil) c.Assert(got.Config.Keys(), qt.DeepEquals, []PageMatcher{{Kind: "page", Environment: "production"}, {Kind: "page"}}) - c.Assert(got.Config.Values(), qt.DeepEquals, []maps.Params{{"a": string("av")}, {"b": string("bv")}}) + c.Assert(got.SourceStructure, qt.DeepEquals, []PageMatcherParamsConfig{ { Params: maps.Params{"a": string("av")}, diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go index 7dea7ca6b..fd4f7759b 100644 --- a/resources/page/pagemeta/page_frontmatter.go +++ b/resources/page/pagemeta/page_frontmatter.go @@ -125,10 +125,10 @@ type PageConfig struct { ContentAdapterData map[string]any `mapstructure:"-" json:"-"` // Compiled values. - CascadeCompiled *maps.Ordered[page.PageMatcher, maps.Params] `mapstructure:"-" json:"-"` - ContentMediaType media.Type `mapstructure:"-" json:"-"` - ConfiguredOutputFormats output.Formats `mapstructure:"-" json:"-"` - IsFromContentAdapter bool `mapstructure:"-" json:"-"` + CascadeCompiled *maps.Ordered[page.PageMatcher, page.PageMatcherParamsConfig] `mapstructure:"-" json:"-"` + ContentMediaType media.Type `mapstructure:"-" json:"-"` + ConfiguredOutputFormats output.Formats `mapstructure:"-" json:"-"` + IsFromContentAdapter bool `mapstructure:"-" json:"-"` } func ClonePageConfigForRebuild(p *PageConfig, params map[string]any) *PageConfig { From e57dcd3795b80584354656b440534b42f7bb5684 Mon Sep 17 00:00:00 2001 From: Andreas Deininger Date: Mon, 26 May 2025 17:40:02 +0200 Subject: [PATCH 30/70] Improve warning message on superfluous prefix when using function 'partials.Include' --- tpl/partials/partials.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tpl/partials/partials.go b/tpl/partials/partials.go index 19882e36a..57a2aa280 100644 --- a/tpl/partials/partials.go +++ b/tpl/partials/partials.go @@ -133,7 +133,7 @@ func (ns *Namespace) lookup(name string) (*tplimpl.TemplInfo, error) { if strings.HasPrefix(name, "partials/") { // This is most likely not what the user intended. // This worked before Hugo 0.146.0. - ns.deps.Log.Warnidf(constants.WarnPartialSuperfluousPrefix, "Partial name %q starting with 'partials/' (as in {{ partial \"%s\"}}) is most likely not what you want. Before 0.146.0 we did a double lookup in this situation.", name, name) + ns.deps.Log.Warnidf(constants.WarnPartialSuperfluousPrefix, "Doubtful use of partial function in {{ partial \"%s\"}}), this is most likely not what you want. Consider removing superfluous prefix \"partials/\" from template name given as first function argument.", name) } v := ns.deps.TemplateStore.LookupPartial(name) if v == nil { From 0a5fd8ebb8e2ca798515e8c564c14e32db3b4127 Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Tue, 27 May 2025 11:17:16 +0000 Subject: [PATCH 31/70] releaser: Bump versions for release of 0.147.6 [ci skip] --- common/hugo/version_current.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index ba367ceb5..f0b2df85a 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 148, - PatchLevel: 0, - Suffix: "-DEV", + Minor: 147, + PatchLevel: 6, + Suffix: "", } From 463e440c7aed80bb177e328cb45181c807f692dd Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Tue, 27 May 2025 11:31:53 +0000 Subject: [PATCH 32/70] releaser: Prepare repository for 0.148.0-DEV [ci skip] --- common/hugo/version_current.go | 6 +++--- hugoreleaser.env | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index f0b2df85a..ba367ceb5 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 147, - PatchLevel: 6, - Suffix: "", + Minor: 148, + PatchLevel: 0, + Suffix: "-DEV", } diff --git a/hugoreleaser.env b/hugoreleaser.env index 61fc999d5..46cd6ee93 100644 --- a/hugoreleaser.env +++ b/hugoreleaser.env @@ -1,7 +1,8 @@ # Release env. # These will be replaced by script before release. -HUGORELEASER_TAG=v0.147.5 -HUGORELEASER_COMMITISH=7766fc62416ff95ed7768c19947ac0fcd96444cc +HUGORELEASER_TAG=v0.147.6 +HUGORELEASER_COMMITISH=0a5fd8ebb8e2ca798515e8c564c14e32db3b4127 + From 13e1617557302999b974a95b3f3f9ff1bc6e510b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 28 May 2025 12:15:17 +0200 Subject: [PATCH 33/70] deps: Upgrade github.com/olekukonko/tablewriter v0.0.5 => v1.0.7 --- go.mod | 7 +++++-- go.sum | 10 +++++++++ helpers/processing_stats.go | 42 ++++++++++++++++++------------------- hugolib/site_stats_test.go | 6 +----- 4 files changed, 36 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index c51a5fc52..e0ce06568 100644 --- a/go.mod +++ b/go.mod @@ -55,7 +55,7 @@ require ( github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c github.com/muesli/smartcrop v0.3.0 github.com/niklasfasching/go-org v1.7.0 - github.com/olekukonko/tablewriter v0.0.5 + github.com/olekukonko/tablewriter v1.0.7 github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 github.com/pelletier/go-toml/v2 v2.2.4 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c @@ -141,13 +141,16 @@ require ( github.com/kylelemons/godebug v1.1.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect + github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6 // indirect + github.com/olekukonko/ll v0.0.8 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect diff --git a/go.sum b/go.sum index a70bc0390..05978a56e 100644 --- a/go.sum +++ b/go.sum @@ -378,6 +378,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= @@ -394,8 +396,14 @@ github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//J github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw= github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c= github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o= +github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6 h1:r3FaAI0NZK3hSmtTDrBVREhKULp8oUeqLT5Eyl2mSPo= +github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= +github.com/olekukonko/ll v0.0.8 h1:sbGZ1Fx4QxJXEqL/6IG8GEFnYojUSQ45dJVwN2FH2fc= +github.com/olekukonko/ll v0.0.8/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/olekukonko/tablewriter v1.0.7 h1:HCC2e3MM+2g72M81ZcJU11uciw6z/p82aEnm4/ySDGw= +github.com/olekukonko/tablewriter v1.0.7/go.mod h1:H428M+HzoUXC6JU2Abj9IT9ooRmdq9CxuDmKMtrOCMs= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= @@ -414,6 +422,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= diff --git a/helpers/processing_stats.go b/helpers/processing_stats.go index 3f48466c7..42376b46d 100644 --- a/helpers/processing_stats.go +++ b/helpers/processing_stats.go @@ -19,6 +19,8 @@ import ( "sync/atomic" "github.com/olekukonko/tablewriter" + "github.com/olekukonko/tablewriter/renderer" + "github.com/olekukonko/tablewriter/tw" ) // ProcessingStats represents statistics about a site build. @@ -66,23 +68,6 @@ func (s *ProcessingStats) Add(counter *uint64, amount int) { atomic.AddUint64(counter, uint64(amount)) } -// Table writes a table-formatted representation of the stats in a -// ProcessingStats instance to w. -func (s *ProcessingStats) Table(w io.Writer) { - titleVals := s.toVals() - data := make([][]string, len(titleVals)) - for i, tv := range titleVals { - data[i] = []string{tv.name, strconv.Itoa(int(tv.val))} - } - - table := tablewriter.NewWriter(w) - - table.AppendBulk(data) - table.SetHeader([]string{"", s.Name}) - table.SetBorder(false) - table.Render() -} - // ProcessingStatsTable writes a table-formatted representation of stats to w. func ProcessingStatsTable(w io.Writer, stats ...*ProcessingStats) { names := make([]string, len(stats)+1) @@ -106,13 +91,26 @@ func ProcessingStatsTable(w io.Writer, stats ...*ProcessingStats) { data[j] = append(data[j], strconv.Itoa(int(tv.val))) } } - } - table := tablewriter.NewWriter(w) + table := tablewriter.NewTable( + w, + tablewriter.WithRenderer(renderer.NewBlueprint(tw.Rendition{ + Borders: tw.BorderNone, + Symbols: tw.NewSymbols(tw.StyleLight), + Settings: tw.Settings{ + Separators: tw.Separators{BetweenRows: tw.Off}, + Lines: tw.Lines{ShowFooterLine: tw.On}, + }, + })), + tablewriter.WithConfig( + tablewriter.Config{ + MaxWidth: 70, + Row: tw.CellConfig{Alignment: tw.CellAlignment{Global: tw.AlignRight, PerColumn: []tw.Align{tw.AlignLeft}}}, + }), + ) - table.AppendBulk(data) - table.SetHeader(names) - table.SetBorder(false) + table.Bulk(data) + table.Header(names) table.Render() } diff --git a/hugolib/site_stats_test.go b/hugolib/site_stats_test.go index 02f2c0a8c..c045963f3 100644 --- a/hugolib/site_stats_test.go +++ b/hugolib/site_stats_test.go @@ -16,7 +16,6 @@ package hugolib import ( "bytes" "fmt" - "io" "testing" "github.com/gohugoio/hugo/helpers" @@ -89,14 +88,11 @@ aliases: [/Ali%d] h.Sites[1].PathSpec.ProcessingStats, } - stats[0].Table(io.Discard) - stats[1].Table(io.Discard) - var buff bytes.Buffer helpers.ProcessingStatsTable(&buff, stats...) - c.Assert(buff.String(), qt.Contains, "Pages | 21 | 7") + c.Assert(buff.String(), qt.Contains, "Pages │ 21 │ 7") } func TestSiteLastmod(t *testing.T) { From 766a2e7868454225b176468ee7df412a7373324e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 28 May 2025 09:18:16 +0200 Subject: [PATCH 34/70] Make sure that unreferenced but changed bundle resources gets republished Fixes #13748 --- hugolib/content_map_page.go | 2 -- hugolib/hugo_sites_build.go | 1 - hugolib/page.go | 61 +++++++++++++++++++------------------ hugolib/page__new.go | 2 -- hugolib/rebuild_test.go | 20 ++++++++++++ resources/resource.go | 20 ++++++++++-- resources/resource_spec.go | 3 +- resources/transform.go | 6 ++++ 8 files changed, 77 insertions(+), 38 deletions(-) diff --git a/hugolib/content_map_page.go b/hugolib/content_map_page.go index ef2daca74..47637d3e8 100644 --- a/hugolib/content_map_page.go +++ b/hugolib/content_map_page.go @@ -21,7 +21,6 @@ import ( "sort" "strconv" "strings" - "sync" "sync/atomic" "time" @@ -1310,7 +1309,6 @@ func (h *HugoSites) resolveAndResetDependententPageOutputs(ctx context.Context, } po.renderState = 0 - po.p.resourcesPublishInit = &sync.Once{} if r == identity.FinderFoundOneOfMany || po.f.Name == output.HTTPStatus404HTMLFormat.Name { // Will force a re-render even in fast render mode. po.renderOnce = false diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go index ce8ddd143..b1fe279f4 100644 --- a/hugolib/hugo_sites_build.go +++ b/hugolib/hugo_sites_build.go @@ -905,7 +905,6 @@ func (h *HugoSites) processPartialFileEvents(ctx context.Context, l logg.LevelLo handleChange := func(pathInfo *paths.Path, delete, isDir bool) { switch pathInfo.Component() { case files.ComponentFolderContent: - logger.Println("Source changed", pathInfo.Path()) isContentDataFile := pathInfo.IsContentData() if !isContentDataFile { if ids := h.pageTrees.collectAndMarkStaleIdentities(pathInfo); len(ids) > 0 { diff --git a/hugolib/page.go b/hugolib/page.go index 84d4d1ea8..bdfc66e87 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -19,7 +19,6 @@ import ( "path/filepath" "strconv" "strings" - "sync" "sync/atomic" "github.com/gohugoio/hugo/hugofs" @@ -29,6 +28,7 @@ import ( "github.com/gohugoio/hugo/media" "github.com/gohugoio/hugo/output" "github.com/gohugoio/hugo/related" + "github.com/gohugoio/hugo/resources" "github.com/gohugoio/hugo/tpl/tplimpl" "github.com/spf13/afero" @@ -110,8 +110,7 @@ type pageState struct { *pageCommon resource.Staler - dependencyManager identity.Manager - resourcesPublishInit *sync.Once + dependencyManager identity.Manager } func (p *pageState) incrPageOutputTemplateVariation() { @@ -522,39 +521,41 @@ func (p *pageState) initPage() error { } func (p *pageState) renderResources() error { - var initErr error + for _, r := range p.Resources() { - p.resourcesPublishInit.Do(func() { - for _, r := range p.Resources() { - if _, ok := r.(page.Page); ok { + if _, ok := r.(page.Page); ok { + if p.s.h.buildCounter.Load() == 0 { // Pages gets rendered with the owning page but we count them here. p.s.PathSpec.ProcessingStats.Incr(&p.s.PathSpec.ProcessingStats.Pages) - continue - } - - if _, isWrapper := r.(resource.ResourceWrapper); isWrapper { - // Skip resources that are wrapped. - // These gets published on its own. - continue - } - - src, ok := r.(resource.Source) - if !ok { - initErr = fmt.Errorf("resource %T does not support resource.Source", r) - return - } - - if err := src.Publish(); err != nil { - if !herrors.IsNotExist(err) { - p.s.Log.Errorf("Failed to publish Resource for page %q: %s", p.pathOrTitle(), err) - } - } else { - p.s.PathSpec.ProcessingStats.Incr(&p.s.PathSpec.ProcessingStats.Files) } + continue } - }) - return initErr + if resources.IsPublished(r) { + continue + } + + if _, isWrapper := r.(resource.ResourceWrapper); isWrapper { + // Skip resources that are wrapped. + // These gets published on its own. + continue + } + + src, ok := r.(resource.Source) + if !ok { + return fmt.Errorf("resource %T does not support resource.Source", r) + } + + if err := src.Publish(); err != nil { + if !herrors.IsNotExist(err) { + p.s.Log.Errorf("Failed to publish Resource for page %q: %s", p.pathOrTitle(), err) + } + } else { + p.s.PathSpec.ProcessingStats.Incr(&p.s.PathSpec.ProcessingStats.Files) + } + } + + return nil } func (p *pageState) AlternativeOutputFormats() page.OutputFormats { diff --git a/hugolib/page__new.go b/hugolib/page__new.go index 10336e255..9d05abea6 100644 --- a/hugolib/page__new.go +++ b/hugolib/page__new.go @@ -16,7 +16,6 @@ package hugolib import ( "fmt" "strings" - "sync" "sync/atomic" "github.com/gohugoio/hugo/hugofs/files" @@ -190,7 +189,6 @@ func (h *HugoSites) doNewPage(m *pageMeta) (*pageState, *paths.Path, error) { pid: pid, pageOutput: nopPageOutput, pageOutputTemplateVariationsState: &atomic.Uint32{}, - resourcesPublishInit: &sync.Once{}, Staler: m, dependencyManager: m.s.Conf.NewIdentityManager(m.Path()), pageCommon: &pageCommon{ diff --git a/hugolib/rebuild_test.go b/hugolib/rebuild_test.go index 0b22b9aa7..d4a15fb5b 100644 --- a/hugolib/rebuild_test.go +++ b/hugolib/rebuild_test.go @@ -1946,3 +1946,23 @@ tags: ["tag1"] // But that is a harder problem to tackle. b.AssertFileContent("public/tags/index.html", "All. Tag1|Tag2|") } + +func TestRebuildEditNonReferencedResourceIssue13748(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +baseURL = "https://example.com" +disableLiveReload = true +-- content/mybundle/index.md -- +-- content/mybundle/resource.txt -- +This is a resource file. +-- layouts/all.html -- +All. +` + b := TestRunning(t, files) + + b.AssertFileContent("public/mybundle/resource.txt", "This is a resource file.") + b.EditFileReplaceAll("content/mybundle/resource.txt", "This is a resource file.", "This is an edited resource file.").Build() + b.AssertFileContent("public/mybundle/resource.txt", "This is an edited resource file.") +} diff --git a/resources/resource.go b/resources/resource.go index 6ef9bdae0..f6e5b9d73 100644 --- a/resources/resource.go +++ b/resources/resource.go @@ -24,6 +24,7 @@ import ( "sync/atomic" "github.com/gohugoio/hugo/identity" + "github.com/gohugoio/hugo/lazy" "github.com/gohugoio/hugo/resources/internal" "github.com/gohugoio/hugo/common/hashing" @@ -54,6 +55,7 @@ var ( _ identity.DependencyManagerProvider = (*genericResource)(nil) _ identity.Identity = (*genericResource)(nil) _ fileInfo = (*genericResource)(nil) + _ isPublishedProvider = (*genericResource)(nil) ) type ResourceSourceDescriptor struct { @@ -242,6 +244,7 @@ type baseResourceInternal interface { fileInfo mediaTypeAssigner targetPather + isPublishedProvider ReadSeekCloser() (hugio.ReadSeekCloser, error) @@ -355,7 +358,7 @@ func GetTestInfoForResource(r resource.Resource) GenericResourceTestInfo { // genericResource represents a generic linkable resource. type genericResource struct { - publishInit *sync.Once + publishInit *lazy.OnceMore key string keyInit *sync.Once @@ -536,6 +539,10 @@ func (l *genericResource) Publish() error { return err } +func (l *genericResource) isPublished() bool { + return l.publishInit.Done() +} + func (l *genericResource) RelPermalink() string { return l.spec.PathSpec.GetBasePath(false) + paths.PathEscape(l.paths.TargetLink()) } @@ -629,7 +636,7 @@ func (rc *genericResource) cloneWithUpdates(u *transformationUpdate) (baseResour } func (l genericResource) clone() *genericResource { - l.publishInit = &sync.Once{} + l.publishInit = &lazy.OnceMore{} l.keyInit = &sync.Once{} return &l } @@ -643,6 +650,10 @@ type targetPather interface { TargetPath() string } +type isPublishedProvider interface { + isPublished() bool +} + type resourceHash struct { value uint64 size int64 @@ -702,6 +713,11 @@ func InternalResourceSourcePathBestEffort(r resource.Resource) string { return InternalResourceTargetPath(r) } +// isPublished returns true if the resource is published. +func IsPublished(r resource.Resource) bool { + return r.(isPublishedProvider).isPublished() +} + type targetPathProvider interface { // targetPath is the relative path to this resource. // In most cases this will be the same as the RelPermalink(), diff --git a/resources/resource_spec.go b/resources/resource_spec.go index 56ad9a27d..806a5ff8d 100644 --- a/resources/resource_spec.go +++ b/resources/resource_spec.go @@ -20,6 +20,7 @@ import ( "github.com/gohugoio/hugo/config" "github.com/gohugoio/hugo/config/allconfig" + "github.com/gohugoio/hugo/lazy" "github.com/gohugoio/hugo/output" "github.com/gohugoio/hugo/resources/internal" "github.com/gohugoio/hugo/resources/jsconfig" @@ -189,7 +190,7 @@ func (r *Spec) NewResource(rd ResourceSourceDescriptor) (resource.Resource, erro gr := &genericResource{ Staler: &AtomicStaler{}, h: &resourceHash{}, - publishInit: &sync.Once{}, + publishInit: &lazy.OnceMore{}, keyInit: &sync.Once{}, includeHashInKey: isImage, paths: rp, diff --git a/resources/transform.go b/resources/transform.go index abb55f3cc..572143d49 100644 --- a/resources/transform.go +++ b/resources/transform.go @@ -61,6 +61,7 @@ var ( _ identity.DependencyManagerProvider = (*resourceAdapter)(nil) _ identity.IdentityGroupProvider = (*resourceAdapter)(nil) _ resource.NameNormalizedProvider = (*resourceAdapter)(nil) + _ isPublishedProvider = (*resourceAdapter)(nil) ) // These are transformations that need special support in Hugo that may not @@ -325,6 +326,11 @@ func (r *resourceAdapter) Publish() error { return r.target.Publish() } +func (r *resourceAdapter) isPublished() bool { + r.init(false, false) + return r.target.isPublished() +} + func (r *resourceAdapter) ReadSeekCloser() (hugio.ReadSeekCloser, error) { r.init(false, false) return r.target.ReadSeekCloser() From 6bd328c58486f7388888c1a53854607922a24c16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 28 May 2025 11:57:36 +0200 Subject: [PATCH 35/70] resources: Remove unused interface --- hugolib/hugo_sites_build.go | 1 + hugolib/page.go | 6 ------ resources/resource/resourcetypes.go | 5 ----- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go index b1fe279f4..ce8ddd143 100644 --- a/hugolib/hugo_sites_build.go +++ b/hugolib/hugo_sites_build.go @@ -905,6 +905,7 @@ func (h *HugoSites) processPartialFileEvents(ctx context.Context, l logg.LevelLo handleChange := func(pathInfo *paths.Path, delete, isDir bool) { switch pathInfo.Component() { case files.ComponentFolderContent: + logger.Println("Source changed", pathInfo.Path()) isContentDataFile := pathInfo.IsContentData() if !isContentDataFile { if ids := h.pageTrees.collectAndMarkStaleIdentities(pathInfo); len(ids) > 0 { diff --git a/hugolib/page.go b/hugolib/page.go index bdfc66e87..bb3835c1e 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -535,12 +535,6 @@ func (p *pageState) renderResources() error { continue } - if _, isWrapper := r.(resource.ResourceWrapper); isWrapper { - // Skip resources that are wrapped. - // These gets published on its own. - continue - } - src, ok := r.(resource.Source) if !ok { return fmt.Errorf("resource %T does not support resource.Source", r) diff --git a/resources/resource/resourcetypes.go b/resources/resource/resourcetypes.go index 585dfd150..51255c612 100644 --- a/resources/resource/resourcetypes.go +++ b/resources/resource/resourcetypes.go @@ -81,11 +81,6 @@ type ResourceWithoutMeta interface { ResourceDataProvider } -type ResourceWrapper interface { - UnwrappedResource() Resource - WrapResource(Resource) ResourceWrapper -} - type ResourceTypeProvider interface { // ResourceType is the resource type. For most file types, this is the main // part of the MIME type, e.g. "image", "application", "text" etc. From da370d30ded102efdc506c48bf7c52eef2b7ea30 Mon Sep 17 00:00:00 2001 From: Ruslan Semagin Date: Mon, 26 May 2025 17:39:48 +0300 Subject: [PATCH 36/70] parser/pageparser: Add coverage for all IsX methods of Item Added tests for all boolean methods on Item, increasing overall code coverage. --- parser/pageparser/item.go | 13 +- parser/pageparser/item_test.go | 214 +++++++++++++++++++++++++++++++++ 2 files changed, 221 insertions(+), 6 deletions(-) diff --git a/parser/pageparser/item.go b/parser/pageparser/item.go index 47ec6d64d..7d63be0ad 100644 --- a/parser/pageparser/item.go +++ b/parser/pageparser/item.go @@ -104,7 +104,7 @@ func (i Item) ValTyped(source []byte) any { } func (i Item) IsText() bool { - return i.Type == tText || i.Type == tIndentation + return i.Type == tText || i.IsIndentation() } func (i Item) IsIndentation() bool { @@ -152,7 +152,7 @@ func (i Item) IsFrontMatter() bool { } func (i Item) IsDone() bool { - return i.Type == tError || i.Type == tEOF + return i.IsError() || i.IsEOF() } func (i Item) IsEOF() bool { @@ -166,18 +166,19 @@ func (i Item) IsError() bool { func (i Item) ToString(source []byte) string { val := i.Val(source) switch { - case i.Type == tEOF: + case i.IsEOF(): return "EOF" - case i.Type == tError: + case i.IsError(): return string(val) - case i.Type == tIndentation: + case i.IsIndentation(): return fmt.Sprintf("%s:[%s]", i.Type, util.VisualizeSpaces(val)) case i.Type > tKeywordMarker: return fmt.Sprintf("<%s>", val) case len(val) > 50: return fmt.Sprintf("%v:%.20q...", i.Type, val) + default: + return fmt.Sprintf("%v:[%s]", i.Type, val) } - return fmt.Sprintf("%v:[%s]", i.Type, val) } type ItemType int diff --git a/parser/pageparser/item_test.go b/parser/pageparser/item_test.go index 36b95e93a..10dbfe895 100644 --- a/parser/pageparser/item_test.go +++ b/parser/pageparser/item_test.go @@ -47,3 +47,217 @@ func TestItemValTyped(t *testing.T) { source = []byte("xtrue") c.Assert(Item{low: 0, high: len(source)}.ValTyped(source), qt.Equals, "xtrue") } + +func TestItemBoolMethods(t *testing.T) { + c := qt.New(t) + + source := []byte(" shortcode ") + tests := []struct { + name string + item Item + source []byte + want bool + call func(Item, []byte) bool + }{ + { + name: "IsText true", + item: Item{Type: tText}, + call: func(i Item, _ []byte) bool { return i.IsText() }, + want: true, + }, + { + name: "IsIndentation false", + item: Item{Type: tText}, + call: func(i Item, _ []byte) bool { return i.IsIndentation() }, + want: false, + }, + { + name: "IsShortcodeName", + item: Item{Type: tScName}, + call: func(i Item, _ []byte) bool { return i.IsShortcodeName() }, + want: true, + }, + { + name: "IsNonWhitespace true", + item: Item{ + Type: tText, + low: 2, + high: 11, + }, + source: source, + call: func(i Item, src []byte) bool { return i.IsNonWhitespace(src) }, + want: true, + }, + { + name: "IsShortcodeParam false", + item: Item{Type: tScParamVal}, + call: func(i Item, _ []byte) bool { return i.IsShortcodeParam() }, + want: false, + }, + { + name: "IsInlineShortcodeName", + item: Item{Type: tScNameInline}, + call: func(i Item, _ []byte) bool { return i.IsInlineShortcodeName() }, + want: true, + }, + { + name: "IsLeftShortcodeDelim tLeftDelimScWithMarkup", + item: Item{Type: tLeftDelimScWithMarkup}, + call: func(i Item, _ []byte) bool { return i.IsLeftShortcodeDelim() }, + want: true, + }, + { + name: "IsLeftShortcodeDelim tLeftDelimScNoMarkup", + item: Item{Type: tLeftDelimScNoMarkup}, + call: func(i Item, _ []byte) bool { return i.IsLeftShortcodeDelim() }, + want: true, + }, + { + name: "IsRightShortcodeDelim tRightDelimScWithMarkup", + item: Item{Type: tRightDelimScWithMarkup}, + call: func(i Item, _ []byte) bool { return i.IsRightShortcodeDelim() }, + want: true, + }, + { + name: "IsRightShortcodeDelim tRightDelimScNoMarkup", + item: Item{Type: tRightDelimScNoMarkup}, + call: func(i Item, _ []byte) bool { return i.IsRightShortcodeDelim() }, + want: true, + }, + { + name: "IsShortcodeClose", + item: Item{Type: tScClose}, + call: func(i Item, _ []byte) bool { return i.IsShortcodeClose() }, + want: true, + }, + { + name: "IsShortcodeParamVal", + item: Item{Type: tScParamVal}, + call: func(i Item, _ []byte) bool { return i.IsShortcodeParamVal() }, + want: true, + }, + { + name: "IsShortcodeMarkupDelimiter tLeftDelimScWithMarkup", + item: Item{Type: tLeftDelimScWithMarkup}, + call: func(i Item, _ []byte) bool { return i.IsShortcodeMarkupDelimiter() }, + want: true, + }, + { + name: "IsShortcodeMarkupDelimiter tRightDelimScWithMarkup", + item: Item{Type: tRightDelimScWithMarkup}, + call: func(i Item, _ []byte) bool { return i.IsShortcodeMarkupDelimiter() }, + want: true, + }, + { + name: "IsFrontMatter TypeFrontMatterYAML", + item: Item{Type: TypeFrontMatterYAML}, + call: func(i Item, _ []byte) bool { return i.IsFrontMatter() }, + want: true, + }, + { + name: "IsFrontMatter TypeFrontMatterTOML", + item: Item{Type: TypeFrontMatterTOML}, + call: func(i Item, _ []byte) bool { return i.IsFrontMatter() }, + want: true, + }, + { + name: "IsFrontMatter TypeFrontMatterJSON", + item: Item{Type: TypeFrontMatterJSON}, + call: func(i Item, _ []byte) bool { return i.IsFrontMatter() }, + want: true, + }, + { + name: "IsFrontMatter TypeFrontMatterORG", + item: Item{Type: TypeFrontMatterORG}, + call: func(i Item, _ []byte) bool { return i.IsFrontMatter() }, + want: true, + }, + { + name: "IsDone tError", + item: Item{Type: tError}, + call: func(i Item, _ []byte) bool { return i.IsDone() }, + want: true, + }, + { + name: "IsDone tEOF", + item: Item{Type: tEOF}, + call: func(i Item, _ []byte) bool { return i.IsDone() }, + want: true, + }, + { + name: "IsEOF", + item: Item{Type: tEOF}, + call: func(i Item, _ []byte) bool { return i.IsEOF() }, + want: true, + }, + { + name: "IsError", + item: Item{Type: tError}, + call: func(i Item, _ []byte) bool { return i.IsError() }, + want: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := tt.call(tt.item, tt.source) + c.Assert(got, qt.Equals, tt.want) + }) + } +} + +func TestItem_ToString(t *testing.T) { + c := qt.New(t) + + source := []byte("src") + long := make([]byte, 100) + for i := range long { + long[i] = byte(i) + } + + tests := []struct { + name string + item Item + source []byte + want string + call func(Item, []byte) string + }{ + { + name: "EOF", + item: Item{Type: tEOF}, + call: func(i Item, _ []byte) string { return i.ToString(source) }, + want: "EOF", + }, + { + name: "Error", + item: Item{Type: tError}, + call: func(i Item, _ []byte) string { return i.ToString(source) }, + want: "", + }, + { + name: "Indentation", + item: Item{Type: tIndentation}, + call: func(i Item, _ []byte) string { return i.ToString(source) }, + want: "tIndentation:[]", + }, + { + name: "Long", + item: Item{Type: tKeywordMarker + 1, low: 0, high: 100}, + call: func(i Item, _ []byte) string { return i.ToString(long) }, + want: "<" + string(long) + ">", + }, + { + name: "Empty", + item: Item{Type: tKeywordMarker + 1}, + call: func(i Item, _ []byte) string { return i.ToString([]byte("")) }, + want: "<>", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := tt.call(tt.item, tt.source) + c.Assert(got, qt.Equals, tt.want) + }) + } +} From bff5d1912129d11cb088a62302507d5b07cf7f1d Mon Sep 17 00:00:00 2001 From: Ruslan Semagin Date: Tue, 27 May 2025 15:17:21 +0300 Subject: [PATCH 37/70] common/collections: Increase test coverage --- common/collections/append_test.go | 65 ++++++++++++++++++++++++++ common/collections/slice_test.go | 34 ++++++++++++++ common/collections/stack_test.go | 77 +++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 common/collections/stack_test.go diff --git a/common/collections/append_test.go b/common/collections/append_test.go index f791b731a..62d9015ce 100644 --- a/common/collections/append_test.go +++ b/common/collections/append_test.go @@ -15,6 +15,7 @@ package collections import ( "html/template" + "reflect" "testing" qt "github.com/frankban/quicktest" @@ -77,6 +78,7 @@ func TestAppend(t *testing.T) { {[]string{"a", "b"}, []any{nil}, []any{"a", "b", nil}}, {[]string{"a", "b"}, []any{nil, "d", nil}, []any{"a", "b", nil, "d", nil}}, {[]any{"a", nil, "c"}, []any{"d", nil, "f"}, []any{"a", nil, "c", "d", nil, "f"}}, + {[]string{"a", "b"}, []any{}, []string{"a", "b"}}, } { result, err := Append(test.start, test.addend...) @@ -146,3 +148,66 @@ func TestAppendShouldMakeACopyOfTheInputSlice(t *testing.T) { c.Assert(result, qt.DeepEquals, []string{"a", "b", "c"}) c.Assert(slice, qt.DeepEquals, []string{"d", "b"}) } + +func TestIndirect(t *testing.T) { + t.Parallel() + c := qt.New(t) + + type testStruct struct { + Field string + } + + var ( + nilPtr *testStruct + nilIface interface{} = nil + nonNilIface interface{} = &testStruct{Field: "hello"} + ) + + tests := []struct { + name string + input any + wantKind reflect.Kind + wantNil bool + }{ + { + name: "nil pointer", + input: nilPtr, + wantKind: reflect.Ptr, + wantNil: true, + }, + { + name: "nil interface", + input: nilIface, + wantKind: reflect.Invalid, + wantNil: false, + }, + { + name: "non-nil pointer to struct", + input: &testStruct{Field: "abc"}, + wantKind: reflect.Struct, + wantNil: false, + }, + { + name: "non-nil interface holding pointer", + input: nonNilIface, + wantKind: reflect.Struct, + wantNil: false, + }, + { + name: "plain value", + input: testStruct{Field: "xyz"}, + wantKind: reflect.Struct, + wantNil: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + v := reflect.ValueOf(tt.input) + got, isNil := indirect(v) + + c.Assert(got.Kind(), qt.Equals, tt.wantKind) + c.Assert(isNil, qt.Equals, tt.wantNil) + }) + } +} diff --git a/common/collections/slice_test.go b/common/collections/slice_test.go index 20961aac0..4008a5e6c 100644 --- a/common/collections/slice_test.go +++ b/common/collections/slice_test.go @@ -136,3 +136,37 @@ func TestSortedStringSlice(t *testing.T) { c.Assert(s.Count("z"), qt.Equals, 0) c.Assert(s.Count("a"), qt.Equals, 1) } + +func TestStringSliceToInterfaceSlice(t *testing.T) { + t.Parallel() + c := qt.New(t) + + tests := []struct { + name string + in []string + want []any + }{ + { + name: "empty slice", + in: []string{}, + want: []any{}, + }, + { + name: "single element", + in: []string{"hello"}, + want: []any{"hello"}, + }, + { + name: "multiple elements", + in: []string{"a", "b", "c"}, + want: []any{"a", "b", "c"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := StringSliceToInterfaceSlice(tt.in) + c.Assert(got, qt.DeepEquals, tt.want) + }) + } +} diff --git a/common/collections/stack_test.go b/common/collections/stack_test.go new file mode 100644 index 000000000..965d4dbc8 --- /dev/null +++ b/common/collections/stack_test.go @@ -0,0 +1,77 @@ +package collections + +import ( + "testing" + + qt "github.com/frankban/quicktest" +) + +func TestNewStack(t *testing.T) { + t.Parallel() + c := qt.New(t) + + s := NewStack[int]() + + c.Assert(s, qt.IsNotNil) +} + +func TestStackBasic(t *testing.T) { + t.Parallel() + c := qt.New(t) + + s := NewStack[int]() + + c.Assert(s.Len(), qt.Equals, 0) + + s.Push(1) + s.Push(2) + s.Push(3) + + c.Assert(s.Len(), qt.Equals, 3) + + top, ok := s.Peek() + c.Assert(ok, qt.Equals, true) + c.Assert(top, qt.Equals, 3) + + popped, ok := s.Pop() + c.Assert(ok, qt.Equals, true) + c.Assert(popped, qt.Equals, 3) + + c.Assert(s.Len(), qt.Equals, 2) + + _, _ = s.Pop() + _, _ = s.Pop() + _, ok = s.Pop() + + c.Assert(ok, qt.Equals, false) +} + +func TestStackDrain(t *testing.T) { + t.Parallel() + c := qt.New(t) + + s := NewStack[string]() + s.Push("a") + s.Push("b") + + got := s.Drain() + + c.Assert(got, qt.DeepEquals, []string{"a", "b"}) + c.Assert(s.Len(), qt.Equals, 0) +} + +func TestStackDrainMatching(t *testing.T) { + t.Parallel() + c := qt.New(t) + + s := NewStack[int]() + s.Push(1) + s.Push(2) + s.Push(3) + s.Push(4) + + got := s.DrainMatching(func(v int) bool { return v%2 == 0 }) + + c.Assert(got, qt.DeepEquals, []int{4, 2}) + c.Assert(s.Drain(), qt.DeepEquals, []int{1, 3}) +} From 843ffeb48d788039d8779e07cbab3bee524f663a Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Wed, 28 May 2025 21:57:48 -0700 Subject: [PATCH 38/70] resources/page: Respect disablePathToLower for permalink tokens Fixes #13755 --- resources/page/permalinks.go | 2 +- resources/page/permalinks_integration_test.go | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/resources/page/permalinks.go b/resources/page/permalinks.go index 953f4a2e8..f8cbcd62c 100644 --- a/resources/page/permalinks.go +++ b/resources/page/permalinks.go @@ -311,7 +311,7 @@ func (l PermalinkExpander) pageToPermalinkSections(p Page, _ string) (string, er // pageToPermalinkContentBaseName returns the URL-safe form of the content base name. func (l PermalinkExpander) pageToPermalinkContentBaseName(p Page, _ string) (string, error) { - return l.urlize(p.PathInfo().BaseNameNoIdentifier()), nil + return l.urlize(p.PathInfo().Unnormalized().BaseNameNoIdentifier()), nil } // pageToPermalinkSlugOrContentBaseName returns the URL-safe form of the slug, content base name. diff --git a/resources/page/permalinks_integration_test.go b/resources/page/permalinks_integration_test.go index 6ef450edd..c865e2704 100644 --- a/resources/page/permalinks_integration_test.go +++ b/resources/page/permalinks_integration_test.go @@ -14,6 +14,7 @@ package page_test import ( + "strings" "testing" "github.com/bep/logg" @@ -343,3 +344,29 @@ slug: "c2slug" b.AssertFileContent("public/myc/c1/index.html", "C1|/myc/c1/|term|") b.AssertFileContent("public/myc/c2slug/index.html", "C2|/myc/c2slug/|term|") } + +func TestIssue13755(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['home','rss','section','sitemap','taxonomy','term'] +disablePathToLower = false +[permalinks.page] +s1 = "/:contentbasename" +-- content/s1/aBc.md -- +--- +title: aBc +--- +-- layouts/all.html -- +{{ .Title }} +` + + b := hugolib.Test(t, files) + b.AssertFileExists("public/abc/index.html", true) + + files = strings.ReplaceAll(files, "disablePathToLower = false", "disablePathToLower = true") + + b = hugolib.Test(t, files) + b.AssertFileExists("public/aBc/index.html", true) +} From 202fe0d45ce5a091a87b04fb3eac535f923e3ca1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 May 2025 08:49:55 +0000 Subject: [PATCH 39/70] build(deps): bump github.com/alecthomas/chroma/v2 from 2.17.2 to 2.18.0 Bumps [github.com/alecthomas/chroma/v2](https://github.com/alecthomas/chroma) from 2.17.2 to 2.18.0. - [Release notes](https://github.com/alecthomas/chroma/releases) - [Changelog](https://github.com/alecthomas/chroma/blob/master/.goreleaser.yml) - [Commits](https://github.com/alecthomas/chroma/compare/v2.17.2...v2.18.0) --- updated-dependencies: - dependency-name: github.com/alecthomas/chroma/v2 dependency-version: 2.18.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index e0ce06568..277070ca8 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/gohugoio/hugo require ( github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69 - github.com/alecthomas/chroma/v2 v2.17.2 + github.com/alecthomas/chroma/v2 v2.18.0 github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c github.com/aws/aws-sdk-go-v2 v1.36.1 github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.10 diff --git a/go.sum b/go.sum index 05978a56e..dde56a89b 100644 --- a/go.sum +++ b/go.sum @@ -73,8 +73,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= -github.com/alecthomas/chroma/v2 v2.17.2 h1:Rm81SCZ2mPoH+Q8ZCc/9YvzPUN/E7HgPiPJD8SLV6GI= -github.com/alecthomas/chroma/v2 v2.17.2/go.mod h1:RVX6AvYm4VfYe/zsk7mjHueLDZor3aWCNE14TFlepBk= +github.com/alecthomas/chroma/v2 v2.18.0 h1:6h53Q4hW83SuF+jcsp7CVhLsMozzvQvO8HBbKQW+gn4= +github.com/alecthomas/chroma/v2 v2.18.0/go.mod h1:RVX6AvYm4VfYe/zsk7mjHueLDZor3aWCNE14TFlepBk= github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c h1:651/eoCRnQ7YtSjAnSzRucrJz+3iGEFt+ysraELS81M= @@ -376,8 +376,6 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= @@ -400,8 +398,6 @@ github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6 h1:r3FaAI0NZK3hS github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= github.com/olekukonko/ll v0.0.8 h1:sbGZ1Fx4QxJXEqL/6IG8GEFnYojUSQ45dJVwN2FH2fc= github.com/olekukonko/ll v0.0.8/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/olekukonko/tablewriter v1.0.7 h1:HCC2e3MM+2g72M81ZcJU11uciw6z/p82aEnm4/ySDGw= github.com/olekukonko/tablewriter v1.0.7/go.mod h1:H428M+HzoUXC6JU2Abj9IT9ooRmdq9CxuDmKMtrOCMs= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= From 302e6a726ba2a6ea711bdea5e4ac7055fa705f31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 May 2025 20:15:22 +0000 Subject: [PATCH 40/70] build(deps): bump github.com/spf13/cast from 1.7.1 to 1.8.0 Bumps [github.com/spf13/cast](https://github.com/spf13/cast) from 1.7.1 to 1.8.0. - [Release notes](https://github.com/spf13/cast/releases) - [Commits](https://github.com/spf13/cast/compare/v1.7.1...v1.8.0) --- updated-dependencies: - dependency-name: github.com/spf13/cast dependency-version: 1.8.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 277070ca8..919c4fd15 100644 --- a/go.mod +++ b/go.mod @@ -62,7 +62,7 @@ require ( github.com/rogpeppe/go-internal v1.14.1 github.com/sanity-io/litter v1.5.8 github.com/spf13/afero v1.14.0 - github.com/spf13/cast v1.7.1 + github.com/spf13/cast v1.8.0 github.com/spf13/cobra v1.9.1 github.com/spf13/fsync v0.10.1 github.com/spf13/pflag v1.0.6 diff --git a/go.sum b/go.sum index dde56a89b..bc58c95c3 100644 --- a/go.sum +++ b/go.sum @@ -434,8 +434,8 @@ github.com/shogo82148/go-shuffle v0.0.0-20180218125048-27e6095f230d/go.mod h1:2h github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= -github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= -github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.8.0 h1:gEN9K4b8Xws4EX0+a0reLmhq8moKn7ntRlQYgjPeCDk= +github.com/spf13/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/fsync v0.10.1 h1:JRnB7G72b+gIBaBcpn5ibJSd7ww1iEahXSX2B8G6dSE= From 0df9f3510f805a7c351157f55113d0a6f069a653 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 08:45:47 +0000 Subject: [PATCH 41/70] build(deps): bump golang.org/x/text from 0.24.0 to 0.25.0 Bumps [golang.org/x/text](https://github.com/golang/text) from 0.24.0 to 0.25.0. - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.24.0...v0.25.0) --- updated-dependencies: - dependency-name: golang.org/x/text dependency-version: 0.25.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 919c4fd15..b7ec7bfe5 100644 --- a/go.mod +++ b/go.mod @@ -77,8 +77,8 @@ require ( golang.org/x/image v0.26.0 golang.org/x/mod v0.24.0 golang.org/x/net v0.39.0 - golang.org/x/sync v0.13.0 - golang.org/x/text v0.24.0 + golang.org/x/sync v0.14.0 + golang.org/x/text v0.25.0 golang.org/x/tools v0.32.0 google.golang.org/api v0.221.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index bc58c95c3..38682bf43 100644 --- a/go.sum +++ b/go.sum @@ -628,8 +628,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= -golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -697,8 +697,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= -golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 75259636c824897996dc857f44efc5e7880ae55b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 10:51:52 +0000 Subject: [PATCH 42/70] build(deps): bump golang.org/x/image from 0.26.0 to 0.27.0 Bumps [golang.org/x/image](https://github.com/golang/image) from 0.26.0 to 0.27.0. - [Commits](https://github.com/golang/image/compare/v0.26.0...v0.27.0) --- updated-dependencies: - dependency-name: golang.org/x/image dependency-version: 0.27.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b7ec7bfe5..4c0623354 100644 --- a/go.mod +++ b/go.mod @@ -74,7 +74,7 @@ require ( go.uber.org/automaxprocs v1.5.3 gocloud.dev v0.40.0 golang.org/x/exp v0.0.0-20221031165847-c99f073a8326 - golang.org/x/image v0.26.0 + golang.org/x/image v0.27.0 golang.org/x/mod v0.24.0 golang.org/x/net v0.39.0 golang.org/x/sync v0.14.0 diff --git a/go.sum b/go.sum index 38682bf43..3fb6d320f 100644 --- a/go.sum +++ b/go.sum @@ -531,8 +531,8 @@ golang.org/x/exp v0.0.0-20221031165847-c99f073a8326/go.mod h1:CxIveKay+FTh1D0yPZ golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.26.0 h1:4XjIFEZWQmCZi6Wv8BoxsDhRU3RVnLX04dToTDAEPlY= -golang.org/x/image v0.26.0/go.mod h1:lcxbMFAovzpnJxzXS3nyL83K27tmqtKzIJpctK8YO5c= +golang.org/x/image v0.27.0 h1:C8gA4oWU/tKkdCfYT6T2u4faJu3MeNS5O8UPWlPF61w= +golang.org/x/image v0.27.0/go.mod h1:xbdrClrAUway1MUTEZDq9mz/UpRwYAkFFNUslZtcB+g= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= From 6334948515fc8c79a12d7d5306e6adf14cc9c28d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 30 May 2025 20:57:54 +0200 Subject: [PATCH 43/70] Handle KaTeX warnings (#13760) Co-authored-by: Joe Mooring Fixes #13735 --- hugolib/site.go | 1 + internal/warpc/js/common.js | 9 +++++ internal/warpc/js/greet.bundle.js | 4 +-- internal/warpc/js/renderkatex.bundle.js | 8 ++--- internal/warpc/js/renderkatex.js | 10 ++++++ internal/warpc/warpc.go | 13 +++++++ internal/warpc/wasm/greet.wasm | Bin 2403 -> 2540 bytes internal/warpc/wasm/renderkatex.wasm | Bin 537159 -> 537651 bytes tpl/transform/transform.go | 37 +++++++++++++++++--- tpl/transform/transform_integration_test.go | 9 +++-- 10 files changed, 76 insertions(+), 15 deletions(-) diff --git a/hugolib/site.go b/hugolib/site.go index 0e658086b..acd3b5410 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -204,6 +204,7 @@ func NewHugoSites(cfg deps.DepsCfg) (*HugoSites, error) { // Katex is relatively slow. PoolSize: 8, Infof: logger.InfoCommand("wasm").Logf, + Warnf: logger.WarnCommand("wasm").Logf, }, ), } diff --git a/internal/warpc/js/common.js b/internal/warpc/js/common.js index 49aba9b4b..61c535fb7 100644 --- a/internal/warpc/js/common.js +++ b/internal/warpc/js/common.js @@ -4,6 +4,15 @@ export function readInput(handle) { let currentLine = []; const buffer = new Uint8Array(buffSize); + // These are not implemented by QuickJS. + console.warn = (value) => { + console.log(value); + }; + + console.error = (value) => { + throw new Error(value); + }; + // Read all the available bytes while (true) { // Stdin file descriptor diff --git a/internal/warpc/js/greet.bundle.js b/internal/warpc/js/greet.bundle.js index c5aa4a13a..6828d582a 100644 --- a/internal/warpc/js/greet.bundle.js +++ b/internal/warpc/js/greet.bundle.js @@ -1,2 +1,2 @@ -(()=>{function l(r){let e=[],a=new Uint8Array(1024);for(;;){let n=0;try{n=Javy.IO.readSync(0,a)}catch(o){if(o.message.includes("os error 29"))break;throw new Error("Error reading from stdin")}if(n<0)throw new Error("Error reading from stdin");if(n===0)break;if(e=[...e,...a.subarray(0,n)],!e.includes(10))continue;let t=0;for(let o=0;t{function w(r){let e=[],c=new Uint8Array(1024);for(console.warn=n=>{console.log(n)},console.error=n=>{throw new Error(n)};;){let o=0;try{o=Javy.IO.readSync(0,c)}catch(a){if(a.message.includes("os error 29"))break;throw new Error("Error reading from stdin")}if(o<0)throw new Error("Error reading from stdin");if(o===0)break;if(e=[...e,...c.subarray(0,o)],!e.includes(10))continue;let t=0;for(let a=0;t{function Wt(r){let t=[],a=new Uint8Array(1024);for(;;){let s=0;try{s=Javy.IO.readSync(0,a)}catch(h){if(h.message.includes("os error 29"))break;throw new Error("Error reading from stdin")}if(s<0)throw new Error("Error reading from stdin");if(s===0)break;if(t=[...t,...a.subarray(0,s)],!t.includes(10))continue;let l=0;for(let h=0;l{function Wt(r){let t=[],a=new Uint8Array(1024);for(console.warn=n=>{console.log(n)},console.error=n=>{throw new Error(n)};;){let s=0;try{s=Javy.IO.readSync(0,a)}catch(h){if(h.message.includes("os error 29"))break;throw new Error("Error reading from stdin")}if(s<0)throw new Error("Error reading from stdin");if(s===0)break;if(t=[...t,...a.subarray(0,s)],!t.includes(10))continue;let l=0;for(let h=0;l15?f="\u2026"+h.slice(n-15,n):f=h.slice(0,n);var v;s+15":">","<":"<",'"':""","'":"'"},Ba=/[&><"']/g;function Da(r){return String(r).replace(Ba,e=>qa[e])}var zr=function r(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?r(e.body[0]):e:e.type==="font"?r(e.body):e},Ca=function(e){var t=zr(e);return t.type==="mathord"||t.type==="textord"||t.type==="atom"},_a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},Na=function(e){var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},O={contains:Ma,deflt:za,escape:Da,hyphenate:Ta,getBaseElem:zr,isCharacterBox:Ca,protocolFromUrl:Na},Oe={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:r=>"#"+r},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(r,e)=>(e.push(r),e)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:r=>Math.max(0,r),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:r=>Math.max(0,r),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:r=>Math.max(0,r),cli:"-e, --max-expand ",cliProcessor:r=>r==="Infinity"?1/0:parseInt(r)},globalGroup:{type:"boolean",cli:!1}};function Oa(r){if(r.default)return r.default;var e=r.type,t=Array.isArray(e)?e[0]:e;if(typeof t!="string")return t.enum[0];switch(t){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}var de=class{constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var t in Oe)if(Oe.hasOwnProperty(t)){var a=Oe[t];this[t]=e[t]!==void 0?a.processor?a.processor(e[t]):e[t]:Oa(a)}}reportNonstrict(e,t,a){var n=this.strict;if(typeof n=="function"&&(n=n(e,t,a)),!(!n||n==="ignore")){if(n===!0||n==="error")throw new z("LaTeX-incompatible input and strict mode is set to 'error': "+(t+" ["+e+"]"),a);n==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+t+" ["+e+"]"))}}useStrictBehavior(e,t,a){var n=this.strict;if(typeof n=="function")try{n=n(e,t,a)}catch{n="error"}return!n||n==="ignore"?!1:n===!0||n==="error"?!0:n==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+t+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var t=O.protocolFromUrl(e.url);if(t==null)return!1;e.protocol=t}var a=typeof this.trust=="function"?this.trust(e):this.trust;return!!a}},k0=class{constructor(e,t,a){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=a}sup(){return M0[Ia[this.id]]}sub(){return M0[Ea[this.id]]}fracNum(){return M0[Ra[this.id]]}fracDen(){return M0[$a[this.id]]}cramp(){return M0[La[this.id]]}text(){return M0[Fa[this.id]]}isTight(){return this.size>=2}},At=0,Ee=1,ae=2,N0=3,pe=4,v0=5,ne=6,o0=7,M0=[new k0(At,0,!1),new k0(Ee,0,!0),new k0(ae,1,!1),new k0(N0,1,!0),new k0(pe,2,!1),new k0(v0,2,!0),new k0(ne,3,!1),new k0(o0,3,!0)],Ia=[pe,v0,pe,v0,ne,o0,ne,o0],Ea=[v0,v0,v0,v0,o0,o0,o0,o0],Ra=[ae,N0,pe,v0,ne,o0,ne,o0],$a=[N0,N0,v0,v0,o0,o0,o0,o0],La=[Ee,Ee,N0,N0,v0,v0,o0,o0],Fa=[At,Ee,ae,N0,ae,N0,ae,N0],E={DISPLAY:M0[At],TEXT:M0[ae],SCRIPT:M0[pe],SCRIPTSCRIPT:M0[ne]},pt=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function Ha(r){for(var e=0;e=n[0]&&r<=n[1])return t.name}return null}var Ie=[];pt.forEach(r=>r.blocks.forEach(e=>Ie.push(...e)));function Ar(r){for(var e=0;e=Ie[e]&&r<=Ie[e+1])return!0;return!1}var re=80,Pa=function(e,t){return"M95,"+(622+e+t)+` c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 @@ -254,9 +254,9 @@ c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 l0,-`+(t+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, -470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},Y0=class{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return O.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),t=0;tt.toText();return this.children.map(e).join("")}},z0={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},ke={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Zt={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};function Ja(r,e){z0[r]=e}function Tt(r,e,t){if(!z0[e])throw new Error("Font metrics not found for font: "+e+".");var a=r.charCodeAt(0),n=z0[e][a];if(!n&&r[0]in Zt&&(a=Zt[r[0]].charCodeAt(0),n=z0[e][a]),!n&&t==="text"&&Ar(a)&&(n=z0[e][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var tt={};function Qa(r){var e;if(r>=5?e=0:r>=3?e=1:e=2,!tt[e]){var t=tt[e]={cssEmPerMu:ke.quad[e]/18};for(var a in ke)ke.hasOwnProperty(a)&&(t[a]=ke[a][e])}return tt[e]}var e1=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],jt=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Kt=function(e,t){return t.size<2?e:e1[e-1][t.size-1]},Re=class r{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||r.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=jt[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a]);return new r(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:Kt(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:jt[e-1]})}havingBaseStyle(e){e=e||this.style.text();var t=Kt(r.BASESIZE,e);return this.size===t&&this.textSize===r.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==r.BASESIZE?["sizing","reset-size"+this.size,"size"+r.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Qa(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};Re.BASESIZE=6;var ft={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},t1={ex:!0,em:!0,mu:!0},Tr=function(e){return typeof e!="string"&&(e=e.unit),e in ft||e in t1||e==="ex"},Q=function(e,t){var a;if(e.unit in ft)a=ft[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if(e.unit==="mu")a=t.fontMetrics().cssEmPerMu;else{var n;if(t.style.isTight()?n=t.havingStyle(t.style.text()):n=t,e.unit==="ex")a=n.fontMetrics().xHeight;else if(e.unit==="em")a=n.fontMetrics().quad;else throw new z("Invalid unit: '"+e.unit+"'");n!==t&&(a*=n.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*a,t.maxSize)},T=function(e){return+e.toFixed(4)+"em"},G0=function(e){return e.filter(t=>t).join(" ")},qr=function(e,t,a){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=a||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},Br=function(e){var t=document.createElement(e);t.className=G0(this.classes);for(var a in this.style)this.style.hasOwnProperty(a)&&(t.style[a]=this.style[a]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributes[n]);for(var s=0;s/=\x00-\x1f]/,Dr=function(e){var t="<"+e;this.classes.length&&(t+=' class="'+O.escape(G0(this.classes))+'"');var a="";for(var n in this.style)this.style.hasOwnProperty(n)&&(a+=O.hyphenate(n)+":"+this.style[n]+";");a&&(t+=' style="'+O.escape(a)+'"');for(var s in this.attributes)if(this.attributes.hasOwnProperty(s)){if(r1.test(s))throw new z("Invalid attribute name '"+s+"'");t+=" "+s+'="'+O.escape(this.attributes[s])+'"'}t+=">";for(var l=0;l",t},Z0=class{constructor(e,t,a,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,qr.call(this,e,a,n),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return O.contains(this.classes,e)}toNode(){return Br.call(this,"span")}toMarkup(){return Dr.call(this,"span")}},fe=class{constructor(e,t,a,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,qr.call(this,t,n),this.children=a||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return O.contains(this.classes,e)}toNode(){return Br.call(this,"a")}toMarkup(){return Dr.call(this,"a")}},vt=class{constructor(e,t,a){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=a}hasClass(e){return O.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var t in this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){var e=''+O.escape(this.alt)+'0&&(t=document.createElement("span"),t.style.marginRight=T(this.italic)),this.classes.length>0&&(t=t||document.createElement("span"),t.className=G0(this.classes));for(var a in this.style)this.style.hasOwnProperty(a)&&(t=t||document.createElement("span"),t.style[a]=this.style[a]);return t?(t.appendChild(e),t):e}toMarkup(){var e=!1,t="0&&(a+="margin-right:"+this.italic+"em;");for(var n in this.style)this.style.hasOwnProperty(n)&&(a+=O.hyphenate(n)+":"+this.style[n]+";");a&&(e=!0,t+=' style="'+O.escape(a)+'"');var s=O.escape(this.text);return e?(t+=">",t+=s,t+="",t):s}},S0=class{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){var e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"svg");for(var a in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,a)&&t.setAttribute(a,this.attributes[a]);for(var n=0;n':''}},ve=class{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"line");for(var a in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,a)&&t.setAttribute(a,this.attributes[a]);return t}toMarkup(){var e=" but got "+String(r)+".")}var i1={bin:1,close:1,inner:1,open:1,punct:1,rel:1},s1={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},Y={math:{},text:{}};function i(r,e,t,a,n,s){Y[r][n]={font:e,group:t,replace:a},s&&a&&(Y[r][a]=Y[r][n])}var o="math",k="text",u="main",d="ams",Z="accent-token",C="bin",l0="close",ie="inner",I="mathord",t0="op-token",p0="open",Ve="punct",p="rel",R0="spacing",g="textord";i(o,u,p,"\u2261","\\equiv",!0);i(o,u,p,"\u227A","\\prec",!0);i(o,u,p,"\u227B","\\succ",!0);i(o,u,p,"\u223C","\\sim",!0);i(o,u,p,"\u22A5","\\perp");i(o,u,p,"\u2AAF","\\preceq",!0);i(o,u,p,"\u2AB0","\\succeq",!0);i(o,u,p,"\u2243","\\simeq",!0);i(o,u,p,"\u2223","\\mid",!0);i(o,u,p,"\u226A","\\ll",!0);i(o,u,p,"\u226B","\\gg",!0);i(o,u,p,"\u224D","\\asymp",!0);i(o,u,p,"\u2225","\\parallel");i(o,u,p,"\u22C8","\\bowtie",!0);i(o,u,p,"\u2323","\\smile",!0);i(o,u,p,"\u2291","\\sqsubseteq",!0);i(o,u,p,"\u2292","\\sqsupseteq",!0);i(o,u,p,"\u2250","\\doteq",!0);i(o,u,p,"\u2322","\\frown",!0);i(o,u,p,"\u220B","\\ni",!0);i(o,u,p,"\u221D","\\propto",!0);i(o,u,p,"\u22A2","\\vdash",!0);i(o,u,p,"\u22A3","\\dashv",!0);i(o,u,p,"\u220B","\\owns");i(o,u,Ve,".","\\ldotp");i(o,u,Ve,"\u22C5","\\cdotp");i(o,u,g,"#","\\#");i(k,u,g,"#","\\#");i(o,u,g,"&","\\&");i(k,u,g,"&","\\&");i(o,u,g,"\u2135","\\aleph",!0);i(o,u,g,"\u2200","\\forall",!0);i(o,u,g,"\u210F","\\hbar",!0);i(o,u,g,"\u2203","\\exists",!0);i(o,u,g,"\u2207","\\nabla",!0);i(o,u,g,"\u266D","\\flat",!0);i(o,u,g,"\u2113","\\ell",!0);i(o,u,g,"\u266E","\\natural",!0);i(o,u,g,"\u2663","\\clubsuit",!0);i(o,u,g,"\u2118","\\wp",!0);i(o,u,g,"\u266F","\\sharp",!0);i(o,u,g,"\u2662","\\diamondsuit",!0);i(o,u,g,"\u211C","\\Re",!0);i(o,u,g,"\u2661","\\heartsuit",!0);i(o,u,g,"\u2111","\\Im",!0);i(o,u,g,"\u2660","\\spadesuit",!0);i(o,u,g,"\xA7","\\S",!0);i(k,u,g,"\xA7","\\S");i(o,u,g,"\xB6","\\P",!0);i(k,u,g,"\xB6","\\P");i(o,u,g,"\u2020","\\dag");i(k,u,g,"\u2020","\\dag");i(k,u,g,"\u2020","\\textdagger");i(o,u,g,"\u2021","\\ddag");i(k,u,g,"\u2021","\\ddag");i(k,u,g,"\u2021","\\textdaggerdbl");i(o,u,l0,"\u23B1","\\rmoustache",!0);i(o,u,p0,"\u23B0","\\lmoustache",!0);i(o,u,l0,"\u27EF","\\rgroup",!0);i(o,u,p0,"\u27EE","\\lgroup",!0);i(o,u,C,"\u2213","\\mp",!0);i(o,u,C,"\u2296","\\ominus",!0);i(o,u,C,"\u228E","\\uplus",!0);i(o,u,C,"\u2293","\\sqcap",!0);i(o,u,C,"\u2217","\\ast");i(o,u,C,"\u2294","\\sqcup",!0);i(o,u,C,"\u25EF","\\bigcirc",!0);i(o,u,C,"\u2219","\\bullet",!0);i(o,u,C,"\u2021","\\ddagger");i(o,u,C,"\u2240","\\wr",!0);i(o,u,C,"\u2A3F","\\amalg");i(o,u,C,"&","\\And");i(o,u,p,"\u27F5","\\longleftarrow",!0);i(o,u,p,"\u21D0","\\Leftarrow",!0);i(o,u,p,"\u27F8","\\Longleftarrow",!0);i(o,u,p,"\u27F6","\\longrightarrow",!0);i(o,u,p,"\u21D2","\\Rightarrow",!0);i(o,u,p,"\u27F9","\\Longrightarrow",!0);i(o,u,p,"\u2194","\\leftrightarrow",!0);i(o,u,p,"\u27F7","\\longleftrightarrow",!0);i(o,u,p,"\u21D4","\\Leftrightarrow",!0);i(o,u,p,"\u27FA","\\Longleftrightarrow",!0);i(o,u,p,"\u21A6","\\mapsto",!0);i(o,u,p,"\u27FC","\\longmapsto",!0);i(o,u,p,"\u2197","\\nearrow",!0);i(o,u,p,"\u21A9","\\hookleftarrow",!0);i(o,u,p,"\u21AA","\\hookrightarrow",!0);i(o,u,p,"\u2198","\\searrow",!0);i(o,u,p,"\u21BC","\\leftharpoonup",!0);i(o,u,p,"\u21C0","\\rightharpoonup",!0);i(o,u,p,"\u2199","\\swarrow",!0);i(o,u,p,"\u21BD","\\leftharpoondown",!0);i(o,u,p,"\u21C1","\\rightharpoondown",!0);i(o,u,p,"\u2196","\\nwarrow",!0);i(o,u,p,"\u21CC","\\rightleftharpoons",!0);i(o,d,p,"\u226E","\\nless",!0);i(o,d,p,"\uE010","\\@nleqslant");i(o,d,p,"\uE011","\\@nleqq");i(o,d,p,"\u2A87","\\lneq",!0);i(o,d,p,"\u2268","\\lneqq",!0);i(o,d,p,"\uE00C","\\@lvertneqq");i(o,d,p,"\u22E6","\\lnsim",!0);i(o,d,p,"\u2A89","\\lnapprox",!0);i(o,d,p,"\u2280","\\nprec",!0);i(o,d,p,"\u22E0","\\npreceq",!0);i(o,d,p,"\u22E8","\\precnsim",!0);i(o,d,p,"\u2AB9","\\precnapprox",!0);i(o,d,p,"\u2241","\\nsim",!0);i(o,d,p,"\uE006","\\@nshortmid");i(o,d,p,"\u2224","\\nmid",!0);i(o,d,p,"\u22AC","\\nvdash",!0);i(o,d,p,"\u22AD","\\nvDash",!0);i(o,d,p,"\u22EA","\\ntriangleleft");i(o,d,p,"\u22EC","\\ntrianglelefteq",!0);i(o,d,p,"\u228A","\\subsetneq",!0);i(o,d,p,"\uE01A","\\@varsubsetneq");i(o,d,p,"\u2ACB","\\subsetneqq",!0);i(o,d,p,"\uE017","\\@varsubsetneqq");i(o,d,p,"\u226F","\\ngtr",!0);i(o,d,p,"\uE00F","\\@ngeqslant");i(o,d,p,"\uE00E","\\@ngeqq");i(o,d,p,"\u2A88","\\gneq",!0);i(o,d,p,"\u2269","\\gneqq",!0);i(o,d,p,"\uE00D","\\@gvertneqq");i(o,d,p,"\u22E7","\\gnsim",!0);i(o,d,p,"\u2A8A","\\gnapprox",!0);i(o,d,p,"\u2281","\\nsucc",!0);i(o,d,p,"\u22E1","\\nsucceq",!0);i(o,d,p,"\u22E9","\\succnsim",!0);i(o,d,p,"\u2ABA","\\succnapprox",!0);i(o,d,p,"\u2246","\\ncong",!0);i(o,d,p,"\uE007","\\@nshortparallel");i(o,d,p,"\u2226","\\nparallel",!0);i(o,d,p,"\u22AF","\\nVDash",!0);i(o,d,p,"\u22EB","\\ntriangleright");i(o,d,p,"\u22ED","\\ntrianglerighteq",!0);i(o,d,p,"\uE018","\\@nsupseteqq");i(o,d,p,"\u228B","\\supsetneq",!0);i(o,d,p,"\uE01B","\\@varsupsetneq");i(o,d,p,"\u2ACC","\\supsetneqq",!0);i(o,d,p,"\uE019","\\@varsupsetneqq");i(o,d,p,"\u22AE","\\nVdash",!0);i(o,d,p,"\u2AB5","\\precneqq",!0);i(o,d,p,"\u2AB6","\\succneqq",!0);i(o,d,p,"\uE016","\\@nsubseteqq");i(o,d,C,"\u22B4","\\unlhd");i(o,d,C,"\u22B5","\\unrhd");i(o,d,p,"\u219A","\\nleftarrow",!0);i(o,d,p,"\u219B","\\nrightarrow",!0);i(o,d,p,"\u21CD","\\nLeftarrow",!0);i(o,d,p,"\u21CF","\\nRightarrow",!0);i(o,d,p,"\u21AE","\\nleftrightarrow",!0);i(o,d,p,"\u21CE","\\nLeftrightarrow",!0);i(o,d,p,"\u25B3","\\vartriangle");i(o,d,g,"\u210F","\\hslash");i(o,d,g,"\u25BD","\\triangledown");i(o,d,g,"\u25CA","\\lozenge");i(o,d,g,"\u24C8","\\circledS");i(o,d,g,"\xAE","\\circledR");i(k,d,g,"\xAE","\\circledR");i(o,d,g,"\u2221","\\measuredangle",!0);i(o,d,g,"\u2204","\\nexists");i(o,d,g,"\u2127","\\mho");i(o,d,g,"\u2132","\\Finv",!0);i(o,d,g,"\u2141","\\Game",!0);i(o,d,g,"\u2035","\\backprime");i(o,d,g,"\u25B2","\\blacktriangle");i(o,d,g,"\u25BC","\\blacktriangledown");i(o,d,g,"\u25A0","\\blacksquare");i(o,d,g,"\u29EB","\\blacklozenge");i(o,d,g,"\u2605","\\bigstar");i(o,d,g,"\u2222","\\sphericalangle",!0);i(o,d,g,"\u2201","\\complement",!0);i(o,d,g,"\xF0","\\eth",!0);i(k,u,g,"\xF0","\xF0");i(o,d,g,"\u2571","\\diagup");i(o,d,g,"\u2572","\\diagdown");i(o,d,g,"\u25A1","\\square");i(o,d,g,"\u25A1","\\Box");i(o,d,g,"\u25CA","\\Diamond");i(o,d,g,"\xA5","\\yen",!0);i(k,d,g,"\xA5","\\yen",!0);i(o,d,g,"\u2713","\\checkmark",!0);i(k,d,g,"\u2713","\\checkmark");i(o,d,g,"\u2136","\\beth",!0);i(o,d,g,"\u2138","\\daleth",!0);i(o,d,g,"\u2137","\\gimel",!0);i(o,d,g,"\u03DD","\\digamma",!0);i(o,d,g,"\u03F0","\\varkappa");i(o,d,p0,"\u250C","\\@ulcorner",!0);i(o,d,l0,"\u2510","\\@urcorner",!0);i(o,d,p0,"\u2514","\\@llcorner",!0);i(o,d,l0,"\u2518","\\@lrcorner",!0);i(o,d,p,"\u2266","\\leqq",!0);i(o,d,p,"\u2A7D","\\leqslant",!0);i(o,d,p,"\u2A95","\\eqslantless",!0);i(o,d,p,"\u2272","\\lesssim",!0);i(o,d,p,"\u2A85","\\lessapprox",!0);i(o,d,p,"\u224A","\\approxeq",!0);i(o,d,C,"\u22D6","\\lessdot");i(o,d,p,"\u22D8","\\lll",!0);i(o,d,p,"\u2276","\\lessgtr",!0);i(o,d,p,"\u22DA","\\lesseqgtr",!0);i(o,d,p,"\u2A8B","\\lesseqqgtr",!0);i(o,d,p,"\u2251","\\doteqdot");i(o,d,p,"\u2253","\\risingdotseq",!0);i(o,d,p,"\u2252","\\fallingdotseq",!0);i(o,d,p,"\u223D","\\backsim",!0);i(o,d,p,"\u22CD","\\backsimeq",!0);i(o,d,p,"\u2AC5","\\subseteqq",!0);i(o,d,p,"\u22D0","\\Subset",!0);i(o,d,p,"\u228F","\\sqsubset",!0);i(o,d,p,"\u227C","\\preccurlyeq",!0);i(o,d,p,"\u22DE","\\curlyeqprec",!0);i(o,d,p,"\u227E","\\precsim",!0);i(o,d,p,"\u2AB7","\\precapprox",!0);i(o,d,p,"\u22B2","\\vartriangleleft");i(o,d,p,"\u22B4","\\trianglelefteq");i(o,d,p,"\u22A8","\\vDash",!0);i(o,d,p,"\u22AA","\\Vvdash",!0);i(o,d,p,"\u2323","\\smallsmile");i(o,d,p,"\u2322","\\smallfrown");i(o,d,p,"\u224F","\\bumpeq",!0);i(o,d,p,"\u224E","\\Bumpeq",!0);i(o,d,p,"\u2267","\\geqq",!0);i(o,d,p,"\u2A7E","\\geqslant",!0);i(o,d,p,"\u2A96","\\eqslantgtr",!0);i(o,d,p,"\u2273","\\gtrsim",!0);i(o,d,p,"\u2A86","\\gtrapprox",!0);i(o,d,C,"\u22D7","\\gtrdot");i(o,d,p,"\u22D9","\\ggg",!0);i(o,d,p,"\u2277","\\gtrless",!0);i(o,d,p,"\u22DB","\\gtreqless",!0);i(o,d,p,"\u2A8C","\\gtreqqless",!0);i(o,d,p,"\u2256","\\eqcirc",!0);i(o,d,p,"\u2257","\\circeq",!0);i(o,d,p,"\u225C","\\triangleq",!0);i(o,d,p,"\u223C","\\thicksim");i(o,d,p,"\u2248","\\thickapprox");i(o,d,p,"\u2AC6","\\supseteqq",!0);i(o,d,p,"\u22D1","\\Supset",!0);i(o,d,p,"\u2290","\\sqsupset",!0);i(o,d,p,"\u227D","\\succcurlyeq",!0);i(o,d,p,"\u22DF","\\curlyeqsucc",!0);i(o,d,p,"\u227F","\\succsim",!0);i(o,d,p,"\u2AB8","\\succapprox",!0);i(o,d,p,"\u22B3","\\vartriangleright");i(o,d,p,"\u22B5","\\trianglerighteq");i(o,d,p,"\u22A9","\\Vdash",!0);i(o,d,p,"\u2223","\\shortmid");i(o,d,p,"\u2225","\\shortparallel");i(o,d,p,"\u226C","\\between",!0);i(o,d,p,"\u22D4","\\pitchfork",!0);i(o,d,p,"\u221D","\\varpropto");i(o,d,p,"\u25C0","\\blacktriangleleft");i(o,d,p,"\u2234","\\therefore",!0);i(o,d,p,"\u220D","\\backepsilon");i(o,d,p,"\u25B6","\\blacktriangleright");i(o,d,p,"\u2235","\\because",!0);i(o,d,p,"\u22D8","\\llless");i(o,d,p,"\u22D9","\\gggtr");i(o,d,C,"\u22B2","\\lhd");i(o,d,C,"\u22B3","\\rhd");i(o,d,p,"\u2242","\\eqsim",!0);i(o,u,p,"\u22C8","\\Join");i(o,d,p,"\u2251","\\Doteq",!0);i(o,d,C,"\u2214","\\dotplus",!0);i(o,d,C,"\u2216","\\smallsetminus");i(o,d,C,"\u22D2","\\Cap",!0);i(o,d,C,"\u22D3","\\Cup",!0);i(o,d,C,"\u2A5E","\\doublebarwedge",!0);i(o,d,C,"\u229F","\\boxminus",!0);i(o,d,C,"\u229E","\\boxplus",!0);i(o,d,C,"\u22C7","\\divideontimes",!0);i(o,d,C,"\u22C9","\\ltimes",!0);i(o,d,C,"\u22CA","\\rtimes",!0);i(o,d,C,"\u22CB","\\leftthreetimes",!0);i(o,d,C,"\u22CC","\\rightthreetimes",!0);i(o,d,C,"\u22CF","\\curlywedge",!0);i(o,d,C,"\u22CE","\\curlyvee",!0);i(o,d,C,"\u229D","\\circleddash",!0);i(o,d,C,"\u229B","\\circledast",!0);i(o,d,C,"\u22C5","\\centerdot");i(o,d,C,"\u22BA","\\intercal",!0);i(o,d,C,"\u22D2","\\doublecap");i(o,d,C,"\u22D3","\\doublecup");i(o,d,C,"\u22A0","\\boxtimes",!0);i(o,d,p,"\u21E2","\\dashrightarrow",!0);i(o,d,p,"\u21E0","\\dashleftarrow",!0);i(o,d,p,"\u21C7","\\leftleftarrows",!0);i(o,d,p,"\u21C6","\\leftrightarrows",!0);i(o,d,p,"\u21DA","\\Lleftarrow",!0);i(o,d,p,"\u219E","\\twoheadleftarrow",!0);i(o,d,p,"\u21A2","\\leftarrowtail",!0);i(o,d,p,"\u21AB","\\looparrowleft",!0);i(o,d,p,"\u21CB","\\leftrightharpoons",!0);i(o,d,p,"\u21B6","\\curvearrowleft",!0);i(o,d,p,"\u21BA","\\circlearrowleft",!0);i(o,d,p,"\u21B0","\\Lsh",!0);i(o,d,p,"\u21C8","\\upuparrows",!0);i(o,d,p,"\u21BF","\\upharpoonleft",!0);i(o,d,p,"\u21C3","\\downharpoonleft",!0);i(o,u,p,"\u22B6","\\origof",!0);i(o,u,p,"\u22B7","\\imageof",!0);i(o,d,p,"\u22B8","\\multimap",!0);i(o,d,p,"\u21AD","\\leftrightsquigarrow",!0);i(o,d,p,"\u21C9","\\rightrightarrows",!0);i(o,d,p,"\u21C4","\\rightleftarrows",!0);i(o,d,p,"\u21A0","\\twoheadrightarrow",!0);i(o,d,p,"\u21A3","\\rightarrowtail",!0);i(o,d,p,"\u21AC","\\looparrowright",!0);i(o,d,p,"\u21B7","\\curvearrowright",!0);i(o,d,p,"\u21BB","\\circlearrowright",!0);i(o,d,p,"\u21B1","\\Rsh",!0);i(o,d,p,"\u21CA","\\downdownarrows",!0);i(o,d,p,"\u21BE","\\upharpoonright",!0);i(o,d,p,"\u21C2","\\downharpoonright",!0);i(o,d,p,"\u21DD","\\rightsquigarrow",!0);i(o,d,p,"\u21DD","\\leadsto");i(o,d,p,"\u21DB","\\Rrightarrow",!0);i(o,d,p,"\u21BE","\\restriction");i(o,u,g,"\u2018","`");i(o,u,g,"$","\\$");i(k,u,g,"$","\\$");i(k,u,g,"$","\\textdollar");i(o,u,g,"%","\\%");i(k,u,g,"%","\\%");i(o,u,g,"_","\\_");i(k,u,g,"_","\\_");i(k,u,g,"_","\\textunderscore");i(o,u,g,"\u2220","\\angle",!0);i(o,u,g,"\u221E","\\infty",!0);i(o,u,g,"\u2032","\\prime");i(o,u,g,"\u25B3","\\triangle");i(o,u,g,"\u0393","\\Gamma",!0);i(o,u,g,"\u0394","\\Delta",!0);i(o,u,g,"\u0398","\\Theta",!0);i(o,u,g,"\u039B","\\Lambda",!0);i(o,u,g,"\u039E","\\Xi",!0);i(o,u,g,"\u03A0","\\Pi",!0);i(o,u,g,"\u03A3","\\Sigma",!0);i(o,u,g,"\u03A5","\\Upsilon",!0);i(o,u,g,"\u03A6","\\Phi",!0);i(o,u,g,"\u03A8","\\Psi",!0);i(o,u,g,"\u03A9","\\Omega",!0);i(o,u,g,"A","\u0391");i(o,u,g,"B","\u0392");i(o,u,g,"E","\u0395");i(o,u,g,"Z","\u0396");i(o,u,g,"H","\u0397");i(o,u,g,"I","\u0399");i(o,u,g,"K","\u039A");i(o,u,g,"M","\u039C");i(o,u,g,"N","\u039D");i(o,u,g,"O","\u039F");i(o,u,g,"P","\u03A1");i(o,u,g,"T","\u03A4");i(o,u,g,"X","\u03A7");i(o,u,g,"\xAC","\\neg",!0);i(o,u,g,"\xAC","\\lnot");i(o,u,g,"\u22A4","\\top");i(o,u,g,"\u22A5","\\bot");i(o,u,g,"\u2205","\\emptyset");i(o,d,g,"\u2205","\\varnothing");i(o,u,I,"\u03B1","\\alpha",!0);i(o,u,I,"\u03B2","\\beta",!0);i(o,u,I,"\u03B3","\\gamma",!0);i(o,u,I,"\u03B4","\\delta",!0);i(o,u,I,"\u03F5","\\epsilon",!0);i(o,u,I,"\u03B6","\\zeta",!0);i(o,u,I,"\u03B7","\\eta",!0);i(o,u,I,"\u03B8","\\theta",!0);i(o,u,I,"\u03B9","\\iota",!0);i(o,u,I,"\u03BA","\\kappa",!0);i(o,u,I,"\u03BB","\\lambda",!0);i(o,u,I,"\u03BC","\\mu",!0);i(o,u,I,"\u03BD","\\nu",!0);i(o,u,I,"\u03BE","\\xi",!0);i(o,u,I,"\u03BF","\\omicron",!0);i(o,u,I,"\u03C0","\\pi",!0);i(o,u,I,"\u03C1","\\rho",!0);i(o,u,I,"\u03C3","\\sigma",!0);i(o,u,I,"\u03C4","\\tau",!0);i(o,u,I,"\u03C5","\\upsilon",!0);i(o,u,I,"\u03D5","\\phi",!0);i(o,u,I,"\u03C7","\\chi",!0);i(o,u,I,"\u03C8","\\psi",!0);i(o,u,I,"\u03C9","\\omega",!0);i(o,u,I,"\u03B5","\\varepsilon",!0);i(o,u,I,"\u03D1","\\vartheta",!0);i(o,u,I,"\u03D6","\\varpi",!0);i(o,u,I,"\u03F1","\\varrho",!0);i(o,u,I,"\u03C2","\\varsigma",!0);i(o,u,I,"\u03C6","\\varphi",!0);i(o,u,C,"\u2217","*",!0);i(o,u,C,"+","+");i(o,u,C,"\u2212","-",!0);i(o,u,C,"\u22C5","\\cdot",!0);i(o,u,C,"\u2218","\\circ",!0);i(o,u,C,"\xF7","\\div",!0);i(o,u,C,"\xB1","\\pm",!0);i(o,u,C,"\xD7","\\times",!0);i(o,u,C,"\u2229","\\cap",!0);i(o,u,C,"\u222A","\\cup",!0);i(o,u,C,"\u2216","\\setminus",!0);i(o,u,C,"\u2227","\\land");i(o,u,C,"\u2228","\\lor");i(o,u,C,"\u2227","\\wedge",!0);i(o,u,C,"\u2228","\\vee",!0);i(o,u,g,"\u221A","\\surd");i(o,u,p0,"\u27E8","\\langle",!0);i(o,u,p0,"\u2223","\\lvert");i(o,u,p0,"\u2225","\\lVert");i(o,u,l0,"?","?");i(o,u,l0,"!","!");i(o,u,l0,"\u27E9","\\rangle",!0);i(o,u,l0,"\u2223","\\rvert");i(o,u,l0,"\u2225","\\rVert");i(o,u,p,"=","=");i(o,u,p,":",":");i(o,u,p,"\u2248","\\approx",!0);i(o,u,p,"\u2245","\\cong",!0);i(o,u,p,"\u2265","\\ge");i(o,u,p,"\u2265","\\geq",!0);i(o,u,p,"\u2190","\\gets");i(o,u,p,">","\\gt",!0);i(o,u,p,"\u2208","\\in",!0);i(o,u,p,"\uE020","\\@not");i(o,u,p,"\u2282","\\subset",!0);i(o,u,p,"\u2283","\\supset",!0);i(o,u,p,"\u2286","\\subseteq",!0);i(o,u,p,"\u2287","\\supseteq",!0);i(o,d,p,"\u2288","\\nsubseteq",!0);i(o,d,p,"\u2289","\\nsupseteq",!0);i(o,u,p,"\u22A8","\\models");i(o,u,p,"\u2190","\\leftarrow",!0);i(o,u,p,"\u2264","\\le");i(o,u,p,"\u2264","\\leq",!0);i(o,u,p,"<","\\lt",!0);i(o,u,p,"\u2192","\\rightarrow",!0);i(o,u,p,"\u2192","\\to");i(o,d,p,"\u2271","\\ngeq",!0);i(o,d,p,"\u2270","\\nleq",!0);i(o,u,R0,"\xA0","\\ ");i(o,u,R0,"\xA0","\\space");i(o,u,R0,"\xA0","\\nobreakspace");i(k,u,R0,"\xA0","\\ ");i(k,u,R0,"\xA0"," ");i(k,u,R0,"\xA0","\\space");i(k,u,R0,"\xA0","\\nobreakspace");i(o,u,R0,null,"\\nobreak");i(o,u,R0,null,"\\allowbreak");i(o,u,Ve,",",",");i(o,u,Ve,";",";");i(o,d,C,"\u22BC","\\barwedge",!0);i(o,d,C,"\u22BB","\\veebar",!0);i(o,u,C,"\u2299","\\odot",!0);i(o,u,C,"\u2295","\\oplus",!0);i(o,u,C,"\u2297","\\otimes",!0);i(o,u,g,"\u2202","\\partial",!0);i(o,u,C,"\u2298","\\oslash",!0);i(o,d,C,"\u229A","\\circledcirc",!0);i(o,d,C,"\u22A1","\\boxdot",!0);i(o,u,C,"\u25B3","\\bigtriangleup");i(o,u,C,"\u25BD","\\bigtriangledown");i(o,u,C,"\u2020","\\dagger");i(o,u,C,"\u22C4","\\diamond");i(o,u,C,"\u22C6","\\star");i(o,u,C,"\u25C3","\\triangleleft");i(o,u,C,"\u25B9","\\triangleright");i(o,u,p0,"{","\\{");i(k,u,g,"{","\\{");i(k,u,g,"{","\\textbraceleft");i(o,u,l0,"}","\\}");i(k,u,g,"}","\\}");i(k,u,g,"}","\\textbraceright");i(o,u,p0,"{","\\lbrace");i(o,u,l0,"}","\\rbrace");i(o,u,p0,"[","\\lbrack",!0);i(k,u,g,"[","\\lbrack",!0);i(o,u,l0,"]","\\rbrack",!0);i(k,u,g,"]","\\rbrack",!0);i(o,u,p0,"(","\\lparen",!0);i(o,u,l0,")","\\rparen",!0);i(k,u,g,"<","\\textless",!0);i(k,u,g,">","\\textgreater",!0);i(o,u,p0,"\u230A","\\lfloor",!0);i(o,u,l0,"\u230B","\\rfloor",!0);i(o,u,p0,"\u2308","\\lceil",!0);i(o,u,l0,"\u2309","\\rceil",!0);i(o,u,g,"\\","\\backslash");i(o,u,g,"\u2223","|");i(o,u,g,"\u2223","\\vert");i(k,u,g,"|","\\textbar",!0);i(o,u,g,"\u2225","\\|");i(o,u,g,"\u2225","\\Vert");i(k,u,g,"\u2225","\\textbardbl");i(k,u,g,"~","\\textasciitilde");i(k,u,g,"\\","\\textbackslash");i(k,u,g,"^","\\textasciicircum");i(o,u,p,"\u2191","\\uparrow",!0);i(o,u,p,"\u21D1","\\Uparrow",!0);i(o,u,p,"\u2193","\\downarrow",!0);i(o,u,p,"\u21D3","\\Downarrow",!0);i(o,u,p,"\u2195","\\updownarrow",!0);i(o,u,p,"\u21D5","\\Updownarrow",!0);i(o,u,t0,"\u2210","\\coprod");i(o,u,t0,"\u22C1","\\bigvee");i(o,u,t0,"\u22C0","\\bigwedge");i(o,u,t0,"\u2A04","\\biguplus");i(o,u,t0,"\u22C2","\\bigcap");i(o,u,t0,"\u22C3","\\bigcup");i(o,u,t0,"\u222B","\\int");i(o,u,t0,"\u222B","\\intop");i(o,u,t0,"\u222C","\\iint");i(o,u,t0,"\u222D","\\iiint");i(o,u,t0,"\u220F","\\prod");i(o,u,t0,"\u2211","\\sum");i(o,u,t0,"\u2A02","\\bigotimes");i(o,u,t0,"\u2A01","\\bigoplus");i(o,u,t0,"\u2A00","\\bigodot");i(o,u,t0,"\u222E","\\oint");i(o,u,t0,"\u222F","\\oiint");i(o,u,t0,"\u2230","\\oiiint");i(o,u,t0,"\u2A06","\\bigsqcup");i(o,u,t0,"\u222B","\\smallint");i(k,u,ie,"\u2026","\\textellipsis");i(o,u,ie,"\u2026","\\mathellipsis");i(k,u,ie,"\u2026","\\ldots",!0);i(o,u,ie,"\u2026","\\ldots",!0);i(o,u,ie,"\u22EF","\\@cdots",!0);i(o,u,ie,"\u22F1","\\ddots",!0);i(o,u,g,"\u22EE","\\varvdots");i(k,u,g,"\u22EE","\\varvdots");i(o,u,Z,"\u02CA","\\acute");i(o,u,Z,"\u02CB","\\grave");i(o,u,Z,"\xA8","\\ddot");i(o,u,Z,"~","\\tilde");i(o,u,Z,"\u02C9","\\bar");i(o,u,Z,"\u02D8","\\breve");i(o,u,Z,"\u02C7","\\check");i(o,u,Z,"^","\\hat");i(o,u,Z,"\u20D7","\\vec");i(o,u,Z,"\u02D9","\\dot");i(o,u,Z,"\u02DA","\\mathring");i(o,u,I,"\uE131","\\@imath");i(o,u,I,"\uE237","\\@jmath");i(o,u,g,"\u0131","\u0131");i(o,u,g,"\u0237","\u0237");i(k,u,g,"\u0131","\\i",!0);i(k,u,g,"\u0237","\\j",!0);i(k,u,g,"\xDF","\\ss",!0);i(k,u,g,"\xE6","\\ae",!0);i(k,u,g,"\u0153","\\oe",!0);i(k,u,g,"\xF8","\\o",!0);i(k,u,g,"\xC6","\\AE",!0);i(k,u,g,"\u0152","\\OE",!0);i(k,u,g,"\xD8","\\O",!0);i(k,u,Z,"\u02CA","\\'");i(k,u,Z,"\u02CB","\\`");i(k,u,Z,"\u02C6","\\^");i(k,u,Z,"\u02DC","\\~");i(k,u,Z,"\u02C9","\\=");i(k,u,Z,"\u02D8","\\u");i(k,u,Z,"\u02D9","\\.");i(k,u,Z,"\xB8","\\c");i(k,u,Z,"\u02DA","\\r");i(k,u,Z,"\u02C7","\\v");i(k,u,Z,"\xA8",'\\"');i(k,u,Z,"\u02DD","\\H");i(k,u,Z,"\u25EF","\\textcircled");var Cr={"--":!0,"---":!0,"``":!0,"''":!0};i(k,u,g,"\u2013","--",!0);i(k,u,g,"\u2013","\\textendash");i(k,u,g,"\u2014","---",!0);i(k,u,g,"\u2014","\\textemdash");i(k,u,g,"\u2018","`",!0);i(k,u,g,"\u2018","\\textquoteleft");i(k,u,g,"\u2019","'",!0);i(k,u,g,"\u2019","\\textquoteright");i(k,u,g,"\u201C","``",!0);i(k,u,g,"\u201C","\\textquotedblleft");i(k,u,g,"\u201D","''",!0);i(k,u,g,"\u201D","\\textquotedblright");i(o,u,g,"\xB0","\\degree",!0);i(k,u,g,"\xB0","\\degree");i(k,u,g,"\xB0","\\textdegree",!0);i(o,u,g,"\xA3","\\pounds");i(o,u,g,"\xA3","\\mathsterling",!0);i(k,u,g,"\xA3","\\pounds");i(k,u,g,"\xA3","\\textsterling",!0);i(o,d,g,"\u2720","\\maltese");i(k,d,g,"\u2720","\\maltese");var Qt='0123456789/@."';for(Me=0;Me0)return w0(s,f,n,t,l.concat(v));if(c){var b,x;if(c==="boldsymbol"){var w=u1(s,n,t,l,a);b=w.fontName,x=[w.fontClass]}else h?(b=Or[c].fontName,x=[c]):(b=Be(c,t.fontWeight,t.fontShape),x=[c,t.fontWeight,t.fontShape]);if(Ue(s,b,n).metrics)return w0(s,b,n,t,l.concat(x));if(Cr.hasOwnProperty(s)&&b.slice(0,10)==="Typewriter"){for(var A=[],q=0;q{if(G0(r.classes)!==G0(e.classes)||r.skew!==e.skew||r.maxFontSize!==e.maxFontSize)return!1;if(r.classes.length===1){var t=r.classes[0];if(t==="mbin"||t==="mord")return!1}for(var a in r.style)if(r.style.hasOwnProperty(a)&&r.style[a]!==e.style[a])return!1;for(var n in e.style)if(e.style.hasOwnProperty(n)&&r.style[n]!==e.style[n])return!1;return!0},m1=r=>{for(var e=0;et&&(t=l.height),l.depth>a&&(a=l.depth),l.maxFontSize>n&&(n=l.maxFontSize)}e.height=t,e.depth=a,e.maxFontSize=n},h0=function(e,t,a,n){var s=new Z0(e,t,a,n);return qt(s),s},_r=(r,e,t,a)=>new Z0(r,e,t,a),d1=function(e,t,a){var n=h0([e],[],t);return n.height=Math.max(a||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=T(n.height),n.maxFontSize=1,n},p1=function(e,t,a,n){var s=new fe(e,t,a,n);return qt(s),s},Nr=function(e){var t=new Y0(e);return qt(t),t},f1=function(e,t){return e instanceof Y0?h0([],[e],t):e},v1=function(e){if(e.positionType==="individualShift"){for(var t=e.children,a=[t[0]],n=-t[0].shift-t[0].elem.depth,s=n,l=1;l{var t=h0(["mspace"],[],e),a=Q(r,e);return t.style.marginRight=T(a),t},Be=function(e,t,a){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}var s;return t==="textbf"&&a==="textit"?s="BoldItalic":t==="textbf"?s="Bold":t==="textit"?s="Italic":s="Regular",n+"-"+s},Or={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ir={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},y1=function(e,t){var[a,n,s]=Ir[e],l=new A0(a),h=new S0([l],{width:T(n),height:T(s),style:"width:"+T(n),viewBox:"0 0 "+1e3*n+" "+1e3*s,preserveAspectRatio:"xMinYMin"}),c=_r(["overlay"],[h],t);return c.height=s,c.style.height=T(s),c.style.width=T(n),c},y={fontMap:Or,makeSymbol:w0,mathsym:l1,makeSpan:h0,makeSvgSpan:_r,makeLineSpan:d1,makeAnchor:p1,makeFragment:Nr,wrapFragment:f1,makeVList:g1,makeOrd:h1,makeGlue:b1,staticSvg:y1,svgData:Ir,tryCombineChars:m1},J={number:3,unit:"mu"},W0={number:4,unit:"mu"},_0={number:5,unit:"mu"},x1={mord:{mop:J,mbin:W0,mrel:_0,minner:J},mop:{mord:J,mop:J,mrel:_0,minner:J},mbin:{mord:W0,mop:W0,mopen:W0,minner:W0},mrel:{mord:_0,mop:_0,mopen:_0,minner:_0},mopen:{},mclose:{mop:J,mbin:W0,mrel:_0,minner:J},mpunct:{mord:J,mop:J,mrel:_0,mopen:J,mclose:J,mpunct:J,minner:J},minner:{mord:J,mop:J,mbin:W0,mrel:_0,mopen:J,mpunct:J,minner:J}},w1={mord:{mop:J},mop:{mord:J,mop:J},mbin:{},mrel:{},mopen:{},mclose:{mop:J},mpunct:{},minner:{mop:J}},Er={},Le={},Fe={};function B(r){for(var{type:e,names:t,props:a,handler:n,htmlBuilder:s,mathmlBuilder:l}=r,h={type:e,numArgs:a.numArgs,argTypes:a.argTypes,allowedInArgument:!!a.allowedInArgument,allowedInText:!!a.allowedInText,allowedInMath:a.allowedInMath===void 0?!0:a.allowedInMath,numOptionalArgs:a.numOptionalArgs||0,infix:!!a.infix,primitive:!!a.primitive,handler:n},c=0;c{var _=q.classes[0],D=A.classes[0];_==="mbin"&&O.contains(k1,D)?q.classes[0]="mord":D==="mbin"&&O.contains(S1,_)&&(A.classes[0]="mord")},{node:b},x,w),rr(s,(A,q)=>{var _=bt(q),D=bt(A),N=_&&D?A.hasClass("mtight")?w1[_][D]:x1[_][D]:null;if(N)return y.makeGlue(N,f)},{node:b},x,w),s},rr=function r(e,t,a,n,s){n&&e.push(n);for(var l=0;lx=>{e.splice(b+1,0,x),l++})(l)}n&&e.pop()},Rr=function(e){return e instanceof Y0||e instanceof fe||e instanceof Z0&&e.hasClass("enclosing")?e:null},A1=function r(e,t){var a=Rr(e);if(a){var n=a.children;if(n.length){if(t==="right")return r(n[n.length-1],"right");if(t==="left")return r(n[0],"left")}}return e},bt=function(e,t){return e?(t&&(e=A1(e,t)),z1[e.classes[0]]||null):null},ge=function(e,t){var a=["nulldelimiter"].concat(e.baseSizingClasses());return I0(t.concat(a))},G=function(e,t,a){if(!e)return I0();if(Le[e.type]){var n=Le[e.type](e,t);if(a&&t.size!==a.size){n=I0(t.sizingClasses(a),[n],t);var s=t.sizeMultiplier/a.sizeMultiplier;n.height*=s,n.depth*=s}return n}else throw new z("Got group of unknown type: '"+e.type+"'")};function De(r,e){var t=I0(["base"],r,e),a=I0(["strut"]);return a.style.height=T(t.height+t.depth),t.depth&&(a.style.verticalAlign=T(-t.depth)),t.children.unshift(a),t}function yt(r,e){var t=null;r.length===1&&r[0].type==="tag"&&(t=r[0].tag,r=r[0].body);var a=a0(r,e,"root"),n;a.length===2&&a[1].hasClass("tag")&&(n=a.pop());for(var s=[],l=[],h=0;h0&&(s.push(De(l,e)),l=[]),s.push(a[h]));l.length>0&&s.push(De(l,e));var f;t?(f=De(a0(t,e,!0)),f.classes=["tag"],s.push(f)):n&&s.push(n);var v=I0(["katex-html"],s);if(v.setAttribute("aria-hidden","true"),f){var b=f.children[0];b.style.height=T(v.height+v.depth),v.depth&&(b.style.verticalAlign=T(-v.depth))}return v}function $r(r){return new Y0(r)}var s0=class{constructor(e,t,a){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=a||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G0(this.classes));for(var a=0;a0&&(e+=' class ="'+O.escape(G0(this.classes))+'"'),e+=">";for(var a=0;a",e}toText(){return this.children.map(e=>e.toText()).join("")}},g0=class{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return O.escape(this.toText())}toText(){return this.text}},xt=class{constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",T(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},M={MathNode:s0,TextNode:g0,SpaceNode:xt,newDocumentFragment:$r},y0=function(e,t,a){return Y[t][e]&&Y[t][e].replace&&e.charCodeAt(0)!==55349&&!(Cr.hasOwnProperty(e)&&a&&(a.fontFamily&&a.fontFamily.slice(4,6)==="tt"||a.font&&a.font.slice(4,6)==="tt"))&&(e=Y[t][e].replace),new M.TextNode(e)},Bt=function(e){return e.length===1?e[0]:new M.MathNode("mrow",e)},Dt=function(e,t){if(t.fontFamily==="texttt")return"monospace";if(t.fontFamily==="textsf")return t.fontShape==="textit"&&t.fontWeight==="textbf"?"sans-serif-bold-italic":t.fontShape==="textit"?"sans-serif-italic":t.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(t.fontShape==="textit"&&t.fontWeight==="textbf")return"bold-italic";if(t.fontShape==="textit")return"italic";if(t.fontWeight==="textbf")return"bold";var a=t.font;if(!a||a==="mathnormal")return null;var n=e.mode;if(a==="mathit")return"italic";if(a==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(a==="mathbf")return"bold";if(a==="mathbb")return"double-struck";if(a==="mathsfit")return"sans-serif-italic";if(a==="mathfrak")return"fraktur";if(a==="mathscr"||a==="mathcal")return"script";if(a==="mathsf")return"sans-serif";if(a==="mathtt")return"monospace";var s=e.text;if(O.contains(["\\imath","\\jmath"],s))return null;Y[n][s]&&Y[n][s].replace&&(s=Y[n][s].replace);var l=y.fontMap[a].fontName;return Tt(s,l,n)?y.fontMap[a].variant:null};function nt(r){if(!r)return!1;if(r.type==="mi"&&r.children.length===1){var e=r.children[0];return e instanceof g0&&e.text==="."}else if(r.type==="mo"&&r.children.length===1&&r.getAttribute("separator")==="true"&&r.getAttribute("lspace")==="0em"&&r.getAttribute("rspace")==="0em"){var t=r.children[0];return t instanceof g0&&t.text===","}else return!1}var m0=function(e,t,a){if(e.length===1){var n=X(e[0],t);return a&&n instanceof s0&&n.type==="mo"&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var s=[],l,h=0;h=1&&(l.type==="mn"||nt(l))){var f=c.children[0];f instanceof s0&&f.type==="mn"&&(f.children=[...l.children,...f.children],s.pop())}else if(l.type==="mi"&&l.children.length===1){var v=l.children[0];if(v instanceof g0&&v.text==="\u0338"&&(c.type==="mo"||c.type==="mi"||c.type==="mn")){var b=c.children[0];b instanceof g0&&b.text.length>0&&(b.text=b.text.slice(0,1)+"\u0338"+b.text.slice(1),s.pop())}}}s.push(c),l=c}return s},V0=function(e,t,a){return Bt(m0(e,t,a))},X=function(e,t){if(!e)return new M.MathNode("mrow");if(Fe[e.type]){var a=Fe[e.type](e,t);return a}else throw new z("Got group of unknown type: '"+e.type+"'")};function ar(r,e,t,a,n){var s=m0(r,t),l;s.length===1&&s[0]instanceof s0&&O.contains(["mrow","mtable"],s[0].type)?l=s[0]:l=new M.MathNode("mrow",s);var h=new M.MathNode("annotation",[new M.TextNode(e)]);h.setAttribute("encoding","application/x-tex");var c=new M.MathNode("semantics",[l,h]),f=new M.MathNode("math",[c]);f.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),a&&f.setAttribute("display","block");var v=n?"katex":"katex-mathml";return y.makeSpan([v],[f])}var Lr=function(e){return new Re({style:e.displayMode?E.DISPLAY:E.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Fr=function(e,t){if(t.displayMode){var a=["katex-display"];t.leqno&&a.push("leqno"),t.fleqn&&a.push("fleqn"),e=y.makeSpan(a,[e])}return e},T1=function(e,t,a){var n=Lr(a),s;if(a.output==="mathml")return ar(e,t,n,a.displayMode,!0);if(a.output==="html"){var l=yt(e,n);s=y.makeSpan(["katex"],[l])}else{var h=ar(e,t,n,a.displayMode,!1),c=yt(e,n);s=y.makeSpan(["katex"],[h,c])}return Fr(s,a)},q1=function(e,t,a){var n=Lr(a),s=yt(e,n),l=y.makeSpan(["katex"],[s]);return Fr(l,a)},B1={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},D1=function(e){var t=new M.MathNode("mo",[new M.TextNode(B1[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},C1={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},_1=function(e){return e.type==="ordgroup"?e.body.length:1},N1=function(e,t){function a(){var h=4e5,c=e.label.slice(1);if(O.contains(["widehat","widecheck","widetilde","utilde"],c)){var f=e,v=_1(f.base),b,x,w;if(v>5)c==="widehat"||c==="widecheck"?(b=420,h=2364,w=.42,x=c+"4"):(b=312,h=2340,w=.34,x="tilde4");else{var A=[1,1,2,2,3,3][v];c==="widehat"||c==="widecheck"?(h=[0,1062,2364,2364,2364][A],b=[0,239,300,360,420][A],w=[0,.24,.3,.3,.36,.42][A],x=c+A):(h=[0,600,1033,2339,2340][A],b=[0,260,286,306,312][A],w=[0,.26,.286,.3,.306,.34][A],x="tilde"+A)}var q=new A0(x),_=new S0([q],{width:"100%",height:T(w),viewBox:"0 0 "+h+" "+b,preserveAspectRatio:"none"});return{span:y.makeSvgSpan([],[_],t),minWidth:0,height:w}}else{var D=[],N=C1[c],[$,H,F]=N,P=F/1e3,V=$.length,j,U;if(V===1){var D0=N[3];j=["hide-tail"],U=[D0]}else if(V===2)j=["halfarrow-left","halfarrow-right"],U=["xMinYMin","xMaxYMin"];else if(V===3)j=["brace-left","brace-center","brace-right"],U=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support - `+V+" children.");for(var i0=0;i00&&(n.style.minWidth=T(s)),n},O1=function(e,t,a,n,s){var l,h=e.height+e.depth+a+n;if(/fbox|color|angl/.test(t)){if(l=y.makeSpan(["stretchy",t],[],s),t==="fbox"){var c=s.color&&s.getColor();c&&(l.style.borderColor=c)}}else{var f=[];/^[bx]cancel$/.test(t)&&f.push(new ve({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&f.push(new ve({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var v=new S0(f,{width:"100%",height:T(h)});l=y.makeSvgSpan([],[v],s)}return l.height=h,l.style.height=T(h),l},E0={encloseSpan:O1,mathMLnode:D1,svgSpan:N1};function L(r,e){if(!r||r.type!==e)throw new Error("Expected node of type "+e+", but got "+(r?"node of type "+r.type:String(r)));return r}function Ct(r){var e=Xe(r);if(!e)throw new Error("Expected node of symbol group type, but got "+(r?"node of type "+r.type:String(r)));return e}function Xe(r){return r&&(r.type==="atom"||s1.hasOwnProperty(r.type))?r:null}var _t=(r,e)=>{var t,a,n;r&&r.type==="supsub"?(a=L(r.base,"accent"),t=a.base,r.base=t,n=n1(G(r,e)),r.base=a):(a=L(r,"accent"),t=a.base);var s=G(t,e.havingCrampedStyle()),l=a.isShifty&&O.isCharacterBox(t),h=0;if(l){var c=O.getBaseElem(t),f=G(c,e.havingCrampedStyle());h=Jt(f).skew}var v=a.label==="\\c",b=v?s.height+s.depth:Math.min(s.height,e.fontMetrics().xHeight),x;if(a.isStretchy)x=E0.svgSpan(a,e),x=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"elem",elem:x,wrapperClasses:["svg-align"],wrapperStyle:h>0?{width:"calc(100% - "+T(2*h)+")",marginLeft:T(2*h)}:void 0}]},e);else{var w,A;a.label==="\\vec"?(w=y.staticSvg("vec",e),A=y.svgData.vec[1]):(w=y.makeOrd({mode:a.mode,text:a.label},e,"textord"),w=Jt(w),w.italic=0,A=w.width,v&&(b+=w.depth)),x=y.makeSpan(["accent-body"],[w]);var q=a.label==="\\textcircled";q&&(x.classes.push("accent-full"),b=s.height);var _=h;q||(_-=A/2),x.style.left=T(_),a.label==="\\textcircled"&&(x.style.top=".2em"),x=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:-b},{type:"elem",elem:x}]},e)}var D=y.makeSpan(["mord","accent"],[x],e);return n?(n.children[0]=D,n.height=Math.max(D.height,n.height),n.classes[0]="mord",n):D},Hr=(r,e)=>{var t=r.isStretchy?E0.mathMLnode(r.label):new M.MathNode("mo",[y0(r.label,r.mode)]),a=new M.MathNode("mover",[X(r.base,e),t]);return a.setAttribute("accent","true"),a},I1=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(r=>"\\"+r).join("|"));B({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(r,e)=>{var t=He(e[0]),a=!I1.test(r.funcName),n=!a||r.funcName==="\\widehat"||r.funcName==="\\widetilde"||r.funcName==="\\widecheck";return{type:"accent",mode:r.parser.mode,label:r.funcName,isStretchy:a,isShifty:n,base:t}},htmlBuilder:_t,mathmlBuilder:Hr});B({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(r,e)=>{var t=e[0],a=r.parser.mode;return a==="math"&&(r.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+r.funcName+" works only in text mode"),a="text"),{type:"accent",mode:a,label:r.funcName,isStretchy:!1,isShifty:!0,base:t}},htmlBuilder:_t,mathmlBuilder:Hr});B({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"accentUnder",mode:t.mode,label:a,base:n}},htmlBuilder:(r,e)=>{var t=G(r.base,e),a=E0.svgSpan(r,e),n=r.label==="\\utilde"?.12:0,s=y.makeVList({positionType:"top",positionData:t.height,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:t}]},e);return y.makeSpan(["mord","accentunder"],[s],e)},mathmlBuilder:(r,e)=>{var t=E0.mathMLnode(r.label),a=new M.MathNode("munder",[X(r.base,e),t]);return a.setAttribute("accentunder","true"),a}});var Ce=r=>{var e=new M.MathNode("mpadded",r?[r]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e};B({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(r,e,t){var{parser:a,funcName:n}=r;return{type:"xArrow",mode:a.mode,label:n,body:e[0],below:t[0]}},htmlBuilder(r,e){var t=e.style,a=e.havingStyle(t.sup()),n=y.wrapFragment(G(r.body,a,e),e),s=r.label.slice(0,2)==="\\x"?"x":"cd";n.classes.push(s+"-arrow-pad");var l;r.below&&(a=e.havingStyle(t.sub()),l=y.wrapFragment(G(r.below,a,e),e),l.classes.push(s+"-arrow-pad"));var h=E0.svgSpan(r,e),c=-e.fontMetrics().axisHeight+.5*h.height,f=-e.fontMetrics().axisHeight-.5*h.height-.111;(n.depth>.25||r.label==="\\xleftequilibrium")&&(f-=n.depth);var v;if(l){var b=-e.fontMetrics().axisHeight+l.height+.5*h.height+.111;v=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:f},{type:"elem",elem:h,shift:c},{type:"elem",elem:l,shift:b}]},e)}else v=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:f},{type:"elem",elem:h,shift:c}]},e);return v.children[0].children[0].children[1].classes.push("svg-align"),y.makeSpan(["mrel","x-arrow"],[v],e)},mathmlBuilder(r,e){var t=E0.mathMLnode(r.label);t.setAttribute("minsize",r.label.charAt(0)==="x"?"1.75em":"3.0em");var a;if(r.body){var n=Ce(X(r.body,e));if(r.below){var s=Ce(X(r.below,e));a=new M.MathNode("munderover",[t,s,n])}else a=new M.MathNode("mover",[t,n])}else if(r.below){var l=Ce(X(r.below,e));a=new M.MathNode("munder",[t,l])}else a=Ce(),a=new M.MathNode("mover",[t,a]);return a}});var E1=y.makeSpan;function Pr(r,e){var t=a0(r.body,e,!0);return E1([r.mclass],t,e)}function Gr(r,e){var t,a=m0(r.body,e);return r.mclass==="minner"?t=new M.MathNode("mpadded",a):r.mclass==="mord"?r.isCharacterBox?(t=a[0],t.type="mi"):t=new M.MathNode("mi",a):(r.isCharacterBox?(t=a[0],t.type="mo"):t=new M.MathNode("mo",a),r.mclass==="mbin"?(t.attributes.lspace="0.22em",t.attributes.rspace="0.22em"):r.mclass==="mpunct"?(t.attributes.lspace="0em",t.attributes.rspace="0.17em"):r.mclass==="mopen"||r.mclass==="mclose"?(t.attributes.lspace="0em",t.attributes.rspace="0em"):r.mclass==="minner"&&(t.attributes.lspace="0.0556em",t.attributes.width="+0.1111em")),t}B({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"mclass",mode:t.mode,mclass:"m"+a.slice(5),body:e0(n),isCharacterBox:O.isCharacterBox(n)}},htmlBuilder:Pr,mathmlBuilder:Gr});var We=r=>{var e=r.type==="ordgroup"&&r.body.length?r.body[0]:r;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"};B({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(r,e){var{parser:t}=r;return{type:"mclass",mode:t.mode,mclass:We(e[0]),body:e0(e[1]),isCharacterBox:O.isCharacterBox(e[1])}}});B({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(r,e){var{parser:t,funcName:a}=r,n=e[1],s=e[0],l;a!=="\\stackrel"?l=We(n):l="mrel";var h={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:a!=="\\stackrel",body:e0(n)},c={type:"supsub",mode:s.mode,base:h,sup:a==="\\underset"?null:s,sub:a==="\\underset"?s:null};return{type:"mclass",mode:t.mode,mclass:l,body:[c],isCharacterBox:O.isCharacterBox(c)}},htmlBuilder:Pr,mathmlBuilder:Gr});B({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(r,e){var{parser:t}=r;return{type:"pmb",mode:t.mode,mclass:We(e[0]),body:e0(e[0])}},htmlBuilder(r,e){var t=a0(r.body,e,!0),a=y.makeSpan([r.mclass],t,e);return a.style.textShadow="0.02em 0.01em 0.04px",a},mathmlBuilder(r,e){var t=m0(r.body,e),a=new M.MathNode("mstyle",t);return a.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),a}});var R1={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},nr=()=>({type:"styling",body:[],mode:"math",style:"display"}),ir=r=>r.type==="textord"&&r.text==="@",$1=(r,e)=>(r.type==="mathord"||r.type==="atom")&&r.text===e;function L1(r,e,t){var a=R1[r];switch(a){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return t.callFunction(a,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var n=t.callFunction("\\\\cdleft",[e[0]],[]),s={type:"atom",text:a,mode:"math",family:"rel"},l=t.callFunction("\\Big",[s],[]),h=t.callFunction("\\\\cdright",[e[1]],[]),c={type:"ordgroup",mode:"math",body:[n,l,h]};return t.callFunction("\\\\cdparent",[c],[])}case"\\\\cdlongequal":return t.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var f={type:"textord",text:"\\Vert",mode:"math"};return t.callFunction("\\Big",[f],[])}default:return{type:"textord",text:" ",mode:"math"}}}function F1(r){var e=[];for(r.gullet.beginGroup(),r.gullet.macros.set("\\cr","\\\\\\relax"),r.gullet.beginGroup();;){e.push(r.parseExpression(!1,"\\\\")),r.gullet.endGroup(),r.gullet.beginGroup();var t=r.fetch().text;if(t==="&"||t==="\\\\")r.consume();else if(t==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new z("Expected \\\\ or \\cr or \\end",r.nextToken)}for(var a=[],n=[a],s=0;s-1))if("<>AV".indexOf(f)>-1)for(var b=0;b<2;b++){for(var x=!0,w=c+1;wAV=|." after @',l[c]);var A=L1(f,v,r),q={type:"styling",body:[A],mode:"math",style:"display"};a.push(q),h=nr()}s%2===0?a.push(h):a.shift(),a=[],n.push(a)}r.gullet.endGroup(),r.gullet.endGroup();var _=new Array(n[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:n,arraystretch:1,addJot:!0,rowGaps:[null],cols:_,colSeparationType:"CD",hLinesBeforeRow:new Array(n.length+1).fill([])}}B({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(r,e){var{parser:t,funcName:a}=r;return{type:"cdlabel",mode:t.mode,side:a.slice(4),label:e[0]}},htmlBuilder(r,e){var t=e.havingStyle(e.style.sup()),a=y.wrapFragment(G(r.label,t,e),e);return a.classes.push("cd-label-"+r.side),a.style.bottom=T(.8-a.depth),a.height=0,a.depth=0,a},mathmlBuilder(r,e){var t=new M.MathNode("mrow",[X(r.label,e)]);return t=new M.MathNode("mpadded",[t]),t.setAttribute("width","0"),r.side==="left"&&t.setAttribute("lspace","-1width"),t.setAttribute("voffset","0.7em"),t=new M.MathNode("mstyle",[t]),t.setAttribute("displaystyle","false"),t.setAttribute("scriptlevel","1"),t}});B({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(r,e){var{parser:t}=r;return{type:"cdlabelparent",mode:t.mode,fragment:e[0]}},htmlBuilder(r,e){var t=y.wrapFragment(G(r.fragment,e),e);return t.classes.push("cd-vert-arrow"),t},mathmlBuilder(r,e){return new M.MathNode("mrow",[X(r.fragment,e)])}});B({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(r,e){for(var{parser:t}=r,a=L(e[0],"ordgroup"),n=a.body,s="",l=0;l=1114111)throw new z("\\@char with invalid code point "+s);return c<=65535?f=String.fromCharCode(c):(c-=65536,f=String.fromCharCode((c>>10)+55296,(c&1023)+56320)),{type:"textord",mode:t.mode,text:f}}});var Vr=(r,e)=>{var t=a0(r.body,e.withColor(r.color),!1);return y.makeFragment(t)},Ur=(r,e)=>{var t=m0(r.body,e.withColor(r.color)),a=new M.MathNode("mstyle",t);return a.setAttribute("mathcolor",r.color),a};B({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(r,e){var{parser:t}=r,a=L(e[0],"color-token").color,n=e[1];return{type:"color",mode:t.mode,color:a,body:e0(n)}},htmlBuilder:Vr,mathmlBuilder:Ur});B({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(r,e){var{parser:t,breakOnTokenText:a}=r,n=L(e[0],"color-token").color;t.gullet.macros.set("\\current@color",n);var s=t.parseExpression(!0,a);return{type:"color",mode:t.mode,color:n,body:s}},htmlBuilder:Vr,mathmlBuilder:Ur});B({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(r,e,t){var{parser:a}=r,n=a.gullet.future().text==="["?a.parseSizeGroup(!0):null,s=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:a.mode,newLine:s,size:n&&L(n,"size").value}},htmlBuilder(r,e){var t=y.makeSpan(["mspace"],[],e);return r.newLine&&(t.classes.push("newline"),r.size&&(t.style.marginTop=T(Q(r.size,e)))),t},mathmlBuilder(r,e){var t=new M.MathNode("mspace");return r.newLine&&(t.setAttribute("linebreak","newline"),r.size&&t.setAttribute("height",T(Q(r.size,e)))),t}});var wt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Xr=r=>{var e=r.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new z("Expected a control sequence",r);return e},H1=r=>{var e=r.gullet.popToken();return e.text==="="&&(e=r.gullet.popToken(),e.text===" "&&(e=r.gullet.popToken())),e},Wr=(r,e,t,a)=>{var n=r.gullet.macros.get(t.text);n==null&&(t.noexpand=!0,n={tokens:[t],numArgs:0,unexpandable:!r.gullet.isExpandable(t.text)}),r.gullet.macros.set(e,n,a)};B({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(r){var{parser:e,funcName:t}=r;e.consumeSpaces();var a=e.fetch();if(wt[a.text])return(t==="\\global"||t==="\\\\globallong")&&(a.text=wt[a.text]),L(e.parseFunction(),"internal");throw new z("Invalid token after macro prefix",a)}});B({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r){var{parser:e,funcName:t}=r,a=e.gullet.popToken(),n=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new z("Expected a control sequence",a);for(var s=0,l,h=[[]];e.gullet.future().text!=="{";)if(a=e.gullet.popToken(),a.text==="#"){if(e.gullet.future().text==="{"){l=e.gullet.future(),h[s].push("{");break}if(a=e.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new z('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new z('Argument number "'+a.text+'" out of order');s++,h.push([])}else{if(a.text==="EOF")throw new z("Expected a macro definition");h[s].push(a.text)}var{tokens:c}=e.gullet.consumeArg();return l&&c.unshift(l),(t==="\\edef"||t==="\\xdef")&&(c=e.gullet.expandTokens(c),c.reverse()),e.gullet.macros.set(n,{tokens:c,numArgs:s,delimiters:h},t===wt[t]),{type:"internal",mode:e.mode}}});B({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r){var{parser:e,funcName:t}=r,a=Xr(e.gullet.popToken());e.gullet.consumeSpaces();var n=H1(e);return Wr(e,a,n,t==="\\\\globallet"),{type:"internal",mode:e.mode}}});B({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r){var{parser:e,funcName:t}=r,a=Xr(e.gullet.popToken()),n=e.gullet.popToken(),s=e.gullet.popToken();return Wr(e,a,s,t==="\\\\globalfuture"),e.gullet.pushToken(s),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}});var ce=function(e,t,a){var n=Y.math[e]&&Y.math[e].replace,s=Tt(n||e,t,a);if(!s)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return s},Nt=function(e,t,a,n){var s=a.havingBaseStyle(t),l=y.makeSpan(n.concat(s.sizingClasses(a)),[e],a),h=s.sizeMultiplier/a.sizeMultiplier;return l.height*=h,l.depth*=h,l.maxFontSize=s.sizeMultiplier,l},Yr=function(e,t,a){var n=t.havingBaseStyle(a),s=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=T(s),e.height-=s,e.depth+=s},P1=function(e,t,a,n,s,l){var h=y.makeSymbol(e,"Main-Regular",s,n),c=Nt(h,t,n,l);return a&&Yr(c,n,t),c},G1=function(e,t,a,n){return y.makeSymbol(e,"Size"+t+"-Regular",a,n)},Zr=function(e,t,a,n,s,l){var h=G1(e,t,s,n),c=Nt(y.makeSpan(["delimsizing","size"+t],[h],n),E.TEXT,n,l);return a&&Yr(c,n,E.TEXT),c},it=function(e,t,a){var n;t==="Size1-Regular"?n="delim-size1":n="delim-size4";var s=y.makeSpan(["delimsizinginner",n],[y.makeSpan([],[y.makeSymbol(e,t,a)])]);return{type:"elem",elem:s}},st=function(e,t,a){var n=z0["Size4-Regular"][e.charCodeAt(0)]?z0["Size4-Regular"][e.charCodeAt(0)][4]:z0["Size1-Regular"][e.charCodeAt(0)][4],s=new A0("inner",ja(e,Math.round(1e3*t))),l=new S0([s],{width:T(n),height:T(t),style:"width:"+T(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),h=y.makeSvgSpan([],[l],a);return h.height=t,h.style.height=T(t),h.style.width=T(n),{type:"elem",elem:h}},St=.008,_e={type:"kern",size:-1*St},V1=["|","\\lvert","\\rvert","\\vert"],U1=["\\|","\\lVert","\\rVert","\\Vert"],jr=function(e,t,a,n,s,l){var h,c,f,v,b="",x=0;h=f=v=e,c=null;var w="Size1-Regular";e==="\\uparrow"?f=v="\u23D0":e==="\\Uparrow"?f=v="\u2016":e==="\\downarrow"?h=f="\u23D0":e==="\\Downarrow"?h=f="\u2016":e==="\\updownarrow"?(h="\\uparrow",f="\u23D0",v="\\downarrow"):e==="\\Updownarrow"?(h="\\Uparrow",f="\u2016",v="\\Downarrow"):O.contains(V1,e)?(f="\u2223",b="vert",x=333):O.contains(U1,e)?(f="\u2225",b="doublevert",x=556):e==="["||e==="\\lbrack"?(h="\u23A1",f="\u23A2",v="\u23A3",w="Size4-Regular",b="lbrack",x=667):e==="]"||e==="\\rbrack"?(h="\u23A4",f="\u23A5",v="\u23A6",w="Size4-Regular",b="rbrack",x=667):e==="\\lfloor"||e==="\u230A"?(f=h="\u23A2",v="\u23A3",w="Size4-Regular",b="lfloor",x=667):e==="\\lceil"||e==="\u2308"?(h="\u23A1",f=v="\u23A2",w="Size4-Regular",b="lceil",x=667):e==="\\rfloor"||e==="\u230B"?(f=h="\u23A5",v="\u23A6",w="Size4-Regular",b="rfloor",x=667):e==="\\rceil"||e==="\u2309"?(h="\u23A4",f=v="\u23A5",w="Size4-Regular",b="rceil",x=667):e==="("||e==="\\lparen"?(h="\u239B",f="\u239C",v="\u239D",w="Size4-Regular",b="lparen",x=875):e===")"||e==="\\rparen"?(h="\u239E",f="\u239F",v="\u23A0",w="Size4-Regular",b="rparen",x=875):e==="\\{"||e==="\\lbrace"?(h="\u23A7",c="\u23A8",v="\u23A9",f="\u23AA",w="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(h="\u23AB",c="\u23AC",v="\u23AD",f="\u23AA",w="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(h="\u23A7",v="\u23A9",f="\u23AA",w="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(h="\u23AB",v="\u23AD",f="\u23AA",w="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(h="\u23A7",v="\u23AD",f="\u23AA",w="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(h="\u23AB",v="\u23A9",f="\u23AA",w="Size4-Regular");var A=ce(h,w,s),q=A.height+A.depth,_=ce(f,w,s),D=_.height+_.depth,N=ce(v,w,s),$=N.height+N.depth,H=0,F=1;if(c!==null){var P=ce(c,w,s);H=P.height+P.depth,F=2}var V=q+$+H,j=Math.max(0,Math.ceil((t-V)/(F*D))),U=V+j*F*D,D0=n.fontMetrics().axisHeight;a&&(D0*=n.sizeMultiplier);var i0=U/2-D0,r0=[];if(b.length>0){var X0=U-q-$,u0=Math.round(U*1e3),x0=Ka(b,Math.round(X0*1e3)),$0=new A0(b,x0),K0=(x/1e3).toFixed(3)+"em",J0=(u0/1e3).toFixed(3)+"em",je=new S0([$0],{width:K0,height:J0,viewBox:"0 0 "+x+" "+u0}),L0=y.makeSvgSpan([],[je],n);L0.height=u0/1e3,L0.style.width=K0,L0.style.height=J0,r0.push({type:"elem",elem:L0})}else{if(r0.push(it(v,w,s)),r0.push(_e),c===null){var F0=U-q-$+2*St;r0.push(st(f,F0,n))}else{var f0=(U-q-$-H)/2+2*St;r0.push(st(f,f0,n)),r0.push(_e),r0.push(it(c,w,s)),r0.push(_e),r0.push(st(f,f0,n))}r0.push(_e),r0.push(it(h,w,s))}var le=n.havingBaseStyle(E.TEXT),Ke=y.makeVList({positionType:"bottom",positionData:i0,children:r0},le);return Nt(y.makeSpan(["delimsizing","mult"],[Ke],le),E.TEXT,n,l)},ot=80,lt=.08,ut=function(e,t,a,n,s){var l=Za(e,n,a),h=new A0(e,l),c=new S0([h],{width:"400em",height:T(t),viewBox:"0 0 400000 "+a,preserveAspectRatio:"xMinYMin slice"});return y.makeSvgSpan(["hide-tail"],[c],s)},X1=function(e,t){var a=t.havingBaseSizing(),n=ea("\\surd",e*a.sizeMultiplier,Qr,a),s=a.sizeMultiplier,l=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),h,c=0,f=0,v=0,b;return n.type==="small"?(v=1e3+1e3*l+ot,e<1?s=1:e<1.4&&(s=.7),c=(1+l+lt)/s,f=(1+l)/s,h=ut("sqrtMain",c,v,l,t),h.style.minWidth="0.853em",b=.833/s):n.type==="large"?(v=(1e3+ot)*me[n.size],f=(me[n.size]+l)/s,c=(me[n.size]+l+lt)/s,h=ut("sqrtSize"+n.size,c,v,l,t),h.style.minWidth="1.02em",b=1/s):(c=e+l+lt,f=e+l,v=Math.floor(1e3*e+l)+ot,h=ut("sqrtTall",c,v,l,t),h.style.minWidth="0.742em",b=1.056),h.height=f,h.style.height=T(c),{span:h,advanceWidth:b,ruleWidth:(t.fontMetrics().sqrtRuleThickness+l)*s}},Kr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],W1=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],Jr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],me=[0,1.2,1.8,2.4,3],Y1=function(e,t,a,n,s){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),O.contains(Kr,e)||O.contains(Jr,e))return Zr(e,t,!1,a,n,s);if(O.contains(W1,e))return jr(e,me[t],!1,a,n,s);throw new z("Illegal delimiter: '"+e+"'")},Z1=[{type:"small",style:E.SCRIPTSCRIPT},{type:"small",style:E.SCRIPT},{type:"small",style:E.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],j1=[{type:"small",style:E.SCRIPTSCRIPT},{type:"small",style:E.SCRIPT},{type:"small",style:E.TEXT},{type:"stack"}],Qr=[{type:"small",style:E.SCRIPTSCRIPT},{type:"small",style:E.SCRIPT},{type:"small",style:E.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],K1=function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},ea=function(e,t,a,n){for(var s=Math.min(2,3-n.style.size),l=s;lt)return a[l]}return a[a.length-1]},ta=function(e,t,a,n,s,l){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var h;O.contains(Jr,e)?h=Z1:O.contains(Kr,e)?h=Qr:h=j1;var c=ea(e,t,h,n);return c.type==="small"?P1(e,c.style,a,n,s,l):c.type==="large"?Zr(e,c.size,a,n,s,l):jr(e,t,a,n,s,l)},J1=function(e,t,a,n,s,l){var h=n.fontMetrics().axisHeight*n.sizeMultiplier,c=901,f=5/n.fontMetrics().ptPerEm,v=Math.max(t-h,a+h),b=Math.max(v/500*c,2*v-f);return ta(e,b,!0,n,s,l)},O0={sqrtImage:X1,sizedDelim:Y1,sizeToMaxHeight:me,customSizedDelim:ta,leftRightDelim:J1},sr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Q1=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Ye(r,e){var t=Xe(r);if(t&&O.contains(Q1,t.text))return t;throw t?new z("Invalid delimiter '"+t.text+"' after '"+e.funcName+"'",r):new z("Invalid delimiter type '"+r.type+"'",r)}B({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(r,e)=>{var t=Ye(e[0],r);return{type:"delimsizing",mode:r.parser.mode,size:sr[r.funcName].size,mclass:sr[r.funcName].mclass,delim:t.text}},htmlBuilder:(r,e)=>r.delim==="."?y.makeSpan([r.mclass]):O0.sizedDelim(r.delim,r.size,e,r.mode,[r.mclass]),mathmlBuilder:r=>{var e=[];r.delim!=="."&&e.push(y0(r.delim,r.mode));var t=new M.MathNode("mo",e);r.mclass==="mopen"||r.mclass==="mclose"?t.setAttribute("fence","true"):t.setAttribute("fence","false"),t.setAttribute("stretchy","true");var a=T(O0.sizeToMaxHeight[r.size]);return t.setAttribute("minsize",a),t.setAttribute("maxsize",a),t}});function or(r){if(!r.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}B({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var t=r.parser.gullet.macros.get("\\current@color");if(t&&typeof t!="string")throw new z("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:r.parser.mode,delim:Ye(e[0],r).text,color:t}}});B({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var t=Ye(e[0],r),a=r.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var s=L(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:t.text,right:s.delim,rightColor:s.color}},htmlBuilder:(r,e)=>{or(r);for(var t=a0(r.body,e,!0,["mopen","mclose"]),a=0,n=0,s=!1,l=0;l{or(r);var t=m0(r.body,e);if(r.left!=="."){var a=new M.MathNode("mo",[y0(r.left,r.mode)]);a.setAttribute("fence","true"),t.unshift(a)}if(r.right!=="."){var n=new M.MathNode("mo",[y0(r.right,r.mode)]);n.setAttribute("fence","true"),r.rightColor&&n.setAttribute("mathcolor",r.rightColor),t.push(n)}return Bt(t)}});B({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var t=Ye(e[0],r);if(!r.parser.leftrightDepth)throw new z("\\middle without preceding \\left",t);return{type:"middle",mode:r.parser.mode,delim:t.text}},htmlBuilder:(r,e)=>{var t;if(r.delim===".")t=ge(e,[]);else{t=O0.sizedDelim(r.delim,1,e,r.mode,[]);var a={delim:r.delim,options:e};t.isMiddle=a}return t},mathmlBuilder:(r,e)=>{var t=r.delim==="\\vert"||r.delim==="|"?y0("|","text"):y0(r.delim,r.mode),a=new M.MathNode("mo",[t]);return a.setAttribute("fence","true"),a.setAttribute("lspace","0.05em"),a.setAttribute("rspace","0.05em"),a}});var Ot=(r,e)=>{var t=y.wrapFragment(G(r.body,e),e),a=r.label.slice(1),n=e.sizeMultiplier,s,l=0,h=O.isCharacterBox(r.body);if(a==="sout")s=y.makeSpan(["stretchy","sout"]),s.height=e.fontMetrics().defaultRuleThickness/n,l=-.5*e.fontMetrics().xHeight;else if(a==="phase"){var c=Q({number:.6,unit:"pt"},e),f=Q({number:.35,unit:"ex"},e),v=e.havingBaseSizing();n=n/v.sizeMultiplier;var b=t.height+t.depth+c+f;t.style.paddingLeft=T(b/2+c);var x=Math.floor(1e3*b*n),w=Wa(x),A=new S0([new A0("phase",w)],{width:"400em",height:T(x/1e3),viewBox:"0 0 400000 "+x,preserveAspectRatio:"xMinYMin slice"});s=y.makeSvgSpan(["hide-tail"],[A],e),s.style.height=T(b),l=t.depth+c+f}else{/cancel/.test(a)?h||t.classes.push("cancel-pad"):a==="angl"?t.classes.push("anglpad"):t.classes.push("boxpad");var q=0,_=0,D=0;/box/.test(a)?(D=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),q=e.fontMetrics().fboxsep+(a==="colorbox"?0:D),_=q):a==="angl"?(D=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),q=4*D,_=Math.max(0,.25-t.depth)):(q=h?.2:0,_=q),s=E0.encloseSpan(t,a,q,_,e),/fbox|boxed|fcolorbox/.test(a)?(s.style.borderStyle="solid",s.style.borderWidth=T(D)):a==="angl"&&D!==.049&&(s.style.borderTopWidth=T(D),s.style.borderRightWidth=T(D)),l=t.depth+_,r.backgroundColor&&(s.style.backgroundColor=r.backgroundColor,r.borderColor&&(s.style.borderColor=r.borderColor))}var N;if(r.backgroundColor)N=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:l},{type:"elem",elem:t,shift:0}]},e);else{var $=/cancel|phase/.test(a)?["svg-align"]:[];N=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:t,shift:0},{type:"elem",elem:s,shift:l,wrapperClasses:$}]},e)}return/cancel/.test(a)&&(N.height=t.height,N.depth=t.depth),/cancel/.test(a)&&!h?y.makeSpan(["mord","cancel-lap"],[N],e):y.makeSpan(["mord"],[N],e)},It=(r,e)=>{var t=0,a=new M.MathNode(r.label.indexOf("colorbox")>-1?"mpadded":"menclose",[X(r.body,e)]);switch(r.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\phase":a.setAttribute("notation","phasorangle");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\angl":a.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(t=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*t+"pt"),a.setAttribute("height","+"+2*t+"pt"),a.setAttribute("lspace",t+"pt"),a.setAttribute("voffset",t+"pt"),r.label==="\\fcolorbox"){var n=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(r.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return r.backgroundColor&&a.setAttribute("mathbackground",r.backgroundColor),a};B({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(r,e,t){var{parser:a,funcName:n}=r,s=L(e[0],"color-token").color,l=e[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:s,body:l}},htmlBuilder:Ot,mathmlBuilder:It});B({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(r,e,t){var{parser:a,funcName:n}=r,s=L(e[0],"color-token").color,l=L(e[1],"color-token").color,h=e[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:l,borderColor:s,body:h}},htmlBuilder:Ot,mathmlBuilder:It});B({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(r,e){var{parser:t}=r;return{type:"enclose",mode:t.mode,label:"\\fbox",body:e[0]}}});B({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"enclose",mode:t.mode,label:a,body:n}},htmlBuilder:Ot,mathmlBuilder:It});B({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(r,e){var{parser:t}=r;return{type:"enclose",mode:t.mode,label:"\\angl",body:e[0]}}});var ra={};function T0(r){for(var{type:e,names:t,props:a,handler:n,htmlBuilder:s,mathmlBuilder:l}=r,h={type:e,numArgs:a.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},c=0;c{var e=r.parser.settings;if(!e.displayMode)throw new z("{"+r.envName+"} can be used only in display mode.")};function Et(r){if(r.indexOf("ed")===-1)return r.indexOf("*")===-1}function U0(r,e,t){var{hskipBeforeAndAfter:a,addJot:n,cols:s,arraystretch:l,colSeparationType:h,autoTag:c,singleRow:f,emptySingleRow:v,maxNumCols:b,leqno:x}=e;if(r.gullet.beginGroup(),f||r.gullet.macros.set("\\cr","\\\\\\relax"),!l){var w=r.gullet.expandMacroAsText("\\arraystretch");if(w==null)l=1;else if(l=parseFloat(w),!l||l<0)throw new z("Invalid \\arraystretch: "+w)}r.gullet.beginGroup();var A=[],q=[A],_=[],D=[],N=c!=null?[]:void 0;function $(){c&&r.gullet.macros.set("\\@eqnsw","1",!0)}function H(){N&&(r.gullet.macros.get("\\df@tag")?(N.push(r.subparse([new b0("\\df@tag")])),r.gullet.macros.set("\\df@tag",void 0,!0)):N.push(!!c&&r.gullet.macros.get("\\@eqnsw")==="1"))}for($(),D.push(lr(r));;){var F=r.parseExpression(!1,f?"\\end":"\\\\");r.gullet.endGroup(),r.gullet.beginGroup(),F={type:"ordgroup",mode:r.mode,body:F},t&&(F={type:"styling",mode:r.mode,style:t,body:[F]}),A.push(F);var P=r.fetch().text;if(P==="&"){if(b&&A.length===b){if(f||h)throw new z("Too many tab characters: &",r.nextToken);r.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}r.consume()}else if(P==="\\end"){H(),A.length===1&&F.type==="styling"&&F.body[0].body.length===0&&(q.length>1||!v)&&q.pop(),D.length0&&($+=.25),f.push({pos:$,isDashed:we[Se]})}for(H(l[0]),a=0;a0&&(i0+=N,Vwe))for(a=0;a=h)){var ee=void 0;(n>0||e.hskipBeforeAndAfter)&&(ee=O.deflt(f0.pregap,x),ee!==0&&(x0=y.makeSpan(["arraycolsep"],[]),x0.style.width=T(ee),u0.push(x0)));var te=[];for(a=0;a0){for(var Sa=y.makeLineSpan("hline",t,v),ka=y.makeLineSpan("hdashline",t,v),Je=[{type:"elem",elem:c,shift:0}];f.length>0;){var Ut=f.pop(),Xt=Ut.pos-r0;Ut.isDashed?Je.push({type:"elem",elem:ka,shift:Xt}):Je.push({type:"elem",elem:Sa,shift:Xt})}c=y.makeVList({positionType:"individualShift",children:Je},t)}if(K0.length===0)return y.makeSpan(["mord"],[c],t);var Qe=y.makeVList({positionType:"individualShift",children:K0},t);return Qe=y.makeSpan(["tag"],[Qe],t),y.makeFragment([c,Qe])},en={c:"center ",l:"left ",r:"right "},B0=function(e,t){for(var a=[],n=new M.MathNode("mtd",[],["mtr-glue"]),s=new M.MathNode("mtd",[],["mml-eqn-num"]),l=0;l0){var A=e.cols,q="",_=!1,D=0,N=A.length;A[0].type==="separator"&&(x+="top ",D=1),A[A.length-1].type==="separator"&&(x+="bottom ",N-=1);for(var $=D;$0?"left ":"",x+=j[j.length-1].length>0?"right ":"";for(var U=1;U-1?"alignat":"align",s=e.envName==="split",l=U0(e.parser,{cols:a,addJot:!0,autoTag:s?void 0:Et(e.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:s?2:void 0,leqno:e.parser.settings.leqno},"display"),h,c=0,f={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&t[0].type==="ordgroup"){for(var v="",b=0;b0&&w&&(_=1),a[A]={type:"align",align:q,pregap:_,postgap:0}}return l.colSeparationType=w?"align":"alignat",l};T0({type:"array",names:["array","darray"],props:{numArgs:1},handler(r,e){var t=Xe(e[0]),a=t?[e[0]]:L(e[0],"ordgroup").body,n=a.map(function(l){var h=Ct(l),c=h.text;if("lcr".indexOf(c)!==-1)return{type:"align",align:c};if(c==="|")return{type:"separator",separator:"|"};if(c===":")return{type:"separator",separator:":"};throw new z("Unknown column alignment: "+c,l)}),s={cols:n,hskipBeforeAndAfter:!0,maxNumCols:n.length};return U0(r.parser,s,Rt(r.envName))},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(r){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[r.envName.replace("*","")],t="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:t}]};if(r.envName.charAt(r.envName.length-1)==="*"){var n=r.parser;if(n.consumeSpaces(),n.fetch().text==="["){if(n.consume(),n.consumeSpaces(),t=n.fetch().text,"lcr".indexOf(t)===-1)throw new z("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),a.cols=[{type:"align",align:t}]}}var s=U0(r.parser,a,Rt(r.envName)),l=Math.max(0,...s.body.map(h=>h.length));return s.cols=new Array(l).fill({type:"align",align:t}),e?{type:"leftright",mode:r.mode,body:[s],left:e[0],right:e[1],rightColor:void 0}:s},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(r){var e={arraystretch:.5},t=U0(r.parser,e,"script");return t.colSeparationType="small",t},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["subarray"],props:{numArgs:1},handler(r,e){var t=Xe(e[0]),a=t?[e[0]]:L(e[0],"ordgroup").body,n=a.map(function(l){var h=Ct(l),c=h.text;if("lc".indexOf(c)!==-1)return{type:"align",align:c};throw new z("Unknown column alignment: "+c,l)});if(n.length>1)throw new z("{subarray} can contain only one column");var s={cols:n,hskipBeforeAndAfter:!1,arraystretch:.5};if(s=U0(r.parser,s,"script"),s.body.length>0&&s.body[0].length>1)throw new z("{subarray} can contain only one column");return s},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(r){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},t=U0(r.parser,e,Rt(r.envName));return{type:"leftright",mode:r.mode,body:[t],left:r.envName.indexOf("r")>-1?".":"\\{",right:r.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:na,htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(r){O.contains(["gather","gather*"],r.envName)&&Ze(r);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Et(r.envName),emptySingleRow:!0,leqno:r.parser.settings.leqno};return U0(r.parser,e,"display")},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:na,htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(r){Ze(r);var e={autoTag:Et(r.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:r.parser.settings.leqno};return U0(r.parser,e,"display")},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["CD"],props:{numArgs:0},handler(r){return Ze(r),F1(r.parser)},htmlBuilder:q0,mathmlBuilder:B0});m("\\nonumber","\\gdef\\@eqnsw{0}");m("\\notag","\\nonumber");B({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(r,e){throw new z(r.funcName+" valid only within array environment")}});var ur=ra;B({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];if(n.type!=="ordgroup")throw new z("Invalid environment name",n);for(var s="",l=0;l{var t=r.font,a=e.withFont(t);return G(r.body,a)},sa=(r,e)=>{var t=r.font,a=e.withFont(t);return X(r.body,a)},hr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};B({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=He(e[0]),s=a;return s in hr&&(s=hr[s]),{type:"font",mode:t.mode,font:s.slice(1),body:n}},htmlBuilder:ia,mathmlBuilder:sa});B({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(r,e)=>{var{parser:t}=r,a=e[0],n=O.isCharacterBox(a);return{type:"mclass",mode:t.mode,mclass:We(a),body:[{type:"font",mode:t.mode,font:"boldsymbol",body:a}],isCharacterBox:n}}});B({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(r,e)=>{var{parser:t,funcName:a,breakOnTokenText:n}=r,{mode:s}=t,l=t.parseExpression(!0,n),h="math"+a.slice(1);return{type:"font",mode:s,font:h,body:{type:"ordgroup",mode:t.mode,body:l}}},htmlBuilder:ia,mathmlBuilder:sa});var oa=(r,e)=>{var t=e;return r==="display"?t=t.id>=E.SCRIPT.id?t.text():E.DISPLAY:r==="text"&&t.size===E.DISPLAY.size?t=E.TEXT:r==="script"?t=E.SCRIPT:r==="scriptscript"&&(t=E.SCRIPTSCRIPT),t},$t=(r,e)=>{var t=oa(r.size,e.style),a=t.fracNum(),n=t.fracDen(),s;s=e.havingStyle(a);var l=G(r.numer,s,e);if(r.continued){var h=8.5/e.fontMetrics().ptPerEm,c=3.5/e.fontMetrics().ptPerEm;l.height=l.height0?A=3*x:A=7*x,q=e.fontMetrics().denom1):(b>0?(w=e.fontMetrics().num2,A=x):(w=e.fontMetrics().num3,A=3*x),q=e.fontMetrics().denom2);var _;if(v){var N=e.fontMetrics().axisHeight;w-l.depth-(N+.5*b){var t=new M.MathNode("mfrac",[X(r.numer,e),X(r.denom,e)]);if(!r.hasBarLine)t.setAttribute("linethickness","0px");else if(r.barSize){var a=Q(r.barSize,e);t.setAttribute("linethickness",T(a))}var n=oa(r.size,e.style);if(n.size!==e.style.size){t=new M.MathNode("mstyle",[t]);var s=n.size===E.DISPLAY.size?"true":"false";t.setAttribute("displaystyle",s),t.setAttribute("scriptlevel","0")}if(r.leftDelim!=null||r.rightDelim!=null){var l=[];if(r.leftDelim!=null){var h=new M.MathNode("mo",[new M.TextNode(r.leftDelim.replace("\\",""))]);h.setAttribute("fence","true"),l.push(h)}if(l.push(t),r.rightDelim!=null){var c=new M.MathNode("mo",[new M.TextNode(r.rightDelim.replace("\\",""))]);c.setAttribute("fence","true"),l.push(c)}return Bt(l)}return t};B({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=e[1],l,h=null,c=null,f="auto";switch(a){case"\\dfrac":case"\\frac":case"\\tfrac":l=!0;break;case"\\\\atopfrac":l=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":l=!1,h="(",c=")";break;case"\\\\bracefrac":l=!1,h="\\{",c="\\}";break;case"\\\\brackfrac":l=!1,h="[",c="]";break;default:throw new Error("Unrecognized genfrac command")}switch(a){case"\\dfrac":case"\\dbinom":f="display";break;case"\\tfrac":case"\\tbinom":f="text";break}return{type:"genfrac",mode:t.mode,continued:!1,numer:n,denom:s,hasBarLine:l,leftDelim:h,rightDelim:c,size:f,barSize:null}},htmlBuilder:$t,mathmlBuilder:Lt});B({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=e[1];return{type:"genfrac",mode:t.mode,continued:!0,numer:n,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}});B({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(r){var{parser:e,funcName:t,token:a}=r,n;switch(t){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:a}}});var cr=["display","text","script","scriptscript"],mr=function(e){var t=null;return e.length>0&&(t=e,t=t==="."?null:t),t};B({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(r,e){var{parser:t}=r,a=e[4],n=e[5],s=He(e[0]),l=s.type==="atom"&&s.family==="open"?mr(s.text):null,h=He(e[1]),c=h.type==="atom"&&h.family==="close"?mr(h.text):null,f=L(e[2],"size"),v,b=null;f.isBlank?v=!0:(b=f.value,v=b.number>0);var x="auto",w=e[3];if(w.type==="ordgroup"){if(w.body.length>0){var A=L(w.body[0],"textord");x=cr[Number(A.text)]}}else w=L(w,"textord"),x=cr[Number(w.text)];return{type:"genfrac",mode:t.mode,numer:a,denom:n,continued:!1,hasBarLine:v,barSize:b,leftDelim:l,rightDelim:c,size:x}},htmlBuilder:$t,mathmlBuilder:Lt});B({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(r,e){var{parser:t,funcName:a,token:n}=r;return{type:"infix",mode:t.mode,replaceWith:"\\\\abovefrac",size:L(e[0],"size").value,token:n}}});B({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=_a(L(e[1],"infix").size),l=e[2],h=s.number>0;return{type:"genfrac",mode:t.mode,numer:n,denom:l,continued:!1,hasBarLine:h,barSize:s,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:$t,mathmlBuilder:Lt});var la=(r,e)=>{var t=e.style,a,n;r.type==="supsub"?(a=r.sup?G(r.sup,e.havingStyle(t.sup()),e):G(r.sub,e.havingStyle(t.sub()),e),n=L(r.base,"horizBrace")):n=L(r,"horizBrace");var s=G(n.base,e.havingBaseStyle(E.DISPLAY)),l=E0.svgSpan(n,e),h;if(n.isOver?(h=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:l}]},e),h.children[0].children[0].children[1].classes.push("svg-align")):(h=y.makeVList({positionType:"bottom",positionData:s.depth+.1+l.height,children:[{type:"elem",elem:l},{type:"kern",size:.1},{type:"elem",elem:s}]},e),h.children[0].children[0].children[0].classes.push("svg-align")),a){var c=y.makeSpan(["mord",n.isOver?"mover":"munder"],[h],e);n.isOver?h=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:c},{type:"kern",size:.2},{type:"elem",elem:a}]},e):h=y.makeVList({positionType:"bottom",positionData:c.depth+.2+a.height+a.depth,children:[{type:"elem",elem:a},{type:"kern",size:.2},{type:"elem",elem:c}]},e)}return y.makeSpan(["mord",n.isOver?"mover":"munder"],[h],e)},tn=(r,e)=>{var t=E0.mathMLnode(r.label);return new M.MathNode(r.isOver?"mover":"munder",[X(r.base,e),t])};B({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(r,e){var{parser:t,funcName:a}=r;return{type:"horizBrace",mode:t.mode,label:a,isOver:/^\\over/.test(a),base:e[0]}},htmlBuilder:la,mathmlBuilder:tn});B({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[1],n=L(e[0],"url").url;return t.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:t.mode,href:n,body:e0(a)}:t.formatUnsupportedCmd("\\href")},htmlBuilder:(r,e)=>{var t=a0(r.body,e,!1);return y.makeAnchor(r.href,[],t,e)},mathmlBuilder:(r,e)=>{var t=V0(r.body,e);return t instanceof s0||(t=new s0("mrow",[t])),t.setAttribute("href",r.href),t}});B({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=L(e[0],"url").url;if(!t.settings.isTrusted({command:"\\url",url:a}))return t.formatUnsupportedCmd("\\url");for(var n=[],s=0;s{var{parser:t,funcName:a,token:n}=r,s=L(e[0],"raw").string,l=e[1];t.settings.strict&&t.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var h,c={};switch(a){case"\\htmlClass":c.class=s,h={command:"\\htmlClass",class:s};break;case"\\htmlId":c.id=s,h={command:"\\htmlId",id:s};break;case"\\htmlStyle":c.style=s,h={command:"\\htmlStyle",style:s};break;case"\\htmlData":{for(var f=s.split(","),v=0;v{var t=a0(r.body,e,!1),a=["enclosing"];r.attributes.class&&a.push(...r.attributes.class.trim().split(/\s+/));var n=y.makeSpan(a,t,e);for(var s in r.attributes)s!=="class"&&r.attributes.hasOwnProperty(s)&&n.setAttribute(s,r.attributes[s]);return n},mathmlBuilder:(r,e)=>V0(r.body,e)});B({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r;return{type:"htmlmathml",mode:t.mode,html:e0(e[0]),mathml:e0(e[1])}},htmlBuilder:(r,e)=>{var t=a0(r.html,e,!1);return y.makeFragment(t)},mathmlBuilder:(r,e)=>V0(r.mathml,e)});var ht=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new z("Invalid size: '"+e+"' in \\includegraphics");var a={number:+(t[1]+t[2]),unit:t[3]};if(!Tr(a))throw new z("Invalid unit: '"+a.unit+"' in \\includegraphics.");return a};B({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(r,e,t)=>{var{parser:a}=r,n={number:0,unit:"em"},s={number:.9,unit:"em"},l={number:0,unit:"em"},h="";if(t[0])for(var c=L(t[0],"raw").string,f=c.split(","),v=0;v{var t=Q(r.height,e),a=0;r.totalheight.number>0&&(a=Q(r.totalheight,e)-t);var n=0;r.width.number>0&&(n=Q(r.width,e));var s={height:T(t+a)};n>0&&(s.width=T(n)),a>0&&(s.verticalAlign=T(-a));var l=new vt(r.src,r.alt,s);return l.height=t,l.depth=a,l},mathmlBuilder:(r,e)=>{var t=new M.MathNode("mglyph",[]);t.setAttribute("alt",r.alt);var a=Q(r.height,e),n=0;if(r.totalheight.number>0&&(n=Q(r.totalheight,e)-a,t.setAttribute("valign",T(-n))),t.setAttribute("height",T(a+n)),r.width.number>0){var s=Q(r.width,e);t.setAttribute("width",T(s))}return t.setAttribute("src",r.src),t}});B({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(r,e){var{parser:t,funcName:a}=r,n=L(e[0],"size");if(t.settings.strict){var s=a[1]==="m",l=n.value.unit==="mu";s?(l||t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, "+("not "+n.value.unit+" units")),t.mode!=="math"&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):l&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:t.mode,dimension:n.value}},htmlBuilder(r,e){return y.makeGlue(r.dimension,e)},mathmlBuilder(r,e){var t=Q(r.dimension,e);return new M.SpaceNode(t)}});B({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"lap",mode:t.mode,alignment:a.slice(5),body:n}},htmlBuilder:(r,e)=>{var t;r.alignment==="clap"?(t=y.makeSpan([],[G(r.body,e)]),t=y.makeSpan(["inner"],[t],e)):t=y.makeSpan(["inner"],[G(r.body,e)]);var a=y.makeSpan(["fix"],[]),n=y.makeSpan([r.alignment],[t,a],e),s=y.makeSpan(["strut"]);return s.style.height=T(n.height+n.depth),n.depth&&(s.style.verticalAlign=T(-n.depth)),n.children.unshift(s),n=y.makeSpan(["thinbox"],[n],e),y.makeSpan(["mord","vbox"],[n],e)},mathmlBuilder:(r,e)=>{var t=new M.MathNode("mpadded",[X(r.body,e)]);if(r.alignment!=="rlap"){var a=r.alignment==="llap"?"-1":"-0.5";t.setAttribute("lspace",a+"width")}return t.setAttribute("width","0px"),t}});B({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(r,e){var{funcName:t,parser:a}=r,n=a.mode;a.switchMode("math");var s=t==="\\("?"\\)":"$",l=a.parseExpression(!1,s);return a.expect(s),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:l}}});B({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(r,e){throw new z("Mismatched "+r.funcName)}});var dr=(r,e)=>{switch(e.style.size){case E.DISPLAY.size:return r.display;case E.TEXT.size:return r.text;case E.SCRIPT.size:return r.script;case E.SCRIPTSCRIPT.size:return r.scriptscript;default:return r.text}};B({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(r,e)=>{var{parser:t}=r;return{type:"mathchoice",mode:t.mode,display:e0(e[0]),text:e0(e[1]),script:e0(e[2]),scriptscript:e0(e[3])}},htmlBuilder:(r,e)=>{var t=dr(r,e),a=a0(t,e,!1);return y.makeFragment(a)},mathmlBuilder:(r,e)=>{var t=dr(r,e);return V0(t,e)}});var ua=(r,e,t,a,n,s,l)=>{r=y.makeSpan([],[r]);var h=t&&O.isCharacterBox(t),c,f;if(e){var v=G(e,a.havingStyle(n.sup()),a);f={elem:v,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-v.depth)}}if(t){var b=G(t,a.havingStyle(n.sub()),a);c={elem:b,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-b.height)}}var x;if(f&&c){var w=a.fontMetrics().bigOpSpacing5+c.elem.height+c.elem.depth+c.kern+r.depth+l;x=y.makeVList({positionType:"bottom",positionData:w,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:c.elem,marginLeft:T(-s)},{type:"kern",size:c.kern},{type:"elem",elem:r},{type:"kern",size:f.kern},{type:"elem",elem:f.elem,marginLeft:T(s)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(c){var A=r.height-l;x=y.makeVList({positionType:"top",positionData:A,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:c.elem,marginLeft:T(-s)},{type:"kern",size:c.kern},{type:"elem",elem:r}]},a)}else if(f){var q=r.depth+l;x=y.makeVList({positionType:"bottom",positionData:q,children:[{type:"elem",elem:r},{type:"kern",size:f.kern},{type:"elem",elem:f.elem,marginLeft:T(s)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else return r;var _=[x];if(c&&s!==0&&!h){var D=y.makeSpan(["mspace"],[],a);D.style.marginRight=T(s),_.unshift(D)}return y.makeSpan(["mop","op-limits"],_,a)},ha=["\\smallint"],se=(r,e)=>{var t,a,n=!1,s;r.type==="supsub"?(t=r.sup,a=r.sub,s=L(r.base,"op"),n=!0):s=L(r,"op");var l=e.style,h=!1;l.size===E.DISPLAY.size&&s.symbol&&!O.contains(ha,s.name)&&(h=!0);var c;if(s.symbol){var f=h?"Size2-Regular":"Size1-Regular",v="";if((s.name==="\\oiint"||s.name==="\\oiiint")&&(v=s.name.slice(1),s.name=v==="oiint"?"\\iint":"\\iiint"),c=y.makeSymbol(s.name,f,"math",e,["mop","op-symbol",h?"large-op":"small-op"]),v.length>0){var b=c.italic,x=y.staticSvg(v+"Size"+(h?"2":"1"),e);c=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:c,shift:0},{type:"elem",elem:x,shift:h?.08:0}]},e),s.name="\\"+v,c.classes.unshift("mop"),c.italic=b}}else if(s.body){var w=a0(s.body,e,!0);w.length===1&&w[0]instanceof c0?(c=w[0],c.classes[0]="mop"):c=y.makeSpan(["mop"],w,e)}else{for(var A=[],q=1;q{var t;if(r.symbol)t=new s0("mo",[y0(r.name,r.mode)]),O.contains(ha,r.name)&&t.setAttribute("largeop","false");else if(r.body)t=new s0("mo",m0(r.body,e));else{t=new s0("mi",[new g0(r.name.slice(1))]);var a=new s0("mo",[y0("\u2061","text")]);r.parentIsSupSub?t=new s0("mrow",[t,a]):t=$r([t,a])}return t},rn={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};B({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=a;return n.length===1&&(n=rn[n]),{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:se,mathmlBuilder:be});B({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:e0(a)}},htmlBuilder:se,mathmlBuilder:be});var an={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};B({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(r){var{parser:e,funcName:t}=r;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:t}},htmlBuilder:se,mathmlBuilder:be});B({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(r){var{parser:e,funcName:t}=r;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:t}},htmlBuilder:se,mathmlBuilder:be});B({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(r){var{parser:e,funcName:t}=r,a=t;return a.length===1&&(a=an[a]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:se,mathmlBuilder:be});var ca=(r,e)=>{var t,a,n=!1,s;r.type==="supsub"?(t=r.sup,a=r.sub,s=L(r.base,"operatorname"),n=!0):s=L(r,"operatorname");var l;if(s.body.length>0){for(var h=s.body.map(b=>{var x=b.text;return typeof x=="string"?{type:"textord",mode:b.mode,text:x}:b}),c=a0(h,e.withFont("mathrm"),!0),f=0;f{for(var t=m0(r.body,e.withFont("mathrm")),a=!0,n=0;nv.toText()).join("");t=[new M.TextNode(h)]}var c=new M.MathNode("mi",t);c.setAttribute("mathvariant","normal");var f=new M.MathNode("mo",[y0("\u2061","text")]);return r.parentIsSupSub?new M.MathNode("mrow",[c,f]):M.newDocumentFragment([c,f])};B({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"operatorname",mode:t.mode,body:e0(n),alwaysHandleSupSub:a==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:ca,mathmlBuilder:nn});m("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");j0({type:"ordgroup",htmlBuilder(r,e){return r.semisimple?y.makeFragment(a0(r.body,e,!1)):y.makeSpan(["mord"],a0(r.body,e,!0),e)},mathmlBuilder(r,e){return V0(r.body,e,!0)}});B({type:"overline",names:["\\overline"],props:{numArgs:1},handler(r,e){var{parser:t}=r,a=e[0];return{type:"overline",mode:t.mode,body:a}},htmlBuilder(r,e){var t=G(r.body,e.havingCrampedStyle()),a=y.makeLineSpan("overline-line",e),n=e.fontMetrics().defaultRuleThickness,s=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]},e);return y.makeSpan(["mord","overline"],[s],e)},mathmlBuilder(r,e){var t=new M.MathNode("mo",[new M.TextNode("\u203E")]);t.setAttribute("stretchy","true");var a=new M.MathNode("mover",[X(r.body,e),t]);return a.setAttribute("accent","true"),a}});B({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"phantom",mode:t.mode,body:e0(a)}},htmlBuilder:(r,e)=>{var t=a0(r.body,e.withPhantom(),!1);return y.makeFragment(t)},mathmlBuilder:(r,e)=>{var t=m0(r.body,e);return new M.MathNode("mphantom",t)}});B({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"hphantom",mode:t.mode,body:a}},htmlBuilder:(r,e)=>{var t=y.makeSpan([],[G(r.body,e.withPhantom())]);if(t.height=0,t.depth=0,t.children)for(var a=0;a{var t=m0(e0(r.body),e),a=new M.MathNode("mphantom",t),n=new M.MathNode("mpadded",[a]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n}});B({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"vphantom",mode:t.mode,body:a}},htmlBuilder:(r,e)=>{var t=y.makeSpan(["inner"],[G(r.body,e.withPhantom())]),a=y.makeSpan(["fix"],[]);return y.makeSpan(["mord","rlap"],[t,a],e)},mathmlBuilder:(r,e)=>{var t=m0(e0(r.body),e),a=new M.MathNode("mphantom",t),n=new M.MathNode("mpadded",[a]);return n.setAttribute("width","0px"),n}});B({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(r,e){var{parser:t}=r,a=L(e[0],"size").value,n=e[1];return{type:"raisebox",mode:t.mode,dy:a,body:n}},htmlBuilder(r,e){var t=G(r.body,e),a=Q(r.dy,e);return y.makeVList({positionType:"shift",positionData:-a,children:[{type:"elem",elem:t}]},e)},mathmlBuilder(r,e){var t=new M.MathNode("mpadded",[X(r.body,e)]),a=r.dy.number+r.dy.unit;return t.setAttribute("voffset",a),t}});B({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(r){var{parser:e}=r;return{type:"internal",mode:e.mode}}});B({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(r,e,t){var{parser:a}=r,n=t[0],s=L(e[0],"size"),l=L(e[1],"size");return{type:"rule",mode:a.mode,shift:n&&L(n,"size").value,width:s.value,height:l.value}},htmlBuilder(r,e){var t=y.makeSpan(["mord","rule"],[],e),a=Q(r.width,e),n=Q(r.height,e),s=r.shift?Q(r.shift,e):0;return t.style.borderRightWidth=T(a),t.style.borderTopWidth=T(n),t.style.bottom=T(s),t.width=a,t.height=n+s,t.depth=-s,t.maxFontSize=n*1.125*e.sizeMultiplier,t},mathmlBuilder(r,e){var t=Q(r.width,e),a=Q(r.height,e),n=r.shift?Q(r.shift,e):0,s=e.color&&e.getColor()||"black",l=new M.MathNode("mspace");l.setAttribute("mathbackground",s),l.setAttribute("width",T(t)),l.setAttribute("height",T(a));var h=new M.MathNode("mpadded",[l]);return n>=0?h.setAttribute("height",T(n)):(h.setAttribute("height",T(n)),h.setAttribute("depth",T(-n))),h.setAttribute("voffset",T(n)),h}});function ma(r,e,t){for(var a=a0(r,e,!1),n=e.sizeMultiplier/t.sizeMultiplier,s=0;s{var t=e.havingSize(r.size);return ma(r.body,t,e)};B({type:"sizing",names:pr,props:{numArgs:0,allowedInText:!0},handler:(r,e)=>{var{breakOnTokenText:t,funcName:a,parser:n}=r,s=n.parseExpression(!1,t);return{type:"sizing",mode:n.mode,size:pr.indexOf(a)+1,body:s}},htmlBuilder:sn,mathmlBuilder:(r,e)=>{var t=e.havingSize(r.size),a=m0(r.body,t),n=new M.MathNode("mstyle",a);return n.setAttribute("mathsize",T(t.sizeMultiplier)),n}});B({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(r,e,t)=>{var{parser:a}=r,n=!1,s=!1,l=t[0]&&L(t[0],"ordgroup");if(l)for(var h="",c=0;c{var t=y.makeSpan([],[G(r.body,e)]);if(!r.smashHeight&&!r.smashDepth)return t;if(r.smashHeight&&(t.height=0,t.children))for(var a=0;a{var t=new M.MathNode("mpadded",[X(r.body,e)]);return r.smashHeight&&t.setAttribute("height","0px"),r.smashDepth&&t.setAttribute("depth","0px"),t}});B({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(r,e,t){var{parser:a}=r,n=t[0],s=e[0];return{type:"sqrt",mode:a.mode,body:s,index:n}},htmlBuilder(r,e){var t=G(r.body,e.havingCrampedStyle());t.height===0&&(t.height=e.fontMetrics().xHeight),t=y.wrapFragment(t,e);var a=e.fontMetrics(),n=a.defaultRuleThickness,s=n;e.style.idt.height+t.depth+l&&(l=(l+b-t.height-t.depth)/2);var x=c.height-t.height-l-f;t.style.paddingLeft=T(v);var w=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t,wrapperClasses:["svg-align"]},{type:"kern",size:-(t.height+x)},{type:"elem",elem:c},{type:"kern",size:f}]},e);if(r.index){var A=e.havingStyle(E.SCRIPTSCRIPT),q=G(r.index,A,e),_=.6*(w.height-w.depth),D=y.makeVList({positionType:"shift",positionData:-_,children:[{type:"elem",elem:q}]},e),N=y.makeSpan(["root"],[D]);return y.makeSpan(["mord","sqrt"],[N,w],e)}else return y.makeSpan(["mord","sqrt"],[w],e)},mathmlBuilder(r,e){var{body:t,index:a}=r;return a?new M.MathNode("mroot",[X(t,e),X(a,e)]):new M.MathNode("msqrt",[X(t,e)])}});var fr={display:E.DISPLAY,text:E.TEXT,script:E.SCRIPT,scriptscript:E.SCRIPTSCRIPT};B({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r,e){var{breakOnTokenText:t,funcName:a,parser:n}=r,s=n.parseExpression(!0,t),l=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:l,body:s}},htmlBuilder(r,e){var t=fr[r.style],a=e.havingStyle(t).withFont("");return ma(r.body,a,e)},mathmlBuilder(r,e){var t=fr[r.style],a=e.havingStyle(t),n=m0(r.body,a),s=new M.MathNode("mstyle",n),l={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},h=l[r.style];return s.setAttribute("scriptlevel",h[0]),s.setAttribute("displaystyle",h[1]),s}});var on=function(e,t){var a=e.base;if(a)if(a.type==="op"){var n=a.limits&&(t.style.size===E.DISPLAY.size||a.alwaysHandleSupSub);return n?se:null}else if(a.type==="operatorname"){var s=a.alwaysHandleSupSub&&(t.style.size===E.DISPLAY.size||a.limits);return s?ca:null}else{if(a.type==="accent")return O.isCharacterBox(a.base)?_t:null;if(a.type==="horizBrace"){var l=!e.sub;return l===a.isOver?la:null}else return null}else return null};j0({type:"supsub",htmlBuilder(r,e){var t=on(r,e);if(t)return t(r,e);var{base:a,sup:n,sub:s}=r,l=G(a,e),h,c,f=e.fontMetrics(),v=0,b=0,x=a&&O.isCharacterBox(a);if(n){var w=e.havingStyle(e.style.sup());h=G(n,w,e),x||(v=l.height-w.fontMetrics().supDrop*w.sizeMultiplier/e.sizeMultiplier)}if(s){var A=e.havingStyle(e.style.sub());c=G(s,A,e),x||(b=l.depth+A.fontMetrics().subDrop*A.sizeMultiplier/e.sizeMultiplier)}var q;e.style===E.DISPLAY?q=f.sup1:e.style.cramped?q=f.sup3:q=f.sup2;var _=e.sizeMultiplier,D=T(.5/f.ptPerEm/_),N=null;if(c){var $=r.base&&r.base.type==="op"&&r.base.name&&(r.base.name==="\\oiint"||r.base.name==="\\oiiint");(l instanceof c0||$)&&(N=T(-l.italic))}var H;if(h&&c){v=Math.max(v,q,h.depth+.25*f.xHeight),b=Math.max(b,f.sub2);var F=f.defaultRuleThickness,P=4*F;if(v-h.depth-(c.height-b)0&&(v+=V,b-=V)}var j=[{type:"elem",elem:c,shift:b,marginRight:D,marginLeft:N},{type:"elem",elem:h,shift:-v,marginRight:D}];H=y.makeVList({positionType:"individualShift",children:j},e)}else if(c){b=Math.max(b,f.sub1,c.height-.8*f.xHeight);var U=[{type:"elem",elem:c,marginLeft:N,marginRight:D}];H=y.makeVList({positionType:"shift",positionData:b,children:U},e)}else if(h)v=Math.max(v,q,h.depth+.25*f.xHeight),H=y.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:h,marginRight:D}]},e);else throw new Error("supsub must have either sup or sub.");var D0=bt(l,"right")||"mord";return y.makeSpan([D0],[l,y.makeSpan(["msupsub"],[H])],e)},mathmlBuilder(r,e){var t=!1,a,n;r.base&&r.base.type==="horizBrace"&&(n=!!r.sup,n===r.base.isOver&&(t=!0,a=r.base.isOver)),r.base&&(r.base.type==="op"||r.base.type==="operatorname")&&(r.base.parentIsSupSub=!0);var s=[X(r.base,e)];r.sub&&s.push(X(r.sub,e)),r.sup&&s.push(X(r.sup,e));var l;if(t)l=a?"mover":"munder";else if(r.sub)if(r.sup){var f=r.base;f&&f.type==="op"&&f.limits&&e.style===E.DISPLAY||f&&f.type==="operatorname"&&f.alwaysHandleSupSub&&(e.style===E.DISPLAY||f.limits)?l="munderover":l="msubsup"}else{var c=r.base;c&&c.type==="op"&&c.limits&&(e.style===E.DISPLAY||c.alwaysHandleSupSub)||c&&c.type==="operatorname"&&c.alwaysHandleSupSub&&(c.limits||e.style===E.DISPLAY)?l="munder":l="msub"}else{var h=r.base;h&&h.type==="op"&&h.limits&&(e.style===E.DISPLAY||h.alwaysHandleSupSub)||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(h.limits||e.style===E.DISPLAY)?l="mover":l="msup"}return new M.MathNode(l,s)}});j0({type:"atom",htmlBuilder(r,e){return y.mathsym(r.text,r.mode,e,["m"+r.family])},mathmlBuilder(r,e){var t=new M.MathNode("mo",[y0(r.text,r.mode)]);if(r.family==="bin"){var a=Dt(r,e);a==="bold-italic"&&t.setAttribute("mathvariant",a)}else r.family==="punct"?t.setAttribute("separator","true"):(r.family==="open"||r.family==="close")&&t.setAttribute("stretchy","false");return t}});var da={mi:"italic",mn:"normal",mtext:"normal"};j0({type:"mathord",htmlBuilder(r,e){return y.makeOrd(r,e,"mathord")},mathmlBuilder(r,e){var t=new M.MathNode("mi",[y0(r.text,r.mode,e)]),a=Dt(r,e)||"italic";return a!==da[t.type]&&t.setAttribute("mathvariant",a),t}});j0({type:"textord",htmlBuilder(r,e){return y.makeOrd(r,e,"textord")},mathmlBuilder(r,e){var t=y0(r.text,r.mode,e),a=Dt(r,e)||"normal",n;return r.mode==="text"?n=new M.MathNode("mtext",[t]):/[0-9]/.test(r.text)?n=new M.MathNode("mn",[t]):r.text==="\\prime"?n=new M.MathNode("mo",[t]):n=new M.MathNode("mi",[t]),a!==da[n.type]&&n.setAttribute("mathvariant",a),n}});var ct={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},mt={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};j0({type:"spacing",htmlBuilder(r,e){if(mt.hasOwnProperty(r.text)){var t=mt[r.text].className||"";if(r.mode==="text"){var a=y.makeOrd(r,e,"textord");return a.classes.push(t),a}else return y.makeSpan(["mspace",t],[y.mathsym(r.text,r.mode,e)],e)}else{if(ct.hasOwnProperty(r.text))return y.makeSpan(["mspace",ct[r.text]],[],e);throw new z('Unknown type of space "'+r.text+'"')}},mathmlBuilder(r,e){var t;if(mt.hasOwnProperty(r.text))t=new M.MathNode("mtext",[new M.TextNode("\xA0")]);else{if(ct.hasOwnProperty(r.text))return new M.MathNode("mspace");throw new z('Unknown type of space "'+r.text+'"')}return t}});var vr=()=>{var r=new M.MathNode("mtd",[]);return r.setAttribute("width","50%"),r};j0({type:"tag",mathmlBuilder(r,e){var t=new M.MathNode("mtable",[new M.MathNode("mtr",[vr(),new M.MathNode("mtd",[V0(r.body,e)]),vr(),new M.MathNode("mtd",[V0(r.tag,e)])])]);return t.setAttribute("width","100%"),t}});var gr={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},br={"\\textbf":"textbf","\\textmd":"textmd"},ln={"\\textit":"textit","\\textup":"textup"},yr=(r,e)=>{var t=r.font;if(t){if(gr[t])return e.withTextFontFamily(gr[t]);if(br[t])return e.withTextFontWeight(br[t]);if(t==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(ln[t])};B({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"text",mode:t.mode,body:e0(n),font:a}},htmlBuilder(r,e){var t=yr(r,e),a=a0(r.body,t,!0);return y.makeSpan(["mord","text"],a,t)},mathmlBuilder(r,e){var t=yr(r,e);return V0(r.body,t)}});B({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(r,e){var{parser:t}=r;return{type:"underline",mode:t.mode,body:e[0]}},htmlBuilder(r,e){var t=G(r.body,e),a=y.makeLineSpan("underline-line",e),n=e.fontMetrics().defaultRuleThickness,s=y.makeVList({positionType:"top",positionData:t.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:t}]},e);return y.makeSpan(["mord","underline"],[s],e)},mathmlBuilder(r,e){var t=new M.MathNode("mo",[new M.TextNode("\u203E")]);t.setAttribute("stretchy","true");var a=new M.MathNode("munder",[X(r.body,e),t]);return a.setAttribute("accentunder","true"),a}});B({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(r,e){var{parser:t}=r;return{type:"vcenter",mode:t.mode,body:e[0]}},htmlBuilder(r,e){var t=G(r.body,e),a=e.fontMetrics().axisHeight,n=.5*(t.height-a-(t.depth+a));return y.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:t}]},e)},mathmlBuilder(r,e){return new M.MathNode("mpadded",[X(r.body,e)],["vcenter"])}});B({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(r,e,t){throw new z("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(r,e){for(var t=xr(r),a=[],n=e.havingStyle(e.style.text()),s=0;sr.body.replace(/ /g,r.star?"\u2423":"\xA0"),P0=Er,pa=`[ \r + `+V+" children.");for(var i0=0;i00&&(n.style.minWidth=T(s)),n},O1=function(e,t,a,n,s){var l,h=e.height+e.depth+a+n;if(/fbox|color|angl/.test(t)){if(l=y.makeSpan(["stretchy",t],[],s),t==="fbox"){var c=s.color&&s.getColor();c&&(l.style.borderColor=c)}}else{var f=[];/^[bx]cancel$/.test(t)&&f.push(new ve({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&f.push(new ve({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var v=new S0(f,{width:"100%",height:T(h)});l=y.makeSvgSpan([],[v],s)}return l.height=h,l.style.height=T(h),l},E0={encloseSpan:O1,mathMLnode:D1,svgSpan:N1};function L(r,e){if(!r||r.type!==e)throw new Error("Expected node of type "+e+", but got "+(r?"node of type "+r.type:String(r)));return r}function Ct(r){var e=Xe(r);if(!e)throw new Error("Expected node of symbol group type, but got "+(r?"node of type "+r.type:String(r)));return e}function Xe(r){return r&&(r.type==="atom"||s1.hasOwnProperty(r.type))?r:null}var _t=(r,e)=>{var t,a,n;r&&r.type==="supsub"?(a=L(r.base,"accent"),t=a.base,r.base=t,n=n1(G(r,e)),r.base=a):(a=L(r,"accent"),t=a.base);var s=G(t,e.havingCrampedStyle()),l=a.isShifty&&O.isCharacterBox(t),h=0;if(l){var c=O.getBaseElem(t),f=G(c,e.havingCrampedStyle());h=Jt(f).skew}var v=a.label==="\\c",b=v?s.height+s.depth:Math.min(s.height,e.fontMetrics().xHeight),x;if(a.isStretchy)x=E0.svgSpan(a,e),x=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"elem",elem:x,wrapperClasses:["svg-align"],wrapperStyle:h>0?{width:"calc(100% - "+T(2*h)+")",marginLeft:T(2*h)}:void 0}]},e);else{var w,A;a.label==="\\vec"?(w=y.staticSvg("vec",e),A=y.svgData.vec[1]):(w=y.makeOrd({mode:a.mode,text:a.label},e,"textord"),w=Jt(w),w.italic=0,A=w.width,v&&(b+=w.depth)),x=y.makeSpan(["accent-body"],[w]);var q=a.label==="\\textcircled";q&&(x.classes.push("accent-full"),b=s.height);var _=h;q||(_-=A/2),x.style.left=T(_),a.label==="\\textcircled"&&(x.style.top=".2em"),x=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:-b},{type:"elem",elem:x}]},e)}var D=y.makeSpan(["mord","accent"],[x],e);return n?(n.children[0]=D,n.height=Math.max(D.height,n.height),n.classes[0]="mord",n):D},Hr=(r,e)=>{var t=r.isStretchy?E0.mathMLnode(r.label):new M.MathNode("mo",[y0(r.label,r.mode)]),a=new M.MathNode("mover",[X(r.base,e),t]);return a.setAttribute("accent","true"),a},I1=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(r=>"\\"+r).join("|"));B({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(r,e)=>{var t=He(e[0]),a=!I1.test(r.funcName),n=!a||r.funcName==="\\widehat"||r.funcName==="\\widetilde"||r.funcName==="\\widecheck";return{type:"accent",mode:r.parser.mode,label:r.funcName,isStretchy:a,isShifty:n,base:t}},htmlBuilder:_t,mathmlBuilder:Hr});B({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(r,e)=>{var t=e[0],a=r.parser.mode;return a==="math"&&(r.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+r.funcName+" works only in text mode"),a="text"),{type:"accent",mode:a,label:r.funcName,isStretchy:!1,isShifty:!0,base:t}},htmlBuilder:_t,mathmlBuilder:Hr});B({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"accentUnder",mode:t.mode,label:a,base:n}},htmlBuilder:(r,e)=>{var t=G(r.base,e),a=E0.svgSpan(r,e),n=r.label==="\\utilde"?.12:0,s=y.makeVList({positionType:"top",positionData:t.height,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:t}]},e);return y.makeSpan(["mord","accentunder"],[s],e)},mathmlBuilder:(r,e)=>{var t=E0.mathMLnode(r.label),a=new M.MathNode("munder",[X(r.base,e),t]);return a.setAttribute("accentunder","true"),a}});var Ce=r=>{var e=new M.MathNode("mpadded",r?[r]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e};B({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(r,e,t){var{parser:a,funcName:n}=r;return{type:"xArrow",mode:a.mode,label:n,body:e[0],below:t[0]}},htmlBuilder(r,e){var t=e.style,a=e.havingStyle(t.sup()),n=y.wrapFragment(G(r.body,a,e),e),s=r.label.slice(0,2)==="\\x"?"x":"cd";n.classes.push(s+"-arrow-pad");var l;r.below&&(a=e.havingStyle(t.sub()),l=y.wrapFragment(G(r.below,a,e),e),l.classes.push(s+"-arrow-pad"));var h=E0.svgSpan(r,e),c=-e.fontMetrics().axisHeight+.5*h.height,f=-e.fontMetrics().axisHeight-.5*h.height-.111;(n.depth>.25||r.label==="\\xleftequilibrium")&&(f-=n.depth);var v;if(l){var b=-e.fontMetrics().axisHeight+l.height+.5*h.height+.111;v=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:f},{type:"elem",elem:h,shift:c},{type:"elem",elem:l,shift:b}]},e)}else v=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:f},{type:"elem",elem:h,shift:c}]},e);return v.children[0].children[0].children[1].classes.push("svg-align"),y.makeSpan(["mrel","x-arrow"],[v],e)},mathmlBuilder(r,e){var t=E0.mathMLnode(r.label);t.setAttribute("minsize",r.label.charAt(0)==="x"?"1.75em":"3.0em");var a;if(r.body){var n=Ce(X(r.body,e));if(r.below){var s=Ce(X(r.below,e));a=new M.MathNode("munderover",[t,s,n])}else a=new M.MathNode("mover",[t,n])}else if(r.below){var l=Ce(X(r.below,e));a=new M.MathNode("munder",[t,l])}else a=Ce(),a=new M.MathNode("mover",[t,a]);return a}});var E1=y.makeSpan;function Pr(r,e){var t=a0(r.body,e,!0);return E1([r.mclass],t,e)}function Gr(r,e){var t,a=m0(r.body,e);return r.mclass==="minner"?t=new M.MathNode("mpadded",a):r.mclass==="mord"?r.isCharacterBox?(t=a[0],t.type="mi"):t=new M.MathNode("mi",a):(r.isCharacterBox?(t=a[0],t.type="mo"):t=new M.MathNode("mo",a),r.mclass==="mbin"?(t.attributes.lspace="0.22em",t.attributes.rspace="0.22em"):r.mclass==="mpunct"?(t.attributes.lspace="0em",t.attributes.rspace="0.17em"):r.mclass==="mopen"||r.mclass==="mclose"?(t.attributes.lspace="0em",t.attributes.rspace="0em"):r.mclass==="minner"&&(t.attributes.lspace="0.0556em",t.attributes.width="+0.1111em")),t}B({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"mclass",mode:t.mode,mclass:"m"+a.slice(5),body:e0(n),isCharacterBox:O.isCharacterBox(n)}},htmlBuilder:Pr,mathmlBuilder:Gr});var We=r=>{var e=r.type==="ordgroup"&&r.body.length?r.body[0]:r;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"};B({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(r,e){var{parser:t}=r;return{type:"mclass",mode:t.mode,mclass:We(e[0]),body:e0(e[1]),isCharacterBox:O.isCharacterBox(e[1])}}});B({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(r,e){var{parser:t,funcName:a}=r,n=e[1],s=e[0],l;a!=="\\stackrel"?l=We(n):l="mrel";var h={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:a!=="\\stackrel",body:e0(n)},c={type:"supsub",mode:s.mode,base:h,sup:a==="\\underset"?null:s,sub:a==="\\underset"?s:null};return{type:"mclass",mode:t.mode,mclass:l,body:[c],isCharacterBox:O.isCharacterBox(c)}},htmlBuilder:Pr,mathmlBuilder:Gr});B({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(r,e){var{parser:t}=r;return{type:"pmb",mode:t.mode,mclass:We(e[0]),body:e0(e[0])}},htmlBuilder(r,e){var t=a0(r.body,e,!0),a=y.makeSpan([r.mclass],t,e);return a.style.textShadow="0.02em 0.01em 0.04px",a},mathmlBuilder(r,e){var t=m0(r.body,e),a=new M.MathNode("mstyle",t);return a.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),a}});var R1={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},nr=()=>({type:"styling",body:[],mode:"math",style:"display"}),ir=r=>r.type==="textord"&&r.text==="@",$1=(r,e)=>(r.type==="mathord"||r.type==="atom")&&r.text===e;function L1(r,e,t){var a=R1[r];switch(a){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return t.callFunction(a,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var n=t.callFunction("\\\\cdleft",[e[0]],[]),s={type:"atom",text:a,mode:"math",family:"rel"},l=t.callFunction("\\Big",[s],[]),h=t.callFunction("\\\\cdright",[e[1]],[]),c={type:"ordgroup",mode:"math",body:[n,l,h]};return t.callFunction("\\\\cdparent",[c],[])}case"\\\\cdlongequal":return t.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var f={type:"textord",text:"\\Vert",mode:"math"};return t.callFunction("\\Big",[f],[])}default:return{type:"textord",text:" ",mode:"math"}}}function F1(r){var e=[];for(r.gullet.beginGroup(),r.gullet.macros.set("\\cr","\\\\\\relax"),r.gullet.beginGroup();;){e.push(r.parseExpression(!1,"\\\\")),r.gullet.endGroup(),r.gullet.beginGroup();var t=r.fetch().text;if(t==="&"||t==="\\\\")r.consume();else if(t==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new z("Expected \\\\ or \\cr or \\end",r.nextToken)}for(var a=[],n=[a],s=0;s-1))if("<>AV".indexOf(f)>-1)for(var b=0;b<2;b++){for(var x=!0,w=c+1;wAV=|." after @',l[c]);var A=L1(f,v,r),q={type:"styling",body:[A],mode:"math",style:"display"};a.push(q),h=nr()}s%2===0?a.push(h):a.shift(),a=[],n.push(a)}r.gullet.endGroup(),r.gullet.endGroup();var _=new Array(n[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:n,arraystretch:1,addJot:!0,rowGaps:[null],cols:_,colSeparationType:"CD",hLinesBeforeRow:new Array(n.length+1).fill([])}}B({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(r,e){var{parser:t,funcName:a}=r;return{type:"cdlabel",mode:t.mode,side:a.slice(4),label:e[0]}},htmlBuilder(r,e){var t=e.havingStyle(e.style.sup()),a=y.wrapFragment(G(r.label,t,e),e);return a.classes.push("cd-label-"+r.side),a.style.bottom=T(.8-a.depth),a.height=0,a.depth=0,a},mathmlBuilder(r,e){var t=new M.MathNode("mrow",[X(r.label,e)]);return t=new M.MathNode("mpadded",[t]),t.setAttribute("width","0"),r.side==="left"&&t.setAttribute("lspace","-1width"),t.setAttribute("voffset","0.7em"),t=new M.MathNode("mstyle",[t]),t.setAttribute("displaystyle","false"),t.setAttribute("scriptlevel","1"),t}});B({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(r,e){var{parser:t}=r;return{type:"cdlabelparent",mode:t.mode,fragment:e[0]}},htmlBuilder(r,e){var t=y.wrapFragment(G(r.fragment,e),e);return t.classes.push("cd-vert-arrow"),t},mathmlBuilder(r,e){return new M.MathNode("mrow",[X(r.fragment,e)])}});B({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(r,e){for(var{parser:t}=r,a=L(e[0],"ordgroup"),n=a.body,s="",l=0;l=1114111)throw new z("\\@char with invalid code point "+s);return c<=65535?f=String.fromCharCode(c):(c-=65536,f=String.fromCharCode((c>>10)+55296,(c&1023)+56320)),{type:"textord",mode:t.mode,text:f}}});var Vr=(r,e)=>{var t=a0(r.body,e.withColor(r.color),!1);return y.makeFragment(t)},Ur=(r,e)=>{var t=m0(r.body,e.withColor(r.color)),a=new M.MathNode("mstyle",t);return a.setAttribute("mathcolor",r.color),a};B({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(r,e){var{parser:t}=r,a=L(e[0],"color-token").color,n=e[1];return{type:"color",mode:t.mode,color:a,body:e0(n)}},htmlBuilder:Vr,mathmlBuilder:Ur});B({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(r,e){var{parser:t,breakOnTokenText:a}=r,n=L(e[0],"color-token").color;t.gullet.macros.set("\\current@color",n);var s=t.parseExpression(!0,a);return{type:"color",mode:t.mode,color:n,body:s}},htmlBuilder:Vr,mathmlBuilder:Ur});B({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(r,e,t){var{parser:a}=r,n=a.gullet.future().text==="["?a.parseSizeGroup(!0):null,s=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:a.mode,newLine:s,size:n&&L(n,"size").value}},htmlBuilder(r,e){var t=y.makeSpan(["mspace"],[],e);return r.newLine&&(t.classes.push("newline"),r.size&&(t.style.marginTop=T(Q(r.size,e)))),t},mathmlBuilder(r,e){var t=new M.MathNode("mspace");return r.newLine&&(t.setAttribute("linebreak","newline"),r.size&&t.setAttribute("height",T(Q(r.size,e)))),t}});var wt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Xr=r=>{var e=r.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new z("Expected a control sequence",r);return e},H1=r=>{var e=r.gullet.popToken();return e.text==="="&&(e=r.gullet.popToken(),e.text===" "&&(e=r.gullet.popToken())),e},Wr=(r,e,t,a)=>{var n=r.gullet.macros.get(t.text);n==null&&(t.noexpand=!0,n={tokens:[t],numArgs:0,unexpandable:!r.gullet.isExpandable(t.text)}),r.gullet.macros.set(e,n,a)};B({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(r){var{parser:e,funcName:t}=r;e.consumeSpaces();var a=e.fetch();if(wt[a.text])return(t==="\\global"||t==="\\\\globallong")&&(a.text=wt[a.text]),L(e.parseFunction(),"internal");throw new z("Invalid token after macro prefix",a)}});B({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r){var{parser:e,funcName:t}=r,a=e.gullet.popToken(),n=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new z("Expected a control sequence",a);for(var s=0,l,h=[[]];e.gullet.future().text!=="{";)if(a=e.gullet.popToken(),a.text==="#"){if(e.gullet.future().text==="{"){l=e.gullet.future(),h[s].push("{");break}if(a=e.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new z('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new z('Argument number "'+a.text+'" out of order');s++,h.push([])}else{if(a.text==="EOF")throw new z("Expected a macro definition");h[s].push(a.text)}var{tokens:c}=e.gullet.consumeArg();return l&&c.unshift(l),(t==="\\edef"||t==="\\xdef")&&(c=e.gullet.expandTokens(c),c.reverse()),e.gullet.macros.set(n,{tokens:c,numArgs:s,delimiters:h},t===wt[t]),{type:"internal",mode:e.mode}}});B({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r){var{parser:e,funcName:t}=r,a=Xr(e.gullet.popToken());e.gullet.consumeSpaces();var n=H1(e);return Wr(e,a,n,t==="\\\\globallet"),{type:"internal",mode:e.mode}}});B({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r){var{parser:e,funcName:t}=r,a=Xr(e.gullet.popToken()),n=e.gullet.popToken(),s=e.gullet.popToken();return Wr(e,a,s,t==="\\\\globalfuture"),e.gullet.pushToken(s),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}});var ce=function(e,t,a){var n=Y.math[e]&&Y.math[e].replace,s=Tt(n||e,t,a);if(!s)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return s},Nt=function(e,t,a,n){var s=a.havingBaseStyle(t),l=y.makeSpan(n.concat(s.sizingClasses(a)),[e],a),h=s.sizeMultiplier/a.sizeMultiplier;return l.height*=h,l.depth*=h,l.maxFontSize=s.sizeMultiplier,l},Yr=function(e,t,a){var n=t.havingBaseStyle(a),s=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=T(s),e.height-=s,e.depth+=s},P1=function(e,t,a,n,s,l){var h=y.makeSymbol(e,"Main-Regular",s,n),c=Nt(h,t,n,l);return a&&Yr(c,n,t),c},G1=function(e,t,a,n){return y.makeSymbol(e,"Size"+t+"-Regular",a,n)},Zr=function(e,t,a,n,s,l){var h=G1(e,t,s,n),c=Nt(y.makeSpan(["delimsizing","size"+t],[h],n),E.TEXT,n,l);return a&&Yr(c,n,E.TEXT),c},it=function(e,t,a){var n;t==="Size1-Regular"?n="delim-size1":n="delim-size4";var s=y.makeSpan(["delimsizinginner",n],[y.makeSpan([],[y.makeSymbol(e,t,a)])]);return{type:"elem",elem:s}},st=function(e,t,a){var n=z0["Size4-Regular"][e.charCodeAt(0)]?z0["Size4-Regular"][e.charCodeAt(0)][4]:z0["Size1-Regular"][e.charCodeAt(0)][4],s=new A0("inner",ja(e,Math.round(1e3*t))),l=new S0([s],{width:T(n),height:T(t),style:"width:"+T(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),h=y.makeSvgSpan([],[l],a);return h.height=t,h.style.height=T(t),h.style.width=T(n),{type:"elem",elem:h}},St=.008,_e={type:"kern",size:-1*St},V1=["|","\\lvert","\\rvert","\\vert"],U1=["\\|","\\lVert","\\rVert","\\Vert"],jr=function(e,t,a,n,s,l){var h,c,f,v,b="",x=0;h=f=v=e,c=null;var w="Size1-Regular";e==="\\uparrow"?f=v="\u23D0":e==="\\Uparrow"?f=v="\u2016":e==="\\downarrow"?h=f="\u23D0":e==="\\Downarrow"?h=f="\u2016":e==="\\updownarrow"?(h="\\uparrow",f="\u23D0",v="\\downarrow"):e==="\\Updownarrow"?(h="\\Uparrow",f="\u2016",v="\\Downarrow"):O.contains(V1,e)?(f="\u2223",b="vert",x=333):O.contains(U1,e)?(f="\u2225",b="doublevert",x=556):e==="["||e==="\\lbrack"?(h="\u23A1",f="\u23A2",v="\u23A3",w="Size4-Regular",b="lbrack",x=667):e==="]"||e==="\\rbrack"?(h="\u23A4",f="\u23A5",v="\u23A6",w="Size4-Regular",b="rbrack",x=667):e==="\\lfloor"||e==="\u230A"?(f=h="\u23A2",v="\u23A3",w="Size4-Regular",b="lfloor",x=667):e==="\\lceil"||e==="\u2308"?(h="\u23A1",f=v="\u23A2",w="Size4-Regular",b="lceil",x=667):e==="\\rfloor"||e==="\u230B"?(f=h="\u23A5",v="\u23A6",w="Size4-Regular",b="rfloor",x=667):e==="\\rceil"||e==="\u2309"?(h="\u23A4",f=v="\u23A5",w="Size4-Regular",b="rceil",x=667):e==="("||e==="\\lparen"?(h="\u239B",f="\u239C",v="\u239D",w="Size4-Regular",b="lparen",x=875):e===")"||e==="\\rparen"?(h="\u239E",f="\u239F",v="\u23A0",w="Size4-Regular",b="rparen",x=875):e==="\\{"||e==="\\lbrace"?(h="\u23A7",c="\u23A8",v="\u23A9",f="\u23AA",w="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(h="\u23AB",c="\u23AC",v="\u23AD",f="\u23AA",w="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(h="\u23A7",v="\u23A9",f="\u23AA",w="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(h="\u23AB",v="\u23AD",f="\u23AA",w="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(h="\u23A7",v="\u23AD",f="\u23AA",w="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(h="\u23AB",v="\u23A9",f="\u23AA",w="Size4-Regular");var A=ce(h,w,s),q=A.height+A.depth,_=ce(f,w,s),D=_.height+_.depth,N=ce(v,w,s),$=N.height+N.depth,H=0,F=1;if(c!==null){var P=ce(c,w,s);H=P.height+P.depth,F=2}var V=q+$+H,j=Math.max(0,Math.ceil((t-V)/(F*D))),U=V+j*F*D,D0=n.fontMetrics().axisHeight;a&&(D0*=n.sizeMultiplier);var i0=U/2-D0,r0=[];if(b.length>0){var X0=U-q-$,u0=Math.round(U*1e3),x0=Ka(b,Math.round(X0*1e3)),$0=new A0(b,x0),K0=(x/1e3).toFixed(3)+"em",J0=(u0/1e3).toFixed(3)+"em",je=new S0([$0],{width:K0,height:J0,viewBox:"0 0 "+x+" "+u0}),L0=y.makeSvgSpan([],[je],n);L0.height=u0/1e3,L0.style.width=K0,L0.style.height=J0,r0.push({type:"elem",elem:L0})}else{if(r0.push(it(v,w,s)),r0.push(_e),c===null){var F0=U-q-$+2*St;r0.push(st(f,F0,n))}else{var f0=(U-q-$-H)/2+2*St;r0.push(st(f,f0,n)),r0.push(_e),r0.push(it(c,w,s)),r0.push(_e),r0.push(st(f,f0,n))}r0.push(_e),r0.push(it(h,w,s))}var le=n.havingBaseStyle(E.TEXT),Ke=y.makeVList({positionType:"bottom",positionData:i0,children:r0},le);return Nt(y.makeSpan(["delimsizing","mult"],[Ke],le),E.TEXT,n,l)},ot=80,lt=.08,ut=function(e,t,a,n,s){var l=Za(e,n,a),h=new A0(e,l),c=new S0([h],{width:"400em",height:T(t),viewBox:"0 0 400000 "+a,preserveAspectRatio:"xMinYMin slice"});return y.makeSvgSpan(["hide-tail"],[c],s)},X1=function(e,t){var a=t.havingBaseSizing(),n=ea("\\surd",e*a.sizeMultiplier,Qr,a),s=a.sizeMultiplier,l=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),h,c=0,f=0,v=0,b;return n.type==="small"?(v=1e3+1e3*l+ot,e<1?s=1:e<1.4&&(s=.7),c=(1+l+lt)/s,f=(1+l)/s,h=ut("sqrtMain",c,v,l,t),h.style.minWidth="0.853em",b=.833/s):n.type==="large"?(v=(1e3+ot)*me[n.size],f=(me[n.size]+l)/s,c=(me[n.size]+l+lt)/s,h=ut("sqrtSize"+n.size,c,v,l,t),h.style.minWidth="1.02em",b=1/s):(c=e+l+lt,f=e+l,v=Math.floor(1e3*e+l)+ot,h=ut("sqrtTall",c,v,l,t),h.style.minWidth="0.742em",b=1.056),h.height=f,h.style.height=T(c),{span:h,advanceWidth:b,ruleWidth:(t.fontMetrics().sqrtRuleThickness+l)*s}},Kr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],W1=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],Jr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],me=[0,1.2,1.8,2.4,3],Y1=function(e,t,a,n,s){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),O.contains(Kr,e)||O.contains(Jr,e))return Zr(e,t,!1,a,n,s);if(O.contains(W1,e))return jr(e,me[t],!1,a,n,s);throw new z("Illegal delimiter: '"+e+"'")},Z1=[{type:"small",style:E.SCRIPTSCRIPT},{type:"small",style:E.SCRIPT},{type:"small",style:E.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],j1=[{type:"small",style:E.SCRIPTSCRIPT},{type:"small",style:E.SCRIPT},{type:"small",style:E.TEXT},{type:"stack"}],Qr=[{type:"small",style:E.SCRIPTSCRIPT},{type:"small",style:E.SCRIPT},{type:"small",style:E.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],K1=function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},ea=function(e,t,a,n){for(var s=Math.min(2,3-n.style.size),l=s;lt)return a[l]}return a[a.length-1]},ta=function(e,t,a,n,s,l){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var h;O.contains(Jr,e)?h=Z1:O.contains(Kr,e)?h=Qr:h=j1;var c=ea(e,t,h,n);return c.type==="small"?P1(e,c.style,a,n,s,l):c.type==="large"?Zr(e,c.size,a,n,s,l):jr(e,t,a,n,s,l)},J1=function(e,t,a,n,s,l){var h=n.fontMetrics().axisHeight*n.sizeMultiplier,c=901,f=5/n.fontMetrics().ptPerEm,v=Math.max(t-h,a+h),b=Math.max(v/500*c,2*v-f);return ta(e,b,!0,n,s,l)},O0={sqrtImage:X1,sizedDelim:Y1,sizeToMaxHeight:me,customSizedDelim:ta,leftRightDelim:J1},sr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Q1=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Ye(r,e){var t=Xe(r);if(t&&O.contains(Q1,t.text))return t;throw t?new z("Invalid delimiter '"+t.text+"' after '"+e.funcName+"'",r):new z("Invalid delimiter type '"+r.type+"'",r)}B({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(r,e)=>{var t=Ye(e[0],r);return{type:"delimsizing",mode:r.parser.mode,size:sr[r.funcName].size,mclass:sr[r.funcName].mclass,delim:t.text}},htmlBuilder:(r,e)=>r.delim==="."?y.makeSpan([r.mclass]):O0.sizedDelim(r.delim,r.size,e,r.mode,[r.mclass]),mathmlBuilder:r=>{var e=[];r.delim!=="."&&e.push(y0(r.delim,r.mode));var t=new M.MathNode("mo",e);r.mclass==="mopen"||r.mclass==="mclose"?t.setAttribute("fence","true"):t.setAttribute("fence","false"),t.setAttribute("stretchy","true");var a=T(O0.sizeToMaxHeight[r.size]);return t.setAttribute("minsize",a),t.setAttribute("maxsize",a),t}});function or(r){if(!r.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}B({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var t=r.parser.gullet.macros.get("\\current@color");if(t&&typeof t!="string")throw new z("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:r.parser.mode,delim:Ye(e[0],r).text,color:t}}});B({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var t=Ye(e[0],r),a=r.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var s=L(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:t.text,right:s.delim,rightColor:s.color}},htmlBuilder:(r,e)=>{or(r);for(var t=a0(r.body,e,!0,["mopen","mclose"]),a=0,n=0,s=!1,l=0;l{or(r);var t=m0(r.body,e);if(r.left!=="."){var a=new M.MathNode("mo",[y0(r.left,r.mode)]);a.setAttribute("fence","true"),t.unshift(a)}if(r.right!=="."){var n=new M.MathNode("mo",[y0(r.right,r.mode)]);n.setAttribute("fence","true"),r.rightColor&&n.setAttribute("mathcolor",r.rightColor),t.push(n)}return Bt(t)}});B({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var t=Ye(e[0],r);if(!r.parser.leftrightDepth)throw new z("\\middle without preceding \\left",t);return{type:"middle",mode:r.parser.mode,delim:t.text}},htmlBuilder:(r,e)=>{var t;if(r.delim===".")t=ge(e,[]);else{t=O0.sizedDelim(r.delim,1,e,r.mode,[]);var a={delim:r.delim,options:e};t.isMiddle=a}return t},mathmlBuilder:(r,e)=>{var t=r.delim==="\\vert"||r.delim==="|"?y0("|","text"):y0(r.delim,r.mode),a=new M.MathNode("mo",[t]);return a.setAttribute("fence","true"),a.setAttribute("lspace","0.05em"),a.setAttribute("rspace","0.05em"),a}});var Ot=(r,e)=>{var t=y.wrapFragment(G(r.body,e),e),a=r.label.slice(1),n=e.sizeMultiplier,s,l=0,h=O.isCharacterBox(r.body);if(a==="sout")s=y.makeSpan(["stretchy","sout"]),s.height=e.fontMetrics().defaultRuleThickness/n,l=-.5*e.fontMetrics().xHeight;else if(a==="phase"){var c=Q({number:.6,unit:"pt"},e),f=Q({number:.35,unit:"ex"},e),v=e.havingBaseSizing();n=n/v.sizeMultiplier;var b=t.height+t.depth+c+f;t.style.paddingLeft=T(b/2+c);var x=Math.floor(1e3*b*n),w=Wa(x),A=new S0([new A0("phase",w)],{width:"400em",height:T(x/1e3),viewBox:"0 0 400000 "+x,preserveAspectRatio:"xMinYMin slice"});s=y.makeSvgSpan(["hide-tail"],[A],e),s.style.height=T(b),l=t.depth+c+f}else{/cancel/.test(a)?h||t.classes.push("cancel-pad"):a==="angl"?t.classes.push("anglpad"):t.classes.push("boxpad");var q=0,_=0,D=0;/box/.test(a)?(D=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),q=e.fontMetrics().fboxsep+(a==="colorbox"?0:D),_=q):a==="angl"?(D=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),q=4*D,_=Math.max(0,.25-t.depth)):(q=h?.2:0,_=q),s=E0.encloseSpan(t,a,q,_,e),/fbox|boxed|fcolorbox/.test(a)?(s.style.borderStyle="solid",s.style.borderWidth=T(D)):a==="angl"&&D!==.049&&(s.style.borderTopWidth=T(D),s.style.borderRightWidth=T(D)),l=t.depth+_,r.backgroundColor&&(s.style.backgroundColor=r.backgroundColor,r.borderColor&&(s.style.borderColor=r.borderColor))}var N;if(r.backgroundColor)N=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:l},{type:"elem",elem:t,shift:0}]},e);else{var $=/cancel|phase/.test(a)?["svg-align"]:[];N=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:t,shift:0},{type:"elem",elem:s,shift:l,wrapperClasses:$}]},e)}return/cancel/.test(a)&&(N.height=t.height,N.depth=t.depth),/cancel/.test(a)&&!h?y.makeSpan(["mord","cancel-lap"],[N],e):y.makeSpan(["mord"],[N],e)},It=(r,e)=>{var t=0,a=new M.MathNode(r.label.indexOf("colorbox")>-1?"mpadded":"menclose",[X(r.body,e)]);switch(r.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\phase":a.setAttribute("notation","phasorangle");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\angl":a.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(t=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*t+"pt"),a.setAttribute("height","+"+2*t+"pt"),a.setAttribute("lspace",t+"pt"),a.setAttribute("voffset",t+"pt"),r.label==="\\fcolorbox"){var n=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(r.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return r.backgroundColor&&a.setAttribute("mathbackground",r.backgroundColor),a};B({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(r,e,t){var{parser:a,funcName:n}=r,s=L(e[0],"color-token").color,l=e[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:s,body:l}},htmlBuilder:Ot,mathmlBuilder:It});B({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(r,e,t){var{parser:a,funcName:n}=r,s=L(e[0],"color-token").color,l=L(e[1],"color-token").color,h=e[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:l,borderColor:s,body:h}},htmlBuilder:Ot,mathmlBuilder:It});B({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(r,e){var{parser:t}=r;return{type:"enclose",mode:t.mode,label:"\\fbox",body:e[0]}}});B({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"enclose",mode:t.mode,label:a,body:n}},htmlBuilder:Ot,mathmlBuilder:It});B({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(r,e){var{parser:t}=r;return{type:"enclose",mode:t.mode,label:"\\angl",body:e[0]}}});var ra={};function T0(r){for(var{type:e,names:t,props:a,handler:n,htmlBuilder:s,mathmlBuilder:l}=r,h={type:e,numArgs:a.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},c=0;c{var e=r.parser.settings;if(!e.displayMode)throw new z("{"+r.envName+"} can be used only in display mode.")};function Et(r){if(r.indexOf("ed")===-1)return r.indexOf("*")===-1}function U0(r,e,t){var{hskipBeforeAndAfter:a,addJot:n,cols:s,arraystretch:l,colSeparationType:h,autoTag:c,singleRow:f,emptySingleRow:v,maxNumCols:b,leqno:x}=e;if(r.gullet.beginGroup(),f||r.gullet.macros.set("\\cr","\\\\\\relax"),!l){var w=r.gullet.expandMacroAsText("\\arraystretch");if(w==null)l=1;else if(l=parseFloat(w),!l||l<0)throw new z("Invalid \\arraystretch: "+w)}r.gullet.beginGroup();var A=[],q=[A],_=[],D=[],N=c!=null?[]:void 0;function $(){c&&r.gullet.macros.set("\\@eqnsw","1",!0)}function H(){N&&(r.gullet.macros.get("\\df@tag")?(N.push(r.subparse([new b0("\\df@tag")])),r.gullet.macros.set("\\df@tag",void 0,!0)):N.push(!!c&&r.gullet.macros.get("\\@eqnsw")==="1"))}for($(),D.push(lr(r));;){var F=r.parseExpression(!1,f?"\\end":"\\\\");r.gullet.endGroup(),r.gullet.beginGroup(),F={type:"ordgroup",mode:r.mode,body:F},t&&(F={type:"styling",mode:r.mode,style:t,body:[F]}),A.push(F);var P=r.fetch().text;if(P==="&"){if(b&&A.length===b){if(f||h)throw new z("Too many tab characters: &",r.nextToken);r.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}r.consume()}else if(P==="\\end"){H(),A.length===1&&F.type==="styling"&&F.body[0].body.length===0&&(q.length>1||!v)&&q.pop(),D.length0&&($+=.25),f.push({pos:$,isDashed:we[Se]})}for(H(l[0]),a=0;a0&&(i0+=N,Vwe))for(a=0;a=h)){var ee=void 0;(n>0||e.hskipBeforeAndAfter)&&(ee=O.deflt(f0.pregap,x),ee!==0&&(x0=y.makeSpan(["arraycolsep"],[]),x0.style.width=T(ee),u0.push(x0)));var te=[];for(a=0;a0){for(var Sa=y.makeLineSpan("hline",t,v),ka=y.makeLineSpan("hdashline",t,v),Je=[{type:"elem",elem:c,shift:0}];f.length>0;){var Ut=f.pop(),Xt=Ut.pos-r0;Ut.isDashed?Je.push({type:"elem",elem:ka,shift:Xt}):Je.push({type:"elem",elem:Sa,shift:Xt})}c=y.makeVList({positionType:"individualShift",children:Je},t)}if(K0.length===0)return y.makeSpan(["mord"],[c],t);var Qe=y.makeVList({positionType:"individualShift",children:K0},t);return Qe=y.makeSpan(["tag"],[Qe],t),y.makeFragment([c,Qe])},en={c:"center ",l:"left ",r:"right "},B0=function(e,t){for(var a=[],n=new M.MathNode("mtd",[],["mtr-glue"]),s=new M.MathNode("mtd",[],["mml-eqn-num"]),l=0;l0){var A=e.cols,q="",_=!1,D=0,N=A.length;A[0].type==="separator"&&(x+="top ",D=1),A[A.length-1].type==="separator"&&(x+="bottom ",N-=1);for(var $=D;$0?"left ":"",x+=j[j.length-1].length>0?"right ":"";for(var U=1;U-1?"alignat":"align",s=e.envName==="split",l=U0(e.parser,{cols:a,addJot:!0,autoTag:s?void 0:Et(e.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:s?2:void 0,leqno:e.parser.settings.leqno},"display"),h,c=0,f={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&t[0].type==="ordgroup"){for(var v="",b=0;b0&&w&&(_=1),a[A]={type:"align",align:q,pregap:_,postgap:0}}return l.colSeparationType=w?"align":"alignat",l};T0({type:"array",names:["array","darray"],props:{numArgs:1},handler(r,e){var t=Xe(e[0]),a=t?[e[0]]:L(e[0],"ordgroup").body,n=a.map(function(l){var h=Ct(l),c=h.text;if("lcr".indexOf(c)!==-1)return{type:"align",align:c};if(c==="|")return{type:"separator",separator:"|"};if(c===":")return{type:"separator",separator:":"};throw new z("Unknown column alignment: "+c,l)}),s={cols:n,hskipBeforeAndAfter:!0,maxNumCols:n.length};return U0(r.parser,s,Rt(r.envName))},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(r){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[r.envName.replace("*","")],t="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:t}]};if(r.envName.charAt(r.envName.length-1)==="*"){var n=r.parser;if(n.consumeSpaces(),n.fetch().text==="["){if(n.consume(),n.consumeSpaces(),t=n.fetch().text,"lcr".indexOf(t)===-1)throw new z("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),a.cols=[{type:"align",align:t}]}}var s=U0(r.parser,a,Rt(r.envName)),l=Math.max(0,...s.body.map(h=>h.length));return s.cols=new Array(l).fill({type:"align",align:t}),e?{type:"leftright",mode:r.mode,body:[s],left:e[0],right:e[1],rightColor:void 0}:s},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(r){var e={arraystretch:.5},t=U0(r.parser,e,"script");return t.colSeparationType="small",t},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["subarray"],props:{numArgs:1},handler(r,e){var t=Xe(e[0]),a=t?[e[0]]:L(e[0],"ordgroup").body,n=a.map(function(l){var h=Ct(l),c=h.text;if("lc".indexOf(c)!==-1)return{type:"align",align:c};throw new z("Unknown column alignment: "+c,l)});if(n.length>1)throw new z("{subarray} can contain only one column");var s={cols:n,hskipBeforeAndAfter:!1,arraystretch:.5};if(s=U0(r.parser,s,"script"),s.body.length>0&&s.body[0].length>1)throw new z("{subarray} can contain only one column");return s},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(r){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},t=U0(r.parser,e,Rt(r.envName));return{type:"leftright",mode:r.mode,body:[t],left:r.envName.indexOf("r")>-1?".":"\\{",right:r.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:na,htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(r){O.contains(["gather","gather*"],r.envName)&&Ze(r);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Et(r.envName),emptySingleRow:!0,leqno:r.parser.settings.leqno};return U0(r.parser,e,"display")},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:na,htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(r){Ze(r);var e={autoTag:Et(r.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:r.parser.settings.leqno};return U0(r.parser,e,"display")},htmlBuilder:q0,mathmlBuilder:B0});T0({type:"array",names:["CD"],props:{numArgs:0},handler(r){return Ze(r),F1(r.parser)},htmlBuilder:q0,mathmlBuilder:B0});m("\\nonumber","\\gdef\\@eqnsw{0}");m("\\notag","\\nonumber");B({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(r,e){throw new z(r.funcName+" valid only within array environment")}});var ur=ra;B({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];if(n.type!=="ordgroup")throw new z("Invalid environment name",n);for(var s="",l=0;l{var t=r.font,a=e.withFont(t);return G(r.body,a)},sa=(r,e)=>{var t=r.font,a=e.withFont(t);return X(r.body,a)},hr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};B({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=He(e[0]),s=a;return s in hr&&(s=hr[s]),{type:"font",mode:t.mode,font:s.slice(1),body:n}},htmlBuilder:ia,mathmlBuilder:sa});B({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(r,e)=>{var{parser:t}=r,a=e[0],n=O.isCharacterBox(a);return{type:"mclass",mode:t.mode,mclass:We(a),body:[{type:"font",mode:t.mode,font:"boldsymbol",body:a}],isCharacterBox:n}}});B({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(r,e)=>{var{parser:t,funcName:a,breakOnTokenText:n}=r,{mode:s}=t,l=t.parseExpression(!0,n),h="math"+a.slice(1);return{type:"font",mode:s,font:h,body:{type:"ordgroup",mode:t.mode,body:l}}},htmlBuilder:ia,mathmlBuilder:sa});var oa=(r,e)=>{var t=e;return r==="display"?t=t.id>=E.SCRIPT.id?t.text():E.DISPLAY:r==="text"&&t.size===E.DISPLAY.size?t=E.TEXT:r==="script"?t=E.SCRIPT:r==="scriptscript"&&(t=E.SCRIPTSCRIPT),t},$t=(r,e)=>{var t=oa(r.size,e.style),a=t.fracNum(),n=t.fracDen(),s;s=e.havingStyle(a);var l=G(r.numer,s,e);if(r.continued){var h=8.5/e.fontMetrics().ptPerEm,c=3.5/e.fontMetrics().ptPerEm;l.height=l.height0?A=3*x:A=7*x,q=e.fontMetrics().denom1):(b>0?(w=e.fontMetrics().num2,A=x):(w=e.fontMetrics().num3,A=3*x),q=e.fontMetrics().denom2);var _;if(v){var N=e.fontMetrics().axisHeight;w-l.depth-(N+.5*b){var t=new M.MathNode("mfrac",[X(r.numer,e),X(r.denom,e)]);if(!r.hasBarLine)t.setAttribute("linethickness","0px");else if(r.barSize){var a=Q(r.barSize,e);t.setAttribute("linethickness",T(a))}var n=oa(r.size,e.style);if(n.size!==e.style.size){t=new M.MathNode("mstyle",[t]);var s=n.size===E.DISPLAY.size?"true":"false";t.setAttribute("displaystyle",s),t.setAttribute("scriptlevel","0")}if(r.leftDelim!=null||r.rightDelim!=null){var l=[];if(r.leftDelim!=null){var h=new M.MathNode("mo",[new M.TextNode(r.leftDelim.replace("\\",""))]);h.setAttribute("fence","true"),l.push(h)}if(l.push(t),r.rightDelim!=null){var c=new M.MathNode("mo",[new M.TextNode(r.rightDelim.replace("\\",""))]);c.setAttribute("fence","true"),l.push(c)}return Bt(l)}return t};B({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=e[1],l,h=null,c=null,f="auto";switch(a){case"\\dfrac":case"\\frac":case"\\tfrac":l=!0;break;case"\\\\atopfrac":l=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":l=!1,h="(",c=")";break;case"\\\\bracefrac":l=!1,h="\\{",c="\\}";break;case"\\\\brackfrac":l=!1,h="[",c="]";break;default:throw new Error("Unrecognized genfrac command")}switch(a){case"\\dfrac":case"\\dbinom":f="display";break;case"\\tfrac":case"\\tbinom":f="text";break}return{type:"genfrac",mode:t.mode,continued:!1,numer:n,denom:s,hasBarLine:l,leftDelim:h,rightDelim:c,size:f,barSize:null}},htmlBuilder:$t,mathmlBuilder:Lt});B({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=e[1];return{type:"genfrac",mode:t.mode,continued:!0,numer:n,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}});B({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(r){var{parser:e,funcName:t,token:a}=r,n;switch(t){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:a}}});var cr=["display","text","script","scriptscript"],mr=function(e){var t=null;return e.length>0&&(t=e,t=t==="."?null:t),t};B({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(r,e){var{parser:t}=r,a=e[4],n=e[5],s=He(e[0]),l=s.type==="atom"&&s.family==="open"?mr(s.text):null,h=He(e[1]),c=h.type==="atom"&&h.family==="close"?mr(h.text):null,f=L(e[2],"size"),v,b=null;f.isBlank?v=!0:(b=f.value,v=b.number>0);var x="auto",w=e[3];if(w.type==="ordgroup"){if(w.body.length>0){var A=L(w.body[0],"textord");x=cr[Number(A.text)]}}else w=L(w,"textord"),x=cr[Number(w.text)];return{type:"genfrac",mode:t.mode,numer:a,denom:n,continued:!1,hasBarLine:v,barSize:b,leftDelim:l,rightDelim:c,size:x}},htmlBuilder:$t,mathmlBuilder:Lt});B({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(r,e){var{parser:t,funcName:a,token:n}=r;return{type:"infix",mode:t.mode,replaceWith:"\\\\abovefrac",size:L(e[0],"size").value,token:n}}});B({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=_a(L(e[1],"infix").size),l=e[2],h=s.number>0;return{type:"genfrac",mode:t.mode,numer:n,denom:l,continued:!1,hasBarLine:h,barSize:s,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:$t,mathmlBuilder:Lt});var la=(r,e)=>{var t=e.style,a,n;r.type==="supsub"?(a=r.sup?G(r.sup,e.havingStyle(t.sup()),e):G(r.sub,e.havingStyle(t.sub()),e),n=L(r.base,"horizBrace")):n=L(r,"horizBrace");var s=G(n.base,e.havingBaseStyle(E.DISPLAY)),l=E0.svgSpan(n,e),h;if(n.isOver?(h=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:l}]},e),h.children[0].children[0].children[1].classes.push("svg-align")):(h=y.makeVList({positionType:"bottom",positionData:s.depth+.1+l.height,children:[{type:"elem",elem:l},{type:"kern",size:.1},{type:"elem",elem:s}]},e),h.children[0].children[0].children[0].classes.push("svg-align")),a){var c=y.makeSpan(["mord",n.isOver?"mover":"munder"],[h],e);n.isOver?h=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:c},{type:"kern",size:.2},{type:"elem",elem:a}]},e):h=y.makeVList({positionType:"bottom",positionData:c.depth+.2+a.height+a.depth,children:[{type:"elem",elem:a},{type:"kern",size:.2},{type:"elem",elem:c}]},e)}return y.makeSpan(["mord",n.isOver?"mover":"munder"],[h],e)},tn=(r,e)=>{var t=E0.mathMLnode(r.label);return new M.MathNode(r.isOver?"mover":"munder",[X(r.base,e),t])};B({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(r,e){var{parser:t,funcName:a}=r;return{type:"horizBrace",mode:t.mode,label:a,isOver:/^\\over/.test(a),base:e[0]}},htmlBuilder:la,mathmlBuilder:tn});B({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[1],n=L(e[0],"url").url;return t.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:t.mode,href:n,body:e0(a)}:t.formatUnsupportedCmd("\\href")},htmlBuilder:(r,e)=>{var t=a0(r.body,e,!1);return y.makeAnchor(r.href,[],t,e)},mathmlBuilder:(r,e)=>{var t=V0(r.body,e);return t instanceof s0||(t=new s0("mrow",[t])),t.setAttribute("href",r.href),t}});B({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=L(e[0],"url").url;if(!t.settings.isTrusted({command:"\\url",url:a}))return t.formatUnsupportedCmd("\\url");for(var n=[],s=0;s{var{parser:t,funcName:a,token:n}=r,s=L(e[0],"raw").string,l=e[1];t.settings.strict&&t.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var h,c={};switch(a){case"\\htmlClass":c.class=s,h={command:"\\htmlClass",class:s};break;case"\\htmlId":c.id=s,h={command:"\\htmlId",id:s};break;case"\\htmlStyle":c.style=s,h={command:"\\htmlStyle",style:s};break;case"\\htmlData":{for(var f=s.split(","),v=0;v{var t=a0(r.body,e,!1),a=["enclosing"];r.attributes.class&&a.push(...r.attributes.class.trim().split(/\s+/));var n=y.makeSpan(a,t,e);for(var s in r.attributes)s!=="class"&&r.attributes.hasOwnProperty(s)&&n.setAttribute(s,r.attributes[s]);return n},mathmlBuilder:(r,e)=>V0(r.body,e)});B({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r;return{type:"htmlmathml",mode:t.mode,html:e0(e[0]),mathml:e0(e[1])}},htmlBuilder:(r,e)=>{var t=a0(r.html,e,!1);return y.makeFragment(t)},mathmlBuilder:(r,e)=>V0(r.mathml,e)});var ht=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new z("Invalid size: '"+e+"' in \\includegraphics");var a={number:+(t[1]+t[2]),unit:t[3]};if(!Tr(a))throw new z("Invalid unit: '"+a.unit+"' in \\includegraphics.");return a};B({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(r,e,t)=>{var{parser:a}=r,n={number:0,unit:"em"},s={number:.9,unit:"em"},l={number:0,unit:"em"},h="";if(t[0])for(var c=L(t[0],"raw").string,f=c.split(","),v=0;v{var t=Q(r.height,e),a=0;r.totalheight.number>0&&(a=Q(r.totalheight,e)-t);var n=0;r.width.number>0&&(n=Q(r.width,e));var s={height:T(t+a)};n>0&&(s.width=T(n)),a>0&&(s.verticalAlign=T(-a));var l=new vt(r.src,r.alt,s);return l.height=t,l.depth=a,l},mathmlBuilder:(r,e)=>{var t=new M.MathNode("mglyph",[]);t.setAttribute("alt",r.alt);var a=Q(r.height,e),n=0;if(r.totalheight.number>0&&(n=Q(r.totalheight,e)-a,t.setAttribute("valign",T(-n))),t.setAttribute("height",T(a+n)),r.width.number>0){var s=Q(r.width,e);t.setAttribute("width",T(s))}return t.setAttribute("src",r.src),t}});B({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(r,e){var{parser:t,funcName:a}=r,n=L(e[0],"size");if(t.settings.strict){var s=a[1]==="m",l=n.value.unit==="mu";s?(l||t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, "+("not "+n.value.unit+" units")),t.mode!=="math"&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):l&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:t.mode,dimension:n.value}},htmlBuilder(r,e){return y.makeGlue(r.dimension,e)},mathmlBuilder(r,e){var t=Q(r.dimension,e);return new M.SpaceNode(t)}});B({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"lap",mode:t.mode,alignment:a.slice(5),body:n}},htmlBuilder:(r,e)=>{var t;r.alignment==="clap"?(t=y.makeSpan([],[G(r.body,e)]),t=y.makeSpan(["inner"],[t],e)):t=y.makeSpan(["inner"],[G(r.body,e)]);var a=y.makeSpan(["fix"],[]),n=y.makeSpan([r.alignment],[t,a],e),s=y.makeSpan(["strut"]);return s.style.height=T(n.height+n.depth),n.depth&&(s.style.verticalAlign=T(-n.depth)),n.children.unshift(s),n=y.makeSpan(["thinbox"],[n],e),y.makeSpan(["mord","vbox"],[n],e)},mathmlBuilder:(r,e)=>{var t=new M.MathNode("mpadded",[X(r.body,e)]);if(r.alignment!=="rlap"){var a=r.alignment==="llap"?"-1":"-0.5";t.setAttribute("lspace",a+"width")}return t.setAttribute("width","0px"),t}});B({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(r,e){var{funcName:t,parser:a}=r,n=a.mode;a.switchMode("math");var s=t==="\\("?"\\)":"$",l=a.parseExpression(!1,s);return a.expect(s),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:l}}});B({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(r,e){throw new z("Mismatched "+r.funcName)}});var dr=(r,e)=>{switch(e.style.size){case E.DISPLAY.size:return r.display;case E.TEXT.size:return r.text;case E.SCRIPT.size:return r.script;case E.SCRIPTSCRIPT.size:return r.scriptscript;default:return r.text}};B({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(r,e)=>{var{parser:t}=r;return{type:"mathchoice",mode:t.mode,display:e0(e[0]),text:e0(e[1]),script:e0(e[2]),scriptscript:e0(e[3])}},htmlBuilder:(r,e)=>{var t=dr(r,e),a=a0(t,e,!1);return y.makeFragment(a)},mathmlBuilder:(r,e)=>{var t=dr(r,e);return V0(t,e)}});var ua=(r,e,t,a,n,s,l)=>{r=y.makeSpan([],[r]);var h=t&&O.isCharacterBox(t),c,f;if(e){var v=G(e,a.havingStyle(n.sup()),a);f={elem:v,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-v.depth)}}if(t){var b=G(t,a.havingStyle(n.sub()),a);c={elem:b,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-b.height)}}var x;if(f&&c){var w=a.fontMetrics().bigOpSpacing5+c.elem.height+c.elem.depth+c.kern+r.depth+l;x=y.makeVList({positionType:"bottom",positionData:w,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:c.elem,marginLeft:T(-s)},{type:"kern",size:c.kern},{type:"elem",elem:r},{type:"kern",size:f.kern},{type:"elem",elem:f.elem,marginLeft:T(s)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(c){var A=r.height-l;x=y.makeVList({positionType:"top",positionData:A,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:c.elem,marginLeft:T(-s)},{type:"kern",size:c.kern},{type:"elem",elem:r}]},a)}else if(f){var q=r.depth+l;x=y.makeVList({positionType:"bottom",positionData:q,children:[{type:"elem",elem:r},{type:"kern",size:f.kern},{type:"elem",elem:f.elem,marginLeft:T(s)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else return r;var _=[x];if(c&&s!==0&&!h){var D=y.makeSpan(["mspace"],[],a);D.style.marginRight=T(s),_.unshift(D)}return y.makeSpan(["mop","op-limits"],_,a)},ha=["\\smallint"],se=(r,e)=>{var t,a,n=!1,s;r.type==="supsub"?(t=r.sup,a=r.sub,s=L(r.base,"op"),n=!0):s=L(r,"op");var l=e.style,h=!1;l.size===E.DISPLAY.size&&s.symbol&&!O.contains(ha,s.name)&&(h=!0);var c;if(s.symbol){var f=h?"Size2-Regular":"Size1-Regular",v="";if((s.name==="\\oiint"||s.name==="\\oiiint")&&(v=s.name.slice(1),s.name=v==="oiint"?"\\iint":"\\iiint"),c=y.makeSymbol(s.name,f,"math",e,["mop","op-symbol",h?"large-op":"small-op"]),v.length>0){var b=c.italic,x=y.staticSvg(v+"Size"+(h?"2":"1"),e);c=y.makeVList({positionType:"individualShift",children:[{type:"elem",elem:c,shift:0},{type:"elem",elem:x,shift:h?.08:0}]},e),s.name="\\"+v,c.classes.unshift("mop"),c.italic=b}}else if(s.body){var w=a0(s.body,e,!0);w.length===1&&w[0]instanceof c0?(c=w[0],c.classes[0]="mop"):c=y.makeSpan(["mop"],w,e)}else{for(var A=[],q=1;q{var t;if(r.symbol)t=new s0("mo",[y0(r.name,r.mode)]),O.contains(ha,r.name)&&t.setAttribute("largeop","false");else if(r.body)t=new s0("mo",m0(r.body,e));else{t=new s0("mi",[new g0(r.name.slice(1))]);var a=new s0("mo",[y0("\u2061","text")]);r.parentIsSupSub?t=new s0("mrow",[t,a]):t=$r([t,a])}return t},rn={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};B({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=a;return n.length===1&&(n=rn[n]),{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:se,mathmlBuilder:be});B({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:e0(a)}},htmlBuilder:se,mathmlBuilder:be});var an={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};B({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(r){var{parser:e,funcName:t}=r;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:t}},htmlBuilder:se,mathmlBuilder:be});B({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(r){var{parser:e,funcName:t}=r;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:t}},htmlBuilder:se,mathmlBuilder:be});B({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(r){var{parser:e,funcName:t}=r,a=t;return a.length===1&&(a=an[a]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:se,mathmlBuilder:be});var ca=(r,e)=>{var t,a,n=!1,s;r.type==="supsub"?(t=r.sup,a=r.sub,s=L(r.base,"operatorname"),n=!0):s=L(r,"operatorname");var l;if(s.body.length>0){for(var h=s.body.map(b=>{var x=b.text;return typeof x=="string"?{type:"textord",mode:b.mode,text:x}:b}),c=a0(h,e.withFont("mathrm"),!0),f=0;f{for(var t=m0(r.body,e.withFont("mathrm")),a=!0,n=0;nv.toText()).join("");t=[new M.TextNode(h)]}var c=new M.MathNode("mi",t);c.setAttribute("mathvariant","normal");var f=new M.MathNode("mo",[y0("\u2061","text")]);return r.parentIsSupSub?new M.MathNode("mrow",[c,f]):M.newDocumentFragment([c,f])};B({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"operatorname",mode:t.mode,body:e0(n),alwaysHandleSupSub:a==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:ca,mathmlBuilder:nn});m("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");j0({type:"ordgroup",htmlBuilder(r,e){return r.semisimple?y.makeFragment(a0(r.body,e,!1)):y.makeSpan(["mord"],a0(r.body,e,!0),e)},mathmlBuilder(r,e){return V0(r.body,e,!0)}});B({type:"overline",names:["\\overline"],props:{numArgs:1},handler(r,e){var{parser:t}=r,a=e[0];return{type:"overline",mode:t.mode,body:a}},htmlBuilder(r,e){var t=G(r.body,e.havingCrampedStyle()),a=y.makeLineSpan("overline-line",e),n=e.fontMetrics().defaultRuleThickness,s=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]},e);return y.makeSpan(["mord","overline"],[s],e)},mathmlBuilder(r,e){var t=new M.MathNode("mo",[new M.TextNode("\u203E")]);t.setAttribute("stretchy","true");var a=new M.MathNode("mover",[X(r.body,e),t]);return a.setAttribute("accent","true"),a}});B({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"phantom",mode:t.mode,body:e0(a)}},htmlBuilder:(r,e)=>{var t=a0(r.body,e.withPhantom(),!1);return y.makeFragment(t)},mathmlBuilder:(r,e)=>{var t=m0(r.body,e);return new M.MathNode("mphantom",t)}});B({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"hphantom",mode:t.mode,body:a}},htmlBuilder:(r,e)=>{var t=y.makeSpan([],[G(r.body,e.withPhantom())]);if(t.height=0,t.depth=0,t.children)for(var a=0;a{var t=m0(e0(r.body),e),a=new M.MathNode("mphantom",t),n=new M.MathNode("mpadded",[a]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n}});B({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"vphantom",mode:t.mode,body:a}},htmlBuilder:(r,e)=>{var t=y.makeSpan(["inner"],[G(r.body,e.withPhantom())]),a=y.makeSpan(["fix"],[]);return y.makeSpan(["mord","rlap"],[t,a],e)},mathmlBuilder:(r,e)=>{var t=m0(e0(r.body),e),a=new M.MathNode("mphantom",t),n=new M.MathNode("mpadded",[a]);return n.setAttribute("width","0px"),n}});B({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(r,e){var{parser:t}=r,a=L(e[0],"size").value,n=e[1];return{type:"raisebox",mode:t.mode,dy:a,body:n}},htmlBuilder(r,e){var t=G(r.body,e),a=Q(r.dy,e);return y.makeVList({positionType:"shift",positionData:-a,children:[{type:"elem",elem:t}]},e)},mathmlBuilder(r,e){var t=new M.MathNode("mpadded",[X(r.body,e)]),a=r.dy.number+r.dy.unit;return t.setAttribute("voffset",a),t}});B({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(r){var{parser:e}=r;return{type:"internal",mode:e.mode}}});B({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(r,e,t){var{parser:a}=r,n=t[0],s=L(e[0],"size"),l=L(e[1],"size");return{type:"rule",mode:a.mode,shift:n&&L(n,"size").value,width:s.value,height:l.value}},htmlBuilder(r,e){var t=y.makeSpan(["mord","rule"],[],e),a=Q(r.width,e),n=Q(r.height,e),s=r.shift?Q(r.shift,e):0;return t.style.borderRightWidth=T(a),t.style.borderTopWidth=T(n),t.style.bottom=T(s),t.width=a,t.height=n+s,t.depth=-s,t.maxFontSize=n*1.125*e.sizeMultiplier,t},mathmlBuilder(r,e){var t=Q(r.width,e),a=Q(r.height,e),n=r.shift?Q(r.shift,e):0,s=e.color&&e.getColor()||"black",l=new M.MathNode("mspace");l.setAttribute("mathbackground",s),l.setAttribute("width",T(t)),l.setAttribute("height",T(a));var h=new M.MathNode("mpadded",[l]);return n>=0?h.setAttribute("height",T(n)):(h.setAttribute("height",T(n)),h.setAttribute("depth",T(-n))),h.setAttribute("voffset",T(n)),h}});function ma(r,e,t){for(var a=a0(r,e,!1),n=e.sizeMultiplier/t.sizeMultiplier,s=0;s{var t=e.havingSize(r.size);return ma(r.body,t,e)};B({type:"sizing",names:pr,props:{numArgs:0,allowedInText:!0},handler:(r,e)=>{var{breakOnTokenText:t,funcName:a,parser:n}=r,s=n.parseExpression(!1,t);return{type:"sizing",mode:n.mode,size:pr.indexOf(a)+1,body:s}},htmlBuilder:sn,mathmlBuilder:(r,e)=>{var t=e.havingSize(r.size),a=m0(r.body,t),n=new M.MathNode("mstyle",a);return n.setAttribute("mathsize",T(t.sizeMultiplier)),n}});B({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(r,e,t)=>{var{parser:a}=r,n=!1,s=!1,l=t[0]&&L(t[0],"ordgroup");if(l)for(var h="",c=0;c{var t=y.makeSpan([],[G(r.body,e)]);if(!r.smashHeight&&!r.smashDepth)return t;if(r.smashHeight&&(t.height=0,t.children))for(var a=0;a{var t=new M.MathNode("mpadded",[X(r.body,e)]);return r.smashHeight&&t.setAttribute("height","0px"),r.smashDepth&&t.setAttribute("depth","0px"),t}});B({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(r,e,t){var{parser:a}=r,n=t[0],s=e[0];return{type:"sqrt",mode:a.mode,body:s,index:n}},htmlBuilder(r,e){var t=G(r.body,e.havingCrampedStyle());t.height===0&&(t.height=e.fontMetrics().xHeight),t=y.wrapFragment(t,e);var a=e.fontMetrics(),n=a.defaultRuleThickness,s=n;e.style.idt.height+t.depth+l&&(l=(l+b-t.height-t.depth)/2);var x=c.height-t.height-l-f;t.style.paddingLeft=T(v);var w=y.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t,wrapperClasses:["svg-align"]},{type:"kern",size:-(t.height+x)},{type:"elem",elem:c},{type:"kern",size:f}]},e);if(r.index){var A=e.havingStyle(E.SCRIPTSCRIPT),q=G(r.index,A,e),_=.6*(w.height-w.depth),D=y.makeVList({positionType:"shift",positionData:-_,children:[{type:"elem",elem:q}]},e),N=y.makeSpan(["root"],[D]);return y.makeSpan(["mord","sqrt"],[N,w],e)}else return y.makeSpan(["mord","sqrt"],[w],e)},mathmlBuilder(r,e){var{body:t,index:a}=r;return a?new M.MathNode("mroot",[X(t,e),X(a,e)]):new M.MathNode("msqrt",[X(t,e)])}});var fr={display:E.DISPLAY,text:E.TEXT,script:E.SCRIPT,scriptscript:E.SCRIPTSCRIPT};B({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r,e){var{breakOnTokenText:t,funcName:a,parser:n}=r,s=n.parseExpression(!0,t),l=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:l,body:s}},htmlBuilder(r,e){var t=fr[r.style],a=e.havingStyle(t).withFont("");return ma(r.body,a,e)},mathmlBuilder(r,e){var t=fr[r.style],a=e.havingStyle(t),n=m0(r.body,a),s=new M.MathNode("mstyle",n),l={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},h=l[r.style];return s.setAttribute("scriptlevel",h[0]),s.setAttribute("displaystyle",h[1]),s}});var on=function(e,t){var a=e.base;if(a)if(a.type==="op"){var n=a.limits&&(t.style.size===E.DISPLAY.size||a.alwaysHandleSupSub);return n?se:null}else if(a.type==="operatorname"){var s=a.alwaysHandleSupSub&&(t.style.size===E.DISPLAY.size||a.limits);return s?ca:null}else{if(a.type==="accent")return O.isCharacterBox(a.base)?_t:null;if(a.type==="horizBrace"){var l=!e.sub;return l===a.isOver?la:null}else return null}else return null};j0({type:"supsub",htmlBuilder(r,e){var t=on(r,e);if(t)return t(r,e);var{base:a,sup:n,sub:s}=r,l=G(a,e),h,c,f=e.fontMetrics(),v=0,b=0,x=a&&O.isCharacterBox(a);if(n){var w=e.havingStyle(e.style.sup());h=G(n,w,e),x||(v=l.height-w.fontMetrics().supDrop*w.sizeMultiplier/e.sizeMultiplier)}if(s){var A=e.havingStyle(e.style.sub());c=G(s,A,e),x||(b=l.depth+A.fontMetrics().subDrop*A.sizeMultiplier/e.sizeMultiplier)}var q;e.style===E.DISPLAY?q=f.sup1:e.style.cramped?q=f.sup3:q=f.sup2;var _=e.sizeMultiplier,D=T(.5/f.ptPerEm/_),N=null;if(c){var $=r.base&&r.base.type==="op"&&r.base.name&&(r.base.name==="\\oiint"||r.base.name==="\\oiiint");(l instanceof c0||$)&&(N=T(-l.italic))}var H;if(h&&c){v=Math.max(v,q,h.depth+.25*f.xHeight),b=Math.max(b,f.sub2);var F=f.defaultRuleThickness,P=4*F;if(v-h.depth-(c.height-b)0&&(v+=V,b-=V)}var j=[{type:"elem",elem:c,shift:b,marginRight:D,marginLeft:N},{type:"elem",elem:h,shift:-v,marginRight:D}];H=y.makeVList({positionType:"individualShift",children:j},e)}else if(c){b=Math.max(b,f.sub1,c.height-.8*f.xHeight);var U=[{type:"elem",elem:c,marginLeft:N,marginRight:D}];H=y.makeVList({positionType:"shift",positionData:b,children:U},e)}else if(h)v=Math.max(v,q,h.depth+.25*f.xHeight),H=y.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:h,marginRight:D}]},e);else throw new Error("supsub must have either sup or sub.");var D0=bt(l,"right")||"mord";return y.makeSpan([D0],[l,y.makeSpan(["msupsub"],[H])],e)},mathmlBuilder(r,e){var t=!1,a,n;r.base&&r.base.type==="horizBrace"&&(n=!!r.sup,n===r.base.isOver&&(t=!0,a=r.base.isOver)),r.base&&(r.base.type==="op"||r.base.type==="operatorname")&&(r.base.parentIsSupSub=!0);var s=[X(r.base,e)];r.sub&&s.push(X(r.sub,e)),r.sup&&s.push(X(r.sup,e));var l;if(t)l=a?"mover":"munder";else if(r.sub)if(r.sup){var f=r.base;f&&f.type==="op"&&f.limits&&e.style===E.DISPLAY||f&&f.type==="operatorname"&&f.alwaysHandleSupSub&&(e.style===E.DISPLAY||f.limits)?l="munderover":l="msubsup"}else{var c=r.base;c&&c.type==="op"&&c.limits&&(e.style===E.DISPLAY||c.alwaysHandleSupSub)||c&&c.type==="operatorname"&&c.alwaysHandleSupSub&&(c.limits||e.style===E.DISPLAY)?l="munder":l="msub"}else{var h=r.base;h&&h.type==="op"&&h.limits&&(e.style===E.DISPLAY||h.alwaysHandleSupSub)||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(h.limits||e.style===E.DISPLAY)?l="mover":l="msup"}return new M.MathNode(l,s)}});j0({type:"atom",htmlBuilder(r,e){return y.mathsym(r.text,r.mode,e,["m"+r.family])},mathmlBuilder(r,e){var t=new M.MathNode("mo",[y0(r.text,r.mode)]);if(r.family==="bin"){var a=Dt(r,e);a==="bold-italic"&&t.setAttribute("mathvariant",a)}else r.family==="punct"?t.setAttribute("separator","true"):(r.family==="open"||r.family==="close")&&t.setAttribute("stretchy","false");return t}});var da={mi:"italic",mn:"normal",mtext:"normal"};j0({type:"mathord",htmlBuilder(r,e){return y.makeOrd(r,e,"mathord")},mathmlBuilder(r,e){var t=new M.MathNode("mi",[y0(r.text,r.mode,e)]),a=Dt(r,e)||"italic";return a!==da[t.type]&&t.setAttribute("mathvariant",a),t}});j0({type:"textord",htmlBuilder(r,e){return y.makeOrd(r,e,"textord")},mathmlBuilder(r,e){var t=y0(r.text,r.mode,e),a=Dt(r,e)||"normal",n;return r.mode==="text"?n=new M.MathNode("mtext",[t]):/[0-9]/.test(r.text)?n=new M.MathNode("mn",[t]):r.text==="\\prime"?n=new M.MathNode("mo",[t]):n=new M.MathNode("mi",[t]),a!==da[n.type]&&n.setAttribute("mathvariant",a),n}});var ct={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},mt={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};j0({type:"spacing",htmlBuilder(r,e){if(mt.hasOwnProperty(r.text)){var t=mt[r.text].className||"";if(r.mode==="text"){var a=y.makeOrd(r,e,"textord");return a.classes.push(t),a}else return y.makeSpan(["mspace",t],[y.mathsym(r.text,r.mode,e)],e)}else{if(ct.hasOwnProperty(r.text))return y.makeSpan(["mspace",ct[r.text]],[],e);throw new z('Unknown type of space "'+r.text+'"')}},mathmlBuilder(r,e){var t;if(mt.hasOwnProperty(r.text))t=new M.MathNode("mtext",[new M.TextNode("\xA0")]);else{if(ct.hasOwnProperty(r.text))return new M.MathNode("mspace");throw new z('Unknown type of space "'+r.text+'"')}return t}});var vr=()=>{var r=new M.MathNode("mtd",[]);return r.setAttribute("width","50%"),r};j0({type:"tag",mathmlBuilder(r,e){var t=new M.MathNode("mtable",[new M.MathNode("mtr",[vr(),new M.MathNode("mtd",[V0(r.body,e)]),vr(),new M.MathNode("mtd",[V0(r.tag,e)])])]);return t.setAttribute("width","100%"),t}});var gr={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},br={"\\textbf":"textbf","\\textmd":"textmd"},ln={"\\textit":"textit","\\textup":"textup"},yr=(r,e)=>{var t=r.font;if(t){if(gr[t])return e.withTextFontFamily(gr[t]);if(br[t])return e.withTextFontWeight(br[t]);if(t==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(ln[t])};B({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"text",mode:t.mode,body:e0(n),font:a}},htmlBuilder(r,e){var t=yr(r,e),a=a0(r.body,t,!0);return y.makeSpan(["mord","text"],a,t)},mathmlBuilder(r,e){var t=yr(r,e);return V0(r.body,t)}});B({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(r,e){var{parser:t}=r;return{type:"underline",mode:t.mode,body:e[0]}},htmlBuilder(r,e){var t=G(r.body,e),a=y.makeLineSpan("underline-line",e),n=e.fontMetrics().defaultRuleThickness,s=y.makeVList({positionType:"top",positionData:t.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:t}]},e);return y.makeSpan(["mord","underline"],[s],e)},mathmlBuilder(r,e){var t=new M.MathNode("mo",[new M.TextNode("\u203E")]);t.setAttribute("stretchy","true");var a=new M.MathNode("munder",[X(r.body,e),t]);return a.setAttribute("accentunder","true"),a}});B({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(r,e){var{parser:t}=r;return{type:"vcenter",mode:t.mode,body:e[0]}},htmlBuilder(r,e){var t=G(r.body,e),a=e.fontMetrics().axisHeight,n=.5*(t.height-a-(t.depth+a));return y.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:t}]},e)},mathmlBuilder(r,e){return new M.MathNode("mpadded",[X(r.body,e)],["vcenter"])}});B({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(r,e,t){throw new z("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(r,e){for(var t=xr(r),a=[],n=e.havingStyle(e.style.text()),s=0;sr.body.replace(/ /g,r.star?"\u2423":"\xA0"),P0=Er,pa=`[ \r ]`,un="\\\\[a-zA-Z@]+",hn="\\\\[^\uD800-\uDFFF]",cn="("+un+")"+pa+"*",mn=`\\\\( |[ \r ]+ ?)[ \r ]*`,kt="[\u0300-\u036F]",dn=new RegExp(kt+"+$"),pn="("+pa+"+)|"+(mn+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(kt+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(kt+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+cn)+("|"+hn+")"),Pe=class{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(pn,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){var e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new b0("EOF",new d0(this,t,t));var a=this.tokenRegex.exec(e);if(a===null||a.index!==t)throw new z("Unexpected character: '"+e[t]+"'",new b0(e[t],new d0(this,t,t+1)));var n=a[6]||a[3]||(a[2]?"\\ ":" ");if(this.catcodes[n]===14){var s=e.indexOf(` -`,this.tokenRegex.lastIndex);return s===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}return new b0(n,new d0(this,t,this.tokenRegex.lastIndex))}},Mt=class{constructor(e,t){e===void 0&&(e={}),t===void 0&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new z("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(e[t]==null?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,a){if(a===void 0&&(a=!1),a){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var s=this.undefStack[this.undefStack.length-1];s&&!s.hasOwnProperty(e)&&(s[e]=this.current[e])}t==null?delete this.current[e]:this.current[e]=t}},fn=aa;m("\\noexpand",function(r){var e=r.popToken();return r.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});m("\\expandafter",function(r){var e=r.popToken();return r.expandOnce(!0),{tokens:[e],numArgs:0}});m("\\@firstoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[0],numArgs:0}});m("\\@secondoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[1],numArgs:0}});m("\\@ifnextchar",function(r){var e=r.consumeArgs(3);r.consumeSpaces();var t=r.future();return e[0].length===1&&e[0][0].text===t.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});m("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");m("\\TextOrMath",function(r){var e=r.consumeArgs(2);return r.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var wr={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};m("\\char",function(r){var e=r.popToken(),t,a="";if(e.text==="'")t=8,e=r.popToken();else if(e.text==='"')t=16,e=r.popToken();else if(e.text==="`")if(e=r.popToken(),e.text[0]==="\\")a=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new z("\\char` missing argument");a=e.text.charCodeAt(0)}else t=10;if(t){if(a=wr[e.text],a==null||a>=t)throw new z("Invalid base-"+t+" digit "+e.text);for(var n;(n=wr[r.future().text])!=null&&n{var n=r.consumeArg().tokens;if(n.length!==1)throw new z("\\newcommand's first argument must be a macro name");var s=n[0].text,l=r.isDefined(s);if(l&&!e)throw new z("\\newcommand{"+s+"} attempting to redefine "+(s+"; use \\renewcommand"));if(!l&&!t)throw new z("\\renewcommand{"+s+"} when command "+s+" does not yet exist; use \\newcommand");var h=0;if(n=r.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var c="",f=r.expandNextToken();f.text!=="]"&&f.text!=="EOF";)c+=f.text,f=r.expandNextToken();if(!c.match(/^\s*[0-9]+\s*$/))throw new z("Invalid number of arguments: "+c);h=parseInt(c),n=r.consumeArg().tokens}return l&&a||r.macros.set(s,{tokens:n,numArgs:h}),""};m("\\newcommand",r=>Ft(r,!1,!0,!1));m("\\renewcommand",r=>Ft(r,!0,!1,!1));m("\\providecommand",r=>Ft(r,!0,!0,!0));m("\\message",r=>{var e=r.consumeArgs(1)[0];return console.log(e.reverse().map(t=>t.text).join("")),""});m("\\errmessage",r=>{var e=r.consumeArgs(1)[0];return console.error(e.reverse().map(t=>t.text).join("")),""});m("\\show",r=>{var e=r.popToken(),t=e.text;return console.log(e,r.macros.get(t),P0[t],Y.math[t],Y.text[t]),""});m("\\bgroup","{");m("\\egroup","}");m("~","\\nobreakspace");m("\\lq","`");m("\\rq","'");m("\\aa","\\r a");m("\\AA","\\r A");m("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");m("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");m("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");m("\u212C","\\mathscr{B}");m("\u2130","\\mathscr{E}");m("\u2131","\\mathscr{F}");m("\u210B","\\mathscr{H}");m("\u2110","\\mathscr{I}");m("\u2112","\\mathscr{L}");m("\u2133","\\mathscr{M}");m("\u211B","\\mathscr{R}");m("\u212D","\\mathfrak{C}");m("\u210C","\\mathfrak{H}");m("\u2128","\\mathfrak{Z}");m("\\Bbbk","\\Bbb{k}");m("\xB7","\\cdotp");m("\\llap","\\mathllap{\\textrm{#1}}");m("\\rlap","\\mathrlap{\\textrm{#1}}");m("\\clap","\\mathclap{\\textrm{#1}}");m("\\mathstrut","\\vphantom{(}");m("\\underbar","\\underline{\\text{#1}}");m("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');m("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");m("\\ne","\\neq");m("\u2260","\\neq");m("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");m("\u2209","\\notin");m("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");m("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");m("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");m("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");m("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");m("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");m("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");m("\u27C2","\\perp");m("\u203C","\\mathclose{!\\mkern-0.8mu!}");m("\u220C","\\notni");m("\u231C","\\ulcorner");m("\u231D","\\urcorner");m("\u231E","\\llcorner");m("\u231F","\\lrcorner");m("\xA9","\\copyright");m("\xAE","\\textregistered");m("\uFE0F","\\textregistered");m("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');m("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');m("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');m("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');m("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");m("\u22EE","\\vdots");m("\\varGamma","\\mathit{\\Gamma}");m("\\varDelta","\\mathit{\\Delta}");m("\\varTheta","\\mathit{\\Theta}");m("\\varLambda","\\mathit{\\Lambda}");m("\\varXi","\\mathit{\\Xi}");m("\\varPi","\\mathit{\\Pi}");m("\\varSigma","\\mathit{\\Sigma}");m("\\varUpsilon","\\mathit{\\Upsilon}");m("\\varPhi","\\mathit{\\Phi}");m("\\varPsi","\\mathit{\\Psi}");m("\\varOmega","\\mathit{\\Omega}");m("\\substack","\\begin{subarray}{c}#1\\end{subarray}");m("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");m("\\boxed","\\fbox{$\\displaystyle{#1}$}");m("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");m("\\implies","\\DOTSB\\;\\Longrightarrow\\;");m("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");m("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");m("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var Sr={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};m("\\dots",function(r){var e="\\dotso",t=r.expandAfterFuture().text;return t in Sr?e=Sr[t]:(t.slice(0,4)==="\\not"||t in Y.math&&O.contains(["bin","rel"],Y.math[t].group))&&(e="\\dotsb"),e});var Ht={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};m("\\dotso",function(r){var e=r.future().text;return e in Ht?"\\ldots\\,":"\\ldots"});m("\\dotsc",function(r){var e=r.future().text;return e in Ht&&e!==","?"\\ldots\\,":"\\ldots"});m("\\cdots",function(r){var e=r.future().text;return e in Ht?"\\@cdots\\,":"\\@cdots"});m("\\dotsb","\\cdots");m("\\dotsm","\\cdots");m("\\dotsi","\\!\\cdots");m("\\dotsx","\\ldots\\,");m("\\DOTSI","\\relax");m("\\DOTSB","\\relax");m("\\DOTSX","\\relax");m("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");m("\\,","\\tmspace+{3mu}{.1667em}");m("\\thinspace","\\,");m("\\>","\\mskip{4mu}");m("\\:","\\tmspace+{4mu}{.2222em}");m("\\medspace","\\:");m("\\;","\\tmspace+{5mu}{.2777em}");m("\\thickspace","\\;");m("\\!","\\tmspace-{3mu}{.1667em}");m("\\negthinspace","\\!");m("\\negmedspace","\\tmspace-{4mu}{.2222em}");m("\\negthickspace","\\tmspace-{5mu}{.277em}");m("\\enspace","\\kern.5em ");m("\\enskip","\\hskip.5em\\relax");m("\\quad","\\hskip1em\\relax");m("\\qquad","\\hskip2em\\relax");m("\\tag","\\@ifstar\\tag@literal\\tag@paren");m("\\tag@paren","\\tag@literal{({#1})}");m("\\tag@literal",r=>{if(r.macros.get("\\df@tag"))throw new z("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});m("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");m("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");m("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");m("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");m("\\newline","\\\\\\relax");m("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var fa=T(z0["Main-Regular"][84][1]-.7*z0["Main-Regular"][65][1]);m("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+fa+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");m("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+fa+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");m("\\hspace","\\@ifstar\\@hspacer\\@hspace");m("\\@hspace","\\hskip #1\\relax");m("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");m("\\ordinarycolon",":");m("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");m("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');m("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');m("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');m("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');m("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');m("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');m("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');m("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');m("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');m("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');m("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');m("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');m("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');m("\u2237","\\dblcolon");m("\u2239","\\eqcolon");m("\u2254","\\coloneqq");m("\u2255","\\eqqcolon");m("\u2A74","\\Coloneqq");m("\\ratio","\\vcentcolon");m("\\coloncolon","\\dblcolon");m("\\colonequals","\\coloneqq");m("\\coloncolonequals","\\Coloneqq");m("\\equalscolon","\\eqqcolon");m("\\equalscoloncolon","\\Eqqcolon");m("\\colonminus","\\coloneq");m("\\coloncolonminus","\\Coloneq");m("\\minuscolon","\\eqcolon");m("\\minuscoloncolon","\\Eqcolon");m("\\coloncolonapprox","\\Colonapprox");m("\\coloncolonsim","\\Colonsim");m("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");m("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");m("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");m("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");m("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");m("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");m("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");m("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");m("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");m("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");m("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");m("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");m("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");m("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");m("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");m("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");m("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");m("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");m("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");m("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");m("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");m("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");m("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");m("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");m("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");m("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");m("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");m("\\imath","\\html@mathml{\\@imath}{\u0131}");m("\\jmath","\\html@mathml{\\@jmath}{\u0237}");m("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");m("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");m("\u27E6","\\llbracket");m("\u27E7","\\rrbracket");m("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");m("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");m("\u2983","\\lBrace");m("\u2984","\\rBrace");m("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");m("\u29B5","\\minuso");m("\\darr","\\downarrow");m("\\dArr","\\Downarrow");m("\\Darr","\\Downarrow");m("\\lang","\\langle");m("\\rang","\\rangle");m("\\uarr","\\uparrow");m("\\uArr","\\Uparrow");m("\\Uarr","\\Uparrow");m("\\N","\\mathbb{N}");m("\\R","\\mathbb{R}");m("\\Z","\\mathbb{Z}");m("\\alef","\\aleph");m("\\alefsym","\\aleph");m("\\Alpha","\\mathrm{A}");m("\\Beta","\\mathrm{B}");m("\\bull","\\bullet");m("\\Chi","\\mathrm{X}");m("\\clubs","\\clubsuit");m("\\cnums","\\mathbb{C}");m("\\Complex","\\mathbb{C}");m("\\Dagger","\\ddagger");m("\\diamonds","\\diamondsuit");m("\\empty","\\emptyset");m("\\Epsilon","\\mathrm{E}");m("\\Eta","\\mathrm{H}");m("\\exist","\\exists");m("\\harr","\\leftrightarrow");m("\\hArr","\\Leftrightarrow");m("\\Harr","\\Leftrightarrow");m("\\hearts","\\heartsuit");m("\\image","\\Im");m("\\infin","\\infty");m("\\Iota","\\mathrm{I}");m("\\isin","\\in");m("\\Kappa","\\mathrm{K}");m("\\larr","\\leftarrow");m("\\lArr","\\Leftarrow");m("\\Larr","\\Leftarrow");m("\\lrarr","\\leftrightarrow");m("\\lrArr","\\Leftrightarrow");m("\\Lrarr","\\Leftrightarrow");m("\\Mu","\\mathrm{M}");m("\\natnums","\\mathbb{N}");m("\\Nu","\\mathrm{N}");m("\\Omicron","\\mathrm{O}");m("\\plusmn","\\pm");m("\\rarr","\\rightarrow");m("\\rArr","\\Rightarrow");m("\\Rarr","\\Rightarrow");m("\\real","\\Re");m("\\reals","\\mathbb{R}");m("\\Reals","\\mathbb{R}");m("\\Rho","\\mathrm{P}");m("\\sdot","\\cdot");m("\\sect","\\S");m("\\spades","\\spadesuit");m("\\sub","\\subset");m("\\sube","\\subseteq");m("\\supe","\\supseteq");m("\\Tau","\\mathrm{T}");m("\\thetasym","\\vartheta");m("\\weierp","\\wp");m("\\Zeta","\\mathrm{Z}");m("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");m("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");m("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");m("\\bra","\\mathinner{\\langle{#1}|}");m("\\ket","\\mathinner{|{#1}\\rangle}");m("\\braket","\\mathinner{\\langle{#1}\\rangle}");m("\\Bra","\\left\\langle#1\\right|");m("\\Ket","\\left|#1\\right\\rangle");var va=r=>e=>{var t=e.consumeArg().tokens,a=e.consumeArg().tokens,n=e.consumeArg().tokens,s=e.consumeArg().tokens,l=e.macros.get("|"),h=e.macros.get("\\|");e.macros.beginGroup();var c=b=>x=>{r&&(x.macros.set("|",l),n.length&&x.macros.set("\\|",h));var w=b;if(!b&&n.length){var A=x.future();A.text==="|"&&(x.popToken(),w=!0)}return{tokens:w?n:a,numArgs:0}};e.macros.set("|",c(!1)),n.length&&e.macros.set("\\|",c(!0));var f=e.consumeArg().tokens,v=e.expandTokens([...s,...f,...t]);return e.macros.endGroup(),{tokens:v.reverse(),numArgs:0}};m("\\bra@ket",va(!1));m("\\bra@set",va(!0));m("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");m("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");m("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");m("\\angln","{\\angl n}");m("\\blue","\\textcolor{##6495ed}{#1}");m("\\orange","\\textcolor{##ffa500}{#1}");m("\\pink","\\textcolor{##ff00af}{#1}");m("\\red","\\textcolor{##df0030}{#1}");m("\\green","\\textcolor{##28ae7b}{#1}");m("\\gray","\\textcolor{gray}{#1}");m("\\purple","\\textcolor{##9d38bd}{#1}");m("\\blueA","\\textcolor{##ccfaff}{#1}");m("\\blueB","\\textcolor{##80f6ff}{#1}");m("\\blueC","\\textcolor{##63d9ea}{#1}");m("\\blueD","\\textcolor{##11accd}{#1}");m("\\blueE","\\textcolor{##0c7f99}{#1}");m("\\tealA","\\textcolor{##94fff5}{#1}");m("\\tealB","\\textcolor{##26edd5}{#1}");m("\\tealC","\\textcolor{##01d1c1}{#1}");m("\\tealD","\\textcolor{##01a995}{#1}");m("\\tealE","\\textcolor{##208170}{#1}");m("\\greenA","\\textcolor{##b6ffb0}{#1}");m("\\greenB","\\textcolor{##8af281}{#1}");m("\\greenC","\\textcolor{##74cf70}{#1}");m("\\greenD","\\textcolor{##1fab54}{#1}");m("\\greenE","\\textcolor{##0d923f}{#1}");m("\\goldA","\\textcolor{##ffd0a9}{#1}");m("\\goldB","\\textcolor{##ffbb71}{#1}");m("\\goldC","\\textcolor{##ff9c39}{#1}");m("\\goldD","\\textcolor{##e07d10}{#1}");m("\\goldE","\\textcolor{##a75a05}{#1}");m("\\redA","\\textcolor{##fca9a9}{#1}");m("\\redB","\\textcolor{##ff8482}{#1}");m("\\redC","\\textcolor{##f9685d}{#1}");m("\\redD","\\textcolor{##e84d39}{#1}");m("\\redE","\\textcolor{##bc2612}{#1}");m("\\maroonA","\\textcolor{##ffbde0}{#1}");m("\\maroonB","\\textcolor{##ff92c6}{#1}");m("\\maroonC","\\textcolor{##ed5fa6}{#1}");m("\\maroonD","\\textcolor{##ca337c}{#1}");m("\\maroonE","\\textcolor{##9e034e}{#1}");m("\\purpleA","\\textcolor{##ddd7ff}{#1}");m("\\purpleB","\\textcolor{##c6b9fc}{#1}");m("\\purpleC","\\textcolor{##aa87ff}{#1}");m("\\purpleD","\\textcolor{##7854ab}{#1}");m("\\purpleE","\\textcolor{##543b78}{#1}");m("\\mintA","\\textcolor{##f5f9e8}{#1}");m("\\mintB","\\textcolor{##edf2df}{#1}");m("\\mintC","\\textcolor{##e0e5cc}{#1}");m("\\grayA","\\textcolor{##f6f7f7}{#1}");m("\\grayB","\\textcolor{##f0f1f2}{#1}");m("\\grayC","\\textcolor{##e3e5e6}{#1}");m("\\grayD","\\textcolor{##d6d8da}{#1}");m("\\grayE","\\textcolor{##babec2}{#1}");m("\\grayF","\\textcolor{##888d93}{#1}");m("\\grayG","\\textcolor{##626569}{#1}");m("\\grayH","\\textcolor{##3b3e40}{#1}");m("\\grayI","\\textcolor{##21242c}{#1}");m("\\kaBlue","\\textcolor{##314453}{#1}");m("\\kaGreen","\\textcolor{##71B307}{#1}");var ga={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},zt=class{constructor(e,t,a){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Mt(fn,t.macros),this.mode=a,this.stack=[]}feed(e){this.lexer=new Pe(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,a,n;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;t=this.popToken(),{tokens:n,end:a}=this.consumeArg(["]"])}else({tokens:n,start:t,end:a}=this.consumeArg());return this.pushToken(new b0("EOF",a.loc)),this.pushTokens(n),t.range(a,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var t=[],a=e&&e.length>0;a||this.consumeSpaces();var n=this.future(),s,l=0,h=0;do{if(s=this.popToken(),t.push(s),s.text==="{")++l;else if(s.text==="}"){if(--l,l===-1)throw new z("Extra }",s)}else if(s.text==="EOF")throw new z("Unexpected end of input in a macro argument, expected '"+(e&&a?e[h]:"}")+"'",s);if(e&&a)if((l===0||l===1&&e[h]==="{")&&s.text===e[h]){if(++h,h===e.length){t.splice(-h,h);break}}else h=0}while(l!==0||a);return n.text==="{"&&t[t.length-1].text==="}"&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:n,end:s}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new z("The length of delimiters doesn't match the number of args!");for(var a=t[0],n=0;nthis.settings.maxExpand)throw new z("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var t=this.popToken(),a=t.text,n=t.noexpand?null:this._getExpansion(a);if(n==null||e&&n.unexpandable){if(e&&n==null&&a[0]==="\\"&&!this.isDefined(a))throw new z("Undefined control sequence: "+a);return this.pushToken(t),!1}this.countExpansion(1);var s=n.tokens,l=this.consumeArgs(n.numArgs,n.delimiters);if(n.numArgs){s=s.slice();for(var h=s.length-1;h>=0;--h){var c=s[h];if(c.text==="#"){if(h===0)throw new z("Incomplete placeholder at end of macro body",c);if(c=s[--h],c.text==="#")s.splice(h+1,1);else if(/^[1-9]$/.test(c.text))s.splice(h,2,...l[+c.text-1]);else throw new z("Not a valid argument number",c)}}}return this.pushTokens(s),s.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new b0(e)]):void 0}expandTokens(e){var t=[],a=this.stack.length;for(this.pushTokens(e);this.stack.length>a;)if(this.expandOnce(!0)===!1){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(n)}return this.countExpansion(t.length),t}expandMacroAsText(e){var t=this.expandMacro(e);return t&&t.map(a=>a.text).join("")}_getExpansion(e){var t=this.macros.get(e);if(t==null)return t;if(e.length===1){var a=this.lexer.catcodes[e];if(a!=null&&a!==13)return}var n=typeof t=="function"?t(this):t;if(typeof n=="string"){var s=0;if(n.indexOf("#")!==-1)for(var l=n.replace(/##/g,"");l.indexOf("#"+(s+1))!==-1;)++s;for(var h=new Pe(n,this.settings),c=[],f=h.lex();f.text!=="EOF";)c.push(f),f=h.lex();c.reverse();var v={tokens:c,numArgs:s};return v}return n}isDefined(e){return this.macros.has(e)||P0.hasOwnProperty(e)||Y.math.hasOwnProperty(e)||Y.text.hasOwnProperty(e)||ga.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return t!=null?typeof t=="string"||typeof t=="function"||!t.unexpandable:P0.hasOwnProperty(e)&&!P0[e].primitive}},kr=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Ne=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),dt={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},Mr={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},Ge=class r{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new zt(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(t===void 0&&(t=!0),this.fetch().text!==e)throw new z("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new b0("}")),this.gullet.pushTokens(e);var a=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,a}parseExpression(e,t){for(var a=[];;){this.mode==="math"&&this.consumeSpaces();var n=this.fetch();if(r.endOfExpression.indexOf(n.text)!==-1||t&&n.text===t||e&&P0[n.text]&&P0[n.text].infix)break;var s=this.parseAtom(t);if(s){if(s.type==="internal")continue}else break;a.push(s)}return this.mode==="text"&&this.formLigatures(a),this.handleInfixNodes(a)}handleInfixNodes(e){for(var t=-1,a,n=0;n=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var h=Y[this.mode][t].group,c=d0.range(e),f;if(i1.hasOwnProperty(h)){var v=h;f={type:"atom",mode:this.mode,family:v,loc:c,text:t}}else f={type:h,mode:this.mode,loc:c,text:t};l=f}else if(t.charCodeAt(0)>=128)this.settings.strict&&(Ar(t.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'"'+(" ("+t.charCodeAt(0)+")"),e)),l={type:"textord",mode:"text",loc:d0.range(e),text:t};else return null;if(this.consume(),s)for(var b=0;b=0;n--)r[n].loc.start>a&&(t+=" ",a=r[n].loc.start),t+=r[n].text,a+=r[n].text.length;var s=W.go(S.go(t,e));return s},S={go:function(r,e){if(!r)return[];e===void 0&&(e="ce");var t="0",a={};a.parenthesisLevel=0,r=r.replace(/\n/g," "),r=r.replace(/[\u2212\u2013\u2014\u2010]/g,"-"),r=r.replace(/[\u2026]/g,"...");for(var n,s=10,l=[];;){n!==r?(s=10,n=r):s--;var h=S.stateMachines[e],c=h.transitions[t]||h.transitions["*"];e:for(var f=0;f0){if(b.revisit||(r=v.remainder),!b.toContinue)break e}else return l}}if(s<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(r,e){if(e)if(Array.isArray(e))for(var t=0;t":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(r){return S.patterns.findObserveGroups(r,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(r){return S.patterns.findObserveGroups(r,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(r){return S.patterns.findObserveGroups(r,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(r){return S.patterns.findObserveGroups(r,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(r){return S.patterns.findObserveGroups(r,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(r){return S.patterns.findObserveGroups(r,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(r){var e;if(e=r.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/),e)return{match_:e[0],remainder:r.substr(e[0].length)};var t=S.patterns.findObserveGroups(r,"","$","$","");return t&&(e=t.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/),e)?{match_:e[0],remainder:r.substr(e[0].length)}:null},amount2:function(r){return this.amount(r)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(r){if(r.match(/^\([a-z]+\)$/))return null;var e=r.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:r.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(r,e,t,a,n,s,l,h,c,f){var v=function(D,N){if(typeof N=="string")return D.indexOf(N)!==0?null:N;var $=D.match(N);return $?$[0]:null},b=function(D,N,$){for(var H=0;N0,null},x=v(r,e);if(x===null||(r=r.substr(x.length),x=v(r,t),x===null))return null;var w=b(r,x.length,a||n);if(w===null)return null;var A=r.substring(0,a?w.endMatchEnd:w.endMatchBegin);if(s||l){var q=this.findObserveGroups(r.substr(w.endMatchEnd),s,l,h,c);if(q===null)return null;var _=[A,q.match_];return{match_:f?_.join(""):_,remainder:q.remainder}}else return{match_:A,remainder:r.substr(w.endMatchEnd)}},match_:function(r,e){var t=S.patterns.patterns[r];if(t===void 0)throw["MhchemBugP","mhchem bug P. Please report. ("+r+")"];if(typeof t=="function")return S.patterns.patterns[r](e);var a=e.match(t);if(a){var n;return a[2]?n=[a[1],a[2]]:a[1]?n=a[1]:n=a[0],{match_:n,remainder:e.substr(a[0].length)}}return null}},actions:{"a=":function(r,e){r.a=(r.a||"")+e},"b=":function(r,e){r.b=(r.b||"")+e},"p=":function(r,e){r.p=(r.p||"")+e},"o=":function(r,e){r.o=(r.o||"")+e},"q=":function(r,e){r.q=(r.q||"")+e},"d=":function(r,e){r.d=(r.d||"")+e},"rm=":function(r,e){r.rm=(r.rm||"")+e},"text=":function(r,e){r.text_=(r.text_||"")+e},insert:function(r,e,t){return{type_:t}},"insert+p1":function(r,e,t){return{type_:t,p1:e}},"insert+p1+p2":function(r,e,t){return{type_:t,p1:e[0],p2:e[1]}},copy:function(r,e){return e},rm:function(r,e){return{type_:"rm",p1:e||""}},text:function(r,e){return S.go(e,"text")},"{text}":function(r,e){var t=["{"];return S.concatArray(t,S.go(e,"text")),t.push("}"),t},"tex-math":function(r,e){return S.go(e,"tex-math")},"tex-math tight":function(r,e){return S.go(e,"tex-math tight")},bond:function(r,e,t){return{type_:"bond",kind_:t||e}},"color0-output":function(r,e){return{type_:"color0",color:e[0]}},ce:function(r,e){return S.go(e)},"1/2":function(r,e){var t=[];e.match(/^[+\-]/)&&(t.push(e.substr(0,1)),e=e.substr(1));var a=e.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);return a[1]=a[1].replace(/\$/g,""),t.push({type_:"frac",p1:a[1],p2:a[2]}),a[3]&&(a[3]=a[3].replace(/\$/g,""),t.push({type_:"tex-math",p1:a[3]})),t},"9,9":function(r,e){return S.go(e,"9,9")}},createTransitions:function(r){var e,t,a,n,s={};for(e in r)for(t in r[e])for(a=t.split("|"),r[e][t].stateArray=a,n=0;n":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(r,e){var t;if((r.d||"").match(/^[0-9]+$/)){var a=r.d;r.d=void 0,t=this.output(r),r.b=a}else t=this.output(r);return S.actions["o="](r,e),t},"d= kv":function(r,e){r.d=e,r.dType="kv"},"charge or bond":function(r,e){if(r.beginsWithBond){var t=[];return S.concatArray(t,this.output(r)),S.concatArray(t,S.actions.bond(r,e,"-")),t}else r.d=e},"- after o/d":function(r,e,t){var a=S.patterns.match_("orbital",r.o||""),n=S.patterns.match_("one lowercase greek letter $",r.o||""),s=S.patterns.match_("one lowercase latin letter $",r.o||""),l=S.patterns.match_("$one lowercase latin letter$ $",r.o||""),h=e==="-"&&(a&&a.remainder===""||n||s||l);h&&!r.a&&!r.b&&!r.p&&!r.d&&!r.q&&!a&&s&&(r.o="$"+r.o+"$");var c=[];return h?(S.concatArray(c,this.output(r)),c.push({type_:"hyphen"})):(a=S.patterns.match_("digits",r.d||""),t&&a&&a.remainder===""?(S.concatArray(c,S.actions["d="](r,e)),S.concatArray(c,this.output(r))):(S.concatArray(c,this.output(r)),S.concatArray(c,S.actions.bond(r,e,"-")))),c},"a to o":function(r){r.o=r.a,r.a=void 0},"sb=true":function(r){r.sb=!0},"sb=false":function(r){r.sb=!1},"beginsWithBond=true":function(r){r.beginsWithBond=!0},"beginsWithBond=false":function(r){r.beginsWithBond=!1},"parenthesisLevel++":function(r){r.parenthesisLevel++},"parenthesisLevel--":function(r){r.parenthesisLevel--},"state of aggregation":function(r,e){return{type_:"state of aggregation",p1:S.go(e,"o")}},comma:function(r,e){var t=e.replace(/\s*$/,""),a=t!==e;return a&&r.parenthesisLevel===0?{type_:"comma enumeration L",p1:t}:{type_:"comma enumeration M",p1:t}},output:function(r,e,t){var a;if(!r.r)a=[],!r.a&&!r.b&&!r.p&&!r.o&&!r.q&&!r.d&&!t||(r.sb&&a.push({type_:"entitySkip"}),!r.o&&!r.q&&!r.d&&!r.b&&!r.p&&t!==2?(r.o=r.a,r.a=void 0):!r.o&&!r.q&&!r.d&&(r.b||r.p)?(r.o=r.a,r.d=r.b,r.q=r.p,r.a=r.b=r.p=void 0):r.o&&r.dType==="kv"&&S.patterns.match_("d-oxidation$",r.d||"")?r.dType="oxidation":r.o&&r.dType==="kv"&&!r.q&&(r.dType=void 0),a.push({type_:"chemfive",a:S.go(r.a,"a"),b:S.go(r.b,"bd"),p:S.go(r.p,"pq"),o:S.go(r.o,"o"),q:S.go(r.q,"pq"),d:S.go(r.d,r.dType==="oxidation"?"oxidation":"bd"),dType:r.dType}));else{var n;r.rdt==="M"?n=S.go(r.rd,"tex-math"):r.rdt==="T"?n=[{type_:"text",p1:r.rd||""}]:n=S.go(r.rd);var s;r.rqt==="M"?s=S.go(r.rq,"tex-math"):r.rqt==="T"?s=[{type_:"text",p1:r.rq||""}]:s=S.go(r.rq),a={type_:"arrow",r:r.r,rd:n,rq:s}}for(var l in r)l!=="parenthesisLevel"&&l!=="beginsWithBond"&&delete r[l];return a},"oxidation-output":function(r,e){var t=["{"];return S.concatArray(t,S.go(e,"oxidation")),t.push("}"),t},"frac-output":function(r,e){return{type_:"frac-ce",p1:S.go(e[0]),p2:S.go(e[1])}},"overset-output":function(r,e){return{type_:"overset",p1:S.go(e[0]),p2:S.go(e[1])}},"underset-output":function(r,e){return{type_:"underset",p1:S.go(e[0]),p2:S.go(e[1])}},"underbrace-output":function(r,e){return{type_:"underbrace",p1:S.go(e[0]),p2:S.go(e[1])}},"color-output":function(r,e){return{type_:"color",color1:e[0],color2:S.go(e[1])}},"r=":function(r,e){r.r=e},"rdt=":function(r,e){r.rdt=e},"rd=":function(r,e){r.rd=e},"rqt=":function(r,e){r.rqt=e},"rq=":function(r,e){r.rq=e},operator:function(r,e,t){return{type_:"operator",kind_:t||e}}}},a:{transitions:S.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:S.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:S.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(r){if(r.text_){var e={type_:"text",p1:r.text_};for(var t in r)delete r[t];return e}}}},pq:{transitions:S.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(r,e){return{type_:"state of aggregation subscript",p1:S.go(e,"o")}},"color-output":function(r,e){return{type_:"color",color1:e[0],color2:S.go(e[1],"pq")}}}},bd:{transitions:S.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(r,e){return{type_:"color",color1:e[0],color2:S.go(e[1],"bd")}}}},oxidation:{transitions:S.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(r,e){return{type_:"roman numeral",p1:e||""}}}},"tex-math":{transitions:S.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(r){if(r.o){var e={type_:"tex-math",p1:r.o};for(var t in r)delete r[t];return e}}}},"tex-math tight":{transitions:S.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(r,e){r.o=(r.o||"")+"{"+e+"}"},output:function(r){if(r.o){var e={type_:"tex-math",p1:r.o};for(var t in r)delete r[t];return e}}}},"9,9":{transitions:S.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:S.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(r,e){var t=[];return e[0]==="+-"||e[0]==="+/-"?t.push("\\pm "):e[0]&&t.push(e[0]),e[1]&&(S.concatArray(t,S.go(e[1],"pu-9,9")),e[2]&&(e[2].match(/[,.]/)?S.concatArray(t,S.go(e[2],"pu-9,9")):t.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),e[3]==="e"||e[3].substr(0,1)==="*"?t.push({type_:"cdot"}):t.push({type_:"times"}))),e[3]&&t.push("10^{"+e[5]+"}"),t},"number^":function(r,e){var t=[];return e[0]==="+-"||e[0]==="+/-"?t.push("\\pm "):e[0]&&t.push(e[0]),S.concatArray(t,S.go(e[1],"pu-9,9")),t.push("^{"+e[2]+"}"),t},operator:function(r,e,t){return{type_:"operator",kind_:t||e}},space:function(){return{type_:"pu-space-1"}},output:function(r){var e,t=S.patterns.match_("{(...)}",r.d||"");t&&t.remainder===""&&(r.d=t.match_);var a=S.patterns.match_("{(...)}",r.q||"");if(a&&a.remainder===""&&(r.q=a.match_),r.d&&(r.d=r.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),r.d=r.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),r.q){r.q=r.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),r.q=r.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");var n={d:S.go(r.d,"pu"),q:S.go(r.q,"pu")};r.o==="//"?e={type_:"pu-frac",p1:n.d,p2:n.q}:(e=n.d,n.d.length>1||n.q.length>1?e.push({type_:" / "}):e.push({type_:"/"}),S.concatArray(e,n.q))}else e=S.go(r.d,"pu-2");for(var s in r)delete r[s];return e}}},"pu-2":{transitions:S.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(r,e){r.rm+="^{"+e+"}"},space:function(){return{type_:"pu-space-2"}},output:function(r){var e=[];if(r.rm){var t=S.patterns.match_("{(...)}",r.rm||"");t&&t.remainder===""?e=S.go(t.match_,"pu"):e={type_:"rm",p1:r.rm}}for(var a in r)delete r[a];return e}}},"pu-9,9":{transitions:S.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(r){var e=[];if(r.text_=r.text_||"",r.text_.length>4){var t=r.text_.length%3;t===0&&(t=3);for(var a=r.text_.length-3;a>0;a-=3)e.push(r.text_.substr(a,3)),e.push({type_:"1000 separator"});e.push(r.text_.substr(0,t)),e.reverse()}else e.push(r.text_);for(var n in r)delete r[n];return e},"output-o":function(r){var e=[];if(r.text_=r.text_||"",r.text_.length>4){for(var t=r.text_.length-3,a=0;a":return"rightarrow";case"\u2192":return"rightarrow";case"\u27F6":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<-->":return"rightleftarrows";case"<=>":return"rightleftharpoons";case"\u21CC":return"rightleftharpoons";case"<=>>":return"rightequilibrium";case"<<=>":return"leftequilibrium";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(r){switch(r){case"-":return"{-}";case"1":return"{-}";case"=":return"{=}";case"2":return"{=}";case"#":return"{\\equiv}";case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";case"~=":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"~--":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"-~-":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(r){switch(r){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":return" {}\\approx{} ";case"$\\approx$":return" {}\\approx{} ";case"v":return" \\downarrow{} ";case"(v)":return" \\downarrow{} ";case"^":return" \\uparrow{} ";case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}};var wn=function(r){let e=r.data,t=e.expression,a=e.options,n=r.header,s=oe.renderToString(t,a);et({header:n,data:{output:s}})};Wt(wn);})(); +`,this.tokenRegex.lastIndex);return s===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}return new b0(n,new d0(this,t,this.tokenRegex.lastIndex))}},Mt=class{constructor(e,t){e===void 0&&(e={}),t===void 0&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new z("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(e[t]==null?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,a){if(a===void 0&&(a=!1),a){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var s=this.undefStack[this.undefStack.length-1];s&&!s.hasOwnProperty(e)&&(s[e]=this.current[e])}t==null?delete this.current[e]:this.current[e]=t}},fn=aa;m("\\noexpand",function(r){var e=r.popToken();return r.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});m("\\expandafter",function(r){var e=r.popToken();return r.expandOnce(!0),{tokens:[e],numArgs:0}});m("\\@firstoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[0],numArgs:0}});m("\\@secondoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[1],numArgs:0}});m("\\@ifnextchar",function(r){var e=r.consumeArgs(3);r.consumeSpaces();var t=r.future();return e[0].length===1&&e[0][0].text===t.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});m("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");m("\\TextOrMath",function(r){var e=r.consumeArgs(2);return r.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var wr={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};m("\\char",function(r){var e=r.popToken(),t,a="";if(e.text==="'")t=8,e=r.popToken();else if(e.text==='"')t=16,e=r.popToken();else if(e.text==="`")if(e=r.popToken(),e.text[0]==="\\")a=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new z("\\char` missing argument");a=e.text.charCodeAt(0)}else t=10;if(t){if(a=wr[e.text],a==null||a>=t)throw new z("Invalid base-"+t+" digit "+e.text);for(var n;(n=wr[r.future().text])!=null&&n{var n=r.consumeArg().tokens;if(n.length!==1)throw new z("\\newcommand's first argument must be a macro name");var s=n[0].text,l=r.isDefined(s);if(l&&!e)throw new z("\\newcommand{"+s+"} attempting to redefine "+(s+"; use \\renewcommand"));if(!l&&!t)throw new z("\\renewcommand{"+s+"} when command "+s+" does not yet exist; use \\newcommand");var h=0;if(n=r.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var c="",f=r.expandNextToken();f.text!=="]"&&f.text!=="EOF";)c+=f.text,f=r.expandNextToken();if(!c.match(/^\s*[0-9]+\s*$/))throw new z("Invalid number of arguments: "+c);h=parseInt(c),n=r.consumeArg().tokens}return l&&a||r.macros.set(s,{tokens:n,numArgs:h}),""};m("\\newcommand",r=>Ft(r,!1,!0,!1));m("\\renewcommand",r=>Ft(r,!0,!1,!1));m("\\providecommand",r=>Ft(r,!0,!0,!0));m("\\message",r=>{var e=r.consumeArgs(1)[0];return console.log(e.reverse().map(t=>t.text).join("")),""});m("\\errmessage",r=>{var e=r.consumeArgs(1)[0];return console.error(e.reverse().map(t=>t.text).join("")),""});m("\\show",r=>{var e=r.popToken(),t=e.text;return console.log(e,r.macros.get(t),P0[t],Y.math[t],Y.text[t]),""});m("\\bgroup","{");m("\\egroup","}");m("~","\\nobreakspace");m("\\lq","`");m("\\rq","'");m("\\aa","\\r a");m("\\AA","\\r A");m("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");m("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");m("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");m("\u212C","\\mathscr{B}");m("\u2130","\\mathscr{E}");m("\u2131","\\mathscr{F}");m("\u210B","\\mathscr{H}");m("\u2110","\\mathscr{I}");m("\u2112","\\mathscr{L}");m("\u2133","\\mathscr{M}");m("\u211B","\\mathscr{R}");m("\u212D","\\mathfrak{C}");m("\u210C","\\mathfrak{H}");m("\u2128","\\mathfrak{Z}");m("\\Bbbk","\\Bbb{k}");m("\xB7","\\cdotp");m("\\llap","\\mathllap{\\textrm{#1}}");m("\\rlap","\\mathrlap{\\textrm{#1}}");m("\\clap","\\mathclap{\\textrm{#1}}");m("\\mathstrut","\\vphantom{(}");m("\\underbar","\\underline{\\text{#1}}");m("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');m("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");m("\\ne","\\neq");m("\u2260","\\neq");m("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");m("\u2209","\\notin");m("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");m("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");m("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");m("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");m("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");m("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");m("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");m("\u27C2","\\perp");m("\u203C","\\mathclose{!\\mkern-0.8mu!}");m("\u220C","\\notni");m("\u231C","\\ulcorner");m("\u231D","\\urcorner");m("\u231E","\\llcorner");m("\u231F","\\lrcorner");m("\xA9","\\copyright");m("\xAE","\\textregistered");m("\uFE0F","\\textregistered");m("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');m("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');m("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');m("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');m("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");m("\u22EE","\\vdots");m("\\varGamma","\\mathit{\\Gamma}");m("\\varDelta","\\mathit{\\Delta}");m("\\varTheta","\\mathit{\\Theta}");m("\\varLambda","\\mathit{\\Lambda}");m("\\varXi","\\mathit{\\Xi}");m("\\varPi","\\mathit{\\Pi}");m("\\varSigma","\\mathit{\\Sigma}");m("\\varUpsilon","\\mathit{\\Upsilon}");m("\\varPhi","\\mathit{\\Phi}");m("\\varPsi","\\mathit{\\Psi}");m("\\varOmega","\\mathit{\\Omega}");m("\\substack","\\begin{subarray}{c}#1\\end{subarray}");m("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");m("\\boxed","\\fbox{$\\displaystyle{#1}$}");m("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");m("\\implies","\\DOTSB\\;\\Longrightarrow\\;");m("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");m("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");m("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var Sr={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};m("\\dots",function(r){var e="\\dotso",t=r.expandAfterFuture().text;return t in Sr?e=Sr[t]:(t.slice(0,4)==="\\not"||t in Y.math&&O.contains(["bin","rel"],Y.math[t].group))&&(e="\\dotsb"),e});var Ht={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};m("\\dotso",function(r){var e=r.future().text;return e in Ht?"\\ldots\\,":"\\ldots"});m("\\dotsc",function(r){var e=r.future().text;return e in Ht&&e!==","?"\\ldots\\,":"\\ldots"});m("\\cdots",function(r){var e=r.future().text;return e in Ht?"\\@cdots\\,":"\\@cdots"});m("\\dotsb","\\cdots");m("\\dotsm","\\cdots");m("\\dotsi","\\!\\cdots");m("\\dotsx","\\ldots\\,");m("\\DOTSI","\\relax");m("\\DOTSB","\\relax");m("\\DOTSX","\\relax");m("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");m("\\,","\\tmspace+{3mu}{.1667em}");m("\\thinspace","\\,");m("\\>","\\mskip{4mu}");m("\\:","\\tmspace+{4mu}{.2222em}");m("\\medspace","\\:");m("\\;","\\tmspace+{5mu}{.2777em}");m("\\thickspace","\\;");m("\\!","\\tmspace-{3mu}{.1667em}");m("\\negthinspace","\\!");m("\\negmedspace","\\tmspace-{4mu}{.2222em}");m("\\negthickspace","\\tmspace-{5mu}{.277em}");m("\\enspace","\\kern.5em ");m("\\enskip","\\hskip.5em\\relax");m("\\quad","\\hskip1em\\relax");m("\\qquad","\\hskip2em\\relax");m("\\tag","\\@ifstar\\tag@literal\\tag@paren");m("\\tag@paren","\\tag@literal{({#1})}");m("\\tag@literal",r=>{if(r.macros.get("\\df@tag"))throw new z("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});m("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");m("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");m("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");m("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");m("\\newline","\\\\\\relax");m("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var fa=T(z0["Main-Regular"][84][1]-.7*z0["Main-Regular"][65][1]);m("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+fa+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");m("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+fa+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");m("\\hspace","\\@ifstar\\@hspacer\\@hspace");m("\\@hspace","\\hskip #1\\relax");m("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");m("\\ordinarycolon",":");m("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");m("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');m("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');m("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');m("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');m("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');m("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');m("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');m("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');m("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');m("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');m("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');m("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');m("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');m("\u2237","\\dblcolon");m("\u2239","\\eqcolon");m("\u2254","\\coloneqq");m("\u2255","\\eqqcolon");m("\u2A74","\\Coloneqq");m("\\ratio","\\vcentcolon");m("\\coloncolon","\\dblcolon");m("\\colonequals","\\coloneqq");m("\\coloncolonequals","\\Coloneqq");m("\\equalscolon","\\eqqcolon");m("\\equalscoloncolon","\\Eqqcolon");m("\\colonminus","\\coloneq");m("\\coloncolonminus","\\Coloneq");m("\\minuscolon","\\eqcolon");m("\\minuscoloncolon","\\Eqcolon");m("\\coloncolonapprox","\\Colonapprox");m("\\coloncolonsim","\\Colonsim");m("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");m("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");m("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");m("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");m("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");m("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");m("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");m("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");m("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");m("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");m("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");m("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");m("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");m("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");m("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");m("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");m("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");m("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");m("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");m("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");m("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");m("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");m("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");m("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");m("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");m("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");m("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");m("\\imath","\\html@mathml{\\@imath}{\u0131}");m("\\jmath","\\html@mathml{\\@jmath}{\u0237}");m("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");m("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");m("\u27E6","\\llbracket");m("\u27E7","\\rrbracket");m("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");m("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");m("\u2983","\\lBrace");m("\u2984","\\rBrace");m("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");m("\u29B5","\\minuso");m("\\darr","\\downarrow");m("\\dArr","\\Downarrow");m("\\Darr","\\Downarrow");m("\\lang","\\langle");m("\\rang","\\rangle");m("\\uarr","\\uparrow");m("\\uArr","\\Uparrow");m("\\Uarr","\\Uparrow");m("\\N","\\mathbb{N}");m("\\R","\\mathbb{R}");m("\\Z","\\mathbb{Z}");m("\\alef","\\aleph");m("\\alefsym","\\aleph");m("\\Alpha","\\mathrm{A}");m("\\Beta","\\mathrm{B}");m("\\bull","\\bullet");m("\\Chi","\\mathrm{X}");m("\\clubs","\\clubsuit");m("\\cnums","\\mathbb{C}");m("\\Complex","\\mathbb{C}");m("\\Dagger","\\ddagger");m("\\diamonds","\\diamondsuit");m("\\empty","\\emptyset");m("\\Epsilon","\\mathrm{E}");m("\\Eta","\\mathrm{H}");m("\\exist","\\exists");m("\\harr","\\leftrightarrow");m("\\hArr","\\Leftrightarrow");m("\\Harr","\\Leftrightarrow");m("\\hearts","\\heartsuit");m("\\image","\\Im");m("\\infin","\\infty");m("\\Iota","\\mathrm{I}");m("\\isin","\\in");m("\\Kappa","\\mathrm{K}");m("\\larr","\\leftarrow");m("\\lArr","\\Leftarrow");m("\\Larr","\\Leftarrow");m("\\lrarr","\\leftrightarrow");m("\\lrArr","\\Leftrightarrow");m("\\Lrarr","\\Leftrightarrow");m("\\Mu","\\mathrm{M}");m("\\natnums","\\mathbb{N}");m("\\Nu","\\mathrm{N}");m("\\Omicron","\\mathrm{O}");m("\\plusmn","\\pm");m("\\rarr","\\rightarrow");m("\\rArr","\\Rightarrow");m("\\Rarr","\\Rightarrow");m("\\real","\\Re");m("\\reals","\\mathbb{R}");m("\\Reals","\\mathbb{R}");m("\\Rho","\\mathrm{P}");m("\\sdot","\\cdot");m("\\sect","\\S");m("\\spades","\\spadesuit");m("\\sub","\\subset");m("\\sube","\\subseteq");m("\\supe","\\supseteq");m("\\Tau","\\mathrm{T}");m("\\thetasym","\\vartheta");m("\\weierp","\\wp");m("\\Zeta","\\mathrm{Z}");m("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");m("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");m("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");m("\\bra","\\mathinner{\\langle{#1}|}");m("\\ket","\\mathinner{|{#1}\\rangle}");m("\\braket","\\mathinner{\\langle{#1}\\rangle}");m("\\Bra","\\left\\langle#1\\right|");m("\\Ket","\\left|#1\\right\\rangle");var va=r=>e=>{var t=e.consumeArg().tokens,a=e.consumeArg().tokens,n=e.consumeArg().tokens,s=e.consumeArg().tokens,l=e.macros.get("|"),h=e.macros.get("\\|");e.macros.beginGroup();var c=b=>x=>{r&&(x.macros.set("|",l),n.length&&x.macros.set("\\|",h));var w=b;if(!b&&n.length){var A=x.future();A.text==="|"&&(x.popToken(),w=!0)}return{tokens:w?n:a,numArgs:0}};e.macros.set("|",c(!1)),n.length&&e.macros.set("\\|",c(!0));var f=e.consumeArg().tokens,v=e.expandTokens([...s,...f,...t]);return e.macros.endGroup(),{tokens:v.reverse(),numArgs:0}};m("\\bra@ket",va(!1));m("\\bra@set",va(!0));m("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");m("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");m("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");m("\\angln","{\\angl n}");m("\\blue","\\textcolor{##6495ed}{#1}");m("\\orange","\\textcolor{##ffa500}{#1}");m("\\pink","\\textcolor{##ff00af}{#1}");m("\\red","\\textcolor{##df0030}{#1}");m("\\green","\\textcolor{##28ae7b}{#1}");m("\\gray","\\textcolor{gray}{#1}");m("\\purple","\\textcolor{##9d38bd}{#1}");m("\\blueA","\\textcolor{##ccfaff}{#1}");m("\\blueB","\\textcolor{##80f6ff}{#1}");m("\\blueC","\\textcolor{##63d9ea}{#1}");m("\\blueD","\\textcolor{##11accd}{#1}");m("\\blueE","\\textcolor{##0c7f99}{#1}");m("\\tealA","\\textcolor{##94fff5}{#1}");m("\\tealB","\\textcolor{##26edd5}{#1}");m("\\tealC","\\textcolor{##01d1c1}{#1}");m("\\tealD","\\textcolor{##01a995}{#1}");m("\\tealE","\\textcolor{##208170}{#1}");m("\\greenA","\\textcolor{##b6ffb0}{#1}");m("\\greenB","\\textcolor{##8af281}{#1}");m("\\greenC","\\textcolor{##74cf70}{#1}");m("\\greenD","\\textcolor{##1fab54}{#1}");m("\\greenE","\\textcolor{##0d923f}{#1}");m("\\goldA","\\textcolor{##ffd0a9}{#1}");m("\\goldB","\\textcolor{##ffbb71}{#1}");m("\\goldC","\\textcolor{##ff9c39}{#1}");m("\\goldD","\\textcolor{##e07d10}{#1}");m("\\goldE","\\textcolor{##a75a05}{#1}");m("\\redA","\\textcolor{##fca9a9}{#1}");m("\\redB","\\textcolor{##ff8482}{#1}");m("\\redC","\\textcolor{##f9685d}{#1}");m("\\redD","\\textcolor{##e84d39}{#1}");m("\\redE","\\textcolor{##bc2612}{#1}");m("\\maroonA","\\textcolor{##ffbde0}{#1}");m("\\maroonB","\\textcolor{##ff92c6}{#1}");m("\\maroonC","\\textcolor{##ed5fa6}{#1}");m("\\maroonD","\\textcolor{##ca337c}{#1}");m("\\maroonE","\\textcolor{##9e034e}{#1}");m("\\purpleA","\\textcolor{##ddd7ff}{#1}");m("\\purpleB","\\textcolor{##c6b9fc}{#1}");m("\\purpleC","\\textcolor{##aa87ff}{#1}");m("\\purpleD","\\textcolor{##7854ab}{#1}");m("\\purpleE","\\textcolor{##543b78}{#1}");m("\\mintA","\\textcolor{##f5f9e8}{#1}");m("\\mintB","\\textcolor{##edf2df}{#1}");m("\\mintC","\\textcolor{##e0e5cc}{#1}");m("\\grayA","\\textcolor{##f6f7f7}{#1}");m("\\grayB","\\textcolor{##f0f1f2}{#1}");m("\\grayC","\\textcolor{##e3e5e6}{#1}");m("\\grayD","\\textcolor{##d6d8da}{#1}");m("\\grayE","\\textcolor{##babec2}{#1}");m("\\grayF","\\textcolor{##888d93}{#1}");m("\\grayG","\\textcolor{##626569}{#1}");m("\\grayH","\\textcolor{##3b3e40}{#1}");m("\\grayI","\\textcolor{##21242c}{#1}");m("\\kaBlue","\\textcolor{##314453}{#1}");m("\\kaGreen","\\textcolor{##71B307}{#1}");var ga={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},zt=class{constructor(e,t,a){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Mt(fn,t.macros),this.mode=a,this.stack=[]}feed(e){this.lexer=new Pe(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,a,n;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;t=this.popToken(),{tokens:n,end:a}=this.consumeArg(["]"])}else({tokens:n,start:t,end:a}=this.consumeArg());return this.pushToken(new b0("EOF",a.loc)),this.pushTokens(n),t.range(a,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var t=[],a=e&&e.length>0;a||this.consumeSpaces();var n=this.future(),s,l=0,h=0;do{if(s=this.popToken(),t.push(s),s.text==="{")++l;else if(s.text==="}"){if(--l,l===-1)throw new z("Extra }",s)}else if(s.text==="EOF")throw new z("Unexpected end of input in a macro argument, expected '"+(e&&a?e[h]:"}")+"'",s);if(e&&a)if((l===0||l===1&&e[h]==="{")&&s.text===e[h]){if(++h,h===e.length){t.splice(-h,h);break}}else h=0}while(l!==0||a);return n.text==="{"&&t[t.length-1].text==="}"&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:n,end:s}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new z("The length of delimiters doesn't match the number of args!");for(var a=t[0],n=0;nthis.settings.maxExpand)throw new z("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var t=this.popToken(),a=t.text,n=t.noexpand?null:this._getExpansion(a);if(n==null||e&&n.unexpandable){if(e&&n==null&&a[0]==="\\"&&!this.isDefined(a))throw new z("Undefined control sequence: "+a);return this.pushToken(t),!1}this.countExpansion(1);var s=n.tokens,l=this.consumeArgs(n.numArgs,n.delimiters);if(n.numArgs){s=s.slice();for(var h=s.length-1;h>=0;--h){var c=s[h];if(c.text==="#"){if(h===0)throw new z("Incomplete placeholder at end of macro body",c);if(c=s[--h],c.text==="#")s.splice(h+1,1);else if(/^[1-9]$/.test(c.text))s.splice(h,2,...l[+c.text-1]);else throw new z("Not a valid argument number",c)}}}return this.pushTokens(s),s.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new b0(e)]):void 0}expandTokens(e){var t=[],a=this.stack.length;for(this.pushTokens(e);this.stack.length>a;)if(this.expandOnce(!0)===!1){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(n)}return this.countExpansion(t.length),t}expandMacroAsText(e){var t=this.expandMacro(e);return t&&t.map(a=>a.text).join("")}_getExpansion(e){var t=this.macros.get(e);if(t==null)return t;if(e.length===1){var a=this.lexer.catcodes[e];if(a!=null&&a!==13)return}var n=typeof t=="function"?t(this):t;if(typeof n=="string"){var s=0;if(n.indexOf("#")!==-1)for(var l=n.replace(/##/g,"");l.indexOf("#"+(s+1))!==-1;)++s;for(var h=new Pe(n,this.settings),c=[],f=h.lex();f.text!=="EOF";)c.push(f),f=h.lex();c.reverse();var v={tokens:c,numArgs:s};return v}return n}isDefined(e){return this.macros.has(e)||P0.hasOwnProperty(e)||Y.math.hasOwnProperty(e)||Y.text.hasOwnProperty(e)||ga.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return t!=null?typeof t=="string"||typeof t=="function"||!t.unexpandable:P0.hasOwnProperty(e)&&!P0[e].primitive}},kr=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Ne=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),dt={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},Mr={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},Ge=class r{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new zt(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(t===void 0&&(t=!0),this.fetch().text!==e)throw new z("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new b0("}")),this.gullet.pushTokens(e);var a=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,a}parseExpression(e,t){for(var a=[];;){this.mode==="math"&&this.consumeSpaces();var n=this.fetch();if(r.endOfExpression.indexOf(n.text)!==-1||t&&n.text===t||e&&P0[n.text]&&P0[n.text].infix)break;var s=this.parseAtom(t);if(s){if(s.type==="internal")continue}else break;a.push(s)}return this.mode==="text"&&this.formLigatures(a),this.handleInfixNodes(a)}handleInfixNodes(e){for(var t=-1,a,n=0;n=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var h=Y[this.mode][t].group,c=d0.range(e),f;if(i1.hasOwnProperty(h)){var v=h;f={type:"atom",mode:this.mode,family:v,loc:c,text:t}}else f={type:h,mode:this.mode,loc:c,text:t};l=f}else if(t.charCodeAt(0)>=128)this.settings.strict&&(Ar(t.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'"'+(" ("+t.charCodeAt(0)+")"),e)),l={type:"textord",mode:"text",loc:d0.range(e),text:t};else return null;if(this.consume(),s)for(var b=0;b=0;n--)r[n].loc.start>a&&(t+=" ",a=r[n].loc.start),t+=r[n].text,a+=r[n].text.length;var s=W.go(S.go(t,e));return s},S={go:function(r,e){if(!r)return[];e===void 0&&(e="ce");var t="0",a={};a.parenthesisLevel=0,r=r.replace(/\n/g," "),r=r.replace(/[\u2212\u2013\u2014\u2010]/g,"-"),r=r.replace(/[\u2026]/g,"...");for(var n,s=10,l=[];;){n!==r?(s=10,n=r):s--;var h=S.stateMachines[e],c=h.transitions[t]||h.transitions["*"];e:for(var f=0;f0){if(b.revisit||(r=v.remainder),!b.toContinue)break e}else return l}}if(s<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(r,e){if(e)if(Array.isArray(e))for(var t=0;t":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(r){return S.patterns.findObserveGroups(r,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(r){return S.patterns.findObserveGroups(r,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(r){return S.patterns.findObserveGroups(r,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(r){return S.patterns.findObserveGroups(r,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(r){return S.patterns.findObserveGroups(r,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(r){return S.patterns.findObserveGroups(r,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(r){return S.patterns.findObserveGroups(r,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(r){var e;if(e=r.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/),e)return{match_:e[0],remainder:r.substr(e[0].length)};var t=S.patterns.findObserveGroups(r,"","$","$","");return t&&(e=t.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/),e)?{match_:e[0],remainder:r.substr(e[0].length)}:null},amount2:function(r){return this.amount(r)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(r){if(r.match(/^\([a-z]+\)$/))return null;var e=r.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:r.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(r,e,t,a,n,s,l,h,c,f){var v=function(D,N){if(typeof N=="string")return D.indexOf(N)!==0?null:N;var $=D.match(N);return $?$[0]:null},b=function(D,N,$){for(var H=0;N0,null},x=v(r,e);if(x===null||(r=r.substr(x.length),x=v(r,t),x===null))return null;var w=b(r,x.length,a||n);if(w===null)return null;var A=r.substring(0,a?w.endMatchEnd:w.endMatchBegin);if(s||l){var q=this.findObserveGroups(r.substr(w.endMatchEnd),s,l,h,c);if(q===null)return null;var _=[A,q.match_];return{match_:f?_.join(""):_,remainder:q.remainder}}else return{match_:A,remainder:r.substr(w.endMatchEnd)}},match_:function(r,e){var t=S.patterns.patterns[r];if(t===void 0)throw["MhchemBugP","mhchem bug P. Please report. ("+r+")"];if(typeof t=="function")return S.patterns.patterns[r](e);var a=e.match(t);if(a){var n;return a[2]?n=[a[1],a[2]]:a[1]?n=a[1]:n=a[0],{match_:n,remainder:e.substr(a[0].length)}}return null}},actions:{"a=":function(r,e){r.a=(r.a||"")+e},"b=":function(r,e){r.b=(r.b||"")+e},"p=":function(r,e){r.p=(r.p||"")+e},"o=":function(r,e){r.o=(r.o||"")+e},"q=":function(r,e){r.q=(r.q||"")+e},"d=":function(r,e){r.d=(r.d||"")+e},"rm=":function(r,e){r.rm=(r.rm||"")+e},"text=":function(r,e){r.text_=(r.text_||"")+e},insert:function(r,e,t){return{type_:t}},"insert+p1":function(r,e,t){return{type_:t,p1:e}},"insert+p1+p2":function(r,e,t){return{type_:t,p1:e[0],p2:e[1]}},copy:function(r,e){return e},rm:function(r,e){return{type_:"rm",p1:e||""}},text:function(r,e){return S.go(e,"text")},"{text}":function(r,e){var t=["{"];return S.concatArray(t,S.go(e,"text")),t.push("}"),t},"tex-math":function(r,e){return S.go(e,"tex-math")},"tex-math tight":function(r,e){return S.go(e,"tex-math tight")},bond:function(r,e,t){return{type_:"bond",kind_:t||e}},"color0-output":function(r,e){return{type_:"color0",color:e[0]}},ce:function(r,e){return S.go(e)},"1/2":function(r,e){var t=[];e.match(/^[+\-]/)&&(t.push(e.substr(0,1)),e=e.substr(1));var a=e.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);return a[1]=a[1].replace(/\$/g,""),t.push({type_:"frac",p1:a[1],p2:a[2]}),a[3]&&(a[3]=a[3].replace(/\$/g,""),t.push({type_:"tex-math",p1:a[3]})),t},"9,9":function(r,e){return S.go(e,"9,9")}},createTransitions:function(r){var e,t,a,n,s={};for(e in r)for(t in r[e])for(a=t.split("|"),r[e][t].stateArray=a,n=0;n":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(r,e){var t;if((r.d||"").match(/^[0-9]+$/)){var a=r.d;r.d=void 0,t=this.output(r),r.b=a}else t=this.output(r);return S.actions["o="](r,e),t},"d= kv":function(r,e){r.d=e,r.dType="kv"},"charge or bond":function(r,e){if(r.beginsWithBond){var t=[];return S.concatArray(t,this.output(r)),S.concatArray(t,S.actions.bond(r,e,"-")),t}else r.d=e},"- after o/d":function(r,e,t){var a=S.patterns.match_("orbital",r.o||""),n=S.patterns.match_("one lowercase greek letter $",r.o||""),s=S.patterns.match_("one lowercase latin letter $",r.o||""),l=S.patterns.match_("$one lowercase latin letter$ $",r.o||""),h=e==="-"&&(a&&a.remainder===""||n||s||l);h&&!r.a&&!r.b&&!r.p&&!r.d&&!r.q&&!a&&s&&(r.o="$"+r.o+"$");var c=[];return h?(S.concatArray(c,this.output(r)),c.push({type_:"hyphen"})):(a=S.patterns.match_("digits",r.d||""),t&&a&&a.remainder===""?(S.concatArray(c,S.actions["d="](r,e)),S.concatArray(c,this.output(r))):(S.concatArray(c,this.output(r)),S.concatArray(c,S.actions.bond(r,e,"-")))),c},"a to o":function(r){r.o=r.a,r.a=void 0},"sb=true":function(r){r.sb=!0},"sb=false":function(r){r.sb=!1},"beginsWithBond=true":function(r){r.beginsWithBond=!0},"beginsWithBond=false":function(r){r.beginsWithBond=!1},"parenthesisLevel++":function(r){r.parenthesisLevel++},"parenthesisLevel--":function(r){r.parenthesisLevel--},"state of aggregation":function(r,e){return{type_:"state of aggregation",p1:S.go(e,"o")}},comma:function(r,e){var t=e.replace(/\s*$/,""),a=t!==e;return a&&r.parenthesisLevel===0?{type_:"comma enumeration L",p1:t}:{type_:"comma enumeration M",p1:t}},output:function(r,e,t){var a;if(!r.r)a=[],!r.a&&!r.b&&!r.p&&!r.o&&!r.q&&!r.d&&!t||(r.sb&&a.push({type_:"entitySkip"}),!r.o&&!r.q&&!r.d&&!r.b&&!r.p&&t!==2?(r.o=r.a,r.a=void 0):!r.o&&!r.q&&!r.d&&(r.b||r.p)?(r.o=r.a,r.d=r.b,r.q=r.p,r.a=r.b=r.p=void 0):r.o&&r.dType==="kv"&&S.patterns.match_("d-oxidation$",r.d||"")?r.dType="oxidation":r.o&&r.dType==="kv"&&!r.q&&(r.dType=void 0),a.push({type_:"chemfive",a:S.go(r.a,"a"),b:S.go(r.b,"bd"),p:S.go(r.p,"pq"),o:S.go(r.o,"o"),q:S.go(r.q,"pq"),d:S.go(r.d,r.dType==="oxidation"?"oxidation":"bd"),dType:r.dType}));else{var n;r.rdt==="M"?n=S.go(r.rd,"tex-math"):r.rdt==="T"?n=[{type_:"text",p1:r.rd||""}]:n=S.go(r.rd);var s;r.rqt==="M"?s=S.go(r.rq,"tex-math"):r.rqt==="T"?s=[{type_:"text",p1:r.rq||""}]:s=S.go(r.rq),a={type_:"arrow",r:r.r,rd:n,rq:s}}for(var l in r)l!=="parenthesisLevel"&&l!=="beginsWithBond"&&delete r[l];return a},"oxidation-output":function(r,e){var t=["{"];return S.concatArray(t,S.go(e,"oxidation")),t.push("}"),t},"frac-output":function(r,e){return{type_:"frac-ce",p1:S.go(e[0]),p2:S.go(e[1])}},"overset-output":function(r,e){return{type_:"overset",p1:S.go(e[0]),p2:S.go(e[1])}},"underset-output":function(r,e){return{type_:"underset",p1:S.go(e[0]),p2:S.go(e[1])}},"underbrace-output":function(r,e){return{type_:"underbrace",p1:S.go(e[0]),p2:S.go(e[1])}},"color-output":function(r,e){return{type_:"color",color1:e[0],color2:S.go(e[1])}},"r=":function(r,e){r.r=e},"rdt=":function(r,e){r.rdt=e},"rd=":function(r,e){r.rd=e},"rqt=":function(r,e){r.rqt=e},"rq=":function(r,e){r.rq=e},operator:function(r,e,t){return{type_:"operator",kind_:t||e}}}},a:{transitions:S.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:S.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:S.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(r){if(r.text_){var e={type_:"text",p1:r.text_};for(var t in r)delete r[t];return e}}}},pq:{transitions:S.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(r,e){return{type_:"state of aggregation subscript",p1:S.go(e,"o")}},"color-output":function(r,e){return{type_:"color",color1:e[0],color2:S.go(e[1],"pq")}}}},bd:{transitions:S.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(r,e){return{type_:"color",color1:e[0],color2:S.go(e[1],"bd")}}}},oxidation:{transitions:S.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(r,e){return{type_:"roman numeral",p1:e||""}}}},"tex-math":{transitions:S.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(r){if(r.o){var e={type_:"tex-math",p1:r.o};for(var t in r)delete r[t];return e}}}},"tex-math tight":{transitions:S.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(r,e){r.o=(r.o||"")+"{"+e+"}"},output:function(r){if(r.o){var e={type_:"tex-math",p1:r.o};for(var t in r)delete r[t];return e}}}},"9,9":{transitions:S.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:S.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(r,e){var t=[];return e[0]==="+-"||e[0]==="+/-"?t.push("\\pm "):e[0]&&t.push(e[0]),e[1]&&(S.concatArray(t,S.go(e[1],"pu-9,9")),e[2]&&(e[2].match(/[,.]/)?S.concatArray(t,S.go(e[2],"pu-9,9")):t.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),e[3]==="e"||e[3].substr(0,1)==="*"?t.push({type_:"cdot"}):t.push({type_:"times"}))),e[3]&&t.push("10^{"+e[5]+"}"),t},"number^":function(r,e){var t=[];return e[0]==="+-"||e[0]==="+/-"?t.push("\\pm "):e[0]&&t.push(e[0]),S.concatArray(t,S.go(e[1],"pu-9,9")),t.push("^{"+e[2]+"}"),t},operator:function(r,e,t){return{type_:"operator",kind_:t||e}},space:function(){return{type_:"pu-space-1"}},output:function(r){var e,t=S.patterns.match_("{(...)}",r.d||"");t&&t.remainder===""&&(r.d=t.match_);var a=S.patterns.match_("{(...)}",r.q||"");if(a&&a.remainder===""&&(r.q=a.match_),r.d&&(r.d=r.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),r.d=r.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),r.q){r.q=r.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),r.q=r.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");var n={d:S.go(r.d,"pu"),q:S.go(r.q,"pu")};r.o==="//"?e={type_:"pu-frac",p1:n.d,p2:n.q}:(e=n.d,n.d.length>1||n.q.length>1?e.push({type_:" / "}):e.push({type_:"/"}),S.concatArray(e,n.q))}else e=S.go(r.d,"pu-2");for(var s in r)delete r[s];return e}}},"pu-2":{transitions:S.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(r,e){r.rm+="^{"+e+"}"},space:function(){return{type_:"pu-space-2"}},output:function(r){var e=[];if(r.rm){var t=S.patterns.match_("{(...)}",r.rm||"");t&&t.remainder===""?e=S.go(t.match_,"pu"):e={type_:"rm",p1:r.rm}}for(var a in r)delete r[a];return e}}},"pu-9,9":{transitions:S.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(r){var e=[];if(r.text_=r.text_||"",r.text_.length>4){var t=r.text_.length%3;t===0&&(t=3);for(var a=r.text_.length-3;a>0;a-=3)e.push(r.text_.substr(a,3)),e.push({type_:"1000 separator"});e.push(r.text_.substr(0,t)),e.reverse()}else e.push(r.text_);for(var n in r)delete r[n];return e},"output-o":function(r){var e=[];if(r.text_=r.text_||"",r.text_.length>4){for(var t=r.text_.length-3,a=0;a":return"rightarrow";case"\u2192":return"rightarrow";case"\u27F6":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<-->":return"rightleftarrows";case"<=>":return"rightleftharpoons";case"\u21CC":return"rightleftharpoons";case"<=>>":return"rightequilibrium";case"<<=>":return"leftequilibrium";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(r){switch(r){case"-":return"{-}";case"1":return"{-}";case"=":return"{=}";case"2":return"{=}";case"#":return"{\\equiv}";case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";case"~=":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"~--":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"-~-":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(r){switch(r){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":return" {}\\approx{} ";case"$\\approx$":return" {}\\approx{} ";case"v":return" \\downarrow{} ";case"(v)":return" \\downarrow{} ";case"^":return" \\uparrow{} ";case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}};var wn=function(r){let e=r.data,t=e.expression,a=e.options,n=r.header;n.warnings=[],a.strict=="warn"&&(a.strict=(l,h)=>{n.warnings.push(`katex: LaTeX-incompatible input and strict mode is set to 'warn': ${h} [${l}]`)});let s=oe.renderToString(t,a);et({header:n,data:{output:s}})};Wt(wn);})(); diff --git a/internal/warpc/js/renderkatex.js b/internal/warpc/js/renderkatex.js index dc4cb4025..7c8ac25ee 100644 --- a/internal/warpc/js/renderkatex.js +++ b/internal/warpc/js/renderkatex.js @@ -7,6 +7,16 @@ const render = function (input) { const expression = data.expression; const options = data.options; const header = input.header; + header.warnings = []; + + if (options.strict == 'warn') { + // By default, KaTeX will write to console.warn, that's a little hard to handle. + options.strict = (errorCode, errorMsg) => { + header.warnings.push( + `katex: LaTeX-incompatible input and strict mode is set to 'warn': ${errorMsg} [${errorCode}]`, + ); + }; + } // Any error thrown here will be caught by the common.js readInput function. const output = katex.renderToString(expression, options); writeOutput({ header: header, data: { output: output } }); diff --git a/internal/warpc/warpc.go b/internal/warpc/warpc.go index f2dfc6244..e21fefa8a 100644 --- a/internal/warpc/warpc.go +++ b/internal/warpc/warpc.go @@ -51,6 +51,9 @@ type Header struct { // Set in the response if there was an error. Err string `json:"err"` + + // Warnings is a list of warnings that may be returned in the response. + Warnings []string `json:"warnings,omitempty"` } type Message[T any] struct { @@ -155,6 +158,7 @@ func (p *dispatcherPool[Q, R]) Execute(ctx context.Context, q Message[Q]) (Messa } resp, err := call.response, p.Err() + if err == nil && resp.Header.Err != "" { err = errors.New(resp.Header.Err) } @@ -270,6 +274,8 @@ type Options struct { Infof func(format string, v ...any) + Warnf func(format string, v ...any) + // E.g. quickjs wasm. May be omitted if not needed. Runtime Binary @@ -325,6 +331,7 @@ type dispatcherPool[Q, R any] struct { counter atomic.Uint32 dispatchers []*dispatcher[Q, R] close func() error + opts Options errc chan error donec chan struct{} @@ -355,6 +362,11 @@ func newDispatcher[Q, R any](opts Options) (*dispatcherPool[Q, R], error) { // noop } } + if opts.Warnf == nil { + opts.Warnf = func(format string, v ...any) { + // noop + } + } if opts.Memory <= 0 { // 32 MiB @@ -466,6 +478,7 @@ func newDispatcher[Q, R any](opts Options) (*dispatcherPool[Q, R], error) { dp := &dispatcherPool[Q, R]{ dispatchers: make([]*dispatcher[Q, R], len(inOuts)), + opts: opts, errc: make(chan error, 10), donec: make(chan struct{}), diff --git a/internal/warpc/wasm/greet.wasm b/internal/warpc/wasm/greet.wasm index 12456ae8b65847dbd15db9487ae668f943b98e68..944199b407d72a724a4d62b38fba0b0fd6a4929f 100644 GIT binary patch delta 1229 zcmYjO3s6*57(VCTySuROg&H1<$V22&K#K$mrLnt06K$g;B4NlrU}ZselVxEF#swPz zi^0~54G^=20hwl#phyy;1_*<}2qbhXxt+V!tLW-HE#4`kv6$H{%au>cecnwiv9lWZ5Vi$D^LT#RUy4K@&+CSt)vxynFo+#Vu(QCi82@&NqB9=(WmqfYJDz& zLMjF|njpx0BFK$~0-Y=s3v@6gp{P_wM}cuFAg7U?gqJge>L92N+uT2cHoK87y^FLG z&W?6~#s`227=AXw28_@qXWABMk|G&&Z~%DlGXhbYKhilgVGv3AQyS510Biy@I{+E% z|65r9w%Cjrq)eg85A&#UU~8hY0d!=eUGL%$gERp4;ty~%SU-#G zql^3~>*N%$2p+;g2_Kx{tSS%mv(_YW3a$6nivGc7;B728Smm;U@msjR+hprX=QqFqYp!J}T-P$_r9=hD& zS5$Z|B5G28gSl}0d+%Bv(7L>~wqfT!wY8*7d)55nd%H9#Z5*C8np=N`Wt@7Q|K!t1 zSChVHASA42#SoY%AE@p5^1CGI%$P`cVdIC0T$iDb%B+#q^Ar8|?v+H;+;4q+WWK-Y zk|N-x__}>`^>|_24#lS475>i6{e0#WCb)m~p|Ldfz;b(Cf$V(vvT^@6`kR3bv!CP? zmo}(7V(c5v1UM&N$gVG5`r^#;?fA&i?w%J+Gn#$76B;v#mZ%ohPW`0v*06oO)G{^U zo1m2KZt_pPT>k9PQ)vP_rnsQ^@u{RaZW`xe`*!WQ@r|M_lUl{5?;nMYjCf-*dy}88 zOSC_cy5}tW_)nu@t?egoX|6NAP0)lN^>{zvk?5VIQQ6LfFm;tVqdt1|uk$1M^TFQv zhSIFBrYi>$WS(bzx{7KFZdOz#J}41Z$BZ@YZ}Qn&8Ov|h_f3e#Qy#^IlwYR5`u6D& zGPCln7$1R7+c6s`Z|LnmnH>8|Z%DHx;z@I0=i*dFcUwm0fyR74Cr7ix_CU$8rH8^_ SkKXz1pe}sq&Gfi&I`KCcDS_Jn delta 1102 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 XH^H#Yx0F3vWx`TvHtv5quR|K*xD*(4 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 z%0Df68+YJ%D|7D0LK5DgnXCZYyVCv6*@%wS=iwX6YW9cyf9^10vD(nIILu)}9ry;4 zV7RdCmMs*ECsGZoA^Om;k%(jPraYgE!rLZ!?L<*;>xQC7>%|?dc^M^{Z&A8V=NIK3 zjwCA=CSYM)Eu*y|xl9CmY%$6dfv60Es$6I_`r^6oClCVVN5T)G*Z3O)s3eTV#x5gt zsz1nwYQ3due+>ar9Fi9No;#n^Cwe$9x+ll;r=#$n z6FBK3=wK3K((R`t9kRLjwm8IPz65!f7U78*MTXq)V5(iEjKgmj7Laau)PiRKn z(t8*r+ep<|?0WE(bjY%m1DlkuZs7%-9?kAO=31(rBNajc6n;ZyUh~yZYotaOV)Jcf z3CfueFIqWd{~8T>XFSTtl9emurBOP8SqKpt+i{3;UDw&m!)+RCZPv*`be?S!VwDAD zf0zDvHalCx`J>4t6kvWs;hL*ZXs9)pd*!kquoyOFy@b~q&u7OqkxR)OR^$YG&CpP5 zx@JyzWfh9e%KXlLca5FjA&Rx|u7l=NRu)+a-NPHMm19mIEI=bvUO8)*mQN(P84fNx zz|~GA;-1WJ{qJ$t0koZ)yK2LtZ~6;QopaYVcrJZ zdHfD%Jj3oOMDv$RKybt%D#=DkmU`AMFb@!5lN96HAXZ}wg@(~#PlqYRf5=hy3HB)D zK|*k6d9}wqyLP@8Q~**wme%-T}AQ4LNUeZDzea4huBM z8wrZa%fvCQsoVW~s3=Euf9b{gp=C%1r||vd>9eM;uQdrf!&FUU4=G-7yIFHeOH|rG zd{XP|>f@pmSTi(K*XGA(v< zZ)IO7r*=kFhuy^ev0@b;zjpkm;&6JDN<@sU7L}KMtJK>xY521tlsfj@j=F#YLoRNz z4r(U_zw|sH8k7eGZ(Pt~0SIGFs8jBox4qWo@a3XhuBQaXp^#4#UWB*aDnRspoC@NNx^Y3F zdKN)9?9rrWD2dJYgCvBZiFBKY0a$ddn#sbrI=4`|3)imbMF1%TL2|+)7zP^<=}Zfz zw6rS$3j#=UfA30_+xa?G6waBu{^=3|fQVMM0~6q3ygEooMW1(faL4#;O6MT%ZD-(} z>nyY7)u)Mu9D5>?9Zq`ohDOU?Yl7|kg}dOO&%|^S?b1>hm`2VT4W4_))lP0c>{k+{ z&D@qRM|=Dq1;?+PQ8Qiqkue&_#UM_9s42jjAXNK*fBwbuW9Hcb=f%|6L6}<0g$jw) z_tvr9V~Pjg(_Wn$=h@rkjUVaK?Vj^5;Q@{-+xk>-4G-p?xpqQY15t>(i}r^5$JoNF zGy{`!4LEjnX5VvqpE2R zZX5mJe_rGvCGwzlAE(&TZK9)dk?26;|AmHAXK@zVm4D<2j`V7HF>l}4Szvem)|OQ# zkWg}f&D$zK{bCnqs}34A9zI=icEyjj7s(Fki{U868>bGHAEk*5oTg7om+E|y8HGD) zq^5T#ui!lGb96EEny?cik?g>9VlA>ko#xX>f8`pE;3Ogof{1_(t@lk!)9wt6&}?b8 z!N3TCh@I?QIoNg~7$jQQ_!bp~(GJ&P2Tr8B?lsP8HOM!m0 z^JjX^@}toZ43E)VyiUG$6mca|SQ8s&C(x!T%GSF;8W}^uF-s9GRFy%4^|wxLmhvW* ze~Loq%i^REHd&jN$D4+jjNWq;b8+{#b5r)@cDUW!(V|p*9w$F3$%G1WwxdB{zb}p4 z>Rmi~|63g?10!g&C&<^Y9@T>06wH{k3>(1`uNFgc-KWc1F+?ysT!w{j6mgM$rFeU`Mgtl8zd}o3dUv zxE!I;x3aC&mZ|%`1Rb@32Zurt^6ZlMb=rg7;XXu?217CcJ-3^7q37wNO_B!we}23* zFzR06x=_|BjvTrB>wV#wFU81PY#&4V9=OQZu8$Cyl`G>y#x{8L&eJ&Z9s4<}1(iMM zBpl?n16OvY7~)6Ja^SV2^gauN{EmdT=En-!#MldCB4hX}RHI=$i4x>y;r9ZG-VSh# zbim@$K%5*5?@4--e2PwFEPiA>e{fa4-><$DhcPIBbTauf1Qg@!p-Y{3?~aCu)b2NU+5$Koe?y46!D`f% zrF+W3v(d-arge9GkUl*n+9fDK5$qjiFM&5WfHF~)ul#uPA#oA!)DHNuFMNtzFZIML z3}BxDb-JlH&Zms8ZvP)PLHyHoj6duKASca60p8ts)!l$MA|O2PT)S9#HMWAftn8Xn zRVs|rd~F1Gs1h8ChZ1cZe~CbpcPyVVLVsM0)Hek>Q=3CR5Kha%h1#tfWBT?HgNO=x zbUFlTtPNcKr9#B6e>09Fwzuz>V?zVu7d(fa+T}y$+Z!diI$^JF$j{pdZKCA>{VoNy zY33fLybe<1&lHQEu+O7w?PjI9igLBuF-@l5e3xWy)fMPmtn!JQ0ImsX)4tp zl=k4l`gE@bbmi9iPtT4MErD8J#0Mn$`1~$GW>~xKxx|goiWAyKDDIdDlP|E)kCk;T zFXNdhP@O8#eZ6LRJLrb`W2Q;LSfMI73XuDu8`k{3J%yZgW(c4!Sl^Z~X_R+tgwEd@ z#;JB{&`+a}Hyq7pf9Tp59NHHf=i$%danG;}rI&hWBY3e*dV=pO6@VVyzzHNHag|~TLf6}bZmgamP*mFfw$Y401 zB2EItH$EVx+gY8r6r)(FrNkrcbIfcD5}+a`Xb~tO>4$I;xc@#1kvGi3LP3Q?lhv4p z@2N$(`3m!q;Vjx5QpW2XQwnxB!@~obx7LA7X~U-Vag0ib)&XIAP+w#u-XmQib*hSyKJjNI=zQaeQ^7Sq%&=DM!%m zhZC!7d_432vNVGjI3;;oIRSnc4yIZtt|nrO|zA(({bBhk8>w2j5kU6MkoGRn@C zUXw4o_pGI~oe`VMi67pj)&x8jQo#^>U$ChqdL-a3R{9VJw{7aGmUzo;@R-8grmfRJ z9|kd`e}gCb=6H>(qs;AU8$=pSq8^tacZ_mEdNUM_syL#{BaQ?&CT6fR zyfbEKqE0Djn9Gr>6lprDZoIxq1;>T4#!9b)f7+9kD*)|0Gpi@aiO_NiA4zxENor!b zp&sv*rL-{I*G;cu-qmL3=XLrlL^KuNuVOfWu-3@||1#3d9djN!T)%Mj>?V7%JR5Gd zXXQftFf12bLQ1=K$>k8D`vfR%V@7FPA{cOo5r*6M4Si!MXg%)? zf73{}wjOhPEp=koyy{l&gDfruX7QKFuic-15oa1z649H452B+>vZioXW{Lrw5qEsq z{Fzm`*BEgDoGyYug}1PF@mL;%LyN?aaJ#9U1U0$L1PaP~!fum?aM5uat(=SlOvv1D z{ZEWWy%`*G3)y}_@11L>5uME8({S>oe|f357{%0wt}R|K28Volng#y#wfM;YP~n(o zO|A!N;d&QtF?t7$^kjMWD>BX3TYyymjfDh#Wn=~zfkDiM>bEXQ!-*fh=NDA%i7~og zn?e+S5N6oP^RaqyYu3>q(uy8i^X4PnNur+K&SFGuj(Fzo!jf`2{UpyyYDr<%ZYy<H+XV|+}Ubx}HF@F?uqfBvb1BYU?|wurG9%be%9utctlABE34#Tlnmhk?mN zP&kh9_q6*xMgo8pf&p>)mXT_J1pL|YsF#B7T!2_Yep`@FK%H#j13`Me|4%*su;V!& zj-w2C>nOHZEMSCLdwTDN6(OWLr^S<{3fB4985tU>%TVch*1-}NkqKCkf1N8EH5mdI zcz%pn9uOFVYpHg*wk*Bn2>7}u>U2{9#pB=!*bTaU&;RrN8RgZvkv-UrA zb}D)pNWwz({7zl2VgGWne=qmvx=0uM`}n{8Ku$gf)TE}|5r!Os#jF1y3Dl#v-^281 zPbt@-zuz;~SfkyX>Jp9WSR9_^ZTc|?F#=(Yuf;QllbO$sgfDjB4tDT_bxhC@R+=j; zoKZL{GqZfm)BD7&-2Oga~|g%rv!2B;*CzTe~eAow}FmvY%w9W z7~ebA?M@+;M0~nE$4Cs$9GO~ck%L{M`K8MX2OvP-Cb$Rx-)+jT;SJY( zWv<=(KN>eGAy>@pe_U==GwKL>Trawy)zx9^dQg)jz}hDkjQh{yl5{1Ms4klBnAfPr zgE<+*iEl$O;9_UG+_%v%q$wL8X zThBn4U4yUJp;iNe*VUF&v^(^L8(Kv1My*v-4xRYr;$e^ojHrm-~1WLrUR3$E2M zgUu}IvSIA8y0tza$Qz0mBSv|E>ML$knyUC0AM5^vLa-ZLC<{sADzG)1(u*Gj-00f6 zEVe~-;G~o5W`sK4NElr8Un3+gR2esRp%403MK3xYc*wcQ_IZ?Wcvj<4k({qR7>jU? zcKy(orYy_5e;F}H300ml;X7qfUyZ7fy&er*zwJhz^J#`pBZw7yj(vom3GYcjx*}`r zp>sz0+Abm8v(mefO3Ia(1*eMy*uddtf>Yq&A^`?A7=PmfCVzO2WG^a|vnb$4ymNbq`8f2{|KKB;1GRYPE-xc%>G>Y&)F zX;o9J`A;BK#h8y_a_;l1t~h^*(s@kFCF2S8(RvP$M#LQ_K{5rNt~8}7Umc1heB}b( z+T?blbLA?~IUMU!JK5sajmAFpf9byQszHYD1&M-##qZqzzOU)neH+ny>)yWv`3g#= z&%t)be=l5yCMckBSDAX4=;XO~0yd9bIB8|ZGKpF|XMmG!3O>r9C2^`nB%!b5Rhf5q zFzBk=Dwf(%6wkCt4Z|zNaG=| zy-bxFxUH1;gFXn2ih{OMkwHz=f@}%c0KPVZ05iw1>aZ6Uc8#9B=67PjwL8_JjKm0p ze_4^4qu#PGWtSjPhs!~=yYf2lmfEsyhiW%)C`Vf@8ce!%hB8Yet? znZ^_XILYkEiJ8<|!r{TB;j~pHzojXkMMb7)o;p*URUXU*rpAvYlRrYmymAOS}lnm5L$#S`9z?@ zcR9x;h$~0aua!Te%w! z4zjJx6toGlq%;NP(@scuVs|QBC9v?yLDXK&PqJrVPLfS6{dIk>T#h{auIP_>X{POd z&wuinqJ(Z?eK#7#WM_(cCegCqV8zjMjb@&?AZ&|cqyE{2@uN#+6gF+yf26efl$gh( zk-RoSYMq*2B`Fa35PNfwuVhE0`@s&gv0-b*&^{Vj;Z20&tju55d+{*D_HxAmG z&Hmczt}Epjj+-mIO$P4~e_X@NBfPQKt-BOVOIrZm)ivctrp64?9a)C7)YXL&^$?T3 zLpMXp8;4vPphIvx00~@#DXFfx#WXLL2JK;#t7=!L6-DSJVoWz^zGh;h#pV(r4N)gf z719913x7*0Y(O(`2apMCG!c;arqE_Mm*MXzY^V{C0u*Y~P=Oo-e_CxpdA)>5wkd>7 z>fPlN$4*i@w~s$%>+!UPt+{;eYHm08jn2_hygY02nyZ>!^;_y0lu6@;cqf8Lf+f#8 z2m!)V>X2ghR+36uJr+ay-RD^!ZC1tkfEI0O%(YGqAQ8w4jf(0E$X=hz1l}r zMv8i}DGKohNaIxnXa)}L^9Y~a(H$;X@RO1SYcJ9g+ zL$9053)CfXmMg7Gy;8(Uc`nfa<#_9ip0kL+r9HsfIiq6Q{HhcRdncwt|T13zq6s6^N(rmGv* zGpQ!NE~8`|exEJwR}qjN`5so@(uvnnIa;N;hV%QNrsJ=BsT`C34Sw1f*gO$WUjpT_ z6})uhe;8zgen<)k9!p8JxLdX=)8O0fCC`it70q~CqnoWLXLF~ArW}tS(z87nYUX2&BZ*g?Fb+lM-42ZpBv zf8AIIHML^fGZfld)G;O`B%gcShU;9OFK(hEIeZx+fqceZroyQy#b}Oz!8y^^YiWm? zCOR&415e{09aXKxWU1KV}t=y zOkv`CAblukgaAO8j>niO9;^ehQV2hl0N$U zsZ>kn^=Lcm2YRs{B6?%4uX`yTVh27z|H1`#9*Y$bb&~+j*a8bnub#{UuwcoPe_kOm z{7EA@T>s#*`qC0^6d zluJkKn?xS+kV8DswTPWi#=IaWI%`=kVzMqZ{`O*ax zn09y=0dEBen;Dk6dUkCMsuN+Z1UTe>IZFg5D~Pv!aX@_R3k)h`d0R^{h#|eFUOu_`>HyiO5C6jnWJW_7=0-vjf8?+&f(=_6 z6P((8ci0G<-ne*hgO)zv=~svN4|AaiS{ZQ~dJMT7fTpeoE?qYatn7(8C@t?PY zXu`r~`1E9h|hW#`G(P)F%@O%sj!TQf*?1FW87aC9BE9Q;X=zx0-@QS#A+8p zfg4|}hk^mSG54v*P&Gn~rVpW^g%6BTP5ORHT*7^cY|+c;B_lMhfAe4}!#EblEI90j z6F+(CwdqIg6P!k2pFvpf5+fAeMGf(1S2DOC@0hSc3Y=2s)Rn1&7TM2~%D9V%T^Oe@ zGS7ZSNnliacD_$9GX1EO82<`1v1s0LQz~eC_oy!=gZqBsSU@C}E!vUSTT3C=kO12E>O*5dLlw!CxPu0RPk_L^j{`2wti0tS!6uu||6AvZePmqtr0HL*RSu z%03oqfrs4D$nwkk=vN%iW@p{Gc6niP%v5&3n@Dtbd(;9h@&j%W?Td4I0Ri zA2W{Q3wS?xtPtCp3`^or<<_maI)h_k+2CC_Y&M7B0{}y?lUNQ!{&@!__HW?&<&X-| z4exe<$M7Gc163Kp(|zQZ0LEe}#h!IQPmAgufe)Pee?iJ6k0i=iNAq&VB=Wg=UFFnf z$veeCj!N}$k)bwFq89FTA@Yc=yeSzA%OS|(0jD{>DMLE(7Nz^TrSJcL4ioKP%|&m0 zUk$*K-P0K8!r>9^aJG&GHdT`%{Vx1_W~eK#s!Xg&^Vhi6d(wxKB^<<={Ogz*vW9IO zoXtX!f5UzC(Mo|;-Uf2RD8%1o4&>8^bU3S<40U7VVnaGmOJ7OG&kBz=`|f$v@2oSj zLePM;2~vY^5=BN&ET*M&7`Ev6)*Uf``6fGf+T#Ft9Vr3!}NP zdx;#$H)RJS%$Hb;ggMVeQ_OJQmZJ@<#jnTLf1}_~v)7%N*L?X*z5>rxgOPN`SBDX= zBePlIFfhP>EOyif)qN$D=yLsClZ~H8`oUK@#Je5HxP5}ps9lG`nTE;fj7XD zno^gXs<gF`bNgq*YVgtPidQ(~o9zZ#@Y4h7k1$1au?{tj49%7j*E-;XpAm4me+Oz4 z%YVYNACdQi0l}j#Vi8#=hD$=MwipXk?gTVodwSk~HyJ1}LwcP9FIeL7yL{?L5X%mP zmYvF|>^ND$T74Td5zXmoW*jihma0#tqQVTEqb?v8Uqg`a_sad^9V>G34@$@^IpJR@ zo8H|!HyV*M*pXWcn3kgSLb>cT1V?2Y)0Az>tY_ewX;!=gV2I#8=|Jq#Y)RvWQog zIULJ5BW>zap8P!ESOQGHNB`)vlWKZ~r4K2p_E=Fqa=V51qoz=L{V1IIe*io{!@sH@ zdI`aqPPwSUU>3yIlR*{AXm9TJ^4 z$0*_`K;6~M25u7cZ3mT=o)yntGD*!j*`i*uqb6 zUfOSdp!1J7?9%lD@sP9wak}Qi2x?Ca=W<1}H;^`0^2Fg1;dwFw`cOo~P3d*l`+>SXhL8FKcwlk^8 zIKwwn@kkV*Td&Xhat8)b)}9`u=<(0Z$FP<12iP9mM#y5$G;N{jF>HhBe&^*ONWL>S z;oG_$C!7XT5~$h+6MuBpcwo8#_3tP}b2JWxaHNbR_)IN;;Ff)Sbu7-jkeKhZuCLe} z7%$V;nNQQ`oyAm@iR_J=EGJzcX6!pOK~SB6P({b>(0(cA^D}Dtp?=&;7DH>NW2Cz7 zE7z~gr7_-Oc~DfH&0{5U0@{|SL(!t_?gpR+4i!@cD7P50)ql=7#Xc}A(7~5iPA1cN z#jUVs#hX&sS7}FA?Tp2gbUT*x9qW~#q-lDyKGkX* z2a^A3gE;Ths(;}WBOxg*vZU!yu&E2^3RV4c@N%W0RJqD?ydat5dAL*@8=B^xbcC$a zvO}HSB^Gw723ar(`RKZwjV3_;OMe!UCNHxCbhI?_fBQ zFkn_Km~a7%d~N=XS?B|#4)~a@v|dWvWSQtCdBJC4Gxr!@hh0@{#q z{1%QXA%6oscwri@FC0k5FSu2{BYebSb5kX=o5N!q@#lDtU;@qPdZ42U>5UT;qP3Zl zR_=XC2K_srxil6W{TN$ckDvqNd;sBRT$uPrGy%}=OGX6nq?G5bVGUFua>O(@+q<4& z!;zt)dB$@XLV4ZP-RT>hj_Q`#d=?)pyYSOP=YK=R7c<;dhoCv{hrI6CBee3oCXbzS{CMqd3)t$ zP+q#F19WQCL{Pk7_itn!#O`76{WGV&*}OXAy?&<>QeFScO_T=Z2M;ErQ)ZCNvpD2} zSbx8pg^(DrA&A|B;SB@NJZW|H#*rGZl+FMX(nAZ@cfIKl99);UWnk_d8qrbFhODX# zn}1@3U3&n5hjSG8v$!AT0pPnvDHP>HECLf3hGr8ZQ0pQ9x1|Q{hY#}%XVD_XxWq${ z@=377VEkjCOZfj-x=dCvip`w}cM_wqxqsji;T7+s)rrG35-wnpG!PH4;xN6D0Z{qF zI~B9`y&#FdY;7Ms!1B05Yz1xkyI~u2A z^TZvHc4U~?cb{dp+VR8xZ@3F@P8B%B5Md_FGwZxV%3jMpaiQ-T?lW<0wiQofC3&h zK1;|Ps?oMDNt=<+LimtscnJwgTc;r~gs2fwlw2C@g^wzAW*|o&?2boTcKe>&D1hP# z(GIL@NDLFT3Wx_i)<8i+v zduQ@S9v!cnj6DXEAINC3N*PQp9D}!azxMhgXsxH|iPo2`@vX1u8FEZ{CRiDAt(#ka zH9l`#+cF2a5@U=g#tvg8e^Jy==d*AwcRagz`GfCu{?y}wGaSQgbJTB!8K)@gRxy+` zRPNd72aOilXtN(ZoFuy2cz1l9On zc{VtuD=!C4J@cyc^jm%nv+oAnuM9d}_4&iF7Ow8d`5TMg{U)Dv%}Nt{W#9-bFwHv`*dDS5wM|_tUe5}My&BSm&hW<1FL5Q36Q%jkWsZ?)yL*?h4 zfeO+tk6Vcz9}8B7X$?QaXOgvl| z2@G|n6UI(vQy^!W5_R|=8`tuIf2dZ+zEjO}cQ82+zzTHEU_emEP7D%X6xPugB6?FR zMwbc3jcy!c@xi4xGq7+#svt~Ji1!R0qpbyMy7tnrznL&~WGOL$yp|vxydmDDr588j zcA798k@1^3%zsI>haxG=zN3<6h*3W(gpcx-zuhw)zi$SV=9ly8jSpwOI@Rxv2f8gDO?88pL2;#p@}`cy zWl95}R59&9^(Ed0c+rWHr|naHvhYp<=eU!pw%76L-sQ|N&M%q8(zGXVPe9!R_q7MS zIJ`_-Fn_s1@q-<%BW|yw!p#Y+qr<{j4(`Ec&gET7 z0vkLSNy*alxKu}K8HzYMW|INs_a+;83nzCqcX!|Y&JkiWrr}X_Gtz!;1Pfv8zn8f+ zQcG*AgLOK2KxnXXyCM3>fb^zx+-qx!0)KaN5E&nS%FH28S^HZ%4SNI=JwCX{O7Iw5%P=qo+mTUmj6} zfX@Oe%7jVi5E*+~u%fkuOnVa7OzOhHWV>qpI<0NRi=fhuS%|S^AB;O_C-}GXTz?^l zU?ni|36|Ay@CK8};TKz9pVO4ycfB`na#9rU(E%!v#PjrcX??hdt5$!i)C&*c@XhCu zjUdn|IKEp>NBQn=Qh9Zq!X1sWP~`lQJlC!*?A=&sYzUlr^Vd)Y1+S`hoF1n)?TN2E z*97(&KsGn_#g8R9V{oYv*-PEcjei(=G`NAi@DH{?JLxypn%o=QEpyv<6m;BnTa~c` zXkgnf9KF2MUpTjlH4!2bCkcZ8D?x@gZ0T#NSwoq{^b;fFdb{-f$zt2kRln7#5P>#9 z2`{gnlfAR#7;+TlpfQ3%I`3fFr;y;|TP<`FWSP?Tm_?9q*e^QCuCBstZhxBIJixSibU`zVUqLssJ(-U9rY?=iRFnLyZYolBa@ibFcc3`YPa7wVABbVQ8!Tft zRwl-$`?hjWd|sUO24!?Yv533d5BdxGw`rbgLa@)zqw_0nvW@ol%86a9;tZ8#}$v_G0aTBZ8lD zs|DNT((1NF-!#55)-`=&L`&Bfj5o~?VY972BC|7tDwNRO;d*JsZbIx_t%WgNG#@7w zcgw^&PAGp)nJ=I7HGhdrZ*?$PBQG!t!=Ogrg48u=^T**@uLld0kOM=K&*|12pCXF- z7eocRIPQc45{*wpy5Oid1xE;Np3-!;D0hPt2@}mV)tJpOP%WW z!jd0W?&zu!gXoN!b2X(98K99V^KpQ7LBLUhE5t`O5mRd}Iz)2L6oTdndj`Kswf%Iy zWf466BsFmohD-q5-yz_q!V+6y-l1Y8MW>l(#DMecHIc6Pvu9q%a+F9g+h1FAe1%IQU_AFOn%EzD6`3a7( zu^Ly`bo$$hZ|Qx~J4p(HHSH5f_Ri9s)q*xQLr34VrJ1zsa9&miDX)q2p%Bbn z_b~rkZL%T`8`5GRHdj|;5vL?vZ>t(pW0U9sF~@+epnn-#fG|gXai5pkk(y&hxqu!4 z1M?x9o7!^Ds$8}3ArbJ}x+?yAsN}_^?3T+($^B|$VtB@6 zbA?jdsWq;g&rQaEft~ypZ;kv!AlA4=%ey_)v=AJ5!BCM2ldb0Oh2Ax9diCn3j%y+6 z2-TGngnyCpK85x0l^3;V(mOYMB{XMWiYqsN5rQO@Ydf#@E__=W`~@yc!L2LKafOxR zv|ir*Tw8qmvzgCge!FqJ=xq_tZ@a6j_&Tf5?ZypY(so{*tP2>%ouMW}gJ~K*Z~eL? z!ZsS+A_LT2VgM=UQpiVmdV~c?39FiXj3Z-_9DgH4X)XF}kb=@ObB_=qd8Z3_Sl9;Z zr$Nl$_lQPAWiVle-(2Nq0?Kna#)jr4>P|8oq+<`moFbPrIcBS=+PE_H?$l{=`Wz(P zwG+2lfmOg9Lv}X#AtpXC0`R@jKW7u&>|uktTBosWXk7vGQ(~CIFAJyx+xDBf7x`!U z!+(6Q1}`)SClVGA#4y)o0pSFL84vKD0+eZuAUlv!DWi^jQX-F%cArTc5C-4cXt^IU zo33pN8n<`rOclgDHnxidHT$Hg2!OmPGZ7a>)J7XF~5iZtP@6v(uoXK-;e z--W;;Br^J|bG#hjxN_tDA|;x*cb7)Z1T-mvb%XMp=t+HX_(Q)+kT>}sDV6TZht0D_ zAW69Wukt}z-hQX^i!B?fv?cjn_|hTMW9HN`TU^pJmxSQ1@`-Sh)7>#_=BzZqjeqXR zgfs<`rod|0Xx$bn?Y^t!J4=76a2D4vt(6&b3iPlni@WuyRL(@8IWDlTJ8{!6Idj+t z(f;cA zfJP6$o9Wo$rLKoMVG!Qcbd#S{Hh-Vd=kOlkvS~O0p4Zx++tUmQwYS zmgR}!v(5=$CA_>x$Sp8x18Ub;4EQ0Rm^;BB>G!$~fN-z(00N)uijPCV7Jt^v9o6Lb zwk7<Qy^u_-2Cu_Hyun+oXnZg!xoB-k+xUi?2#D52e)>>?s@&xkg*%*OD2v%f7mdC%Y< zj-}hTDn2Lvr+kI_;~zO6y!0{7>wE1PKbviULHx7+H{JZ|Pv)EX$;I7WnyuhpBTcZ$ z0Vq0llfvb(ls5mPW!3y=8NJA7^_MC4p4I;td~IwJHp-$|4}Z8*_dc6!d;7%KMppz6 zK=Et^n*CVNU-x5XljTpJKy4t~qBvQu_UtAP?nwPBd~%)l$0Bup^OqITZ=4zhriM$s zV^isk$^?XFrgr6i!;NRrg4NUZ*i5%`(QQ4F@@M?tfMV&T$3Mf<%>+T6)txW|4FvVb zI)&)8eB;zj5P#b1Pwf8ejlW`LMya(b`Q?-+uZFQ@&csqROa=Vo&lyd{7K5+cnV*2F za=_tpDjhkizm^wIhz{lf_vX(!GUD2B&{3##fYD`1P;C#;-USyX+aH_v>wQAaJj?`+6eXo^CDK6d5u0DlD~yFCkHR(EU~mpaM%YzRNb z>M$HyCylI6V;-zoGeWt?5?CIe_uduA1cSV|*Y?jZpChac5Co(p@nDBhEx}0!rtBbr zmzCburQUKz*!xKcGEY;QVmYmX35j4oM;x*I16S!JtO81N5m2%j@MT*tq|#>tt*5~@ zN#_kIy??MS#%Ma>6tG0ea=tELpn*R+dL zfPW5-aP~GB?J$UwAz7G0vY^7n5?VK_TvAE{M}^bVgU<{J1xmmUkre=pO-NiE7I{5U z61gBU?J&)1&We<{6{-i=N`%!SwXQi(v5_T~^Wd*oH*ZHgV>XpbiD1VJJ{_h>89HR@5d_uwvyrS_ofgpVFNufyZ zj1s#sXSq?PZf`s9Zi_#z7ymUbM8SpqD>o_JYWqf7vg zi1oUQ;%E4lbpdLE+41-4Y}jOD<9{G4np)m`|5^B`bN^yT1sXB}NorsLpL(Kw&sjaj zqtDNM@6>jZ5Q+|^n8b(1<{acF$Gxt~3XqeijvS4z0O%|HO}Uv`@OExy778$R zQ4QjzC8c7EU#|>ZfXELO!hc@}i6=j*Nyr>Bi-U~R?Vt3`v$c*FFrxd-vsKH>ln@oU zv-xo+oazpy`RR3BDoHF%K~#U9Qh{Zl`9t5aWiLNf`$4N7ZlFJ~x)0edSGLZ%p4(@8 zkr-A3$D?2`o0(Sv_fWr2%Fbpr3g!L*{2Vw<=nRM4^a>=aUXJhS=6^Y4DplKKm_VZc zgwOkS6ytFf0ZHa>H*N_IC|&H&ljD>9cwk5mF5IujneZzdDjUF~C`ksOU9Lcij9>f2 zEQ8vJe(y$)zUsXp?;%Zl9>@E(^dlMSlzOZskA$wJk3^_b>#5dwBy+9#NbK6)UfM=W zj`#BPNEl7$1PU=TqJIWWhW7$K^!r5W@OqMWwLdG@hhMC4voGn@S;B%UU6|HY3#eEH z9bqt!9a43Bs7Tu6!P!IHhiJ%`uflrKGj(VkKC2n|o|X3M#fi~AjGa37Ao9K+!! z-V?5aclfBU1-EtrkQ!N$*Y_^>i&4GDuAg8%V6Wc?>qcKZ>hA>K$cGqf-=+^;Uvs&PMzm? z2=UaFj{NK9_n7cc(oL{`=POjNJHnG?Kri(Nue2Z*vVSHB&JXJTax>-xLW__4euyBn z;O^no6T#Iq;p0fvVoa%MbXkAN9mT7D5UhTrw|Lde656!V;ZV|0Q`!&3IB?hTDuG}T zc$9zKJ(sldS6U5z@!*EVZaaAeZss=03X&h@bk5r|Pg3EY{&HZ^W*<$QBrO>L@Za7y z;_-gxU4Q5WCgML37DZU6Yb9WVb;wh+Xjr4VR{h(1k4ExIf@t7_9`N6z1C=o&JiH2o z!DbON3$&6K14upBuj<$Jx_((t>~ab&$3jw*9DfzbAt1ZqnE6OaB4qS3$E)F+i-x1* z(LUvfN{*>F>O~HacB+*N{HH&=8F}=y@74ew{b)a@j^0^9i zpp%YQ*Q1;=N0-dUv!?N*uo`0dnfI^JS~`Zct|cCM?!H+cipvHavL5DJIS2OuAN4Hs z%zyni8d*^ca5BeP`dkkv!;RadU$|r7n(bg(G=BH{8WW+2G&eqD`A;6D;eABXS)F2H zve?ePJ)Pr7SV$%pCc5RWaF;fS^Y+D|Uc&iyDV{o3*f@PFr$m7v#e1n~BPS?9zTh+` z@W`h|L2gKf2sy0?0tKHD0K6)1?}qSBm49Fnji7NP8HaDD&|E-iinoT=i(<;H&RZO! zD616?UIY*(7Km$HVD22|ZE1KhXp9K!VHl5q@Z}fv00^BjIZSDn^3Y~$UG^tC!XiQ- z$Ywz10#Y7Oz^?MkAZ@S0FxW(9=IB%S#4;N*7a)x%(U`#x2%gT{nD@bc&Di{#8-D<) z9BRmSl7rmA0%I)qceO!S$=_(F^K>~96rQ9XVKXyF zc(jN7lTcwx;d10ajIg582;XYkLaJ0TuiNVBHX_KfcT6>4Z1n`Ozrxr>(U9F2%cb!i zkzp^VZBejw^xRuO0@(6gw8;N^5r1#(9#-EH_MDccgW}ZW%{fL*+c}Y7QNN-=((+Ac z$tQnSr)JLyOT6oXg>^n&_*u@+jee6<8#1k-tEcrs4JgG)A|Xy~*63W>c=&Fl{(PZ( zwVTkh#lf6hPdV%GeqU50d<}>c0h|ztp-ZDrf3a&GSCO;*TTZ3KAEGSb*MC~p>El6o zNH)W%T6<`3`M$C>sQPZvzqyas<^_Hn!s(fGIO4POn{!$6A6g7W`CWo=Tb&i$lNnQZ z@KgAPx~)xvioJ3wS4*|JNVpjGLAJVqQj0dwb`K25j+$x4%F`}S46o|nVW3q#(MDHPKGV zz_cuTg$@@2Ec}R2ls6BP7K99lXiQeRJRN?<*V0S^P_ga}u`qdsQUrHog+oWE(zI-e4Mi{XM`hL4u{013?`W z3ITV@z>y$9Aqw3zkbkroB*eSa7z!KB@y6ZdEyOtPrm_Z8kW_@oT~s(m$6be4TNu)6 z#iuE6$EtkSnQQP{_V~<-YM}UJNz02Y;d-%bR?^%E(__s}pp3CrAah|JYDv2n1a5lp=}rv9AB*FK3jMgDH36h6i$|9=(nC5Q$IM55$MR3;A@ zzer}-`?ksSK9f64T;??|WhaF`sUpQw0IE;?OHq~$qER~3o4>M2k{_q0M;H4A!y*NNOj4$~35nQg6g9!i@7h7e1>Mcv z{U&0MxhZvqVbqh>74G+5T0TXGzg%X3nKpkXKRc)@ak(L;_@$=52|}x?lVy88j0a5J zX%`oWU+HJkO#5EsYtVmx=L~kyPCqRMMjN*8oFN~{V1IGGsWmNgD*2p3xcXdDB&B!CVv*U)dZ+!;b z4nL|vepsuj^%`ed(zHFIH#=@{^C)g0ch3CHvS$&bu+*CC)qS2D-2#mD$W2k}4dR3Q z#=rjBLVxXdsq4}86HIER&EvI14cwBT?6jvLGqWxarW8G_QbhLwpPhJSPUgRe|0(u( z)^X^T!C^A?{M8#6%LmF<{F83kh7bT3^5sS$@y47|GUvw}#UJaTMzad*HJgC8T*4Q~ z?0EjuNBIt9{HIukf{K~i-)nK@*nNJhugQ-x0)O5o90#Axsf#LRj0)bpBCk2U!2Y!y zOyX6m?xQ+|gRrtsFd5W~I90jlEc;~6Jkmpok#nqYZqU?=F9s-p0?b+PHI>+{EeQ{C zp~H3Jx$>poQ!gSVE$uPNT_oEN=iPbaVi~si)tMa*A+#4 z%;LK=c(ti-Q#Se}qU0u?-r12OMOt&XR|#b!AuN_WctXwiQQh2^R&Y|Wwd~=#lc_fR zzoMWF%g<(ta>uVzmv<^#X`pzKIbAoW?|(ObhnBd1>_dO z3lWd>soZEHzf_C!Y`e?F&Lo8%aw6*hX?im&jiZrIAqhOVR#OEVzK%gm@&;^cce2`n zo}lN7+^W%Yt8V<)nZQP~RaQ7ON-s%s>^BSxAK)r}5l4o|79r)(Mnvio`#Xvc&3{VL z47&WZcAw~f7*n531W59~V)p>MIhR_gDVIyyj4rO7l-zB|RHbU0r|DR#;w>{$zG@Gk==&jQ?M9?h<_YS`wR0*xczbHeOM;iR`O!D;xBI7i^~e5UjCXwtYT!LR zI3yJxXhd}ne2jw65*hwVecIB}s;cAN2#t)udm1p%(K>`xq~qg1f`xNZh<_F>ZKTXv zERLl`3lU3oHm@3p#et>P8)6|Kgt#)VPa#Jw2dEfZyRg|rYabS85pj0H3`c+Ex2qI8|E|+@3VfqzP@aGJQoS()~-*;2i}in^iq5{ z$d!3IKDs1Jwrnw?wR)2}W<-?>L!4Im-v%oc1Z)ylOdSjdG@ouTq*LYQWNgAhi zLr^Y?!q~SVyZdF2D!x5x))Zqm424CCj(6w42RcTqP&M-_YU$t;z19k0e5MDDJ_KKA zHqHk48YQGgo_*Ba6_;6zt#!6epH+ey#M;CiFbM}EU$1DSAh$r_;eY&(7VJ>5$QYNm zn9sn8(Hn%LMOg!j(1KgAb^I+jx3Otpkw&b%6WnSrsQmT+8B?g;W-o8$`zDL!mdc|0iG+NMvl_vqy~JZ zU>Zp^8c3XN5uveyUP8;I_%*|4iNn0WkKX|SQRrVm5mH}xoDy_yq`VA5AE ziikJ>?aS0=;vV{?au@(1oeE{DUPs8jCFq%gXOaO?{!1K2H8c#kXb92nLhP!9qsb%e zDmFB3JZq0#M1Nxh%Gq~|0dW?{pr?M%(NREX(ZLW|?#xR?wkQM;oC&mi-puO6jXjFu z1S1$>u=hFLhDEl*uF)jWhqC?~?#j^!*%lH_-qT!=WYThz+Qokv_^>9Cc>_MA=_TE7 zup?Ip*2V=tu2CuNaf`>H5_Ne`m?4KE;bl5?5!zguM1N@dXK|OYxa&E#E$+E))f@|W zv8S`ZHRhB|Ml>yLJeD}?wjXLVz??`1$BiVeR%8FFdE$9GS}~ zH_aIJ#efw@%ZwLR$98XBmwR}yva7|!L|AeNgm@Yyf3R=P3F00+giHn<^EkIa`QaZ+ z^)~mF8-E~$3+Ygx$+2S!6_5$Iew;(Zc7Ui1Oce}i_Q4RyVzjq%Uzq0WI#sTGg$kLY zge{g@4o90DPPJzCn@;kayNgZXKKCgD+fLs^1qUlcfh42O8G^`gzn3J4t2o%v; z`8@1Gi)$=Ma`UMxjIudS@i=uY9n{VPOWs%%A%F7Hdb{AFKVm#2N4Bwkc&0YBd@e>9 zT6+yg(i_@W18gG(zOxtj#35pETPqw3u$GCQ1i>|IZcwT#C`QV))(c9B_)W@E*%nRx z$dwW)Wv%5X+iF3W+CLmhU!!T?QJ~(dYJTQ}jz+aB^*#6$^tzT~&Rm7SPX2kU-b#_J zAb+=4>@fXF2#db*QoR5Ai;&rq*|&MPlmjKt2xdQ?0}pdtMRRS9Qrh?><(-W@wj4?a zv3fvl5ute=mR;b4D`8HhjZ|k!hS5sX9Ysuq>lm`itx(KkF%{sg^qmdwPECvFU}Yi> zZEI5(V`GBy%H$O?54lKWB#VNM9X4wkynnn=l;yZ@h2?_-iGVg9Qx~9&?0V7rdhhFz z&|Vbs#MB=^xMxJuhyEr0Qzfc zAMTb#hdVF(R3K9bKIQbOCU7RR6Nn?QM)#E|+Hq-9Yi?F+PYHVIQ;RPk#-zib8NGg*HDsnYVsj6*tB-A&M(e%#(va~HS z-%_SKHowa0v(Tj}2BLnoqMkt8V3b(lHn#$x04hS>z}_O>q26OY;64&Qk@LJH=!1sn zezvkk`)JkpG&aSWfIBB#kS-xtRDaiH!QBe&jxj}=3EDld#m+vr1CnQ|E>D~XC(o-b zyLYGl^U)6v4-Y^3Z+)7F?XS?`=Fhl?hlhuU-}uVX6g_g&UKqrn3Ty|FqN znv{&u;^e&PEdma}+7pzmqlG#YSRbF@F~2$%q7xw}Tnajc-Tm91Kl^PswSQa%jxSy5 z;mXQ;ayp!O^}7lWm_K|o2LU#O2JG15Wb4bL>Mrl6k%w#Ct4$6(pUpi^3XK=ZA%xA* zJW{$RqDSh%*6M2tjiDaFDarZV_;3Uh<#@jY=;mo-B*ZU&c4&(>$4@sftcB`N-cmn8 zHE=8H2+$*x#46(!*b(r@TYt$?D>eI@CE7!+)#mYJDwQ9pcD%uWgj%ZkKGtBxYrSSm zwXL@1RJJ^jJlA&fo#x@>UUiNz>us>i!=itaDm$NCA<@7k#VPK)>CkNJtULmSi1S^$ z&(+J-xK>@zXaLHh#<`fvI0fOVl*0x$z|O3QJoz5>UhiGus`dJHVt-SE0k{i%4&eRR zDl)tvS7lq@81Xdn4zJhj-m;avG>Iv%cB1+TVkJM4eK=VpFsv;RgElQ3u2;x}lr%eZ ze}zKLh3p|=wnbi$OBQR+3MmMOerJTY42l6NTa=vgnJBB2>nN|Aj`Q#o{=Fhh3~^i^ zYU8=ih^w^aCmdzgWq%+~vlJf)A9VbRl%Qwme)LH5wmB#g=+M~aK* z4=j+ggiW+j;T(|7Bnnh*U;}hsG_dT+!^jA}RrP2@`*q_cPvkIOQRy~|CP$tyn|URq zyIo1IO=&W}GE~Lby2FgRN)%e@i-FfvB-XP))rK+H zU?v+%=h%{`f`9Ntl5M?BwxsQqSm6W~!Hk)MviZ|GcH|@*eA8Ze2u^umqN9Opgkut9 zybS@(Lwo#tN4dASo^TNgGfI zE1U`94&V;w4(1M{PW_Zi6wH(}MNA>n6Oo+LZD1W4lyOi4$&gKOQY<7Y&YlfR4W=AQrA8Yfa10D0Vyk6iOHfPHMkzt2IVaK6z5A!ELbfq3}JCJM&J=BDccZ~jXE?J zwPnik;c9Q!5}a6oXl-5fe<-t>|3&~>n}3GeMm(m}5G;lQ0lR(#QC2cN@rN>`$tXa% zS9S;xB)X6_Yd9NGCeyNElQM(M(a$R1L`TXN6$O~3RmNe6p`~?-UOwauuI^+oq0;AA z-sBucZk8INdQ0=0F38f;7a&15D}Gf7aylT$^lJc5s7B;H>PwoxY_CWfha}_}qJI@E zNrJs3N(L&dT@4j(hEbHY91pez=>3?lI@w$Y>_)hmnYPEDrV(>cmg!q2$QBTA+38UE z3w>53h>J4XOMIW4tOTujP!^2S1w#LFelQ( zG8e~WSQFbvXpl(VZ94lL2Bi9_&wo^9NWUc*wnRxwc<(%*&IBaOBd+OSIafF!n0*}q zXyc*4(d}SH3^~}4O=Aq<`4OrOp6CdCI}yFyl99v}s4J8Vq^QZmf!1sRw5uS<#t4%^ zDZRqLF!n?Uh}hU$q4(%YaLpfRTPS%D3-`Pzq~-V3p;Pxs?bSwT7$!duS${tWv0HZx z6KXQ}Y+NSjmL?%tX9cPwAmJm5l+DXjd0p#7wtU7IXHa!S` zmk!#6z|$85J?Fo+M2-3COq?GVA&sTWInD zg!aoKz${w=ZT%A^AI+4A%I-h4Js*|JqI-nxgXQA)GjOU^l8Y zf6OS-VtbamHG3R#N0+Y-D4C*{ODMdsgD)ybYhMtx6=RUwhQtALG zKUl=M2wZ~0{##rAjDAb;`b&E42+naV}6#8D?M zmq%m67cFxZflZc+HL#I^Qc`N^%I=cFCtA@9zaDE40 zgtnv;l7UA=eXTHrDM%0^NF#!pB-Jd<2nv4AO~Xg`ip8HgK?be+CI;;x>=2M{lvqbl zAg+|N>yhP*?0+nf2lzq(Syuo1?D8gqq|Xwf#d+NcqhAb(595PN@zX`wu*Jl^PiZMN&b z#<)>tZKcJX;jkvDj_r1#cQi#4;rCfOE3|8)P0inYlom5>X{PFl^Tx!^84thlCcSU9 zLe%f2XEe3~d~6_SLbb+8#!OQMsSanP#9^s*vhq#Oj3gKlBMZqoPsp@7Q}j>bnD$e5 zQm9NX5`P>`JV?$JWaB7GvFf3(2)dUoc8%XIZYTZFOa`&K9W(+*hHy8OZWqA&%>!#J zsv=H-ee{qVU6p?ngsRFlO0{DUUp*V4gKggx*n43b@YZ$_?^f#wvwNBhEkaDG#O3nO z)ly(iTHWkyqMJ63IW_3I=6d&u>eqYm#)j-tUVnEoqX4P45StmAj=un8&Fm55@E%xi zmZj)%bqaMvQRyXpLsw)_SUl_a${dt9y>7?KXY3ET4xX!cPmqiOzklnW9IvR`PhIyB z&|i3L{9B_r#UD&iGHD2iL!i-dDEDnsM+ zKFUo>AS%B01T=m*PuNqlN|I2KOy6>CqJR1J;{aa)+-bsK<>sbWsWKl{@%)_es3&-v zoR%&Vm+G|ZzRuK?2M_*}|2x0h-&YY^2NPTjM{=j_kqE6}Y0nO*&|er)a+G7qDJJub zO;JO_F|hDRa{eI3X_8U=%t;z{v}J_Eo{6QPahC!d{DWfIQ!$)Qk05ClhI^Ew*^Q(>G5D3--7R^kF4&e~OT0Tx8ya^TzHBy@^y>0ASgmIj-61p^$(HXn#y0VnuX! z>uPlDta(>~$q9w4TjL)tON1EwS+Dy}LRjoyI3_vk{xtM~5j60bNH-#I4iv6izco`$ zS8k$kjW#e@hdq@79(G#RV4M6$!iw)yuyt)_-^#)yPFDjAUqIlXbchqSl?4&R)%Uqh zTcKKrfM3MjvG|Z_vOQDEqkjyrx!}r(9HrXQVCw}#LqWk-KY@Hi_hWMMifX(CHCS(v zTUcvSaw$hqNgBa(USf_jhmW(H!8(JAtlW9BwJFOH%0%ql5@at^)FHUWmyKkLugt@2 z0}y3Q$Sa}!v~gXfd?R={Y+}tE+awOf+4+;)4>HNn>%!bHF40~+F@Mt%qitCb*I7T& zS|_kw8Z2t_7b>!;rEF-fy$27oTeTDmN1Ac6^39@>igzLccI877oPi2MJd{Z<57r97D0NTOS%I&5(ULX_z{1Sa zT{;|5+b3z#kEuY5W`Dx%tWMQ9Ia9U+OVQr&b~9|Uw1fFDs1JabcrXbka!H2PR+D)9 zx2qjPcD*P-s@uk2(?u`uz$GxEp~(vPd4Sp1dIOb4&ck#S4+H~H)sSuVc~HkmRa#IN zOY=!!iQ!<%xFf8P1A&|X*f&c-F4p)4cV3e_l0uiU1h3Q*On(^-G!=@KK?)4G$+8DK zLmFOeg)KI{3#95a1>tB)jBG-}!A2+wwjlDqBZTJOLWwrGy+U4QF(u1|?|K4+Sc5C`Jg92g+Jp{BAOFFRDH+ zt1u#98Di6=UVmERAv{?|ZmixuY6=2b!m!7GIV%rqB)m`{{wTDtXbNPn2Ur!1zCJ7@ zBy1=MXFO!T5G2vvvx=d>^VG3sE$)b&r9Ddf-lC<(o>xz6W-@2< zE?>qJp|15W(AKKkTnRJ>RGE(=N==+`&`NW<837Z}oqs@jhe7e`nC}k-cV4UipEjbW>{@$d7tIZ3#RY&pBcs2cdtrcB`<+~3vDwBS%%Ye z2Whqz&wqsz@f9!Ug!6exaEg}M4R-PG@g}q{N`_vm1{^dTd^%p`TSWaG^3td19bVLF zCNK4Ar6~RQ6*_&v5g6Na{g)5-&TXD+t)U^jxVE4Ozeq59tqbeFGr*PRHs{{H{cawQ z?$x8Mb&E!55$=t{0Ry>0f%@8Iqw(?GKR1$oQhzDl6Ha9if1(A{^iHxWd#9}fq&V_z zCbyw2y$o@-(hsvbltLQx*_3G#V@$oa^8#kyo~Nn*Ca}R|y<}=T5caF}&nVO=6M!p^ z3cPRb2z}bu;j+kyfnXd(>CML`zGaH!7rn|Oj!I^Z#4bj0;(iTHp4;C$&ZOkx*0|b< zWq*^mWsAfF9}T%m^oRhW6_-<0rlq!ppG}uGhnB_ztr;*haNTGv(TV(d&Kcsh$XD`) zJ}smA^O#92)6@aC8c5~gi6+vcDiDw-rxJ=Y7bHs6V)!;1SGPSAdZ~J$#<#uYdHR=SOt2_C`|B1OlJw>3%xv2TnrS z^3#7xqcoNnXF>BP2$~6tXHe9_Pa_`pCjxdPlVv)5sU6Ars zMRS3-w&G_VfC-sN9E^>PVb!g#JRXI2)Eo4T7lne=;#0e~wWN(r@u?r97$wt14fjMY zt1e)o2+&fnW+lS|N%r;eFSTzKgMD?wSCfAaqz~cqhdkFk%eeaJ_EhDanhS1*n<2{1 zMr`%T_%RE%02p+F+)dEH_)JfCyQw-c&py)=j4qmviugB5x7R|{Go3$nR!YIlb_{L9W?+Uj5KnZ^g`a;* zA5GpyA$f+6w6Sd*JK>SW;EaYYI&L_7yUfgNf?a_ZKauZ$510Bgz3og-L6R2P)HCuZ zuTT=Bcva1!z_gYm6$By4(IjaP|E3XR`V^z3bx{PD-8oDh6z^|aqq!h`+XNzqPFg(7B#f<7~0@p z9{Kn-6^u)WL0+fR<<3lVB=aN9SBZuq)=|^VKzlXnZP1xxSlB#m^Kmz}o_uoD| zBi-{Vg0i82k78>IV#>4%wl`cnaZ|1OrFERNn*{uaAW0bU8jOsdIWT`GE_Z9d1I(2#d^k7v>I^KFN z&;&`K-QUk$?If$0SAjmX?L=Ij>>^`ajthi8r+wrFg0Ac2&sseQ5b@_N-(TO&th?jA zo;Lh{S9M&)wvnfOG9YLU;HOH{>rUL&yx^BBhu zt#&M^>+5a`OG2rcI9Pwx`m~K(MDg-_?=7mG4YwWh7FL0m!3&${DYDuQV9e7qCW$C_ z;*SUtYpZ!3wfZ(ZqsvY|YPgWj%w2kcQVjuQ|UY|#?9wFvF6!&Yt(#_i|nQ$HtL zUfI?tV4c>anvU-3OZHm&NWxo{##_ZTKfvmuB21jf=-iFIyEl9 zW~*O*4koZ~hF^cq4U=V~WX%UZw~_^?^O@;e)%#FMy|WEkH{43zdyvC;%dy01z{)F; zEG7$6ZpR|W0g4?G=>=rKV1UCm(R6XXf$7w^JcqXHR_h-Jb(gWE!m>y!)FgUjm416!cF z8k#9o?0_g(5@{6;H&Phqc=18_r69LCf@3{Ok!}t$jVV6Fh$Ri`+eZ|Fmnl`?m}< z`dfeZ`8Frg?a~oBv05)_<%;r0qve_`#g4Md+Y}e?I|}aB$kA%JbCjitu-Cy z$r_;vH?@z^YM`-`uHg@D8hY*17&Yv?PcQ}FT&!xH^U?}ODqjn_=+L-)ptTE)&eHXL zv~b(ZO#74D&2$+y>WNQl<{QJGR^jFdFsBAuSfK49!rC$V*}?vEea()o_*Jm%Ea`t} zj1U$Po|mJ6$Cndk6>2499Q+lIr`6imom>uL;0l)?(elF||v z5{r6r9R;Bhce&_U%oaiwjA*wnei(m5?3pZ^(5sfKuJBpKMtQmesOW|6H2%#ZAOi*e z$K-Nk<8qu7Al}9qFmO|*#>{7@Y>l0dr?`galPRf@`Dlu2Xg~KN{X}S92`KVPx}Ko4 zaqPx7qJ>W6BwLI<9`Cc=ML&+uObozZPGT$25T^S>taUA}6R*J!EZf?Sp^<;TbZFf- zKHJ~@+>5fHJOl0p?%>p9KF5mP=#a4|X2MZr9lYCrJ_Nx_B?Q=eX$#xLgpgvB_5RWl z0cp}i8LNCY%MfT@`miUU$*fy601l|E$w2!Mz}i4}c=Ehs>s7}&yo}vacW86zX-(iA z;B~Oya0fn*mhGsN6w*+6aRz@836~?nyBVvQoYoPKUL?={>RC(+O`>6R3Z!pZuN&4E_GT z9d5k9<>$dBe&16xixCd2H>o;o5J8hQ;X*C~ex{Xpf4k9z{f`MEd~URT1EQ$Tz#C5b zL>;$n!8~!rwIWY3H9pD0$CPcv?CUBLDP0V3yj=%;0PF+3VMnp6qMV1t-m7rZ8@7CJ zQ*5-&%(Fyg#)NQB05;38hWD=D&Na%b9M8jlH}PAZ=|mG^l_h}SCjS%(taCJ zKq5hNMTb+@X#?Z;>X#V8M7A6XkzIg{o-!N>A(g;A z=p5AKu4&R~eB}eu=|!S*mWKm!K#hUI>J4VtMM<`V;jw>EAUrauV!szgbUy*4LOwn_ zmU&9Ae?@z-L55<`@1L3iRI8D~94#px#%n*;YSgN+%BdxW@l*nI6!((Ts&Ywe5~fhO zNsI$7Q=JT!NnGRl+elg>Guw1mm_rZ_^=<%K`ReCTe1sw@LLYOWGGUTRK+&$UwDOv| zi}-Y>&Z~c;&yp8KW)UhqNtw40#Ez_ytEoQ@*2)&pHxpak9jLl#EA8muN;8GiAqr$F zLdMl5Dii}9HEctP1ii169)m|6C%I=2kBGziBwA#R!_!5ia-vfX%S2qwg|b2JJ`miv z1^tSQ^b<%91Jbe2rZmy5$>sHko3s-kt{IK9@)Li7xx9`}5=c&hm}@6drE%7Pf0Ho9 zN|fq|P05xnl>1~^e1w!jU&$hMoSPl3FQcaZCW8Gwb7oijhojE1Io!6b#VG46@===O5m?c>CiOK<4%D@V7^JQ13qQ0~^k+u%xT zS-5|~UvvN;SSGluLLO!Iczzu}EzVhbLzh(4ZD1?5)-1^GaF*ekgR6-V)0&@pHBX}c zF?$Y}QW#hHWysQy7Yg#!4VM&8m(I~dy5!3h$rC5AJ6oCQaxFN*bH;7x&)`Srd(D($ zV7c3g=-@zwrskk6sF_KLz&q&|h?#GYNGpE;TH{R3iCcL025n!~o!*33%XIyf6);BKm8{Zs$sP@=7+P?x=E{Sx<+q{eJ2VSv3Zyq3*Wd< z3a~x8811@urbfxyVoh{(Ef^w!O3!~jz;3Z0ub}DYTQ>Ed*hI5UJBRt6)6a9QpNH-{ zTIlJa!ws?#fs#+RK=oCX<7uz%55P~2ugsV=qFz?S&qvd-+4wYOSV3Y}0^Y!3b7~&Z zEYZEOE1uh?rT+8IlA}pNwOjB#LpSo9jguUPoBq2>FGg7L#mSCvndSD8;NE}!Of;t3 z%Yl}Q-{XiJf?J8Utk8Z6BOIv`bHO;Ow%zC~V1(M$W|~c}SGkJ$)*lCy>+z_wjD|GT zEa`bj+z;e`2sj%ezFi z?VChOffdRi5wJNzXZzI!{SY|i83I9=ah_Q=BvtF#<5sHd@e)&25&?gz(h8+ERF*GH zhmb+|osf=XKBABTU*uNq$YWXlr3lf(XvG88GThWnzT^`Mz4t>HWO5sCqv3`3f+TvhU^b1 zGiHB^mJCl_BFxTL$Rer+dT+%#)N#bNJ5t@3{Iy5^>K61hTy)RMyiyTir^v!`8Gu^Y zF8y&Wk>9E}XMQWq5(T4!avCb8D_Y46+xAuvD=(>|Xj__UOVfWiL+K{>+F~n^@}mU- z6~-*3uU|`ZV4_I#vGu3#UTQ3^4Z3~#!4`~?Y5+G0)C~E%(y4=5(o}c^Ow0qMIOyA9 zjz6j`bz1$4?mK77lD$R?oMzq&LGPa`xzkqwFrD0Xwhg4)J`))+)CbGmaipOHW9!~y zR#XzXxj<3D7t?==98l|~8x%-A@!=qJ?0s`9?X%pW9u-KeEo?H^ofW$lS%YnQ%iS#j z2LuR8OB{UrhFdu@1rvnx%X-JQ+1Wx)-G0EC;dmvlA;q;i7S3Du zLDrM`tkuf!p*5{~wfVzPe@7EU9ycmnNw@e^U|3X1DtXw>MbB3X z@KXpcgSPJXW=Qk&E}kgruw}D71lghf;62()-{Lql0F@FtXz&dC1i2kSs`-C$UP*DP zgjRpdYEF`sXlJ8)k@-T4Em7TnM|0Z#FGk}O zcp=?Gt0M>U`J0T#8*pYY>5IL?Q= z;9!IGbcj2Iu{1p#tuc@+i0IAmP=qKC`l=@5=y=@(#SuJUp|WxCL5!$17=IgaEep*a z(jw(FJ3VAA-rt01X!25_P{IF!PHdqpE8;o|qOV`9m$~JPG)@)ib6m}1UXFh=@TaMv z9E|m}ufzGWobI&&y7>n5ex5%%{x2v;~mpnK9g#)6c54`(@(UH%WdTz4~`&1{i54|P>uD<1~;BGSbL$tt=BeKJl#lK zEu0HR?nV2=K#Q)0>na((r~Q96UjpVC<+`es^Egqhst)!PI)uW~R;r;3suAljjwW~N zb8_Gav~*Z1uS+xnc_ZVPR1nTaWpSrR2?MRwHs}vJHV|caAk}QB4MzllRcg5ybZCe+ zf6Hc73_29C&KSRrMaj;xei9vc6C#QA3CvADiCjjx;nSP{LKxlG3O0Y#pD{z{%`M!> zj^qJHZCgC7Tx0`hKvl}dtJABw42?px|B(-IX({lb8<3HeAy`c!SlDeS<~;&Xw^b}v z#aZp{ZXYAPatIoZ5TLO@!P6*93!B1sVkg9vj!X9i(6)M3FrTpSdK*DTi#5cRfdZJZ zY(pHKguPlKAf@e!*)V^gxM(4VrpffNBvCdXm;p&BM(?6M?IsX+-(4Nm#jc_T$4gCf zE^m>MHEbu1f7?~OeKxC1vFoKC%vOUg(XoX9BRp*{K_Y7!=!BJx1|G9Bzt_FbrKC|i z`XJsle#*!c&)w~$Y;#dW(G8A3pG0k24!e;eqH@XTSlS1xxqN?E6?h|7%2FEquJo)( z@8h@MRS?m~t({iYUm^nKZ7H!D*H+@?XM0ew8kttA@3zme8i~re6Vo_|PWLd{%%~9# zLUr;qRzkL^#gThT<3%^#zGWA!X0k>jK;4b1)k-@|?|DtN-kCPUmZ4SPjZSsBhWtZu zFx8yw<^(J852Jst{4I;_1$;cgvjt2Vp76XMW-3%Hoa9>m0>O6&`#sBCnq93)^92yR z7$59>Y8o3++dl^~tl8D}p{9Jsi|=ieFieHF8bB&9>=qNZr1?g>;2-|dAjA$B*xM7! zCEBX;F2?F%`h)EFtbWRJG|1$?Ts-$anv@IEc&w`9>EnML4;y?aQF_V24PF{v9x5tJ zqY{(o@1R&h1rl5k9cfeN5*=BP)(w*qhSnOBa#)!Q^`oBYMifs5mwv151WnV)8t*tu zx9FEvX_Enz&}pepv#kKm7iDk#vtv`OPh_#uPb?7_;&J?Z%bHyE^Q~$Y{6F?apt`Wr znj5vgashua?5THOSRI#x$RD(qTZ;$xRAQmug+sd`D9VTwxaClelVF#x_)jV$QGT)@5nhH}#N{JiUV|38$n@Bpr t6gHTtcbs|`C|ql}$qSL(gg>*JocavLBKeF#>OVN?5&Bm(yR51Qr~^{HA@u+N diff --git a/tpl/transform/transform.go b/tpl/transform/transform.go index e8765bace..380ea252b 100644 --- a/tpl/transform/transform.go +++ b/tpl/transform/transform.go @@ -17,6 +17,7 @@ package transform import ( "bytes" "context" + "encoding/json" "encoding/xml" "errors" "fmt" @@ -252,8 +253,16 @@ func (ns *Namespace) ToMath(ctx context.Context, args ...any) (template.HTML, er return "", fmt.Errorf("invalid strict mode; expected one of error, ignore, or warn; received %s", katexInput.Options.Strict) } + type fileCacheEntry struct { + Version string `json:"version"` + Output string `json:"output"` + Warnings []string `json:"warnings,omitempty"` + } + + const fileCacheEntryVersion = "v1" // Increment on incompatible changes. + s := hashing.HashString(args...) - key := "tomath/" + s[:2] + "/" + s[2:] + key := "tomath/" + fileCacheEntryVersion + "/" + s[:2] + "/" + s[2:] fileCache := ns.deps.ResourceSpec.FileCaches.MiscCache() v, err := ns.cacheMath.GetOrCreate(key, func(string) (template.HTML, error) { @@ -274,15 +283,35 @@ func (ns *Namespace) ToMath(ctx context.Context, args ...any) (template.HTML, er if err != nil { return nil, err } - return hugio.NewReadSeekerNoOpCloserFromString(result.Data.Output), nil + + e := fileCacheEntry{ + Version: fileCacheEntryVersion, + Output: result.Data.Output, + Warnings: result.Header.Warnings, + } + + buf := &bytes.Buffer{} + enc := json.NewEncoder(buf) + enc.SetEscapeHTML(false) + if err := enc.Encode(e); err != nil { + return nil, fmt.Errorf("failed to encode file cache entry: %w", err) + } + return hugio.NewReadSeekerNoOpCloserFromBytes(buf.Bytes()), nil }) if err != nil { return "", err } - s, err := hugio.ReadString(r) + var e fileCacheEntry + if err := json.NewDecoder(r).Decode(&e); err != nil { + return "", fmt.Errorf("failed to decode file cache entry: %w", err) + } - return template.HTML(s), err + for _, warning := range e.Warnings { + ns.deps.Log.Warnf("transform.ToMath: %s", warning) + } + + return template.HTML(e.Output), err }) if err != nil { return "", err diff --git a/tpl/transform/transform_integration_test.go b/tpl/transform/transform_integration_test.go index 298097879..8197b3e3d 100644 --- a/tpl/transform/transform_integration_test.go +++ b/tpl/transform/transform_integration_test.go @@ -525,11 +525,10 @@ disableKinds = ['page','rss','section','sitemap','taxonomy','term'] b.AssertFileContent("public/index.html", `a %`) // strict: warn - // TODO: see https://github.com/gohugoio/hugo/issues/13735 - // f = strings.ReplaceAll(files, "dict", `(dict "strict" "warn")`) - // b = hugolib.Test(t, f, hugolib.TestOptWarn()) - // b.AssertLogMatches("[commentAtEnd]") - // b.AssertFileContent("public/index.html", `a %`) + f = strings.ReplaceAll(files, "dict", `(dict "strict" "warn")`) + b = hugolib.Test(t, f, hugolib.TestOptWarn()) + b.AssertLogMatches("[commentAtEnd]") + b.AssertFileContent("public/index.html", `a %`) // strict mode: invalid value f = strings.ReplaceAll(files, "dict", `(dict "strict" "foo")`) From 5273a884d408f0037473d930968555de60eef033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sat, 31 May 2025 10:06:13 +0200 Subject: [PATCH 44/70] Fix language handling in shortcode templates Fixes #13767 --- common/paths/pathparser.go | 27 +++++++++------- common/paths/pathparser_test.go | 23 ++++++++++---- tpl/tplimpl/shortcodes_integration_test.go | 37 ++++++++++++++++++++++ 3 files changed, 70 insertions(+), 17 deletions(-) diff --git a/common/paths/pathparser.go b/common/paths/pathparser.go index d10523a84..1cae710e8 100644 --- a/common/paths/pathparser.go +++ b/common/paths/pathparser.go @@ -120,7 +120,7 @@ func (pp *PathParser) parse(component, s string) (*Path, error) { return p, nil } -func (pp *PathParser) parseIdentifier(component, s string, p *Path, i, lastDot, numDots int) { +func (pp *PathParser) parseIdentifier(component, s string, p *Path, i, lastDot, numDots int, isLast bool) { if p.posContainerHigh != -1 { return } @@ -128,7 +128,12 @@ func (pp *PathParser) parseIdentifier(component, s string, p *Path, i, lastDot, mayHaveLang = mayHaveLang && (component == files.ComponentFolderContent || component == files.ComponentFolderLayouts) mayHaveOutputFormat := component == files.ComponentFolderLayouts mayHaveKind := p.posIdentifierKind == -1 && mayHaveOutputFormat - mayHaveLayout := component == files.ComponentFolderLayouts + var mayHaveLayout bool + if p.pathType == TypeShortcode { + mayHaveLayout = !isLast && component == files.ComponentFolderLayouts + } else { + mayHaveLayout = component == files.ComponentFolderLayouts + } var found bool var high int @@ -235,19 +240,22 @@ func (pp *PathParser) doParse(component, s string, p *Path) (*Path, error) { lastDot := 0 lastSlashIdx := strings.LastIndex(s, "/") numDots := strings.Count(s[lastSlashIdx+1:], ".") + if strings.Contains(s, "/_shortcodes/") { + p.pathType = TypeShortcode + } for i := len(s) - 1; i >= 0; i-- { c := s[i] switch c { case '.': - pp.parseIdentifier(component, s, p, i, lastDot, numDots) + pp.parseIdentifier(component, s, p, i, lastDot, numDots, false) lastDot = i case '/': slashCount++ if p.posContainerHigh == -1 { if lastDot > 0 { - pp.parseIdentifier(component, s, p, i, lastDot, numDots) + pp.parseIdentifier(component, s, p, i, lastDot, numDots, true) } p.posContainerHigh = i + 1 } else if p.posContainerLow == -1 { @@ -283,10 +291,9 @@ func (pp *PathParser) doParse(component, s string, p *Path) (*Path, error) { p.pathType = TypeContentData } } - } - if component == files.ComponentFolderLayouts { + if p.pathType < TypeMarkup && component == files.ComponentFolderLayouts { if p.posIdentifierBaseof != -1 { p.pathType = TypeBaseof } else { @@ -302,12 +309,10 @@ func (pp *PathParser) doParse(component, s string, p *Path) (*Path, error) { } if p.pathType == TypeShortcode && p.posIdentifierLayout != -1 { - // myshortcode or myshortcode.html, no layout. - if len(p.identifiersKnown) <= 2 { + id := p.identifiersKnown[p.posIdentifierLayout] + if id.Low == p.posContainerHigh { + // First identifier is shortcode name. p.posIdentifierLayout = -1 - } else { - // First is always the name. - p.posIdentifierLayout-- } } diff --git a/common/paths/pathparser_test.go b/common/paths/pathparser_test.go index ad76b9367..b1734aef2 100644 --- a/common/paths/pathparser_test.go +++ b/common/paths/pathparser_test.go @@ -434,12 +434,12 @@ func TestParseLayouts(t *testing.T) { }, { "Layout multiple", - "/maylayout.list.section.no.html", + "/mylayout.list.section.no.html", func(c *qt.C, p *Path) { - c.Assert(p.Layout(), qt.Equals, "maylayout") - c.Assert(p.Identifiers(), qt.DeepEquals, []string{"html", "no", "section", "list", "maylayout"}) + c.Assert(p.Layout(), qt.Equals, "mylayout") + c.Assert(p.Identifiers(), qt.DeepEquals, []string{"html", "no", "section", "list", "mylayout"}) c.Assert(p.IdentifiersUnknown(), qt.DeepEquals, []string{}) - c.Assert(p.Base(), qt.Equals, "/maylayout.html") + c.Assert(p.Base(), qt.Equals, "/mylayout.html") c.Assert(p.Lang(), qt.Equals, "no") }, }, @@ -487,7 +487,8 @@ func TestParseLayouts(t *testing.T) { func(c *qt.C, p *Path) { c.Assert(p.Base(), qt.Equals, "/_shortcodes/myshortcode.html") c.Assert(p.Type(), qt.Equals, TypeShortcode) - c.Assert(p.Identifiers(), qt.DeepEquals, []string{"html", "list", "myshortcode"}) + c.Assert(p.Identifiers(), qt.DeepEquals, []string{"html", "list"}) + c.Assert(p.Layout(), qt.Equals, "list") c.Assert(p.PathNoIdentifier(), qt.Equals, "/_shortcodes/myshortcode") c.Assert(p.PathBeforeLangAndOutputFormatAndExt(), qt.Equals, "/_shortcodes/myshortcode.list") c.Assert(p.Lang(), qt.Equals, "") @@ -572,11 +573,21 @@ func TestParseLayouts(t *testing.T) { c.Assert(p.NameNoIdentifier(), qt.Equals, "no") }, }, + { + "Shortcode lang layout", + "/_shortcodes/myshortcode.no.html", + func(c *qt.C, p *Path) { + c.Assert(p.Type(), qt.Equals, TypeShortcode) + c.Assert(p.Lang(), qt.Equals, "no") + c.Assert(p.Layout(), qt.Equals, "") + c.Assert(p.NameNoIdentifier(), qt.Equals, "myshortcode") + }, + }, } for _, test := range tests { c.Run(test.name, func(c *qt.C) { - if test.name != "Shortcode lang in root" { + if test.name != "Shortcode lang layout" { // return } test.assert(c, testParser.Parse(files.ComponentFolderLayouts, test.path)) diff --git a/tpl/tplimpl/shortcodes_integration_test.go b/tpl/tplimpl/shortcodes_integration_test.go index 275e8cc15..86f6007ca 100644 --- a/tpl/tplimpl/shortcodes_integration_test.go +++ b/tpl/tplimpl/shortcodes_integration_test.go @@ -757,3 +757,40 @@ title: home b.AssertFileContent("public/index.html", "de.html") } + +func TestShortcodeLanguage13767(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +defaultContentLanguage = 'pl' +defaultContentLanguageInSubdir = true +[languages.pl] +weight = 1 +[languages.en] +weight = 2 +-- content/_index.md -- +--- +title: dom +--- +{{< myshortcode >}} +-- content/_index.en.md -- +--- +title: home +--- +{{< myshortcode >}} +-- layouts/_shortcodes/myshortcode.html -- +myshortcode.html +-- layouts/_shortcodes/myshortcode.en.html -- +myshortcode.en.html +-- layouts/all.html -- +{{ .Content }} + + +` + + b := hugolib.Test(t, files) + + b.AssertFileContent("public/pl/index.html", "myshortcode.html") + b.AssertFileContent("public/en/index.html", "myshortcode.en.html") +} From 189453612e4bedc4f27495a7b1145321c8d89807 Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Sat, 31 May 2025 12:41:12 +0000 Subject: [PATCH 45/70] releaser: Bump versions for release of 0.147.7 [ci skip] --- common/hugo/version_current.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index ba367ceb5..4a6faefee 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 148, - PatchLevel: 0, - Suffix: "-DEV", + Minor: 147, + PatchLevel: 7, + Suffix: "", } From 32af02cd3ea8794b129232b4a30f95562ab5572c Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Sat, 31 May 2025 12:55:24 +0000 Subject: [PATCH 46/70] releaser: Prepare repository for 0.148.0-DEV [ci skip] --- common/hugo/version_current.go | 6 +++--- hugoreleaser.env | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index 4a6faefee..ba367ceb5 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 147, - PatchLevel: 7, - Suffix: "", + Minor: 148, + PatchLevel: 0, + Suffix: "-DEV", } diff --git a/hugoreleaser.env b/hugoreleaser.env index 46cd6ee93..6d0f1d69f 100644 --- a/hugoreleaser.env +++ b/hugoreleaser.env @@ -1,7 +1,8 @@ # Release env. # These will be replaced by script before release. -HUGORELEASER_TAG=v0.147.6 -HUGORELEASER_COMMITISH=0a5fd8ebb8e2ca798515e8c564c14e32db3b4127 +HUGORELEASER_TAG=v0.147.7 +HUGORELEASER_COMMITISH=189453612e4bedc4f27495a7b1145321c8d89807 + From 32eb1a8ad4f293150232f4fb0478ae762c839d5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 2 Jun 2025 12:44:06 +0200 Subject: [PATCH 47/70] all: Replace _build with build in tests _build is deprecated and now shows up as warning. --- hugolib/cascade_test.go | 2 +- hugolib/disableKinds_test.go | 14 +++++++------- hugolib/params_test.go | 5 ++--- hugolib/site_test.go | 2 +- resources/page/pagemeta/pagemeta_test.go | 4 ++-- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/hugolib/cascade_test.go b/hugolib/cascade_test.go index 10b47764f..fb9dffd15 100644 --- a/hugolib/cascade_test.go +++ b/hugolib/cascade_test.go @@ -892,7 +892,7 @@ disableKinds = ['home','rss','sitemap','taxonomy','term'] --- title: s cascade: - _build: + build: render: never --- -- content/s/p1.md -- diff --git a/hugolib/disableKinds_test.go b/hugolib/disableKinds_test.go index 8262f562a..4dc476fc9 100644 --- a/hugolib/disableKinds_test.go +++ b/hugolib/disableKinds_test.go @@ -44,14 +44,14 @@ tags: ["mytag"] `, "sect/no-list.md", ` --- title: No List -_build: +build: list: false --- `, "sect/no-render.md", ` --- title: No List -_build: +build: render: false --- `, @@ -59,14 +59,14 @@ _build: --- title: No Render Link aliases: ["/link-alias"] -_build: +build: render: link --- `, "sect/no-publishresources/index.md", ` --- title: No Publish Resources -_build: +build: publishResources: false --- @@ -81,7 +81,7 @@ headless: true --- title: Headless Local Lists cascade: - _build: + build: render: false list: local publishResources: false @@ -365,7 +365,7 @@ Data1: {{ $data1.RelPermalink }} `) b.WithContent("section/bundle-false/index.md", `---\ntitle: BundleFalse -_build: +build: publishResources: false ---`, "section/bundle-false/data1.json", "Some data1", @@ -388,7 +388,7 @@ func TestNoRenderAndNoPublishResources(t *testing.T) { noRenderPage := ` --- title: %s -_build: +build: render: false publishResources: false --- diff --git a/hugolib/params_test.go b/hugolib/params_test.go index cbcc8e540..ed8aa37bc 100644 --- a/hugolib/params_test.go +++ b/hugolib/params_test.go @@ -57,7 +57,7 @@ Summary: {{ .Summary }}| ) } -func TestFrontMatterParamsKindPath(t *testing.T) { +func TestFrontMatterParamsPath(t *testing.T) { t.Parallel() files := ` @@ -72,10 +72,9 @@ date: 2019-08-07 path: "/a/b/c" slug: "s1" --- --- content/mysection.md -- +-- content/mysection/_index.md -- --- title: "My Section" -kind: "section" date: 2022-08-07 path: "/a/b" --- diff --git a/hugolib/site_test.go b/hugolib/site_test.go index 4d68602e5..199c878cd 100644 --- a/hugolib/site_test.go +++ b/hugolib/site_test.go @@ -615,7 +615,7 @@ var weightedPage5 = `+++ weight = "5" title = "Five" -[_build] +[build] render = "never" +++ Front Matter with Ordered Pages 5` diff --git a/resources/page/pagemeta/pagemeta_test.go b/resources/page/pagemeta/pagemeta_test.go index eef16ef03..f205c74f8 100644 --- a/resources/page/pagemeta/pagemeta_test.go +++ b/resources/page/pagemeta/pagemeta_test.go @@ -31,7 +31,7 @@ func TestDecodeBuildConfig(t *testing.T) { c := qt.New(t) configTempl := ` -[_build] +[build] render = %s list = %s publishResources = true` @@ -82,7 +82,7 @@ publishResources = true` } { cfg, err := config.FromConfigString(fmt.Sprintf(configTempl, test.args...), "toml") c.Assert(err, qt.IsNil) - bcfg, err := DecodeBuildConfig(cfg.Get("_build")) + bcfg, err := DecodeBuildConfig(cfg.Get("build")) c.Assert(err, qt.IsNil) eq := qt.CmpEquals(hqt.DeepAllowUnexported(BuildConfig{})) From cc7bfeea32d7bb4ba519e199a991ecc20f8afeb2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 08:45:56 +0000 Subject: [PATCH 48/70] build(deps): bump github.com/tdewolff/minify/v2 from 2.23.5 to 2.23.8 Bumps [github.com/tdewolff/minify/v2](https://github.com/tdewolff/minify) from 2.23.5 to 2.23.8. - [Release notes](https://github.com/tdewolff/minify/releases) - [Commits](https://github.com/tdewolff/minify/compare/v2.23.5...v2.23.8) --- updated-dependencies: - dependency-name: github.com/tdewolff/minify/v2 dependency-version: 2.23.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 4c0623354..4619f42e1 100644 --- a/go.mod +++ b/go.mod @@ -66,8 +66,8 @@ require ( github.com/spf13/cobra v1.9.1 github.com/spf13/fsync v0.10.1 github.com/spf13/pflag v1.0.6 - github.com/tdewolff/minify/v2 v2.23.5 - github.com/tdewolff/parse/v2 v2.8.0 + github.com/tdewolff/minify/v2 v2.23.8 + github.com/tdewolff/parse/v2 v2.8.1 github.com/tetratelabs/wazero v1.9.0 github.com/yuin/goldmark v1.7.11 github.com/yuin/goldmark-emoji v1.0.6 diff --git a/go.sum b/go.sum index 3fb6d320f..1070d6b4b 100644 --- a/go.sum +++ b/go.sum @@ -455,10 +455,10 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/tdewolff/minify/v2 v2.23.5 h1:/P548KcpTkIOUvNg22zN83/GiaYSOIrbqtoue4I7kYM= -github.com/tdewolff/minify/v2 v2.23.5/go.mod h1:2RI9tiIrzJU1Z5EasXEPaI1MqobRyxKHOOgrRkq5oEw= -github.com/tdewolff/parse/v2 v2.8.0 h1:jW0afj6zpUGXuZTwJ7/UfP2SddyLalb/SDryjaMTkA4= -github.com/tdewolff/parse/v2 v2.8.0/go.mod h1:Hwlni2tiVNKyzR1o6nUs4FOF07URA+JLBLd6dlIXYqo= +github.com/tdewolff/minify/v2 v2.23.8 h1:tvjHzRer46kwOfpdCBCWsDblCw3QtnLJRd61pTVkyZ8= +github.com/tdewolff/minify/v2 v2.23.8/go.mod h1:VW3ISUd3gDOZuQ/jwZr4sCzsuX+Qvsx87FDMjk6Rvno= +github.com/tdewolff/parse/v2 v2.8.1 h1:J5GSHru6o3jF1uLlEKVXkDxxcVx6yzOlIVIotK4w2po= +github.com/tdewolff/parse/v2 v2.8.1/go.mod h1:Hwlni2tiVNKyzR1o6nUs4FOF07URA+JLBLd6dlIXYqo= github.com/tdewolff/test v1.0.11 h1:FdLbwQVHxqG16SlkGveC0JVyrJN62COWTRyUFzfbtBE= github.com/tdewolff/test v1.0.11/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I= From e333836f49ed78f657b2b67679b04499a25a1bf1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 14:37:36 +0000 Subject: [PATCH 49/70] build(deps): bump github.com/yuin/goldmark from 1.7.11 to 1.7.12 Bumps [github.com/yuin/goldmark](https://github.com/yuin/goldmark) from 1.7.11 to 1.7.12. - [Release notes](https://github.com/yuin/goldmark/releases) - [Commits](https://github.com/yuin/goldmark/compare/v1.7.11...v1.7.12) --- updated-dependencies: - dependency-name: github.com/yuin/goldmark dependency-version: 1.7.12 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4619f42e1..47f4ab099 100644 --- a/go.mod +++ b/go.mod @@ -69,7 +69,7 @@ require ( github.com/tdewolff/minify/v2 v2.23.8 github.com/tdewolff/parse/v2 v2.8.1 github.com/tetratelabs/wazero v1.9.0 - github.com/yuin/goldmark v1.7.11 + github.com/yuin/goldmark v1.7.12 github.com/yuin/goldmark-emoji v1.0.6 go.uber.org/automaxprocs v1.5.3 gocloud.dev v0.40.0 diff --git a/go.sum b/go.sum index 1070d6b4b..2fb7b5b6b 100644 --- a/go.sum +++ b/go.sum @@ -471,8 +471,8 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/goldmark v1.7.11 h1:ZCxLyDMtz0nT2HFfsYG8WZ47Trip2+JyLysKcMYE5bo= -github.com/yuin/goldmark v1.7.11/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= +github.com/yuin/goldmark v1.7.12 h1:YwGP/rrea2/CnCtUHgjuolG/PnMxdQtPMO5PvaE2/nY= +github.com/yuin/goldmark v1.7.12/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= github.com/yuin/goldmark-emoji v1.0.6 h1:QWfF2FYaXwL74tfGOW5izeiZepUDroDJfWubQI9HTHs= github.com/yuin/goldmark-emoji v1.0.6/go.mod h1:ukxJDKFpdFb5x0a5HqbdlcKtebh086iJpI31LTKmWuA= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= From 54065b7ef8199d39f1451e9cf878322b896e4bcf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 14:38:21 +0000 Subject: [PATCH 50/70] build(deps): bump golang.org/x/net from 0.39.0 to 0.40.0 Bumps [golang.org/x/net](https://github.com/golang/net) from 0.39.0 to 0.40.0. - [Commits](https://github.com/golang/net/compare/v0.39.0...v0.40.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-version: 0.40.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 47f4ab099..501e09830 100644 --- a/go.mod +++ b/go.mod @@ -76,7 +76,7 @@ require ( golang.org/x/exp v0.0.0-20221031165847-c99f073a8326 golang.org/x/image v0.27.0 golang.org/x/mod v0.24.0 - golang.org/x/net v0.39.0 + golang.org/x/net v0.40.0 golang.org/x/sync v0.14.0 golang.org/x/text v0.25.0 golang.org/x/tools v0.32.0 @@ -159,9 +159,9 @@ require ( go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect go.opentelemetry.io/otel/trace v1.34.0 // indirect - golang.org/x/crypto v0.37.0 // indirect + golang.org/x/crypto v0.38.0 // indirect golang.org/x/oauth2 v0.26.0 // indirect - golang.org/x/sys v0.32.0 // indirect + golang.org/x/sys v0.33.0 // indirect golang.org/x/time v0.10.0 // indirect golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 // indirect google.golang.org/genproto v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/go.sum b/go.sum index 2fb7b5b6b..13e8756d4 100644 --- a/go.sum +++ b/go.sum @@ -514,8 +514,8 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= -golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -600,8 +600,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= -golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -677,8 +677,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= -golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= From 7a4a4790e53848747bc7717ea08f2c9b7684d1f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 08:08:36 +0000 Subject: [PATCH 51/70] build(deps): bump github.com/niklasfasching/go-org from 1.7.0 to 1.8.0 Bumps [github.com/niklasfasching/go-org](https://github.com/niklasfasching/go-org) from 1.7.0 to 1.8.0. - [Commits](https://github.com/niklasfasching/go-org/compare/v1.7.0...v1.8.0) --- updated-dependencies: - dependency-name: github.com/niklasfasching/go-org dependency-version: 1.8.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 501e09830..e905899e6 100644 --- a/go.mod +++ b/go.mod @@ -54,7 +54,7 @@ require ( github.com/mattn/go-isatty v0.0.20 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c github.com/muesli/smartcrop v0.3.0 - github.com/niklasfasching/go-org v1.7.0 + github.com/niklasfasching/go-org v1.8.0 github.com/olekukonko/tablewriter v1.0.7 github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 github.com/pelletier/go-toml/v2 v2.2.4 diff --git a/go.sum b/go.sum index 13e8756d4..c489aa9b2 100644 --- a/go.sum +++ b/go.sum @@ -388,8 +388,8 @@ github.com/muesli/smartcrop v0.3.0/go.mod h1:i2fCI/UorTfgEpPPLWiFBv4pye+YAG78Rwc github.com/neurosnap/sentences v1.0.6/go.mod h1:pg1IapvYpWCJJm/Etxeh0+gtMf1rI1STY9S7eUCPbDc= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/niklasfasching/go-org v1.7.0 h1:vyMdcMWWTe/XmANk19F4k8XGBYg0GQ/gJGMimOjGMek= -github.com/niklasfasching/go-org v1.7.0/go.mod h1:WuVm4d45oePiE0eX25GqTDQIt/qPW1T9DGkRscqLW5o= +github.com/niklasfasching/go-org v1.8.0 h1:WyGLaajLLp8JbQzkmapZ1y0MOzKuKV47HkZRloi+HGY= +github.com/niklasfasching/go-org v1.8.0/go.mod h1:e2A9zJs7cdONrEGs3gvxCcaAEpwwPNPG7csDpXckMNg= github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//JalHPu/3yz+De2J+4aLtSRlHiY= github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw= github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c= From 21a4a9acd7ed54a9d5c990add59a27719e7c8a22 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 08:08:29 +0000 Subject: [PATCH 52/70] build(deps): bump github.com/evanw/esbuild from 0.25.3 to 0.25.5 Bumps [github.com/evanw/esbuild](https://github.com/evanw/esbuild) from 0.25.3 to 0.25.5. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.25.3...v0.25.5) --- updated-dependencies: - dependency-name: github.com/evanw/esbuild dependency-version: 0.25.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e905899e6..ebc188f08 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/clbanning/mxj/v2 v2.7.0 github.com/disintegration/gift v1.2.1 github.com/dustin/go-humanize v1.0.1 - github.com/evanw/esbuild v0.25.3 + github.com/evanw/esbuild v0.25.5 github.com/fatih/color v1.18.0 github.com/fortytw2/leaktest v1.3.0 github.com/frankban/quicktest v1.14.6 diff --git a/go.sum b/go.sum index c489aa9b2..fe4bf5dcc 100644 --- a/go.sum +++ b/go.sum @@ -186,8 +186,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanw/esbuild v0.25.3 h1:4JKyUsm/nHDhpxis4IyWXAi8GiyTwG1WdEp6OhGVE8U= -github.com/evanw/esbuild v0.25.3/go.mod h1:D2vIQZqV/vIf/VRHtViaUtViZmG7o+kKmlBfVQuRi48= +github.com/evanw/esbuild v0.25.5 h1:E+JpeY5S/1LFmnX1vtuZqUKT7qDVcfXdhzMhM3uIKFs= +github.com/evanw/esbuild v0.25.5/go.mod h1:D2vIQZqV/vIf/VRHtViaUtViZmG7o+kKmlBfVQuRi48= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= From f37412a575f74f8cf9b5ba98b3cd6f9a892263cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 4 Jun 2025 16:52:17 +0200 Subject: [PATCH 53/70] dockerfile: Update Go version FIxes #13780 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6d1bf78c4..6f3a70f16 100755 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # Twitter: https://twitter.com/gohugoio # Website: https://gohugo.io/ -ARG GO_VERSION="1.23.2" +ARG GO_VERSION="1.24.0" ARG ALPINE_VERSION="3.20" ARG DART_SASS_VERSION="1.79.3" From 8e61f1fe1273a933de7276e7720eb458adcdd116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 6 Jun 2025 08:16:30 +0200 Subject: [PATCH 54/70] dockerfile: Update Alpine Closes #13783 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6f3a70f16..e35fd4958 100755 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ # Website: https://gohugo.io/ ARG GO_VERSION="1.24.0" -ARG ALPINE_VERSION="3.20" +ARG ALPINE_VERSION="3.22" ARG DART_SASS_VERSION="1.79.3" FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.5.0 AS xx From 01241d5dc9b5781e7dd73fa20bf8f9a372dd99de Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Fri, 6 Jun 2025 13:21:41 -0700 Subject: [PATCH 55/70] hugolib: Emit ignorable warning when home page is a leaf bundle Closes #13538 --- Dockerfile | 6 +++--- common/constants/constants.go | 1 + hugolib/page__new.go | 9 +++++++++ hugolib/page_test.go | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index e35fd4958..a0e34353f 100755 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # Twitter: https://twitter.com/gohugoio # Website: https://gohugo.io/ -ARG GO_VERSION="1.24.0" +ARG GO_VERSION="1.24" ARG ALPINE_VERSION="3.22" ARG DART_SASS_VERSION="1.79.3" @@ -19,7 +19,7 @@ RUN apk add clang lld COPY --from=xx / / ARG TARGETPLATFORM -RUN xx-apk add musl-dev gcc g++ +RUN xx-apk add musl-dev gcc g++ # Optionally set HUGO_BUILD_TAGS to "none" or "withdeploy" when building like so: # docker build --build-arg HUGO_BUILD_TAGS=withdeploy . @@ -72,7 +72,7 @@ RUN mkdir -p /var/hugo/bin /cache && \ adduser -Sg hugo -u 1000 -h /var/hugo hugo && \ chown -R hugo: /var/hugo /cache && \ # For the Hugo's Git integration to work. - runuser -u hugo -- git config --global --add safe.directory /project && \ + runuser -u hugo -- git config --global --add safe.directory /project && \ # See https://github.com/gohugoio/hugo/issues/9810 runuser -u hugo -- git config --global core.quotepath false diff --git a/common/constants/constants.go b/common/constants/constants.go index 3f48f3e4a..c7bbaa541 100644 --- a/common/constants/constants.go +++ b/common/constants/constants.go @@ -24,6 +24,7 @@ const ( WarnRenderShortcodesInHTML = "warning-rendershortcodes-in-html" WarnGoldmarkRawHTML = "warning-goldmark-raw-html" WarnPartialSuperfluousPrefix = "warning-partial-superfluous-prefix" + WarnHomePageIsLeafBundle = "warning-home-page-is-leaf-bundle" ) // Field/method names with special meaning. diff --git a/hugolib/page__new.go b/hugolib/page__new.go index 9d05abea6..80115cc72 100644 --- a/hugolib/page__new.go +++ b/hugolib/page__new.go @@ -21,6 +21,7 @@ import ( "github.com/gohugoio/hugo/hugofs/files" "github.com/gohugoio/hugo/resources" + "github.com/gohugoio/hugo/common/constants" "github.com/gohugoio/hugo/common/maps" "github.com/gohugoio/hugo/common/paths" @@ -39,6 +40,14 @@ func (h *HugoSites) newPage(m *pageMeta) (*pageState, *paths.Path, error) { // Make sure that any partially created page part is marked as stale. m.MarkStale() } + + if p != nil && pth != nil && p.IsHome() && pth.IsLeafBundle() { + msg := "Using %s in your content's root directory is usually incorrect for your home page. " + msg += "You should use %s instead. If you don't rename this file, your home page will be " + msg += "treated as a leaf bundle, meaning it won't be able to have any child pages or sections." + h.Log.Warnidf(constants.WarnHomePageIsLeafBundle, msg, pth.PathNoLeadingSlash(), strings.ReplaceAll(pth.PathNoLeadingSlash(), "index", "_index")) + } + return p, pth, err } diff --git a/hugolib/page_test.go b/hugolib/page_test.go index 0fec397e0..1da67e58f 100644 --- a/hugolib/page_test.go +++ b/hugolib/page_test.go @@ -1968,3 +1968,35 @@ Title: {{ .Title }} "deprecated: path in front matter was deprecated", ) } + +// Issue 13538 +func TestHomePageIsLeafBundle(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +defaultContentLanguage = 'de' +defaultContentLanguageInSubdir = true +[languages.de] +weight = 1 +[languages.en] +weight = 2 +-- layouts/all.html -- +{{ .Title }} +-- content/index.de.md -- +--- +title: home de +--- +-- content/index.en.org -- +--- +title: home en +--- +` + + b := Test(t, files, TestOptWarn()) + + b.AssertFileContent("public/de/index.html", "home de") + b.AssertFileContent("public/en/index.html", "home en") + b.AssertLogContains("Using index.de.md in your content's root directory is usually incorrect for your home page. You should use _index.de.md instead.") + b.AssertLogContains("Using index.en.org in your content's root directory is usually incorrect for your home page. You should use _index.en.org instead.") +} From 10da2bd765d227761641f94d713d094e88b920ae Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Sat, 7 Jun 2025 12:59:52 +0000 Subject: [PATCH 56/70] releaser: Bump versions for release of 0.147.8 [ci skip] --- common/hugo/version_current.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index ba367ceb5..53517177e 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 148, - PatchLevel: 0, - Suffix: "-DEV", + Minor: 147, + PatchLevel: 8, + Suffix: "", } From fad57964aa22879f697ddd2def0d304d750fa1f4 Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Sat, 7 Jun 2025 13:13:56 +0000 Subject: [PATCH 57/70] releaser: Prepare repository for 0.148.0-DEV [ci skip] --- common/hugo/version_current.go | 6 +++--- hugoreleaser.env | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index 53517177e..ba367ceb5 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 147, - PatchLevel: 8, - Suffix: "", + Minor: 148, + PatchLevel: 0, + Suffix: "-DEV", } diff --git a/hugoreleaser.env b/hugoreleaser.env index 6d0f1d69f..fe49380b0 100644 --- a/hugoreleaser.env +++ b/hugoreleaser.env @@ -1,7 +1,8 @@ # Release env. # These will be replaced by script before release. -HUGORELEASER_TAG=v0.147.7 -HUGORELEASER_COMMITISH=189453612e4bedc4f27495a7b1145321c8d89807 +HUGORELEASER_TAG=v0.147.8 +HUGORELEASER_COMMITISH=10da2bd765d227761641f94d713d094e88b920ae + From 4217fee4b0455dac0c711708afb27c6506fa3339 Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Sun, 8 Jun 2025 16:48:49 -0700 Subject: [PATCH 58/70] common/terminal: Enable color output on windows Closes #8209 --- common/terminal/colors.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/common/terminal/colors.go b/common/terminal/colors.go index 8aa0e1af2..fef6efce8 100644 --- a/common/terminal/colors.go +++ b/common/terminal/colors.go @@ -17,7 +17,6 @@ package terminal import ( "fmt" "os" - "runtime" "strings" isatty "github.com/mattn/go-isatty" @@ -41,10 +40,6 @@ func PrintANSIColors(f *os.File) bool { // IsTerminal return true if the file descriptor is terminal and the TERM // environment variable isn't a dumb one. func IsTerminal(f *os.File) bool { - if runtime.GOOS == "windows" { - return false - } - fd := f.Fd() return os.Getenv("TERM") != "dumb" && (isatty.IsTerminal(fd) || isatty.IsCygwinTerminal(fd)) } From b5c0383bdac0dec7e5fae22d5aa64eafe6274108 Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Tue, 10 Jun 2025 13:44:43 -0700 Subject: [PATCH 59/70] deps: Upgrade github.com/spf13/cast v1.8.0 => v1.9.2 --- go.mod | 2 +- go.sum | 4 ++-- hugolib/config_test.go | 2 +- tpl/math/math_test.go | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index ebc188f08..67e37c0e3 100644 --- a/go.mod +++ b/go.mod @@ -62,7 +62,7 @@ require ( github.com/rogpeppe/go-internal v1.14.1 github.com/sanity-io/litter v1.5.8 github.com/spf13/afero v1.14.0 - github.com/spf13/cast v1.8.0 + github.com/spf13/cast v1.9.2 github.com/spf13/cobra v1.9.1 github.com/spf13/fsync v0.10.1 github.com/spf13/pflag v1.0.6 diff --git a/go.sum b/go.sum index fe4bf5dcc..ab4b617ec 100644 --- a/go.sum +++ b/go.sum @@ -434,8 +434,8 @@ github.com/shogo82148/go-shuffle v0.0.0-20180218125048-27e6095f230d/go.mod h1:2h github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= -github.com/spf13/cast v1.8.0 h1:gEN9K4b8Xws4EX0+a0reLmhq8moKn7ntRlQYgjPeCDk= -github.com/spf13/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= +github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/fsync v0.10.1 h1:JRnB7G72b+gIBaBcpn5ibJSd7ww1iEahXSX2B8G6dSE= diff --git a/hugolib/config_test.go b/hugolib/config_test.go index 4275fb02a..635283836 100644 --- a/hugolib/config_test.go +++ b/hugolib/config_test.go @@ -1406,7 +1406,7 @@ home = ["html"] "home": {"html"}, "page": {"html"}, "rss": {"rss"}, - "section": nil, + "section": {}, "taxonomy": {"html", "rss"}, "term": {"html", "rss"}, }) diff --git a/tpl/math/math_test.go b/tpl/math/math_test.go index cc4fe31eb..228570509 100644 --- a/tpl/math/math_test.go +++ b/tpl/math/math_test.go @@ -258,7 +258,7 @@ func TestMod(t *testing.T) { {int32(3), int32(2), int64(1)}, {int64(3), int64(2), int64(1)}, {"3", "2", int64(1)}, - {"3.1", "2", false}, + {"3.1", "2", int64(1)}, {"aaa", "0", false}, {"3", "aaa", false}, } { @@ -304,7 +304,7 @@ func TestModBool(t *testing.T) { {int64(3), int64(2), false}, {"3", "3", true}, {"3", "2", false}, - {"3.1", "2", nil}, + {"3.1", "2", false}, {"aaa", "0", nil}, {"3", "aaa", nil}, } { From 4d3ebe4d21d68c22548df1b96412e7d81ae9d121 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Jun 2025 08:15:10 +0000 Subject: [PATCH 60/70] build(deps): bump golang.org/x/image from 0.27.0 to 0.28.0 Bumps [golang.org/x/image](https://github.com/golang/image) from 0.27.0 to 0.28.0. - [Commits](https://github.com/golang/image/compare/v0.27.0...v0.28.0) --- updated-dependencies: - dependency-name: golang.org/x/image dependency-version: 0.28.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 67e37c0e3..01c918dc0 100644 --- a/go.mod +++ b/go.mod @@ -74,12 +74,12 @@ require ( go.uber.org/automaxprocs v1.5.3 gocloud.dev v0.40.0 golang.org/x/exp v0.0.0-20221031165847-c99f073a8326 - golang.org/x/image v0.27.0 - golang.org/x/mod v0.24.0 + golang.org/x/image v0.28.0 + golang.org/x/mod v0.25.0 golang.org/x/net v0.40.0 - golang.org/x/sync v0.14.0 - golang.org/x/text v0.25.0 - golang.org/x/tools v0.32.0 + golang.org/x/sync v0.15.0 + golang.org/x/text v0.26.0 + golang.org/x/tools v0.33.0 google.golang.org/api v0.221.0 gopkg.in/yaml.v2 v2.4.0 rsc.io/qr v0.2.0 diff --git a/go.sum b/go.sum index ab4b617ec..680d094df 100644 --- a/go.sum +++ b/go.sum @@ -531,8 +531,8 @@ golang.org/x/exp v0.0.0-20221031165847-c99f073a8326/go.mod h1:CxIveKay+FTh1D0yPZ golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.27.0 h1:C8gA4oWU/tKkdCfYT6T2u4faJu3MeNS5O8UPWlPF61w= -golang.org/x/image v0.27.0/go.mod h1:xbdrClrAUway1MUTEZDq9mz/UpRwYAkFFNUslZtcB+g= +golang.org/x/image v0.28.0 h1:gdem5JW1OLS4FbkWgLO+7ZeFzYtL3xClb97GaUzYMFE= +golang.org/x/image v0.28.0/go.mod h1:GUJYXtnGKEUgggyzh+Vxt+AviiCcyiwpsl8iQ8MvwGY= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -559,8 +559,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -628,8 +628,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= -golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -697,8 +697,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= -golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -756,8 +756,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= -golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 34e83789f76bd212652e940eb8adab2895f35d9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Jun 2025 08:06:58 +0000 Subject: [PATCH 61/70] build(deps): bump github.com/aws/aws-sdk-go-v2 from 1.36.1 to 1.36.4 Bumps [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) from 1.36.1 to 1.36.4. - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.36.1...v1.36.4) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2 dependency-version: 1.36.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 01c918dc0..6535d1a12 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ require ( github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69 github.com/alecthomas/chroma/v2 v2.18.0 github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c - github.com/aws/aws-sdk-go-v2 v1.36.1 + github.com/aws/aws-sdk-go-v2 v1.36.4 github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.10 github.com/bep/clocks v0.5.0 github.com/bep/debounce v1.2.0 diff --git a/go.sum b/go.sum index 680d094df..2ed678f41 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c h1:651/eoCRnQ7YtS github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= -github.com/aws/aws-sdk-go-v2 v1.36.1 h1:iTDl5U6oAhkNPba0e1t1hrwAo02ZMqbrGq4k5JBWM5E= -github.com/aws/aws-sdk-go-v2 v1.36.1/go.mod h1:5PMILGVKiW32oDzjj6RU52yrNrDPUHcbZQYr1sM7qmM= +github.com/aws/aws-sdk-go-v2 v1.36.4 h1:GySzjhVvx0ERP6eyfAbAuAXLtAda5TEy19E5q5W8I9E= +github.com/aws/aws-sdk-go-v2 v1.36.4/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 h1:tW1/Rkad38LA15X4UQtjXZXNKsCgkshC3EbmcUmghTg= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3/go.mod h1:UbnqO+zjqk3uIt9yCACHJ9IVNhyhOCnYk8yA19SAWrM= github.com/aws/aws-sdk-go-v2/config v1.27.27 h1:HdqgGt1OAP0HkEDDShEl0oSYa9ZZBSOmKpdpsDMdO90= From 4ef57201415e204791183582386a8f57d1c258a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 13 Jun 2025 12:17:06 +0200 Subject: [PATCH 62/70] hugolib: Remove test for deprecated future --- hugolib/params_test.go | 38 -------------------------------------- 1 file changed, 38 deletions(-) diff --git a/hugolib/params_test.go b/hugolib/params_test.go index ed8aa37bc..94b832b3e 100644 --- a/hugolib/params_test.go +++ b/hugolib/params_test.go @@ -94,44 +94,6 @@ a/b pages: {{ range $ab.RegularPages }}{{ .Path }}|{{ .RelPermalink }}|{{ end }} ) } -func TestFrontMatterParamsLang(t *testing.T) { - t.Parallel() - - files := ` --- hugo.toml -- -baseURL = "https://example.org/" -disableKinds = ["taxonomy", "term"] -defaultContentLanguage = "en" -defaultContentLanguageInSubdir = true -[languages] -[languages.en] -weight = 1 -[languages.nn] -weight = 2 --- content/p1.md -- ---- -title: "P1 nn" -lang: "nn" ---- --- content/p2.md -- ---- -title: "P2" ---- --- layouts/index.html -- -RegularPages: {{ range site.RegularPages }}{{ .Path }}|{{ .RelPermalink }}|{{ .Title }}|{{ end }}$ - -` - - b := Test(t, files) - - b.AssertFileContent("public/en/index.html", - "RegularPages: /p2|/en/p2/|P2|$", - ) - b.AssertFileContent("public/nn/index.html", - "RegularPages: /p1|/nn/p1/|P1 nn|$", - ) -} - func TestFrontMatterTitleOverrideWarn(t *testing.T) { t.Parallel() From 621ea42f3ce3e7078294edc1c3ef7ae16fe8e699 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Jun 2025 10:19:20 +0000 Subject: [PATCH 63/70] build(deps): bump google.golang.org/api from 0.221.0 to 0.237.0 Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.221.0 to 0.237.0. - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.221.0...v0.237.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-version: 0.237.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 61 +++++++++++++++---------- go.sum | 142 ++++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 128 insertions(+), 75 deletions(-) diff --git a/go.mod b/go.mod index 6535d1a12..1fa93cb5c 100644 --- a/go.mod +++ b/go.mod @@ -76,22 +76,24 @@ require ( golang.org/x/exp v0.0.0-20221031165847-c99f073a8326 golang.org/x/image v0.28.0 golang.org/x/mod v0.25.0 - golang.org/x/net v0.40.0 + golang.org/x/net v0.41.0 golang.org/x/sync v0.15.0 golang.org/x/text v0.26.0 golang.org/x/tools v0.33.0 - google.golang.org/api v0.221.0 + google.golang.org/api v0.237.0 gopkg.in/yaml.v2 v2.4.0 rsc.io/qr v0.2.0 ) require ( - cloud.google.com/go v0.116.0 // indirect - cloud.google.com/go/auth v0.14.1 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect - cloud.google.com/go/compute/metadata v0.6.0 // indirect - cloud.google.com/go/iam v1.2.2 // indirect - cloud.google.com/go/storage v1.43.0 // indirect + cel.dev/expr v0.23.0 // indirect + cloud.google.com/go v0.120.0 // indirect + cloud.google.com/go/auth v0.16.2 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.7.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + cloud.google.com/go/monitoring v1.24.2 // indirect + cloud.google.com/go/storage v1.50.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect @@ -99,6 +101,9 @@ require ( github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.50.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.50.0 // indirect github.com/aws/aws-sdk-go v1.55.5 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 // indirect github.com/aws/aws-sdk-go-v2/config v1.27.27 // indirect @@ -118,9 +123,13 @@ require ( github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 // indirect github.com/aws/smithy-go v1.22.2 // indirect + github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f // indirect github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect github.com/dlclark/regexp2 v1.11.5 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-jose/go-jose/v4 v4.0.5 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect @@ -130,8 +139,8 @@ require ( github.com/google/s2a-go v0.1.9 // indirect github.com/google/uuid v1.6.0 // indirect github.com/google/wire v0.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect - github.com/googleapis/gax-go/v2 v2.14.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect + github.com/googleapis/gax-go/v2 v2.14.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -150,25 +159,31 @@ require ( github.com/olekukonko/ll v0.0.8 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect + github.com/zeebo/errs v1.4.0 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect - go.opentelemetry.io/otel v1.34.0 // indirect - go.opentelemetry.io/otel/metric v1.34.0 // indirect - go.opentelemetry.io/otel/trace v1.34.0 // indirect - golang.org/x/crypto v0.38.0 // indirect - golang.org/x/oauth2 v0.26.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.35.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect + go.opentelemetry.io/otel v1.36.0 // indirect + go.opentelemetry.io/otel/metric v1.36.0 // indirect + go.opentelemetry.io/otel/sdk v1.36.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect + go.opentelemetry.io/otel/trace v1.36.0 // indirect + golang.org/x/crypto v0.39.0 // indirect + golang.org/x/oauth2 v0.30.0 // indirect golang.org/x/sys v0.33.0 // indirect - golang.org/x/time v0.10.0 // indirect + golang.org/x/time v0.12.0 // indirect golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 // indirect - google.golang.org/genproto v0.0.0-20241104194629-dd2ea8efbc28 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250207221924-e9438ea467c6 // indirect - google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.5 // indirect + google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect + google.golang.org/grpc v1.73.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect howett.net/plist v1.0.0 // indirect software.sslmate.com/src/go-pkcs12 v0.2.0 // indirect diff --git a/go.sum b/go.sum index 2ed678f41..4328b73b9 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +cel.dev/expr v0.23.0 h1:wUb94w6OYQS4uXraxo9U+wUAs9jT47Xvl4iPgAwM2ss= +cel.dev/expr v0.23.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -17,26 +19,30 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= -cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= -cloud.google.com/go/auth v0.14.1 h1:AwoJbzUdxA/whv1qj3TLKwh3XX5sikny2fc40wUl+h0= -cloud.google.com/go/auth v0.14.1/go.mod h1:4JHUxlGXisL0AW8kXPtUF6ztuOksyfUQNFjfsOCXkPM= -cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M= -cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc= +cloud.google.com/go v0.120.0 h1:wc6bgG9DHyKqF5/vQvX1CiZrtHnxJjBlKUyF9nP6meA= +cloud.google.com/go v0.120.0/go.mod h1:/beW32s8/pGRuj4IILWQNd4uuebeT4dkOhKmkfit64Q= +cloud.google.com/go/auth v0.16.2 h1:QvBAGFPLrDeoiNjyfVunhQ10HKNYuOwZ5noee0M5df4= +cloud.google.com/go/auth v0.16.2/go.mod h1:sRBas2Y1fB1vZTdurouM0AzuYQBMZinrUYL8EufhtEA= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= -cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= +cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v1.2.2 h1:ozUSofHUGf/F4tCNy/mu9tHLTaxZFLOUiKzjcgWHGIA= -cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY= -cloud.google.com/go/longrunning v0.6.2 h1:xjDfh1pQcWPEvnfjZmwjKQEcHnpz6lHjfy7Fo0MK+hc= -cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= +cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -47,8 +53,10 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= -cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= +cloud.google.com/go/storage v1.50.0 h1:3TbVkzTooBvnZsk7WaAQfOsNrdoM8QHusXA1cpk6QJs= +cloud.google.com/go/storage v1.50.0/go.mod h1:l7XeiD//vx5lfqE3RavfmU9yvk5Pp0Zhcv482poyafY= +cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= +cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 h1:nyQWyZvwGTvunIMxi1Y9uXkcyr+I7TeNrr/foo4Kpk8= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= @@ -71,6 +79,14 @@ github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69/go.mod h1:L1AbZd github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.50.0 h1:5IT7xOdq17MtcdtL/vtl6mGfzhaq4m4vpollPRmlsBQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.50.0/go.mod h1:ZV4VOm0/eHR06JLrXWe09068dHpr3TRpY9Uo7T+anuA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.50.0 h1:nNMpRpnkWDAaqcpxMJvxa/Ud98gjbYwayJY4/9bdjiU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.50.0/go.mod h1:SZiPHWGOOk3bl8tkevxkoiwPgsIl6CwrWcbwjfHZpdM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.50.0 h1:ig/FpDD2JofP/NExKQUbn7uOSZzJAQqogfqluZK4ed4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.50.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/chroma/v2 v2.18.0 h1:6h53Q4hW83SuF+jcsp7CVhLsMozzvQvO8HBbKQW+gn4= @@ -167,6 +183,8 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f h1:C5bqEmzEPLsHm9Mv73lSE9e9bKV23aB1vxOsmZrkl3k= +github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -185,7 +203,15 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= +github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/evanw/esbuild v0.25.5 h1:E+JpeY5S/1LFmnX1vtuZqUKT7qDVcfXdhzMhM3uIKFs= github.com/evanw/esbuild v0.25.5/go.mod h1:D2vIQZqV/vIf/VRHtViaUtViZmG7o+kKmlBfVQuRi48= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -208,6 +234,8 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -317,12 +345,12 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI= github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA= -github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= -github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= -github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= +github.com/googleapis/gax-go/v2 v2.14.2 h1:eBLnkZ9635krYIPD+ag1USrOAI0Nr0QYF3+/3GqO0k0= +github.com/googleapis/gax-go/v2 v2.14.2/go.mod h1:ON64QhlJkhVtSqp4v1uaK92VyZ2gmvDQsweuyLV+8+w= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -412,6 +440,8 @@ github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsK github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -442,6 +472,8 @@ github.com/spf13/fsync v0.10.1 h1:JRnB7G72b+gIBaBcpn5ibJSd7ww1iEahXSX2B8G6dSE= github.com/spf13/fsync v0.10.1/go.mod h1:y+B41vYq5i6Boa3Z+BVoPbDeOvxVkNU5OBXhoT8i4TQ= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -475,6 +507,8 @@ github.com/yuin/goldmark v1.7.12 h1:YwGP/rrea2/CnCtUHgjuolG/PnMxdQtPMO5PvaE2/nY= github.com/yuin/goldmark v1.7.12/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= github.com/yuin/goldmark-emoji v1.0.6 h1:QWfF2FYaXwL74tfGOW5izeiZepUDroDJfWubQI9HTHs= github.com/yuin/goldmark-emoji v1.0.6/go.mod h1:ukxJDKFpdFb5x0a5HqbdlcKtebh086iJpI31LTKmWuA= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -485,20 +519,24 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 h1:PS8wXpbyaDJQ2VDHHncMe9Vct0Zn1fEjpsjrLxGJoSc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0/go.mod h1:HDBUsEjOuRC0EzKZ1bSaRGZWUBAzo+MhAcUUORSr4D0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU= -go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/contrib/detectors/gcp v1.35.0 h1:bGvFt68+KTiAKFlacHW6AhA56GF2rS0bdD3aJYEnmzA= +go.opentelemetry.io/contrib/detectors/gcp v1.35.0/go.mod h1:qGWP8/+ILwMRIUf9uIVLloR1uo5ZYAslM4O6OqUi1DA= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg= +go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= +go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE= +go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= +go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs= +go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= +go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis= +go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4= +go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w= +go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= gocloud.dev v0.40.0 h1:f8LgP+4WDqOG/RXoUcyLpeIAGOcAbZrZbDQCUee10ng= @@ -514,8 +552,8 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= -golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -600,8 +638,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= -golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -611,8 +649,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.26.0 h1:afQXWNNaeC4nvZ0Ed9XvCCzXM6UHJG7iCg0W4fPqSBE= -golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -702,8 +740,8 @@ golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= -golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -783,8 +821,8 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.221.0 h1:qzaJfLhDsbMeFee8zBRdt/Nc+xmOuafD/dbdgGfutOU= -google.golang.org/api v0.221.0/go.mod h1:7sOU2+TL4TxUTdbi0gWgAIg7tH5qBXxoyhtL+9x3biQ= +google.golang.org/api v0.237.0 h1:MP7XVsGZesOsx3Q8WVa4sUdbrsTvDSOERd3Vh4xj/wc= +google.golang.org/api v0.237.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -828,12 +866,12 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20241104194629-dd2ea8efbc28 h1:KJjNNclfpIkVqrZlTWcgOOaVQ00LdBnoEaRfkUx760s= -google.golang.org/genproto v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:mt9/MofW7AWQ+Gy179ChOnvmJatV8YHUmrcedo9CIFI= -google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q= -google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250207221924-e9438ea467c6 h1:2duwAxN2+k0xLNpjnHTXoMUgnv6VPSp5fiqTuwSxjmI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250207221924-e9438ea467c6/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk= +google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 h1:1tXaIXCracvtsRxSBsYDiSBN0cuJvM7QYW+MrpIRY78= +google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:49MsLSx0oWMOZqcpB3uL8ZOkAh1+TndpJ8ONoCBWiZk= +google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 h1:vPV0tzlsK6EzEDHNNH5sa7Hs9bd7iXR7B1tSiPepkV0= +google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:pKLAc5OolXC3ViWGI62vvC0n10CpwAtRcTNCFwTKBEw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -850,8 +888,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= -google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= +google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= +google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -862,8 +900,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= From b6c8dfa9dc4e446bae7d50088fb568939f6ccd4a Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Tue, 17 Jun 2025 07:35:14 -0700 Subject: [PATCH 64/70] tpl/tplimpl: Change resources.GetRemote errors to suppressible warnings Closes #13803 --- tpl/tplimpl/embedded/templates/_shortcodes/twitter.html | 2 +- tpl/tplimpl/embedded/templates/_shortcodes/twitter_simple.html | 2 +- tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html | 2 +- tpl/tplimpl/embedded/templates/_shortcodes/x.html | 2 +- tpl/tplimpl/embedded/templates/_shortcodes/x_simple.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tpl/tplimpl/embedded/templates/_shortcodes/twitter.html b/tpl/tplimpl/embedded/templates/_shortcodes/twitter.html index 849bad99e..c6200ffd2 100644 --- a/tpl/tplimpl/embedded/templates/_shortcodes/twitter.html +++ b/tpl/tplimpl/embedded/templates/_shortcodes/twitter.html @@ -20,7 +20,7 @@ {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}} {{- with try (resources.GetRemote $request) -}} {{- with .Err -}} - {{- errorf "%s" . -}} + {{- warnidf "shortcode-twitter-getremote" "The %q shortcode was unable to retrieve the remote data: %s. See %s" $.ctx.Name . $.ctx.Position -}} {{- else with .Value -}} {{- (. | transform.Unmarshal).html | safeHTML -}} {{- else -}} diff --git a/tpl/tplimpl/embedded/templates/_shortcodes/twitter_simple.html b/tpl/tplimpl/embedded/templates/_shortcodes/twitter_simple.html index e9dcc76ba..34150393d 100644 --- a/tpl/tplimpl/embedded/templates/_shortcodes/twitter_simple.html +++ b/tpl/tplimpl/embedded/templates/_shortcodes/twitter_simple.html @@ -16,7 +16,7 @@ {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}} {{- with try (resources.GetRemote $request) -}} {{- with .Err -}} - {{- errorf "%s" . -}} + {{- warnidf "shortcode-twitter-simple-getremote" "The %q shortcode was unable to retrieve the remote data: %s. See %s" $.ctx.Name . $.ctx.Position -}} {{- else with .Value -}} {{- if not site.Config.Services.Twitter.DisableInlineCSS }} {{- template "__h_simple_twitter_css" (dict "ctx" $.ctx) }} diff --git a/tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html b/tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html index 2e5f88282..a00f3e7f6 100644 --- a/tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html +++ b/tpl/tplimpl/embedded/templates/_shortcodes/vimeo_simple.html @@ -25,7 +25,7 @@ {{- $request := printf "https://vimeo.com/api/oembed.json?%s" $query -}} {{- with try (resources.GetRemote $request) -}} {{- with .Err -}} - {{- errorf "%s" . -}} + {{- warnidf "shortcode-vimeo-simple" "The %q shortcode was unable to retrieve the remote data: %s. See %s" $.ctx.Name . $.ctx.Position -}} {{- else with .Value -}} {{- with . | transform.Unmarshal -}} {{- $class := printf "%s %s" "s_video_simple" "__h_video" -}} diff --git a/tpl/tplimpl/embedded/templates/_shortcodes/x.html b/tpl/tplimpl/embedded/templates/_shortcodes/x.html index 87455530c..38bf0f7b6 100644 --- a/tpl/tplimpl/embedded/templates/_shortcodes/x.html +++ b/tpl/tplimpl/embedded/templates/_shortcodes/x.html @@ -19,7 +19,7 @@ {{- $request := printf "https://publish.x.com/oembed?%s" $query -}} {{- with try (resources.GetRemote $request) -}} {{- with .Err -}} - {{- errorf "%s" . -}} + {{- warnidf "shortcode-x-getremote" "The %q shortcode was unable to retrieve the remote data: %s. See %s" $.ctx.Name . $.ctx.Position -}} {{- else with .Value -}} {{- (. | transform.Unmarshal).html | safeHTML -}} {{- else -}} diff --git a/tpl/tplimpl/embedded/templates/_shortcodes/x_simple.html b/tpl/tplimpl/embedded/templates/_shortcodes/x_simple.html index be7830668..1e22835f6 100644 --- a/tpl/tplimpl/embedded/templates/_shortcodes/x_simple.html +++ b/tpl/tplimpl/embedded/templates/_shortcodes/x_simple.html @@ -15,7 +15,7 @@ {{- $request := printf "https://publish.x.com/oembed?%s" $query -}} {{- with try (resources.GetRemote $request) -}} {{- with .Err -}} - {{- errorf "%s" . -}} + {{- warnidf "shortcode-x-simple-getremote" "The %q shortcode was unable to retrieve the remote data: %s. See %s" $.ctx.Name . $.ctx.Position -}} {{- else with .Value -}} {{- if not site.Config.Services.X.DisableInlineCSS }} {{- template "__h_simple_x_css" (dict "ctx" $.ctx) }} From 18a9ca7d7a03f3162a1b950fa3ba2a5e578fccc7 Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Fri, 20 Jun 2025 10:42:56 -0700 Subject: [PATCH 65/70] tpl/tplimpl: Copy embedded HTML table render hook to each output format Closes #13351 --- tpl/tplimpl/templatestore.go | 19 +++++++-- tpl/tplimpl/templatestore_integration_test.go | 40 +++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/tpl/tplimpl/templatestore.go b/tpl/tplimpl/templatestore.go index bbb7f27cc..23c821cac 100644 --- a/tpl/tplimpl/templatestore.go +++ b/tpl/tplimpl/templatestore.go @@ -1018,7 +1018,7 @@ func (s *TemplateStore) allRawTemplates() iter.Seq[tpl.Template] { } func (s *TemplateStore) insertEmbedded() error { - return fs.WalkDir(embeddedTemplatesFs, ".", func(path string, d fs.DirEntry, err error) error { + return fs.WalkDir(embeddedTemplatesFs, ".", func(tpath string, d fs.DirEntry, err error) error { if err != nil { return err } @@ -1026,7 +1026,7 @@ func (s *TemplateStore) insertEmbedded() error { return nil } - templb, err := embeddedTemplatesFs.ReadFile(path) + templb, err := embeddedTemplatesFs.ReadFile(tpath) if err != nil { return err } @@ -1034,7 +1034,7 @@ func (s *TemplateStore) insertEmbedded() error { // Get the newlines on Windows in line with how we had it back when we used Go Generate // to write the templates to Go files. templ := string(bytes.ReplaceAll(templb, []byte("\r\n"), []byte("\n"))) - name := strings.TrimPrefix(filepath.ToSlash(path), "embedded/templates/") + name := strings.TrimPrefix(filepath.ToSlash(tpath), "embedded/templates/") insertOne := func(name, content string) error { pi := s.opts.PathParser.Parse(files.ComponentFolderLayouts, name) @@ -1064,6 +1064,19 @@ func (s *TemplateStore) insertEmbedded() error { return nil } + // Copy the embedded HTML table render hook to each output format. + // See https://github.com/gohugoio/hugo/issues/13351. + if name == path.Join(containerMarkup, "render-table.html") { + for _, of := range s.opts.OutputFormats { + path := paths.TrimExt(name) + "." + of.Name + of.MediaType.FirstSuffix.FullSuffix + if err := insertOne(path, templ); err != nil { + return err + } + } + + return nil + } + if err := insertOne(name, templ); err != nil { return err } diff --git a/tpl/tplimpl/templatestore_integration_test.go b/tpl/tplimpl/templatestore_integration_test.go index 0b3ce7a56..9da959350 100644 --- a/tpl/tplimpl/templatestore_integration_test.go +++ b/tpl/tplimpl/templatestore_integration_test.go @@ -1508,3 +1508,43 @@ mytexts|safeHTML: {{ partial "mytext.txt" . | safeHTML }} "mytexts|safeHTML:
mytext
", ) } + +func TestIssue13351(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['page','rss','section','sitemap','taxonomy','term'] +[outputs] +home = ['html','json'] +[outputFormats.html] +weight = 1 +[outputFormats.json] +weight = 2 +-- content/_index.md -- +--- +title: home +--- +a|b +:--|:-- +1|2 +-- layouts/index.html -- +{{ .Content }} +-- layouts/index.json -- +{{ .Content }} +` + + b := hugolib.Test(t, files) + b.AssertFileContent("public/index.html", "") + b.AssertFileContent("public/index.json", "
") + + f := strings.ReplaceAll(files, "weight = 1", "weight = 0") + b = hugolib.Test(t, f) + b.AssertFileContent("public/index.html", "
") + b.AssertFileContent("public/index.json", "
") + + f = strings.ReplaceAll(files, "weight = 1", "") + b = hugolib.Test(t, f) + b.AssertFileContent("public/index.html", "
") + b.AssertFileContent("public/index.json", "
") +} From 36f6f987a9962cb838198d98b1601a88b66281dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Thu, 19 Jun 2025 19:52:08 +0200 Subject: [PATCH 66/70] resources/page: Make sure a map is always initialized Fixes #13810 --- resources/page/page_matcher.go | 6 +++--- resources/page/page_matcher_test.go | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/resources/page/page_matcher.go b/resources/page/page_matcher.go index 306c2d03c..858def5ef 100644 --- a/resources/page/page_matcher.go +++ b/resources/page/page_matcher.go @@ -174,6 +174,9 @@ func DecodeCascade(logger loggers.Logger, handleLegacyFormat bool, in any) (*map func mapToPageMatcherParamsConfig(m map[string]any) (PageMatcherParamsConfig, error) { var pcfg PageMatcherParamsConfig + if pcfg.Fields == nil { + pcfg.Fields = make(maps.Params) + } for k, v := range m { switch strings.ToLower(k) { case "_target", "target": @@ -193,9 +196,6 @@ func mapToPageMatcherParamsConfig(m map[string]any) (PageMatcherParamsConfig, er } } default: - if pcfg.Fields == nil { - pcfg.Fields = make(maps.Params) - } pcfg.Fields[k] = v } diff --git a/resources/page/page_matcher_test.go b/resources/page/page_matcher_test.go index ad35da43c..7f441d3ab 100644 --- a/resources/page/page_matcher_test.go +++ b/resources/page/page_matcher_test.go @@ -99,6 +99,7 @@ func TestPageMatcher(t *testing.T) { Params: maps.Params{ "foo": "bar", }, + Fields: maps.Params{}, Target: PageMatcher{Path: "", Kind: "page", Lang: "", Environment: ""}, }) }) @@ -136,9 +137,10 @@ func TestDecodeCascadeConfig(t *testing.T) { c.Assert(got.SourceStructure, qt.DeepEquals, []PageMatcherParamsConfig{ { Params: maps.Params{"a": string("av")}, + Fields: maps.Params{}, Target: PageMatcher{Kind: "page", Environment: "production"}, }, - {Params: maps.Params{"b": string("bv")}, Target: PageMatcher{Kind: "page"}}, + {Params: maps.Params{"b": string("bv")}, Fields: maps.Params{}, Target: PageMatcher{Kind: "page"}}, }) got, err = DecodeCascadeConfig(loggers.NewDefault(), true, nil) From 6a4a3ab8f8d867eaa2ed832c2e10d75b334538c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 22 Jun 2025 13:07:34 +0200 Subject: [PATCH 67/70] Remove WARN with false negatives Fixes #13806 --- hugolib/cascade_test.go | 27 +++++++++++++++++++++++++++ hugolib/page__meta.go | 4 ---- hugolib/params_test.go | 22 ---------------------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/hugolib/cascade_test.go b/hugolib/cascade_test.go index fb9dffd15..3e3e471b7 100644 --- a/hugolib/cascade_test.go +++ b/hugolib/cascade_test.go @@ -938,3 +938,30 @@ path = '/p1' b.AssertFileContent("public/p1/index.html", "p1|bar") // actual content is "p1|" } + +func TestCascadeWarnOverrideIssue13806(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['home','rss','section','sitemap','taxonomy','term'] +[[cascade]] +[cascade.params] +searchable = true +[cascade.target] +kind = 'page' +-- content/something.md -- +--- +title: Something +params: + searchable: false +--- +-- layouts/all.html -- +All. + +` + + b := Test(t, files, TestOptWarn()) + + b.AssertLogContains("! WARN") +} diff --git a/hugolib/page__meta.go b/hugolib/page__meta.go index 0d6d22e9a..1af489f18 100644 --- a/hugolib/page__meta.go +++ b/hugolib/page__meta.go @@ -29,7 +29,6 @@ import ( "github.com/gohugoio/hugo/source" - "github.com/gohugoio/hugo/common/constants" "github.com/gohugoio/hugo/common/hashing" "github.com/gohugoio/hugo/common/hugo" "github.com/gohugoio/hugo/common/loggers" @@ -647,9 +646,6 @@ params: } for k, v := range userParams { - if _, found := params[k]; found { - p.s.Log.Warnidf(constants.WarnFrontMatterParamsOverrides, "Hugo front matter key %q is overridden in params section.", k) - } params[strings.ToLower(k)] = v } diff --git a/hugolib/params_test.go b/hugolib/params_test.go index 94b832b3e..7f7566024 100644 --- a/hugolib/params_test.go +++ b/hugolib/params_test.go @@ -94,28 +94,6 @@ a/b pages: {{ range $ab.RegularPages }}{{ .Path }}|{{ .RelPermalink }}|{{ end }} ) } -func TestFrontMatterTitleOverrideWarn(t *testing.T) { - t.Parallel() - - files := ` --- hugo.toml -- -baseURL = "https://example.org/" -disableKinds = ["taxonomy", "term"] --- content/p1.md -- ---- -title: "My title" -params: - title: "My title from params" ---- - - -` - - b := Test(t, files, TestOptWarn()) - - b.AssertLogContains("ARN Hugo front matter key \"title\" is overridden in params section", "You can suppress this warning") -} - func TestFrontMatterParamsLangNoCascade(t *testing.T) { t.Parallel() From 29bdbde19c288d190e889294a862103c6efb70bf Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Mon, 23 Jun 2025 08:22:20 +0000 Subject: [PATCH 68/70] releaser: Bump versions for release of 0.147.9 [ci skip] --- common/hugo/version_current.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index ba367ceb5..ccd0666ab 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 148, - PatchLevel: 0, - Suffix: "-DEV", + Minor: 147, + PatchLevel: 9, + Suffix: "", } From 762417617c80f6ccd8b3d283c89d7b2406be6b23 Mon Sep 17 00:00:00 2001 From: hugoreleaser Date: Mon, 23 Jun 2025 08:38:21 +0000 Subject: [PATCH 69/70] releaser: Prepare repository for 0.148.0-DEV [ci skip] --- common/hugo/version_current.go | 6 +++--- hugoreleaser.env | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common/hugo/version_current.go b/common/hugo/version_current.go index ccd0666ab..ba367ceb5 100644 --- a/common/hugo/version_current.go +++ b/common/hugo/version_current.go @@ -17,7 +17,7 @@ package hugo // This should be the only one. var CurrentVersion = Version{ Major: 0, - Minor: 147, - PatchLevel: 9, - Suffix: "", + Minor: 148, + PatchLevel: 0, + Suffix: "-DEV", } diff --git a/hugoreleaser.env b/hugoreleaser.env index fe49380b0..6da749524 100644 --- a/hugoreleaser.env +++ b/hugoreleaser.env @@ -1,7 +1,8 @@ # Release env. # These will be replaced by script before release. -HUGORELEASER_TAG=v0.147.8 -HUGORELEASER_COMMITISH=10da2bd765d227761641f94d713d094e88b920ae +HUGORELEASER_TAG=v0.147.9 +HUGORELEASER_COMMITISH=29bdbde19c288d190e889294a862103c6efb70bf + From dd6e2c87241d5b5f3bd581c1bd7d3ae282f7bc62 Mon Sep 17 00:00:00 2001 From: David Jones Date: Sun, 29 Jun 2025 15:41:56 +0100 Subject: [PATCH 70/70] deploy: walkLocal worker pool for performance --- deploy/deploy.go | 83 +++++++++++++++++++++++++------------------ deploy/deploy_test.go | 13 +++---- 2 files changed, 56 insertions(+), 40 deletions(-) diff --git a/deploy/deploy.go b/deploy/deploy.go index 4b90881a6..57e1f41a2 100644 --- a/deploy/deploy.go +++ b/deploy/deploy.go @@ -36,6 +36,7 @@ import ( "github.com/dustin/go-humanize" "github.com/gobwas/glob" "github.com/gohugoio/hugo/common/loggers" + "github.com/gohugoio/hugo/common/para" "github.com/gohugoio/hugo/config" "github.com/gohugoio/hugo/deploy/deployconfig" "github.com/gohugoio/hugo/media" @@ -487,7 +488,12 @@ func knownHiddenDirectory(name string) bool { // walkLocal walks the source directory and returns a flat list of files, // using localFile.SlashPath as the map keys. func (d *Deployer) walkLocal(fs afero.Fs, matchers []*deployconfig.Matcher, include, exclude glob.Glob, mediaTypes media.Types, mappath func(string) string) (map[string]*localFile, error) { - retval := map[string]*localFile{} + retval := make(map[string]*localFile) + var mu sync.Mutex + + workers := para.New(d.cfg.Workers) + g, _ := workers.Start(context.Background()) + err := afero.Walk(fs, "", func(path string, info os.FileInfo, err error) error { if err != nil { return err @@ -508,45 +514,54 @@ func (d *Deployer) walkLocal(fs afero.Fs, matchers []*deployconfig.Matcher, incl return nil } - // When a file system is HFS+, its filepath is in NFD form. - if runtime.GOOS == "darwin" { - path = norm.NFC.String(path) - } - - // Check include/exclude matchers. - slashpath := filepath.ToSlash(path) - if include != nil && !include.Match(slashpath) { - d.logger.Infof(" dropping %q due to include\n", slashpath) - return nil - } - if exclude != nil && exclude.Match(slashpath) { - d.logger.Infof(" dropping %q due to exclude\n", slashpath) - return nil - } - - // Find the first matching matcher (if any). - var m *deployconfig.Matcher - for _, cur := range matchers { - if cur.Matches(slashpath) { - m = cur - break + // Process each file in a worker + g.Run(func() error { + // When a file system is HFS+, its filepath is in NFD form. + if runtime.GOOS == "darwin" { + path = norm.NFC.String(path) } - } - // Apply any additional modifications to the local path, to map it to - // the remote path. - if mappath != nil { - slashpath = mappath(slashpath) - } - lf, err := newLocalFile(fs, path, slashpath, m, mediaTypes) - if err != nil { - return err - } - retval[lf.SlashPath] = lf + + // Check include/exclude matchers. + slashpath := filepath.ToSlash(path) + if include != nil && !include.Match(slashpath) { + d.logger.Infof(" dropping %q due to include\n", slashpath) + return nil + } + if exclude != nil && exclude.Match(slashpath) { + d.logger.Infof(" dropping %q due to exclude\n", slashpath) + return nil + } + + // Find the first matching matcher (if any). + var m *deployconfig.Matcher + for _, cur := range matchers { + if cur.Matches(slashpath) { + m = cur + break + } + } + // Apply any additional modifications to the local path, to map it to + // the remote path. + if mappath != nil { + slashpath = mappath(slashpath) + } + lf, err := newLocalFile(fs, path, slashpath, m, mediaTypes) + if err != nil { + return err + } + mu.Lock() + retval[lf.SlashPath] = lf + mu.Unlock() + return nil + }) return nil }) if err != nil { return nil, err } + if err := g.Wait(); err != nil { + return nil, err + } return retval, nil } diff --git a/deploy/deploy_test.go b/deploy/deploy_test.go index 3bbc9ff70..bdc8299a0 100644 --- a/deploy/deploy_test.go +++ b/deploy/deploy_test.go @@ -623,7 +623,7 @@ func TestEndToEndSync(t *testing.T) { localFs: test.fs, bucket: test.bucket, mediaTypes: media.DefaultTypes, - cfg: deployconfig.DeployConfig{MaxDeletes: -1}, + cfg: deployconfig.DeployConfig{Workers: 2, MaxDeletes: -1}, } // Initial deployment should sync remote with local. @@ -706,7 +706,7 @@ func TestMaxDeletes(t *testing.T) { localFs: test.fs, bucket: test.bucket, mediaTypes: media.DefaultTypes, - cfg: deployconfig.DeployConfig{MaxDeletes: -1}, + cfg: deployconfig.DeployConfig{Workers: 2, MaxDeletes: -1}, } // Sync remote with local. @@ -836,7 +836,7 @@ func TestIncludeExclude(t *testing.T) { } deployer := &Deployer{ localFs: fsTest.fs, - cfg: deployconfig.DeployConfig{MaxDeletes: -1}, bucket: fsTest.bucket, + cfg: deployconfig.DeployConfig{Workers: 2, MaxDeletes: -1}, bucket: fsTest.bucket, target: tgt, mediaTypes: media.DefaultTypes, } @@ -893,7 +893,7 @@ func TestIncludeExcludeRemoteDelete(t *testing.T) { } deployer := &Deployer{ localFs: fsTest.fs, - cfg: deployconfig.DeployConfig{MaxDeletes: -1}, bucket: fsTest.bucket, + cfg: deployconfig.DeployConfig{Workers: 2, MaxDeletes: -1}, bucket: fsTest.bucket, mediaTypes: media.DefaultTypes, } @@ -945,7 +945,7 @@ func TestCompression(t *testing.T) { deployer := &Deployer{ localFs: test.fs, bucket: test.bucket, - cfg: deployconfig.DeployConfig{MaxDeletes: -1, Matchers: []*deployconfig.Matcher{{Pattern: ".*", Gzip: true, Re: regexp.MustCompile(".*")}}}, + cfg: deployconfig.DeployConfig{Workers: 2, MaxDeletes: -1, Matchers: []*deployconfig.Matcher{{Pattern: ".*", Gzip: true, Re: regexp.MustCompile(".*")}}}, mediaTypes: media.DefaultTypes, } @@ -1000,7 +1000,7 @@ func TestMatching(t *testing.T) { deployer := &Deployer{ localFs: test.fs, bucket: test.bucket, - cfg: deployconfig.DeployConfig{MaxDeletes: -1, Matchers: []*deployconfig.Matcher{{Pattern: "^subdir/aaa$", Force: true, Re: regexp.MustCompile("^subdir/aaa$")}}}, + cfg: deployconfig.DeployConfig{Workers: 2, MaxDeletes: -1, Matchers: []*deployconfig.Matcher{{Pattern: "^subdir/aaa$", Force: true, Re: regexp.MustCompile("^subdir/aaa$")}}}, mediaTypes: media.DefaultTypes, } @@ -1097,5 +1097,6 @@ func verifyRemote(ctx context.Context, bucket *blob.Bucket, local []*fileData) ( func newDeployer() *Deployer { return &Deployer{ logger: loggers.NewDefault(), + cfg: deployconfig.DeployConfig{Workers: 2}, } }