");--input-focus-border-color:Highlight;--input-focus-outline:1px solid Canvas;--input-unfocused-border-color:transparent;--input-disabled-border-color:transparent;--input-hover-border-color:black;--link-outline:none}@media screen and (forced-colors:active){:root{--input-focus-border-color:CanvasText;--input-unfocused-border-color:ActiveText;--input-disabled-border-color:GrayText;--input-hover-border-color:Highlight;--link-outline:1.5px solid LinkText}}:root{--react-pdf-text-layer:1;--highlight-bg-color:rgba(180, 0, 170, 1);--highlight-selected-bg-color:rgba(0, 100, 0, 1)}@media screen and (forced-colors:active){:root{--highlight-bg-color:Highlight;--highlight-selected-bg-color:ButtonText}}._wrapper_4ijce_1{background-color:#3f51b5;border:1px solid #3f51b5;clear:both}._menubar_4ijce_7{position:sticky;top:-1px;z-index:10;padding-block-start:.2em;padding-block-end:.2em;background-color:#3f51b5;color:#f0f0f0;user-select:none}._menubar_4ijce_7 ._central_4ijce_17{display:flex;gap:.2em;justify-content:center;align-items:baseline;font-variant-numeric:lining-nums tabular-nums}._menubar_4ijce_7 ._left_4ijce_24{position:absolute;left:0;top:.25em;padding-left:.2em}._menubar_4ijce_7 ._right_4ijce_30{position:absolute;right:0;top:.25em;padding-right:.4em}._menubar_4ijce_7 ._page-viewer-container_4ijce_36{display:inline-flex;align-items:stretch;gap:.2em}._menubar_4ijce_7 ._page-viewer_4ijce_36{border:1px solid #f0f0f0;display:inline-block;padding-inline:.2em;padding-block-end:.1em;min-width:1ch;text-align:center;user-select:all}._menubar_4ijce_7 ._page-viewer_4ijce_36:focus{border-color:#ffba67;color:#ffba67;caret-color:#fff}@media (hover:hover){._menubar_4ijce_7 a:hover{color:#ffba67}}._menubar_4ijce_7 button{border:0 solid transparent;background-color:transparent;color:gray;font-size:1rem}._menubar_4ijce_7 button:not([disabled]){color:#f0f0f0;cursor:pointer}@media (hover:hover){._menubar_4ijce_7 button:not([disabled]):hover{color:#ffba67}}._loader_4ijce_76{text-align:center;background-color:#fff;color:gray}._loader_4ijce_76>span{display:inline-block;position:sticky;top:1.5rem;padding-top:2rem}._bibtex_vg9s2_1{display:none;float:right;margin-left:1rem;background-color:#f0f0f0;font-size:.8rem;max-width:min(25em,40vw);position:relative}@media screen and (min-width:38em){._bibtex_vg9s2_1{display:block}}._bibtex_vg9s2_1 ._commands_vg9s2_15{position:absolute;right:0;top:0}._bibtex_vg9s2_1 ._commands_vg9s2_15 ._copy_vg9s2_20{display:inline-block;padding-block-start:.2em;padding-block-end:.3em;padding-inline:.3em;background-color:#fff;border:1px solid #606060;cursor:pointer}._bibtex_vg9s2_1 .highlight{margin:0!important}._bibtex_vg9s2_1 .highlight pre{border:0 none transparent!important;white-space:pre!important;padding-block-start:.2rem;padding-block-end:.4rem;overflow-x:scroll}._bibtex_vg9s2_1 .highlight pre .line-number{display:none!important}body{counter-reset:katexEqnNo mmlEqnNo}:root{--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#6639ba;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-invalid-illegal-text:#f6f8fa;--color-prettylights-syntax-invalid-illegal-bg:#82071e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-italic:#24292f;--color-prettylights-syntax-markup-bold:#24292f;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-ignored-text:#eaeef2;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-brackethighlighter-angle:#57606a;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant-other-reference-link:#0a3069}.pl-en{color:var(--color-prettylights-syntax-entity)}.pl-k{color:var(--color-prettylights-syntax-keyword)}.pl-pds,.pl-s{color:var(--color-prettylights-syntax-string)}._header_opib5_1{font-family:Cinzel Variable,serif;font-size:1.25rem;position:relative;color:#fff;background-color:#3f51b5;padding-inline:2.4rem;padding-block-start:.3rem}@media screen and (min-width:38em){._header_opib5_1{padding-inline:3rem;font-size:1.1rem}}._header_opib5_1 ._toggle_opib5_16{font-size:1.5rem;position:absolute;left:.3em;top:.3em;cursor:pointer}@media (hover:hover){._header_opib5_1 ._toggle_opib5_16 :hover{color:#ffba67}}@media screen and (min-width:38em){._header_opib5_1 ._toggle_opib5_16{display:none}}._header_opib5_1>ul{list-style:none;display:flex;flex-direction:column;align-items:center;gap:.2rem}@media screen and (min-width:38em){._header_opib5_1>ul{flex-direction:row;align-items:stretch;gap:1em}}._header_opib5_1>ul>li a{display:flex;align-items:center;height:100%;color:#fff;border-bottom:.2rem solid transparent}@media (hover:hover){._header_opib5_1>ul>li a:hover{color:#ffba67;border-bottom-color:#ffba67}}._header_opib5_1>ul>li:not(:first-child) a{padding-bottom:.2em}@media screen and (min-width:38em){._header_opib5_1>ul>li:not(:first-child) a{padding:0}}._header_opib5_1 ._site-name_opib5_68{position:relative;font-size:1.5rem;font-weight:700;line-height:1.5em}@media not screen and (min-width:38em){._header_opib5_1:not(._open_opib5_75)>ul>li:not(:first-child){display:none}}body,html{position:absolute;inset:0;overflow:hidden}body,h1,h2,html,p,ul{padding:0;margin:0}html{font-size:16px}@media screen and (min-width:58em){html{font-size:24px}}a{color:inherit;text-decoration:inherit}*{box-sizing:border-box}body{position:absolute;inset:0;display:grid;grid-template-rows:auto 1fr;overflow:hidden}._container_1th49_55{font-family:"Exo 2 Variable",sans-serif;display:flex;flex-direction:column;font-size:1rem;overflow:auto;position:relative}._footer_1th49_64{flex:0 0 auto;color:#fff;background-color:#3f51b5;text-align:center;padding:.2rem .2rem .3rem;position:relative;user-select:none}._footer_1th49_64 ._icons_1th49_74{display:none}@media screen and (min-width:38em){._footer_1th49_64 ._icons_1th49_74{display:flex;gap:.3em;position:absolute;left:3rem;bottom:.25rem;text-align:left}}@media screen and (min-width:58em){._footer_1th49_64{font-size:.8rem}}._footer_1th49_64 a{color:#fff;text-decoration:none}@media (hover:hover){._footer_1th49_64 a:hover{color:#ffba67}}._main_1th49_102{flex:1 0 auto;color:#303030;max-width:100em;margin:1rem}@media screen and (min-width:38em){._main_1th49_102{margin:2rem 3rem}}._main_1th49_102>h1:first-child{margin-top:-2rem;padding-top:2rem}._main_1th49_102 a.a{color:#3f51b5}@media (hover:hover){._main_1th49_102 a.a:hover .a{text-decoration:underline;text-underline-offset:.1em;text-decoration-thickness:.1em}}._main_1th49_102 h1{font-size:2.25rem;padding-top:1.5rem;padding-bottom:.75rem;font-weight:400}._main_1th49_102 h2{font-size:1.75rem;padding-top:1rem;padding-bottom:.5rem;font-weight:400}._main_1th49_102 h1,._main_1th49_102 h2{text-align:center}@media screen and (min-width:38em){._main_1th49_102 h1,._main_1th49_102 h2{text-align:left}}._main_1th49_102 h2>a.a{position:relative;color:#303030;border-bottom:0 solid transparent;margin-bottom:0}@media (hover:hover){._main_1th49_102 h2>a.a:hover:before{content:"§";font-weight:400;color:gray;position:absolute;left:-.8em}}._main_1th49_102 p{text-align:justify;hyphens:auto;margin-bottom:.5em}._main_1th49_102 .highlight{margin-block-end:.75em}._main_1th49_102 .highlight .highlight-header{display:none}._main_1th49_102 .highlight pre{border:1px solid #606060;margin:0;white-space:pre-wrap;user-select:contain}._main_1th49_102 .highlight pre>code{font-family:Roboto Mono Variable,monospace;line-height:1.3em;tab-size:2}._main_1th49_102 .highlight pre:not(.one-line)>code{display:table}._main_1th49_102 .highlight pre:not(.one-line)>code .line{display:table-row}._main_1th49_102 .highlight pre:not(.one-line)>code .line .line-number{border-inline-start:2px solid #F0F0F0;display:table-cell;user-select:none;height:100%;padding-inline-start:1em;padding-inline-end:.5em;color:var(--color-prettylights-syntax-sublimelinter-gutter-mark);background-color:#f0f0f0}._main_1th49_102 .highlight pre:not(.one-line)>code .line .text{display:table-cell;width:100%;padding-inline:.5em;overflow-wrap:anywhere}._main_1th49_102 .highlight pre:not(.one-line)>code .line .text .indent{white-space:pre}@media (hover:hover){._main_1th49_102 .highlight pre:not(.one-line)>code .line:hover{background-color:#f0f0f0}._main_1th49_102 .highlight pre:not(.one-line)>code .line:hover .line-number{color:#000;border-inline-start:2px solid #606060;background-color:#e0e0e0}}@font-face{font-family:Cinzel Variable;font-style:normal;font-display:swap;font-weight:400 900;src:url(/_astro/cinzel-latin-ext-wght-normal.df743b35.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Cinzel Variable;font-style:normal;font-display:swap;font-weight:400 900;src:url(/_astro/cinzel-latin-wght-normal.0d83a0dd.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-ext-wght-normal.acd53546.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-wght-normal.20ac558a.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-vietnamese-wght-normal.fe43473f.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-ext-wght-normal.28963b9a.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-wght-normal.c9c1cace.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-ext-wght-italic.6597ae35.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-wght-italic.f583ba82.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-vietnamese-wght-italic.05441a1e.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-ext-wght-italic.2e8f205b.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-wght-italic.1ee6f390.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Academicons;font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,d09GMgABAAAAAARgAAwAAAAABtAAAAQTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAATAgEEQgKhyiGAAsMAAE2AiQDFAQgBYFmByAbSwXILgpsY9rgDQcEHWs2s/qWB5G3hYd4gF/337mDv7Mmq5SQYCUyOQJM66q076e8zze7nvzvwaoEF/QtaZ1pHVTmbeFjAerk9PqlZZh6gEkUWZRoWqvUNJIDJxxJYLkEGFEEx5tt8lLQ2F/Afvqjv0iCudCPSXlcs5NqRS3Wvjo2lmsFqU9QKah3rN0RQXy3dpCE2yEhJQwKU4C+jv+tvBVFJI3BccV837Ap45LgBnN5EzZ3S5NwDboBYdqp5k+JYpRKachhot03CshEou9zWcTz729yOeqFZWKLWA/W5SxYPPQiYdXuEUhBAZQg9AFhDoCFiIjli1ekbaSiDktG7ZnX2Io2jppe5Ho9OJfSeaFotyQkneoEj6qvy6TjPJ1oRMMqmz8XLTF4aGdj02bepapSmfEamTss1Bxh6tyO2oaNdCWjgpvhFAsVVIclpZZPIoWb88RB+UADk7Wr1lcuqVhXtXQeKgC7yhhY7XgAltQ/KO0ahLGnkNL5UH9SVO+QdWEqxjpv6k6A/Ts0jFXDQEiR0NSdsDNQsGQPXkJoOLoRlpy+cAar+0h1E1IO88MTMp5rWL3WRDi0YK2KXbfpe/ZQtncv1XlwGSl9FJaqTiFl26FxzNjBg9Jz+dBBWFJP0/ZgjCTx3nDsetPc0K9qsl55GCmnLmEMBdfv5+EPGHbec1SL1mD9yqRIKC0Qoc8LB15H86cse1Tz3qRu2jhsWEWzuGDpVjUmNBQXjR58ZUb8o7WppRuX5Cw+fmxQVOveeeOSIpbMT17RIXy3x+6VS8oSxpbWPxkVj2rrO3Uog8LPRabMYTu50W7dXG4pUnb9ErK1CWljKyrKA8tEec3DLWvoFa+detZkYuoZnfCkRW3aF7UMdlT9Ux6Vqt28ebuMDl0y2oW0bJc+e9zLXNnwjyj0tl7rYOyomf5LPduO9kw8RtfyXIp9nCshsLCU/XjTrzO2pt1LNpiPi5WZ3becWLdvHH6vKLv+PL/9RlEMivOtdqClZzx/aW5Vl+m/qp9meUXPHvJx2L4s+GeFNS3Iu36Hvn1au4LjI4jz7FEXmUpcu4+4oHc0YNXcVq3npfyYV6b9xnZ048nn3/uRiodVHhb5tCb6ZJcdl52XP1z5Xcpu/MOfdlPr0wPe6QaonbsdGl2EgPBlyp3v3SfW3ulrVtAD4J17bwR8Hh35/3/uVhToCpCZigPh2kdFY2gGgHuzwRpSVxUPt9SOyIIMpfIbCEiTZOUAEYKAbroD8pnAU0j8AdRKUMZ8JVLENCU2SMh8Mq+kKkHzxi6bL1mBQuly5WipuSbaa6KVavr0aVEeFUiVDEmLcdDMWh1U012ieEmSZUuXaKVVCEbNNdYmhi00e5aWRkiWqliWeAW7TE9OK/dOeQ==) format("woff2")}.ai{font-family:Academicons;font-weight:400;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.ai-arxiv:before{content:""}.ai-doi:before{content:""}.ai-google-scholar:before{content:""}.ai-orcid:before{content:""}:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,d09GMgABAAAAAANgAAoAAAAABkQAAAMWAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAPAqFGIQRCwgAATYCJAMMBCAFgzQHIBsGBREVm0XJfiTYNqrXDlXuZTcJ/9GD5/nvzHPfTLLgLMwS+OoXk9JJCtgJgKN5P5Z8cXRDaOwAJ64J/FGAkfb3gE/64kVV/OfDDUcFVgJ5Xm3VNhyORzRzVxvaQ9bKg/KQpGvJzw7o8kSmYAKpI92A6jrzWygjQGHSUMyXM6jYvHFdDn6c9XGOHHQeBDlIBUDQM0rKMiAGAAVoQAAaAot1UgBzKig4czqhVj6dT3cEAzUEZsAN2V3gO4CeCEFwLekGdHEr7G5DrGJpcjX1ud7M5nGj/va01WEMjA9+Z5QsS9wdNyd8X81TTe2yIH1N8bbUHelzS6xIXpnSfIb7OHF4jA9MmhFoC3YE2QOKZ2DzcIjdvfXVJpLzrlU81HRZkFVYPi5hadLyMGuQ/fxkR6AtdJXH+OA5wdtL7W5mDXYE28Nmh69IXBZolRUe4xOn/o7AWSEzA2yBNuaGrAT3SrBFWrAwI/lG5SPNr1c6XOt0sxYXgyBLt8oGjT7zdLLZDFSPqxxbuVJGxYwO0pJqmRu9ajEwZ/r0+RZ3n8PVe/c2q9pT96d43ug/qE9FLdzT49y9jQ8fFD06qj852/45y/I03awr3aSeqIoVlFahijdV0JWpopYzpJdUrkz8LulJkwcP6oT6euoewcFKfAsKB6jBg3b4NusKR48sCgsM2la8a5OmpGpAmzp7Ag1jrN/gCX5wMzbmpZzY8e375rGGkbinT58An+8mh+PQb5UY6WXy9K0d+uACTahqDho6qSrTWxhxcQZJ/GJXqNgYEaGh/OLzYpXA2Gf4x8X8U3wsMQA4r8lH2YmAppvIWuQd3t6nzDdXDwXAw/cfH7atnAeVRQ4CrigABP7zF8ri/On8pIYh2L6aWEAB8hEQQNNLkAzWIhxvxIVWaIjuBhRI0mCFUrxlFd7cZzWqMbNc37MmuTJeRRuIauty+W99rnNtBUe+VDMhRmR7T6OOrD7OHnsMbFuTFNU1dVUzgfGuBlILj4PpCWlJRrMai9Ra8JgSlItcvCyV36pw3f6jbzu8d0zJQvEIU3PeCQUA) format("woff2")}.fab{font-weight:400}.fa-github:before{content:""}.fa-twitter:before{content:""}:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,d09GMgABAAAAAAIYAAoAAAAABFgAAAHOAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAANAqBRIE1CwYAATYCJAMIBCAFgygHIBuSA8iuBmxjIvYwFrNBOfvBPOssP0JYF8H3c+S+5B8QSGRHWIXsK+yNL7Cucs34OmKhgHQuxtUewASheTo7wOQQ3aFSbrpDw3/zmFmeqgfQxtgo+ZPFAOATNzNuceCRJjT2tMC7aIH1/4rTXjdvwrd2lo/7hKxi0Q3XD8oOUrzjgQriKAR2x2/9r8eMTEUOAJoBgPWzJ0+4/vJLFGVBFNaAgFiNHYYBMuRohxJohzYMJEnwS1mWDiBAAEiclzVgB4AEyOu5gzdr60Stukgx8/Zo3eMXEePO+LPa2u3IEeRm9FR8KYhMs4YIT9rtCARxeLv43qjx+53NzZeN319MX7cwam/tX87wS/sd16G2+88vqwKJoq1oZrjxIxF2OoAgTxj4ObTz6ir+V9chAb7/+LVvpyyy4yhQLQPB76rsmIYOIMxixB+CQJakKCAQAgBUuQAlEgFYCOFGwpJ/JNPoLZLbMB8njlS4xfT8lWaAHTVVbV49GS01FRkOIU0ZGXphGTkdZQlNcRlNLQU1VSJOThYGJmZudlZmFnYiqtg5EZYi3QDBA8DBwLaphVrJHERPYYnGer1/HSLqn/nV1A00FeTktYmopKiJYKFMvPKTHgA=) format("woff2")}.far{font-weight:400}:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(data:font/woff2;base64,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) format("woff2")}.fa{font-family:var(--fa-style-family, "Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fab,.far{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.far{font-family:"Font Awesome 6 Free"}.fab{font-family:"Font Awesome 6 Brands"}.fa-4x{font-size:4em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}@media (prefers-reduced-motion:reduce){.fa-spin{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-copy:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-bars:before{content:""}.fa-circle-notch:before{content:""}.fa-circle-play:before{content:""}.fa-code-branch:before{content:""}.fa-download:before{content:""}.fa-external-link:before{content:""}.fa-file-pdf:before{content:""}.fa-list:before{content:""}._header_opib5_1{font-family:Cinzel Variable,serif;font-size:1.25rem;position:relative;color:#fff;background-color:#3f51b5;padding-inline:2.4rem;padding-block-start:.3rem}@media screen and (min-width:38em){._header_opib5_1{padding-inline:3rem;font-size:1.1rem}}._header_opib5_1 ._toggle_opib5_16{font-size:1.5rem;position:absolute;left:.3em;top:.3em;cursor:pointer}@media (hover:hover){._header_opib5_1 ._toggle_opib5_16 :hover{color:#ffba67}}@media screen and (min-width:38em){._header_opib5_1 ._toggle_opib5_16{display:none}}._header_opib5_1>ul{list-style:none;display:flex;flex-direction:column;align-items:center;gap:.2rem}@media screen and (min-width:38em){._header_opib5_1>ul{flex-direction:row;align-items:stretch;gap:1em}}._header_opib5_1>ul>li a{display:flex;align-items:center;height:100%;color:#fff;border-bottom:.2rem solid transparent}@media (hover:hover){._header_opib5_1>ul>li a:hover{color:#ffba67;border-bottom-color:#ffba67}}._header_opib5_1>ul>li:not(:first-child) a{padding-bottom:.2em}@media screen and (min-width:38em){._header_opib5_1>ul>li:not(:first-child) a{padding:0}}._header_opib5_1 ._site-name_opib5_68{position:relative;font-size:1.5rem;font-weight:700;line-height:1.5em}@media not screen and (min-width:38em){._header_opib5_1:not(._open_opib5_75)>ul>li:not(:first-child){display:none}}._bibtex_vg9s2_1{display:none;float:right;margin-left:1rem;background-color:#f0f0f0;font-size:.8rem;max-width:min(25em,40vw);position:relative}@media screen and (min-width:38em){._bibtex_vg9s2_1{display:block}}._bibtex_vg9s2_1 ._commands_vg9s2_15{position:absolute;right:0;top:0}._bibtex_vg9s2_1 ._commands_vg9s2_15 ._copy_vg9s2_20{display:inline-block;padding-block-start:.2em;padding-block-end:.3em;padding-inline:.3em;background-color:#fff;border:1px solid #606060;cursor:pointer}._bibtex_vg9s2_1 .highlight{margin:0!important}._bibtex_vg9s2_1 .highlight pre{border:0 none transparent!important;white-space:pre!important;padding-block-start:.2rem;padding-block-end:.4rem;overflow-x:scroll}._bibtex_vg9s2_1 .highlight pre .line-number{display:none!important}._links_11h5g_1{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:baseline;align-content:flex-start;font-size:1rem;column-gap:.3rem;row-gap:.2rem;padding-bottom:.75rem}._links_11h5g_1>a{border:1px solid #606060;padding-inline:.4em;padding-block:.2em}@media screen and (min-width:38em){._links_11h5g_1>a{padding-inline:.2em;padding-block:0}}._links_11h5g_1>a:hover{background-color:#f0f0f0}:root{--react-pdf-annotation-layer:1;--annotation-unfocused-field-background:url("data:image/svg+xml;charset=UTF-8,");--input-focus-border-color:Highlight;--input-focus-outline:1px solid Canvas;--input-unfocused-border-color:transparent;--input-disabled-border-color:transparent;--input-hover-border-color:black;--link-outline:none}@media screen and (forced-colors:active){:root{--input-focus-border-color:CanvasText;--input-unfocused-border-color:ActiveText;--input-disabled-border-color:GrayText;--input-hover-border-color:Highlight;--link-outline:1.5px solid LinkText}}:root{--react-pdf-text-layer:1;--highlight-bg-color:rgba(180, 0, 170, 1);--highlight-selected-bg-color:rgba(0, 100, 0, 1)}@media screen and (forced-colors:active){:root{--highlight-bg-color:Highlight;--highlight-selected-bg-color:ButtonText}}._wrapper_4ijce_1{background-color:#3f51b5;border:1px solid #3f51b5;clear:both}._menubar_4ijce_7{position:sticky;top:-1px;z-index:10;padding-block-start:.2em;padding-block-end:.2em;background-color:#3f51b5;color:#f0f0f0;user-select:none}._menubar_4ijce_7 ._central_4ijce_17{display:flex;gap:.2em;justify-content:center;align-items:baseline;font-variant-numeric:lining-nums tabular-nums}._menubar_4ijce_7 ._left_4ijce_24{position:absolute;left:0;top:.25em;padding-left:.2em}._menubar_4ijce_7 ._right_4ijce_30{position:absolute;right:0;top:.25em;padding-right:.4em}._menubar_4ijce_7 ._page-viewer-container_4ijce_36{display:inline-flex;align-items:stretch;gap:.2em}._menubar_4ijce_7 ._page-viewer_4ijce_36{border:1px solid #f0f0f0;display:inline-block;padding-inline:.2em;padding-block-end:.1em;min-width:1ch;text-align:center;user-select:all}._menubar_4ijce_7 ._page-viewer_4ijce_36:focus{border-color:#ffba67;color:#ffba67;caret-color:#fff}@media (hover:hover){._menubar_4ijce_7 a:hover{color:#ffba67}}._menubar_4ijce_7 button{border:0 solid transparent;background-color:transparent;color:gray;font-size:1rem}._menubar_4ijce_7 button:not([disabled]){color:#f0f0f0;cursor:pointer}@media (hover:hover){._menubar_4ijce_7 button:not([disabled]):hover{color:#ffba67}}._loader_4ijce_76{text-align:center;background-color:#fff;color:gray}._loader_4ijce_76>span{display:inline-block;position:sticky;top:1.5rem;padding-top:2rem}astro-island{display:contents}
@inproceedings{schemmelSymbolicPartialOrderExecution2020,
author = {Schemmel, Daniel and Büning, Julian and Rodríguez, César and Laprell, David and Wehrle, Klaus},
title = {Symbolic {{Partial-Order}} {{Execution}} for {{Testing}} {{Multi-Threaded}} {{Programs}}},
booktitle = {{{Computer-Aided}} {{Verification}} {{(CAV}} 2020)},
location = {Los Angeles, CA, USA (Online)},
pages = {376--400},
year = {2020},
doi = {10.1007/978-3-030-53288-8_18},
}
We describe a technique for systematic testing of multi-threaded programs. We combine Quasi-Optimal Partial-Order Reduction, a state-of-the-art technique that tackles path explosion due to interleaving non-determinism, with symbolic execution to handle data non-determinism. Our technique iteratively and exhaustively finds all executions of the program. It represents program executions using partial orders and finds the next execution using an underlying unfolding semantics. We avoid the exploration of redundant program traces using cutoff events. We implemented our technique as an extension of KLEE and evaluated it on a set of large multi-threaded C programs. Our experiments found several previously undiscovered bugs and undefined behaviors in memcached and GNU sort, showing that the new method is capable of finding bugs in industrial-size benchmarks.
Unless reading the exact version as published at CAV is important to you, we advise reading the extended version (arXiv