diff --git a/pr-1359/404.html b/pr-1359/404.html new file mode 100644 index 0000000000..4b2a55b65c --- /dev/null +++ b/pr-1359/404.html @@ -0,0 +1,456 @@ + + + + + + Page Not Found :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+
+

Page Not Found

+
+

The page you’re looking for does not exist. It may have been moved. You can return to the start page, or follow one of the links in the navigation to the left.

+
+
+

If you arrived on this page by clicking on a link, please notify the owner of the site that the link is broken. +If you typed the URL of this page manually, please double check that you entered the address correctly.

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/_/css/dark-site.css b/pr-1359/_/css/dark-site.css new file mode 100644 index 0000000000..cb06eddbec --- /dev/null +++ b/pr-1359/_/css/dark-site.css @@ -0,0 +1,18 @@ +@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local("Roboto Regular"),local("Roboto-Regular"),url(../font/roboto-latin-400.woff2) format("woff2"),url(../font/roboto-latin-400.woff) format("woff")}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:local("Roboto Italic"),local("Roboto-Italic"),url(../font/roboto-latin-400italic.woff2) format("woff2"),url(../font/roboto-latin-400italic.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:local("Roboto Medium"),local("Roboto-Medium"),url(../font/roboto-latin-500.woff2) format("woff2"),url(../font/roboto-latin-500.woff) format("woff")}@font-face{font-family:Roboto;font-style:italic;font-weight:500;src:local("Roboto Medium Italic"),local("Roboto-MediumItalic"),url(../font/roboto-latin-500italic.woff2) format("woff2"),url(../font/roboto-latin-500italic.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:400;src:local("Roboto Mono Regular"),local("RobotoMono-Regular"),url(../font/roboto-mono-latin-400.woff2) format("woff2"),url(../font/roboto-mono-latin-400.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:500;src:local("Roboto Mono Medium"),local("RobotoMono-Medium"),url(../font/roboto-mono-latin-500.woff2) format("woff2"),url(../font/roboto-mono-latin-500.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:400;src:local("Inter"),local("Inter-Regular"),url(../font/Inter-Regular.woff) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:400;src:local("Inter Italic"),local("Inter-Italic"),url(../font/Inter-Italic.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:500;src:local("Inter Medium"),local("Inter-Medium"),url(../font/Inter-Medium.woff) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:500;src:local("Inter MediumItalic"),local("Inter-MediumItalic"),url(../font/Inter-MediumItalic.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:600;src:local("Inter SemiBold"),local("Inter-SemiBold"),url(../font/Inter-SemiBold.woff) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:600;src:local("Inter SemiBoldItalic"),local("Inter-SemiBoldItalic"),url(../font/Inter-SemiBoldItalic.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:700;src:local("Inter Bold"),local("Inter-Bold"),url(../font/Inter-Bold.woff) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:700;src:local("Inter BoldItalic"),local("Inter-BoldItalic"),url(../font/Inter-BoldItalic.woff) format("woff")}@font-face{font-family:Fira Code;src:local("FiraCode Regular"),local("FiraCode-Regular"),url(../font/FiraCode-Regular.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Fira Code;src:local("FiraCode Medium"),local("FiraCode-Medium"),url(../font/FiraCode-Medium.woff) format("woff");font-weight:500;font-style:normal}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1em;height:100%}@media screen and (min-width:1024px){html{font-size:1em}}body{background:#121212;color:#ccc;font-family:Inter,sans-serif;line-height:2;margin:0;word-wrap:anywhere}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{font-family:Roboto Mono,monospace}b,dt,strong,th{font-weight:500}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:2;margin:0}button::-moz-focus-inner{border:none;padding:0}summary{cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}table{border-collapse:collapse;word-wrap:normal}object[type="image/svg+xml"]:not([width]){width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}@supports (scrollbar-width:thin){body *{scrollbar-width:thin;scrollbar-color:#254898 transparent}}body ::-webkit-scrollbar{height:.25rem;width:.25rem}body ::-webkit-scrollbar-thumb{background-color:#254898}@media screen and (min-width:1024px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:4.88889rem;bottom:0;left:0;width:100%;font-size:.94444rem;z-index:11;visibility:hidden;background:#121212;overflow-y:auto}.nav-link,.nav-text{display:inline-block;padding-block:.625rem;-webkit-box-flex:1;-ms-flex:1;flex:1;padding-right:2rem}@media screen and (min-width:1024px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible;top:4.88889rem;z-index:1;width:18rem;overflow-y:unset}.nav .nav-panel-explore{bottom:0}}.nav-container.is-active{visibility:visible}.nav{background:#121212;position:relative}@media screen and (max-width:1023.5px){.nav{height:100%!important}}@media screen and (min-width:769px){.nav{-webkit-box-shadow:.5px 0 3px #c1c1c1;box-shadow:.5px 0 3px #c1c1c1}}@media screen and (min-width:1024px){.nav{top:7.38889rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 7.38889rem)}.nav-panel-menu{overflow-y:auto}}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{-ms-scroll-chaining:none;overscroll-behavior:none}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;top:0;right:0;bottom:0;left:0}.nav-menu{min-height:100%;line-height:1.35;position:relative}@media screen and (min-width:1024px){.nav-menu{padding:.5rem 0}}.nav-menu h3.title{color:#424242;font-size:inherit;font-weight:500;margin:0;padding:.25em 0 .125em}.nav-menu a{color:inherit}.nav-list{margin-left:1rem;padding:0}.nav-menu>.nav-list+.nav-list{margin-top:.5rem}.nav-item{list-style:none;font-size:.875rem;line-height:1.5;margin-left:-16rem;padding-left:16rem;color:#ccc}.nav-menu>.nav-list{margin-top:10px;margin-left:0}@media screen and (min-width:1024px){.nav-menu>.nav-list{margin-left:1rem}}.nav-item[data-depth="0"]>.nav-list:first-child{display:block}.nav-item:not(.is-active)>.nav-list{display:none}.nav-item-toggle{border:none;outline:none;line-height:inherit;position:absolute;height:1.35em;width:1.35em;margin-top:.7em;right:1em;mask-image:url(../img/chevron-toggle.svg);-webkit-mask-image:url(../img/chevron-toggle.svg);background-color:#6b7280}.nav-item-toggle:hover{background-color:#fe9e92}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#fe9e92}.is-current-page>.nav-link,.is-current-page>.nav-text{font-weight:500}.nav-panel-explore{background:#121212;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;top:0;right:0;bottom:3.5em;left:0}.nav-panel-explore:not(:first-child){top:auto;max-height:calc(50% + 2.5rem)}.nav-panel-explore .context{font-size:.83333rem;-ms-flex-negative:0;flex-shrink:0;color:#f7f9fb;-webkit-box-shadow:0 -1px 0 #363f55;box-shadow:0 -1px 0 #363f55;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer;line-height:1;height:2.5rem;padding:.5em 1.5em}.nav-panel-explore .context .version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit}.nav-panel-explore .context .version::after{content:"";background:url(../img/chevron.svg) no-repeat 100%/auto 100%;width:1.25em;height:.75em}.nav-panel-explore .components{line-height:2;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-shadow:inset 0 1px 5px #363f55;box-shadow:inset 0 1px 5px #363f55;background:#000;padding:.5rem .75rem 0;margin:0;overflow-y:scroll;max-height:100%;display:block}.nav-panel-explore:not(.is-active) .components{display:none}.nav-panel-explore .component{display:block}.nav-panel-explore .component+.component{margin-top:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:500;color:inherit}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:0;margin-top:-.25rem;line-height:1}.nav-panel-explore .component .version{display:block;margin:.375rem .375rem 0 0}.nav-panel-explore .component .version a{border:1px solid #c1c1c1;color:inherit;opacity:.75;white-space:nowrap;border-radius:.9rem;text-decoration:none;opacity:1;-webkit-box-flex:0;-ms-flex:none;flex:none;-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0;-ms-flex-positive:0;flex-grow:0;padding:.4em 1em .2em}.nav-panel-explore .component .is-current a{border-color:currentColor;opacity:.9;font-weight:500}.nav-panel-explore .component .version a:hover{border:1px solid #254898;color:#254898}.nav-panel-explore .component .version.is-current a,.nav-panel-explore .component .version a:focus{background:#254898;color:#fff}.nav-list>.nav-item>span{margin-left:-16rem;padding-left:16rem;display:inline-block}.nav-list>.nav-item[data-depth="1"]>a,.nav-list>.nav-item[data-depth="1"]>span,.nav-list>.parent[data-depth="1"]>span>a{font-weight:500;font-size:.9375rem;line-height:1.5;color:#fff}.nav-panel-explore.is-active .context .version::after{-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-left:.5em}.nav-menu>.title{display:none}.is-current-page.parent>span,.is-current-page:not(.parent){background-color:#211f1f}.is-current-page.parent>span{display:-webkit-box;display:-ms-flexbox;display:flex}.is-current-page.parent>span>a,.is-current-page>.nav-link{color:#fe9e92;font-weight:500}.components-versions{width:calc(18rem - 1.5em);height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:inherit;padding:0 1em 0 0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-right:1px solid #dfe6f2}.nav-toggle{margin-left:1rem}@media screen and (max-width:1023.5px){aside.toc.sidebar{display:none}main>.content{overflow-x:auto}}@media screen and (min-width:1024px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 12rem;flex:0 0 12rem;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media screen and (min-width:1216px){aside.toc.sidebar{-ms-flex-preferred-size:15rem;flex-basis:15rem}}.toolbar{color:#ccc;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-shadow:0 1px 0 #313131;box-shadow:0 1px 0 #313131;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.83333rem;height:2.5rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;position:sticky;top:4.88889rem;z-index:2;padding-inline:1rem}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;padding:0;height:2.5rem;width:2.5rem;margin-right:-.25rem}@media screen and (min-width:1024px){.nav-toggle{display:none}.toolbar{padding-inline:0}}.nav-toggle.is-active{background-image:url(../img/back.svg);background-size:41.5%}.home-link{display:block;mask-image:url(../img/home-outlined.svg);-webkit-mask-image:url(../img/home-outlined.svg);background-color:red;height:1.25rem;width:1.25rem;background-color:#858585}.edit-this-page{display:none;padding-right:.5rem}@media screen and (min-width:1024px){.home-link{margin:.625rem}.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#ccc}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;padding:0 .5rem 0 .75rem;line-height:1.35;color:#858585}@media screen and (min-width:1024px){.breadcrumbs{display:block}}a+.breadcrumbs{padding-left:.05rem}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .5rem}.breadcrumbs li:last-of-type::after{content:none}.page-versions{margin:0 .2rem 0 auto;position:relative;line-height:1}@media screen and (min-width:1024px){.page-versions{margin-right:.7rem}}.page-versions .version-menu-toggle{color:inherit;background:url(../img/chevron.svg) no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;border:none;outline:none;line-height:inherit;padding:.5rem 1.5rem .5rem .5rem;position:relative;z-index:3}.page-versions .version-menu{min-width:100%;padding:1.375rem 1.5rem .5rem .5rem}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}aside.toc.embedded{display:none}@media screen and (min-width:1024px){.aside.toc.embedded{display:block}}.toc-menu{color:#858585}.toc.sidebar .toc-menu{margin-right:.75rem;position:sticky;top:7.38889rem}.toc .toc-menu h3{color:#fff;font-size:.875rem;font-weight:700;line-height:1.3;margin:0;padding-left:1rem;padding-bottom:.5rem;text-transform:uppercase}.toc.sidebar .toc-menu h3{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:4rem;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.toc .toc-menu ul{font-size:.875rem;line-height:1.6;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 9.88889rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none;scrollbar-width:none}.toc .toc-menu ul::-webkit-scrollbar{width:0;height:0}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:2rem}.toc .toc-menu li[data-level="3"] a{padding-left:3rem}.toc .toc-menu a{color:inherit;display:inline-block;padding:.5rem 0 .5rem 1rem;text-decoration:none;position:relative}.toc .toc-menu a::before{content:"";position:absolute;height:100%;width:1px;background:#313131;left:2px}.toc .toc-menu a.is-active::after{content:"";width:5px;height:40%;left:0;position:absolute;background:#afcaff;border-radius:1px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:hover{color:#4070f4}.toc .toc-menu a.is-active{color:#afcaff;font-weight:500}.sidebar.toc .toc-menu a:focus{background:#121212}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#ccc;font-size:inherit;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;line-height:2;margin:0 auto;max-width:40rem;padding:0 1rem 4rem}@media screen and (min-width:1024px){.doc{-webkit-box-flex:1;-ms-flex:auto;flex:auto;font-size:1rem;margin:0 2rem;max-width:72rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#fff;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;line-height:1;margin:20px 0;font-weight:700}.doc h3,.doc h4,.doc h5,.doc h6{margin-top:40px!important}.doc>h1.page:first-child{font-size:1.5rem;margin-top:1.5rem;margin-bottom:1rem}.doc>h2{font-size:1.5rem}.doc>h3{font-size:18px}@media screen and (min-width:1024px){.doc>h1.page:first-child{margin-top:2.5rem;font-size:3rem;line-height:3.625rem}}.doc>h1.page:first-child+aside.toc.embedded{margin-top:-.5rem}.doc>h2#name+.sectionbody{margin-top:0}#preamble+.sect1,.doc .sect1+.sect1{margin-top:3rem}.doc h1.sect0{background:#f0f0f0;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){border-bottom:1px solid #313131;padding-bottom:1rem}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before{content:"\00a7"}.doc h1:hover .anchor,.doc h2:hover .anchor,.doc h3:hover .anchor,.doc h4:hover .anchor,.doc h5:hover .anchor,.doc h6:hover .anchor{visibility:visible}.doc dl,.doc p{margin:0}.doc a{color:#afcaff}.doc a.bare{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc a.unresolved{color:#fe9e92}.doc i.fa{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-style:normal}.doc .colist>table code,.doc h2 code,.doc h3 code,.doc p code,.doc thead code{background:#121212;border-radius:.25em}.doc code,.doc pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-weight:500;border-radius:.5rem}.doc code{padding:4px}.doc pre{font-size:.88889rem;line-height:1.5;margin:0}.doc blockquote{margin:0}.doc .paragraph.lead>p{font-size:1rem}.doc .right{float:right}.doc .left{float:left}.doc .stretch{width:100%}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .admonitionblock,.doc .dlist,.doc .exampleblock,.doc .hdlist,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .ulist,.doc .verseblock,.doc details,.doc hr{margin:1rem 0 0}.doc table.tableblock{margin:1.5rem 0 0;display:block;max-width:-moz-fit-content;max-width:-webkit-fit-content;max-width:fit-content;overflow-x:auto;word-wrap:normal;word-break:normal;padding-inline:1.5rem;padding-block:1.25rem}.hdlist table{table-layout:fixed;width:100%;word-wrap:break-word}.doc table.tableblock+*{margin-top:1.5rem}.doc p.tableblock+p.tableblock{margin-top:.5rem}.doc td.tableblock>.content>:first-child{margin-top:0}.doc table.tableblock td,.doc table.tableblock th{padding:.7rem 1rem}.doc table.tableblock,.doc table.tableblock>*>tr>*{border:0 solid #363f55}.doc table.grid-all>*>tr>*{border-width:1px}.doc table.grid-cols>*>tr>*{border-width:0 1px}.doc table.grid-rows>*>tr>*{border-width:1px 0}.doc table.grid-all>thead th,.doc table.grid-rows>thead th{border-bottom-width:2.5px}.doc table.frame-all{border-width:1px}.doc table.frame-ends{border-width:1px 0}.doc table.frame-sides{border-width:0 1px}.doc table.frame-none>colgroup+*>:first-child>*,.doc table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}.doc table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}.doc table.frame-ends>*>tr>:first-child,.doc table.frame-none>*>tr>:first-child{border-left-width:0}.doc table.frame-ends>*>tr>:last-child,.doc table.frame-none>*>tr>:last-child{border-right-width:0}.doc div.stripes-even table>tbody>tr:nth-of-type(2n),.doc div.stripes-odd table>tbody>tr:nth-of-type(odd),.doc table.stripes-all>tbody>tr,.doc table.stripes-even>tbody>tr:nth-of-type(2n),.doc table.stripes-hover>tbody>tr:hover,.doc table.stripes-odd>tbody>tr:nth-of-type(odd){background:#5d5d5d}.doc div.stripes-even table>tbody>tr:nth-of-type(odd),.doc div.stripes-odd table>tbody>tr:nth-of-type(2n){background:#121212}.doc table.stripes-all>tbody>tr>td,.doc table.stripes-even>tbody>tr:nth-of-type(2n)>td,.doc table.stripes-odd>tbody>tr:nth-of-type(odd)>td{border-radius:0}.doc table.tableblock>tfoot{background:-webkit-gradient(linear,left top,left bottom,from(#121212),to(#000));background:linear-gradient(180deg,#121212 0,#000)}.doc .halign-left{text-align:left}.doc .halign-right{text-align:right}.doc .halign-center{text-align:center}.doc .valign-top{vertical-align:top}.doc .valign-bottom{vertical-align:bottom}.doc .valign-middle{vertical-align:middle}.doc .admonitionblock{border-radius:8px}.doc .admonitionblock.caution,.doc .admonitionblock.important,.doc .admonitionblock.note,.doc .admonitionblock.tip,.doc .admonitionblock.warning{border:none}.doc .admonitionblock td.content>.title+*,.doc .admonitionblock td.content>:not(.title):first-child{margin-top:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock>table{table-layout:fixed;position:relative;width:100%}.doc .admonitionblock td.content{background:#121212;width:100%;word-wrap:anywhere;padding:73px 24px 24px;border-radius:.5rem}.doc .admonitionblock p,.doc .admonitionblock td.content{line-height:1.5}@media screen and (min-width:1024px){.doc .admonitionblock td.content{padding:24px 24px 24px 152px;min-height:96px}.doc .admonitionblock.note td.content{padding:24px 24px 24px 141px}.doc .admonitionblock.important td.content{padding:24px 24px 24px 176px}.doc .admonitionblock.caution td.content{padding:24px 24px 24px 162px}.doc .admonitionblock.warning td.content{padding:24px 24px 24px 166px}.doc .admonitionblock.tip td.content{padding:24px 24px 24px 131px}}.doc .admonitionblock .icon{position:absolute;font-size:18px;line-height:1;top:32px;left:24px;z-index:1;padding:8px 12px;border-radius:4px;text-align:center}@media screen and (min-width:1024px){.doc .admonitionblock.one-line-block .icon{top:18px}}@media screen and (max-width:1024px){.doc .admonitionblock .icon{top:24px}}.doc .admonitionblock .icon .icon-note::before{background-image:url(../img/pencil-filled.svg)}.doc .admonitionblock .icon .icon-note::before,.doc .admonitionblock .icon .icon-warning::before{background-repeat:no-repeat;content:"";display:inline-block;vertical-align:middle;margin-right:8px}.doc .admonitionblock .icon .icon-warning::before{background-image:url(../img/warning-outlined.svg)}.doc .admonitionblock .icon .icon-caution::before{background-image:url(../img/i-caution-outlined.svg);background-repeat:no-repeat;content:"";display:inline-block;vertical-align:middle;margin-right:8px}.doc .admonitionblock .icon .icon-important::before{background-image:url(../img/flag-filled.svg)}.doc .admonitionblock .icon .icon-important::before,.doc .admonitionblock .icon .icon-tip::before{background-repeat:no-repeat;content:"";display:inline-block;vertical-align:middle;margin-right:8px}.doc .admonitionblock .icon .icon-tip::before{background-image:url(../img/tip-outlined.svg)}.doc .admonitionblock .icon .icon-caution::before,.doc .admonitionblock .icon .icon-important::before,.doc .admonitionblock .icon .icon-note::before,.doc .admonitionblock .icon .icon-tip::before,.doc .admonitionblock .icon .icon-warning::before{width:22px;height:22px;background-size:22px 22px}.doc .admonitionblock.tip td.content{background:#172726}.doc .admonitionblock.note td.content{background:#171c27}.doc .admonitionblock.important td.content{background:#231f1a}.doc .admonitionblock.caution td.content,.doc .admonitionblock.warning td.content{background:#231b1a}.doc .admonitionblock.tip .icon{background-color:#80dcda}.doc .admonitionblock.important .icon{background-color:#ffcd9a}.doc .admonitionblock.note .icon{background-color:#b6cfff}.doc .admonitionblock.caution .icon,.doc .admonitionblock.warning .icon{background-color:#ff7e6d}.doc .admonitionblock .icon i::after{content:attr(title);display:inline-block;vertical-align:middle;color:#363636;font-size:14px;line-height:1;font-weight:700}.doc .imageblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .image>img,.doc .image>object,.doc .image>svg,.doc .imageblock img,.doc .imageblock object,.doc .imageblock svg{display:inline-block;height:auto;max-width:100%;vertical-align:middle}.doc .image:not(.left):not(.right)>img{margin-top:-.2em}#preamble .abstract blockquote{background:#f0f0f0;border-left:5px solid #363f55;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock,.doc .verseblock{background:#121212;border-left:5px solid #5d5d5d;color:#5d5d5d}.doc .quoteblock{padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#8e8e8e;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc .verseblock{font-size:1.15em;padding:1rem 2rem}.doc .verseblock pre{font-family:inherit;font-size:inherit}.doc ol,.doc ul{margin:0;padding:0 0 0 2rem}.doc ol.none,.doc ol.unnumbered,.doc ol.unstyled,.doc ul.checklist,.doc ul.no-bullet,.doc ul.none,.doc ul.unstyled{list-style-type:none}.doc ol.unnumbered,.doc ul.no-bullet{padding-left:1.25rem}.doc ol.unstyled,.doc ul.unstyled{padding-left:0}.doc ul.circle,.doc ul.disc,.doc ul.square{list-style-type:square}.doc ol.arabic{list-style-type:decimal}.doc ol.decimal{list-style-type:decimal-leading-zero}.doc ol.loweralpha{list-style-type:lower-alpha}.doc ol.upperalpha{list-style-type:upper-alpha}.doc ol.lowerroman{list-style-type:lower-roman}.doc ol.upperroman{list-style-type:upper-roman}.doc ol.lowergreek{list-style-type:lower-greek}.doc ul.checklist{padding-left:.5rem}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem}.doc ul.checklist i.fa-check-square-o::before{content:"\2713"}.doc ul.checklist i.fa-square-o::before{content:"\274f"}.doc .dlist .dlist,.doc .dlist .olist,.doc .dlist .ulist,.doc .olist .dlist,.doc .olist .olist,.doc .olist .ulist,.doc .olist li+li,.doc .ulist .dlist,.doc .ulist .olist,.doc .ulist .ulist,.doc .ulist li+li{margin-top:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{font-weight:500;font-style:italic;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem;text-align:left}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc details{margin-left:1rem}.doc details>summary{display:block;position:relative;line-height:2;margin-bottom:.5rem}.doc details>summary::-webkit-details-marker{display:none}.doc details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.7em;left:-1rem;-webkit-transform:translateX(15%);transform:translateX(15%)}.doc details[open]>summary::before{border-color:currentColor transparent transparent;border-width:.5rem .3rem 0;-webkit-transform:translateY(15%);transform:translateY(15%)}.doc details>summary::after{content:"";width:1rem;height:1em;position:absolute;top:.5em;left:-1rem}.doc details.result{margin-top:.25rem}.doc details.result>summary{font-style:italic;margin-bottom:0}.doc details.result>.content{margin-left:-1rem}.doc .exampleblock>.content,.doc details.result>.content{background:#fff;border:.25rem solid #363f55;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content::after,.doc details.result>.content::after{content:"";display:table;clear:both}.doc .exampleblock>.content>:first-child,.doc details>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#e1e1e1;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:500;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc pre.highlight{position:relative}.doc .listingblock pre:not(.highlight),.doc .literalblock pre,.doc pre.highlight code{display:block;overflow-x:auto;padding:1.5rem;border-radius:.5rem;background-color:#161616;border:1px solid #313131}.admonitionblock .listingblock pre:not(.highlight),.admonitionblock .literalblock pre,.admonitionblock pre.highlight code{background-color:rgba(0,0,0,.65);border:none}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:grey;font-family:Inter,sans-serif;font-size:.75rem;line-height:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase;letter-spacing:.075em;font-size:.96em;line-height:1.0425}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:transparent;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1em;height:1em}.doc .source-toolbox .copy-icon{-webkit-box-flex:0;-ms-flex:none;flex:none;width:inherit;height:inherit;background:url(../img/octicons-16.svg)}.doc .source-toolbox img.copy-icon{-webkit-filter:invert(50.2%);filter:invert(50.2%)}.doc .source-toolbox svg.copy-icon{fill:currentColor}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#ccc;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .75s;transition:opacity .5s ease .75s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#ccc;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .25rem 1.5rem}.doc .dlist dd:last-of-type{margin-bottom:0}.doc td.hdlist1,.doc td.hdlist2{padding:.5rem 0 0;vertical-align:top}.doc tr:first-child>.hdlist1,.doc tr:first-child>.hdlist2{padding-top:0}.doc td.hdlist1{font-weight:500;padding-right:.25rem}.doc td.hdlist2{padding-left:.25rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Inter,sans-serif;font-size:.75rem;font-style:normal;line-height:1.2;text-align:center;width:1.25em;height:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc hr{border:solid #313131;border-width:2px 0 0;height:0}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#121212;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #121212 inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #121212;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq,.doc .path{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:500;line-height:.90909}.doc :not(pre).nowrap{white-space:nowrap}.doc .nobreak{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;word-wrap:normal}#footnotes{font-size:.85em;line-height:1.5;margin:2rem -.5rem 0}.doc td.tableblock>.content #footnotes{margin:2rem 0 0}#footnotes hr{border-top-width:1px;margin-top:0;width:20%}#footnotes .footnote{margin:.5em 0 0 1em}#footnotes .footnote+.footnote{margin-top:.25em}#footnotes .footnote>a:first-of-type{display:inline-block;margin-left:-2em;text-align:right;width:1.5em}.stemblock{overflow-x:auto;padding-block:1rem;border-radius:.5rem;background-color:#161616;border:1px solid #313131}.MathJax_Display .MathJax{padding-inline:1rem}.doc .olist .title,.doc .ulist .title,div.title{font-style:normal;font-weight:600;line-height:2.8}nav.pagination{border-top:1px solid #363f55;line-height:1;margin:2rem -1rem -1rem;padding:2rem}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{line-height:1.5;font-size:.875rem;padding-bottom:2px}nav.pagination .prev::before{content:"Prev"}nav.pagination .next::before{content:"Next"}nav.pagination a{position:relative;font-weight:400;font-size:.875rem;line-height:1.5}nav.pagination a::after,nav.pagination a::before{color:#ccc;font-weight:400;font-size:1.5em;line-height:.75;position:absolute;top:-1px;width:1rem}nav.pagination .next a::after{right:-1.5rem;mask-image:url(../img/chevron-right.svg);-webkit-mask-image:url(../img/chevron-right.svg)}nav.pagination .next a::after,nav.pagination .prev a::before{content:"";width:1em;height:1em;mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain;background-color:#afcaff}nav.pagination .prev a::before{left:-1.5rem;mask-image:url(../img/chevron-left.svg);-webkit-mask-image:url(../img/chevron-left.svg)}nav.pagination .next a:hover::after,nav.pagination .prev a:hover::before{background-color:#4070f4}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:4.88889rem}.navbar{color:#363636;font-size:.88889rem;height:4.88889rem;position:fixed;top:0;width:100%;z-index:4}.navbar a{text-decoration:none}.navbar-end .navbar-link{color:#363636}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:auto;flex:auto}.navbar-brand .navbar-item:first-child{-ms-flex-item-align:center;align-self:center;padding:0;color:#363636;font-size:1.22222rem;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1}.navbar-brand .navbar-item:first-child a{color:inherit;word-wrap:normal}.navbar-brand .navbar-item:first-child :not(:last-child){padding-right:.375rem}.navbar-brand .navbar-item.search{-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}#search-input{color:#333;font-family:inherit;font-size:.95rem;width:150px;border:1px solid #dbdbdb;border-radius:.1em;line-height:1.5;padding:0 .25em}.navbar-burger{background:none;border:none;outline:none;line-height:1;position:relative;width:3rem;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-left:auto;min-width:0}.navbar-burger span{background-color:#fff;height:1.5px;width:1rem}.navbar-burger:not(.is-active) span{-webkit-transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out}.navbar-burger span+span{margin-top:.25rem}.navbar-burger.is-active span+span{margin-top:-1.5px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.navbar-item,.navbar-link{display:block;line-height:2}.navbar-item.has-dropdown{padding:0}.navbar-item .icon{width:1.25rem;height:1.25rem;display:block}.navbar-item .icon img,.navbar-item .icon svg{fill:currentColor;width:inherit;height:inherit}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#363f55;border:none;height:1px;margin:.25rem 0}.navbar .button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#121212;border:1px solid #363f55;border-radius:.15rem;height:1.75rem;color:#ccc;padding:0 .75em;white-space:nowrap}@media screen and (max-width:768.5px){.navbar-brand .navbar-item.search{padding-left:0;padding-right:0}}@media screen and (min-width:769px){#search-input{width:200px}}@media screen and (max-width:1023.5px){.navbar-brand{height:inherit}.navbar-brand .navbar-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-menu{background:#121212;-webkit-box-shadow:0 8px 16px rgba(10,10,10,.1);box-shadow:0 8px 16px rgba(10,10,10,.1);max-height:calc(100vh - 4.88889rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none;padding:.5rem 0}.navbar-menu:not(.is-active){display:none}.navbar-menu .navbar-link:hover,.navbar-menu a.navbar-item:hover{background:#363f55}}@media screen and (min-width:1024px){.navbar-burger{display:none}.navbar,.navbar-end,.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-end{-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2rem}.navbar-item,.navbar-link{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-flex:0;-ms-flex:none;flex:none}.navbar-item:not(.has-dropdown),.navbar-link{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-end .navbar-item.has-dropdown:hover .navbar-link,.navbar-end .navbar-link:hover,.navbar-end>a.navbar-item:hover{background:#121212;color:#363636}.navbar-dropdown{background:#121212;border:1px solid #363f55;border-top:none;border-radius:0 0 .25rem .25rem;display:none;top:100%;left:0;min-width:100%;position:absolute}.navbar-dropdown .navbar-item{padding:.5rem 3rem .5rem 1rem;white-space:nowrap}.navbar-dropdown .navbar-item:last-child{border-radius:inherit}.navbar-dropdown.is-right{left:auto;right:0}.navbar-dropdown a.navbar-item:hover{background:#363f55}}.header-right{margin-left:auto;gap:1.25rem}.header-right,.navbar-item-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item-flex{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem}.navbar-item-flex a{font-weight:500}.link-icon{background-image:url(../img/link-icon.svg);width:1.2rem;height:1.2rem;display:block}footer.footer{background-color:#0b0b0b;color:#858585;font-size:.83333rem;line-height:2;padding:1.5rem}.footer p{margin:0}.footer a{color:#858585} + +/*! Adapted from the GitHub style by Vasily Polovnyov */.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:500}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:500}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:500}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:500}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-strong{font-weight:500}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}.nav-container,.navbar>:not(.navbar-brand),.toolbar,aside.toc,nav.pagination{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #363f55;color:#8e8e8e;padding:.25rem .5rem 0}.footer *{color:inherit}} + +/*! @docsearch/css Button 3.0.0-alpha.50 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */.DocSearch-Button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#090a11;border:0;border-radius:40px;color:#dfe6f2;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;font-weight:500;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:#000;-webkit-box-shadow:inset 0 0 0 2px #5468ff;box-shadow:inset 0 0 0 2px #5468ff;color:#f5f6f7;outline:none}.DocSearch-Button-Container{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:#f5f6f7}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{min-width:calc(40px + .8em)}.DocSearch-Button-Key,.DocSearch-Button-Keys{display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Button-Key{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:linear-gradient(-26.5deg,#565872,#31355b);border-radius:3px;-webkit-box-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);box-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);color:#dfe6f2;height:18px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:.4em;padding-bottom:2px;position:relative;top:-1px;width:20px}@media (max-width:750px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}} + +/*! @docsearch/css Modal 3.0.0-alpha.50 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{-webkit-box-sizing:border-box;box-sizing:border-box}.DocSearch-Container{background-color:rgba(9,10,17,.8);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:#5468ff;cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:#15172a;border-radius:6px;-webkit-box-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;box-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:60px auto auto;max-width:560px;position:relative}.DocSearch-SearchBar{padding:12px 12px 0}.DocSearch-Form,.DocSearch-SearchBar{display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Form{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#000;border-radius:4px;-webkit-box-shadow:inset 0 0 0 2px #5468ff;box-shadow:inset 0 0 0 2px #5468ff;height:56px;margin:0;padding:0 12px;position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:#f5f6f7;-webkit-box-flex:1;-ms-flex:1;flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::-webkit-input-placeholder{color:#dfe6f2;opacity:1}.DocSearch-Input::-moz-placeholder{color:#dfe6f2;opacity:1}.DocSearch-Input:-ms-input-placeholder{color:#dfe6f2;opacity:1}.DocSearch-Input::-ms-input-placeholder{color:#dfe6f2;opacity:1}.DocSearch-Input::placeholder{color:#dfe6f2;opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#5468ff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#5468ff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{-webkit-animation:none;animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:1.4}}.DocSearch-Reset{-webkit-animation:fade-in .1s ease-in forwards;animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:1.4}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:focus{outline:none}.DocSearch-Reset:hover{color:#5468ff}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:488px;min-height:12px;overflow-y:auto;overflow-y:overlay;padding:0 12px;scrollbar-color:#dfe6f2 #15172a;scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:#dfe6f2;border:3px solid #15172a;border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:#dfe6f2}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Logo svg{color:#fff;margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:#5468ff}.DocSearch-HitsFooter{color:#dfe6f2;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.85em;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:12px;padding:12px}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:-webkit-box;display:-ms-flexbox;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{-webkit-transition:none;transition:none}}.DocSearch-Hit--deleting{opacity:0;-webkit-transition:all .25s linear;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{-webkit-transition:none;transition:none}}.DocSearch-Hit--favoriting{-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:top center;transform-origin:top center;-webkit-transition:all .25s linear;transition:all .25s linear;-webkit-transition-delay:.25s;transition-delay:.25s}.DocSearch-Hit a{background:#090a11;border-radius:4px;-webkit-box-shadow:none;box-shadow:none;display:block;padding-left:12px;width:100%}.DocSearch-Hit-source{background:#15172a;color:#5468ff;font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:#dfe6f2;height:56px;opacity:.5;stroke-width:1.4;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:#5468ff}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#bec3c9;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;height:56px;padding:0 12px 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:#dfe6f2;stroke-width:1.4}.DocSearch-Hit-action{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);-webkit-transition:background-color .1s ease-in;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{-webkit-transition:none;transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-weight:500;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:#dfe6f2;font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:#fff!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);-webkit-transition:none;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:#dfe6f2;padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:#5468ff;cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#1e2136;border-radius:0 0 8px 8px;-webkit-box-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-negative:0;flex-shrink:0;height:44px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 12px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands,.DocSearch-Footer{display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Commands{color:#dfe6f2;list-style:none;margin:0;padding:0}.DocSearch-Commands li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:linear-gradient(-26.5deg,#565872,#31355b);border-radius:2px;-webkit-box-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);box-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);display:-webkit-box;display:-ms-flexbox;display:flex;height:18px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:.4em;padding-bottom:1px;width:20px}@media (max-width:750px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:-webkit-fill-available;height:100vh;position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;-webkit-box-shadow:none;box-shadow:none;height:-webkit-fill-available;height:100vh;margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(100vh - 112px)}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:#5468ff;cursor:pointer;display:inline-block;-webkit-box-flex:0;-ms-flex:none;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:12px;outline:none;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.tabs ul{list-style:none;padding:0}.tabs li,.tabs ul{display:-webkit-box;display:-ms-flexbox;display:flex}.tabs li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;font-weight:400;font-size:14px;line-height:1;padding:.5rem 1rem;position:relative;border-radius:18px 18px 0 0}.tabs li,.tabs ul{-ms-flex-flow:nowrap;flex-flow:nowrap}.tabs.ulist li{margin-bottom:0;color:#8a8ca2}.tabs.ulist li.is-active{background-color:rgba(64,112,244,.1);color:#4070f4}.tabs.ulist li+li{margin-top:0}.tabset.is-loading .tabs li:first-child::after,.tabs li.is-active::after{background-color:rgba(64,112,244,.1);content:"";display:block;position:absolute;left:0;right:0}.tabset>.content{border:1px solid rgba(64,112,244,.1);padding:1.25rem;border-radius:0 20px 20px 20px}.tabset.is-loading .tab-pane:not(:first-child),.tabset:not(.is-loading) .tab-pane:not(.is-active){display:none}.tab-pane>:first-child{margin-top:0}.swagger-ui .info .title small pre{background:#7d8492}.swagger-ui{color:#3b4151; + /*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */font-family:sans-serif}.swagger-ui html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure{margin:1em 40px}.swagger-ui hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}.swagger-ui pre{font-family:monospace,monospace;font-size:1em}.swagger-ui a{background-color:transparent;-webkit-text-decoration-skip:objects}.swagger-ui abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.swagger-ui b,.swagger-ui strong{font-weight:inherit;font-weight:bolder}.swagger-ui code,.swagger-ui kbd,.swagger-ui samp{font-family:monospace,monospace;font-size:1em}.swagger-ui dfn{font-style:italic}.swagger-ui mark{background-color:#ff0;color:#000}.swagger-ui small{font-size:80%}.swagger-ui sub,.swagger-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.swagger-ui sub{bottom:-.25em}.swagger-ui sup{top:-.5em}.swagger-ui audio,.swagger-ui video{display:inline-block}.swagger-ui audio:not([controls]){display:none;height:0}.swagger-ui img{border-style:none}.swagger-ui svg:not(:root){overflow:hidden}.swagger-ui button,.swagger-ui input,.swagger-ui optgroup,.swagger-ui select,.swagger-ui textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}.swagger-ui button,.swagger-ui input{overflow:visible}.swagger-ui button,.swagger-ui select{text-transform:none}.swagger-ui [type=reset],.swagger-ui [type=submit],.swagger-ui button,.swagger-ui html [type=button]{-webkit-appearance:button}.swagger-ui [type=button]::-moz-focus-inner,.swagger-ui [type=reset]::-moz-focus-inner,.swagger-ui [type=submit]::-moz-focus-inner,.swagger-ui button::-moz-focus-inner{border-style:none;padding:0}.swagger-ui [type=button]:-moz-focusring,.swagger-ui [type=reset]:-moz-focusring,.swagger-ui [type=submit]:-moz-focusring,.swagger-ui button:-moz-focusring{outline:1px dotted ButtonText}.swagger-ui fieldset{padding:.35em .75em .625em}.swagger-ui legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}.swagger-ui progress{display:inline-block;vertical-align:baseline}.swagger-ui textarea{overflow:auto}.swagger-ui [type=checkbox],.swagger-ui [type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}.swagger-ui [type=number]::-webkit-inner-spin-button,.swagger-ui [type=number]::-webkit-outer-spin-button{height:auto}.swagger-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.swagger-ui [type=search]::-webkit-search-cancel-button,.swagger-ui [type=search]::-webkit-search-decoration{-webkit-appearance:none}.swagger-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.swagger-ui details,.swagger-ui menu{display:block}.swagger-ui summary{display:list-item}.swagger-ui canvas{display:inline-block}.swagger-ui [hidden],.swagger-ui template{display:none}.swagger-ui .debug *{outline:1px solid gold}.swagger-ui .debug-white *{outline:1px solid #fff}.swagger-ui .debug-black *{outline:1px solid #000}.swagger-ui .debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat 0 0}.swagger-ui .debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat 0 0}.swagger-ui .debug-grid-8-solid{background:#fff url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat 0 0}.swagger-ui .debug-grid-16-solid{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat 0 0}.swagger-ui .border-box,.swagger-ui a,.swagger-ui article,.swagger-ui body,.swagger-ui code,.swagger-ui dd,.swagger-ui div,.swagger-ui dl,.swagger-ui dt,.swagger-ui fieldset,.swagger-ui footer,.swagger-ui form,.swagger-ui h1,.swagger-ui h2,.swagger-ui h3,.swagger-ui h4,.swagger-ui h5,.swagger-ui h6,.swagger-ui header,.swagger-ui html,.swagger-ui input[type=email],.swagger-ui input[type=number],.swagger-ui input[type=password],.swagger-ui input[type=tel],.swagger-ui input[type=text],.swagger-ui input[type=url],.swagger-ui legend,.swagger-ui li,.swagger-ui main,.swagger-ui ol,.swagger-ui p,.swagger-ui pre,.swagger-ui section,.swagger-ui table,.swagger-ui td,.swagger-ui textarea,.swagger-ui th,.swagger-ui tr,.swagger-ui ul{-webkit-box-sizing:border-box;box-sizing:border-box}.swagger-ui .aspect-ratio{height:0;position:relative}.swagger-ui .aspect-ratio--16x9{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1{padding-bottom:100%}.swagger-ui .aspect-ratio--object{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}@media screen and (min-width:30em){.swagger-ui .aspect-ratio-ns{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-ns{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-ns{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-ns{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-ns{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-ns{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-ns{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-ns{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-ns{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-ns{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-ns{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-ns{padding-bottom:100%}.swagger-ui .aspect-ratio--object-ns{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .aspect-ratio-m{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-m{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-m{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-m{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-m{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-m{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-m{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-m{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-m{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-m{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-m{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-m{padding-bottom:100%}.swagger-ui .aspect-ratio--object-m{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:60em){.swagger-ui .aspect-ratio-l{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-l{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-l{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-l{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-l{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-l{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-l{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-l{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-l{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-l{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-l{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-l{padding-bottom:100%}.swagger-ui .aspect-ratio--object-l{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}.swagger-ui img{max-width:100%}.swagger-ui .cover{background-size:cover!important}.swagger-ui .contain{background-size:contain!important}@media screen and (min-width:30em){.swagger-ui .cover-ns{background-size:cover!important}.swagger-ui .contain-ns{background-size:contain!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cover-m{background-size:cover!important}.swagger-ui .contain-m{background-size:contain!important}}@media screen and (min-width:60em){.swagger-ui .cover-l{background-size:cover!important}.swagger-ui .contain-l{background-size:contain!important}}.swagger-ui .bg-center{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left{background-position:0;background-repeat:no-repeat}@media screen and (min-width:30em){.swagger-ui .bg-center-ns{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-ns{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-ns{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-ns{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-ns{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bg-center-m{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-m{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-m{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-m{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-m{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:60em){.swagger-ui .bg-center-l{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-l{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-l{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-l{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-l{background-position:0;background-repeat:no-repeat}}.swagger-ui .outline{outline:1px solid}.swagger-ui .outline-transparent{outline:1px solid transparent}.swagger-ui .outline-0{outline:0}@media screen and (min-width:30em){.swagger-ui .outline-ns{outline:1px solid}.swagger-ui .outline-transparent-ns{outline:1px solid transparent}.swagger-ui .outline-0-ns{outline:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .outline-m{outline:1px solid}.swagger-ui .outline-transparent-m{outline:1px solid transparent}.swagger-ui .outline-0-m{outline:0}}@media screen and (min-width:60em){.swagger-ui .outline-l{outline:1px solid}.swagger-ui .outline-transparent-l{outline:1px solid transparent}.swagger-ui .outline-0-l{outline:0}}.swagger-ui .ba{border-style:solid;border-width:1px}.swagger-ui .bt{border-top-style:solid;border-top-width:1px}.swagger-ui .br{border-right-style:solid;border-right-width:1px}.swagger-ui .bb{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl{border-left-style:solid;border-left-width:1px}.swagger-ui .bn{border-style:none;border-width:0}@media screen and (min-width:30em){.swagger-ui .ba-ns{border-style:solid;border-width:1px}.swagger-ui .bt-ns{border-top-style:solid;border-top-width:1px}.swagger-ui .br-ns{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-ns{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-ns{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-ns{border-style:none;border-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ba-m{border-style:solid;border-width:1px}.swagger-ui .bt-m{border-top-style:solid;border-top-width:1px}.swagger-ui .br-m{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-m{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-m{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-m{border-style:none;border-width:0}}@media screen and (min-width:60em){.swagger-ui .ba-l{border-style:solid;border-width:1px}.swagger-ui .bt-l{border-top-style:solid;border-top-width:1px}.swagger-ui .br-l{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-l{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-l{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-l{border-style:none;border-width:0}}.swagger-ui .b--black{border-color:#000}.swagger-ui .b--near-black{border-color:#111}.swagger-ui .b--dark-gray{border-color:#333}.swagger-ui .b--mid-gray{border-color:#555}.swagger-ui .b--gray{border-color:#777}.swagger-ui .b--silver{border-color:#999}.swagger-ui .b--light-silver{border-color:#aaa}.swagger-ui .b--moon-gray{border-color:#ccc}.swagger-ui .b--light-gray{border-color:#eee}.swagger-ui .b--near-white{border-color:#f4f4f4}.swagger-ui .b--white{border-color:#fff}.swagger-ui .b--white-90{border-color:hsla(0,0%,100%,.9)}.swagger-ui .b--white-80{border-color:hsla(0,0%,100%,.8)}.swagger-ui .b--white-70{border-color:hsla(0,0%,100%,.7)}.swagger-ui .b--white-60{border-color:hsla(0,0%,100%,.6)}.swagger-ui .b--white-50{border-color:hsla(0,0%,100%,.5)}.swagger-ui .b--white-40{border-color:hsla(0,0%,100%,.4)}.swagger-ui .b--white-30{border-color:hsla(0,0%,100%,.3)}.swagger-ui .b--white-20{border-color:hsla(0,0%,100%,.2)}.swagger-ui .b--white-10{border-color:hsla(0,0%,100%,.1)}.swagger-ui .b--white-05{border-color:hsla(0,0%,100%,.05)}.swagger-ui .b--white-025{border-color:hsla(0,0%,100%,.025)}.swagger-ui .b--white-0125{border-color:hsla(0,0%,100%,.0125)}.swagger-ui .b--black-90{border-color:rgba(0,0,0,.9)}.swagger-ui .b--black-80{border-color:rgba(0,0,0,.8)}.swagger-ui .b--black-70{border-color:rgba(0,0,0,.7)}.swagger-ui .b--black-60{border-color:rgba(0,0,0,.6)}.swagger-ui .b--black-50{border-color:rgba(0,0,0,.5)}.swagger-ui .b--black-40{border-color:rgba(0,0,0,.4)}.swagger-ui .b--black-30{border-color:rgba(0,0,0,.3)}.swagger-ui .b--black-20{border-color:rgba(0,0,0,.2)}.swagger-ui .b--black-10{border-color:rgba(0,0,0,.1)}.swagger-ui .b--black-05{border-color:rgba(0,0,0,.05)}.swagger-ui .b--black-025{border-color:rgba(0,0,0,.025)}.swagger-ui .b--black-0125{border-color:rgba(0,0,0,.0125)}.swagger-ui .b--dark-red{border-color:#e7040f}.swagger-ui .b--red{border-color:#ff4136}.swagger-ui .b--light-red{border-color:#ff725c}.swagger-ui .b--orange{border-color:#ff6300}.swagger-ui .b--gold{border-color:#ffb700}.swagger-ui .b--yellow{border-color:gold}.swagger-ui .b--light-yellow{border-color:#fbf1a9}.swagger-ui .b--purple{border-color:#5e2ca5}.swagger-ui .b--light-purple{border-color:#a463f2}.swagger-ui .b--dark-pink{border-color:#d5008f}.swagger-ui .b--hot-pink{border-color:#ff41b4}.swagger-ui .b--pink{border-color:#ff80cc}.swagger-ui .b--light-pink{border-color:#ffa3d7}.swagger-ui .b--dark-green{border-color:#137752}.swagger-ui .b--green{border-color:#19a974}.swagger-ui .b--light-green{border-color:#9eebcf}.swagger-ui .b--navy{border-color:#001b44}.swagger-ui .b--dark-blue{border-color:#00449e}.swagger-ui .b--blue{border-color:#357edd}.swagger-ui .b--light-blue{border-color:#96ccff}.swagger-ui .b--lightest-blue{border-color:#cdecff}.swagger-ui .b--washed-blue{border-color:#f6fffe}.swagger-ui .b--washed-green{border-color:#e8fdf5}.swagger-ui .b--washed-yellow{border-color:#fffceb}.swagger-ui .b--washed-red{border-color:#ffdfdf}.swagger-ui .b--transparent{border-color:transparent}.swagger-ui .b--inherit{border-color:inherit}.swagger-ui .br0{border-radius:0}.swagger-ui .br1{border-radius:.125rem}.swagger-ui .br2{border-radius:.25rem}.swagger-ui .br3{border-radius:.5rem}.swagger-ui .br4{border-radius:1rem}.swagger-ui .br-100{border-radius:100%}.swagger-ui .br-pill{border-radius:9999px}.swagger-ui .br--bottom{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left{border-bottom-right-radius:0;border-top-right-radius:0}@media screen and (min-width:30em){.swagger-ui .br0-ns{border-radius:0}.swagger-ui .br1-ns{border-radius:.125rem}.swagger-ui .br2-ns{border-radius:.25rem}.swagger-ui .br3-ns{border-radius:.5rem}.swagger-ui .br4-ns{border-radius:1rem}.swagger-ui .br-100-ns{border-radius:100%}.swagger-ui .br-pill-ns{border-radius:9999px}.swagger-ui .br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-ns{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-ns{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-ns{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .br0-m{border-radius:0}.swagger-ui .br1-m{border-radius:.125rem}.swagger-ui .br2-m{border-radius:.25rem}.swagger-ui .br3-m{border-radius:.5rem}.swagger-ui .br4-m{border-radius:1rem}.swagger-ui .br-100-m{border-radius:100%}.swagger-ui .br-pill-m{border-radius:9999px}.swagger-ui .br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-m{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-m{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-m{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:60em){.swagger-ui .br0-l{border-radius:0}.swagger-ui .br1-l{border-radius:.125rem}.swagger-ui .br2-l{border-radius:.25rem}.swagger-ui .br3-l{border-radius:.5rem}.swagger-ui .br4-l{border-radius:1rem}.swagger-ui .br-100-l{border-radius:100%}.swagger-ui .br-pill-l{border-radius:9999px}.swagger-ui .br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-l{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-l{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-l{border-bottom-right-radius:0;border-top-right-radius:0}}.swagger-ui .b--dotted{border-style:dotted}.swagger-ui .b--dashed{border-style:dashed}.swagger-ui .b--solid{border-style:solid}.swagger-ui .b--none{border-style:none}@media screen and (min-width:30em){.swagger-ui .b--dotted-ns{border-style:dotted}.swagger-ui .b--dashed-ns{border-style:dashed}.swagger-ui .b--solid-ns{border-style:solid}.swagger-ui .b--none-ns{border-style:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .b--dotted-m{border-style:dotted}.swagger-ui .b--dashed-m{border-style:dashed}.swagger-ui .b--solid-m{border-style:solid}.swagger-ui .b--none-m{border-style:none}}@media screen and (min-width:60em){.swagger-ui .b--dotted-l{border-style:dotted}.swagger-ui .b--dashed-l{border-style:dashed}.swagger-ui .b--solid-l{border-style:solid}.swagger-ui .b--none-l{border-style:none}}.swagger-ui .bw0{border-width:0}.swagger-ui .bw1{border-width:.125rem}.swagger-ui .bw2{border-width:.25rem}.swagger-ui .bw3{border-width:.5rem}.swagger-ui .bw4{border-width:1rem}.swagger-ui .bw5{border-width:2rem}.swagger-ui .bt-0{border-top-width:0}.swagger-ui .br-0{border-right-width:0}.swagger-ui .bb-0{border-bottom-width:0}.swagger-ui .bl-0{border-left-width:0}@media screen and (min-width:30em){.swagger-ui .bw0-ns{border-width:0}.swagger-ui .bw1-ns{border-width:.125rem}.swagger-ui .bw2-ns{border-width:.25rem}.swagger-ui .bw3-ns{border-width:.5rem}.swagger-ui .bw4-ns{border-width:1rem}.swagger-ui .bw5-ns{border-width:2rem}.swagger-ui .bt-0-ns{border-top-width:0}.swagger-ui .br-0-ns{border-right-width:0}.swagger-ui .bb-0-ns{border-bottom-width:0}.swagger-ui .bl-0-ns{border-left-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bw0-m{border-width:0}.swagger-ui .bw1-m{border-width:.125rem}.swagger-ui .bw2-m{border-width:.25rem}.swagger-ui .bw3-m{border-width:.5rem}.swagger-ui .bw4-m{border-width:1rem}.swagger-ui .bw5-m{border-width:2rem}.swagger-ui .bt-0-m{border-top-width:0}.swagger-ui .br-0-m{border-right-width:0}.swagger-ui .bb-0-m{border-bottom-width:0}.swagger-ui .bl-0-m{border-left-width:0}}@media screen and (min-width:60em){.swagger-ui .bw0-l{border-width:0}.swagger-ui .bw1-l{border-width:.125rem}.swagger-ui .bw2-l{border-width:.25rem}.swagger-ui .bw3-l{border-width:.5rem}.swagger-ui .bw4-l{border-width:1rem}.swagger-ui .bw5-l{border-width:2rem}.swagger-ui .bt-0-l{border-top-width:0}.swagger-ui .br-0-l{border-right-width:0}.swagger-ui .bb-0-l{border-bottom-width:0}.swagger-ui .bl-0-l{border-left-width:0}}.swagger-ui .shadow-1{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}@media screen and (min-width:30em){.swagger-ui .shadow-1-ns{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-ns{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-ns{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-ns{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-ns{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .shadow-1-m{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-m{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-m{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-m{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-m{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:60em){.swagger-ui .shadow-1-l{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-l{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-l{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-l{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-l{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}.swagger-ui .pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.swagger-ui .top-0{top:0}.swagger-ui .right-0{right:0}.swagger-ui .bottom-0{bottom:0}.swagger-ui .left-0{left:0}.swagger-ui .top-1{top:1rem}.swagger-ui .right-1{right:1rem}.swagger-ui .bottom-1{bottom:1rem}.swagger-ui .left-1{left:1rem}.swagger-ui .top-2{top:2rem}.swagger-ui .right-2{right:2rem}.swagger-ui .bottom-2{bottom:2rem}.swagger-ui .left-2{left:2rem}.swagger-ui .top--1{top:-1rem}.swagger-ui .right--1{right:-1rem}.swagger-ui .bottom--1{bottom:-1rem}.swagger-ui .left--1{left:-1rem}.swagger-ui .top--2{top:-2rem}.swagger-ui .right--2{right:-2rem}.swagger-ui .bottom--2{bottom:-2rem}.swagger-ui .left--2{left:-2rem}.swagger-ui .absolute--fill{bottom:0;left:0;right:0;top:0}@media screen and (min-width:30em){.swagger-ui .top-0-ns{top:0}.swagger-ui .left-0-ns{left:0}.swagger-ui .right-0-ns{right:0}.swagger-ui .bottom-0-ns{bottom:0}.swagger-ui .top-1-ns{top:1rem}.swagger-ui .left-1-ns{left:1rem}.swagger-ui .right-1-ns{right:1rem}.swagger-ui .bottom-1-ns{bottom:1rem}.swagger-ui .top-2-ns{top:2rem}.swagger-ui .left-2-ns{left:2rem}.swagger-ui .right-2-ns{right:2rem}.swagger-ui .bottom-2-ns{bottom:2rem}.swagger-ui .top--1-ns{top:-1rem}.swagger-ui .right--1-ns{right:-1rem}.swagger-ui .bottom--1-ns{bottom:-1rem}.swagger-ui .left--1-ns{left:-1rem}.swagger-ui .top--2-ns{top:-2rem}.swagger-ui .right--2-ns{right:-2rem}.swagger-ui .bottom--2-ns{bottom:-2rem}.swagger-ui .left--2-ns{left:-2rem}.swagger-ui .absolute--fill-ns{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .top-0-m{top:0}.swagger-ui .left-0-m{left:0}.swagger-ui .right-0-m{right:0}.swagger-ui .bottom-0-m{bottom:0}.swagger-ui .top-1-m{top:1rem}.swagger-ui .left-1-m{left:1rem}.swagger-ui .right-1-m{right:1rem}.swagger-ui .bottom-1-m{bottom:1rem}.swagger-ui .top-2-m{top:2rem}.swagger-ui .left-2-m{left:2rem}.swagger-ui .right-2-m{right:2rem}.swagger-ui .bottom-2-m{bottom:2rem}.swagger-ui .top--1-m{top:-1rem}.swagger-ui .right--1-m{right:-1rem}.swagger-ui .bottom--1-m{bottom:-1rem}.swagger-ui .left--1-m{left:-1rem}.swagger-ui .top--2-m{top:-2rem}.swagger-ui .right--2-m{right:-2rem}.swagger-ui .bottom--2-m{bottom:-2rem}.swagger-ui .left--2-m{left:-2rem}.swagger-ui .absolute--fill-m{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:60em){.swagger-ui .top-0-l{top:0}.swagger-ui .left-0-l{left:0}.swagger-ui .right-0-l{right:0}.swagger-ui .bottom-0-l{bottom:0}.swagger-ui .top-1-l{top:1rem}.swagger-ui .left-1-l{left:1rem}.swagger-ui .right-1-l{right:1rem}.swagger-ui .bottom-1-l{bottom:1rem}.swagger-ui .top-2-l{top:2rem}.swagger-ui .left-2-l{left:2rem}.swagger-ui .right-2-l{right:2rem}.swagger-ui .bottom-2-l{bottom:2rem}.swagger-ui .top--1-l{top:-1rem}.swagger-ui .right--1-l{right:-1rem}.swagger-ui .bottom--1-l{bottom:-1rem}.swagger-ui .left--1-l{left:-1rem}.swagger-ui .top--2-l{top:-2rem}.swagger-ui .right--2-l{right:-2rem}.swagger-ui .bottom--2-l{bottom:-2rem}.swagger-ui .left--2-l{left:-2rem}.swagger-ui .absolute--fill-l{bottom:0;left:0;right:0;top:0}}.swagger-ui .cf::after,.swagger-ui .cf::before{content:" ";display:table}.swagger-ui .cf::after{clear:both}.swagger-ui .cf{*zoom:1}.swagger-ui .cl{clear:left}.swagger-ui .cr{clear:right}.swagger-ui .cb{clear:both}.swagger-ui .cn{clear:none}@media screen and (min-width:30em){.swagger-ui .cl-ns{clear:left}.swagger-ui .cr-ns{clear:right}.swagger-ui .cb-ns{clear:both}.swagger-ui .cn-ns{clear:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cl-m{clear:left}.swagger-ui .cr-m{clear:right}.swagger-ui .cb-m{clear:both}.swagger-ui .cn-m{clear:none}}@media screen and (min-width:60em){.swagger-ui .cl-l{clear:left}.swagger-ui .cr-l{clear:right}.swagger-ui .cb-l{clear:both}.swagger-ui .cn-l{clear:none}}.swagger-ui .flex{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.swagger-ui .flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.swagger-ui .flex-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .flex-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.swagger-ui .flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.swagger-ui .flex-nowrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.swagger-ui .flex-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.swagger-ui .items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.swagger-ui .items-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.swagger-ui .items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .items-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.swagger-ui .items-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.swagger-ui .self-start{-ms-flex-item-align:start;align-self:flex-start}.swagger-ui .self-end{-ms-flex-item-align:end;align-self:flex-end}.swagger-ui .self-center{-ms-flex-item-align:center;align-self:center}.swagger-ui .self-baseline{-ms-flex-item-align:baseline;align-self:baseline}.swagger-ui .self-stretch{-ms-flex-item-align:stretch;align-self:stretch}.swagger-ui .justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.swagger-ui .justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.swagger-ui .justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.swagger-ui .justify-around{-ms-flex-pack:distribute;justify-content:space-around}.swagger-ui .content-start{-ms-flex-line-pack:start;align-content:flex-start}.swagger-ui .content-end{-ms-flex-line-pack:end;align-content:flex-end}.swagger-ui .content-center{-ms-flex-line-pack:center;align-content:center}.swagger-ui .content-between{-ms-flex-line-pack:justify;align-content:space-between}.swagger-ui .content-around{-ms-flex-line-pack:distribute;align-content:space-around}.swagger-ui .content-stretch{-ms-flex-line-pack:stretch;align-content:stretch}.swagger-ui .order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.swagger-ui .order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.swagger-ui .order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.swagger-ui .order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.swagger-ui .order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.swagger-ui .order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.swagger-ui .order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.swagger-ui .order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.swagger-ui .order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.swagger-ui .order-last{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.swagger-ui .flex-grow-0{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.swagger-ui .flex-grow-1{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.swagger-ui .flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.swagger-ui .flex-shrink-1{-ms-flex-negative:1;flex-shrink:1}@media screen and (min-width:30em){.swagger-ui .flex-ns{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .inline-flex-ns{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.swagger-ui .flex-auto-ns{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-ns{-webkit-box-flex:0;-ms-flex:none;flex:none}.swagger-ui .flex-column-ns{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .flex-row-ns{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.swagger-ui .flex-wrap-ns{-ms-flex-wrap:wrap;flex-wrap:wrap}.swagger-ui .flex-nowrap-ns{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-ns{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-ns{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.swagger-ui .flex-row-reverse-ns{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.swagger-ui .items-start-ns{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.swagger-ui .items-end-ns{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.swagger-ui .items-center-ns{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .items-baseline-ns{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.swagger-ui .items-stretch-ns{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.swagger-ui .self-start-ns{-ms-flex-item-align:start;align-self:flex-start}.swagger-ui .self-end-ns{-ms-flex-item-align:end;align-self:flex-end}.swagger-ui .self-center-ns{-ms-flex-item-align:center;align-self:center}.swagger-ui .self-baseline-ns{-ms-flex-item-align:baseline;align-self:baseline}.swagger-ui .self-stretch-ns{-ms-flex-item-align:stretch;align-self:stretch}.swagger-ui .justify-start-ns{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.swagger-ui .justify-end-ns{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .justify-center-ns{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.swagger-ui .justify-between-ns{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.swagger-ui .justify-around-ns{-ms-flex-pack:distribute;justify-content:space-around}.swagger-ui .content-start-ns{-ms-flex-line-pack:start;align-content:flex-start}.swagger-ui .content-end-ns{-ms-flex-line-pack:end;align-content:flex-end}.swagger-ui .content-center-ns{-ms-flex-line-pack:center;align-content:center}.swagger-ui .content-between-ns{-ms-flex-line-pack:justify;align-content:space-between}.swagger-ui .content-around-ns{-ms-flex-line-pack:distribute;align-content:space-around}.swagger-ui .content-stretch-ns{-ms-flex-line-pack:stretch;align-content:stretch}.swagger-ui .order-0-ns{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.swagger-ui .order-1-ns{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.swagger-ui .order-2-ns{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.swagger-ui .order-3-ns{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.swagger-ui .order-4-ns{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.swagger-ui .order-5-ns{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.swagger-ui .order-6-ns{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.swagger-ui .order-7-ns{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.swagger-ui .order-8-ns{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.swagger-ui .order-last-ns{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.swagger-ui .flex-grow-0-ns{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.swagger-ui .flex-grow-1-ns{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.swagger-ui .flex-shrink-0-ns{-ms-flex-negative:0;flex-shrink:0}.swagger-ui .flex-shrink-1-ns{-ms-flex-negative:1;flex-shrink:1}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .flex-m{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .inline-flex-m{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.swagger-ui .flex-auto-m{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-m{-webkit-box-flex:0;-ms-flex:none;flex:none}.swagger-ui .flex-column-m{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .flex-row-m{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.swagger-ui .flex-wrap-m{-ms-flex-wrap:wrap;flex-wrap:wrap}.swagger-ui .flex-nowrap-m{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-m{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-m{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.swagger-ui .flex-row-reverse-m{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.swagger-ui .items-start-m{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.swagger-ui .items-end-m{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.swagger-ui .items-center-m{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .items-baseline-m{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.swagger-ui .items-stretch-m{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.swagger-ui .self-start-m{-ms-flex-item-align:start;align-self:flex-start}.swagger-ui .self-end-m{-ms-flex-item-align:end;align-self:flex-end}.swagger-ui .self-center-m{-ms-flex-item-align:center;align-self:center}.swagger-ui .self-baseline-m{-ms-flex-item-align:baseline;align-self:baseline}.swagger-ui .self-stretch-m{-ms-flex-item-align:stretch;align-self:stretch}.swagger-ui .justify-start-m{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.swagger-ui .justify-end-m{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .justify-center-m{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.swagger-ui .justify-between-m{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.swagger-ui .justify-around-m{-ms-flex-pack:distribute;justify-content:space-around}.swagger-ui .content-start-m{-ms-flex-line-pack:start;align-content:flex-start}.swagger-ui .content-end-m{-ms-flex-line-pack:end;align-content:flex-end}.swagger-ui .content-center-m{-ms-flex-line-pack:center;align-content:center}.swagger-ui .content-between-m{-ms-flex-line-pack:justify;align-content:space-between}.swagger-ui .content-around-m{-ms-flex-line-pack:distribute;align-content:space-around}.swagger-ui .content-stretch-m{-ms-flex-line-pack:stretch;align-content:stretch}.swagger-ui .order-0-m{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.swagger-ui .order-1-m{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.swagger-ui .order-2-m{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.swagger-ui .order-3-m{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.swagger-ui .order-4-m{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.swagger-ui .order-5-m{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.swagger-ui .order-6-m{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.swagger-ui .order-7-m{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.swagger-ui .order-8-m{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.swagger-ui .order-last-m{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.swagger-ui .flex-grow-0-m{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.swagger-ui .flex-grow-1-m{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.swagger-ui .flex-shrink-0-m{-ms-flex-negative:0;flex-shrink:0}.swagger-ui .flex-shrink-1-m{-ms-flex-negative:1;flex-shrink:1}}@media screen and (min-width:60em){.swagger-ui .flex-l{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .inline-flex-l{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.swagger-ui .flex-auto-l{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-l{-webkit-box-flex:0;-ms-flex:none;flex:none}.swagger-ui .flex-column-l{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .flex-row-l{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.swagger-ui .flex-wrap-l{-ms-flex-wrap:wrap;flex-wrap:wrap}.swagger-ui .flex-nowrap-l{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-l{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-l{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.swagger-ui .flex-row-reverse-l{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.swagger-ui .items-start-l{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.swagger-ui .items-end-l{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.swagger-ui .items-center-l{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .items-baseline-l{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.swagger-ui .items-stretch-l{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.swagger-ui .self-start-l{-ms-flex-item-align:start;align-self:flex-start}.swagger-ui .self-end-l{-ms-flex-item-align:end;align-self:flex-end}.swagger-ui .self-center-l{-ms-flex-item-align:center;align-self:center}.swagger-ui .self-baseline-l{-ms-flex-item-align:baseline;align-self:baseline}.swagger-ui .self-stretch-l{-ms-flex-item-align:stretch;align-self:stretch}.swagger-ui .justify-start-l{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.swagger-ui .justify-end-l{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .justify-center-l{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.swagger-ui .justify-between-l{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.swagger-ui .justify-around-l{-ms-flex-pack:distribute;justify-content:space-around}.swagger-ui .content-start-l{-ms-flex-line-pack:start;align-content:flex-start}.swagger-ui .content-end-l{-ms-flex-line-pack:end;align-content:flex-end}.swagger-ui .content-center-l{-ms-flex-line-pack:center;align-content:center}.swagger-ui .content-between-l{-ms-flex-line-pack:justify;align-content:space-between}.swagger-ui .content-around-l{-ms-flex-line-pack:distribute;align-content:space-around}.swagger-ui .content-stretch-l{-ms-flex-line-pack:stretch;align-content:stretch}.swagger-ui .order-0-l{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.swagger-ui .order-1-l{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.swagger-ui .order-2-l{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.swagger-ui .order-3-l{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.swagger-ui .order-4-l{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.swagger-ui .order-5-l{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.swagger-ui .order-6-l{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.swagger-ui .order-7-l{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.swagger-ui .order-8-l{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.swagger-ui .order-last-l{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.swagger-ui .flex-grow-0-l{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.swagger-ui .flex-grow-1-l{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.swagger-ui .flex-shrink-0-l{-ms-flex-negative:0;flex-shrink:0}.swagger-ui .flex-shrink-1-l{-ms-flex-negative:1;flex-shrink:1}}.swagger-ui .dn{display:none}.swagger-ui .di{display:inline}.swagger-ui .db{display:block}.swagger-ui .dib{display:inline-block}.swagger-ui .dit{display:inline-table}.swagger-ui .dt{display:table}.swagger-ui .dtc{display:table-cell}.swagger-ui .dt-row{display:table-row}.swagger-ui .dt-row-group{display:table-row-group}.swagger-ui .dt-column{display:table-column}.swagger-ui .dt-column-group{display:table-column-group}.swagger-ui .dt--fixed{table-layout:fixed;width:100%}@media screen and (min-width:30em){.swagger-ui .dn-ns{display:none}.swagger-ui .di-ns{display:inline}.swagger-ui .db-ns{display:block}.swagger-ui .dib-ns{display:inline-block}.swagger-ui .dit-ns{display:inline-table}.swagger-ui .dt-ns{display:table}.swagger-ui .dtc-ns{display:table-cell}.swagger-ui .dt-row-ns{display:table-row}.swagger-ui .dt-row-group-ns{display:table-row-group}.swagger-ui .dt-column-ns{display:table-column}.swagger-ui .dt-column-group-ns{display:table-column-group}.swagger-ui .dt--fixed-ns{table-layout:fixed;width:100%}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .dn-m{display:none}.swagger-ui .di-m{display:inline}.swagger-ui .db-m{display:block}.swagger-ui .dib-m{display:inline-block}.swagger-ui .dit-m{display:inline-table}.swagger-ui .dt-m{display:table}.swagger-ui .dtc-m{display:table-cell}.swagger-ui .dt-row-m{display:table-row}.swagger-ui .dt-row-group-m{display:table-row-group}.swagger-ui .dt-column-m{display:table-column}.swagger-ui .dt-column-group-m{display:table-column-group}.swagger-ui .dt--fixed-m{table-layout:fixed;width:100%}}@media screen and (min-width:60em){.swagger-ui .dn-l{display:none}.swagger-ui .di-l{display:inline}.swagger-ui .db-l{display:block}.swagger-ui .dib-l{display:inline-block}.swagger-ui .dit-l{display:inline-table}.swagger-ui .dt-l{display:table}.swagger-ui .dtc-l{display:table-cell}.swagger-ui .dt-row-l{display:table-row}.swagger-ui .dt-row-group-l{display:table-row-group}.swagger-ui .dt-column-l{display:table-column}.swagger-ui .dt-column-group-l{display:table-column-group}.swagger-ui .dt--fixed-l{table-layout:fixed;width:100%}}.swagger-ui .fl{_display:inline;float:left}.swagger-ui .fr{_display:inline;float:right}.swagger-ui .fn{float:none}@media screen and (min-width:30em){.swagger-ui .fl-ns{_display:inline;float:left}.swagger-ui .fr-ns{_display:inline;float:right}.swagger-ui .fn-ns{float:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .fl-m{_display:inline;float:left}.swagger-ui .fr-m{_display:inline;float:right}.swagger-ui .fn-m{float:none}}@media screen and (min-width:60em){.swagger-ui .fl-l{_display:inline;float:left}.swagger-ui .fr-l{_display:inline;float:right}.swagger-ui .fn-l{float:none}}.swagger-ui .sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.swagger-ui .serif{font-family:georgia,serif}.swagger-ui .system-sans-serif{font-family:sans-serif}.swagger-ui .system-serif{font-family:serif}.swagger-ui .code,.swagger-ui code{font-family:Consolas,monaco,monospace}.swagger-ui .courier{font-family:Courier Next,courier,monospace}.swagger-ui .helvetica{font-family:helvetica neue,helvetica,sans-serif}.swagger-ui .avenir{font-family:avenir next,avenir,sans-serif}.swagger-ui .athelas{font-family:athelas,georgia,serif}.swagger-ui .georgia{font-family:georgia,serif}.swagger-ui .times{font-family:times,serif}.swagger-ui .bodoni{font-family:Bodoni MT,serif}.swagger-ui .calisto{font-family:Calisto MT,serif}.swagger-ui .garamond{font-family:garamond,serif}.swagger-ui .baskerville{font-family:baskerville,serif}.swagger-ui .i{font-style:italic}.swagger-ui .fs-normal{font-style:normal}@media screen and (min-width:30em){.swagger-ui .i-ns{font-style:italic}.swagger-ui .fs-normal-ns{font-style:normal}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .i-m{font-style:italic}.swagger-ui .fs-normal-m{font-style:normal}}@media screen and (min-width:60em){.swagger-ui .i-l{font-style:italic}.swagger-ui .fs-normal-l{font-style:normal}}.swagger-ui .normal{font-weight:400}.swagger-ui .b{font-weight:700}.swagger-ui .fw1{font-weight:100}.swagger-ui .fw2{font-weight:200}.swagger-ui .fw3{font-weight:300}.swagger-ui .fw4{font-weight:400}.swagger-ui .fw5{font-weight:500}.swagger-ui .fw6{font-weight:600}.swagger-ui .fw7{font-weight:700}.swagger-ui .fw8{font-weight:800}.swagger-ui .fw9{font-weight:900}@media screen and (min-width:30em){.swagger-ui .normal-ns{font-weight:400}.swagger-ui .b-ns{font-weight:700}.swagger-ui .fw1-ns{font-weight:100}.swagger-ui .fw2-ns{font-weight:200}.swagger-ui .fw3-ns{font-weight:300}.swagger-ui .fw4-ns{font-weight:400}.swagger-ui .fw5-ns{font-weight:500}.swagger-ui .fw6-ns{font-weight:600}.swagger-ui .fw7-ns{font-weight:700}.swagger-ui .fw8-ns{font-weight:800}.swagger-ui .fw9-ns{font-weight:900}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .normal-m{font-weight:400}.swagger-ui .b-m{font-weight:700}.swagger-ui .fw1-m{font-weight:100}.swagger-ui .fw2-m{font-weight:200}.swagger-ui .fw3-m{font-weight:300}.swagger-ui .fw4-m{font-weight:400}.swagger-ui .fw5-m{font-weight:500}.swagger-ui .fw6-m{font-weight:600}.swagger-ui .fw7-m{font-weight:700}.swagger-ui .fw8-m{font-weight:800}.swagger-ui .fw9-m{font-weight:900}}@media screen and (min-width:60em){.swagger-ui .normal-l{font-weight:400}.swagger-ui .b-l{font-weight:700}.swagger-ui .fw1-l{font-weight:100}.swagger-ui .fw2-l{font-weight:200}.swagger-ui .fw3-l{font-weight:300}.swagger-ui .fw4-l{font-weight:400}.swagger-ui .fw5-l{font-weight:500}.swagger-ui .fw6-l{font-weight:600}.swagger-ui .fw7-l{font-weight:700}.swagger-ui .fw8-l{font-weight:800}.swagger-ui .fw9-l{font-weight:900}}.swagger-ui .input-reset{-webkit-appearance:none;-moz-appearance:none}.swagger-ui .button-reset::-moz-focus-inner,.swagger-ui .input-reset::-moz-focus-inner{border:0;padding:0}.swagger-ui .h1{height:1rem}.swagger-ui .h2{height:2rem}.swagger-ui .h3{height:4rem}.swagger-ui .h4{height:8rem}.swagger-ui .h5{height:16rem}.swagger-ui .h-25{height:25%}.swagger-ui .h-50{height:50%}.swagger-ui .h-75{height:75%}.swagger-ui .h-100{height:100%}.swagger-ui .min-h-100{min-height:100%}.swagger-ui .vh-25{height:25vh}.swagger-ui .vh-50{height:50vh}.swagger-ui .vh-75{height:75vh}.swagger-ui .vh-100{height:100vh}.swagger-ui .min-vh-100{min-height:100vh}.swagger-ui .h-auto{height:auto}.swagger-ui .h-inherit{height:inherit}@media screen and (min-width:30em){.swagger-ui .h1-ns{height:1rem}.swagger-ui .h2-ns{height:2rem}.swagger-ui .h3-ns{height:4rem}.swagger-ui .h4-ns{height:8rem}.swagger-ui .h5-ns{height:16rem}.swagger-ui .h-25-ns{height:25%}.swagger-ui .h-50-ns{height:50%}.swagger-ui .h-75-ns{height:75%}.swagger-ui .h-100-ns{height:100%}.swagger-ui .min-h-100-ns{min-height:100%}.swagger-ui .vh-25-ns{height:25vh}.swagger-ui .vh-50-ns{height:50vh}.swagger-ui .vh-75-ns{height:75vh}.swagger-ui .vh-100-ns{height:100vh}.swagger-ui .min-vh-100-ns{min-height:100vh}.swagger-ui .h-auto-ns{height:auto}.swagger-ui .h-inherit-ns{height:inherit}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .h1-m{height:1rem}.swagger-ui .h2-m{height:2rem}.swagger-ui .h3-m{height:4rem}.swagger-ui .h4-m{height:8rem}.swagger-ui .h5-m{height:16rem}.swagger-ui .h-25-m{height:25%}.swagger-ui .h-50-m{height:50%}.swagger-ui .h-75-m{height:75%}.swagger-ui .h-100-m{height:100%}.swagger-ui .min-h-100-m{min-height:100%}.swagger-ui .vh-25-m{height:25vh}.swagger-ui .vh-50-m{height:50vh}.swagger-ui .vh-75-m{height:75vh}.swagger-ui .vh-100-m{height:100vh}.swagger-ui .min-vh-100-m{min-height:100vh}.swagger-ui .h-auto-m{height:auto}.swagger-ui .h-inherit-m{height:inherit}}@media screen and (min-width:60em){.swagger-ui .h1-l{height:1rem}.swagger-ui .h2-l{height:2rem}.swagger-ui .h3-l{height:4rem}.swagger-ui .h4-l{height:8rem}.swagger-ui .h5-l{height:16rem}.swagger-ui .h-25-l{height:25%}.swagger-ui .h-50-l{height:50%}.swagger-ui .h-75-l{height:75%}.swagger-ui .h-100-l{height:100%}.swagger-ui .min-h-100-l{min-height:100%}.swagger-ui .vh-25-l{height:25vh}.swagger-ui .vh-50-l{height:50vh}.swagger-ui .vh-75-l{height:75vh}.swagger-ui .vh-100-l{height:100vh}.swagger-ui .min-vh-100-l{min-height:100vh}.swagger-ui .h-auto-l{height:auto}.swagger-ui .h-inherit-l{height:inherit}}.swagger-ui .tracked{letter-spacing:.1em}.swagger-ui .tracked-tight{letter-spacing:-.05em}.swagger-ui .tracked-mega{letter-spacing:.25em}@media screen and (min-width:30em){.swagger-ui .tracked-ns{letter-spacing:.1em}.swagger-ui .tracked-tight-ns{letter-spacing:-.05em}.swagger-ui .tracked-mega-ns{letter-spacing:.25em}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tracked-m{letter-spacing:.1em}.swagger-ui .tracked-tight-m{letter-spacing:-.05em}.swagger-ui .tracked-mega-m{letter-spacing:.25em}}@media screen and (min-width:60em){.swagger-ui .tracked-l{letter-spacing:.1em}.swagger-ui .tracked-tight-l{letter-spacing:-.05em}.swagger-ui .tracked-mega-l{letter-spacing:.25em}}.swagger-ui .lh-solid{line-height:1}.swagger-ui .lh-title{line-height:1.25}.swagger-ui .lh-copy{line-height:1.5}@media screen and (min-width:30em){.swagger-ui .lh-solid-ns{line-height:1}.swagger-ui .lh-title-ns{line-height:1.25}.swagger-ui .lh-copy-ns{line-height:1.5}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .lh-solid-m{line-height:1}.swagger-ui .lh-title-m{line-height:1.25}.swagger-ui .lh-copy-m{line-height:1.5}}@media screen and (min-width:60em){.swagger-ui .lh-solid-l{line-height:1}.swagger-ui .lh-title-l{line-height:1.25}.swagger-ui .lh-copy-l{line-height:1.5}}.swagger-ui .link{text-decoration:none}.swagger-ui .link,.swagger-ui .link:active,.swagger-ui .link:focus,.swagger-ui .link:hover,.swagger-ui .link:link,.swagger-ui .link:visited{-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.swagger-ui .link:focus{outline:1px dotted currentColor}.swagger-ui .list{list-style-type:none}.swagger-ui .mw-100{max-width:100%}.swagger-ui .mw1{max-width:1rem}.swagger-ui .mw2{max-width:2rem}.swagger-ui .mw3{max-width:4rem}.swagger-ui .mw4{max-width:8rem}.swagger-ui .mw5{max-width:16rem}.swagger-ui .mw6{max-width:32rem}.swagger-ui .mw7{max-width:48rem}.swagger-ui .mw8{max-width:64rem}.swagger-ui .mw9{max-width:96rem}.swagger-ui .mw-none{max-width:none}@media screen and (min-width:30em){.swagger-ui .mw-100-ns{max-width:100%}.swagger-ui .mw1-ns{max-width:1rem}.swagger-ui .mw2-ns{max-width:2rem}.swagger-ui .mw3-ns{max-width:4rem}.swagger-ui .mw4-ns{max-width:8rem}.swagger-ui .mw5-ns{max-width:16rem}.swagger-ui .mw6-ns{max-width:32rem}.swagger-ui .mw7-ns{max-width:48rem}.swagger-ui .mw8-ns{max-width:64rem}.swagger-ui .mw9-ns{max-width:96rem}.swagger-ui .mw-none-ns{max-width:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .mw-100-m{max-width:100%}.swagger-ui .mw1-m{max-width:1rem}.swagger-ui .mw2-m{max-width:2rem}.swagger-ui .mw3-m{max-width:4rem}.swagger-ui .mw4-m{max-width:8rem}.swagger-ui .mw5-m{max-width:16rem}.swagger-ui .mw6-m{max-width:32rem}.swagger-ui .mw7-m{max-width:48rem}.swagger-ui .mw8-m{max-width:64rem}.swagger-ui .mw9-m{max-width:96rem}.swagger-ui .mw-none-m{max-width:none}}@media screen and (min-width:60em){.swagger-ui .mw-100-l{max-width:100%}.swagger-ui .mw1-l{max-width:1rem}.swagger-ui .mw2-l{max-width:2rem}.swagger-ui .mw3-l{max-width:4rem}.swagger-ui .mw4-l{max-width:8rem}.swagger-ui .mw5-l{max-width:16rem}.swagger-ui .mw6-l{max-width:32rem}.swagger-ui .mw7-l{max-width:48rem}.swagger-ui .mw8-l{max-width:64rem}.swagger-ui .mw9-l{max-width:96rem}.swagger-ui .mw-none-l{max-width:none}}.swagger-ui .w1{width:1rem}.swagger-ui .w2{width:2rem}.swagger-ui .w3{width:4rem}.swagger-ui .w4{width:8rem}.swagger-ui .w5{width:16rem}.swagger-ui .w-10{width:10%}.swagger-ui .w-20{width:20%}.swagger-ui .w-25{width:25%}.swagger-ui .w-30{width:30%}.swagger-ui .w-33{width:33%}.swagger-ui .w-34{width:34%}.swagger-ui .w-40{width:40%}.swagger-ui .w-50{width:50%}.swagger-ui .w-60{width:60%}.swagger-ui .w-70{width:70%}.swagger-ui .w-75{width:75%}.swagger-ui .w-80{width:80%}.swagger-ui .w-90{width:90%}.swagger-ui .w-100{width:100%}.swagger-ui .w-third{width:33.33333%}.swagger-ui .w-two-thirds{width:66.66667%}.swagger-ui .w-auto{width:auto}@media screen and (min-width:30em){.swagger-ui .w1-ns{width:1rem}.swagger-ui .w2-ns{width:2rem}.swagger-ui .w3-ns{width:4rem}.swagger-ui .w4-ns{width:8rem}.swagger-ui .w5-ns{width:16rem}.swagger-ui .w-10-ns{width:10%}.swagger-ui .w-20-ns{width:20%}.swagger-ui .w-25-ns{width:25%}.swagger-ui .w-30-ns{width:30%}.swagger-ui .w-33-ns{width:33%}.swagger-ui .w-34-ns{width:34%}.swagger-ui .w-40-ns{width:40%}.swagger-ui .w-50-ns{width:50%}.swagger-ui .w-60-ns{width:60%}.swagger-ui .w-70-ns{width:70%}.swagger-ui .w-75-ns{width:75%}.swagger-ui .w-80-ns{width:80%}.swagger-ui .w-90-ns{width:90%}.swagger-ui .w-100-ns{width:100%}.swagger-ui .w-third-ns{width:33.33333%}.swagger-ui .w-two-thirds-ns{width:66.66667%}.swagger-ui .w-auto-ns{width:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .w1-m{width:1rem}.swagger-ui .w2-m{width:2rem}.swagger-ui .w3-m{width:4rem}.swagger-ui .w4-m{width:8rem}.swagger-ui .w5-m{width:16rem}.swagger-ui .w-10-m{width:10%}.swagger-ui .w-20-m{width:20%}.swagger-ui .w-25-m{width:25%}.swagger-ui .w-30-m{width:30%}.swagger-ui .w-33-m{width:33%}.swagger-ui .w-34-m{width:34%}.swagger-ui .w-40-m{width:40%}.swagger-ui .w-50-m{width:50%}.swagger-ui .w-60-m{width:60%}.swagger-ui .w-70-m{width:70%}.swagger-ui .w-75-m{width:75%}.swagger-ui .w-80-m{width:80%}.swagger-ui .w-90-m{width:90%}.swagger-ui .w-100-m{width:100%}.swagger-ui .w-third-m{width:33.33333%}.swagger-ui .w-two-thirds-m{width:66.66667%}.swagger-ui .w-auto-m{width:auto}}@media screen and (min-width:60em){.swagger-ui .w1-l{width:1rem}.swagger-ui .w2-l{width:2rem}.swagger-ui .w3-l{width:4rem}.swagger-ui .w4-l{width:8rem}.swagger-ui .w5-l{width:16rem}.swagger-ui .w-10-l{width:10%}.swagger-ui .w-20-l{width:20%}.swagger-ui .w-25-l{width:25%}.swagger-ui .w-30-l{width:30%}.swagger-ui .w-33-l{width:33%}.swagger-ui .w-34-l{width:34%}.swagger-ui .w-40-l{width:40%}.swagger-ui .w-50-l{width:50%}.swagger-ui .w-60-l{width:60%}.swagger-ui .w-70-l{width:70%}.swagger-ui .w-75-l{width:75%}.swagger-ui .w-80-l{width:80%}.swagger-ui .w-90-l{width:90%}.swagger-ui .w-100-l{width:100%}.swagger-ui .w-third-l{width:33.33333%}.swagger-ui .w-two-thirds-l{width:66.66667%}.swagger-ui .w-auto-l{width:auto}}.swagger-ui .overflow-visible{overflow:visible}.swagger-ui .overflow-hidden{overflow:hidden}.swagger-ui .overflow-scroll{overflow:scroll}.swagger-ui .overflow-auto{overflow:auto}.swagger-ui .overflow-x-visible{overflow-x:visible}.swagger-ui .overflow-x-hidden{overflow-x:hidden}.swagger-ui .overflow-x-scroll{overflow-x:scroll}.swagger-ui .overflow-x-auto{overflow-x:auto}.swagger-ui .overflow-y-visible{overflow-y:visible}.swagger-ui .overflow-y-hidden{overflow-y:hidden}.swagger-ui .overflow-y-scroll{overflow-y:scroll}.swagger-ui .overflow-y-auto{overflow-y:auto}@media screen and (min-width:30em){.swagger-ui .overflow-visible-ns{overflow:visible}.swagger-ui .overflow-hidden-ns{overflow:hidden}.swagger-ui .overflow-scroll-ns{overflow:scroll}.swagger-ui .overflow-auto-ns{overflow:auto}.swagger-ui .overflow-x-visible-ns{overflow-x:visible}.swagger-ui .overflow-x-hidden-ns{overflow-x:hidden}.swagger-ui .overflow-x-scroll-ns{overflow-x:scroll}.swagger-ui .overflow-x-auto-ns{overflow-x:auto}.swagger-ui .overflow-y-visible-ns{overflow-y:visible}.swagger-ui .overflow-y-hidden-ns{overflow-y:hidden}.swagger-ui .overflow-y-scroll-ns{overflow-y:scroll}.swagger-ui .overflow-y-auto-ns{overflow-y:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .overflow-visible-m{overflow:visible}.swagger-ui .overflow-hidden-m{overflow:hidden}.swagger-ui .overflow-scroll-m{overflow:scroll}.swagger-ui .overflow-auto-m{overflow:auto}.swagger-ui .overflow-x-visible-m{overflow-x:visible}.swagger-ui .overflow-x-hidden-m{overflow-x:hidden}.swagger-ui .overflow-x-scroll-m{overflow-x:scroll}.swagger-ui .overflow-x-auto-m{overflow-x:auto}.swagger-ui .overflow-y-visible-m{overflow-y:visible}.swagger-ui .overflow-y-hidden-m{overflow-y:hidden}.swagger-ui .overflow-y-scroll-m{overflow-y:scroll}.swagger-ui .overflow-y-auto-m{overflow-y:auto}}@media screen and (min-width:60em){.swagger-ui .overflow-visible-l{overflow:visible}.swagger-ui .overflow-hidden-l{overflow:hidden}.swagger-ui .overflow-scroll-l{overflow:scroll}.swagger-ui .overflow-auto-l{overflow:auto}.swagger-ui .overflow-x-visible-l{overflow-x:visible}.swagger-ui .overflow-x-hidden-l{overflow-x:hidden}.swagger-ui .overflow-x-scroll-l{overflow-x:scroll}.swagger-ui .overflow-x-auto-l{overflow-x:auto}.swagger-ui .overflow-y-visible-l{overflow-y:visible}.swagger-ui .overflow-y-hidden-l{overflow-y:hidden}.swagger-ui .overflow-y-scroll-l{overflow-y:scroll}.swagger-ui .overflow-y-auto-l{overflow-y:auto}}.swagger-ui .static{position:static}.swagger-ui .relative{position:relative}.swagger-ui .absolute{position:absolute}.swagger-ui .fixed{position:fixed}@media screen and (min-width:30em){.swagger-ui .static-ns{position:static}.swagger-ui .relative-ns{position:relative}.swagger-ui .absolute-ns{position:absolute}.swagger-ui .fixed-ns{position:fixed}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .static-m{position:static}.swagger-ui .relative-m{position:relative}.swagger-ui .absolute-m{position:absolute}.swagger-ui .fixed-m{position:fixed}}@media screen and (min-width:60em){.swagger-ui .static-l{position:static}.swagger-ui .relative-l{position:relative}.swagger-ui .absolute-l{position:absolute}.swagger-ui .fixed-l{position:fixed}}.swagger-ui .o-100{opacity:1}.swagger-ui .o-90{opacity:.9}.swagger-ui .o-80{opacity:.8}.swagger-ui .o-70{opacity:.7}.swagger-ui .o-60{opacity:.6}.swagger-ui .o-50{opacity:.5}.swagger-ui .o-40{opacity:.4}.swagger-ui .o-30{opacity:.3}.swagger-ui .o-20{opacity:.2}.swagger-ui .o-10{opacity:.1}.swagger-ui .o-05{opacity:.05}.swagger-ui .o-025{opacity:.025}.swagger-ui .o-0{opacity:0}.swagger-ui .rotate-45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swagger-ui .rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.swagger-ui .rotate-135{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.swagger-ui .rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.swagger-ui .rotate-225{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.swagger-ui .rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.swagger-ui .rotate-315{-webkit-transform:rotate(315deg);transform:rotate(315deg)}@media screen and (min-width:30em){.swagger-ui .rotate-45-ns{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swagger-ui .rotate-90-ns{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.swagger-ui .rotate-135-ns{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.swagger-ui .rotate-180-ns{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.swagger-ui .rotate-225-ns{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.swagger-ui .rotate-270-ns{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.swagger-ui .rotate-315-ns{-webkit-transform:rotate(315deg);transform:rotate(315deg)}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .rotate-45-m{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swagger-ui .rotate-90-m{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.swagger-ui .rotate-135-m{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.swagger-ui .rotate-180-m{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.swagger-ui .rotate-225-m{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.swagger-ui .rotate-270-m{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.swagger-ui .rotate-315-m{-webkit-transform:rotate(315deg);transform:rotate(315deg)}}@media screen and (min-width:60em){.swagger-ui .rotate-45-l{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swagger-ui .rotate-90-l{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.swagger-ui .rotate-135-l{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.swagger-ui .rotate-180-l{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.swagger-ui .rotate-225-l{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.swagger-ui .rotate-270-l{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.swagger-ui .rotate-315-l{-webkit-transform:rotate(315deg);transform:rotate(315deg)}}.swagger-ui .black-90{color:rgba(0,0,0,.9)}.swagger-ui .black-80{color:rgba(0,0,0,.8)}.swagger-ui .black-70{color:rgba(0,0,0,.7)}.swagger-ui .black-60{color:rgba(0,0,0,.6)}.swagger-ui .black-50{color:rgba(0,0,0,.5)}.swagger-ui .black-40{color:rgba(0,0,0,.4)}.swagger-ui .black-30{color:rgba(0,0,0,.3)}.swagger-ui .black-20{color:rgba(0,0,0,.2)}.swagger-ui .black-10{color:rgba(0,0,0,.1)}.swagger-ui .black-05{color:rgba(0,0,0,.05)}.swagger-ui .white-90{color:hsla(0,0%,100%,.9)}.swagger-ui .white-80{color:hsla(0,0%,100%,.8)}.swagger-ui .white-70{color:hsla(0,0%,100%,.7)}.swagger-ui .white-60{color:hsla(0,0%,100%,.6)}.swagger-ui .white-50{color:hsla(0,0%,100%,.5)}.swagger-ui .white-40{color:hsla(0,0%,100%,.4)}.swagger-ui .white-30{color:hsla(0,0%,100%,.3)}.swagger-ui .white-20{color:hsla(0,0%,100%,.2)}.swagger-ui .white-10{color:hsla(0,0%,100%,.1)}.swagger-ui .black{color:#000}.swagger-ui .near-black{color:#111}.swagger-ui .dark-gray{color:#333}.swagger-ui .mid-gray{color:#555}.swagger-ui .gray{color:#777}.swagger-ui .silver{color:#999}.swagger-ui .light-silver{color:#aaa}.swagger-ui .moon-gray{color:#ccc}.swagger-ui .light-gray{color:#eee}.swagger-ui .near-white{color:#f4f4f4}.swagger-ui .white{color:#fff}.swagger-ui .dark-red{color:#e7040f}.swagger-ui .red{color:#ff4136}.swagger-ui .light-red{color:#ff725c}.swagger-ui .orange{color:#ff6300}.swagger-ui .gold{color:#ffb700}.swagger-ui .yellow{color:gold}.swagger-ui .light-yellow{color:#fbf1a9}.swagger-ui .purple{color:#5e2ca5}.swagger-ui .light-purple{color:#a463f2}.swagger-ui .dark-pink{color:#d5008f}.swagger-ui .hot-pink{color:#ff41b4}.swagger-ui .pink{color:#ff80cc}.swagger-ui .light-pink{color:#ffa3d7}.swagger-ui .dark-green{color:#137752}.swagger-ui .green{color:#19a974}.swagger-ui .light-green{color:#9eebcf}.swagger-ui .navy{color:#001b44}.swagger-ui .dark-blue{color:#00449e}.swagger-ui .blue{color:#357edd}.swagger-ui .light-blue{color:#96ccff}.swagger-ui .lightest-blue{color:#cdecff}.swagger-ui .washed-blue{color:#f6fffe}.swagger-ui .washed-green{color:#e8fdf5}.swagger-ui .washed-yellow{color:#fffceb}.swagger-ui .washed-red{color:#ffdfdf}.swagger-ui .color-inherit{color:inherit}.swagger-ui .bg-black-90{background-color:rgba(0,0,0,.9)}.swagger-ui .bg-black-80{background-color:rgba(0,0,0,.8)}.swagger-ui .bg-black-70{background-color:rgba(0,0,0,.7)}.swagger-ui .bg-black-60{background-color:rgba(0,0,0,.6)}.swagger-ui .bg-black-50{background-color:rgba(0,0,0,.5)}.swagger-ui .bg-black-40{background-color:rgba(0,0,0,.4)}.swagger-ui .bg-black-30{background-color:rgba(0,0,0,.3)}.swagger-ui .bg-black-20{background-color:rgba(0,0,0,.2)}.swagger-ui .bg-black-10{background-color:rgba(0,0,0,.1)}.swagger-ui .bg-black-05{background-color:rgba(0,0,0,.05)}.swagger-ui .bg-white-90{background-color:hsla(0,0%,100%,.9)}.swagger-ui .bg-white-80{background-color:hsla(0,0%,100%,.8)}.swagger-ui .bg-white-70{background-color:hsla(0,0%,100%,.7)}.swagger-ui .bg-white-60{background-color:hsla(0,0%,100%,.6)}.swagger-ui .bg-white-50{background-color:hsla(0,0%,100%,.5)}.swagger-ui .bg-white-40{background-color:hsla(0,0%,100%,.4)}.swagger-ui .bg-white-30{background-color:hsla(0,0%,100%,.3)}.swagger-ui .bg-white-20{background-color:hsla(0,0%,100%,.2)}.swagger-ui .bg-white-10{background-color:hsla(0,0%,100%,.1)}.swagger-ui .bg-black{background-color:#000}.swagger-ui .bg-near-black{background-color:#111}.swagger-ui .bg-dark-gray{background-color:#333}.swagger-ui .bg-mid-gray{background-color:#555}.swagger-ui .bg-gray{background-color:#777}.swagger-ui .bg-silver{background-color:#999}.swagger-ui .bg-light-silver{background-color:#aaa}.swagger-ui .bg-moon-gray{background-color:#ccc}.swagger-ui .bg-light-gray{background-color:#eee}.swagger-ui .bg-near-white{background-color:#f4f4f4}.swagger-ui .bg-white{background-color:#fff}.swagger-ui .bg-transparent{background-color:transparent}.swagger-ui .bg-dark-red{background-color:#e7040f}.swagger-ui .bg-red{background-color:#ff4136}.swagger-ui .bg-light-red{background-color:#ff725c}.swagger-ui .bg-orange{background-color:#ff6300}.swagger-ui .bg-gold{background-color:#ffb700}.swagger-ui .bg-yellow{background-color:gold}.swagger-ui .bg-light-yellow{background-color:#fbf1a9}.swagger-ui .bg-purple{background-color:#5e2ca5}.swagger-ui .bg-light-purple{background-color:#a463f2}.swagger-ui .bg-dark-pink{background-color:#d5008f}.swagger-ui .bg-hot-pink{background-color:#ff41b4}.swagger-ui .bg-pink{background-color:#ff80cc}.swagger-ui .bg-light-pink{background-color:#ffa3d7}.swagger-ui .bg-dark-green{background-color:#137752}.swagger-ui .bg-green{background-color:#19a974}.swagger-ui .bg-light-green{background-color:#9eebcf}.swagger-ui .bg-navy{background-color:#001b44}.swagger-ui .bg-dark-blue{background-color:#00449e}.swagger-ui .bg-blue{background-color:#357edd}.swagger-ui .bg-light-blue{background-color:#96ccff}.swagger-ui .bg-lightest-blue{background-color:#cdecff}.swagger-ui .bg-washed-blue{background-color:#f6fffe}.swagger-ui .bg-washed-green{background-color:#e8fdf5}.swagger-ui .bg-washed-yellow{background-color:#fffceb}.swagger-ui .bg-washed-red{background-color:#ffdfdf}.swagger-ui .bg-inherit{background-color:inherit}.swagger-ui .hover-black:focus,.swagger-ui .hover-black:hover{color:#000}.swagger-ui .hover-near-black:focus,.swagger-ui .hover-near-black:hover{color:#111}.swagger-ui .hover-dark-gray:focus,.swagger-ui .hover-dark-gray:hover{color:#333}.swagger-ui .hover-mid-gray:focus,.swagger-ui .hover-mid-gray:hover{color:#555}.swagger-ui .hover-gray:focus,.swagger-ui .hover-gray:hover{color:#777}.swagger-ui .hover-silver:focus,.swagger-ui .hover-silver:hover{color:#999}.swagger-ui .hover-light-silver:focus,.swagger-ui .hover-light-silver:hover{color:#aaa}.swagger-ui .hover-moon-gray:focus,.swagger-ui .hover-moon-gray:hover{color:#ccc}.swagger-ui .hover-light-gray:focus,.swagger-ui .hover-light-gray:hover{color:#eee}.swagger-ui .hover-near-white:focus,.swagger-ui .hover-near-white:hover{color:#f4f4f4}.swagger-ui .hover-white:focus,.swagger-ui .hover-white:hover{color:#fff}.swagger-ui .hover-black-90:focus,.swagger-ui .hover-black-90:hover{color:rgba(0,0,0,.9)}.swagger-ui .hover-black-80:focus,.swagger-ui .hover-black-80:hover{color:rgba(0,0,0,.8)}.swagger-ui .hover-black-70:focus,.swagger-ui .hover-black-70:hover{color:rgba(0,0,0,.7)}.swagger-ui .hover-black-60:focus,.swagger-ui .hover-black-60:hover{color:rgba(0,0,0,.6)}.swagger-ui .hover-black-50:focus,.swagger-ui .hover-black-50:hover{color:rgba(0,0,0,.5)}.swagger-ui .hover-black-40:focus,.swagger-ui .hover-black-40:hover{color:rgba(0,0,0,.4)}.swagger-ui .hover-black-30:focus,.swagger-ui .hover-black-30:hover{color:rgba(0,0,0,.3)}.swagger-ui .hover-black-20:focus,.swagger-ui .hover-black-20:hover{color:rgba(0,0,0,.2)}.swagger-ui .hover-black-10:focus,.swagger-ui .hover-black-10:hover{color:rgba(0,0,0,.1)}.swagger-ui .hover-white-90:focus,.swagger-ui .hover-white-90:hover{color:hsla(0,0%,100%,.9)}.swagger-ui .hover-white-80:focus,.swagger-ui .hover-white-80:hover{color:hsla(0,0%,100%,.8)}.swagger-ui .hover-white-70:focus,.swagger-ui .hover-white-70:hover{color:hsla(0,0%,100%,.7)}.swagger-ui .hover-white-60:focus,.swagger-ui .hover-white-60:hover{color:hsla(0,0%,100%,.6)}.swagger-ui .hover-white-50:focus,.swagger-ui .hover-white-50:hover{color:hsla(0,0%,100%,.5)}.swagger-ui .hover-white-40:focus,.swagger-ui .hover-white-40:hover{color:hsla(0,0%,100%,.4)}.swagger-ui .hover-white-30:focus,.swagger-ui .hover-white-30:hover{color:hsla(0,0%,100%,.3)}.swagger-ui .hover-white-20:focus,.swagger-ui .hover-white-20:hover{color:hsla(0,0%,100%,.2)}.swagger-ui .hover-white-10:focus,.swagger-ui .hover-white-10:hover{color:hsla(0,0%,100%,.1)}.swagger-ui .hover-inherit:focus,.swagger-ui .hover-inherit:hover{color:inherit}.swagger-ui .hover-bg-black:focus,.swagger-ui .hover-bg-black:hover{background-color:#000}.swagger-ui .hover-bg-near-black:focus,.swagger-ui .hover-bg-near-black:hover{background-color:#111}.swagger-ui .hover-bg-dark-gray:focus,.swagger-ui .hover-bg-dark-gray:hover{background-color:#333}.swagger-ui .hover-bg-mid-gray:focus,.swagger-ui .hover-bg-mid-gray:hover{background-color:#555}.swagger-ui .hover-bg-gray:focus,.swagger-ui .hover-bg-gray:hover{background-color:#777}.swagger-ui .hover-bg-silver:focus,.swagger-ui .hover-bg-silver:hover{background-color:#999}.swagger-ui .hover-bg-light-silver:focus,.swagger-ui .hover-bg-light-silver:hover{background-color:#aaa}.swagger-ui .hover-bg-moon-gray:focus,.swagger-ui .hover-bg-moon-gray:hover{background-color:#ccc}.swagger-ui .hover-bg-light-gray:focus,.swagger-ui .hover-bg-light-gray:hover{background-color:#eee}.swagger-ui .hover-bg-near-white:focus,.swagger-ui .hover-bg-near-white:hover{background-color:#f4f4f4}.swagger-ui .hover-bg-white:focus,.swagger-ui .hover-bg-white:hover{background-color:#fff}.swagger-ui .hover-bg-transparent:focus,.swagger-ui .hover-bg-transparent:hover{background-color:transparent}.swagger-ui .hover-bg-black-90:focus,.swagger-ui .hover-bg-black-90:hover{background-color:rgba(0,0,0,.9)}.swagger-ui .hover-bg-black-80:focus,.swagger-ui .hover-bg-black-80:hover{background-color:rgba(0,0,0,.8)}.swagger-ui .hover-bg-black-70:focus,.swagger-ui .hover-bg-black-70:hover{background-color:rgba(0,0,0,.7)}.swagger-ui .hover-bg-black-60:focus,.swagger-ui .hover-bg-black-60:hover{background-color:rgba(0,0,0,.6)}.swagger-ui .hover-bg-black-50:focus,.swagger-ui .hover-bg-black-50:hover{background-color:rgba(0,0,0,.5)}.swagger-ui .hover-bg-black-40:focus,.swagger-ui .hover-bg-black-40:hover{background-color:rgba(0,0,0,.4)}.swagger-ui .hover-bg-black-30:focus,.swagger-ui .hover-bg-black-30:hover{background-color:rgba(0,0,0,.3)}.swagger-ui .hover-bg-black-20:focus,.swagger-ui .hover-bg-black-20:hover{background-color:rgba(0,0,0,.2)}.swagger-ui .hover-bg-black-10:focus,.swagger-ui .hover-bg-black-10:hover{background-color:rgba(0,0,0,.1)}.swagger-ui .hover-bg-white-90:focus,.swagger-ui .hover-bg-white-90:hover{background-color:hsla(0,0%,100%,.9)}.swagger-ui .hover-bg-white-80:focus,.swagger-ui .hover-bg-white-80:hover{background-color:hsla(0,0%,100%,.8)}.swagger-ui .hover-bg-white-70:focus,.swagger-ui .hover-bg-white-70:hover{background-color:hsla(0,0%,100%,.7)}.swagger-ui .hover-bg-white-60:focus,.swagger-ui .hover-bg-white-60:hover{background-color:hsla(0,0%,100%,.6)}.swagger-ui .hover-bg-white-50:focus,.swagger-ui .hover-bg-white-50:hover{background-color:hsla(0,0%,100%,.5)}.swagger-ui .hover-bg-white-40:focus,.swagger-ui .hover-bg-white-40:hover{background-color:hsla(0,0%,100%,.4)}.swagger-ui .hover-bg-white-30:focus,.swagger-ui .hover-bg-white-30:hover{background-color:hsla(0,0%,100%,.3)}.swagger-ui .hover-bg-white-20:focus,.swagger-ui .hover-bg-white-20:hover{background-color:hsla(0,0%,100%,.2)}.swagger-ui .hover-bg-white-10:focus,.swagger-ui .hover-bg-white-10:hover{background-color:hsla(0,0%,100%,.1)}.swagger-ui .hover-dark-red:focus,.swagger-ui .hover-dark-red:hover{color:#e7040f}.swagger-ui .hover-red:focus,.swagger-ui .hover-red:hover{color:#ff4136}.swagger-ui .hover-light-red:focus,.swagger-ui .hover-light-red:hover{color:#ff725c}.swagger-ui .hover-orange:focus,.swagger-ui .hover-orange:hover{color:#ff6300}.swagger-ui .hover-gold:focus,.swagger-ui .hover-gold:hover{color:#ffb700}.swagger-ui .hover-yellow:focus,.swagger-ui .hover-yellow:hover{color:gold}.swagger-ui .hover-light-yellow:focus,.swagger-ui .hover-light-yellow:hover{color:#fbf1a9}.swagger-ui .hover-purple:focus,.swagger-ui .hover-purple:hover{color:#5e2ca5}.swagger-ui .hover-light-purple:focus,.swagger-ui .hover-light-purple:hover{color:#a463f2}.swagger-ui .hover-dark-pink:focus,.swagger-ui .hover-dark-pink:hover{color:#d5008f}.swagger-ui .hover-hot-pink:focus,.swagger-ui .hover-hot-pink:hover{color:#ff41b4}.swagger-ui .hover-pink:focus,.swagger-ui .hover-pink:hover{color:#ff80cc}.swagger-ui .hover-light-pink:focus,.swagger-ui .hover-light-pink:hover{color:#ffa3d7}.swagger-ui .hover-dark-green:focus,.swagger-ui .hover-dark-green:hover{color:#137752}.swagger-ui .hover-green:focus,.swagger-ui .hover-green:hover{color:#19a974}.swagger-ui .hover-light-green:focus,.swagger-ui .hover-light-green:hover{color:#9eebcf}.swagger-ui .hover-navy:focus,.swagger-ui .hover-navy:hover{color:#001b44}.swagger-ui .hover-dark-blue:focus,.swagger-ui .hover-dark-blue:hover{color:#00449e}.swagger-ui .hover-blue:focus,.swagger-ui .hover-blue:hover{color:#357edd}.swagger-ui .hover-light-blue:focus,.swagger-ui .hover-light-blue:hover{color:#96ccff}.swagger-ui .hover-lightest-blue:focus,.swagger-ui .hover-lightest-blue:hover{color:#cdecff}.swagger-ui .hover-washed-blue:focus,.swagger-ui .hover-washed-blue:hover{color:#f6fffe}.swagger-ui .hover-washed-green:focus,.swagger-ui .hover-washed-green:hover{color:#e8fdf5}.swagger-ui .hover-washed-yellow:focus,.swagger-ui .hover-washed-yellow:hover{color:#fffceb}.swagger-ui .hover-washed-red:focus,.swagger-ui .hover-washed-red:hover{color:#ffdfdf}.swagger-ui .hover-bg-dark-red:focus,.swagger-ui .hover-bg-dark-red:hover{background-color:#e7040f}.swagger-ui .hover-bg-red:focus,.swagger-ui .hover-bg-red:hover{background-color:#ff4136}.swagger-ui .hover-bg-light-red:focus,.swagger-ui .hover-bg-light-red:hover{background-color:#ff725c}.swagger-ui .hover-bg-orange:focus,.swagger-ui .hover-bg-orange:hover{background-color:#ff6300}.swagger-ui .hover-bg-gold:focus,.swagger-ui .hover-bg-gold:hover{background-color:#ffb700}.swagger-ui .hover-bg-yellow:focus,.swagger-ui .hover-bg-yellow:hover{background-color:gold}.swagger-ui .hover-bg-light-yellow:focus,.swagger-ui .hover-bg-light-yellow:hover{background-color:#fbf1a9}.swagger-ui .hover-bg-purple:focus,.swagger-ui .hover-bg-purple:hover{background-color:#5e2ca5}.swagger-ui .hover-bg-light-purple:focus,.swagger-ui .hover-bg-light-purple:hover{background-color:#a463f2}.swagger-ui .hover-bg-dark-pink:focus,.swagger-ui .hover-bg-dark-pink:hover{background-color:#d5008f}.swagger-ui .hover-bg-hot-pink:focus,.swagger-ui .hover-bg-hot-pink:hover{background-color:#ff41b4}.swagger-ui .hover-bg-pink:focus,.swagger-ui .hover-bg-pink:hover{background-color:#ff80cc}.swagger-ui .hover-bg-light-pink:focus,.swagger-ui .hover-bg-light-pink:hover{background-color:#ffa3d7}.swagger-ui .hover-bg-dark-green:focus,.swagger-ui .hover-bg-dark-green:hover{background-color:#137752}.swagger-ui .hover-bg-green:focus,.swagger-ui .hover-bg-green:hover{background-color:#19a974}.swagger-ui .hover-bg-light-green:focus,.swagger-ui .hover-bg-light-green:hover{background-color:#9eebcf}.swagger-ui .hover-bg-navy:focus,.swagger-ui .hover-bg-navy:hover{background-color:#001b44}.swagger-ui .hover-bg-dark-blue:focus,.swagger-ui .hover-bg-dark-blue:hover{background-color:#00449e}.swagger-ui .hover-bg-blue:focus,.swagger-ui .hover-bg-blue:hover{background-color:#357edd}.swagger-ui .hover-bg-light-blue:focus,.swagger-ui .hover-bg-light-blue:hover{background-color:#96ccff}.swagger-ui .hover-bg-lightest-blue:focus,.swagger-ui .hover-bg-lightest-blue:hover{background-color:#cdecff}.swagger-ui .hover-bg-washed-blue:focus,.swagger-ui .hover-bg-washed-blue:hover{background-color:#f6fffe}.swagger-ui .hover-bg-washed-green:focus,.swagger-ui .hover-bg-washed-green:hover{background-color:#e8fdf5}.swagger-ui .hover-bg-washed-yellow:focus,.swagger-ui .hover-bg-washed-yellow:hover{background-color:#fffceb}.swagger-ui .hover-bg-washed-red:focus,.swagger-ui .hover-bg-washed-red:hover{background-color:#ffdfdf}.swagger-ui .hover-bg-inherit:focus,.swagger-ui .hover-bg-inherit:hover{background-color:inherit}.swagger-ui .pa0{padding:0}.swagger-ui .pa1{padding:.25rem}.swagger-ui .pa2{padding:.5rem}.swagger-ui .pa3{padding:1rem}.swagger-ui .pa4{padding:2rem}.swagger-ui .pa5{padding:4rem}.swagger-ui .pa6{padding:8rem}.swagger-ui .pa7{padding:16rem}.swagger-ui .pl0{padding-left:0}.swagger-ui .pl1{padding-left:.25rem}.swagger-ui .pl2{padding-left:.5rem}.swagger-ui .pl3{padding-left:1rem}.swagger-ui .pl4{padding-left:2rem}.swagger-ui .pl5{padding-left:4rem}.swagger-ui .pl6{padding-left:8rem}.swagger-ui .pl7{padding-left:16rem}.swagger-ui .pr0{padding-right:0}.swagger-ui .pr1{padding-right:.25rem}.swagger-ui .pr2{padding-right:.5rem}.swagger-ui .pr3{padding-right:1rem}.swagger-ui .pr4{padding-right:2rem}.swagger-ui .pr5{padding-right:4rem}.swagger-ui .pr6{padding-right:8rem}.swagger-ui .pr7{padding-right:16rem}.swagger-ui .pb0{padding-bottom:0}.swagger-ui .pb1{padding-bottom:.25rem}.swagger-ui .pb2{padding-bottom:.5rem}.swagger-ui .pb3{padding-bottom:1rem}.swagger-ui .pb4{padding-bottom:2rem}.swagger-ui .pb5{padding-bottom:4rem}.swagger-ui .pb6{padding-bottom:8rem}.swagger-ui .pb7{padding-bottom:16rem}.swagger-ui .pt0{padding-top:0}.swagger-ui .pt1{padding-top:.25rem}.swagger-ui .pt2{padding-top:.5rem}.swagger-ui .pt3{padding-top:1rem}.swagger-ui .pt4{padding-top:2rem}.swagger-ui .pt5{padding-top:4rem}.swagger-ui .pt6{padding-top:8rem}.swagger-ui .pt7{padding-top:16rem}.swagger-ui .pv0{padding-bottom:0;padding-top:0}.swagger-ui .pv1{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0{padding-left:0;padding-right:0}.swagger-ui .ph1{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0{margin:0}.swagger-ui .ma1{margin:.25rem}.swagger-ui .ma2{margin:.5rem}.swagger-ui .ma3{margin:1rem}.swagger-ui .ma4{margin:2rem}.swagger-ui .ma5{margin:4rem}.swagger-ui .ma6{margin:8rem}.swagger-ui .ma7{margin:16rem}.swagger-ui .ml0{margin-left:0}.swagger-ui .ml1{margin-left:.25rem}.swagger-ui .ml2{margin-left:.5rem}.swagger-ui .ml3{margin-left:1rem}.swagger-ui .ml4{margin-left:2rem}.swagger-ui .ml5{margin-left:4rem}.swagger-ui .ml6{margin-left:8rem}.swagger-ui .ml7{margin-left:16rem}.swagger-ui .mr0{margin-right:0}.swagger-ui .mr1{margin-right:.25rem}.swagger-ui .mr2{margin-right:.5rem}.swagger-ui .mr3{margin-right:1rem}.swagger-ui .mr4{margin-right:2rem}.swagger-ui .mr5{margin-right:4rem}.swagger-ui .mr6{margin-right:8rem}.swagger-ui .mr7{margin-right:16rem}.swagger-ui .mb0{margin-bottom:0}.swagger-ui .mb1{margin-bottom:.25rem}.swagger-ui .mb2{margin-bottom:.5rem}.swagger-ui .mb3{margin-bottom:1rem}.swagger-ui .mb4{margin-bottom:2rem}.swagger-ui .mb5{margin-bottom:4rem}.swagger-ui .mb6{margin-bottom:8rem}.swagger-ui .mb7{margin-bottom:16rem}.swagger-ui .mt0{margin-top:0}.swagger-ui .mt1{margin-top:.25rem}.swagger-ui .mt2{margin-top:.5rem}.swagger-ui .mt3{margin-top:1rem}.swagger-ui .mt4{margin-top:2rem}.swagger-ui .mt5{margin-top:4rem}.swagger-ui .mt6{margin-top:8rem}.swagger-ui .mt7{margin-top:16rem}.swagger-ui .mv0{margin-bottom:0;margin-top:0}.swagger-ui .mv1{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0{margin-left:0;margin-right:0}.swagger-ui .mh1{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7{margin-left:16rem;margin-right:16rem}@media screen and (min-width:30em){.swagger-ui .pa0-ns{padding:0}.swagger-ui .pa1-ns{padding:.25rem}.swagger-ui .pa2-ns{padding:.5rem}.swagger-ui .pa3-ns{padding:1rem}.swagger-ui .pa4-ns{padding:2rem}.swagger-ui .pa5-ns{padding:4rem}.swagger-ui .pa6-ns{padding:8rem}.swagger-ui .pa7-ns{padding:16rem}.swagger-ui .pl0-ns{padding-left:0}.swagger-ui .pl1-ns{padding-left:.25rem}.swagger-ui .pl2-ns{padding-left:.5rem}.swagger-ui .pl3-ns{padding-left:1rem}.swagger-ui .pl4-ns{padding-left:2rem}.swagger-ui .pl5-ns{padding-left:4rem}.swagger-ui .pl6-ns{padding-left:8rem}.swagger-ui .pl7-ns{padding-left:16rem}.swagger-ui .pr0-ns{padding-right:0}.swagger-ui .pr1-ns{padding-right:.25rem}.swagger-ui .pr2-ns{padding-right:.5rem}.swagger-ui .pr3-ns{padding-right:1rem}.swagger-ui .pr4-ns{padding-right:2rem}.swagger-ui .pr5-ns{padding-right:4rem}.swagger-ui .pr6-ns{padding-right:8rem}.swagger-ui .pr7-ns{padding-right:16rem}.swagger-ui .pb0-ns{padding-bottom:0}.swagger-ui .pb1-ns{padding-bottom:.25rem}.swagger-ui .pb2-ns{padding-bottom:.5rem}.swagger-ui .pb3-ns{padding-bottom:1rem}.swagger-ui .pb4-ns{padding-bottom:2rem}.swagger-ui .pb5-ns{padding-bottom:4rem}.swagger-ui .pb6-ns{padding-bottom:8rem}.swagger-ui .pb7-ns{padding-bottom:16rem}.swagger-ui .pt0-ns{padding-top:0}.swagger-ui .pt1-ns{padding-top:.25rem}.swagger-ui .pt2-ns{padding-top:.5rem}.swagger-ui .pt3-ns{padding-top:1rem}.swagger-ui .pt4-ns{padding-top:2rem}.swagger-ui .pt5-ns{padding-top:4rem}.swagger-ui .pt6-ns{padding-top:8rem}.swagger-ui .pt7-ns{padding-top:16rem}.swagger-ui .pv0-ns{padding-bottom:0;padding-top:0}.swagger-ui .pv1-ns{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-ns{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-ns{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-ns{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-ns{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-ns{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-ns{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-ns{padding-left:0;padding-right:0}.swagger-ui .ph1-ns{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-ns{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-ns{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-ns{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-ns{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-ns{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-ns{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-ns{margin:0}.swagger-ui .ma1-ns{margin:.25rem}.swagger-ui .ma2-ns{margin:.5rem}.swagger-ui .ma3-ns{margin:1rem}.swagger-ui .ma4-ns{margin:2rem}.swagger-ui .ma5-ns{margin:4rem}.swagger-ui .ma6-ns{margin:8rem}.swagger-ui .ma7-ns{margin:16rem}.swagger-ui .ml0-ns{margin-left:0}.swagger-ui .ml1-ns{margin-left:.25rem}.swagger-ui .ml2-ns{margin-left:.5rem}.swagger-ui .ml3-ns{margin-left:1rem}.swagger-ui .ml4-ns{margin-left:2rem}.swagger-ui .ml5-ns{margin-left:4rem}.swagger-ui .ml6-ns{margin-left:8rem}.swagger-ui .ml7-ns{margin-left:16rem}.swagger-ui .mr0-ns{margin-right:0}.swagger-ui .mr1-ns{margin-right:.25rem}.swagger-ui .mr2-ns{margin-right:.5rem}.swagger-ui .mr3-ns{margin-right:1rem}.swagger-ui .mr4-ns{margin-right:2rem}.swagger-ui .mr5-ns{margin-right:4rem}.swagger-ui .mr6-ns{margin-right:8rem}.swagger-ui .mr7-ns{margin-right:16rem}.swagger-ui .mb0-ns{margin-bottom:0}.swagger-ui .mb1-ns{margin-bottom:.25rem}.swagger-ui .mb2-ns{margin-bottom:.5rem}.swagger-ui .mb3-ns{margin-bottom:1rem}.swagger-ui .mb4-ns{margin-bottom:2rem}.swagger-ui .mb5-ns{margin-bottom:4rem}.swagger-ui .mb6-ns{margin-bottom:8rem}.swagger-ui .mb7-ns{margin-bottom:16rem}.swagger-ui .mt0-ns{margin-top:0}.swagger-ui .mt1-ns{margin-top:.25rem}.swagger-ui .mt2-ns{margin-top:.5rem}.swagger-ui .mt3-ns{margin-top:1rem}.swagger-ui .mt4-ns{margin-top:2rem}.swagger-ui .mt5-ns{margin-top:4rem}.swagger-ui .mt6-ns{margin-top:8rem}.swagger-ui .mt7-ns{margin-top:16rem}.swagger-ui .mv0-ns{margin-bottom:0;margin-top:0}.swagger-ui .mv1-ns{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-ns{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-ns{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-ns{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-ns{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-ns{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-ns{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-ns{margin-left:0;margin-right:0}.swagger-ui .mh1-ns{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-ns{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-ns{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-ns{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-ns{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-ns{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-ns{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .pa0-m{padding:0}.swagger-ui .pa1-m{padding:.25rem}.swagger-ui .pa2-m{padding:.5rem}.swagger-ui .pa3-m{padding:1rem}.swagger-ui .pa4-m{padding:2rem}.swagger-ui .pa5-m{padding:4rem}.swagger-ui .pa6-m{padding:8rem}.swagger-ui .pa7-m{padding:16rem}.swagger-ui .pl0-m{padding-left:0}.swagger-ui .pl1-m{padding-left:.25rem}.swagger-ui .pl2-m{padding-left:.5rem}.swagger-ui .pl3-m{padding-left:1rem}.swagger-ui .pl4-m{padding-left:2rem}.swagger-ui .pl5-m{padding-left:4rem}.swagger-ui .pl6-m{padding-left:8rem}.swagger-ui .pl7-m{padding-left:16rem}.swagger-ui .pr0-m{padding-right:0}.swagger-ui .pr1-m{padding-right:.25rem}.swagger-ui .pr2-m{padding-right:.5rem}.swagger-ui .pr3-m{padding-right:1rem}.swagger-ui .pr4-m{padding-right:2rem}.swagger-ui .pr5-m{padding-right:4rem}.swagger-ui .pr6-m{padding-right:8rem}.swagger-ui .pr7-m{padding-right:16rem}.swagger-ui .pb0-m{padding-bottom:0}.swagger-ui .pb1-m{padding-bottom:.25rem}.swagger-ui .pb2-m{padding-bottom:.5rem}.swagger-ui .pb3-m{padding-bottom:1rem}.swagger-ui .pb4-m{padding-bottom:2rem}.swagger-ui .pb5-m{padding-bottom:4rem}.swagger-ui .pb6-m{padding-bottom:8rem}.swagger-ui .pb7-m{padding-bottom:16rem}.swagger-ui .pt0-m{padding-top:0}.swagger-ui .pt1-m{padding-top:.25rem}.swagger-ui .pt2-m{padding-top:.5rem}.swagger-ui .pt3-m{padding-top:1rem}.swagger-ui .pt4-m{padding-top:2rem}.swagger-ui .pt5-m{padding-top:4rem}.swagger-ui .pt6-m{padding-top:8rem}.swagger-ui .pt7-m{padding-top:16rem}.swagger-ui .pv0-m{padding-bottom:0;padding-top:0}.swagger-ui .pv1-m{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-m{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-m{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-m{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-m{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-m{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-m{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-m{padding-left:0;padding-right:0}.swagger-ui .ph1-m{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-m{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-m{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-m{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-m{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-m{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-m{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-m{margin:0}.swagger-ui .ma1-m{margin:.25rem}.swagger-ui .ma2-m{margin:.5rem}.swagger-ui .ma3-m{margin:1rem}.swagger-ui .ma4-m{margin:2rem}.swagger-ui .ma5-m{margin:4rem}.swagger-ui .ma6-m{margin:8rem}.swagger-ui .ma7-m{margin:16rem}.swagger-ui .ml0-m{margin-left:0}.swagger-ui .ml1-m{margin-left:.25rem}.swagger-ui .ml2-m{margin-left:.5rem}.swagger-ui .ml3-m{margin-left:1rem}.swagger-ui .ml4-m{margin-left:2rem}.swagger-ui .ml5-m{margin-left:4rem}.swagger-ui .ml6-m{margin-left:8rem}.swagger-ui .ml7-m{margin-left:16rem}.swagger-ui .mr0-m{margin-right:0}.swagger-ui .mr1-m{margin-right:.25rem}.swagger-ui .mr2-m{margin-right:.5rem}.swagger-ui .mr3-m{margin-right:1rem}.swagger-ui .mr4-m{margin-right:2rem}.swagger-ui .mr5-m{margin-right:4rem}.swagger-ui .mr6-m{margin-right:8rem}.swagger-ui .mr7-m{margin-right:16rem}.swagger-ui .mb0-m{margin-bottom:0}.swagger-ui .mb1-m{margin-bottom:.25rem}.swagger-ui .mb2-m{margin-bottom:.5rem}.swagger-ui .mb3-m{margin-bottom:1rem}.swagger-ui .mb4-m{margin-bottom:2rem}.swagger-ui .mb5-m{margin-bottom:4rem}.swagger-ui .mb6-m{margin-bottom:8rem}.swagger-ui .mb7-m{margin-bottom:16rem}.swagger-ui .mt0-m{margin-top:0}.swagger-ui .mt1-m{margin-top:.25rem}.swagger-ui .mt2-m{margin-top:.5rem}.swagger-ui .mt3-m{margin-top:1rem}.swagger-ui .mt4-m{margin-top:2rem}.swagger-ui .mt5-m{margin-top:4rem}.swagger-ui .mt6-m{margin-top:8rem}.swagger-ui .mt7-m{margin-top:16rem}.swagger-ui .mv0-m{margin-bottom:0;margin-top:0}.swagger-ui .mv1-m{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-m{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-m{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-m{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-m{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-m{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-m{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-m{margin-left:0;margin-right:0}.swagger-ui .mh1-m{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-m{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-m{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-m{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-m{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-m{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-m{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:60em){.swagger-ui .pa0-l{padding:0}.swagger-ui .pa1-l{padding:.25rem}.swagger-ui .pa2-l{padding:.5rem}.swagger-ui .pa3-l{padding:1rem}.swagger-ui .pa4-l{padding:2rem}.swagger-ui .pa5-l{padding:4rem}.swagger-ui .pa6-l{padding:8rem}.swagger-ui .pa7-l{padding:16rem}.swagger-ui .pl0-l{padding-left:0}.swagger-ui .pl1-l{padding-left:.25rem}.swagger-ui .pl2-l{padding-left:.5rem}.swagger-ui .pl3-l{padding-left:1rem}.swagger-ui .pl4-l{padding-left:2rem}.swagger-ui .pl5-l{padding-left:4rem}.swagger-ui .pl6-l{padding-left:8rem}.swagger-ui .pl7-l{padding-left:16rem}.swagger-ui .pr0-l{padding-right:0}.swagger-ui .pr1-l{padding-right:.25rem}.swagger-ui .pr2-l{padding-right:.5rem}.swagger-ui .pr3-l{padding-right:1rem}.swagger-ui .pr4-l{padding-right:2rem}.swagger-ui .pr5-l{padding-right:4rem}.swagger-ui .pr6-l{padding-right:8rem}.swagger-ui .pr7-l{padding-right:16rem}.swagger-ui .pb0-l{padding-bottom:0}.swagger-ui .pb1-l{padding-bottom:.25rem}.swagger-ui .pb2-l{padding-bottom:.5rem}.swagger-ui .pb3-l{padding-bottom:1rem}.swagger-ui .pb4-l{padding-bottom:2rem}.swagger-ui .pb5-l{padding-bottom:4rem}.swagger-ui .pb6-l{padding-bottom:8rem}.swagger-ui .pb7-l{padding-bottom:16rem}.swagger-ui .pt0-l{padding-top:0}.swagger-ui .pt1-l{padding-top:.25rem}.swagger-ui .pt2-l{padding-top:.5rem}.swagger-ui .pt3-l{padding-top:1rem}.swagger-ui .pt4-l{padding-top:2rem}.swagger-ui .pt5-l{padding-top:4rem}.swagger-ui .pt6-l{padding-top:8rem}.swagger-ui .pt7-l{padding-top:16rem}.swagger-ui .pv0-l{padding-bottom:0;padding-top:0}.swagger-ui .pv1-l{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-l{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-l{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-l{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-l{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-l{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-l{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-l{padding-left:0;padding-right:0}.swagger-ui .ph1-l{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-l{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-l{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-l{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-l{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-l{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-l{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-l{margin:0}.swagger-ui .ma1-l{margin:.25rem}.swagger-ui .ma2-l{margin:.5rem}.swagger-ui .ma3-l{margin:1rem}.swagger-ui .ma4-l{margin:2rem}.swagger-ui .ma5-l{margin:4rem}.swagger-ui .ma6-l{margin:8rem}.swagger-ui .ma7-l{margin:16rem}.swagger-ui .ml0-l{margin-left:0}.swagger-ui .ml1-l{margin-left:.25rem}.swagger-ui .ml2-l{margin-left:.5rem}.swagger-ui .ml3-l{margin-left:1rem}.swagger-ui .ml4-l{margin-left:2rem}.swagger-ui .ml5-l{margin-left:4rem}.swagger-ui .ml6-l{margin-left:8rem}.swagger-ui .ml7-l{margin-left:16rem}.swagger-ui .mr0-l{margin-right:0}.swagger-ui .mr1-l{margin-right:.25rem}.swagger-ui .mr2-l{margin-right:.5rem}.swagger-ui .mr3-l{margin-right:1rem}.swagger-ui .mr4-l{margin-right:2rem}.swagger-ui .mr5-l{margin-right:4rem}.swagger-ui .mr6-l{margin-right:8rem}.swagger-ui .mr7-l{margin-right:16rem}.swagger-ui .mb0-l{margin-bottom:0}.swagger-ui .mb1-l{margin-bottom:.25rem}.swagger-ui .mb2-l{margin-bottom:.5rem}.swagger-ui .mb3-l{margin-bottom:1rem}.swagger-ui .mb4-l{margin-bottom:2rem}.swagger-ui .mb5-l{margin-bottom:4rem}.swagger-ui .mb6-l{margin-bottom:8rem}.swagger-ui .mb7-l{margin-bottom:16rem}.swagger-ui .mt0-l{margin-top:0}.swagger-ui .mt1-l{margin-top:.25rem}.swagger-ui .mt2-l{margin-top:.5rem}.swagger-ui .mt3-l{margin-top:1rem}.swagger-ui .mt4-l{margin-top:2rem}.swagger-ui .mt5-l{margin-top:4rem}.swagger-ui .mt6-l{margin-top:8rem}.swagger-ui .mt7-l{margin-top:16rem}.swagger-ui .mv0-l{margin-bottom:0;margin-top:0}.swagger-ui .mv1-l{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-l{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-l{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-l{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-l{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-l{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-l{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-l{margin-left:0;margin-right:0}.swagger-ui .mh1-l{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-l{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-l{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-l{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-l{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-l{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-l{margin-left:16rem;margin-right:16rem}}.swagger-ui .na1{margin:-.25rem}.swagger-ui .na2{margin:-.5rem}.swagger-ui .na3{margin:-1rem}.swagger-ui .na4{margin:-2rem}.swagger-ui .na5{margin:-4rem}.swagger-ui .na6{margin:-8rem}.swagger-ui .na7{margin:-16rem}.swagger-ui .nl1{margin-left:-.25rem}.swagger-ui .nl2{margin-left:-.5rem}.swagger-ui .nl3{margin-left:-1rem}.swagger-ui .nl4{margin-left:-2rem}.swagger-ui .nl5{margin-left:-4rem}.swagger-ui .nl6{margin-left:-8rem}.swagger-ui .nl7{margin-left:-16rem}.swagger-ui .nr1{margin-right:-.25rem}.swagger-ui .nr2{margin-right:-.5rem}.swagger-ui .nr3{margin-right:-1rem}.swagger-ui .nr4{margin-right:-2rem}.swagger-ui .nr5{margin-right:-4rem}.swagger-ui .nr6{margin-right:-8rem}.swagger-ui .nr7{margin-right:-16rem}.swagger-ui .nb1{margin-bottom:-.25rem}.swagger-ui .nb2{margin-bottom:-.5rem}.swagger-ui .nb3{margin-bottom:-1rem}.swagger-ui .nb4{margin-bottom:-2rem}.swagger-ui .nb5{margin-bottom:-4rem}.swagger-ui .nb6{margin-bottom:-8rem}.swagger-ui .nb7{margin-bottom:-16rem}.swagger-ui .nt1{margin-top:-.25rem}.swagger-ui .nt2{margin-top:-.5rem}.swagger-ui .nt3{margin-top:-1rem}.swagger-ui .nt4{margin-top:-2rem}.swagger-ui .nt5{margin-top:-4rem}.swagger-ui .nt6{margin-top:-8rem}.swagger-ui .nt7{margin-top:-16rem}@media screen and (min-width:30em){.swagger-ui .na1-ns{margin:-.25rem}.swagger-ui .na2-ns{margin:-.5rem}.swagger-ui .na3-ns{margin:-1rem}.swagger-ui .na4-ns{margin:-2rem}.swagger-ui .na5-ns{margin:-4rem}.swagger-ui .na6-ns{margin:-8rem}.swagger-ui .na7-ns{margin:-16rem}.swagger-ui .nl1-ns{margin-left:-.25rem}.swagger-ui .nl2-ns{margin-left:-.5rem}.swagger-ui .nl3-ns{margin-left:-1rem}.swagger-ui .nl4-ns{margin-left:-2rem}.swagger-ui .nl5-ns{margin-left:-4rem}.swagger-ui .nl6-ns{margin-left:-8rem}.swagger-ui .nl7-ns{margin-left:-16rem}.swagger-ui .nr1-ns{margin-right:-.25rem}.swagger-ui .nr2-ns{margin-right:-.5rem}.swagger-ui .nr3-ns{margin-right:-1rem}.swagger-ui .nr4-ns{margin-right:-2rem}.swagger-ui .nr5-ns{margin-right:-4rem}.swagger-ui .nr6-ns{margin-right:-8rem}.swagger-ui .nr7-ns{margin-right:-16rem}.swagger-ui .nb1-ns{margin-bottom:-.25rem}.swagger-ui .nb2-ns{margin-bottom:-.5rem}.swagger-ui .nb3-ns{margin-bottom:-1rem}.swagger-ui .nb4-ns{margin-bottom:-2rem}.swagger-ui .nb5-ns{margin-bottom:-4rem}.swagger-ui .nb6-ns{margin-bottom:-8rem}.swagger-ui .nb7-ns{margin-bottom:-16rem}.swagger-ui .nt1-ns{margin-top:-.25rem}.swagger-ui .nt2-ns{margin-top:-.5rem}.swagger-ui .nt3-ns{margin-top:-1rem}.swagger-ui .nt4-ns{margin-top:-2rem}.swagger-ui .nt5-ns{margin-top:-4rem}.swagger-ui .nt6-ns{margin-top:-8rem}.swagger-ui .nt7-ns{margin-top:-16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .na1-m{margin:-.25rem}.swagger-ui .na2-m{margin:-.5rem}.swagger-ui .na3-m{margin:-1rem}.swagger-ui .na4-m{margin:-2rem}.swagger-ui .na5-m{margin:-4rem}.swagger-ui .na6-m{margin:-8rem}.swagger-ui .na7-m{margin:-16rem}.swagger-ui .nl1-m{margin-left:-.25rem}.swagger-ui .nl2-m{margin-left:-.5rem}.swagger-ui .nl3-m{margin-left:-1rem}.swagger-ui .nl4-m{margin-left:-2rem}.swagger-ui .nl5-m{margin-left:-4rem}.swagger-ui .nl6-m{margin-left:-8rem}.swagger-ui .nl7-m{margin-left:-16rem}.swagger-ui .nr1-m{margin-right:-.25rem}.swagger-ui .nr2-m{margin-right:-.5rem}.swagger-ui .nr3-m{margin-right:-1rem}.swagger-ui .nr4-m{margin-right:-2rem}.swagger-ui .nr5-m{margin-right:-4rem}.swagger-ui .nr6-m{margin-right:-8rem}.swagger-ui .nr7-m{margin-right:-16rem}.swagger-ui .nb1-m{margin-bottom:-.25rem}.swagger-ui .nb2-m{margin-bottom:-.5rem}.swagger-ui .nb3-m{margin-bottom:-1rem}.swagger-ui .nb4-m{margin-bottom:-2rem}.swagger-ui .nb5-m{margin-bottom:-4rem}.swagger-ui .nb6-m{margin-bottom:-8rem}.swagger-ui .nb7-m{margin-bottom:-16rem}.swagger-ui .nt1-m{margin-top:-.25rem}.swagger-ui .nt2-m{margin-top:-.5rem}.swagger-ui .nt3-m{margin-top:-1rem}.swagger-ui .nt4-m{margin-top:-2rem}.swagger-ui .nt5-m{margin-top:-4rem}.swagger-ui .nt6-m{margin-top:-8rem}.swagger-ui .nt7-m{margin-top:-16rem}}@media screen and (min-width:60em){.swagger-ui .na1-l{margin:-.25rem}.swagger-ui .na2-l{margin:-.5rem}.swagger-ui .na3-l{margin:-1rem}.swagger-ui .na4-l{margin:-2rem}.swagger-ui .na5-l{margin:-4rem}.swagger-ui .na6-l{margin:-8rem}.swagger-ui .na7-l{margin:-16rem}.swagger-ui .nl1-l{margin-left:-.25rem}.swagger-ui .nl2-l{margin-left:-.5rem}.swagger-ui .nl3-l{margin-left:-1rem}.swagger-ui .nl4-l{margin-left:-2rem}.swagger-ui .nl5-l{margin-left:-4rem}.swagger-ui .nl6-l{margin-left:-8rem}.swagger-ui .nl7-l{margin-left:-16rem}.swagger-ui .nr1-l{margin-right:-.25rem}.swagger-ui .nr2-l{margin-right:-.5rem}.swagger-ui .nr3-l{margin-right:-1rem}.swagger-ui .nr4-l{margin-right:-2rem}.swagger-ui .nr5-l{margin-right:-4rem}.swagger-ui .nr6-l{margin-right:-8rem}.swagger-ui .nr7-l{margin-right:-16rem}.swagger-ui .nb1-l{margin-bottom:-.25rem}.swagger-ui .nb2-l{margin-bottom:-.5rem}.swagger-ui .nb3-l{margin-bottom:-1rem}.swagger-ui .nb4-l{margin-bottom:-2rem}.swagger-ui .nb5-l{margin-bottom:-4rem}.swagger-ui .nb6-l{margin-bottom:-8rem}.swagger-ui .nb7-l{margin-bottom:-16rem}.swagger-ui .nt1-l{margin-top:-.25rem}.swagger-ui .nt2-l{margin-top:-.5rem}.swagger-ui .nt3-l{margin-top:-1rem}.swagger-ui .nt4-l{margin-top:-2rem}.swagger-ui .nt5-l{margin-top:-4rem}.swagger-ui .nt6-l{margin-top:-8rem}.swagger-ui .nt7-l{margin-top:-16rem}}.swagger-ui .collapse{border-collapse:collapse;border-spacing:0}.swagger-ui .striped--light-silver:nth-child(odd){background-color:#aaa}.swagger-ui .striped--moon-gray:nth-child(odd){background-color:#ccc}.swagger-ui .striped--light-gray:nth-child(odd){background-color:#eee}.swagger-ui .striped--near-white:nth-child(odd){background-color:#f4f4f4}.swagger-ui .stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.swagger-ui .stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.swagger-ui .strike{text-decoration:line-through}.swagger-ui .underline{text-decoration:underline}.swagger-ui .no-underline{text-decoration:none}@media screen and (min-width:30em){.swagger-ui .strike-ns{text-decoration:line-through}.swagger-ui .underline-ns{text-decoration:underline}.swagger-ui .no-underline-ns{text-decoration:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .strike-m{text-decoration:line-through}.swagger-ui .underline-m{text-decoration:underline}.swagger-ui .no-underline-m{text-decoration:none}}@media screen and (min-width:60em){.swagger-ui .strike-l{text-decoration:line-through}.swagger-ui .underline-l{text-decoration:underline}.swagger-ui .no-underline-l{text-decoration:none}}.swagger-ui .tl{text-align:left}.swagger-ui .tr{text-align:right}.swagger-ui .tc{text-align:center}.swagger-ui .tj{text-align:justify}@media screen and (min-width:30em){.swagger-ui .tl-ns{text-align:left}.swagger-ui .tr-ns{text-align:right}.swagger-ui .tc-ns{text-align:center}.swagger-ui .tj-ns{text-align:justify}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tl-m{text-align:left}.swagger-ui .tr-m{text-align:right}.swagger-ui .tc-m{text-align:center}.swagger-ui .tj-m{text-align:justify}}@media screen and (min-width:60em){.swagger-ui .tl-l{text-align:left}.swagger-ui .tr-l{text-align:right}.swagger-ui .tc-l{text-align:center}.swagger-ui .tj-l{text-align:justify}}.swagger-ui .ttc{text-transform:capitalize}.swagger-ui .ttl{text-transform:lowercase}.swagger-ui .ttu{text-transform:uppercase}.swagger-ui .ttn{text-transform:none}@media screen and (min-width:30em){.swagger-ui .ttc-ns{text-transform:capitalize}.swagger-ui .ttl-ns{text-transform:lowercase}.swagger-ui .ttu-ns{text-transform:uppercase}.swagger-ui .ttn-ns{text-transform:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ttc-m{text-transform:capitalize}.swagger-ui .ttl-m{text-transform:lowercase}.swagger-ui .ttu-m{text-transform:uppercase}.swagger-ui .ttn-m{text-transform:none}}@media screen and (min-width:60em){.swagger-ui .ttc-l{text-transform:capitalize}.swagger-ui .ttl-l{text-transform:lowercase}.swagger-ui .ttu-l{text-transform:uppercase}.swagger-ui .ttn-l{text-transform:none}}.swagger-ui .f-6,.swagger-ui .f-headline{font-size:6rem}.swagger-ui .f-5,.swagger-ui .f-subheadline{font-size:5rem}.swagger-ui .f1{font-size:3rem}.swagger-ui .f2{font-size:2.25rem}.swagger-ui .f3{font-size:1.5rem}.swagger-ui .f4{font-size:1.25rem}.swagger-ui .f5{font-size:1rem}.swagger-ui .f6{font-size:.875rem}.swagger-ui .f7{font-size:.75rem}@media screen and (min-width:30em){.swagger-ui .f-6-ns,.swagger-ui .f-headline-ns{font-size:6rem}.swagger-ui .f-5-ns,.swagger-ui .f-subheadline-ns{font-size:5rem}.swagger-ui .f1-ns{font-size:3rem}.swagger-ui .f2-ns{font-size:2.25rem}.swagger-ui .f3-ns{font-size:1.5rem}.swagger-ui .f4-ns{font-size:1.25rem}.swagger-ui .f5-ns{font-size:1rem}.swagger-ui .f6-ns{font-size:.875rem}.swagger-ui .f7-ns{font-size:.75rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .f-6-m,.swagger-ui .f-headline-m{font-size:6rem}.swagger-ui .f-5-m,.swagger-ui .f-subheadline-m{font-size:5rem}.swagger-ui .f1-m{font-size:3rem}.swagger-ui .f2-m{font-size:2.25rem}.swagger-ui .f3-m{font-size:1.5rem}.swagger-ui .f4-m{font-size:1.25rem}.swagger-ui .f5-m{font-size:1rem}.swagger-ui .f6-m{font-size:.875rem}.swagger-ui .f7-m{font-size:.75rem}}@media screen and (min-width:60em){.swagger-ui .f-6-l,.swagger-ui .f-headline-l{font-size:6rem}.swagger-ui .f-5-l,.swagger-ui .f-subheadline-l{font-size:5rem}.swagger-ui .f1-l{font-size:3rem}.swagger-ui .f2-l{font-size:2.25rem}.swagger-ui .f3-l{font-size:1.5rem}.swagger-ui .f4-l{font-size:1.25rem}.swagger-ui .f5-l{font-size:1rem}.swagger-ui .f6-l{font-size:.875rem}.swagger-ui .f7-l{font-size:.75rem}}.swagger-ui .measure{max-width:30em}.swagger-ui .measure-wide{max-width:34em}.swagger-ui .measure-narrow{max-width:20em}.swagger-ui .indent{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media screen and (min-width:30em){.swagger-ui .measure-ns{max-width:30em}.swagger-ui .measure-wide-ns{max-width:34em}.swagger-ui .measure-narrow-ns{max-width:20em}.swagger-ui .indent-ns{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-ns{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-ns{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .measure-m{max-width:30em}.swagger-ui .measure-wide-m{max-width:34em}.swagger-ui .measure-narrow-m{max-width:20em}.swagger-ui .indent-m{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-m{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-m{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:60em){.swagger-ui .measure-l{max-width:30em}.swagger-ui .measure-wide-l{max-width:34em}.swagger-ui .measure-narrow-l{max-width:20em}.swagger-ui .indent-l{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-l{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.swagger-ui .overflow-container{overflow-y:scroll}.swagger-ui .center{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto{margin-right:auto}.swagger-ui .ml-auto{margin-left:auto}@media screen and (min-width:30em){.swagger-ui .center-ns{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-ns{margin-right:auto}.swagger-ui .ml-auto-ns{margin-left:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .center-m{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-m{margin-right:auto}.swagger-ui .ml-auto-m{margin-left:auto}}@media screen and (min-width:60em){.swagger-ui .center-l{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-l{margin-right:auto}.swagger-ui .ml-auto-l{margin-left:auto}}.swagger-ui .clip{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}@media screen and (min-width:30em){.swagger-ui .clip-ns{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .clip-m{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:60em){.swagger-ui .clip-l{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}.swagger-ui .ws-normal{white-space:normal}.swagger-ui .nowrap{white-space:nowrap}.swagger-ui .pre{white-space:pre}@media screen and (min-width:30em){.swagger-ui .ws-normal-ns{white-space:normal}.swagger-ui .nowrap-ns{white-space:nowrap}.swagger-ui .pre-ns{white-space:pre}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ws-normal-m{white-space:normal}.swagger-ui .nowrap-m{white-space:nowrap}.swagger-ui .pre-m{white-space:pre}}@media screen and (min-width:60em){.swagger-ui .ws-normal-l{white-space:normal}.swagger-ui .nowrap-l{white-space:nowrap}.swagger-ui .pre-l{white-space:pre}}.swagger-ui .v-base{vertical-align:baseline}.swagger-ui .v-mid{vertical-align:middle}.swagger-ui .v-top{vertical-align:top}.swagger-ui .v-btm{vertical-align:bottom}@media screen and (min-width:30em){.swagger-ui .v-base-ns{vertical-align:baseline}.swagger-ui .v-mid-ns{vertical-align:middle}.swagger-ui .v-top-ns{vertical-align:top}.swagger-ui .v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .v-base-m{vertical-align:baseline}.swagger-ui .v-mid-m{vertical-align:middle}.swagger-ui .v-top-m{vertical-align:top}.swagger-ui .v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.swagger-ui .v-base-l{vertical-align:baseline}.swagger-ui .v-mid-l{vertical-align:middle}.swagger-ui .v-top-l{vertical-align:top}.swagger-ui .v-btm-l{vertical-align:bottom}}.swagger-ui .dim{opacity:1}.swagger-ui .dim,.swagger-ui .dim:focus,.swagger-ui .dim:hover{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.swagger-ui .dim:focus,.swagger-ui .dim:hover{opacity:.5}.swagger-ui .dim:active{opacity:.8;-webkit-transition:opacity .15s ease-out;transition:opacity .15s ease-out}.swagger-ui .glow,.swagger-ui .glow:focus,.swagger-ui .glow:hover{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.swagger-ui .glow:focus,.swagger-ui .glow:hover{opacity:1}.swagger-ui .hide-child .child{opacity:0;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.swagger-ui .hide-child:active .child,.swagger-ui .hide-child:focus .child,.swagger-ui .hide-child:hover .child{opacity:1;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.swagger-ui .underline-hover:focus,.swagger-ui .underline-hover:hover{text-decoration:underline}.swagger-ui .grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .25s ease-out;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.swagger-ui .grow:focus,.swagger-ui .grow:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.swagger-ui .grow:active{-webkit-transform:scale(.9);transform:scale(.9)}.swagger-ui .grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .25s ease-in-out;transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}.swagger-ui .grow-large:focus,.swagger-ui .grow-large:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.swagger-ui .grow-large:active{-webkit-transform:scale(.95);transform:scale(.95)}.swagger-ui .pointer:hover{cursor:pointer}.swagger-ui .shadow-hover{cursor:pointer;position:relative;-webkit-transition:all .5s cubic-bezier(.165,.84,.44,1);transition:all .5s cubic-bezier(.165,.84,.44,1)}.swagger-ui .shadow-hover::after{border-radius:inherit;-webkit-box-shadow:0 0 16px 2px rgba(0,0,0,.2);box-shadow:0 0 16px 2px rgba(0,0,0,.2);content:"";height:100%;left:0;opacity:0;position:absolute;top:0;-webkit-transition:opacity .5s cubic-bezier(.165,.84,.44,1);transition:opacity .5s cubic-bezier(.165,.84,.44,1);width:100%;z-index:-1}.swagger-ui .shadow-hover:focus::after,.swagger-ui .shadow-hover:hover::after{opacity:1}.swagger-ui .bg-animate,.swagger-ui .bg-animate:focus,.swagger-ui .bg-animate:hover{-webkit-transition:background-color .15s ease-in-out;transition:background-color .15s ease-in-out}.swagger-ui .z-0{z-index:0}.swagger-ui .z-1{z-index:1}.swagger-ui .z-2{z-index:2}.swagger-ui .z-3{z-index:3}.swagger-ui .z-4{z-index:4}.swagger-ui .z-5{z-index:5}.swagger-ui .z-999{z-index:999}.swagger-ui .z-9999{z-index:9999}.swagger-ui .z-max{z-index:2147483647}.swagger-ui .z-inherit{z-index:inherit}.swagger-ui .z-initial{z-index:auto}.swagger-ui .z-unset{z-index:unset}.swagger-ui .nested-copy-line-height ol,.swagger-ui .nested-copy-line-height p,.swagger-ui .nested-copy-line-height ul{line-height:1.5}.swagger-ui .nested-headline-line-height h1,.swagger-ui .nested-headline-line-height h2,.swagger-ui .nested-headline-line-height h3,.swagger-ui .nested-headline-line-height h4,.swagger-ui .nested-headline-line-height h5,.swagger-ui .nested-headline-line-height h6{line-height:1.25}.swagger-ui .nested-list-reset ol,.swagger-ui .nested-list-reset ul{list-style-type:none;margin-left:0;padding-left:0}.swagger-ui .nested-copy-indent p+p{margin-bottom:0;margin-top:0;text-indent:.1em}.swagger-ui .nested-copy-seperator p+p{margin-top:1.5em}.swagger-ui .nested-img img{display:block;max-width:100%;width:100%}.swagger-ui .nested-links a{color:#357edd;-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.swagger-ui .nested-links a:focus,.swagger-ui .nested-links a:hover{color:#96ccff;-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.swagger-ui .wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 auto;max-width:1460px;padding:0 20px;width:100%}.swagger-ui .opblock-tag-section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .try-out.btn-group{padding:0}.swagger-ui .opblock-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid rgba(59,65,81,.3);cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;padding:10px 20px 10px 10px;-webkit-transition:all .2s;transition:all .2s}.swagger-ui .opblock-tag:hover{background:rgba(0,0,0,.02)}.swagger-ui .opblock-tag{color:#3b4151;font-family:sans-serif;font-size:24px;margin:0 0 5px}.swagger-ui .opblock-tag.no-desc span{-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui .opblock-tag svg{-webkit-transition:all .4s;transition:all .4s}.swagger-ui .opblock-tag small{color:#3b4151;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:14px;font-weight:400;padding:0 10px}.swagger-ui .parameter__type{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;padding:5px 0}.swagger-ui .parameter-controls{margin-top:.75em}.swagger-ui .examples__title{display:block;font-size:1.1em;font-weight:700;margin-bottom:.75em}.swagger-ui .examples__section{margin-top:1.5em}.swagger-ui .examples__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .examples-select{display:inline-block;margin-bottom:.75em}.swagger-ui .examples-select .examples-select-element{width:100%}.swagger-ui .examples-select__section-label{font-size:.9rem;font-weight:700;margin-right:.5rem}.swagger-ui .example__section{margin-top:1.5em}.swagger-ui .example__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .view-line-link{cursor:pointer;margin:0 5px;position:relative;top:3px;-webkit-transition:all .5s;transition:all .5s;width:20px}.swagger-ui .opblock{border:1px solid #000;border-radius:4px;-webkit-box-shadow:0 0 3px rgba(0,0,0,.19);box-shadow:0 0 3px rgba(0,0,0,.19);margin:0 0 15px}.swagger-ui .opblock .tab-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui .opblock .tab-header .tab-item{cursor:pointer;padding:0 40px}.swagger-ui .opblock .tab-header .tab-item:first-of-type{padding:0 40px 0 0}.swagger-ui .opblock .tab-header .tab-item.active h4 span{position:relative}.swagger-ui .opblock .tab-header .tab-item.active h4 span::after{background:grey;bottom:-15px;content:"";height:4px;left:50%;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:120%}.swagger-ui .opblock.is-open .opblock-summary{border-bottom:1px solid #000}.swagger-ui .opblock .opblock-section-header{background:hsla(0,0%,100%,.8);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1);min-height:50px;padding:8px 20px}.swagger-ui .opblock .opblock-section-header,.swagger-ui .opblock .opblock-section-header>label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .opblock .opblock-section-header>label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 0 auto}.swagger-ui .opblock .opblock-section-header>label>span{padding:0 10px 0 0}.swagger-ui .opblock .opblock-section-header h4{color:#3b4151;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock .opblock-summary-method{background:#000;border-radius:3px;color:#fff;font-family:sans-serif;font-size:14px;font-weight:700;min-width:80px;padding:6px 15px;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1)}.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#3b4151;display:-webkit-box;display:-ms-flexbox;display:flex;font-family:monospace;font-size:16px;font-weight:600;padding:0 10px;word-break:break-word}@media (max-width:768px){.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{font-size:12px}}.swagger-ui .opblock .opblock-summary-path{-ms-flex-negative:0;flex-shrink:0;max-width:calc(100% - 110px - 15rem)}.swagger-ui .opblock .opblock-summary-path__deprecated{text-decoration:line-through}.swagger-ui .opblock .opblock-summary-operation-id{font-size:14px}.swagger-ui .opblock .opblock-summary-description{color:#3b4151;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;font-family:sans-serif;font-size:13px;word-break:break-word}.swagger-ui .opblock .opblock-summary{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;padding:5px}.swagger-ui .opblock .opblock-summary .view-line-link{cursor:pointer;margin:0;position:relative;top:2px;-webkit-transition:all .5s;transition:all .5s;width:0}.swagger-ui .opblock .opblock-summary:hover .view-line-link{margin:0 5px;width:18px}.swagger-ui .opblock.opblock-post{background:rgba(73,204,144,.1);border-color:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary-method{background:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary{border-color:#49cc90}.swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span::after{background:#49cc90}.swagger-ui .opblock.opblock-put{background:rgba(252,161,48,.1);border-color:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary-method{background:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary{border-color:#fca130}.swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span::after{background:#fca130}.swagger-ui .opblock.opblock-delete{background:rgba(249,62,62,.1);border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary-method{background:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary{border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span::after{background:#f93e3e}.swagger-ui .opblock.opblock-get{background:rgba(97,175,254,.1);border-color:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary-method{background:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary{border-color:#61affe}.swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span::after{background:#61affe}.swagger-ui .opblock.opblock-patch{background:rgba(80,227,194,.1);border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary-method{background:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary{border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span::after{background:#50e3c2}.swagger-ui .opblock.opblock-head{background:rgba(144,18,254,.1);border-color:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary-method{background:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary{border-color:#9012fe}.swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span::after{background:#9012fe}.swagger-ui .opblock.opblock-options{background:rgba(13,90,167,.1);border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary-method{background:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary{border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span::after{background:#0d5aa7}.swagger-ui .opblock.opblock-deprecated{background:hsla(0,0%,92.2%,.1);border-color:#ebebeb;opacity:.6}.swagger-ui .opblock.opblock-deprecated .opblock-summary-method{background:#ebebeb}.swagger-ui .opblock.opblock-deprecated .opblock-summary{border-color:#ebebeb}.swagger-ui .opblock.opblock-deprecated .tab-header .tab-item.active h4 span::after{background:#ebebeb}.swagger-ui .opblock .opblock-schemes{padding:8px 20px}.swagger-ui .opblock .opblock-schemes .schemes-title{padding:0 10px 0 0}.swagger-ui .filter .operation-filter-input{border:2px solid #d8dde7;margin:20px 0;padding:10px;width:100%}.swagger-ui .download-url-wrapper .failed,.swagger-ui .filter .failed{color:red}.swagger-ui .download-url-wrapper .loading,.swagger-ui .filter .loading{color:#aaa}.swagger-ui .model-example{margin-top:1em}.swagger-ui .tab{display:-webkit-box;display:-ms-flexbox;display:flex;list-style:none;padding:0}.swagger-ui .tab li{color:#3b4151;cursor:pointer;font-family:sans-serif;font-size:12px;min-width:60px;padding:0}.swagger-ui .tab li:first-of-type{padding-left:0;padding-right:12px;position:relative}.swagger-ui .tab li:first-of-type::after{background:rgba(0,0,0,.2);content:"";height:100%;position:absolute;right:6px;top:0;width:1px}.swagger-ui .tab li.active{font-weight:700}.swagger-ui .opblock-description-wrapper,.swagger-ui .opblock-external-docs-wrapper,.swagger-ui .opblock-title_normal{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px;padding:15px 20px}.swagger-ui .opblock-description-wrapper h4,.swagger-ui .opblock-external-docs-wrapper h4,.swagger-ui .opblock-title_normal h4{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .opblock-description-wrapper p,.swagger-ui .opblock-external-docs-wrapper p,.swagger-ui .opblock-title_normal p{color:#3b4151;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock-external-docs-wrapper h4{padding-left:0}.swagger-ui .execute-wrapper{padding:20px;text-align:right}.swagger-ui .execute-wrapper .btn{padding:8px 40px;width:100%}.swagger-ui .body-param-options{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .body-param-options .body-param-edit{padding:10px 0}.swagger-ui .body-param-options label{padding:8px 0}.swagger-ui .body-param-options label select{margin:3px 0 0}.swagger-ui .responses-inner{padding:20px}.swagger-ui .responses-inner h4,.swagger-ui .responses-inner h5{color:#3b4151;font-family:sans-serif;font-size:12px;margin:10px 0 5px}.swagger-ui .responses-inner .curl{white-space:normal}.swagger-ui .response-col_status{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .response-col_status .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links{color:#3b4151;font-family:sans-serif;font-size:14px;max-width:40em;padding-left:2em}.swagger-ui .response-col_links .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links .operation-link{margin-bottom:1.5em}.swagger-ui .response-col_links .operation-link .description{margin-bottom:.5em}.swagger-ui .opblock-body .opblock-loading-animation{display:block;margin:3em auto}.swagger-ui .opblock-body pre.microlight{word-wrap:break-word;background:#333;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;margin:0;padding:10px;white-space:pre-wrap;word-break:break-all;word-break:break-word}.swagger-ui .opblock-body pre.microlight .headerline{display:block}.swagger-ui .highlight-code{position:relative}.swagger-ui .highlight-code>.microlight{max-height:400px;min-height:6em;overflow-y:auto}.swagger-ui .highlight-code>.microlight code{white-space:pre-wrap!important;word-break:break-all}.swagger-ui .curl-command{position:relative}.swagger-ui .download-contents{background:#7d8293;border-radius:4px;bottom:10px;color:#fff;cursor:pointer;font-family:sans-serif;font-size:14px;font-weight:600;height:30px;padding:5px;position:absolute;right:10px;text-align:center}.swagger-ui .scheme-container{background:#fff;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.15);box-shadow:0 1px 2px 0 rgba(0,0,0,.15);margin:0 0 20px;padding:30px 0}.swagger-ui .scheme-container .schemes{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .scheme-container .schemes>label{color:#3b4151;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-family:sans-serif;font-size:12px;font-weight:700;margin:-20px 15px 0 0}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;min-height:1px;padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading::after{color:#3b4151;content:"loading";font-family:sans-serif;font-size:10px;font-weight:700;left:50%;position:absolute;text-transform:uppercase;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.swagger-ui .loading-container .loading::before{-webkit-animation:rotation 1s linear infinite,opacity .5s;animation:rotation 1s linear infinite,opacity .5s;-webkit-backface-visibility:hidden;backface-visibility:hidden;border-radius:100%;border:2px solid rgba(85,85,85,.1);border-top-color:rgba(0,0,0,.6);content:"";display:block;height:60px;left:50%;margin:-30px;opacity:1;position:absolute;top:50%;width:60px}@-webkit-keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.swagger-ui .response-controls{display:-webkit-box;display:-ms-flexbox;display:flex;padding-top:1em}.swagger-ui .response-control-media-type{margin-right:1em}.swagger-ui .response-control-media-type--accept-controller select{border-color:green}.swagger-ui .response-control-media-type__accept-message{color:green;font-size:.7em}.swagger-ui .response-control-examples__title,.swagger-ui .response-control-media-type__title{display:block;font-size:.7em;margin-bottom:.2em}@-webkit-keyframes blinker{50%{opacity:0}}@keyframes blinker{50%{opacity:0}}.swagger-ui .hidden{display:none}.swagger-ui .no-margin{border:none;height:auto;margin:0;padding:0}.swagger-ui .float-right{float:right}.swagger-ui img.full-width{width:100%}.swagger-ui .svg-assets{height:0;position:absolute;width:0}.swagger-ui section h3{color:#3b4151;font-family:sans-serif}.swagger-ui a.nostyle{display:inline}.swagger-ui a.nostyle,.swagger-ui a.nostyle:visited{color:inherit;cursor:pointer;text-decoration:inherit}.swagger-ui .fallback{color:#aaa;padding:1em}.swagger-ui .version-pragma{height:100%;padding:5em 0}.swagger-ui .version-pragma__message{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:1.2em;height:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:1.5em;padding:0 .6em;text-align:center}.swagger-ui .version-pragma__message>div{-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:55ch}.swagger-ui .version-pragma__message code{background-color:#dedede;padding:4px 4px 2px;white-space:pre}.swagger-ui .opblock-link{font-weight:400}.swagger-ui .opblock-link.shown{font-weight:700}.swagger-ui span.token-string{color:#555}.swagger-ui span.token-not-formatted{color:#555;font-weight:700}.swagger-ui .btn{background:transparent;border:2px solid grey;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 23px;-webkit-transition:all .3s;transition:all .3s}.swagger-ui .btn.btn-sm{font-size:12px;padding:4px 23px}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.swagger-ui .btn.cancel{background-color:transparent;border-color:#ff6060;color:#ff6060;font-family:sans-serif}.swagger-ui .btn.authorize{background-color:transparent;border-color:#49cc90;color:#49cc90;display:inline;line-height:1}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{background-color:#4990e2;border-color:#4990e2;color:#fff}.swagger-ui .btn-group{display:-webkit-box;display:-ms-flexbox;display:flex;padding:30px}.swagger-ui .btn-group .btn{-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{background:none;border:none;padding:0 10px}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .model-box-control,.swagger-ui .models-control,.swagger-ui .opblock-summary-control{all:inherit;border-bottom:0;cursor:pointer;-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0}.swagger-ui .model-box-control:focus,.swagger-ui .models-control:focus,.swagger-ui .opblock-summary-control:focus{outline:auto}.swagger-ui .expand-methods,.swagger-ui .expand-operation{background:none;border:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{height:20px;width:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#404040}.swagger-ui .expand-methods svg{fill:#707070;-webkit-transition:all .3s;transition:all .3s}.swagger-ui button{cursor:pointer}.swagger-ui button.invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .copy-to-clipboard{background:#7d8293;border:none;border-radius:4px;bottom:10px;height:30px;position:absolute;right:100px;width:30px}.swagger-ui .copy-to-clipboard button{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' aria-hidden='true'%3E%3Cpath fill='%23fff' fill-rule='evenodd' d='M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z'/%3E%3C/svg%3E") 50% no-repeat;border:none;height:25px;padding-left:25px}.swagger-ui .curl-command .copy-to-clipboard{bottom:5px;height:20px;right:10px;width:20px}.swagger-ui .curl-command .copy-to-clipboard button{height:18px;padding-left:18px}.swagger-ui select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f7f7f7 url('data:image/svg+xml;charset=utf-8,') right 10px center no-repeat;background-size:20px;border:2px solid #41444e;border-radius:4px;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.25);box-shadow:0 1px 2px 0 rgba(0,0,0,.25);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 40px 5px 10px}.swagger-ui select[multiple]{background:#f7f7f7;margin:5px 0;padding:5px}.swagger-ui select.invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .opblock-body select{min-width:230px}@media (max-width:768px){.swagger-ui .opblock-body select{min-width:180px}}.swagger-ui label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 5px}@media (max-width:768px){.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{max-width:175px}}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text],.swagger-ui textarea{background:#fff;border:1px solid #d9d9d9;border-radius:4px;margin:5px 0;min-width:100px;padding:8px 10px}.swagger-ui input[type=email].invalid,.swagger-ui input[type=file].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid,.swagger-ui textarea.invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui input[disabled],.swagger-ui select[disabled],.swagger-ui textarea[disabled]{background-color:#fafafa;color:#888;cursor:not-allowed}.swagger-ui select[disabled]{border-color:#888}.swagger-ui textarea[disabled]{background-color:#41444e;color:#fff}@-webkit-keyframes shake{10%,90%{-webkit-transform:translate3d(-1px,0,0);transform:translate3d(-1px,0,0)}20%,80%{-webkit-transform:translate3d(2px,0,0);transform:translate3d(2px,0,0)}30%,50%,70%{-webkit-transform:translate3d(-4px,0,0);transform:translate3d(-4px,0,0)}40%,60%{-webkit-transform:translate3d(4px,0,0);transform:translate3d(4px,0,0)}}@keyframes shake{10%,90%{-webkit-transform:translate3d(-1px,0,0);transform:translate3d(-1px,0,0)}20%,80%{-webkit-transform:translate3d(2px,0,0);transform:translate3d(2px,0,0)}30%,50%,70%{-webkit-transform:translate3d(-4px,0,0);transform:translate3d(-4px,0,0)}40%,60%{-webkit-transform:translate3d(4px,0,0);transform:translate3d(4px,0,0)}}.swagger-ui textarea{background:hsla(0,0%,100%,.8);border:none;border-radius:4px;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;min-height:280px;outline:none;padding:10px;width:100%}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{background:#41444e;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;margin:0;min-height:100px;padding:10px;resize:none}.swagger-ui .checkbox{color:#303030;padding:5px 0 10px;-webkit-transition:opacity .5s;transition:opacity .5s}.swagger-ui .checkbox label{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .checkbox p{color:#3b4151;font-family:monospace;font-style:italic;font-weight:400!important;font-weight:600;margin:0!important}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{background:#e8e8e8;border-radius:1px;-webkit-box-shadow:0 0 0 2px #e8e8e8;box-shadow:0 0 0 2px #e8e8e8;cursor:pointer;display:inline-block;-webkit-box-flex:0;-ms-flex:none;flex:none;height:16px;margin:0 8px 0 0;padding:5px;position:relative;top:3px;width:16px}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{-webkit-transform:scale(.9);transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='8' viewBox='3 7 10 8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%2341474E' fill-rule='evenodd' d='M6.333 15L3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z'/%3E%3C/svg%3E") 50% no-repeat}.swagger-ui .dialog-ux{bottom:0;left:0;position:fixed;right:0;top:0;z-index:9999}.swagger-ui .dialog-ux .backdrop-ux{background:rgba(0,0,0,.8);bottom:0;left:0;position:fixed;right:0;top:0}.swagger-ui .dialog-ux .modal-ux{background:#fff;border:1px solid #ebebeb;border-radius:4px;-webkit-box-shadow:0 10px 30px 0 rgba(0,0,0,.2);box-shadow:0 10px 30px 0 rgba(0,0,0,.2);left:50%;max-width:650px;min-width:300px;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:100%;z-index:9999}.swagger-ui .dialog-ux .modal-ux-content{max-height:540px;overflow-y:auto;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{color:#41444e;color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .dialog-ux .modal-ux-content h4{color:#3b4151;font-family:sans-serif;font-size:18px;font-weight:600;margin:15px 0 0}.swagger-ui .dialog-ux .modal-ux-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #ebebeb;display:-webkit-box;display:-ms-flexbox;display:flex;padding:12px 0}.swagger-ui .dialog-ux .modal-ux-header .close-modal{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0 10px}.swagger-ui .dialog-ux .modal-ux-header h3{color:#3b4151;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:20px;font-weight:600;margin:0;padding:0 20px}.swagger-ui .model{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600}.swagger-ui .model .deprecated span,.swagger-ui .model .deprecated td{color:#a0a0a0!important}.swagger-ui .model .deprecated>td:first-of-type{text-decoration:line-through}.swagger-ui .model-toggle{cursor:pointer;display:inline-block;font-size:10px;margin:auto .3em;position:relative;top:6px;-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.swagger-ui .model-toggle.collapsed{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.swagger-ui .model-toggle::after{background:url('data:image/svg+xml;charset=utf-8,') 50% no-repeat;background-size:100%;content:"";display:block;height:20px;width:20px}.swagger-ui .model-jump-to-path{cursor:pointer;position:relative}.swagger-ui .model-jump-to-path .view-line-link{cursor:pointer;position:absolute;top:-.4em}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{background:rgba(0,0,0,.7);border-radius:4px;color:#ebebeb;padding:.1em .5em;position:absolute;top:-1.8em;visibility:hidden;white-space:nowrap}.swagger-ui .model p{margin:0 0 1em}.swagger-ui .model .property{color:#999;font-style:italic}.swagger-ui .model .property.primitive{color:#6b6b6b}.swagger-ui table.model tr.description{color:#666;font-weight:400}.swagger-ui table.model tr.description td:first-child,.swagger-ui table.model tr.property-row.required td:first-child{font-weight:700}.swagger-ui table.model tr.property-row td{vertical-align:top}.swagger-ui table.model tr.property-row td:first-child{padding-right:.2em}.swagger-ui table.model tr.property-row .star{color:red}.swagger-ui table.model tr.extension{color:#777}.swagger-ui table.model tr.extension td:last-child{vertical-align:top}.swagger-ui section.models{border:1px solid rgba(59,65,81,.3);border-radius:4px;margin:30px 0}.swagger-ui section.models .pointer{cursor:pointer}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{border-bottom:1px solid rgba(59,65,81,.3);margin:0 0 5px}.swagger-ui section.models h4{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#606060;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;font-family:sans-serif;font-size:16px;margin:0;padding:10px 20px 10px 10px;-webkit-transition:all .2s;transition:all .2s}.swagger-ui section.models h4 svg{-webkit-transition:all .4s;transition:all .4s}.swagger-ui section.models h4 span{-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{color:#707070;font-family:sans-serif;font-size:16px;margin:0 0 10px}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{background:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;position:relative;-webkit-transition:all .5s;transition:all .5s}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-container .models-jump-to-path{opacity:.65;position:absolute;right:5px;top:8px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{background:rgba(0,0,0,.1);border-radius:4px;display:inline-block;padding:10px}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-box.deprecated{opacity:.5}.swagger-ui .model-title{color:#505050;font-family:sans-serif;font-size:16px}.swagger-ui .model-title img{bottom:0;margin-left:1em;position:relative}.swagger-ui .model-deprecated-warning{color:#f93e3e;font-family:sans-serif;font-size:16px;font-weight:600;margin-right:1em}.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-name{display:inline-block;margin-right:1em}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#606060}.swagger-ui .servers>label{color:#3b4151;font-family:sans-serif;font-size:12px;margin:-20px 15px 0 0}.swagger-ui .servers>label select{max-width:100%;min-width:130px}.swagger-ui .servers h4.message{padding-bottom:2em}.swagger-ui .servers table tr{width:30em}.swagger-ui .servers table td{display:inline-block;max-width:15em;padding-bottom:10px;padding-top:10px;vertical-align:middle}.swagger-ui .servers table td:first-of-type{padding-right:1em}.swagger-ui .servers table td input{height:100%;width:100%}.swagger-ui .servers .computed-url{margin:2em 0}.swagger-ui .servers .computed-url code{display:inline-block;font-size:16px;margin:0 1em;padding:4px}.swagger-ui .servers-title{font-size:12px;font-weight:700}.swagger-ui .operation-servers h4.message{margin-bottom:2em}.swagger-ui table{border-collapse:collapse;padding:0 10px;width:100%}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{padding:0 0 0 2em;width:174px}.swagger-ui table.headers td{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600;vertical-align:middle}.swagger-ui table.headers .header-example{color:#999;font-style:italic}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{min-width:6em;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{border-bottom:1px solid rgba(59,65,81,.2);color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;padding:12px 0;text-align:left}.swagger-ui .parameters-col_description{margin-bottom:2em;width:99%}.swagger-ui .parameters-col_description input[type=text]{max-width:340px;width:100%}.swagger-ui .parameters-col_description select{border-width:1px}.swagger-ui .parameter__name{color:#3b4151;font-family:sans-serif;font-size:16px;font-weight:400;margin-right:.75em}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required span{color:red}.swagger-ui .parameter__name.required::after{color:rgba(255,0,0,.6);content:"required";font-size:10px;padding:5px;position:relative;top:-6px}.swagger-ui .parameter__extension,.swagger-ui .parameter__in{color:grey;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__deprecated{color:red;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__empty_value_toggle{display:block;font-size:13px;padding-bottom:12px;padding-top:5px}.swagger-ui .parameter__empty_value_toggle input{margin-right:7px}.swagger-ui .parameter__empty_value_toggle.disabled{opacity:.7}.swagger-ui .table-container{padding:20px}.swagger-ui .response-col_description{width:99%}.swagger-ui .response-col_links{min-width:6em}.swagger-ui .response__extension{color:grey;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .topbar{background-color:#1b1b1b;padding:10px 0}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .topbar a{color:#fff;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:1.5em;font-weight:700;max-width:300px;text-decoration:none}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:3;-ms-flex:3;flex:3;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .topbar .download-url-wrapper input[type=text]{border:2px solid #62a03f;border-radius:4px 0 0 4px;margin:0;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0;max-width:600px;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label span{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:16px;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{border:2px solid #62a03f;-webkit-box-shadow:none;box-shadow:none;-webkit-box-flex:2;-ms-flex:2;flex:2;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .download-url-button{background:#62a03f;border:none;border-radius:0 4px 4px 0;color:#fff;font-family:sans-serif;font-size:16px;font-weight:700;padding:4px 30px}.swagger-ui .info{margin:50px 0}.swagger-ui .info.failed-config{margin-left:auto;margin-right:auto;max-width:880px;text-align:center}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info pre{font-size:14px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{color:#3b4151;font-family:sans-serif}.swagger-ui .info a{color:#4990e2;font-family:sans-serif;font-size:14px;-webkit-transition:all .4s;transition:all .4s}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300!important;font-weight:600;margin:0}.swagger-ui .info .title{color:#3b4151;font-family:sans-serif;font-size:36px;margin:0}.swagger-ui .info .title small{background:#7d8492;border-radius:57px;display:inline-block;font-size:10px;margin:0 0 0 5px;padding:2px 4px;position:relative;top:-5px;vertical-align:super}.swagger-ui .info .title small.version-stamp{background-color:#89bf04}.swagger-ui .info .title small pre{color:#fff;font-family:sans-serif;margin:0;padding:0}.swagger-ui .auth-btn-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:10px 0}.swagger-ui .auth-btn-wrapper .btn-done{margin-right:1em}.swagger-ui .auth-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{margin-right:10px;padding-right:20px}.swagger-ui .auth-container{border-bottom:1px solid #ebebeb;margin:0 0 10px;padding:10px 20px}.swagger-ui .auth-container:last-of-type{border:0;margin:0;padding:10px 20px}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{background-color:#fee;border-radius:4px;color:red;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:1em;padding:10px}.swagger-ui .auth-container .errors b{margin-right:1em;text-transform:capitalize}.swagger-ui .scopes h2{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .scopes h2 a{color:#4990e2;cursor:pointer;font-size:12px;padding-left:10px;text-decoration:underline}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{-webkit-animation:scaleUp .5s;animation:scaleUp .5s;background:rgba(249,62,62,.1);border:2px solid #f93e3e;border-radius:4px;margin:20px;padding:10px 20px}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{color:#3b4151;font-family:monospace;font-size:14px;font-weight:600;margin:0}.swagger-ui .errors-wrapper .errors small{color:#606060}.swagger-ui .errors-wrapper .errors .message{white-space:pre-line}.swagger-ui .errors-wrapper .errors .message.thrown{max-width:100%}.swagger-ui .errors-wrapper .errors .error-line{cursor:pointer;text-decoration:underline}.swagger-ui .errors-wrapper hgroup{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .errors-wrapper hgroup h4{color:#3b4151;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:20px;margin:0}@-webkit-keyframes scaleUp{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes scaleUp{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.swagger-ui .Resizer.vertical.disabled{display:none}.swagger-ui .markdown p,.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown p,.swagger-ui .renderedMarkdown pre{margin:1em auto;word-break:break-all;word-break:break-word}.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown pre{background:none;color:#000;font-weight:400;padding:0;white-space:pre-wrap}.swagger-ui .markdown code,.swagger-ui .renderedMarkdown code{background:rgba(0,0,0,.05);border-radius:4px;color:#9012fe;font-family:monospace;font-size:14px;font-weight:600;padding:5px 7px}.swagger-ui .markdown pre>code,.swagger-ui .renderedMarkdown pre>code{display:block}.swagger-ui{-webkit-filter:invert(88%) hue-rotate(180deg);filter:invert(88%) hue-rotate(180deg)}.swagger-ui .highlight-code{-webkit-filter:invert(100%) hue-rotate(180deg);filter:invert(100%) hue-rotate(180deg)}.swagger-ui a.nostyle,.swagger-ui a.nostyle:visited{color:#4070f4}.base-url{background-color:unset} + +/*! + Theme: Solarized Dark + Author: Ethan Schoonover (modified by aramisgithub) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#ccc;background:#002b36}.hljs::-moz-selection,.hljs ::-moz-selection{background-color:#586e75;color:#93a1a1}.hljs::selection,.hljs ::selection{background-color:#586e75;color:#93a1a1}.hljs-comment{color:#657b83}.hljs-tag{color:#839496}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#93a1a1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#dc322f}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#afcaff}.hljs-class .hljs-title,.hljs-strong,.hljs-title,.hljs-title.class_{color:#b58900}.hljs-strong{font-weight:700}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#fe9e92}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#2aa198}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#268bd2}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#6c71c4}.hljs-emphasis{color:#6c71c4;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#d33682}.hljs-meta-keyword,.hljs-meta .hljs-keyword{font-weight:700}.page-components{position:relative;line-height:1}@media screen and (max-width:1024px){.toolbar .page-components,.toolbar .page-versions{display:none}}.page-components .component-menu-toggle{color:inherit;background:url(../img/chevron.svg) no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;border:none;outline:none;line-height:inherit;padding:.5rem 1.5rem .5rem 0;position:relative;z-index:3}.page-components .component-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;background:-webkit-gradient(linear,left top,left bottom,from(#000),to(#000)) no-repeat;background:linear-gradient(180deg,#000 0,#000) no-repeat;margin:1.375rem 0 0;padding:.5rem;position:absolute;top:0;white-space:nowrap}.page-components:not(.is-active) .component-menu{display:none}.page-components .component{display:block;padding-top:.5rem}.page-components .component.is-current{display:none}.page-components .component.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}@media screen and (max-width:468.5px){.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{width:calc(100vw - 8rem)}}@media screen and (max-width:700px){.doc table.overview-table,.doc table.overview-table>*>tr{display:-webkit-box;display:-ms-flexbox;display:flex}.doc table.overview-table>*>tr{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.doc .sidebarblock>.content>.title{text-align:inherit;font-size:1.15em}.toolbar-search{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.overview-box .title,.toolbar-search{display:-webkit-box;display:-ms-flexbox;display:flex}.overview-box .title{font-family:Inter,sans-serif;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.overview-box>.content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.doc .overview-box .image>img{max-width:unset;width:2rem;padding-top:2rem}.doc .overview-box .overview-title{background-color:unset;border:none}.doc .overview-box .overview-title content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.overview-box .title a span{padding-right:1.5em}.doc .sidebarblock.overview-box{background-color:unset;border:1px solid #ccc;padding-bottom:2rem;padding-left:2rem;min-height:15rem}.doc .overview-banner>.content>.title{font-size:2em!important;font-family:Inter,sans-serif}.doc table.tableblock.overview-table{-webkit-box-shadow:none!important;box-shadow:none!important}.doc table.overview-table>*>tr>*{border:none}.navbar{padding-inline:1rem}@media screen and (min-width:1024px){.toolbar{padding:0 2em 0 1.5em}main>.content{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;left:-150px}.navbar{padding:2rem;z-index:11}.navbar-brand{padding-left:unset;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item.is-hoverable:hover .navbar-dropdown{top:33px;z-index:3}.toolbar-search{display:none}.edit-this-page{display:-webkit-box;display:-ms-flexbox;display:flex}}.top-logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.5rem}.medium-zoom-image{z-index:999}.page-versions{margin:unset}.page-versions .version-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;background:-webkit-gradient(linear,left top,left bottom,from(#000),to(#000)) no-repeat;background:linear-gradient(180deg,#000 0,#000) no-repeat;margin:1.375rem .5rem 0 0;padding:.5rem;position:absolute;top:0;right:0;white-space:nowrap;min-width:unset}.DocSearch-Button{font-weight:400;padding-left:1rem}.search-box{padding-right:2em;padding-left:1em;width:100%;-ms-flex-item-align:start;align-self:start;height:2.4rem}.search-box .DocSearch-Button{border-radius:20px;width:100%}.algolia-autocomplete{width:100%;-ms-flex-item-align:center;align-self:center;height:2.5rem}.navbar-brand{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.starknet-logo{background-repeat:no-repeat;display:inline-block;height:40px}.docs-logo{font-size:1.1875rem;line-height:1.44;letter-spacing:.01em;color:#363636}.theme-toggle{background-repeat:no-repeat;background-position:50%;-ms-flex-item-align:start;align-self:start;padding:1.2rem;border-style:none;border-radius:6px}.theme-toggle-container{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@media screen and (max-width:1023.5px){.navbar-menu{position:relative;min-height:calc(100vh - 13rem)}.theme-toggle{margin-inline:auto}}.theme-toggle.dark:hover{background-image:url(../img/moon.svg)}.pencil{background-image:url(../img/pencil.svg);background-repeat:no-repeat;height:1rem;width:1rem;padding:0 1em;vertical-align:middle}.navbar-end .navbar-item .navbar-dropdown{padding-top:.8rem}.navbar-end .navbar-item.has-dropdown,.navbar-end .navbar-item.has-dropdown .navbar-link{-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid transparent;z-index:4;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.navbar-end .navbar-item.has-dropdown:hover{border-bottom:unset!important;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:.25rem .25rem 0 0}.navbar-end .navbar-item.has-dropdown:hover .navbar-link::after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.edit-this-page:hover a{color:#4070f4;text-decoration:none}.doc{font-family:Inter,Roboto,sans-serif;max-width:72rem;padding:0 1rem 2rem}.doc .imageblock{border-radius:.5rem}.doc .imageblock .title{margin:unset}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{padding:.5em}.doc a:hover{color:#4070f4;text-decoration:underline}.doc .listingblock,.exampleblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.doc .listingblock .title,.exampleblock .title{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center}@media screen and (max-width:1023.5px){footer .footerdiv{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.3rem}.footer_icon p{display:none}.footer>.community_icons{width:10em}}footer .footerdiv{padding:1rem 2rem;-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}footer.footer,footer .footerdiv{display:-webkit-box;display:-ms-flexbox;display:flex}footer.footer{padding:unset}.community_icons{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:2.5rem}.community_icons,.footer_icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.footer_icon{padding:0 0 0 1.5rem;height:1.25rem;background-size:1.25rem;background-repeat:no-repeat}.footer_icon p{font-size:.875rem;margin-left:.6rem}.footer_icon svg{fill:#ccc}.footer-left{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:20px}.footer-network-info{border-radius:.5rem;padding-left:.4rem;padding-right:.4rem;background-color:#ffcd9a;color:#000}.vertical-divider{width:1px;height:2rem;background:#313131;border-radius:2px}.hr-divider{background-color:#313131;height:1px;margin-inline:1rem;margin-block:1.625rem}.doc details{margin-left:0;padding:1rem;border-radius:.5rem}.doc details summary{padding-left:1.5rem}.doc details.result{margin-top:1rem}.doc details.result>.content{margin:.5rem 0 0}.doc details>summary::before{border:none;background-repeat:no-repeat}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 14rem)}#toc{border-radius:.5rem;margin-top:1.5rem}#toctitle{font-family:Inter,Roboto,sans-serif;font-size:29px;padding:1.25rem 1.25rem 0}#toc .sectlevel1{font-weight:450;list-style:none;padding:0 1.25rem 1.25rem}#toc .sectlevel1>li{padding:.75rem 0 0;font-size:16px}#toc .sectlevel2{font-weight:400;padding-top:.5rem;list-style:disc}.doc table.tableblock{border-collapse:collapse;border-radius:.5rem;border-style:hidden}.doc table.tableblock,.doc table.tableblock>*>tr>*{border-radius:.5rem}.doc table.tableblock>*>tr>*{border-left-width:0;border-right-width:0}.doc table.grid-all>thead th,.doc table.grid-rows>thead th{font-weight:600;line-height:2;border-width:0}.dark-mode-label,.light-mode-label{display:none;text-transform:uppercase;font-size:.75rem;font-weight:500}.light-mode-label{color:#fff}.dark-mode-label{color:#000}.desktop-only{display:none}@media screen and (min-width:1024px){.desktop-only{display:block}.doc{padding:0 4rem 2rem 5.5rem}.mobile-only{display:none}footer.footer{position:sticky;bottom:0;z-index:10}.top-logo{width:16rem}}.mask-svg-center{mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}.navbar-end .navbar-link,.navbar-end>.navbar-item{color:#fff}.light-mode-label{display:block}@media screen and (min-width:1024px){.page-components .component-menu-toggle,.page-versions .version-menu-toggle{background:url(../img/chevron-down-grey.svg) no-repeat;background-position:right .5rem top 50%}.light-mode-label{display:none}}.DocSearch-Button{background:hsla(0,0%,100%,.06);color:#fff;background-position:1em;background-repeat:no-repeat;border:1px solid #363f55}.navbar{background:#121212}.navbar-end .navbar-item.has-dropdown:hover .navbar-link{border-left:1px solid #363f55;border-top:1px solid #363f55;border-right:1px solid #363f55}.doc .sidebarblock.overview-box{border:1px solid #363f55}.navbar-brand .navbar-item:first-child{color:#f7f9fb}.starknet-logo{background-image:url(../img/starknet-logo-white.svg);width:168px}.docs-logo{color:#fff}.toolbar{border-top:1px solid #313131}.theme-toggle,.toolbar{background-color:#121212}.theme-toggle{background-image:url(../img/sun-light.svg);fill:#f7f9fb}.navbar-end .navbar-item .navbar-dropdown{border-top:1px solid #363f55}.theme-toggle:hover{background-color:#252d3b}.nav-toggle{background:url(../img/collapse-icon-outlined.svg) no-repeat 50% 47.5%}.nav-toggle,.pencil{fill:#f7f9fb}.nav{border-right:1px solid #313131}.nav-panel-explore .component .version a{border:1px solid #363f55;color:#f7f9fb}.nav-panel-explore .context:hover{color:#4070f4;background-color:#121212}.doc .sidebarblock{background-color:#363f55}.doc .imageblock{border:1px solid #363f55}.doc .colist>table code,.doc h2 code,.doc h3 code,.doc p code,.doc thead code{background-color:#363636;color:#ccc}.doc .colist>table a code,.doc p a code,.doc thead a code{color:#afcaff!important}.nav-toggle.is-active{background-color:#fff;-webkit-mask-image:url(../img/back.svg);-webkit-mask-size:41.5%;-webkit-mask-repeat:no-repeat;-webkit-mask-position-y:center}footer.footer{border-top:1px solid #313131}.doc details{border:1px solid #363f55}.doc table.tableblock{background-color:#121212;-webkit-box-shadow:0 0 0 1px #313131;box-shadow:0 0 0 1px #313131}.doc table.tableblock,.doc table.tableblock>*>tr>*{border-color:#313131}.components-versions{border-right:1px solid #313131}#toc{background-color:rgba(197,207,228,.2)}.doc .quoteblock,.doc .verseblock{color:#f7f9fb}.doc .exampleblock>.content,.doc details.result>.content{background-color:unset}.medium-zoom-overlay{background:#121212!important}.doc details>summary::after{background-image:url(../img/chevron-down-grey.svg);background-repeat:no-repeat;left:0}.doc details[open]>summary::after{left:0;background-image:url(../img/chevron-up-grey.svg)}.nav-panel-explore .context .version::after{background:url(../img/chevron-down-grey.svg) no-repeat 100%/auto 75%}.tablist>ul li{color:#000} + +/*! @algolia/autocomplete-theme-classic 1.7.4 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */.aa-Autocomplete *,.aa-DetachedFormContainer *,.aa-Panel *{-webkit-box-sizing:border-box;box-sizing:border-box}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:#262627;margin:0}.aa-Form{background-color:#fff;border:1px solid rgba(128,126,163,.8);width:100%}.aa-Form[focus-within]{-webkit-box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);-webkit-box-shadow:#afcaff 0 0 0 2px,inset #afcaff 0 0 0 2px;box-shadow:0 0 0 2px #afcaff,inset 0 0 0 2px #afcaff}.aa-Form:focus-within{-webkit-box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);-webkit-box-shadow:#afcaff 0 0 0 2px,inset #afcaff 0 0 0 2px;box-shadow:0 0 0 2px #afcaff,inset 0 0 0 2px #afcaff}.aa-InputWrapperPrefix{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;height:44px;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.aa-Label,.aa-LoadingIndicator{cursor:auto;-ms-flex-negative:0;flex-shrink:0;height:100%;padding:0;text-align:left}.aa-Label svg,.aa-LoadingIndicator svg{color:#3e34d3;color:#afcaff;height:auto;max-height:20px;stroke-width:1.6;width:20px}.aa-LoadingIndicator,.aa-SubmitButton{height:100%;padding-left:11px;padding-right:8px;width:47px}@media (hover:none) and (pointer:coarse){.aa-LoadingIndicator,.aa-SubmitButton{padding-left:3px;width:39px}}.aa-SubmitButton{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0}.aa-LoadingIndicator{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.aa-LoadingIndicator[hidden]{display:none}.aa-InputWrapper{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3;position:relative;width:100%}.aa-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:#262627;color:#fff;font:inherit;height:44px;padding:0;width:100%}.aa-Input::-moz-placeholder{color:rgba(128,126,163,.6);color:#ccc;opacity:1}.aa-Input:-ms-input-placeholder{color:rgba(128,126,163,.6);color:#ccc;opacity:1}.aa-Input::-webkit-input-placeholder{color:rgba(128,126,163,.6);color:#ccc;opacity:1}.aa-Input::-ms-input-placeholder{color:rgba(128,126,163,.6);color:#ccc;opacity:1}.aa-Input::placeholder{color:rgba(128,126,163,.6);color:#ccc;opacity:1}.aa-Input:focus{border-color:none;-webkit-box-shadow:none;box-shadow:none;outline:none}.aa-Input::-webkit-search-cancel-button,.aa-Input::-webkit-search-decoration,.aa-Input::-webkit-search-results-button,.aa-Input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.aa-InputWrapperSuffix{-webkit-box-align:center;height:44px;-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.aa-ClearButton,.aa-InputWrapperSuffix{-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.aa-ClearButton{-webkit-box-align:center;background:none;border:0;color:rgba(128,126,163,.6);color:#ccc;cursor:pointer;height:100%;margin:0;padding:0 12.83328px}@media (hover:none) and (pointer:coarse){.aa-ClearButton{padding:0 10.16672px}}.aa-ClearButton:focus,.aa-ClearButton:hover{color:#262627;color:#fff}.aa-ClearButton[hidden]{display:none}.aa-ClearButton svg{stroke-width:1.6;width:20px}.aa-Panel{border-radius:4px;-webkit-box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);-webkit-box-shadow:0 4px 4px rgba(0,0,0,.25),0 1px 47px -3px rgba(0,0,0,.15),0 12px 22px -2px rgba(0,0,0,.68);box-shadow:0 4px 4px rgba(0,0,0,.25),0 1px 47px -3px rgba(0,0,0,.15),0 12px 22px -2px rgba(0,0,0,.68);margin:8px 0 0;position:absolute}@media screen and (prefers-reduced-motion){.aa-Panel{-webkit-transition:none;transition:none}}.aa-Panel button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;margin:0;padding:0}.aa-PanelLayout{padding:0}.aa-PanelLayoutColumns--twoGolden{display:grid;grid-template-columns:39.2% auto;overflow:hidden;padding:0}.aa-PanelLayoutColumns--two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));overflow:hidden;padding:0}.aa-PanelLayoutColumns--three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;padding:0}.aa-Panel--stalled .aa-Source{-webkit-filter:grayscale(1);filter:grayscale(1);opacity:.8}.aa-Panel--scrollable{margin:0;max-height:650px;overflow-x:hidden;overflow-y:auto;overflow-y:overlay;padding:8px;scrollbar-color:#ccc transparent;scrollbar-width:thin}.aa-Panel--scrollable::-webkit-scrollbar{width:13px;width:7px}.aa-Panel--scrollable::-webkit-scrollbar-track{background-color:transparent}.aa-Panel--scrollable::-webkit-scrollbar-thumb{background-color:#ccc;border-radius:9999px}.aa-Source{margin:0;padding:0;position:relative;width:100%}.aa-Source:empty{display:none}.aa-SourceNoResults{font-size:1em;margin:0;padding:16px}.aa-List{list-style:none;margin:0}.aa-List,.aa-SourceHeader{padding:0;position:relative}.aa-SourceHeader{margin:8px .5em 8px 0}.aa-SourceHeader:empty{display:none}.aa-SourceHeaderTitle{background:#fff;background:#1b1b1b;color:#3e34d3;color:#afcaff;font-size:.8em;font-weight:600}.aa-SourceHeaderLine{border-bottom:1px solid #afcaff;display:block;height:2px;left:0;margin:0;opacity:.3;padding:0;position:absolute;right:0;top:8px;z-index:9998}.aa-SourceFooterSeeAll{background:-webkit-gradient(linear,left top,left bottom,from(#fff),to(rgba(128,126,163,.14)));background:linear-gradient(180deg,#fff,rgba(128,126,163,.14));background:-webkit-gradient(linear,left top,left bottom,from(#1b1b1b),to(rgba(128,126,163,.14)));background:linear-gradient(180deg,#1b1b1b,rgba(128,126,163,.14));border:1px solid #ccc;border-radius:5px;-webkit-box-shadow:inset 0 0 2px #fff,0 2px 2px -1px rgba(76,69,88,.15);box-shadow:inset 0 0 2px #fff,0 2px 2px -1px rgba(76,69,88,.15);color:inherit;font-size:.95em;font-weight:500;padding:.475em 1em .6em;text-decoration:none}.aa-SourceFooterSeeAll:focus,.aa-SourceFooterSeeAll:hover{border:1px solid #afcaff;color:#3e34d3;color:#afcaff}.aa-Item{border-radius:3px;padding:4px}.aa-Item[aria-selected=true]{background-color:rgba(179,173,214,.205)}.aa-Item[aria-selected=true] .aa-ActiveOnly,.aa-Item[aria-selected=true] .aa-ItemActionButton{visibility:visible}.aa-ItemIcon{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;background:#1b1b1b;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);-webkit-box-shadow:inset 0 0 0 1px #313131;box-shadow:inset 0 0 0 1px #313131;color:#7777a3;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;font-size:.7em;height:28px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden;stroke-width:1.6;text-align:center;width:28px}.aa-ItemIcon img{height:auto;max-height:20px;max-width:20px;width:auto}.aa-ItemIcon svg{height:20px;width:20px}.aa-ItemIcon--alignTop{-ms-flex-item-align:start;align-self:flex-start}.aa-ItemIcon--noBorder{background:none;-webkit-box-shadow:none;box-shadow:none}.aa-ItemIcon--picture{height:96px;width:96px}.aa-ItemIcon--picture img{max-height:100%;max-width:100%;padding:8px}.aa-ItemContent{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:grid;grid-gap:8px;gap:8px;grid-auto-flow:column;line-height:1.25em;overflow:hidden}.aa-ItemContent:empty{display:none}.aa-ItemContent mark{background:none;color:#262627;color:#fff;font-style:normal;font-weight:700}.aa-ItemContent--dual{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;text-align:left}.aa-ItemContent--dual .aa-ItemContentSubtitle,.aa-ItemContent--dual .aa-ItemContentTitle{display:block}.aa-ItemContent--indented{padding-left:36px}.aa-ItemContentBody{display:grid;grid-gap:4px;gap:4px}.aa-ItemContentTitle{display:inline-block;margin:0 .5em 0 0;max-width:100%;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.aa-ItemContentSubtitle{font-size:.92em}.aa-ItemContentSubtitleIcon::before{border-color:hsla(0,0%,80%,.64);border-style:solid;content:"";display:inline-block;left:1px;position:relative;top:-3px}.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon::before{border-width:0 0 1.5px;margin-left:8px;margin-right:4px;width:10px}.aa-ItemContentSubtitle--standalone{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#262627;color:#fff;display:grid;grid-gap:8px;gap:8px;grid-auto-flow:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:start}.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon::before{border-radius:0 0 0 3px;border-width:0 0 1.5px 1.5px;height:8px;width:8px}.aa-ItemContentSubtitleCategory{color:#807ea3;color:#ccc;font-weight:500}.aa-ItemContentDescription{color:#262627;color:#fff;font-size:.85em;max-width:100%;overflow-x:hidden;text-overflow:ellipsis}.aa-ItemContentDescription:empty{display:none}.aa-ItemContentDescription mark{background:rgba(245,223,77,.5);background:rgba(0,255,255,.25);color:#262627;color:#fff;font-style:normal;font-weight:500}.aa-ItemContentDash{color:rgba(128,126,163,.6);color:#ccc;display:none;opacity:.4}.aa-ItemContentTag{background-color:rgba(62,52,211,.2);background-color:#afcaff;border-radius:3px;margin:0 .4em 0 0;padding:.08em .3em}.aa-ItemLink,.aa-ItemWrapper{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:inherit;display:grid;grid-gap:4px;gap:4px;grid-auto-flow:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%}.aa-ItemLink{color:inherit;text-decoration:none}.aa-ItemActions{display:grid;grid-auto-flow:column;height:100%;justify-self:end;margin:0 -5.33333px;padding:0 2px 0 0}.aa-ItemActionButton{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:0;color:rgba(128,126,163,.6);color:#ccc;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;padding:0}.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:#262627;color:#fff}@media (hover:none) and (pointer:coarse){.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:inherit}}.aa-ItemActionButton svg{color:rgba(128,126,163,.6);color:#ccc;margin:5.33333px;stroke-width:1.6;width:20px}.aa-ActiveOnly{visibility:hidden}.aa-PanelHeader{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#3e34d3;background:#afcaff;color:#fff;display:grid;height:var(--aa-modal-header-height);margin:0;padding:8px 16px;position:relative}.aa-PanelHeader::after{background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(hsla(0,0%,100%,0)));background-image:linear-gradient(#fff,hsla(0,0%,100%,0));background-image:-webkit-gradient(linear,left top,left bottom,from(#1b1b1b),to(rgba(27,27,27,0)));background-image:linear-gradient(#1b1b1b,rgba(27,27,27,0));bottom:-8px;content:"";height:8px;left:0;pointer-events:none;position:absolute;right:0}.aa-PanelFooter,.aa-PanelHeader::after{z-index:9999}.aa-PanelFooter{background-color:#fff;background-color:#1b1b1b;-webkit-box-shadow:inset 0 1px 0 rgba(128,126,163,.3);box-shadow:inset 0 1px 0 rgba(128,126,163,.3);-webkit-box-shadow:inset 0 1px 0 #313131;box-shadow:inset 0 1px 0 #313131;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:0;padding:16px;position:relative}.aa-PanelFooter::after{background-image:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(rgba(128,126,163,.6)));background-image:linear-gradient(hsla(0,0%,100%,0),rgba(128,126,163,.6));background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(27,27,27,0)),to(#ccc));background-image:linear-gradient(rgba(27,27,27,0),#ccc);content:"";height:16px;left:0;opacity:.12;pointer-events:none;position:absolute;right:0;top:-16px;z-index:9998}.aa-DetachedContainer{background:#fff;background:#1b1b1b;bottom:0;-webkit-box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);-webkit-box-shadow:0 4px 4px rgba(0,0,0,.25),0 1px 47px -3px rgba(0,0,0,.15),0 12px 22px -2px rgba(0,0,0,.68);box-shadow:0 4px 4px rgba(0,0,0,.25),0 1px 47px -3px rgba(0,0,0,.15),0 12px 22px -2px rgba(0,0,0,.68);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:9999}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:8px 0 8px 2px}.aa-Panel{background-color:#fff;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;-webkit-box-shadow:none;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{border-bottom:1px solid #313131;padding:8px}.aa-DetachedCancelButton{border:0;border-radius:3px;color:inherit;color:#262627;color:#fff;margin:0 0 0 8px;padding:0 8px}.aa-DetachedCancelButton:focus,.aa-DetachedCancelButton:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);-webkit-box-shadow:inset 0 0 0 1px #313131;box-shadow:inset 0 0 0 1px #313131}.aa-DetachedContainer--modal{border-radius:6px;top:3%}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:500px;max-height:min(600px,75vh);padding-bottom:8px;position:static}.aa-DetachedSearchButton{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;background-color:#1b1b1b;border:1px solid rgba(128,126,163,.8);border-radius:3px;color:rgba(128,126,163,.6);color:#ccc;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;font:inherit;font-family:inherit;font-size:16px;font-size:14px;height:44px;margin:0;padding:0 5.5px;position:relative;text-align:left;width:100%}.aa-DetachedSearchButton:focus{border-color:#afcaff;-webkit-box-shadow:0 0 0 3px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:0 0 0 3px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);-webkit-box-shadow:#afcaff 0 0 0 3px,inset #afcaff 0 0 0 2px;box-shadow:0 0 0 3px #afcaff,inset 0 0 0 2px #afcaff;outline:medium none currentColor}.aa-DetachedSearchButtonIcon{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#3e34d3;color:#afcaff;cursor:auto;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:36px}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(115,114,129,.4);height:100vh;left:0;margin:0;padding:0;position:fixed;right:0;top:0;z-index:9998}.aa-GradientBottom,.aa-GradientTop{height:8px;left:0;pointer-events:none;position:absolute;right:0;z-index:9999}.aa-GradientTop{background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(hsla(0,0%,100%,0)));background-image:linear-gradient(#fff,hsla(0,0%,100%,0));background-image:-webkit-gradient(linear,left top,left bottom,from(#1b1b1b),to(rgba(27,27,27,0)));background-image:linear-gradient(#1b1b1b,rgba(27,27,27,0));top:0}.aa-GradientBottom{background-image:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(#fff));background-image:linear-gradient(hsla(0,0%,100%,0),#fff);background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(27,27,27,0)),to(#1b1b1b));background-image:linear-gradient(rgba(27,27,27,0),#1b1b1b);border-bottom-left-radius:4px;border-bottom-right-radius:4px;bottom:0}@media (hover:none) and (pointer:coarse){.aa-DesktopOnly{display:none}}@media (hover:hover){.aa-TouchOnly{display:none}}@media (hover:none) and (pointer:coarse){:root{--aa-spacing-factor:1.2;--aa-action-icon-size:22px}}.aa-Panel{background-color:#1b1b1b;border-radius:0;-webkit-box-shadow:none;box-shadow:none;margin:0;overflow:hidden;-webkit-transition:opacity .2s ease-in,-webkit-filter .2s ease-in;transition:opacity .2s ease-in,-webkit-filter .2s ease-in;transition:opacity .2s ease-in,filter .2s ease-in;transition:opacity .2s ease-in,filter .2s ease-in,-webkit-filter .2s ease-in}.aa-Item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:grid;min-height:40px;padding:0;margin-bottom:8px;border-radius:8px;background-color:#1e1d1d}.aa-ItemLink,.aa-ItemWrapper{padding:16px}.aa-Item:last-child{margin-bottom:24px}.aa-Item[aria-selected=true]{background-color:#afcaff;color:#0b0b0b}.aa-Item[aria-selected=true] svg{color:#fff}.aa-DetachedContainer .aa-SourceHeader{margin:16px 0 12px}.aa-PanelLayout{height:100%;margin:0;max-height:650px;overflow-y:auto;padding:16px 1.5rem;margin-inline:1rem;position:relative;text-align:left}.aa-DetachedSearchButton{min-width:200px;border-radius:8px;border:0}.aa-DetachedSearchButtonIcon{color:inherit}.aa-DetachedSearchButton svg{width:16px}.aa-DetachedContainer--modal{border-radius:16px;bottom:inherit;height:auto;margin:0 auto;max-width:680px;position:absolute;top:10%}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:#fff;font-family:inherit;font-size:16px;font-size:14px;font-weight:400;line-height:1em;margin:0 .5rem;padding:0;text-align:left}.aa-DetachedFormContainer{border-bottom:1px solid #afcaff;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-inline:2rem}.aa-DetachedFormContainer,.aa-Form{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0}.aa-Form{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#1b1b1b;border:0 solid rgba(128,126,163,.8);border-radius:3px;line-height:1em;position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1;padding-block:8px;background:transparent}.aa-SubmitButton{line-height:1;width:auto;margin:0;padding:0 16px 0 0}.aa-Form[focus-within]{border-color:#afcaff;-webkit-box-shadow:none;box-shadow:none;outline:medium none currentColor}.aa-Form:focus-within{border-color:#afcaff;-webkit-box-shadow:none;box-shadow:none;outline:medium none currentColor}.aa-Input::-webkit-input-placeholder{font-weight:400;color:inherit}.aa-Input::-moz-placeholder{font-weight:400;color:inherit}.aa-Input:-ms-input-placeholder{font-weight:400;color:inherit}.aa-Input::-ms-input-placeholder{font-weight:400;color:inherit}.aa-Input::placeholder{font-weight:400;color:inherit}.aa-SourceHeaderTitle{display:inline-block;font-size:14px;line-height:17px;font-weight:700;margin:0;padding:0 8px 0 0;position:relative;z-index:9999;color:inherit}.aa-DetachedCancelButton{background:none;cursor:pointer;font:inherit;border-radius:8px;border:1px solid #313131;padding:10px 16px;margin:auto 0}.autocomplete-root{position:absolute;top:4.88889rem;left:30px;margin-left:20px;width:100%}.autocomplete-root .aa-Autocomplete .aa-Form{line-height:100%;color:#858585;padding:4px 8px;border-radius:.5rem;background-color:#f6f6f6;border:none}.aa-ItemContent{gap:16px}.aa-ItemContent mark{color:inherit;border-bottom:2px solid #fff;font-weight:600}.aa-ItemActionButtonDanger:hover svg{fill:#ff4557}.aa-ItemLink:hover{text-decoration:none}.aa-Item[aria-selected=true] .aa-ItemContentSubtitle{color:inherit}.aa-ItemContentSubtitle{font-size:12px;font-weight:500;line-height:1.5;color:#ccc;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aa-ItemContentTitle{line-height:1.7}.aa-Item[aria-selected=true] .aa-ItemContentTitle{color:inherit}.aa-Item[aria-selected=true] .aa-ItemContent mark{border-color:inherit}.aa-DetachedSearchButton:focus{-webkit-box-shadow:#afcaff 0 0 0 0,inset #afcaff 0 0 0 2px;box-shadow:0 0 0 0 #afcaff,inset 0 0 0 2px #afcaff}.aa-SourceNoResults{padding:1rem 0}@media screen and (max-width:680px){.aa-DetachedSearchButton:focus{-webkit-box-shadow:none;box-shadow:none;outline:none;border:none}.aa-DetachedSearchButton{background-color:transparent}}@media screen and (min-width:680px){.autocomplete-root{position:static;width:min(300px,50%)}}@media screen and (min-width:1024px){.autocomplete-root{margin-left:0;width:min(484px,50%)}}.aa-Input::-webkit-input-placeholder{color:#afcaff}.aa-Input::-moz-placeholder{color:#afcaff}.aa-Input:-ms-input-placeholder{color:#afcaff}.aa-Input::-ms-input-placeholder{color:#afcaff}.aa-Input::placeholder{color:#afcaff}.aa-Item[aria-selected=true] svg{color:#0b0b0b} \ No newline at end of file diff --git a/pr-1359/_/css/search.css b/pr-1359/_/css/search.css new file mode 100644 index 0000000000..d3845333e4 --- /dev/null +++ b/pr-1359/_/css/search.css @@ -0,0 +1,123 @@ +.search-result-dropdown-menu { + position: absolute; + z-index: 100; + display: block; + right: 0; + left: inherit; + top: 100%; + border-radius: 4px; + margin: 6px 0 0; + padding: 0; + text-align: left; + height: auto; + background: transparent; + border: none; + max-width: 600px; + min-width: 500px; + box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2), 0 2px 3px 0 rgba(0, 0, 0, 0.1); +} + +@media screen and (max-width: 768px) { + .search-result-dropdown-menu { + min-width: calc(100vw - 3.75rem); + } +} + +.search-result-dataset { + position: relative; + border: 1px solid #d9d9d9; + background: #fff; + border-radius: 4px; + overflow: auto; + padding: 8px; + max-height: calc(100vh - 5.25rem); + line-height: 1.5; +} + +.search-result-item { + display: flex; + margin-top: 0.5rem; +} + +.search-result-component-header { + color: #1e1e1e; + border-bottom: 1px solid #ddd; + margin-left: 0.5em; + margin-right: 0.5em; + padding-top: 0.25em; + padding-bottom: 0.25em; +} + +.search-result-document-title { + width: 33%; + border-right: 1px solid #ddd; + color: #02060c; + font-weight: 500; + font-size: 0.8rem; + padding: 0.5rem 0.5rem 0.5rem 0; + text-align: right; + position: relative; + word-wrap: break-word; +} + +.search-result-document-hit { + flex: 1; + font-size: 0.75rem; + color: #63676d; +} + +.search-result-document-hit > a { + color: inherit; + display: block; + padding: 0.55rem 0.25rem 0.55rem 0.75rem; +} + +.search-result-document-hit > a:hover { + background-color: rgba(69, 142, 225, 0.05); +} + +.search-result-document-hit .search-result-highlight { + color: #174d8c; + background: rgba(143, 187, 237, 0.1); + padding: 0.1em 0.05em; + font-weight: 500; +} + +.search-result-document-hit .search-result-section-title { + color: #303030; + font-weight: 500; + font-size: 1.05em; + margin-bottom: 0.25em; +} + +#search-input { + padding: 0.25em; +} + +#search-input:focus { + outline: none; +} + +#search-field { + display: flex; +} + +#search-field .filter { + background: #fff linear-gradient(180deg,#e1e1e1 0,#e1e1e1) no-repeat 0/1px 50%; + border: 1px solid #e1e1e1; + border-left: none; + border-radius: 0 0.1em 0.1em 0; + color: #5d5d5d; + cursor: pointer; + font-size: .875em; + display: flex; + align-items: center; + padding: 0 0.5rem; + white-space: nowrap; + overflow: hidden; +} + +#search-field.has-filter > input { + border-right: none; + border-radius: 0.1em 0 0 0.1em; +} diff --git a/pr-1359/_/css/site.css b/pr-1359/_/css/site.css new file mode 100644 index 0000000000..60a50a8fe4 --- /dev/null +++ b/pr-1359/_/css/site.css @@ -0,0 +1,18 @@ +@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local("Roboto Regular"),local("Roboto-Regular"),url(../font/roboto-latin-400.woff2) format("woff2"),url(../font/roboto-latin-400.woff) format("woff")}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:local("Roboto Italic"),local("Roboto-Italic"),url(../font/roboto-latin-400italic.woff2) format("woff2"),url(../font/roboto-latin-400italic.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:local("Roboto Medium"),local("Roboto-Medium"),url(../font/roboto-latin-500.woff2) format("woff2"),url(../font/roboto-latin-500.woff) format("woff")}@font-face{font-family:Roboto;font-style:italic;font-weight:500;src:local("Roboto Medium Italic"),local("Roboto-MediumItalic"),url(../font/roboto-latin-500italic.woff2) format("woff2"),url(../font/roboto-latin-500italic.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:400;src:local("Roboto Mono Regular"),local("RobotoMono-Regular"),url(../font/roboto-mono-latin-400.woff2) format("woff2"),url(../font/roboto-mono-latin-400.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:500;src:local("Roboto Mono Medium"),local("RobotoMono-Medium"),url(../font/roboto-mono-latin-500.woff2) format("woff2"),url(../font/roboto-mono-latin-500.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:400;src:local("Inter"),local("Inter-Regular"),url(../font/Inter-Regular.woff) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:400;src:local("Inter Italic"),local("Inter-Italic"),url(../font/Inter-Italic.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:500;src:local("Inter Medium"),local("Inter-Medium"),url(../font/Inter-Medium.woff) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:500;src:local("Inter MediumItalic"),local("Inter-MediumItalic"),url(../font/Inter-MediumItalic.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:600;src:local("Inter SemiBold"),local("Inter-SemiBold"),url(../font/Inter-SemiBold.woff) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:600;src:local("Inter SemiBoldItalic"),local("Inter-SemiBoldItalic"),url(../font/Inter-SemiBoldItalic.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-weight:700;src:local("Inter Bold"),local("Inter-Bold"),url(../font/Inter-Bold.woff) format("woff")}@font-face{font-family:Inter;font-style:italic;font-weight:700;src:local("Inter BoldItalic"),local("Inter-BoldItalic"),url(../font/Inter-BoldItalic.woff) format("woff")}@font-face{font-family:Fira Code;src:local("FiraCode Regular"),local("FiraCode-Regular"),url(../font/FiraCode-Regular.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Fira Code;src:local("FiraCode Medium"),local("FiraCode-Medium"),url(../font/FiraCode-Medium.woff) format("woff");font-weight:500;font-style:normal}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1em;height:100%}@media screen and (min-width:1024px){html{font-size:1em}}body{background:#fbfbfb;color:#000;font-family:Inter,sans-serif;line-height:2;margin:0;word-wrap:anywhere}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{font-family:Roboto Mono,monospace}b,dt,strong,th{font-weight:500}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:2;margin:0}button::-moz-focus-inner{border:none;padding:0}summary{cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}table{border-collapse:collapse;word-wrap:normal}object[type="image/svg+xml"]:not([width]){width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}@supports (scrollbar-width:thin){body *{scrollbar-width:thin;scrollbar-color:#c1c1c1 transparent}}body ::-webkit-scrollbar{height:.25rem;width:.25rem}body ::-webkit-scrollbar-thumb{background-color:#c1c1c1}@media screen and (min-width:1024px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:4.88889rem;bottom:0;left:0;width:100%;font-size:.94444rem;z-index:11;visibility:hidden;background:#fbfbfb;overflow-y:auto}.nav-link,.nav-text{display:inline-block;padding-block:.625rem;-webkit-box-flex:1;-ms-flex:1;flex:1;padding-right:2rem}@media screen and (min-width:1024px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible;top:4.88889rem;z-index:1;width:18rem;overflow-y:unset}.nav .nav-panel-explore{bottom:0}}.nav-container.is-active{visibility:visible}.nav{background:#fbfbfb;position:relative}@media screen and (max-width:1023.5px){.nav{height:100%!important}}@media screen and (min-width:769px){.nav{-webkit-box-shadow:.5px 0 3px #c1c1c1;box-shadow:.5px 0 3px #c1c1c1}}@media screen and (min-width:1024px){.nav{top:7.38889rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 7.38889rem)}.nav-panel-menu{overflow-y:auto}}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{-ms-scroll-chaining:none;overscroll-behavior:none}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;top:0;right:0;bottom:0;left:0}.nav-menu{min-height:100%;line-height:1.35;position:relative}@media screen and (min-width:1024px){.nav-menu{padding:.5rem 0}}.nav-menu h3.title{color:#424242;font-size:inherit;font-weight:500;margin:0;padding:.25em 0 .125em}.nav-menu a{color:inherit}.nav-list{margin-left:1rem;padding:0}.nav-menu>.nav-list+.nav-list{margin-top:.5rem}.nav-item{list-style:none;font-size:.875rem;line-height:1.5;margin-left:-16rem;padding-left:16rem;color:#6b7280}.nav-menu>.nav-list{margin-top:10px;margin-left:0}@media screen and (min-width:1024px){.nav-menu>.nav-list{margin-left:1rem}}.nav-item[data-depth="0"]>.nav-list:first-child{display:block}.nav-item:not(.is-active)>.nav-list{display:none}.nav-item-toggle{border:none;outline:none;line-height:inherit;position:absolute;height:1.35em;width:1.35em;margin-top:.7em;right:1em;mask-image:url(../img/chevron-toggle.svg);-webkit-mask-image:url(../img/chevron-toggle.svg);background-color:#6b7280}.nav-item-toggle:hover{background-color:#5c94ff}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg);background-color:#5c94ff}.is-current-page>.nav-link,.is-current-page>.nav-text{font-weight:500}.nav-panel-explore{background:#fbfbfb;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;top:0;right:0;bottom:3.5em;left:0}.nav-panel-explore:not(:first-child){top:auto;max-height:calc(50% + 2.5rem)}.nav-panel-explore .context{font-size:.83333rem;-ms-flex-negative:0;flex-shrink:0;color:#5d5d5d;-webkit-box-shadow:0 -1px 0 #e1e1e1;box-shadow:0 -1px 0 #e1e1e1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer;line-height:1;height:2.5rem;padding:.5em 1.5em}.nav-panel-explore .context .version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit}.nav-panel-explore .context .version::after{content:"";background:url(../img/chevron.svg) no-repeat 100%/auto 100%;width:1.25em;height:.75em}.nav-panel-explore .components{line-height:2;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-shadow:inset 0 1px 5px #e1e1e1;box-shadow:inset 0 1px 5px #e1e1e1;background:#f7f9fb;padding:.5rem .75rem 0;margin:0;overflow-y:scroll;max-height:100%;display:block}.nav-panel-explore:not(.is-active) .components{display:none}.nav-panel-explore .component{display:block}.nav-panel-explore .component+.component{margin-top:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:500;color:inherit}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:0;margin-top:-.25rem;line-height:1}.nav-panel-explore .component .version{display:block;margin:.375rem .375rem 0 0}.nav-panel-explore .component .version a{border:1px solid #c1c1c1;color:inherit;opacity:.75;white-space:nowrap;border-radius:.9rem;text-decoration:none;opacity:1;-webkit-box-flex:0;-ms-flex:none;flex:none;-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0;-ms-flex-positive:0;flex-grow:0;padding:.4em 1em .2em}.nav-panel-explore .component .is-current a{border-color:currentColor;opacity:.9;font-weight:500}.nav-panel-explore .component .version a:hover{border:1px solid #254898;color:#254898}.nav-panel-explore .component .version.is-current a,.nav-panel-explore .component .version a:focus{background:#254898;color:#fff}.nav-list>.nav-item>span{margin-left:-16rem;padding-left:16rem;display:inline-block}.nav-list>.nav-item[data-depth="1"]>a,.nav-list>.nav-item[data-depth="1"]>span,.nav-list>.parent[data-depth="1"]>span>a{font-weight:500;font-size:.9375rem;line-height:1.5;color:#363636}.nav-panel-explore.is-active .context .version::after{-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-left:.5em}.nav-menu>.title{display:none}.is-current-page.parent>span,.is-current-page:not(.parent){background-color:#ebf2ff}.is-current-page.parent>span{display:-webkit-box;display:-ms-flexbox;display:flex}.is-current-page.parent>span>a,.is-current-page>.nav-link{color:#0c0c4f;font-weight:500}.components-versions{width:calc(18rem - 1.5em);height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:inherit;padding:0 1em 0 0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-right:1px solid #dfe6f2}.nav-toggle{margin-left:1rem}@media screen and (max-width:1023.5px){aside.toc.sidebar{display:none}main>.content{overflow-x:auto}}@media screen and (min-width:1024px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 12rem;flex:0 0 12rem;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media screen and (min-width:1216px){aside.toc.sidebar{-ms-flex-preferred-size:15rem;flex-basis:15rem}}.toolbar{color:#5d5d5d;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#f7f9fb;-webkit-box-shadow:0 1px 0 #efefef;box-shadow:0 1px 0 #efefef;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.83333rem;height:2.5rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;position:sticky;top:4.88889rem;z-index:2;padding-inline:1rem}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;padding:0;height:2.5rem;width:2.5rem;margin-right:-.25rem}@media screen and (min-width:1024px){.nav-toggle{display:none}.toolbar{padding-inline:0}}.nav-toggle.is-active{background-image:url(../img/back.svg);background-size:41.5%}.home-link{display:block;mask-image:url(../img/home-outlined.svg);-webkit-mask-image:url(../img/home-outlined.svg);background-color:red;height:1.25rem;width:1.25rem;background-color:#6b7280}.edit-this-page{display:none;padding-right:.5rem}@media screen and (min-width:1024px){.home-link{margin:.625rem}.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#8e8e8e}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;padding:0 .5rem 0 .75rem;line-height:1.35;color:#6b7280}@media screen and (min-width:1024px){.breadcrumbs{display:block}}a+.breadcrumbs{padding-left:.05rem}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .5rem}.breadcrumbs li:last-of-type::after{content:none}.page-versions{margin:0 .2rem 0 auto;position:relative;line-height:1}@media screen and (min-width:1024px){.page-versions{margin-right:.7rem}}.page-versions .version-menu-toggle{color:inherit;background:url(../img/chevron.svg) no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;border:none;outline:none;line-height:inherit;padding:.5rem 1.5rem .5rem .5rem;position:relative;z-index:3}.page-versions .version-menu{min-width:100%;padding:1.375rem 1.5rem .5rem .5rem}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}aside.toc.embedded{display:none}@media screen and (min-width:1024px){.aside.toc.embedded{display:block}}.toc-menu{color:#6b7280}.toc.sidebar .toc-menu{margin-right:.75rem;position:sticky;top:7.38889rem}.toc .toc-menu h3{color:#0c0c4f;font-size:.875rem;font-weight:700;line-height:1.3;margin:0;padding-left:1rem;padding-bottom:.5rem;text-transform:uppercase}.toc.sidebar .toc-menu h3{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:4rem;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.toc .toc-menu ul{font-size:.875rem;line-height:1.6;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 9.88889rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none;scrollbar-width:none}.toc .toc-menu ul::-webkit-scrollbar{width:0;height:0}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:2rem}.toc .toc-menu li[data-level="3"] a{padding-left:3rem}.toc .toc-menu a{color:inherit;display:inline-block;padding:.5rem 0 .5rem 1rem;text-decoration:none;position:relative}.toc .toc-menu a::before{content:"";position:absolute;height:100%;width:1px;background:#efefef;left:2px}.toc .toc-menu a.is-active::after{content:"";width:5px;height:40%;left:0;position:absolute;background:#5c94ff;border-radius:1px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:hover{color:#4070f4}.toc .toc-menu a.is-active{color:#5c94ff;font-weight:500}.sidebar.toc .toc-menu a:focus{background:#f7f9fb}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#363636;font-size:inherit;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;line-height:2;margin:0 auto;max-width:40rem;padding:0 1rem 4rem}@media screen and (min-width:1024px){.doc{-webkit-box-flex:1;-ms-flex:auto;flex:auto;font-size:1rem;margin:0 2rem;max-width:72rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#0c0c4f;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;line-height:1;margin:20px 0;font-weight:700}.doc h3,.doc h4,.doc h5,.doc h6{margin-top:40px!important}.doc>h1.page:first-child{font-size:1.5rem;margin-top:1.5rem;margin-bottom:1rem}.doc>h2{font-size:1.5rem}.doc>h3{font-size:18px}@media screen and (min-width:1024px){.doc>h1.page:first-child{margin-top:2.5rem;font-size:3rem;line-height:3.625rem}}.doc>h1.page:first-child+aside.toc.embedded{margin-top:-.5rem}.doc>h2#name+.sectionbody{margin-top:0}#preamble+.sect1,.doc .sect1+.sect1{margin-top:3rem}.doc h1.sect0{background:#f0f0f0;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){border-bottom:1px solid #efefef;padding-bottom:1rem}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before{content:"\00a7"}.doc h1:hover .anchor,.doc h2:hover .anchor,.doc h3:hover .anchor,.doc h4:hover .anchor,.doc h5:hover .anchor,.doc h6:hover .anchor{visibility:visible}.doc dl,.doc p{margin:0}.doc a{color:#5c94ff}.doc a.bare{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc a.unresolved{color:#c507e4}.doc i.fa{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-style:normal}.doc .colist>table code,.doc h2 code,.doc h3 code,.doc p code,.doc thead code{color:#000;background:#f7f9fb;border-radius:.25em}.doc code,.doc pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-weight:500;border-radius:.5rem}.doc code{padding:4px}.doc pre{font-size:.88889rem;line-height:1.5;margin:0}.doc blockquote{margin:0}.doc .paragraph.lead>p{font-size:1rem}.doc .right{float:right}.doc .left{float:left}.doc .stretch{width:100%}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .admonitionblock,.doc .dlist,.doc .exampleblock,.doc .hdlist,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .ulist,.doc .verseblock,.doc details,.doc hr{margin:1rem 0 0}.doc table.tableblock{margin:1.5rem 0 0;display:block;max-width:-moz-fit-content;max-width:-webkit-fit-content;max-width:fit-content;overflow-x:auto;word-wrap:normal;word-break:normal;padding-inline:1.5rem;padding-block:1.25rem}.hdlist table{table-layout:fixed;width:100%;word-wrap:break-word}.doc table.tableblock+*{margin-top:1.5rem}.doc p.tableblock+p.tableblock{margin-top:.5rem}.doc td.tableblock>.content>:first-child{margin-top:0}.doc table.tableblock td,.doc table.tableblock th{padding:.7rem 1rem}.doc table.tableblock,.doc table.tableblock>*>tr>*{border:0 solid #efefef}.doc table.grid-all>*>tr>*{border-width:1px}.doc table.grid-cols>*>tr>*{border-width:0 1px}.doc table.grid-rows>*>tr>*{border-width:1px 0}.doc table.grid-all>thead th,.doc table.grid-rows>thead th{border-bottom-width:2.5px}.doc table.frame-all{border-width:1px}.doc table.frame-ends{border-width:1px 0}.doc table.frame-sides{border-width:0 1px}.doc table.frame-none>colgroup+*>:first-child>*,.doc table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}.doc table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}.doc table.frame-ends>*>tr>:first-child,.doc table.frame-none>*>tr>:first-child{border-left-width:0}.doc table.frame-ends>*>tr>:last-child,.doc table.frame-none>*>tr>:last-child{border-right-width:0}.doc div.stripes-even table>tbody>tr:nth-of-type(2n),.doc div.stripes-odd table>tbody>tr:nth-of-type(odd),.doc table.stripes-all>tbody>tr,.doc table.stripes-even>tbody>tr:nth-of-type(2n),.doc table.stripes-hover>tbody>tr:hover,.doc table.stripes-odd>tbody>tr:nth-of-type(odd){background:#f7f9fb}.doc div.stripes-even table>tbody>tr:nth-of-type(2n),.doc div.stripes-odd table>tbody>tr:nth-of-type(odd){background:#f0f0f0}.doc div.stripes-even table>tbody>tr:nth-of-type(odd),.doc div.stripes-odd table>tbody>tr:nth-of-type(2n){background:#f7f9fb}.doc table.stripes-all>tbody>tr>td,.doc table.stripes-even>tbody>tr:nth-of-type(2n)>td,.doc table.stripes-odd>tbody>tr:nth-of-type(odd)>td{border-radius:0}.doc table.tableblock>tfoot{background:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#fff));background:linear-gradient(180deg,#f0f0f0 0,#fff)}.doc .halign-left{text-align:left}.doc .halign-right{text-align:right}.doc .halign-center{text-align:center}.doc .valign-top{vertical-align:top}.doc .valign-bottom{vertical-align:bottom}.doc .valign-middle{vertical-align:middle}.doc .admonitionblock{border-radius:8px}.doc .admonitionblock.tip{border:1px solid #c4e2e0}.doc .admonitionblock.note{border:1px solid #dee3ed}.doc .admonitionblock.important{border:1px solid #e9e1da}.doc .admonitionblock.caution,.doc .admonitionblock.warning{border:1px solid #e7d5d4}.doc .admonitionblock td.content>.title+*,.doc .admonitionblock td.content>:not(.title):first-child{margin-top:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock>table{table-layout:fixed;position:relative;width:100%}.doc .admonitionblock td.content{background:#f7f9fb;width:100%;word-wrap:anywhere;padding:73px 24px 24px;border-radius:.5rem}.doc .admonitionblock p,.doc .admonitionblock td.content{line-height:1.5}@media screen and (min-width:1024px){.doc .admonitionblock td.content{padding:24px 24px 24px 152px;min-height:96px}.doc .admonitionblock.note td.content{padding:24px 24px 24px 141px}.doc .admonitionblock.important td.content{padding:24px 24px 24px 176px}.doc .admonitionblock.caution td.content{padding:24px 24px 24px 162px}.doc .admonitionblock.warning td.content{padding:24px 24px 24px 166px}.doc .admonitionblock.tip td.content{padding:24px 24px 24px 131px}}.doc .admonitionblock .icon{position:absolute;font-size:18px;line-height:1;top:32px;left:24px;z-index:1;padding:8px 12px;border-radius:4px;text-align:center}@media screen and (min-width:1024px){.doc .admonitionblock.one-line-block .icon{top:18px}}@media screen and (max-width:1024px){.doc .admonitionblock .icon{top:24px}}.doc .admonitionblock .icon .icon-note::before{background-image:url(../img/pencil-filled.svg)}.doc .admonitionblock .icon .icon-note::before,.doc .admonitionblock .icon .icon-warning::before{background-repeat:no-repeat;content:"";display:inline-block;vertical-align:middle;margin-right:8px}.doc .admonitionblock .icon .icon-warning::before{background-image:url(../img/warning-outlined.svg)}.doc .admonitionblock .icon .icon-caution::before{background-image:url(../img/i-caution-outlined.svg);background-repeat:no-repeat;content:"";display:inline-block;vertical-align:middle;margin-right:8px}.doc .admonitionblock .icon .icon-important::before{background-image:url(../img/flag-filled.svg)}.doc .admonitionblock .icon .icon-important::before,.doc .admonitionblock .icon .icon-tip::before{background-repeat:no-repeat;content:"";display:inline-block;vertical-align:middle;margin-right:8px}.doc .admonitionblock .icon .icon-tip::before{background-image:url(../img/tip-outlined.svg)}.doc .admonitionblock .icon .icon-caution::before,.doc .admonitionblock .icon .icon-important::before,.doc .admonitionblock .icon .icon-note::before,.doc .admonitionblock .icon .icon-tip::before,.doc .admonitionblock .icon .icon-warning::before{width:22px;height:22px;background-size:22px 22px}.doc .admonitionblock.tip td.content{background:#effbfa}.doc .admonitionblock.note td.content{background:#ebf2ff}.doc .admonitionblock.important td.content{background:#fff5eb}.doc .admonitionblock.caution td.content,.doc .admonitionblock.warning td.content{background:#ffedeb}.doc .admonitionblock.tip .icon{background-color:#80dcda}.doc .admonitionblock.important .icon{background-color:#ffcd9a}.doc .admonitionblock.note .icon{background-color:#b6cfff}.doc .admonitionblock.caution .icon,.doc .admonitionblock.warning .icon{background-color:#ff7e6d}.doc .admonitionblock .icon i::after{content:attr(title);display:inline-block;vertical-align:middle;color:#363636;font-size:14px;line-height:1;font-weight:700}.doc .imageblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .image>img,.doc .image>object,.doc .image>svg,.doc .imageblock img,.doc .imageblock object,.doc .imageblock svg{display:inline-block;height:auto;max-width:100%;vertical-align:middle}.doc .image:not(.left):not(.right)>img{margin-top:-.2em}#preamble .abstract blockquote{background:#f0f0f0;border-left:5px solid #efefef;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock,.doc .verseblock{background:#f7f9fb;border-left:5px solid #5d5d5d;color:#5d5d5d}.doc .quoteblock{padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#8e8e8e;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc .verseblock{font-size:1.15em;padding:1rem 2rem}.doc .verseblock pre{font-family:inherit;font-size:inherit}.doc ol,.doc ul{margin:0;padding:0 0 0 2rem}.doc ol.none,.doc ol.unnumbered,.doc ol.unstyled,.doc ul.checklist,.doc ul.no-bullet,.doc ul.none,.doc ul.unstyled{list-style-type:none}.doc ol.unnumbered,.doc ul.no-bullet{padding-left:1.25rem}.doc ol.unstyled,.doc ul.unstyled{padding-left:0}.doc ul.circle,.doc ul.disc,.doc ul.square{list-style-type:square}.doc ol.arabic{list-style-type:decimal}.doc ol.decimal{list-style-type:decimal-leading-zero}.doc ol.loweralpha{list-style-type:lower-alpha}.doc ol.upperalpha{list-style-type:upper-alpha}.doc ol.lowerroman{list-style-type:lower-roman}.doc ol.upperroman{list-style-type:upper-roman}.doc ol.lowergreek{list-style-type:lower-greek}.doc ul.checklist{padding-left:.5rem}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem}.doc ul.checklist i.fa-check-square-o::before{content:"\2713"}.doc ul.checklist i.fa-square-o::before{content:"\274f"}.doc .dlist .dlist,.doc .dlist .olist,.doc .dlist .ulist,.doc .olist .dlist,.doc .olist .olist,.doc .olist .ulist,.doc .olist li+li,.doc .ulist .dlist,.doc .ulist .olist,.doc .ulist .ulist,.doc .ulist li+li{margin-top:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{font-weight:500;font-style:italic;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem;text-align:left}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc details{margin-left:1rem}.doc details>summary{display:block;position:relative;line-height:2;margin-bottom:.5rem}.doc details>summary::-webkit-details-marker{display:none}.doc details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.7em;left:-1rem;-webkit-transform:translateX(15%);transform:translateX(15%)}.doc details[open]>summary::before{border-color:currentColor transparent transparent;border-width:.5rem .3rem 0;-webkit-transform:translateY(15%);transform:translateY(15%)}.doc details>summary::after{content:"";width:1rem;height:1em;position:absolute;top:.5em;left:-1rem}.doc details.result{margin-top:.25rem}.doc details.result>summary{font-style:italic;margin-bottom:0}.doc details.result>.content{margin-left:-1rem}.doc .exampleblock>.content,.doc details.result>.content{background:#fff;border:.25rem solid #5d5d5d;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content::after,.doc details.result>.content::after{content:"";display:table;clear:both}.doc .exampleblock>.content>:first-child,.doc details>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#e1e1e1;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:500;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc pre.highlight{position:relative}.doc .listingblock pre:not(.highlight),.doc .literalblock pre,.doc pre.highlight code{display:block;overflow-x:auto;padding:1.5rem;border-radius:.5rem;background-color:#f6f6f6;border:1px solid #ccc}.admonitionblock .listingblock pre:not(.highlight),.admonitionblock .literalblock pre,.admonitionblock pre.highlight code{background-color:hsla(0,0%,100%,.75);border:none}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:grey;font-family:Inter,sans-serif;font-size:.75rem;line-height:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase;letter-spacing:.075em;font-size:.96em;line-height:1.0425}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:transparent;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1em;height:1em}.doc .source-toolbox .copy-icon{-webkit-box-flex:0;-ms-flex:none;flex:none;width:inherit;height:inherit;background:url(../img/octicons-16.svg)}.doc .source-toolbox img.copy-icon{-webkit-filter:invert(50.2%);filter:invert(50.2%)}.doc .source-toolbox svg.copy-icon{fill:currentColor}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#363636;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .75s;transition:opacity .5s ease .75s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#363636;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .25rem 1.5rem}.doc .dlist dd:last-of-type{margin-bottom:0}.doc td.hdlist1,.doc td.hdlist2{padding:.5rem 0 0;vertical-align:top}.doc tr:first-child>.hdlist1,.doc tr:first-child>.hdlist2{padding-top:0}.doc td.hdlist1{font-weight:500;padding-right:.25rem}.doc td.hdlist2{padding-left:.25rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Inter,sans-serif;font-size:.75rem;font-style:normal;line-height:1.2;text-align:center;width:1.25em;height:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc hr{border:solid #efefef;border-width:2px 0 0;height:0}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#f7f9fb;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #fbfbfb inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #fbfbfb;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq,.doc .path{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:500;line-height:.90909}.doc :not(pre).nowrap{white-space:nowrap}.doc .nobreak{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;word-wrap:normal}#footnotes{font-size:.85em;line-height:1.5;margin:2rem -.5rem 0}.doc td.tableblock>.content #footnotes{margin:2rem 0 0}#footnotes hr{border-top-width:1px;margin-top:0;width:20%}#footnotes .footnote{margin:.5em 0 0 1em}#footnotes .footnote+.footnote{margin-top:.25em}#footnotes .footnote>a:first-of-type{display:inline-block;margin-left:-2em;text-align:right;width:1.5em}.stemblock{overflow-x:auto;padding-block:1rem;border-radius:.5rem;background-color:#f6f6f6;border:1px solid #ccc}.MathJax_Display .MathJax{padding-inline:1rem}.doc .olist .title,.doc .ulist .title,div.title{font-style:normal;font-weight:600;line-height:2.8}nav.pagination{border-top:1px solid #efefef;line-height:1;margin:2rem -1rem -1rem;padding:2rem}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{line-height:1.5;font-size:.875rem;padding-bottom:2px}nav.pagination .prev::before{content:"Prev"}nav.pagination .next::before{content:"Next"}nav.pagination a{position:relative;font-weight:400;font-size:.875rem;line-height:1.5}nav.pagination a::after,nav.pagination a::before{color:#8e8e8e;font-weight:400;font-size:1.5em;line-height:.75;position:absolute;top:-1px;width:1rem}nav.pagination .next a::after{right:-1.5rem;mask-image:url(../img/chevron-right.svg);-webkit-mask-image:url(../img/chevron-right.svg)}nav.pagination .next a::after,nav.pagination .prev a::before{content:"";width:1em;height:1em;mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain;background-color:#5c94ff}nav.pagination .prev a::before{left:-1.5rem;mask-image:url(../img/chevron-left.svg);-webkit-mask-image:url(../img/chevron-left.svg)}nav.pagination .next a:hover::after,nav.pagination .prev a:hover::before{background-color:#4070f4}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:4.88889rem}.navbar{background:#191919;color:#363636;font-size:.88889rem;height:4.88889rem;position:fixed;top:0;width:100%;z-index:4}.navbar a{text-decoration:none}.navbar-end .navbar-link{color:#363636}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:auto;flex:auto}.navbar-brand .navbar-item:first-child{-ms-flex-item-align:center;align-self:center;padding:0;color:#363636;font-size:1.22222rem;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1}.navbar-brand .navbar-item:first-child a{color:inherit;word-wrap:normal}.navbar-brand .navbar-item:first-child :not(:last-child){padding-right:.375rem}.navbar-brand .navbar-item.search{-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}#search-input{color:#333;font-family:inherit;font-size:.95rem;width:150px;border:1px solid #dbdbdb;border-radius:.1em;line-height:1.5;padding:0 .25em}.navbar-burger{background:none;border:none;outline:none;line-height:1;position:relative;width:3rem;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-left:auto;min-width:0}.navbar-burger span{background-color:#363636;height:1.5px;width:1rem}.navbar-burger:not(.is-active) span{-webkit-transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out}.navbar-burger span+span{margin-top:.25rem}.navbar-burger.is-active span+span{margin-top:-1.5px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.navbar-item,.navbar-link{display:block;line-height:2}.navbar-item.has-dropdown{padding:0}.navbar-item .icon{width:1.25rem;height:1.25rem;display:block}.navbar-item .icon img,.navbar-item .icon svg{fill:currentColor;width:inherit;height:inherit}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#efefef;border:none;height:1px;margin:.25rem 0}.navbar .button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border:1px solid #efefef;border-radius:.15rem;height:1.75rem;color:#000;padding:0 .75em;white-space:nowrap}@media screen and (max-width:768.5px){.navbar-brand .navbar-item.search{padding-left:0;padding-right:0}}@media screen and (min-width:769px){#search-input{width:200px}}@media screen and (max-width:1023.5px){.navbar-brand{height:inherit}.navbar-brand .navbar-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-menu{background:#fff;-webkit-box-shadow:0 8px 16px rgba(10,10,10,.1);box-shadow:0 8px 16px rgba(10,10,10,.1);max-height:calc(100vh - 4.88889rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none;padding:.5rem 0}.navbar-menu:not(.is-active){display:none}.navbar-menu .navbar-link:hover,.navbar-menu a.navbar-item:hover{background:#f5f5f5}}@media screen and (min-width:1024px){.navbar-burger{display:none}.navbar,.navbar-end,.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-end{-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2rem}.navbar-item,.navbar-link{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-flex:0;-ms-flex:none;flex:none}.navbar-item:not(.has-dropdown),.navbar-link{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-end .navbar-item.has-dropdown:hover .navbar-link,.navbar-end .navbar-link:hover,.navbar-end>a.navbar-item:hover{background:#fff;color:#363636}.navbar-dropdown{background:#fff;border:1px solid #efefef;border-top:none;border-radius:0 0 .25rem .25rem;display:none;top:100%;left:0;min-width:100%;position:absolute}.navbar-dropdown .navbar-item{padding:.5rem 3rem .5rem 1rem;white-space:nowrap}.navbar-dropdown .navbar-item:last-child{border-radius:inherit}.navbar-dropdown.is-right{left:auto;right:0}.navbar-dropdown a.navbar-item:hover{background:#f5f5f5}}.header-right{margin-left:auto;gap:1.25rem}.header-right,.navbar-item-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item-flex{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem}.navbar-item-flex a{font-weight:500}.link-icon{background-image:url(../img/link-icon.svg);width:1.2rem;height:1.2rem;display:block}footer.footer{background-color:#fbfbfb;color:#858585;font-size:.83333rem;line-height:2;padding:1.5rem}.footer p{margin:0}.footer a{color:#858585} + +/*! Adapted from the GitHub style by Vasily Polovnyov */.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:500}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:500}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:500}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:500}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-strong{font-weight:500}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}.nav-container,.navbar>:not(.navbar-brand),.toolbar,aside.toc,nav.pagination{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #efefef;color:#8e8e8e;padding:.25rem .5rem 0}.footer *{color:inherit}} + +/*! @docsearch/css Button 3.0.0-alpha.50 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */.DocSearch-Button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#ebedf0;border:0;border-radius:40px;color:#969faf;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;font-weight:500;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:#fff;-webkit-box-shadow:inset 0 0 0 2px #5468ff;box-shadow:inset 0 0 0 2px #5468ff;color:#1c1e21;outline:none}.DocSearch-Button-Container{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:#1c1e21}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{min-width:calc(40px + .8em)}.DocSearch-Button-Key,.DocSearch-Button-Keys{display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Button-Key{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:linear-gradient(-225deg,#d5dbe4,#f8f8f8);border-radius:3px;-webkit-box-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);box-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);color:#969faf;height:18px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:.4em;padding-bottom:2px;position:relative;top:-1px;width:20px}@media (max-width:750px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}} + +/*! @docsearch/css Modal 3.0.0-alpha.50 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{-webkit-box-sizing:border-box;box-sizing:border-box}.DocSearch-Container{background-color:rgba(101,108,133,.8);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:#5468ff;cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:#f5f6f7;border-radius:6px;-webkit-box-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;box-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:60px auto auto;max-width:560px;position:relative}.DocSearch-SearchBar{padding:12px 12px 0}.DocSearch-Form,.DocSearch-SearchBar{display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Form{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border-radius:4px;-webkit-box-shadow:inset 0 0 0 2px #5468ff;box-shadow:inset 0 0 0 2px #5468ff;height:56px;margin:0;padding:0 12px;position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:#1c1e21;-webkit-box-flex:1;-ms-flex:1;flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::-webkit-input-placeholder{color:#969faf;opacity:1}.DocSearch-Input::-moz-placeholder{color:#969faf;opacity:1}.DocSearch-Input:-ms-input-placeholder{color:#969faf;opacity:1}.DocSearch-Input::-ms-input-placeholder{color:#969faf;opacity:1}.DocSearch-Input::placeholder{color:#969faf;opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#5468ff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#5468ff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{-webkit-animation:none;animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:1.4}}.DocSearch-Reset{-webkit-animation:fade-in .1s ease-in forwards;animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:1.4}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:focus{outline:none}.DocSearch-Reset:hover{color:#5468ff}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:488px;min-height:12px;overflow-y:auto;overflow-y:overlay;padding:0 12px;scrollbar-color:#969faf #f5f6f7;scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:#969faf;border:3px solid #f5f6f7;border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:#969faf}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Logo svg{color:#5468ff;margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:#5468ff}.DocSearch-HitsFooter{color:#969faf;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.85em;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:12px;padding:12px}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:-webkit-box;display:-ms-flexbox;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{-webkit-transition:none;transition:none}}.DocSearch-Hit--deleting{opacity:0;-webkit-transition:all .25s linear;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{-webkit-transition:none;transition:none}}.DocSearch-Hit--favoriting{-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:top center;transform-origin:top center;-webkit-transition:all .25s linear;transition:all .25s linear;-webkit-transition-delay:.25s;transition-delay:.25s}.DocSearch-Hit a{background:#fff;border-radius:4px;-webkit-box-shadow:0 1px 3px 0 #d4d9e1;box-shadow:0 1px 3px 0 #d4d9e1;display:block;padding-left:12px;width:100%}.DocSearch-Hit-source{background:#f5f6f7;color:#5468ff;font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:#969faf;height:56px;opacity:.5;stroke-width:1.4;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:#5468ff}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#444950;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;height:56px;padding:0 12px 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:#969faf;stroke-width:1.4}.DocSearch-Hit-action{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);-webkit-transition:background-color .1s ease-in;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{-webkit-transition:none;transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-weight:500;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:#969faf;font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:#fff!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);-webkit-transition:none;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:#969faf;padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:#5468ff;cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border-radius:0 0 8px 8px;-webkit-box-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12);box-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12);-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-negative:0;flex-shrink:0;height:44px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 12px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands,.DocSearch-Footer{display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Commands{color:#969faf;list-style:none;margin:0;padding:0}.DocSearch-Commands li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:linear-gradient(-225deg,#d5dbe4,#f8f8f8);border-radius:2px;-webkit-box-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);box-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);display:-webkit-box;display:-ms-flexbox;display:flex;height:18px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:.4em;padding-bottom:1px;width:20px}@media (max-width:750px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:-webkit-fill-available;height:100vh;position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;-webkit-box-shadow:none;box-shadow:none;height:-webkit-fill-available;height:100vh;margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(100vh - 112px)}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:#5468ff;cursor:pointer;display:inline-block;-webkit-box-flex:0;-ms-flex:none;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:12px;outline:none;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.tabs ul{list-style:none;padding:0}.tabs li,.tabs ul{display:-webkit-box;display:-ms-flexbox;display:flex}.tabs li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;font-weight:400;font-size:14px;line-height:1;padding:.5rem 1rem;position:relative;border-radius:18px 18px 0 0}.tabs li,.tabs ul{-ms-flex-flow:nowrap;flex-flow:nowrap}.tabs.ulist li{margin-bottom:0;color:#8a8ca2}.tabs.ulist li.is-active{background-color:rgba(64,112,244,.1);color:#4070f4}.tabs.ulist li+li{margin-top:0}.tabset.is-loading .tabs li:first-child::after,.tabs li.is-active::after{background-color:rgba(64,112,244,.1);content:"";display:block;position:absolute;left:0;right:0}.tabset>.content{border:1px solid rgba(64,112,244,.1);padding:1.25rem;border-radius:0 20px 20px 20px}.tabset.is-loading .tab-pane:not(:first-child),.tabset:not(.is-loading) .tab-pane:not(.is-active){display:none}.tab-pane>:first-child{margin-top:0}.swagger-ui .info .title small pre{background:#7d8492}.swagger-ui{color:#3b4151; + /*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */font-family:sans-serif}.swagger-ui html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure{margin:1em 40px}.swagger-ui hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}.swagger-ui pre{font-family:monospace,monospace;font-size:1em}.swagger-ui a{background-color:transparent;-webkit-text-decoration-skip:objects}.swagger-ui abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.swagger-ui b,.swagger-ui strong{font-weight:inherit;font-weight:bolder}.swagger-ui code,.swagger-ui kbd,.swagger-ui samp{font-family:monospace,monospace;font-size:1em}.swagger-ui dfn{font-style:italic}.swagger-ui mark{background-color:#ff0;color:#000}.swagger-ui small{font-size:80%}.swagger-ui sub,.swagger-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.swagger-ui sub{bottom:-.25em}.swagger-ui sup{top:-.5em}.swagger-ui audio,.swagger-ui video{display:inline-block}.swagger-ui audio:not([controls]){display:none;height:0}.swagger-ui img{border-style:none}.swagger-ui svg:not(:root){overflow:hidden}.swagger-ui button,.swagger-ui input,.swagger-ui optgroup,.swagger-ui select,.swagger-ui textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}.swagger-ui button,.swagger-ui input{overflow:visible}.swagger-ui button,.swagger-ui select{text-transform:none}.swagger-ui [type=reset],.swagger-ui [type=submit],.swagger-ui button,.swagger-ui html [type=button]{-webkit-appearance:button}.swagger-ui [type=button]::-moz-focus-inner,.swagger-ui [type=reset]::-moz-focus-inner,.swagger-ui [type=submit]::-moz-focus-inner,.swagger-ui button::-moz-focus-inner{border-style:none;padding:0}.swagger-ui [type=button]:-moz-focusring,.swagger-ui [type=reset]:-moz-focusring,.swagger-ui [type=submit]:-moz-focusring,.swagger-ui button:-moz-focusring{outline:1px dotted ButtonText}.swagger-ui fieldset{padding:.35em .75em .625em}.swagger-ui legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}.swagger-ui progress{display:inline-block;vertical-align:baseline}.swagger-ui textarea{overflow:auto}.swagger-ui [type=checkbox],.swagger-ui [type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}.swagger-ui [type=number]::-webkit-inner-spin-button,.swagger-ui [type=number]::-webkit-outer-spin-button{height:auto}.swagger-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.swagger-ui [type=search]::-webkit-search-cancel-button,.swagger-ui [type=search]::-webkit-search-decoration{-webkit-appearance:none}.swagger-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.swagger-ui details,.swagger-ui menu{display:block}.swagger-ui summary{display:list-item}.swagger-ui canvas{display:inline-block}.swagger-ui [hidden],.swagger-ui template{display:none}.swagger-ui .debug *{outline:1px solid gold}.swagger-ui .debug-white *{outline:1px solid #fff}.swagger-ui .debug-black *{outline:1px solid #000}.swagger-ui .debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat 0 0}.swagger-ui .debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat 0 0}.swagger-ui .debug-grid-8-solid{background:#fff url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat 0 0}.swagger-ui .debug-grid-16-solid{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat 0 0}.swagger-ui .border-box,.swagger-ui a,.swagger-ui article,.swagger-ui body,.swagger-ui code,.swagger-ui dd,.swagger-ui div,.swagger-ui dl,.swagger-ui dt,.swagger-ui fieldset,.swagger-ui footer,.swagger-ui form,.swagger-ui h1,.swagger-ui h2,.swagger-ui h3,.swagger-ui h4,.swagger-ui h5,.swagger-ui h6,.swagger-ui header,.swagger-ui html,.swagger-ui input[type=email],.swagger-ui input[type=number],.swagger-ui input[type=password],.swagger-ui input[type=tel],.swagger-ui input[type=text],.swagger-ui input[type=url],.swagger-ui legend,.swagger-ui li,.swagger-ui main,.swagger-ui ol,.swagger-ui p,.swagger-ui pre,.swagger-ui section,.swagger-ui table,.swagger-ui td,.swagger-ui textarea,.swagger-ui th,.swagger-ui tr,.swagger-ui ul{-webkit-box-sizing:border-box;box-sizing:border-box}.swagger-ui .aspect-ratio{height:0;position:relative}.swagger-ui .aspect-ratio--16x9{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1{padding-bottom:100%}.swagger-ui .aspect-ratio--object{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}@media screen and (min-width:30em){.swagger-ui .aspect-ratio-ns{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-ns{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-ns{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-ns{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-ns{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-ns{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-ns{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-ns{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-ns{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-ns{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-ns{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-ns{padding-bottom:100%}.swagger-ui .aspect-ratio--object-ns{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .aspect-ratio-m{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-m{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-m{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-m{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-m{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-m{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-m{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-m{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-m{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-m{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-m{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-m{padding-bottom:100%}.swagger-ui .aspect-ratio--object-m{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:60em){.swagger-ui .aspect-ratio-l{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-l{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-l{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-l{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-l{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-l{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-l{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-l{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-l{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-l{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-l{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-l{padding-bottom:100%}.swagger-ui .aspect-ratio--object-l{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}.swagger-ui img{max-width:100%}.swagger-ui .cover{background-size:cover!important}.swagger-ui .contain{background-size:contain!important}@media screen and (min-width:30em){.swagger-ui .cover-ns{background-size:cover!important}.swagger-ui .contain-ns{background-size:contain!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cover-m{background-size:cover!important}.swagger-ui .contain-m{background-size:contain!important}}@media screen and (min-width:60em){.swagger-ui .cover-l{background-size:cover!important}.swagger-ui .contain-l{background-size:contain!important}}.swagger-ui .bg-center{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left{background-position:0;background-repeat:no-repeat}@media screen and (min-width:30em){.swagger-ui .bg-center-ns{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-ns{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-ns{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-ns{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-ns{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bg-center-m{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-m{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-m{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-m{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-m{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:60em){.swagger-ui .bg-center-l{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-l{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-l{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-l{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-l{background-position:0;background-repeat:no-repeat}}.swagger-ui .outline{outline:1px solid}.swagger-ui .outline-transparent{outline:1px solid transparent}.swagger-ui .outline-0{outline:0}@media screen and (min-width:30em){.swagger-ui .outline-ns{outline:1px solid}.swagger-ui .outline-transparent-ns{outline:1px solid transparent}.swagger-ui .outline-0-ns{outline:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .outline-m{outline:1px solid}.swagger-ui .outline-transparent-m{outline:1px solid transparent}.swagger-ui .outline-0-m{outline:0}}@media screen and (min-width:60em){.swagger-ui .outline-l{outline:1px solid}.swagger-ui .outline-transparent-l{outline:1px solid transparent}.swagger-ui .outline-0-l{outline:0}}.swagger-ui .ba{border-style:solid;border-width:1px}.swagger-ui .bt{border-top-style:solid;border-top-width:1px}.swagger-ui .br{border-right-style:solid;border-right-width:1px}.swagger-ui .bb{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl{border-left-style:solid;border-left-width:1px}.swagger-ui .bn{border-style:none;border-width:0}@media screen and (min-width:30em){.swagger-ui .ba-ns{border-style:solid;border-width:1px}.swagger-ui .bt-ns{border-top-style:solid;border-top-width:1px}.swagger-ui .br-ns{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-ns{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-ns{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-ns{border-style:none;border-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ba-m{border-style:solid;border-width:1px}.swagger-ui .bt-m{border-top-style:solid;border-top-width:1px}.swagger-ui .br-m{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-m{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-m{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-m{border-style:none;border-width:0}}@media screen and (min-width:60em){.swagger-ui .ba-l{border-style:solid;border-width:1px}.swagger-ui .bt-l{border-top-style:solid;border-top-width:1px}.swagger-ui .br-l{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-l{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-l{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-l{border-style:none;border-width:0}}.swagger-ui .b--black{border-color:#000}.swagger-ui .b--near-black{border-color:#111}.swagger-ui .b--dark-gray{border-color:#333}.swagger-ui .b--mid-gray{border-color:#555}.swagger-ui .b--gray{border-color:#777}.swagger-ui .b--silver{border-color:#999}.swagger-ui .b--light-silver{border-color:#aaa}.swagger-ui .b--moon-gray{border-color:#ccc}.swagger-ui .b--light-gray{border-color:#eee}.swagger-ui .b--near-white{border-color:#f4f4f4}.swagger-ui .b--white{border-color:#fff}.swagger-ui .b--white-90{border-color:hsla(0,0%,100%,.9)}.swagger-ui .b--white-80{border-color:hsla(0,0%,100%,.8)}.swagger-ui .b--white-70{border-color:hsla(0,0%,100%,.7)}.swagger-ui .b--white-60{border-color:hsla(0,0%,100%,.6)}.swagger-ui .b--white-50{border-color:hsla(0,0%,100%,.5)}.swagger-ui .b--white-40{border-color:hsla(0,0%,100%,.4)}.swagger-ui .b--white-30{border-color:hsla(0,0%,100%,.3)}.swagger-ui .b--white-20{border-color:hsla(0,0%,100%,.2)}.swagger-ui .b--white-10{border-color:hsla(0,0%,100%,.1)}.swagger-ui .b--white-05{border-color:hsla(0,0%,100%,.05)}.swagger-ui .b--white-025{border-color:hsla(0,0%,100%,.025)}.swagger-ui .b--white-0125{border-color:hsla(0,0%,100%,.0125)}.swagger-ui .b--black-90{border-color:rgba(0,0,0,.9)}.swagger-ui .b--black-80{border-color:rgba(0,0,0,.8)}.swagger-ui .b--black-70{border-color:rgba(0,0,0,.7)}.swagger-ui .b--black-60{border-color:rgba(0,0,0,.6)}.swagger-ui .b--black-50{border-color:rgba(0,0,0,.5)}.swagger-ui .b--black-40{border-color:rgba(0,0,0,.4)}.swagger-ui .b--black-30{border-color:rgba(0,0,0,.3)}.swagger-ui .b--black-20{border-color:rgba(0,0,0,.2)}.swagger-ui .b--black-10{border-color:rgba(0,0,0,.1)}.swagger-ui .b--black-05{border-color:rgba(0,0,0,.05)}.swagger-ui .b--black-025{border-color:rgba(0,0,0,.025)}.swagger-ui .b--black-0125{border-color:rgba(0,0,0,.0125)}.swagger-ui .b--dark-red{border-color:#e7040f}.swagger-ui .b--red{border-color:#ff4136}.swagger-ui .b--light-red{border-color:#ff725c}.swagger-ui .b--orange{border-color:#ff6300}.swagger-ui .b--gold{border-color:#ffb700}.swagger-ui .b--yellow{border-color:gold}.swagger-ui .b--light-yellow{border-color:#fbf1a9}.swagger-ui .b--purple{border-color:#5e2ca5}.swagger-ui .b--light-purple{border-color:#a463f2}.swagger-ui .b--dark-pink{border-color:#d5008f}.swagger-ui .b--hot-pink{border-color:#ff41b4}.swagger-ui .b--pink{border-color:#ff80cc}.swagger-ui .b--light-pink{border-color:#ffa3d7}.swagger-ui .b--dark-green{border-color:#137752}.swagger-ui .b--green{border-color:#19a974}.swagger-ui .b--light-green{border-color:#9eebcf}.swagger-ui .b--navy{border-color:#001b44}.swagger-ui .b--dark-blue{border-color:#00449e}.swagger-ui .b--blue{border-color:#357edd}.swagger-ui .b--light-blue{border-color:#96ccff}.swagger-ui .b--lightest-blue{border-color:#cdecff}.swagger-ui .b--washed-blue{border-color:#f6fffe}.swagger-ui .b--washed-green{border-color:#e8fdf5}.swagger-ui .b--washed-yellow{border-color:#fffceb}.swagger-ui .b--washed-red{border-color:#ffdfdf}.swagger-ui .b--transparent{border-color:transparent}.swagger-ui .b--inherit{border-color:inherit}.swagger-ui .br0{border-radius:0}.swagger-ui .br1{border-radius:.125rem}.swagger-ui .br2{border-radius:.25rem}.swagger-ui .br3{border-radius:.5rem}.swagger-ui .br4{border-radius:1rem}.swagger-ui .br-100{border-radius:100%}.swagger-ui .br-pill{border-radius:9999px}.swagger-ui .br--bottom{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left{border-bottom-right-radius:0;border-top-right-radius:0}@media screen and (min-width:30em){.swagger-ui .br0-ns{border-radius:0}.swagger-ui .br1-ns{border-radius:.125rem}.swagger-ui .br2-ns{border-radius:.25rem}.swagger-ui .br3-ns{border-radius:.5rem}.swagger-ui .br4-ns{border-radius:1rem}.swagger-ui .br-100-ns{border-radius:100%}.swagger-ui .br-pill-ns{border-radius:9999px}.swagger-ui .br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-ns{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-ns{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-ns{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .br0-m{border-radius:0}.swagger-ui .br1-m{border-radius:.125rem}.swagger-ui .br2-m{border-radius:.25rem}.swagger-ui .br3-m{border-radius:.5rem}.swagger-ui .br4-m{border-radius:1rem}.swagger-ui .br-100-m{border-radius:100%}.swagger-ui .br-pill-m{border-radius:9999px}.swagger-ui .br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-m{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-m{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-m{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:60em){.swagger-ui .br0-l{border-radius:0}.swagger-ui .br1-l{border-radius:.125rem}.swagger-ui .br2-l{border-radius:.25rem}.swagger-ui .br3-l{border-radius:.5rem}.swagger-ui .br4-l{border-radius:1rem}.swagger-ui .br-100-l{border-radius:100%}.swagger-ui .br-pill-l{border-radius:9999px}.swagger-ui .br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-l{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-l{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-l{border-bottom-right-radius:0;border-top-right-radius:0}}.swagger-ui .b--dotted{border-style:dotted}.swagger-ui .b--dashed{border-style:dashed}.swagger-ui .b--solid{border-style:solid}.swagger-ui .b--none{border-style:none}@media screen and (min-width:30em){.swagger-ui .b--dotted-ns{border-style:dotted}.swagger-ui .b--dashed-ns{border-style:dashed}.swagger-ui .b--solid-ns{border-style:solid}.swagger-ui .b--none-ns{border-style:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .b--dotted-m{border-style:dotted}.swagger-ui .b--dashed-m{border-style:dashed}.swagger-ui .b--solid-m{border-style:solid}.swagger-ui .b--none-m{border-style:none}}@media screen and (min-width:60em){.swagger-ui .b--dotted-l{border-style:dotted}.swagger-ui .b--dashed-l{border-style:dashed}.swagger-ui .b--solid-l{border-style:solid}.swagger-ui .b--none-l{border-style:none}}.swagger-ui .bw0{border-width:0}.swagger-ui .bw1{border-width:.125rem}.swagger-ui .bw2{border-width:.25rem}.swagger-ui .bw3{border-width:.5rem}.swagger-ui .bw4{border-width:1rem}.swagger-ui .bw5{border-width:2rem}.swagger-ui .bt-0{border-top-width:0}.swagger-ui .br-0{border-right-width:0}.swagger-ui .bb-0{border-bottom-width:0}.swagger-ui .bl-0{border-left-width:0}@media screen and (min-width:30em){.swagger-ui .bw0-ns{border-width:0}.swagger-ui .bw1-ns{border-width:.125rem}.swagger-ui .bw2-ns{border-width:.25rem}.swagger-ui .bw3-ns{border-width:.5rem}.swagger-ui .bw4-ns{border-width:1rem}.swagger-ui .bw5-ns{border-width:2rem}.swagger-ui .bt-0-ns{border-top-width:0}.swagger-ui .br-0-ns{border-right-width:0}.swagger-ui .bb-0-ns{border-bottom-width:0}.swagger-ui .bl-0-ns{border-left-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bw0-m{border-width:0}.swagger-ui .bw1-m{border-width:.125rem}.swagger-ui .bw2-m{border-width:.25rem}.swagger-ui .bw3-m{border-width:.5rem}.swagger-ui .bw4-m{border-width:1rem}.swagger-ui .bw5-m{border-width:2rem}.swagger-ui .bt-0-m{border-top-width:0}.swagger-ui .br-0-m{border-right-width:0}.swagger-ui .bb-0-m{border-bottom-width:0}.swagger-ui .bl-0-m{border-left-width:0}}@media screen and (min-width:60em){.swagger-ui .bw0-l{border-width:0}.swagger-ui .bw1-l{border-width:.125rem}.swagger-ui .bw2-l{border-width:.25rem}.swagger-ui .bw3-l{border-width:.5rem}.swagger-ui .bw4-l{border-width:1rem}.swagger-ui .bw5-l{border-width:2rem}.swagger-ui .bt-0-l{border-top-width:0}.swagger-ui .br-0-l{border-right-width:0}.swagger-ui .bb-0-l{border-bottom-width:0}.swagger-ui .bl-0-l{border-left-width:0}}.swagger-ui .shadow-1{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}@media screen and (min-width:30em){.swagger-ui .shadow-1-ns{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-ns{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-ns{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-ns{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-ns{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .shadow-1-m{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-m{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-m{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-m{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-m{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:60em){.swagger-ui .shadow-1-l{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-l{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-l{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-l{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-l{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}.swagger-ui .pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.swagger-ui .top-0{top:0}.swagger-ui .right-0{right:0}.swagger-ui .bottom-0{bottom:0}.swagger-ui .left-0{left:0}.swagger-ui .top-1{top:1rem}.swagger-ui .right-1{right:1rem}.swagger-ui .bottom-1{bottom:1rem}.swagger-ui .left-1{left:1rem}.swagger-ui .top-2{top:2rem}.swagger-ui .right-2{right:2rem}.swagger-ui .bottom-2{bottom:2rem}.swagger-ui .left-2{left:2rem}.swagger-ui .top--1{top:-1rem}.swagger-ui .right--1{right:-1rem}.swagger-ui .bottom--1{bottom:-1rem}.swagger-ui .left--1{left:-1rem}.swagger-ui .top--2{top:-2rem}.swagger-ui .right--2{right:-2rem}.swagger-ui .bottom--2{bottom:-2rem}.swagger-ui .left--2{left:-2rem}.swagger-ui .absolute--fill{bottom:0;left:0;right:0;top:0}@media screen and (min-width:30em){.swagger-ui .top-0-ns{top:0}.swagger-ui .left-0-ns{left:0}.swagger-ui .right-0-ns{right:0}.swagger-ui .bottom-0-ns{bottom:0}.swagger-ui .top-1-ns{top:1rem}.swagger-ui .left-1-ns{left:1rem}.swagger-ui .right-1-ns{right:1rem}.swagger-ui .bottom-1-ns{bottom:1rem}.swagger-ui .top-2-ns{top:2rem}.swagger-ui .left-2-ns{left:2rem}.swagger-ui .right-2-ns{right:2rem}.swagger-ui .bottom-2-ns{bottom:2rem}.swagger-ui .top--1-ns{top:-1rem}.swagger-ui .right--1-ns{right:-1rem}.swagger-ui .bottom--1-ns{bottom:-1rem}.swagger-ui .left--1-ns{left:-1rem}.swagger-ui .top--2-ns{top:-2rem}.swagger-ui .right--2-ns{right:-2rem}.swagger-ui .bottom--2-ns{bottom:-2rem}.swagger-ui .left--2-ns{left:-2rem}.swagger-ui .absolute--fill-ns{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .top-0-m{top:0}.swagger-ui .left-0-m{left:0}.swagger-ui .right-0-m{right:0}.swagger-ui .bottom-0-m{bottom:0}.swagger-ui .top-1-m{top:1rem}.swagger-ui .left-1-m{left:1rem}.swagger-ui .right-1-m{right:1rem}.swagger-ui .bottom-1-m{bottom:1rem}.swagger-ui .top-2-m{top:2rem}.swagger-ui .left-2-m{left:2rem}.swagger-ui .right-2-m{right:2rem}.swagger-ui .bottom-2-m{bottom:2rem}.swagger-ui .top--1-m{top:-1rem}.swagger-ui .right--1-m{right:-1rem}.swagger-ui .bottom--1-m{bottom:-1rem}.swagger-ui .left--1-m{left:-1rem}.swagger-ui .top--2-m{top:-2rem}.swagger-ui .right--2-m{right:-2rem}.swagger-ui .bottom--2-m{bottom:-2rem}.swagger-ui .left--2-m{left:-2rem}.swagger-ui .absolute--fill-m{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:60em){.swagger-ui .top-0-l{top:0}.swagger-ui .left-0-l{left:0}.swagger-ui .right-0-l{right:0}.swagger-ui .bottom-0-l{bottom:0}.swagger-ui .top-1-l{top:1rem}.swagger-ui .left-1-l{left:1rem}.swagger-ui .right-1-l{right:1rem}.swagger-ui .bottom-1-l{bottom:1rem}.swagger-ui .top-2-l{top:2rem}.swagger-ui .left-2-l{left:2rem}.swagger-ui .right-2-l{right:2rem}.swagger-ui .bottom-2-l{bottom:2rem}.swagger-ui .top--1-l{top:-1rem}.swagger-ui .right--1-l{right:-1rem}.swagger-ui .bottom--1-l{bottom:-1rem}.swagger-ui .left--1-l{left:-1rem}.swagger-ui .top--2-l{top:-2rem}.swagger-ui .right--2-l{right:-2rem}.swagger-ui .bottom--2-l{bottom:-2rem}.swagger-ui .left--2-l{left:-2rem}.swagger-ui .absolute--fill-l{bottom:0;left:0;right:0;top:0}}.swagger-ui .cf::after,.swagger-ui .cf::before{content:" ";display:table}.swagger-ui .cf::after{clear:both}.swagger-ui .cf{*zoom:1}.swagger-ui .cl{clear:left}.swagger-ui .cr{clear:right}.swagger-ui .cb{clear:both}.swagger-ui .cn{clear:none}@media screen and (min-width:30em){.swagger-ui .cl-ns{clear:left}.swagger-ui .cr-ns{clear:right}.swagger-ui .cb-ns{clear:both}.swagger-ui .cn-ns{clear:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cl-m{clear:left}.swagger-ui .cr-m{clear:right}.swagger-ui .cb-m{clear:both}.swagger-ui .cn-m{clear:none}}@media screen and (min-width:60em){.swagger-ui .cl-l{clear:left}.swagger-ui .cr-l{clear:right}.swagger-ui .cb-l{clear:both}.swagger-ui .cn-l{clear:none}}.swagger-ui .flex{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.swagger-ui .flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.swagger-ui .flex-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .flex-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.swagger-ui .flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.swagger-ui .flex-nowrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.swagger-ui .flex-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.swagger-ui .items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.swagger-ui .items-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.swagger-ui .items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .items-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.swagger-ui .items-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.swagger-ui .self-start{-ms-flex-item-align:start;align-self:flex-start}.swagger-ui .self-end{-ms-flex-item-align:end;align-self:flex-end}.swagger-ui .self-center{-ms-flex-item-align:center;align-self:center}.swagger-ui .self-baseline{-ms-flex-item-align:baseline;align-self:baseline}.swagger-ui .self-stretch{-ms-flex-item-align:stretch;align-self:stretch}.swagger-ui .justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.swagger-ui .justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.swagger-ui .justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.swagger-ui .justify-around{-ms-flex-pack:distribute;justify-content:space-around}.swagger-ui .content-start{-ms-flex-line-pack:start;align-content:flex-start}.swagger-ui .content-end{-ms-flex-line-pack:end;align-content:flex-end}.swagger-ui .content-center{-ms-flex-line-pack:center;align-content:center}.swagger-ui .content-between{-ms-flex-line-pack:justify;align-content:space-between}.swagger-ui .content-around{-ms-flex-line-pack:distribute;align-content:space-around}.swagger-ui .content-stretch{-ms-flex-line-pack:stretch;align-content:stretch}.swagger-ui .order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.swagger-ui .order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.swagger-ui .order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.swagger-ui .order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.swagger-ui .order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.swagger-ui .order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.swagger-ui .order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.swagger-ui .order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.swagger-ui .order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.swagger-ui .order-last{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.swagger-ui .flex-grow-0{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.swagger-ui .flex-grow-1{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.swagger-ui .flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.swagger-ui .flex-shrink-1{-ms-flex-negative:1;flex-shrink:1}@media screen and (min-width:30em){.swagger-ui .flex-ns{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .inline-flex-ns{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.swagger-ui .flex-auto-ns{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-ns{-webkit-box-flex:0;-ms-flex:none;flex:none}.swagger-ui .flex-column-ns{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .flex-row-ns{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.swagger-ui .flex-wrap-ns{-ms-flex-wrap:wrap;flex-wrap:wrap}.swagger-ui .flex-nowrap-ns{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-ns{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-ns{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.swagger-ui .flex-row-reverse-ns{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.swagger-ui .items-start-ns{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.swagger-ui .items-end-ns{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.swagger-ui .items-center-ns{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .items-baseline-ns{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.swagger-ui .items-stretch-ns{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.swagger-ui .self-start-ns{-ms-flex-item-align:start;align-self:flex-start}.swagger-ui .self-end-ns{-ms-flex-item-align:end;align-self:flex-end}.swagger-ui .self-center-ns{-ms-flex-item-align:center;align-self:center}.swagger-ui .self-baseline-ns{-ms-flex-item-align:baseline;align-self:baseline}.swagger-ui .self-stretch-ns{-ms-flex-item-align:stretch;align-self:stretch}.swagger-ui .justify-start-ns{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.swagger-ui .justify-end-ns{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .justify-center-ns{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.swagger-ui .justify-between-ns{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.swagger-ui .justify-around-ns{-ms-flex-pack:distribute;justify-content:space-around}.swagger-ui .content-start-ns{-ms-flex-line-pack:start;align-content:flex-start}.swagger-ui .content-end-ns{-ms-flex-line-pack:end;align-content:flex-end}.swagger-ui .content-center-ns{-ms-flex-line-pack:center;align-content:center}.swagger-ui .content-between-ns{-ms-flex-line-pack:justify;align-content:space-between}.swagger-ui .content-around-ns{-ms-flex-line-pack:distribute;align-content:space-around}.swagger-ui .content-stretch-ns{-ms-flex-line-pack:stretch;align-content:stretch}.swagger-ui .order-0-ns{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.swagger-ui .order-1-ns{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.swagger-ui .order-2-ns{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.swagger-ui .order-3-ns{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.swagger-ui .order-4-ns{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.swagger-ui .order-5-ns{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.swagger-ui .order-6-ns{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.swagger-ui .order-7-ns{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.swagger-ui .order-8-ns{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.swagger-ui .order-last-ns{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.swagger-ui .flex-grow-0-ns{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.swagger-ui .flex-grow-1-ns{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.swagger-ui .flex-shrink-0-ns{-ms-flex-negative:0;flex-shrink:0}.swagger-ui .flex-shrink-1-ns{-ms-flex-negative:1;flex-shrink:1}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .flex-m{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .inline-flex-m{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.swagger-ui .flex-auto-m{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-m{-webkit-box-flex:0;-ms-flex:none;flex:none}.swagger-ui .flex-column-m{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .flex-row-m{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.swagger-ui .flex-wrap-m{-ms-flex-wrap:wrap;flex-wrap:wrap}.swagger-ui .flex-nowrap-m{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-m{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-m{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.swagger-ui .flex-row-reverse-m{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.swagger-ui .items-start-m{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.swagger-ui .items-end-m{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.swagger-ui .items-center-m{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .items-baseline-m{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.swagger-ui .items-stretch-m{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.swagger-ui .self-start-m{-ms-flex-item-align:start;align-self:flex-start}.swagger-ui .self-end-m{-ms-flex-item-align:end;align-self:flex-end}.swagger-ui .self-center-m{-ms-flex-item-align:center;align-self:center}.swagger-ui .self-baseline-m{-ms-flex-item-align:baseline;align-self:baseline}.swagger-ui .self-stretch-m{-ms-flex-item-align:stretch;align-self:stretch}.swagger-ui .justify-start-m{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.swagger-ui .justify-end-m{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .justify-center-m{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.swagger-ui .justify-between-m{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.swagger-ui .justify-around-m{-ms-flex-pack:distribute;justify-content:space-around}.swagger-ui .content-start-m{-ms-flex-line-pack:start;align-content:flex-start}.swagger-ui .content-end-m{-ms-flex-line-pack:end;align-content:flex-end}.swagger-ui .content-center-m{-ms-flex-line-pack:center;align-content:center}.swagger-ui .content-between-m{-ms-flex-line-pack:justify;align-content:space-between}.swagger-ui .content-around-m{-ms-flex-line-pack:distribute;align-content:space-around}.swagger-ui .content-stretch-m{-ms-flex-line-pack:stretch;align-content:stretch}.swagger-ui .order-0-m{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.swagger-ui .order-1-m{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.swagger-ui .order-2-m{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.swagger-ui .order-3-m{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.swagger-ui .order-4-m{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.swagger-ui .order-5-m{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.swagger-ui .order-6-m{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.swagger-ui .order-7-m{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.swagger-ui .order-8-m{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.swagger-ui .order-last-m{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.swagger-ui .flex-grow-0-m{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.swagger-ui .flex-grow-1-m{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.swagger-ui .flex-shrink-0-m{-ms-flex-negative:0;flex-shrink:0}.swagger-ui .flex-shrink-1-m{-ms-flex-negative:1;flex-shrink:1}}@media screen and (min-width:60em){.swagger-ui .flex-l{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .inline-flex-l{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.swagger-ui .flex-auto-l{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-l{-webkit-box-flex:0;-ms-flex:none;flex:none}.swagger-ui .flex-column-l{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .flex-row-l{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.swagger-ui .flex-wrap-l{-ms-flex-wrap:wrap;flex-wrap:wrap}.swagger-ui .flex-nowrap-l{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-l{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-l{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.swagger-ui .flex-row-reverse-l{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.swagger-ui .items-start-l{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.swagger-ui .items-end-l{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.swagger-ui .items-center-l{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .items-baseline-l{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.swagger-ui .items-stretch-l{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.swagger-ui .self-start-l{-ms-flex-item-align:start;align-self:flex-start}.swagger-ui .self-end-l{-ms-flex-item-align:end;align-self:flex-end}.swagger-ui .self-center-l{-ms-flex-item-align:center;align-self:center}.swagger-ui .self-baseline-l{-ms-flex-item-align:baseline;align-self:baseline}.swagger-ui .self-stretch-l{-ms-flex-item-align:stretch;align-self:stretch}.swagger-ui .justify-start-l{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.swagger-ui .justify-end-l{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .justify-center-l{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.swagger-ui .justify-between-l{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.swagger-ui .justify-around-l{-ms-flex-pack:distribute;justify-content:space-around}.swagger-ui .content-start-l{-ms-flex-line-pack:start;align-content:flex-start}.swagger-ui .content-end-l{-ms-flex-line-pack:end;align-content:flex-end}.swagger-ui .content-center-l{-ms-flex-line-pack:center;align-content:center}.swagger-ui .content-between-l{-ms-flex-line-pack:justify;align-content:space-between}.swagger-ui .content-around-l{-ms-flex-line-pack:distribute;align-content:space-around}.swagger-ui .content-stretch-l{-ms-flex-line-pack:stretch;align-content:stretch}.swagger-ui .order-0-l{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.swagger-ui .order-1-l{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.swagger-ui .order-2-l{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.swagger-ui .order-3-l{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.swagger-ui .order-4-l{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.swagger-ui .order-5-l{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.swagger-ui .order-6-l{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.swagger-ui .order-7-l{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.swagger-ui .order-8-l{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.swagger-ui .order-last-l{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.swagger-ui .flex-grow-0-l{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.swagger-ui .flex-grow-1-l{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.swagger-ui .flex-shrink-0-l{-ms-flex-negative:0;flex-shrink:0}.swagger-ui .flex-shrink-1-l{-ms-flex-negative:1;flex-shrink:1}}.swagger-ui .dn{display:none}.swagger-ui .di{display:inline}.swagger-ui .db{display:block}.swagger-ui .dib{display:inline-block}.swagger-ui .dit{display:inline-table}.swagger-ui .dt{display:table}.swagger-ui .dtc{display:table-cell}.swagger-ui .dt-row{display:table-row}.swagger-ui .dt-row-group{display:table-row-group}.swagger-ui .dt-column{display:table-column}.swagger-ui .dt-column-group{display:table-column-group}.swagger-ui .dt--fixed{table-layout:fixed;width:100%}@media screen and (min-width:30em){.swagger-ui .dn-ns{display:none}.swagger-ui .di-ns{display:inline}.swagger-ui .db-ns{display:block}.swagger-ui .dib-ns{display:inline-block}.swagger-ui .dit-ns{display:inline-table}.swagger-ui .dt-ns{display:table}.swagger-ui .dtc-ns{display:table-cell}.swagger-ui .dt-row-ns{display:table-row}.swagger-ui .dt-row-group-ns{display:table-row-group}.swagger-ui .dt-column-ns{display:table-column}.swagger-ui .dt-column-group-ns{display:table-column-group}.swagger-ui .dt--fixed-ns{table-layout:fixed;width:100%}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .dn-m{display:none}.swagger-ui .di-m{display:inline}.swagger-ui .db-m{display:block}.swagger-ui .dib-m{display:inline-block}.swagger-ui .dit-m{display:inline-table}.swagger-ui .dt-m{display:table}.swagger-ui .dtc-m{display:table-cell}.swagger-ui .dt-row-m{display:table-row}.swagger-ui .dt-row-group-m{display:table-row-group}.swagger-ui .dt-column-m{display:table-column}.swagger-ui .dt-column-group-m{display:table-column-group}.swagger-ui .dt--fixed-m{table-layout:fixed;width:100%}}@media screen and (min-width:60em){.swagger-ui .dn-l{display:none}.swagger-ui .di-l{display:inline}.swagger-ui .db-l{display:block}.swagger-ui .dib-l{display:inline-block}.swagger-ui .dit-l{display:inline-table}.swagger-ui .dt-l{display:table}.swagger-ui .dtc-l{display:table-cell}.swagger-ui .dt-row-l{display:table-row}.swagger-ui .dt-row-group-l{display:table-row-group}.swagger-ui .dt-column-l{display:table-column}.swagger-ui .dt-column-group-l{display:table-column-group}.swagger-ui .dt--fixed-l{table-layout:fixed;width:100%}}.swagger-ui .fl{_display:inline;float:left}.swagger-ui .fr{_display:inline;float:right}.swagger-ui .fn{float:none}@media screen and (min-width:30em){.swagger-ui .fl-ns{_display:inline;float:left}.swagger-ui .fr-ns{_display:inline;float:right}.swagger-ui .fn-ns{float:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .fl-m{_display:inline;float:left}.swagger-ui .fr-m{_display:inline;float:right}.swagger-ui .fn-m{float:none}}@media screen and (min-width:60em){.swagger-ui .fl-l{_display:inline;float:left}.swagger-ui .fr-l{_display:inline;float:right}.swagger-ui .fn-l{float:none}}.swagger-ui .sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.swagger-ui .serif{font-family:georgia,serif}.swagger-ui .system-sans-serif{font-family:sans-serif}.swagger-ui .system-serif{font-family:serif}.swagger-ui .code,.swagger-ui code{font-family:Consolas,monaco,monospace}.swagger-ui .courier{font-family:Courier Next,courier,monospace}.swagger-ui .helvetica{font-family:helvetica neue,helvetica,sans-serif}.swagger-ui .avenir{font-family:avenir next,avenir,sans-serif}.swagger-ui .athelas{font-family:athelas,georgia,serif}.swagger-ui .georgia{font-family:georgia,serif}.swagger-ui .times{font-family:times,serif}.swagger-ui .bodoni{font-family:Bodoni MT,serif}.swagger-ui .calisto{font-family:Calisto MT,serif}.swagger-ui .garamond{font-family:garamond,serif}.swagger-ui .baskerville{font-family:baskerville,serif}.swagger-ui .i{font-style:italic}.swagger-ui .fs-normal{font-style:normal}@media screen and (min-width:30em){.swagger-ui .i-ns{font-style:italic}.swagger-ui .fs-normal-ns{font-style:normal}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .i-m{font-style:italic}.swagger-ui .fs-normal-m{font-style:normal}}@media screen and (min-width:60em){.swagger-ui .i-l{font-style:italic}.swagger-ui .fs-normal-l{font-style:normal}}.swagger-ui .normal{font-weight:400}.swagger-ui .b{font-weight:700}.swagger-ui .fw1{font-weight:100}.swagger-ui .fw2{font-weight:200}.swagger-ui .fw3{font-weight:300}.swagger-ui .fw4{font-weight:400}.swagger-ui .fw5{font-weight:500}.swagger-ui .fw6{font-weight:600}.swagger-ui .fw7{font-weight:700}.swagger-ui .fw8{font-weight:800}.swagger-ui .fw9{font-weight:900}@media screen and (min-width:30em){.swagger-ui .normal-ns{font-weight:400}.swagger-ui .b-ns{font-weight:700}.swagger-ui .fw1-ns{font-weight:100}.swagger-ui .fw2-ns{font-weight:200}.swagger-ui .fw3-ns{font-weight:300}.swagger-ui .fw4-ns{font-weight:400}.swagger-ui .fw5-ns{font-weight:500}.swagger-ui .fw6-ns{font-weight:600}.swagger-ui .fw7-ns{font-weight:700}.swagger-ui .fw8-ns{font-weight:800}.swagger-ui .fw9-ns{font-weight:900}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .normal-m{font-weight:400}.swagger-ui .b-m{font-weight:700}.swagger-ui .fw1-m{font-weight:100}.swagger-ui .fw2-m{font-weight:200}.swagger-ui .fw3-m{font-weight:300}.swagger-ui .fw4-m{font-weight:400}.swagger-ui .fw5-m{font-weight:500}.swagger-ui .fw6-m{font-weight:600}.swagger-ui .fw7-m{font-weight:700}.swagger-ui .fw8-m{font-weight:800}.swagger-ui .fw9-m{font-weight:900}}@media screen and (min-width:60em){.swagger-ui .normal-l{font-weight:400}.swagger-ui .b-l{font-weight:700}.swagger-ui .fw1-l{font-weight:100}.swagger-ui .fw2-l{font-weight:200}.swagger-ui .fw3-l{font-weight:300}.swagger-ui .fw4-l{font-weight:400}.swagger-ui .fw5-l{font-weight:500}.swagger-ui .fw6-l{font-weight:600}.swagger-ui .fw7-l{font-weight:700}.swagger-ui .fw8-l{font-weight:800}.swagger-ui .fw9-l{font-weight:900}}.swagger-ui .input-reset{-webkit-appearance:none;-moz-appearance:none}.swagger-ui .button-reset::-moz-focus-inner,.swagger-ui .input-reset::-moz-focus-inner{border:0;padding:0}.swagger-ui .h1{height:1rem}.swagger-ui .h2{height:2rem}.swagger-ui .h3{height:4rem}.swagger-ui .h4{height:8rem}.swagger-ui .h5{height:16rem}.swagger-ui .h-25{height:25%}.swagger-ui .h-50{height:50%}.swagger-ui .h-75{height:75%}.swagger-ui .h-100{height:100%}.swagger-ui .min-h-100{min-height:100%}.swagger-ui .vh-25{height:25vh}.swagger-ui .vh-50{height:50vh}.swagger-ui .vh-75{height:75vh}.swagger-ui .vh-100{height:100vh}.swagger-ui .min-vh-100{min-height:100vh}.swagger-ui .h-auto{height:auto}.swagger-ui .h-inherit{height:inherit}@media screen and (min-width:30em){.swagger-ui .h1-ns{height:1rem}.swagger-ui .h2-ns{height:2rem}.swagger-ui .h3-ns{height:4rem}.swagger-ui .h4-ns{height:8rem}.swagger-ui .h5-ns{height:16rem}.swagger-ui .h-25-ns{height:25%}.swagger-ui .h-50-ns{height:50%}.swagger-ui .h-75-ns{height:75%}.swagger-ui .h-100-ns{height:100%}.swagger-ui .min-h-100-ns{min-height:100%}.swagger-ui .vh-25-ns{height:25vh}.swagger-ui .vh-50-ns{height:50vh}.swagger-ui .vh-75-ns{height:75vh}.swagger-ui .vh-100-ns{height:100vh}.swagger-ui .min-vh-100-ns{min-height:100vh}.swagger-ui .h-auto-ns{height:auto}.swagger-ui .h-inherit-ns{height:inherit}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .h1-m{height:1rem}.swagger-ui .h2-m{height:2rem}.swagger-ui .h3-m{height:4rem}.swagger-ui .h4-m{height:8rem}.swagger-ui .h5-m{height:16rem}.swagger-ui .h-25-m{height:25%}.swagger-ui .h-50-m{height:50%}.swagger-ui .h-75-m{height:75%}.swagger-ui .h-100-m{height:100%}.swagger-ui .min-h-100-m{min-height:100%}.swagger-ui .vh-25-m{height:25vh}.swagger-ui .vh-50-m{height:50vh}.swagger-ui .vh-75-m{height:75vh}.swagger-ui .vh-100-m{height:100vh}.swagger-ui .min-vh-100-m{min-height:100vh}.swagger-ui .h-auto-m{height:auto}.swagger-ui .h-inherit-m{height:inherit}}@media screen and (min-width:60em){.swagger-ui .h1-l{height:1rem}.swagger-ui .h2-l{height:2rem}.swagger-ui .h3-l{height:4rem}.swagger-ui .h4-l{height:8rem}.swagger-ui .h5-l{height:16rem}.swagger-ui .h-25-l{height:25%}.swagger-ui .h-50-l{height:50%}.swagger-ui .h-75-l{height:75%}.swagger-ui .h-100-l{height:100%}.swagger-ui .min-h-100-l{min-height:100%}.swagger-ui .vh-25-l{height:25vh}.swagger-ui .vh-50-l{height:50vh}.swagger-ui .vh-75-l{height:75vh}.swagger-ui .vh-100-l{height:100vh}.swagger-ui .min-vh-100-l{min-height:100vh}.swagger-ui .h-auto-l{height:auto}.swagger-ui .h-inherit-l{height:inherit}}.swagger-ui .tracked{letter-spacing:.1em}.swagger-ui .tracked-tight{letter-spacing:-.05em}.swagger-ui .tracked-mega{letter-spacing:.25em}@media screen and (min-width:30em){.swagger-ui .tracked-ns{letter-spacing:.1em}.swagger-ui .tracked-tight-ns{letter-spacing:-.05em}.swagger-ui .tracked-mega-ns{letter-spacing:.25em}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tracked-m{letter-spacing:.1em}.swagger-ui .tracked-tight-m{letter-spacing:-.05em}.swagger-ui .tracked-mega-m{letter-spacing:.25em}}@media screen and (min-width:60em){.swagger-ui .tracked-l{letter-spacing:.1em}.swagger-ui .tracked-tight-l{letter-spacing:-.05em}.swagger-ui .tracked-mega-l{letter-spacing:.25em}}.swagger-ui .lh-solid{line-height:1}.swagger-ui .lh-title{line-height:1.25}.swagger-ui .lh-copy{line-height:1.5}@media screen and (min-width:30em){.swagger-ui .lh-solid-ns{line-height:1}.swagger-ui .lh-title-ns{line-height:1.25}.swagger-ui .lh-copy-ns{line-height:1.5}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .lh-solid-m{line-height:1}.swagger-ui .lh-title-m{line-height:1.25}.swagger-ui .lh-copy-m{line-height:1.5}}@media screen and (min-width:60em){.swagger-ui .lh-solid-l{line-height:1}.swagger-ui .lh-title-l{line-height:1.25}.swagger-ui .lh-copy-l{line-height:1.5}}.swagger-ui .link{text-decoration:none}.swagger-ui .link,.swagger-ui .link:active,.swagger-ui .link:focus,.swagger-ui .link:hover,.swagger-ui .link:link,.swagger-ui .link:visited{-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.swagger-ui .link:focus{outline:1px dotted currentColor}.swagger-ui .list{list-style-type:none}.swagger-ui .mw-100{max-width:100%}.swagger-ui .mw1{max-width:1rem}.swagger-ui .mw2{max-width:2rem}.swagger-ui .mw3{max-width:4rem}.swagger-ui .mw4{max-width:8rem}.swagger-ui .mw5{max-width:16rem}.swagger-ui .mw6{max-width:32rem}.swagger-ui .mw7{max-width:48rem}.swagger-ui .mw8{max-width:64rem}.swagger-ui .mw9{max-width:96rem}.swagger-ui .mw-none{max-width:none}@media screen and (min-width:30em){.swagger-ui .mw-100-ns{max-width:100%}.swagger-ui .mw1-ns{max-width:1rem}.swagger-ui .mw2-ns{max-width:2rem}.swagger-ui .mw3-ns{max-width:4rem}.swagger-ui .mw4-ns{max-width:8rem}.swagger-ui .mw5-ns{max-width:16rem}.swagger-ui .mw6-ns{max-width:32rem}.swagger-ui .mw7-ns{max-width:48rem}.swagger-ui .mw8-ns{max-width:64rem}.swagger-ui .mw9-ns{max-width:96rem}.swagger-ui .mw-none-ns{max-width:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .mw-100-m{max-width:100%}.swagger-ui .mw1-m{max-width:1rem}.swagger-ui .mw2-m{max-width:2rem}.swagger-ui .mw3-m{max-width:4rem}.swagger-ui .mw4-m{max-width:8rem}.swagger-ui .mw5-m{max-width:16rem}.swagger-ui .mw6-m{max-width:32rem}.swagger-ui .mw7-m{max-width:48rem}.swagger-ui .mw8-m{max-width:64rem}.swagger-ui .mw9-m{max-width:96rem}.swagger-ui .mw-none-m{max-width:none}}@media screen and (min-width:60em){.swagger-ui .mw-100-l{max-width:100%}.swagger-ui .mw1-l{max-width:1rem}.swagger-ui .mw2-l{max-width:2rem}.swagger-ui .mw3-l{max-width:4rem}.swagger-ui .mw4-l{max-width:8rem}.swagger-ui .mw5-l{max-width:16rem}.swagger-ui .mw6-l{max-width:32rem}.swagger-ui .mw7-l{max-width:48rem}.swagger-ui .mw8-l{max-width:64rem}.swagger-ui .mw9-l{max-width:96rem}.swagger-ui .mw-none-l{max-width:none}}.swagger-ui .w1{width:1rem}.swagger-ui .w2{width:2rem}.swagger-ui .w3{width:4rem}.swagger-ui .w4{width:8rem}.swagger-ui .w5{width:16rem}.swagger-ui .w-10{width:10%}.swagger-ui .w-20{width:20%}.swagger-ui .w-25{width:25%}.swagger-ui .w-30{width:30%}.swagger-ui .w-33{width:33%}.swagger-ui .w-34{width:34%}.swagger-ui .w-40{width:40%}.swagger-ui .w-50{width:50%}.swagger-ui .w-60{width:60%}.swagger-ui .w-70{width:70%}.swagger-ui .w-75{width:75%}.swagger-ui .w-80{width:80%}.swagger-ui .w-90{width:90%}.swagger-ui .w-100{width:100%}.swagger-ui .w-third{width:33.33333%}.swagger-ui .w-two-thirds{width:66.66667%}.swagger-ui .w-auto{width:auto}@media screen and (min-width:30em){.swagger-ui .w1-ns{width:1rem}.swagger-ui .w2-ns{width:2rem}.swagger-ui .w3-ns{width:4rem}.swagger-ui .w4-ns{width:8rem}.swagger-ui .w5-ns{width:16rem}.swagger-ui .w-10-ns{width:10%}.swagger-ui .w-20-ns{width:20%}.swagger-ui .w-25-ns{width:25%}.swagger-ui .w-30-ns{width:30%}.swagger-ui .w-33-ns{width:33%}.swagger-ui .w-34-ns{width:34%}.swagger-ui .w-40-ns{width:40%}.swagger-ui .w-50-ns{width:50%}.swagger-ui .w-60-ns{width:60%}.swagger-ui .w-70-ns{width:70%}.swagger-ui .w-75-ns{width:75%}.swagger-ui .w-80-ns{width:80%}.swagger-ui .w-90-ns{width:90%}.swagger-ui .w-100-ns{width:100%}.swagger-ui .w-third-ns{width:33.33333%}.swagger-ui .w-two-thirds-ns{width:66.66667%}.swagger-ui .w-auto-ns{width:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .w1-m{width:1rem}.swagger-ui .w2-m{width:2rem}.swagger-ui .w3-m{width:4rem}.swagger-ui .w4-m{width:8rem}.swagger-ui .w5-m{width:16rem}.swagger-ui .w-10-m{width:10%}.swagger-ui .w-20-m{width:20%}.swagger-ui .w-25-m{width:25%}.swagger-ui .w-30-m{width:30%}.swagger-ui .w-33-m{width:33%}.swagger-ui .w-34-m{width:34%}.swagger-ui .w-40-m{width:40%}.swagger-ui .w-50-m{width:50%}.swagger-ui .w-60-m{width:60%}.swagger-ui .w-70-m{width:70%}.swagger-ui .w-75-m{width:75%}.swagger-ui .w-80-m{width:80%}.swagger-ui .w-90-m{width:90%}.swagger-ui .w-100-m{width:100%}.swagger-ui .w-third-m{width:33.33333%}.swagger-ui .w-two-thirds-m{width:66.66667%}.swagger-ui .w-auto-m{width:auto}}@media screen and (min-width:60em){.swagger-ui .w1-l{width:1rem}.swagger-ui .w2-l{width:2rem}.swagger-ui .w3-l{width:4rem}.swagger-ui .w4-l{width:8rem}.swagger-ui .w5-l{width:16rem}.swagger-ui .w-10-l{width:10%}.swagger-ui .w-20-l{width:20%}.swagger-ui .w-25-l{width:25%}.swagger-ui .w-30-l{width:30%}.swagger-ui .w-33-l{width:33%}.swagger-ui .w-34-l{width:34%}.swagger-ui .w-40-l{width:40%}.swagger-ui .w-50-l{width:50%}.swagger-ui .w-60-l{width:60%}.swagger-ui .w-70-l{width:70%}.swagger-ui .w-75-l{width:75%}.swagger-ui .w-80-l{width:80%}.swagger-ui .w-90-l{width:90%}.swagger-ui .w-100-l{width:100%}.swagger-ui .w-third-l{width:33.33333%}.swagger-ui .w-two-thirds-l{width:66.66667%}.swagger-ui .w-auto-l{width:auto}}.swagger-ui .overflow-visible{overflow:visible}.swagger-ui .overflow-hidden{overflow:hidden}.swagger-ui .overflow-scroll{overflow:scroll}.swagger-ui .overflow-auto{overflow:auto}.swagger-ui .overflow-x-visible{overflow-x:visible}.swagger-ui .overflow-x-hidden{overflow-x:hidden}.swagger-ui .overflow-x-scroll{overflow-x:scroll}.swagger-ui .overflow-x-auto{overflow-x:auto}.swagger-ui .overflow-y-visible{overflow-y:visible}.swagger-ui .overflow-y-hidden{overflow-y:hidden}.swagger-ui .overflow-y-scroll{overflow-y:scroll}.swagger-ui .overflow-y-auto{overflow-y:auto}@media screen and (min-width:30em){.swagger-ui .overflow-visible-ns{overflow:visible}.swagger-ui .overflow-hidden-ns{overflow:hidden}.swagger-ui .overflow-scroll-ns{overflow:scroll}.swagger-ui .overflow-auto-ns{overflow:auto}.swagger-ui .overflow-x-visible-ns{overflow-x:visible}.swagger-ui .overflow-x-hidden-ns{overflow-x:hidden}.swagger-ui .overflow-x-scroll-ns{overflow-x:scroll}.swagger-ui .overflow-x-auto-ns{overflow-x:auto}.swagger-ui .overflow-y-visible-ns{overflow-y:visible}.swagger-ui .overflow-y-hidden-ns{overflow-y:hidden}.swagger-ui .overflow-y-scroll-ns{overflow-y:scroll}.swagger-ui .overflow-y-auto-ns{overflow-y:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .overflow-visible-m{overflow:visible}.swagger-ui .overflow-hidden-m{overflow:hidden}.swagger-ui .overflow-scroll-m{overflow:scroll}.swagger-ui .overflow-auto-m{overflow:auto}.swagger-ui .overflow-x-visible-m{overflow-x:visible}.swagger-ui .overflow-x-hidden-m{overflow-x:hidden}.swagger-ui .overflow-x-scroll-m{overflow-x:scroll}.swagger-ui .overflow-x-auto-m{overflow-x:auto}.swagger-ui .overflow-y-visible-m{overflow-y:visible}.swagger-ui .overflow-y-hidden-m{overflow-y:hidden}.swagger-ui .overflow-y-scroll-m{overflow-y:scroll}.swagger-ui .overflow-y-auto-m{overflow-y:auto}}@media screen and (min-width:60em){.swagger-ui .overflow-visible-l{overflow:visible}.swagger-ui .overflow-hidden-l{overflow:hidden}.swagger-ui .overflow-scroll-l{overflow:scroll}.swagger-ui .overflow-auto-l{overflow:auto}.swagger-ui .overflow-x-visible-l{overflow-x:visible}.swagger-ui .overflow-x-hidden-l{overflow-x:hidden}.swagger-ui .overflow-x-scroll-l{overflow-x:scroll}.swagger-ui .overflow-x-auto-l{overflow-x:auto}.swagger-ui .overflow-y-visible-l{overflow-y:visible}.swagger-ui .overflow-y-hidden-l{overflow-y:hidden}.swagger-ui .overflow-y-scroll-l{overflow-y:scroll}.swagger-ui .overflow-y-auto-l{overflow-y:auto}}.swagger-ui .static{position:static}.swagger-ui .relative{position:relative}.swagger-ui .absolute{position:absolute}.swagger-ui .fixed{position:fixed}@media screen and (min-width:30em){.swagger-ui .static-ns{position:static}.swagger-ui .relative-ns{position:relative}.swagger-ui .absolute-ns{position:absolute}.swagger-ui .fixed-ns{position:fixed}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .static-m{position:static}.swagger-ui .relative-m{position:relative}.swagger-ui .absolute-m{position:absolute}.swagger-ui .fixed-m{position:fixed}}@media screen and (min-width:60em){.swagger-ui .static-l{position:static}.swagger-ui .relative-l{position:relative}.swagger-ui .absolute-l{position:absolute}.swagger-ui .fixed-l{position:fixed}}.swagger-ui .o-100{opacity:1}.swagger-ui .o-90{opacity:.9}.swagger-ui .o-80{opacity:.8}.swagger-ui .o-70{opacity:.7}.swagger-ui .o-60{opacity:.6}.swagger-ui .o-50{opacity:.5}.swagger-ui .o-40{opacity:.4}.swagger-ui .o-30{opacity:.3}.swagger-ui .o-20{opacity:.2}.swagger-ui .o-10{opacity:.1}.swagger-ui .o-05{opacity:.05}.swagger-ui .o-025{opacity:.025}.swagger-ui .o-0{opacity:0}.swagger-ui .rotate-45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swagger-ui .rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.swagger-ui .rotate-135{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.swagger-ui .rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.swagger-ui .rotate-225{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.swagger-ui .rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.swagger-ui .rotate-315{-webkit-transform:rotate(315deg);transform:rotate(315deg)}@media screen and (min-width:30em){.swagger-ui .rotate-45-ns{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swagger-ui .rotate-90-ns{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.swagger-ui .rotate-135-ns{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.swagger-ui .rotate-180-ns{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.swagger-ui .rotate-225-ns{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.swagger-ui .rotate-270-ns{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.swagger-ui .rotate-315-ns{-webkit-transform:rotate(315deg);transform:rotate(315deg)}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .rotate-45-m{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swagger-ui .rotate-90-m{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.swagger-ui .rotate-135-m{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.swagger-ui .rotate-180-m{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.swagger-ui .rotate-225-m{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.swagger-ui .rotate-270-m{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.swagger-ui .rotate-315-m{-webkit-transform:rotate(315deg);transform:rotate(315deg)}}@media screen and (min-width:60em){.swagger-ui .rotate-45-l{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swagger-ui .rotate-90-l{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.swagger-ui .rotate-135-l{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.swagger-ui .rotate-180-l{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.swagger-ui .rotate-225-l{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.swagger-ui .rotate-270-l{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.swagger-ui .rotate-315-l{-webkit-transform:rotate(315deg);transform:rotate(315deg)}}.swagger-ui .black-90{color:rgba(0,0,0,.9)}.swagger-ui .black-80{color:rgba(0,0,0,.8)}.swagger-ui .black-70{color:rgba(0,0,0,.7)}.swagger-ui .black-60{color:rgba(0,0,0,.6)}.swagger-ui .black-50{color:rgba(0,0,0,.5)}.swagger-ui .black-40{color:rgba(0,0,0,.4)}.swagger-ui .black-30{color:rgba(0,0,0,.3)}.swagger-ui .black-20{color:rgba(0,0,0,.2)}.swagger-ui .black-10{color:rgba(0,0,0,.1)}.swagger-ui .black-05{color:rgba(0,0,0,.05)}.swagger-ui .white-90{color:hsla(0,0%,100%,.9)}.swagger-ui .white-80{color:hsla(0,0%,100%,.8)}.swagger-ui .white-70{color:hsla(0,0%,100%,.7)}.swagger-ui .white-60{color:hsla(0,0%,100%,.6)}.swagger-ui .white-50{color:hsla(0,0%,100%,.5)}.swagger-ui .white-40{color:hsla(0,0%,100%,.4)}.swagger-ui .white-30{color:hsla(0,0%,100%,.3)}.swagger-ui .white-20{color:hsla(0,0%,100%,.2)}.swagger-ui .white-10{color:hsla(0,0%,100%,.1)}.swagger-ui .black{color:#000}.swagger-ui .near-black{color:#111}.swagger-ui .dark-gray{color:#333}.swagger-ui .mid-gray{color:#555}.swagger-ui .gray{color:#777}.swagger-ui .silver{color:#999}.swagger-ui .light-silver{color:#aaa}.swagger-ui .moon-gray{color:#ccc}.swagger-ui .light-gray{color:#eee}.swagger-ui .near-white{color:#f4f4f4}.swagger-ui .white{color:#fff}.swagger-ui .dark-red{color:#e7040f}.swagger-ui .red{color:#ff4136}.swagger-ui .light-red{color:#ff725c}.swagger-ui .orange{color:#ff6300}.swagger-ui .gold{color:#ffb700}.swagger-ui .yellow{color:gold}.swagger-ui .light-yellow{color:#fbf1a9}.swagger-ui .purple{color:#5e2ca5}.swagger-ui .light-purple{color:#a463f2}.swagger-ui .dark-pink{color:#d5008f}.swagger-ui .hot-pink{color:#ff41b4}.swagger-ui .pink{color:#ff80cc}.swagger-ui .light-pink{color:#ffa3d7}.swagger-ui .dark-green{color:#137752}.swagger-ui .green{color:#19a974}.swagger-ui .light-green{color:#9eebcf}.swagger-ui .navy{color:#001b44}.swagger-ui .dark-blue{color:#00449e}.swagger-ui .blue{color:#357edd}.swagger-ui .light-blue{color:#96ccff}.swagger-ui .lightest-blue{color:#cdecff}.swagger-ui .washed-blue{color:#f6fffe}.swagger-ui .washed-green{color:#e8fdf5}.swagger-ui .washed-yellow{color:#fffceb}.swagger-ui .washed-red{color:#ffdfdf}.swagger-ui .color-inherit{color:inherit}.swagger-ui .bg-black-90{background-color:rgba(0,0,0,.9)}.swagger-ui .bg-black-80{background-color:rgba(0,0,0,.8)}.swagger-ui .bg-black-70{background-color:rgba(0,0,0,.7)}.swagger-ui .bg-black-60{background-color:rgba(0,0,0,.6)}.swagger-ui .bg-black-50{background-color:rgba(0,0,0,.5)}.swagger-ui .bg-black-40{background-color:rgba(0,0,0,.4)}.swagger-ui .bg-black-30{background-color:rgba(0,0,0,.3)}.swagger-ui .bg-black-20{background-color:rgba(0,0,0,.2)}.swagger-ui .bg-black-10{background-color:rgba(0,0,0,.1)}.swagger-ui .bg-black-05{background-color:rgba(0,0,0,.05)}.swagger-ui .bg-white-90{background-color:hsla(0,0%,100%,.9)}.swagger-ui .bg-white-80{background-color:hsla(0,0%,100%,.8)}.swagger-ui .bg-white-70{background-color:hsla(0,0%,100%,.7)}.swagger-ui .bg-white-60{background-color:hsla(0,0%,100%,.6)}.swagger-ui .bg-white-50{background-color:hsla(0,0%,100%,.5)}.swagger-ui .bg-white-40{background-color:hsla(0,0%,100%,.4)}.swagger-ui .bg-white-30{background-color:hsla(0,0%,100%,.3)}.swagger-ui .bg-white-20{background-color:hsla(0,0%,100%,.2)}.swagger-ui .bg-white-10{background-color:hsla(0,0%,100%,.1)}.swagger-ui .bg-black{background-color:#000}.swagger-ui .bg-near-black{background-color:#111}.swagger-ui .bg-dark-gray{background-color:#333}.swagger-ui .bg-mid-gray{background-color:#555}.swagger-ui .bg-gray{background-color:#777}.swagger-ui .bg-silver{background-color:#999}.swagger-ui .bg-light-silver{background-color:#aaa}.swagger-ui .bg-moon-gray{background-color:#ccc}.swagger-ui .bg-light-gray{background-color:#eee}.swagger-ui .bg-near-white{background-color:#f4f4f4}.swagger-ui .bg-white{background-color:#fff}.swagger-ui .bg-transparent{background-color:transparent}.swagger-ui .bg-dark-red{background-color:#e7040f}.swagger-ui .bg-red{background-color:#ff4136}.swagger-ui .bg-light-red{background-color:#ff725c}.swagger-ui .bg-orange{background-color:#ff6300}.swagger-ui .bg-gold{background-color:#ffb700}.swagger-ui .bg-yellow{background-color:gold}.swagger-ui .bg-light-yellow{background-color:#fbf1a9}.swagger-ui .bg-purple{background-color:#5e2ca5}.swagger-ui .bg-light-purple{background-color:#a463f2}.swagger-ui .bg-dark-pink{background-color:#d5008f}.swagger-ui .bg-hot-pink{background-color:#ff41b4}.swagger-ui .bg-pink{background-color:#ff80cc}.swagger-ui .bg-light-pink{background-color:#ffa3d7}.swagger-ui .bg-dark-green{background-color:#137752}.swagger-ui .bg-green{background-color:#19a974}.swagger-ui .bg-light-green{background-color:#9eebcf}.swagger-ui .bg-navy{background-color:#001b44}.swagger-ui .bg-dark-blue{background-color:#00449e}.swagger-ui .bg-blue{background-color:#357edd}.swagger-ui .bg-light-blue{background-color:#96ccff}.swagger-ui .bg-lightest-blue{background-color:#cdecff}.swagger-ui .bg-washed-blue{background-color:#f6fffe}.swagger-ui .bg-washed-green{background-color:#e8fdf5}.swagger-ui .bg-washed-yellow{background-color:#fffceb}.swagger-ui .bg-washed-red{background-color:#ffdfdf}.swagger-ui .bg-inherit{background-color:inherit}.swagger-ui .hover-black:focus,.swagger-ui .hover-black:hover{color:#000}.swagger-ui .hover-near-black:focus,.swagger-ui .hover-near-black:hover{color:#111}.swagger-ui .hover-dark-gray:focus,.swagger-ui .hover-dark-gray:hover{color:#333}.swagger-ui .hover-mid-gray:focus,.swagger-ui .hover-mid-gray:hover{color:#555}.swagger-ui .hover-gray:focus,.swagger-ui .hover-gray:hover{color:#777}.swagger-ui .hover-silver:focus,.swagger-ui .hover-silver:hover{color:#999}.swagger-ui .hover-light-silver:focus,.swagger-ui .hover-light-silver:hover{color:#aaa}.swagger-ui .hover-moon-gray:focus,.swagger-ui .hover-moon-gray:hover{color:#ccc}.swagger-ui .hover-light-gray:focus,.swagger-ui .hover-light-gray:hover{color:#eee}.swagger-ui .hover-near-white:focus,.swagger-ui .hover-near-white:hover{color:#f4f4f4}.swagger-ui .hover-white:focus,.swagger-ui .hover-white:hover{color:#fff}.swagger-ui .hover-black-90:focus,.swagger-ui .hover-black-90:hover{color:rgba(0,0,0,.9)}.swagger-ui .hover-black-80:focus,.swagger-ui .hover-black-80:hover{color:rgba(0,0,0,.8)}.swagger-ui .hover-black-70:focus,.swagger-ui .hover-black-70:hover{color:rgba(0,0,0,.7)}.swagger-ui .hover-black-60:focus,.swagger-ui .hover-black-60:hover{color:rgba(0,0,0,.6)}.swagger-ui .hover-black-50:focus,.swagger-ui .hover-black-50:hover{color:rgba(0,0,0,.5)}.swagger-ui .hover-black-40:focus,.swagger-ui .hover-black-40:hover{color:rgba(0,0,0,.4)}.swagger-ui .hover-black-30:focus,.swagger-ui .hover-black-30:hover{color:rgba(0,0,0,.3)}.swagger-ui .hover-black-20:focus,.swagger-ui .hover-black-20:hover{color:rgba(0,0,0,.2)}.swagger-ui .hover-black-10:focus,.swagger-ui .hover-black-10:hover{color:rgba(0,0,0,.1)}.swagger-ui .hover-white-90:focus,.swagger-ui .hover-white-90:hover{color:hsla(0,0%,100%,.9)}.swagger-ui .hover-white-80:focus,.swagger-ui .hover-white-80:hover{color:hsla(0,0%,100%,.8)}.swagger-ui .hover-white-70:focus,.swagger-ui .hover-white-70:hover{color:hsla(0,0%,100%,.7)}.swagger-ui .hover-white-60:focus,.swagger-ui .hover-white-60:hover{color:hsla(0,0%,100%,.6)}.swagger-ui .hover-white-50:focus,.swagger-ui .hover-white-50:hover{color:hsla(0,0%,100%,.5)}.swagger-ui .hover-white-40:focus,.swagger-ui .hover-white-40:hover{color:hsla(0,0%,100%,.4)}.swagger-ui .hover-white-30:focus,.swagger-ui .hover-white-30:hover{color:hsla(0,0%,100%,.3)}.swagger-ui .hover-white-20:focus,.swagger-ui .hover-white-20:hover{color:hsla(0,0%,100%,.2)}.swagger-ui .hover-white-10:focus,.swagger-ui .hover-white-10:hover{color:hsla(0,0%,100%,.1)}.swagger-ui .hover-inherit:focus,.swagger-ui .hover-inherit:hover{color:inherit}.swagger-ui .hover-bg-black:focus,.swagger-ui .hover-bg-black:hover{background-color:#000}.swagger-ui .hover-bg-near-black:focus,.swagger-ui .hover-bg-near-black:hover{background-color:#111}.swagger-ui .hover-bg-dark-gray:focus,.swagger-ui .hover-bg-dark-gray:hover{background-color:#333}.swagger-ui .hover-bg-mid-gray:focus,.swagger-ui .hover-bg-mid-gray:hover{background-color:#555}.swagger-ui .hover-bg-gray:focus,.swagger-ui .hover-bg-gray:hover{background-color:#777}.swagger-ui .hover-bg-silver:focus,.swagger-ui .hover-bg-silver:hover{background-color:#999}.swagger-ui .hover-bg-light-silver:focus,.swagger-ui .hover-bg-light-silver:hover{background-color:#aaa}.swagger-ui .hover-bg-moon-gray:focus,.swagger-ui .hover-bg-moon-gray:hover{background-color:#ccc}.swagger-ui .hover-bg-light-gray:focus,.swagger-ui .hover-bg-light-gray:hover{background-color:#eee}.swagger-ui .hover-bg-near-white:focus,.swagger-ui .hover-bg-near-white:hover{background-color:#f4f4f4}.swagger-ui .hover-bg-white:focus,.swagger-ui .hover-bg-white:hover{background-color:#fff}.swagger-ui .hover-bg-transparent:focus,.swagger-ui .hover-bg-transparent:hover{background-color:transparent}.swagger-ui .hover-bg-black-90:focus,.swagger-ui .hover-bg-black-90:hover{background-color:rgba(0,0,0,.9)}.swagger-ui .hover-bg-black-80:focus,.swagger-ui .hover-bg-black-80:hover{background-color:rgba(0,0,0,.8)}.swagger-ui .hover-bg-black-70:focus,.swagger-ui .hover-bg-black-70:hover{background-color:rgba(0,0,0,.7)}.swagger-ui .hover-bg-black-60:focus,.swagger-ui .hover-bg-black-60:hover{background-color:rgba(0,0,0,.6)}.swagger-ui .hover-bg-black-50:focus,.swagger-ui .hover-bg-black-50:hover{background-color:rgba(0,0,0,.5)}.swagger-ui .hover-bg-black-40:focus,.swagger-ui .hover-bg-black-40:hover{background-color:rgba(0,0,0,.4)}.swagger-ui .hover-bg-black-30:focus,.swagger-ui .hover-bg-black-30:hover{background-color:rgba(0,0,0,.3)}.swagger-ui .hover-bg-black-20:focus,.swagger-ui .hover-bg-black-20:hover{background-color:rgba(0,0,0,.2)}.swagger-ui .hover-bg-black-10:focus,.swagger-ui .hover-bg-black-10:hover{background-color:rgba(0,0,0,.1)}.swagger-ui .hover-bg-white-90:focus,.swagger-ui .hover-bg-white-90:hover{background-color:hsla(0,0%,100%,.9)}.swagger-ui .hover-bg-white-80:focus,.swagger-ui .hover-bg-white-80:hover{background-color:hsla(0,0%,100%,.8)}.swagger-ui .hover-bg-white-70:focus,.swagger-ui .hover-bg-white-70:hover{background-color:hsla(0,0%,100%,.7)}.swagger-ui .hover-bg-white-60:focus,.swagger-ui .hover-bg-white-60:hover{background-color:hsla(0,0%,100%,.6)}.swagger-ui .hover-bg-white-50:focus,.swagger-ui .hover-bg-white-50:hover{background-color:hsla(0,0%,100%,.5)}.swagger-ui .hover-bg-white-40:focus,.swagger-ui .hover-bg-white-40:hover{background-color:hsla(0,0%,100%,.4)}.swagger-ui .hover-bg-white-30:focus,.swagger-ui .hover-bg-white-30:hover{background-color:hsla(0,0%,100%,.3)}.swagger-ui .hover-bg-white-20:focus,.swagger-ui .hover-bg-white-20:hover{background-color:hsla(0,0%,100%,.2)}.swagger-ui .hover-bg-white-10:focus,.swagger-ui .hover-bg-white-10:hover{background-color:hsla(0,0%,100%,.1)}.swagger-ui .hover-dark-red:focus,.swagger-ui .hover-dark-red:hover{color:#e7040f}.swagger-ui .hover-red:focus,.swagger-ui .hover-red:hover{color:#ff4136}.swagger-ui .hover-light-red:focus,.swagger-ui .hover-light-red:hover{color:#ff725c}.swagger-ui .hover-orange:focus,.swagger-ui .hover-orange:hover{color:#ff6300}.swagger-ui .hover-gold:focus,.swagger-ui .hover-gold:hover{color:#ffb700}.swagger-ui .hover-yellow:focus,.swagger-ui .hover-yellow:hover{color:gold}.swagger-ui .hover-light-yellow:focus,.swagger-ui .hover-light-yellow:hover{color:#fbf1a9}.swagger-ui .hover-purple:focus,.swagger-ui .hover-purple:hover{color:#5e2ca5}.swagger-ui .hover-light-purple:focus,.swagger-ui .hover-light-purple:hover{color:#a463f2}.swagger-ui .hover-dark-pink:focus,.swagger-ui .hover-dark-pink:hover{color:#d5008f}.swagger-ui .hover-hot-pink:focus,.swagger-ui .hover-hot-pink:hover{color:#ff41b4}.swagger-ui .hover-pink:focus,.swagger-ui .hover-pink:hover{color:#ff80cc}.swagger-ui .hover-light-pink:focus,.swagger-ui .hover-light-pink:hover{color:#ffa3d7}.swagger-ui .hover-dark-green:focus,.swagger-ui .hover-dark-green:hover{color:#137752}.swagger-ui .hover-green:focus,.swagger-ui .hover-green:hover{color:#19a974}.swagger-ui .hover-light-green:focus,.swagger-ui .hover-light-green:hover{color:#9eebcf}.swagger-ui .hover-navy:focus,.swagger-ui .hover-navy:hover{color:#001b44}.swagger-ui .hover-dark-blue:focus,.swagger-ui .hover-dark-blue:hover{color:#00449e}.swagger-ui .hover-blue:focus,.swagger-ui .hover-blue:hover{color:#357edd}.swagger-ui .hover-light-blue:focus,.swagger-ui .hover-light-blue:hover{color:#96ccff}.swagger-ui .hover-lightest-blue:focus,.swagger-ui .hover-lightest-blue:hover{color:#cdecff}.swagger-ui .hover-washed-blue:focus,.swagger-ui .hover-washed-blue:hover{color:#f6fffe}.swagger-ui .hover-washed-green:focus,.swagger-ui .hover-washed-green:hover{color:#e8fdf5}.swagger-ui .hover-washed-yellow:focus,.swagger-ui .hover-washed-yellow:hover{color:#fffceb}.swagger-ui .hover-washed-red:focus,.swagger-ui .hover-washed-red:hover{color:#ffdfdf}.swagger-ui .hover-bg-dark-red:focus,.swagger-ui .hover-bg-dark-red:hover{background-color:#e7040f}.swagger-ui .hover-bg-red:focus,.swagger-ui .hover-bg-red:hover{background-color:#ff4136}.swagger-ui .hover-bg-light-red:focus,.swagger-ui .hover-bg-light-red:hover{background-color:#ff725c}.swagger-ui .hover-bg-orange:focus,.swagger-ui .hover-bg-orange:hover{background-color:#ff6300}.swagger-ui .hover-bg-gold:focus,.swagger-ui .hover-bg-gold:hover{background-color:#ffb700}.swagger-ui .hover-bg-yellow:focus,.swagger-ui .hover-bg-yellow:hover{background-color:gold}.swagger-ui .hover-bg-light-yellow:focus,.swagger-ui .hover-bg-light-yellow:hover{background-color:#fbf1a9}.swagger-ui .hover-bg-purple:focus,.swagger-ui .hover-bg-purple:hover{background-color:#5e2ca5}.swagger-ui .hover-bg-light-purple:focus,.swagger-ui .hover-bg-light-purple:hover{background-color:#a463f2}.swagger-ui .hover-bg-dark-pink:focus,.swagger-ui .hover-bg-dark-pink:hover{background-color:#d5008f}.swagger-ui .hover-bg-hot-pink:focus,.swagger-ui .hover-bg-hot-pink:hover{background-color:#ff41b4}.swagger-ui .hover-bg-pink:focus,.swagger-ui .hover-bg-pink:hover{background-color:#ff80cc}.swagger-ui .hover-bg-light-pink:focus,.swagger-ui .hover-bg-light-pink:hover{background-color:#ffa3d7}.swagger-ui .hover-bg-dark-green:focus,.swagger-ui .hover-bg-dark-green:hover{background-color:#137752}.swagger-ui .hover-bg-green:focus,.swagger-ui .hover-bg-green:hover{background-color:#19a974}.swagger-ui .hover-bg-light-green:focus,.swagger-ui .hover-bg-light-green:hover{background-color:#9eebcf}.swagger-ui .hover-bg-navy:focus,.swagger-ui .hover-bg-navy:hover{background-color:#001b44}.swagger-ui .hover-bg-dark-blue:focus,.swagger-ui .hover-bg-dark-blue:hover{background-color:#00449e}.swagger-ui .hover-bg-blue:focus,.swagger-ui .hover-bg-blue:hover{background-color:#357edd}.swagger-ui .hover-bg-light-blue:focus,.swagger-ui .hover-bg-light-blue:hover{background-color:#96ccff}.swagger-ui .hover-bg-lightest-blue:focus,.swagger-ui .hover-bg-lightest-blue:hover{background-color:#cdecff}.swagger-ui .hover-bg-washed-blue:focus,.swagger-ui .hover-bg-washed-blue:hover{background-color:#f6fffe}.swagger-ui .hover-bg-washed-green:focus,.swagger-ui .hover-bg-washed-green:hover{background-color:#e8fdf5}.swagger-ui .hover-bg-washed-yellow:focus,.swagger-ui .hover-bg-washed-yellow:hover{background-color:#fffceb}.swagger-ui .hover-bg-washed-red:focus,.swagger-ui .hover-bg-washed-red:hover{background-color:#ffdfdf}.swagger-ui .hover-bg-inherit:focus,.swagger-ui .hover-bg-inherit:hover{background-color:inherit}.swagger-ui .pa0{padding:0}.swagger-ui .pa1{padding:.25rem}.swagger-ui .pa2{padding:.5rem}.swagger-ui .pa3{padding:1rem}.swagger-ui .pa4{padding:2rem}.swagger-ui .pa5{padding:4rem}.swagger-ui .pa6{padding:8rem}.swagger-ui .pa7{padding:16rem}.swagger-ui .pl0{padding-left:0}.swagger-ui .pl1{padding-left:.25rem}.swagger-ui .pl2{padding-left:.5rem}.swagger-ui .pl3{padding-left:1rem}.swagger-ui .pl4{padding-left:2rem}.swagger-ui .pl5{padding-left:4rem}.swagger-ui .pl6{padding-left:8rem}.swagger-ui .pl7{padding-left:16rem}.swagger-ui .pr0{padding-right:0}.swagger-ui .pr1{padding-right:.25rem}.swagger-ui .pr2{padding-right:.5rem}.swagger-ui .pr3{padding-right:1rem}.swagger-ui .pr4{padding-right:2rem}.swagger-ui .pr5{padding-right:4rem}.swagger-ui .pr6{padding-right:8rem}.swagger-ui .pr7{padding-right:16rem}.swagger-ui .pb0{padding-bottom:0}.swagger-ui .pb1{padding-bottom:.25rem}.swagger-ui .pb2{padding-bottom:.5rem}.swagger-ui .pb3{padding-bottom:1rem}.swagger-ui .pb4{padding-bottom:2rem}.swagger-ui .pb5{padding-bottom:4rem}.swagger-ui .pb6{padding-bottom:8rem}.swagger-ui .pb7{padding-bottom:16rem}.swagger-ui .pt0{padding-top:0}.swagger-ui .pt1{padding-top:.25rem}.swagger-ui .pt2{padding-top:.5rem}.swagger-ui .pt3{padding-top:1rem}.swagger-ui .pt4{padding-top:2rem}.swagger-ui .pt5{padding-top:4rem}.swagger-ui .pt6{padding-top:8rem}.swagger-ui .pt7{padding-top:16rem}.swagger-ui .pv0{padding-bottom:0;padding-top:0}.swagger-ui .pv1{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0{padding-left:0;padding-right:0}.swagger-ui .ph1{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0{margin:0}.swagger-ui .ma1{margin:.25rem}.swagger-ui .ma2{margin:.5rem}.swagger-ui .ma3{margin:1rem}.swagger-ui .ma4{margin:2rem}.swagger-ui .ma5{margin:4rem}.swagger-ui .ma6{margin:8rem}.swagger-ui .ma7{margin:16rem}.swagger-ui .ml0{margin-left:0}.swagger-ui .ml1{margin-left:.25rem}.swagger-ui .ml2{margin-left:.5rem}.swagger-ui .ml3{margin-left:1rem}.swagger-ui .ml4{margin-left:2rem}.swagger-ui .ml5{margin-left:4rem}.swagger-ui .ml6{margin-left:8rem}.swagger-ui .ml7{margin-left:16rem}.swagger-ui .mr0{margin-right:0}.swagger-ui .mr1{margin-right:.25rem}.swagger-ui .mr2{margin-right:.5rem}.swagger-ui .mr3{margin-right:1rem}.swagger-ui .mr4{margin-right:2rem}.swagger-ui .mr5{margin-right:4rem}.swagger-ui .mr6{margin-right:8rem}.swagger-ui .mr7{margin-right:16rem}.swagger-ui .mb0{margin-bottom:0}.swagger-ui .mb1{margin-bottom:.25rem}.swagger-ui .mb2{margin-bottom:.5rem}.swagger-ui .mb3{margin-bottom:1rem}.swagger-ui .mb4{margin-bottom:2rem}.swagger-ui .mb5{margin-bottom:4rem}.swagger-ui .mb6{margin-bottom:8rem}.swagger-ui .mb7{margin-bottom:16rem}.swagger-ui .mt0{margin-top:0}.swagger-ui .mt1{margin-top:.25rem}.swagger-ui .mt2{margin-top:.5rem}.swagger-ui .mt3{margin-top:1rem}.swagger-ui .mt4{margin-top:2rem}.swagger-ui .mt5{margin-top:4rem}.swagger-ui .mt6{margin-top:8rem}.swagger-ui .mt7{margin-top:16rem}.swagger-ui .mv0{margin-bottom:0;margin-top:0}.swagger-ui .mv1{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0{margin-left:0;margin-right:0}.swagger-ui .mh1{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7{margin-left:16rem;margin-right:16rem}@media screen and (min-width:30em){.swagger-ui .pa0-ns{padding:0}.swagger-ui .pa1-ns{padding:.25rem}.swagger-ui .pa2-ns{padding:.5rem}.swagger-ui .pa3-ns{padding:1rem}.swagger-ui .pa4-ns{padding:2rem}.swagger-ui .pa5-ns{padding:4rem}.swagger-ui .pa6-ns{padding:8rem}.swagger-ui .pa7-ns{padding:16rem}.swagger-ui .pl0-ns{padding-left:0}.swagger-ui .pl1-ns{padding-left:.25rem}.swagger-ui .pl2-ns{padding-left:.5rem}.swagger-ui .pl3-ns{padding-left:1rem}.swagger-ui .pl4-ns{padding-left:2rem}.swagger-ui .pl5-ns{padding-left:4rem}.swagger-ui .pl6-ns{padding-left:8rem}.swagger-ui .pl7-ns{padding-left:16rem}.swagger-ui .pr0-ns{padding-right:0}.swagger-ui .pr1-ns{padding-right:.25rem}.swagger-ui .pr2-ns{padding-right:.5rem}.swagger-ui .pr3-ns{padding-right:1rem}.swagger-ui .pr4-ns{padding-right:2rem}.swagger-ui .pr5-ns{padding-right:4rem}.swagger-ui .pr6-ns{padding-right:8rem}.swagger-ui .pr7-ns{padding-right:16rem}.swagger-ui .pb0-ns{padding-bottom:0}.swagger-ui .pb1-ns{padding-bottom:.25rem}.swagger-ui .pb2-ns{padding-bottom:.5rem}.swagger-ui .pb3-ns{padding-bottom:1rem}.swagger-ui .pb4-ns{padding-bottom:2rem}.swagger-ui .pb5-ns{padding-bottom:4rem}.swagger-ui .pb6-ns{padding-bottom:8rem}.swagger-ui .pb7-ns{padding-bottom:16rem}.swagger-ui .pt0-ns{padding-top:0}.swagger-ui .pt1-ns{padding-top:.25rem}.swagger-ui .pt2-ns{padding-top:.5rem}.swagger-ui .pt3-ns{padding-top:1rem}.swagger-ui .pt4-ns{padding-top:2rem}.swagger-ui .pt5-ns{padding-top:4rem}.swagger-ui .pt6-ns{padding-top:8rem}.swagger-ui .pt7-ns{padding-top:16rem}.swagger-ui .pv0-ns{padding-bottom:0;padding-top:0}.swagger-ui .pv1-ns{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-ns{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-ns{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-ns{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-ns{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-ns{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-ns{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-ns{padding-left:0;padding-right:0}.swagger-ui .ph1-ns{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-ns{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-ns{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-ns{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-ns{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-ns{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-ns{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-ns{margin:0}.swagger-ui .ma1-ns{margin:.25rem}.swagger-ui .ma2-ns{margin:.5rem}.swagger-ui .ma3-ns{margin:1rem}.swagger-ui .ma4-ns{margin:2rem}.swagger-ui .ma5-ns{margin:4rem}.swagger-ui .ma6-ns{margin:8rem}.swagger-ui .ma7-ns{margin:16rem}.swagger-ui .ml0-ns{margin-left:0}.swagger-ui .ml1-ns{margin-left:.25rem}.swagger-ui .ml2-ns{margin-left:.5rem}.swagger-ui .ml3-ns{margin-left:1rem}.swagger-ui .ml4-ns{margin-left:2rem}.swagger-ui .ml5-ns{margin-left:4rem}.swagger-ui .ml6-ns{margin-left:8rem}.swagger-ui .ml7-ns{margin-left:16rem}.swagger-ui .mr0-ns{margin-right:0}.swagger-ui .mr1-ns{margin-right:.25rem}.swagger-ui .mr2-ns{margin-right:.5rem}.swagger-ui .mr3-ns{margin-right:1rem}.swagger-ui .mr4-ns{margin-right:2rem}.swagger-ui .mr5-ns{margin-right:4rem}.swagger-ui .mr6-ns{margin-right:8rem}.swagger-ui .mr7-ns{margin-right:16rem}.swagger-ui .mb0-ns{margin-bottom:0}.swagger-ui .mb1-ns{margin-bottom:.25rem}.swagger-ui .mb2-ns{margin-bottom:.5rem}.swagger-ui .mb3-ns{margin-bottom:1rem}.swagger-ui .mb4-ns{margin-bottom:2rem}.swagger-ui .mb5-ns{margin-bottom:4rem}.swagger-ui .mb6-ns{margin-bottom:8rem}.swagger-ui .mb7-ns{margin-bottom:16rem}.swagger-ui .mt0-ns{margin-top:0}.swagger-ui .mt1-ns{margin-top:.25rem}.swagger-ui .mt2-ns{margin-top:.5rem}.swagger-ui .mt3-ns{margin-top:1rem}.swagger-ui .mt4-ns{margin-top:2rem}.swagger-ui .mt5-ns{margin-top:4rem}.swagger-ui .mt6-ns{margin-top:8rem}.swagger-ui .mt7-ns{margin-top:16rem}.swagger-ui .mv0-ns{margin-bottom:0;margin-top:0}.swagger-ui .mv1-ns{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-ns{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-ns{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-ns{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-ns{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-ns{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-ns{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-ns{margin-left:0;margin-right:0}.swagger-ui .mh1-ns{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-ns{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-ns{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-ns{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-ns{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-ns{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-ns{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .pa0-m{padding:0}.swagger-ui .pa1-m{padding:.25rem}.swagger-ui .pa2-m{padding:.5rem}.swagger-ui .pa3-m{padding:1rem}.swagger-ui .pa4-m{padding:2rem}.swagger-ui .pa5-m{padding:4rem}.swagger-ui .pa6-m{padding:8rem}.swagger-ui .pa7-m{padding:16rem}.swagger-ui .pl0-m{padding-left:0}.swagger-ui .pl1-m{padding-left:.25rem}.swagger-ui .pl2-m{padding-left:.5rem}.swagger-ui .pl3-m{padding-left:1rem}.swagger-ui .pl4-m{padding-left:2rem}.swagger-ui .pl5-m{padding-left:4rem}.swagger-ui .pl6-m{padding-left:8rem}.swagger-ui .pl7-m{padding-left:16rem}.swagger-ui .pr0-m{padding-right:0}.swagger-ui .pr1-m{padding-right:.25rem}.swagger-ui .pr2-m{padding-right:.5rem}.swagger-ui .pr3-m{padding-right:1rem}.swagger-ui .pr4-m{padding-right:2rem}.swagger-ui .pr5-m{padding-right:4rem}.swagger-ui .pr6-m{padding-right:8rem}.swagger-ui .pr7-m{padding-right:16rem}.swagger-ui .pb0-m{padding-bottom:0}.swagger-ui .pb1-m{padding-bottom:.25rem}.swagger-ui .pb2-m{padding-bottom:.5rem}.swagger-ui .pb3-m{padding-bottom:1rem}.swagger-ui .pb4-m{padding-bottom:2rem}.swagger-ui .pb5-m{padding-bottom:4rem}.swagger-ui .pb6-m{padding-bottom:8rem}.swagger-ui .pb7-m{padding-bottom:16rem}.swagger-ui .pt0-m{padding-top:0}.swagger-ui .pt1-m{padding-top:.25rem}.swagger-ui .pt2-m{padding-top:.5rem}.swagger-ui .pt3-m{padding-top:1rem}.swagger-ui .pt4-m{padding-top:2rem}.swagger-ui .pt5-m{padding-top:4rem}.swagger-ui .pt6-m{padding-top:8rem}.swagger-ui .pt7-m{padding-top:16rem}.swagger-ui .pv0-m{padding-bottom:0;padding-top:0}.swagger-ui .pv1-m{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-m{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-m{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-m{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-m{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-m{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-m{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-m{padding-left:0;padding-right:0}.swagger-ui .ph1-m{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-m{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-m{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-m{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-m{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-m{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-m{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-m{margin:0}.swagger-ui .ma1-m{margin:.25rem}.swagger-ui .ma2-m{margin:.5rem}.swagger-ui .ma3-m{margin:1rem}.swagger-ui .ma4-m{margin:2rem}.swagger-ui .ma5-m{margin:4rem}.swagger-ui .ma6-m{margin:8rem}.swagger-ui .ma7-m{margin:16rem}.swagger-ui .ml0-m{margin-left:0}.swagger-ui .ml1-m{margin-left:.25rem}.swagger-ui .ml2-m{margin-left:.5rem}.swagger-ui .ml3-m{margin-left:1rem}.swagger-ui .ml4-m{margin-left:2rem}.swagger-ui .ml5-m{margin-left:4rem}.swagger-ui .ml6-m{margin-left:8rem}.swagger-ui .ml7-m{margin-left:16rem}.swagger-ui .mr0-m{margin-right:0}.swagger-ui .mr1-m{margin-right:.25rem}.swagger-ui .mr2-m{margin-right:.5rem}.swagger-ui .mr3-m{margin-right:1rem}.swagger-ui .mr4-m{margin-right:2rem}.swagger-ui .mr5-m{margin-right:4rem}.swagger-ui .mr6-m{margin-right:8rem}.swagger-ui .mr7-m{margin-right:16rem}.swagger-ui .mb0-m{margin-bottom:0}.swagger-ui .mb1-m{margin-bottom:.25rem}.swagger-ui .mb2-m{margin-bottom:.5rem}.swagger-ui .mb3-m{margin-bottom:1rem}.swagger-ui .mb4-m{margin-bottom:2rem}.swagger-ui .mb5-m{margin-bottom:4rem}.swagger-ui .mb6-m{margin-bottom:8rem}.swagger-ui .mb7-m{margin-bottom:16rem}.swagger-ui .mt0-m{margin-top:0}.swagger-ui .mt1-m{margin-top:.25rem}.swagger-ui .mt2-m{margin-top:.5rem}.swagger-ui .mt3-m{margin-top:1rem}.swagger-ui .mt4-m{margin-top:2rem}.swagger-ui .mt5-m{margin-top:4rem}.swagger-ui .mt6-m{margin-top:8rem}.swagger-ui .mt7-m{margin-top:16rem}.swagger-ui .mv0-m{margin-bottom:0;margin-top:0}.swagger-ui .mv1-m{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-m{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-m{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-m{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-m{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-m{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-m{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-m{margin-left:0;margin-right:0}.swagger-ui .mh1-m{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-m{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-m{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-m{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-m{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-m{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-m{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:60em){.swagger-ui .pa0-l{padding:0}.swagger-ui .pa1-l{padding:.25rem}.swagger-ui .pa2-l{padding:.5rem}.swagger-ui .pa3-l{padding:1rem}.swagger-ui .pa4-l{padding:2rem}.swagger-ui .pa5-l{padding:4rem}.swagger-ui .pa6-l{padding:8rem}.swagger-ui .pa7-l{padding:16rem}.swagger-ui .pl0-l{padding-left:0}.swagger-ui .pl1-l{padding-left:.25rem}.swagger-ui .pl2-l{padding-left:.5rem}.swagger-ui .pl3-l{padding-left:1rem}.swagger-ui .pl4-l{padding-left:2rem}.swagger-ui .pl5-l{padding-left:4rem}.swagger-ui .pl6-l{padding-left:8rem}.swagger-ui .pl7-l{padding-left:16rem}.swagger-ui .pr0-l{padding-right:0}.swagger-ui .pr1-l{padding-right:.25rem}.swagger-ui .pr2-l{padding-right:.5rem}.swagger-ui .pr3-l{padding-right:1rem}.swagger-ui .pr4-l{padding-right:2rem}.swagger-ui .pr5-l{padding-right:4rem}.swagger-ui .pr6-l{padding-right:8rem}.swagger-ui .pr7-l{padding-right:16rem}.swagger-ui .pb0-l{padding-bottom:0}.swagger-ui .pb1-l{padding-bottom:.25rem}.swagger-ui .pb2-l{padding-bottom:.5rem}.swagger-ui .pb3-l{padding-bottom:1rem}.swagger-ui .pb4-l{padding-bottom:2rem}.swagger-ui .pb5-l{padding-bottom:4rem}.swagger-ui .pb6-l{padding-bottom:8rem}.swagger-ui .pb7-l{padding-bottom:16rem}.swagger-ui .pt0-l{padding-top:0}.swagger-ui .pt1-l{padding-top:.25rem}.swagger-ui .pt2-l{padding-top:.5rem}.swagger-ui .pt3-l{padding-top:1rem}.swagger-ui .pt4-l{padding-top:2rem}.swagger-ui .pt5-l{padding-top:4rem}.swagger-ui .pt6-l{padding-top:8rem}.swagger-ui .pt7-l{padding-top:16rem}.swagger-ui .pv0-l{padding-bottom:0;padding-top:0}.swagger-ui .pv1-l{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-l{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-l{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-l{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-l{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-l{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-l{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-l{padding-left:0;padding-right:0}.swagger-ui .ph1-l{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-l{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-l{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-l{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-l{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-l{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-l{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-l{margin:0}.swagger-ui .ma1-l{margin:.25rem}.swagger-ui .ma2-l{margin:.5rem}.swagger-ui .ma3-l{margin:1rem}.swagger-ui .ma4-l{margin:2rem}.swagger-ui .ma5-l{margin:4rem}.swagger-ui .ma6-l{margin:8rem}.swagger-ui .ma7-l{margin:16rem}.swagger-ui .ml0-l{margin-left:0}.swagger-ui .ml1-l{margin-left:.25rem}.swagger-ui .ml2-l{margin-left:.5rem}.swagger-ui .ml3-l{margin-left:1rem}.swagger-ui .ml4-l{margin-left:2rem}.swagger-ui .ml5-l{margin-left:4rem}.swagger-ui .ml6-l{margin-left:8rem}.swagger-ui .ml7-l{margin-left:16rem}.swagger-ui .mr0-l{margin-right:0}.swagger-ui .mr1-l{margin-right:.25rem}.swagger-ui .mr2-l{margin-right:.5rem}.swagger-ui .mr3-l{margin-right:1rem}.swagger-ui .mr4-l{margin-right:2rem}.swagger-ui .mr5-l{margin-right:4rem}.swagger-ui .mr6-l{margin-right:8rem}.swagger-ui .mr7-l{margin-right:16rem}.swagger-ui .mb0-l{margin-bottom:0}.swagger-ui .mb1-l{margin-bottom:.25rem}.swagger-ui .mb2-l{margin-bottom:.5rem}.swagger-ui .mb3-l{margin-bottom:1rem}.swagger-ui .mb4-l{margin-bottom:2rem}.swagger-ui .mb5-l{margin-bottom:4rem}.swagger-ui .mb6-l{margin-bottom:8rem}.swagger-ui .mb7-l{margin-bottom:16rem}.swagger-ui .mt0-l{margin-top:0}.swagger-ui .mt1-l{margin-top:.25rem}.swagger-ui .mt2-l{margin-top:.5rem}.swagger-ui .mt3-l{margin-top:1rem}.swagger-ui .mt4-l{margin-top:2rem}.swagger-ui .mt5-l{margin-top:4rem}.swagger-ui .mt6-l{margin-top:8rem}.swagger-ui .mt7-l{margin-top:16rem}.swagger-ui .mv0-l{margin-bottom:0;margin-top:0}.swagger-ui .mv1-l{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-l{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-l{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-l{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-l{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-l{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-l{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-l{margin-left:0;margin-right:0}.swagger-ui .mh1-l{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-l{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-l{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-l{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-l{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-l{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-l{margin-left:16rem;margin-right:16rem}}.swagger-ui .na1{margin:-.25rem}.swagger-ui .na2{margin:-.5rem}.swagger-ui .na3{margin:-1rem}.swagger-ui .na4{margin:-2rem}.swagger-ui .na5{margin:-4rem}.swagger-ui .na6{margin:-8rem}.swagger-ui .na7{margin:-16rem}.swagger-ui .nl1{margin-left:-.25rem}.swagger-ui .nl2{margin-left:-.5rem}.swagger-ui .nl3{margin-left:-1rem}.swagger-ui .nl4{margin-left:-2rem}.swagger-ui .nl5{margin-left:-4rem}.swagger-ui .nl6{margin-left:-8rem}.swagger-ui .nl7{margin-left:-16rem}.swagger-ui .nr1{margin-right:-.25rem}.swagger-ui .nr2{margin-right:-.5rem}.swagger-ui .nr3{margin-right:-1rem}.swagger-ui .nr4{margin-right:-2rem}.swagger-ui .nr5{margin-right:-4rem}.swagger-ui .nr6{margin-right:-8rem}.swagger-ui .nr7{margin-right:-16rem}.swagger-ui .nb1{margin-bottom:-.25rem}.swagger-ui .nb2{margin-bottom:-.5rem}.swagger-ui .nb3{margin-bottom:-1rem}.swagger-ui .nb4{margin-bottom:-2rem}.swagger-ui .nb5{margin-bottom:-4rem}.swagger-ui .nb6{margin-bottom:-8rem}.swagger-ui .nb7{margin-bottom:-16rem}.swagger-ui .nt1{margin-top:-.25rem}.swagger-ui .nt2{margin-top:-.5rem}.swagger-ui .nt3{margin-top:-1rem}.swagger-ui .nt4{margin-top:-2rem}.swagger-ui .nt5{margin-top:-4rem}.swagger-ui .nt6{margin-top:-8rem}.swagger-ui .nt7{margin-top:-16rem}@media screen and (min-width:30em){.swagger-ui .na1-ns{margin:-.25rem}.swagger-ui .na2-ns{margin:-.5rem}.swagger-ui .na3-ns{margin:-1rem}.swagger-ui .na4-ns{margin:-2rem}.swagger-ui .na5-ns{margin:-4rem}.swagger-ui .na6-ns{margin:-8rem}.swagger-ui .na7-ns{margin:-16rem}.swagger-ui .nl1-ns{margin-left:-.25rem}.swagger-ui .nl2-ns{margin-left:-.5rem}.swagger-ui .nl3-ns{margin-left:-1rem}.swagger-ui .nl4-ns{margin-left:-2rem}.swagger-ui .nl5-ns{margin-left:-4rem}.swagger-ui .nl6-ns{margin-left:-8rem}.swagger-ui .nl7-ns{margin-left:-16rem}.swagger-ui .nr1-ns{margin-right:-.25rem}.swagger-ui .nr2-ns{margin-right:-.5rem}.swagger-ui .nr3-ns{margin-right:-1rem}.swagger-ui .nr4-ns{margin-right:-2rem}.swagger-ui .nr5-ns{margin-right:-4rem}.swagger-ui .nr6-ns{margin-right:-8rem}.swagger-ui .nr7-ns{margin-right:-16rem}.swagger-ui .nb1-ns{margin-bottom:-.25rem}.swagger-ui .nb2-ns{margin-bottom:-.5rem}.swagger-ui .nb3-ns{margin-bottom:-1rem}.swagger-ui .nb4-ns{margin-bottom:-2rem}.swagger-ui .nb5-ns{margin-bottom:-4rem}.swagger-ui .nb6-ns{margin-bottom:-8rem}.swagger-ui .nb7-ns{margin-bottom:-16rem}.swagger-ui .nt1-ns{margin-top:-.25rem}.swagger-ui .nt2-ns{margin-top:-.5rem}.swagger-ui .nt3-ns{margin-top:-1rem}.swagger-ui .nt4-ns{margin-top:-2rem}.swagger-ui .nt5-ns{margin-top:-4rem}.swagger-ui .nt6-ns{margin-top:-8rem}.swagger-ui .nt7-ns{margin-top:-16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .na1-m{margin:-.25rem}.swagger-ui .na2-m{margin:-.5rem}.swagger-ui .na3-m{margin:-1rem}.swagger-ui .na4-m{margin:-2rem}.swagger-ui .na5-m{margin:-4rem}.swagger-ui .na6-m{margin:-8rem}.swagger-ui .na7-m{margin:-16rem}.swagger-ui .nl1-m{margin-left:-.25rem}.swagger-ui .nl2-m{margin-left:-.5rem}.swagger-ui .nl3-m{margin-left:-1rem}.swagger-ui .nl4-m{margin-left:-2rem}.swagger-ui .nl5-m{margin-left:-4rem}.swagger-ui .nl6-m{margin-left:-8rem}.swagger-ui .nl7-m{margin-left:-16rem}.swagger-ui .nr1-m{margin-right:-.25rem}.swagger-ui .nr2-m{margin-right:-.5rem}.swagger-ui .nr3-m{margin-right:-1rem}.swagger-ui .nr4-m{margin-right:-2rem}.swagger-ui .nr5-m{margin-right:-4rem}.swagger-ui .nr6-m{margin-right:-8rem}.swagger-ui .nr7-m{margin-right:-16rem}.swagger-ui .nb1-m{margin-bottom:-.25rem}.swagger-ui .nb2-m{margin-bottom:-.5rem}.swagger-ui .nb3-m{margin-bottom:-1rem}.swagger-ui .nb4-m{margin-bottom:-2rem}.swagger-ui .nb5-m{margin-bottom:-4rem}.swagger-ui .nb6-m{margin-bottom:-8rem}.swagger-ui .nb7-m{margin-bottom:-16rem}.swagger-ui .nt1-m{margin-top:-.25rem}.swagger-ui .nt2-m{margin-top:-.5rem}.swagger-ui .nt3-m{margin-top:-1rem}.swagger-ui .nt4-m{margin-top:-2rem}.swagger-ui .nt5-m{margin-top:-4rem}.swagger-ui .nt6-m{margin-top:-8rem}.swagger-ui .nt7-m{margin-top:-16rem}}@media screen and (min-width:60em){.swagger-ui .na1-l{margin:-.25rem}.swagger-ui .na2-l{margin:-.5rem}.swagger-ui .na3-l{margin:-1rem}.swagger-ui .na4-l{margin:-2rem}.swagger-ui .na5-l{margin:-4rem}.swagger-ui .na6-l{margin:-8rem}.swagger-ui .na7-l{margin:-16rem}.swagger-ui .nl1-l{margin-left:-.25rem}.swagger-ui .nl2-l{margin-left:-.5rem}.swagger-ui .nl3-l{margin-left:-1rem}.swagger-ui .nl4-l{margin-left:-2rem}.swagger-ui .nl5-l{margin-left:-4rem}.swagger-ui .nl6-l{margin-left:-8rem}.swagger-ui .nl7-l{margin-left:-16rem}.swagger-ui .nr1-l{margin-right:-.25rem}.swagger-ui .nr2-l{margin-right:-.5rem}.swagger-ui .nr3-l{margin-right:-1rem}.swagger-ui .nr4-l{margin-right:-2rem}.swagger-ui .nr5-l{margin-right:-4rem}.swagger-ui .nr6-l{margin-right:-8rem}.swagger-ui .nr7-l{margin-right:-16rem}.swagger-ui .nb1-l{margin-bottom:-.25rem}.swagger-ui .nb2-l{margin-bottom:-.5rem}.swagger-ui .nb3-l{margin-bottom:-1rem}.swagger-ui .nb4-l{margin-bottom:-2rem}.swagger-ui .nb5-l{margin-bottom:-4rem}.swagger-ui .nb6-l{margin-bottom:-8rem}.swagger-ui .nb7-l{margin-bottom:-16rem}.swagger-ui .nt1-l{margin-top:-.25rem}.swagger-ui .nt2-l{margin-top:-.5rem}.swagger-ui .nt3-l{margin-top:-1rem}.swagger-ui .nt4-l{margin-top:-2rem}.swagger-ui .nt5-l{margin-top:-4rem}.swagger-ui .nt6-l{margin-top:-8rem}.swagger-ui .nt7-l{margin-top:-16rem}}.swagger-ui .collapse{border-collapse:collapse;border-spacing:0}.swagger-ui .striped--light-silver:nth-child(odd){background-color:#aaa}.swagger-ui .striped--moon-gray:nth-child(odd){background-color:#ccc}.swagger-ui .striped--light-gray:nth-child(odd){background-color:#eee}.swagger-ui .striped--near-white:nth-child(odd){background-color:#f4f4f4}.swagger-ui .stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.swagger-ui .stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.swagger-ui .strike{text-decoration:line-through}.swagger-ui .underline{text-decoration:underline}.swagger-ui .no-underline{text-decoration:none}@media screen and (min-width:30em){.swagger-ui .strike-ns{text-decoration:line-through}.swagger-ui .underline-ns{text-decoration:underline}.swagger-ui .no-underline-ns{text-decoration:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .strike-m{text-decoration:line-through}.swagger-ui .underline-m{text-decoration:underline}.swagger-ui .no-underline-m{text-decoration:none}}@media screen and (min-width:60em){.swagger-ui .strike-l{text-decoration:line-through}.swagger-ui .underline-l{text-decoration:underline}.swagger-ui .no-underline-l{text-decoration:none}}.swagger-ui .tl{text-align:left}.swagger-ui .tr{text-align:right}.swagger-ui .tc{text-align:center}.swagger-ui .tj{text-align:justify}@media screen and (min-width:30em){.swagger-ui .tl-ns{text-align:left}.swagger-ui .tr-ns{text-align:right}.swagger-ui .tc-ns{text-align:center}.swagger-ui .tj-ns{text-align:justify}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tl-m{text-align:left}.swagger-ui .tr-m{text-align:right}.swagger-ui .tc-m{text-align:center}.swagger-ui .tj-m{text-align:justify}}@media screen and (min-width:60em){.swagger-ui .tl-l{text-align:left}.swagger-ui .tr-l{text-align:right}.swagger-ui .tc-l{text-align:center}.swagger-ui .tj-l{text-align:justify}}.swagger-ui .ttc{text-transform:capitalize}.swagger-ui .ttl{text-transform:lowercase}.swagger-ui .ttu{text-transform:uppercase}.swagger-ui .ttn{text-transform:none}@media screen and (min-width:30em){.swagger-ui .ttc-ns{text-transform:capitalize}.swagger-ui .ttl-ns{text-transform:lowercase}.swagger-ui .ttu-ns{text-transform:uppercase}.swagger-ui .ttn-ns{text-transform:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ttc-m{text-transform:capitalize}.swagger-ui .ttl-m{text-transform:lowercase}.swagger-ui .ttu-m{text-transform:uppercase}.swagger-ui .ttn-m{text-transform:none}}@media screen and (min-width:60em){.swagger-ui .ttc-l{text-transform:capitalize}.swagger-ui .ttl-l{text-transform:lowercase}.swagger-ui .ttu-l{text-transform:uppercase}.swagger-ui .ttn-l{text-transform:none}}.swagger-ui .f-6,.swagger-ui .f-headline{font-size:6rem}.swagger-ui .f-5,.swagger-ui .f-subheadline{font-size:5rem}.swagger-ui .f1{font-size:3rem}.swagger-ui .f2{font-size:2.25rem}.swagger-ui .f3{font-size:1.5rem}.swagger-ui .f4{font-size:1.25rem}.swagger-ui .f5{font-size:1rem}.swagger-ui .f6{font-size:.875rem}.swagger-ui .f7{font-size:.75rem}@media screen and (min-width:30em){.swagger-ui .f-6-ns,.swagger-ui .f-headline-ns{font-size:6rem}.swagger-ui .f-5-ns,.swagger-ui .f-subheadline-ns{font-size:5rem}.swagger-ui .f1-ns{font-size:3rem}.swagger-ui .f2-ns{font-size:2.25rem}.swagger-ui .f3-ns{font-size:1.5rem}.swagger-ui .f4-ns{font-size:1.25rem}.swagger-ui .f5-ns{font-size:1rem}.swagger-ui .f6-ns{font-size:.875rem}.swagger-ui .f7-ns{font-size:.75rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .f-6-m,.swagger-ui .f-headline-m{font-size:6rem}.swagger-ui .f-5-m,.swagger-ui .f-subheadline-m{font-size:5rem}.swagger-ui .f1-m{font-size:3rem}.swagger-ui .f2-m{font-size:2.25rem}.swagger-ui .f3-m{font-size:1.5rem}.swagger-ui .f4-m{font-size:1.25rem}.swagger-ui .f5-m{font-size:1rem}.swagger-ui .f6-m{font-size:.875rem}.swagger-ui .f7-m{font-size:.75rem}}@media screen and (min-width:60em){.swagger-ui .f-6-l,.swagger-ui .f-headline-l{font-size:6rem}.swagger-ui .f-5-l,.swagger-ui .f-subheadline-l{font-size:5rem}.swagger-ui .f1-l{font-size:3rem}.swagger-ui .f2-l{font-size:2.25rem}.swagger-ui .f3-l{font-size:1.5rem}.swagger-ui .f4-l{font-size:1.25rem}.swagger-ui .f5-l{font-size:1rem}.swagger-ui .f6-l{font-size:.875rem}.swagger-ui .f7-l{font-size:.75rem}}.swagger-ui .measure{max-width:30em}.swagger-ui .measure-wide{max-width:34em}.swagger-ui .measure-narrow{max-width:20em}.swagger-ui .indent{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media screen and (min-width:30em){.swagger-ui .measure-ns{max-width:30em}.swagger-ui .measure-wide-ns{max-width:34em}.swagger-ui .measure-narrow-ns{max-width:20em}.swagger-ui .indent-ns{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-ns{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-ns{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .measure-m{max-width:30em}.swagger-ui .measure-wide-m{max-width:34em}.swagger-ui .measure-narrow-m{max-width:20em}.swagger-ui .indent-m{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-m{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-m{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:60em){.swagger-ui .measure-l{max-width:30em}.swagger-ui .measure-wide-l{max-width:34em}.swagger-ui .measure-narrow-l{max-width:20em}.swagger-ui .indent-l{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-l{-webkit-font-feature-settings:"smcp";font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.swagger-ui .overflow-container{overflow-y:scroll}.swagger-ui .center{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto{margin-right:auto}.swagger-ui .ml-auto{margin-left:auto}@media screen and (min-width:30em){.swagger-ui .center-ns{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-ns{margin-right:auto}.swagger-ui .ml-auto-ns{margin-left:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .center-m{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-m{margin-right:auto}.swagger-ui .ml-auto-m{margin-left:auto}}@media screen and (min-width:60em){.swagger-ui .center-l{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-l{margin-right:auto}.swagger-ui .ml-auto-l{margin-left:auto}}.swagger-ui .clip{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}@media screen and (min-width:30em){.swagger-ui .clip-ns{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .clip-m{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:60em){.swagger-ui .clip-l{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}.swagger-ui .ws-normal{white-space:normal}.swagger-ui .nowrap{white-space:nowrap}.swagger-ui .pre{white-space:pre}@media screen and (min-width:30em){.swagger-ui .ws-normal-ns{white-space:normal}.swagger-ui .nowrap-ns{white-space:nowrap}.swagger-ui .pre-ns{white-space:pre}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ws-normal-m{white-space:normal}.swagger-ui .nowrap-m{white-space:nowrap}.swagger-ui .pre-m{white-space:pre}}@media screen and (min-width:60em){.swagger-ui .ws-normal-l{white-space:normal}.swagger-ui .nowrap-l{white-space:nowrap}.swagger-ui .pre-l{white-space:pre}}.swagger-ui .v-base{vertical-align:baseline}.swagger-ui .v-mid{vertical-align:middle}.swagger-ui .v-top{vertical-align:top}.swagger-ui .v-btm{vertical-align:bottom}@media screen and (min-width:30em){.swagger-ui .v-base-ns{vertical-align:baseline}.swagger-ui .v-mid-ns{vertical-align:middle}.swagger-ui .v-top-ns{vertical-align:top}.swagger-ui .v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .v-base-m{vertical-align:baseline}.swagger-ui .v-mid-m{vertical-align:middle}.swagger-ui .v-top-m{vertical-align:top}.swagger-ui .v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.swagger-ui .v-base-l{vertical-align:baseline}.swagger-ui .v-mid-l{vertical-align:middle}.swagger-ui .v-top-l{vertical-align:top}.swagger-ui .v-btm-l{vertical-align:bottom}}.swagger-ui .dim{opacity:1}.swagger-ui .dim,.swagger-ui .dim:focus,.swagger-ui .dim:hover{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.swagger-ui .dim:focus,.swagger-ui .dim:hover{opacity:.5}.swagger-ui .dim:active{opacity:.8;-webkit-transition:opacity .15s ease-out;transition:opacity .15s ease-out}.swagger-ui .glow,.swagger-ui .glow:focus,.swagger-ui .glow:hover{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.swagger-ui .glow:focus,.swagger-ui .glow:hover{opacity:1}.swagger-ui .hide-child .child{opacity:0;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.swagger-ui .hide-child:active .child,.swagger-ui .hide-child:focus .child,.swagger-ui .hide-child:hover .child{opacity:1;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.swagger-ui .underline-hover:focus,.swagger-ui .underline-hover:hover{text-decoration:underline}.swagger-ui .grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .25s ease-out;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.swagger-ui .grow:focus,.swagger-ui .grow:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.swagger-ui .grow:active{-webkit-transform:scale(.9);transform:scale(.9)}.swagger-ui .grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .25s ease-in-out;transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}.swagger-ui .grow-large:focus,.swagger-ui .grow-large:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.swagger-ui .grow-large:active{-webkit-transform:scale(.95);transform:scale(.95)}.swagger-ui .pointer:hover{cursor:pointer}.swagger-ui .shadow-hover{cursor:pointer;position:relative;-webkit-transition:all .5s cubic-bezier(.165,.84,.44,1);transition:all .5s cubic-bezier(.165,.84,.44,1)}.swagger-ui .shadow-hover::after{border-radius:inherit;-webkit-box-shadow:0 0 16px 2px rgba(0,0,0,.2);box-shadow:0 0 16px 2px rgba(0,0,0,.2);content:"";height:100%;left:0;opacity:0;position:absolute;top:0;-webkit-transition:opacity .5s cubic-bezier(.165,.84,.44,1);transition:opacity .5s cubic-bezier(.165,.84,.44,1);width:100%;z-index:-1}.swagger-ui .shadow-hover:focus::after,.swagger-ui .shadow-hover:hover::after{opacity:1}.swagger-ui .bg-animate,.swagger-ui .bg-animate:focus,.swagger-ui .bg-animate:hover{-webkit-transition:background-color .15s ease-in-out;transition:background-color .15s ease-in-out}.swagger-ui .z-0{z-index:0}.swagger-ui .z-1{z-index:1}.swagger-ui .z-2{z-index:2}.swagger-ui .z-3{z-index:3}.swagger-ui .z-4{z-index:4}.swagger-ui .z-5{z-index:5}.swagger-ui .z-999{z-index:999}.swagger-ui .z-9999{z-index:9999}.swagger-ui .z-max{z-index:2147483647}.swagger-ui .z-inherit{z-index:inherit}.swagger-ui .z-initial{z-index:auto}.swagger-ui .z-unset{z-index:unset}.swagger-ui .nested-copy-line-height ol,.swagger-ui .nested-copy-line-height p,.swagger-ui .nested-copy-line-height ul{line-height:1.5}.swagger-ui .nested-headline-line-height h1,.swagger-ui .nested-headline-line-height h2,.swagger-ui .nested-headline-line-height h3,.swagger-ui .nested-headline-line-height h4,.swagger-ui .nested-headline-line-height h5,.swagger-ui .nested-headline-line-height h6{line-height:1.25}.swagger-ui .nested-list-reset ol,.swagger-ui .nested-list-reset ul{list-style-type:none;margin-left:0;padding-left:0}.swagger-ui .nested-copy-indent p+p{margin-bottom:0;margin-top:0;text-indent:.1em}.swagger-ui .nested-copy-seperator p+p{margin-top:1.5em}.swagger-ui .nested-img img{display:block;max-width:100%;width:100%}.swagger-ui .nested-links a{color:#357edd;-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.swagger-ui .nested-links a:focus,.swagger-ui .nested-links a:hover{color:#96ccff;-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.swagger-ui .wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 auto;max-width:1460px;padding:0 20px;width:100%}.swagger-ui .opblock-tag-section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .try-out.btn-group{padding:0}.swagger-ui .opblock-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid rgba(59,65,81,.3);cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;padding:10px 20px 10px 10px;-webkit-transition:all .2s;transition:all .2s}.swagger-ui .opblock-tag:hover{background:rgba(0,0,0,.02)}.swagger-ui .opblock-tag{color:#3b4151;font-family:sans-serif;font-size:24px;margin:0 0 5px}.swagger-ui .opblock-tag.no-desc span{-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui .opblock-tag svg{-webkit-transition:all .4s;transition:all .4s}.swagger-ui .opblock-tag small{color:#3b4151;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:14px;font-weight:400;padding:0 10px}.swagger-ui .parameter__type{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;padding:5px 0}.swagger-ui .parameter-controls{margin-top:.75em}.swagger-ui .examples__title{display:block;font-size:1.1em;font-weight:700;margin-bottom:.75em}.swagger-ui .examples__section{margin-top:1.5em}.swagger-ui .examples__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .examples-select{display:inline-block;margin-bottom:.75em}.swagger-ui .examples-select .examples-select-element{width:100%}.swagger-ui .examples-select__section-label{font-size:.9rem;font-weight:700;margin-right:.5rem}.swagger-ui .example__section{margin-top:1.5em}.swagger-ui .example__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .view-line-link{cursor:pointer;margin:0 5px;position:relative;top:3px;-webkit-transition:all .5s;transition:all .5s;width:20px}.swagger-ui .opblock{border:1px solid #000;border-radius:4px;-webkit-box-shadow:0 0 3px rgba(0,0,0,.19);box-shadow:0 0 3px rgba(0,0,0,.19);margin:0 0 15px}.swagger-ui .opblock .tab-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui .opblock .tab-header .tab-item{cursor:pointer;padding:0 40px}.swagger-ui .opblock .tab-header .tab-item:first-of-type{padding:0 40px 0 0}.swagger-ui .opblock .tab-header .tab-item.active h4 span{position:relative}.swagger-ui .opblock .tab-header .tab-item.active h4 span::after{background:grey;bottom:-15px;content:"";height:4px;left:50%;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:120%}.swagger-ui .opblock.is-open .opblock-summary{border-bottom:1px solid #000}.swagger-ui .opblock .opblock-section-header{background:hsla(0,0%,100%,.8);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1);min-height:50px;padding:8px 20px}.swagger-ui .opblock .opblock-section-header,.swagger-ui .opblock .opblock-section-header>label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .opblock .opblock-section-header>label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 0 auto}.swagger-ui .opblock .opblock-section-header>label>span{padding:0 10px 0 0}.swagger-ui .opblock .opblock-section-header h4{color:#3b4151;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock .opblock-summary-method{background:#000;border-radius:3px;color:#fff;font-family:sans-serif;font-size:14px;font-weight:700;min-width:80px;padding:6px 15px;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1)}.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#3b4151;display:-webkit-box;display:-ms-flexbox;display:flex;font-family:monospace;font-size:16px;font-weight:600;padding:0 10px;word-break:break-word}@media (max-width:768px){.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{font-size:12px}}.swagger-ui .opblock .opblock-summary-path{-ms-flex-negative:0;flex-shrink:0;max-width:calc(100% - 110px - 15rem)}.swagger-ui .opblock .opblock-summary-path__deprecated{text-decoration:line-through}.swagger-ui .opblock .opblock-summary-operation-id{font-size:14px}.swagger-ui .opblock .opblock-summary-description{color:#3b4151;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;font-family:sans-serif;font-size:13px;word-break:break-word}.swagger-ui .opblock .opblock-summary{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;padding:5px}.swagger-ui .opblock .opblock-summary .view-line-link{cursor:pointer;margin:0;position:relative;top:2px;-webkit-transition:all .5s;transition:all .5s;width:0}.swagger-ui .opblock .opblock-summary:hover .view-line-link{margin:0 5px;width:18px}.swagger-ui .opblock.opblock-post{background:rgba(73,204,144,.1);border-color:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary-method{background:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary{border-color:#49cc90}.swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span::after{background:#49cc90}.swagger-ui .opblock.opblock-put{background:rgba(252,161,48,.1);border-color:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary-method{background:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary{border-color:#fca130}.swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span::after{background:#fca130}.swagger-ui .opblock.opblock-delete{background:rgba(249,62,62,.1);border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary-method{background:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary{border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span::after{background:#f93e3e}.swagger-ui .opblock.opblock-get{background:rgba(97,175,254,.1);border-color:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary-method{background:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary{border-color:#61affe}.swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span::after{background:#61affe}.swagger-ui .opblock.opblock-patch{background:rgba(80,227,194,.1);border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary-method{background:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary{border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span::after{background:#50e3c2}.swagger-ui .opblock.opblock-head{background:rgba(144,18,254,.1);border-color:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary-method{background:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary{border-color:#9012fe}.swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span::after{background:#9012fe}.swagger-ui .opblock.opblock-options{background:rgba(13,90,167,.1);border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary-method{background:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary{border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span::after{background:#0d5aa7}.swagger-ui .opblock.opblock-deprecated{background:hsla(0,0%,92.2%,.1);border-color:#ebebeb;opacity:.6}.swagger-ui .opblock.opblock-deprecated .opblock-summary-method{background:#ebebeb}.swagger-ui .opblock.opblock-deprecated .opblock-summary{border-color:#ebebeb}.swagger-ui .opblock.opblock-deprecated .tab-header .tab-item.active h4 span::after{background:#ebebeb}.swagger-ui .opblock .opblock-schemes{padding:8px 20px}.swagger-ui .opblock .opblock-schemes .schemes-title{padding:0 10px 0 0}.swagger-ui .filter .operation-filter-input{border:2px solid #d8dde7;margin:20px 0;padding:10px;width:100%}.swagger-ui .download-url-wrapper .failed,.swagger-ui .filter .failed{color:red}.swagger-ui .download-url-wrapper .loading,.swagger-ui .filter .loading{color:#aaa}.swagger-ui .model-example{margin-top:1em}.swagger-ui .tab{display:-webkit-box;display:-ms-flexbox;display:flex;list-style:none;padding:0}.swagger-ui .tab li{color:#3b4151;cursor:pointer;font-family:sans-serif;font-size:12px;min-width:60px;padding:0}.swagger-ui .tab li:first-of-type{padding-left:0;padding-right:12px;position:relative}.swagger-ui .tab li:first-of-type::after{background:rgba(0,0,0,.2);content:"";height:100%;position:absolute;right:6px;top:0;width:1px}.swagger-ui .tab li.active{font-weight:700}.swagger-ui .opblock-description-wrapper,.swagger-ui .opblock-external-docs-wrapper,.swagger-ui .opblock-title_normal{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px;padding:15px 20px}.swagger-ui .opblock-description-wrapper h4,.swagger-ui .opblock-external-docs-wrapper h4,.swagger-ui .opblock-title_normal h4{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .opblock-description-wrapper p,.swagger-ui .opblock-external-docs-wrapper p,.swagger-ui .opblock-title_normal p{color:#3b4151;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock-external-docs-wrapper h4{padding-left:0}.swagger-ui .execute-wrapper{padding:20px;text-align:right}.swagger-ui .execute-wrapper .btn{padding:8px 40px;width:100%}.swagger-ui .body-param-options{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .body-param-options .body-param-edit{padding:10px 0}.swagger-ui .body-param-options label{padding:8px 0}.swagger-ui .body-param-options label select{margin:3px 0 0}.swagger-ui .responses-inner{padding:20px}.swagger-ui .responses-inner h4,.swagger-ui .responses-inner h5{color:#3b4151;font-family:sans-serif;font-size:12px;margin:10px 0 5px}.swagger-ui .responses-inner .curl{white-space:normal}.swagger-ui .response-col_status{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .response-col_status .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links{color:#3b4151;font-family:sans-serif;font-size:14px;max-width:40em;padding-left:2em}.swagger-ui .response-col_links .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links .operation-link{margin-bottom:1.5em}.swagger-ui .response-col_links .operation-link .description{margin-bottom:.5em}.swagger-ui .opblock-body .opblock-loading-animation{display:block;margin:3em auto}.swagger-ui .opblock-body pre.microlight{word-wrap:break-word;background:#333;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;margin:0;padding:10px;white-space:pre-wrap;word-break:break-all;word-break:break-word}.swagger-ui .opblock-body pre.microlight .headerline{display:block}.swagger-ui .highlight-code{position:relative}.swagger-ui .highlight-code>.microlight{max-height:400px;min-height:6em;overflow-y:auto}.swagger-ui .highlight-code>.microlight code{white-space:pre-wrap!important;word-break:break-all}.swagger-ui .curl-command{position:relative}.swagger-ui .download-contents{background:#7d8293;border-radius:4px;bottom:10px;color:#fff;cursor:pointer;font-family:sans-serif;font-size:14px;font-weight:600;height:30px;padding:5px;position:absolute;right:10px;text-align:center}.swagger-ui .scheme-container{background:#fff;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.15);box-shadow:0 1px 2px 0 rgba(0,0,0,.15);margin:0 0 20px;padding:30px 0}.swagger-ui .scheme-container .schemes{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .scheme-container .schemes>label{color:#3b4151;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-family:sans-serif;font-size:12px;font-weight:700;margin:-20px 15px 0 0}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;min-height:1px;padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading::after{color:#3b4151;content:"loading";font-family:sans-serif;font-size:10px;font-weight:700;left:50%;position:absolute;text-transform:uppercase;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.swagger-ui .loading-container .loading::before{-webkit-animation:rotation 1s linear infinite,opacity .5s;animation:rotation 1s linear infinite,opacity .5s;-webkit-backface-visibility:hidden;backface-visibility:hidden;border-radius:100%;border:2px solid rgba(85,85,85,.1);border-top-color:rgba(0,0,0,.6);content:"";display:block;height:60px;left:50%;margin:-30px;opacity:1;position:absolute;top:50%;width:60px}@-webkit-keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.swagger-ui .response-controls{display:-webkit-box;display:-ms-flexbox;display:flex;padding-top:1em}.swagger-ui .response-control-media-type{margin-right:1em}.swagger-ui .response-control-media-type--accept-controller select{border-color:green}.swagger-ui .response-control-media-type__accept-message{color:green;font-size:.7em}.swagger-ui .response-control-examples__title,.swagger-ui .response-control-media-type__title{display:block;font-size:.7em;margin-bottom:.2em}@-webkit-keyframes blinker{50%{opacity:0}}@keyframes blinker{50%{opacity:0}}.swagger-ui .hidden{display:none}.swagger-ui .no-margin{border:none;height:auto;margin:0;padding:0}.swagger-ui .float-right{float:right}.swagger-ui img.full-width{width:100%}.swagger-ui .svg-assets{height:0;position:absolute;width:0}.swagger-ui section h3{color:#3b4151;font-family:sans-serif}.swagger-ui a.nostyle{display:inline}.swagger-ui a.nostyle,.swagger-ui a.nostyle:visited{color:inherit;cursor:pointer;text-decoration:inherit}.swagger-ui .fallback{color:#aaa;padding:1em}.swagger-ui .version-pragma{height:100%;padding:5em 0}.swagger-ui .version-pragma__message{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:1.2em;height:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:1.5em;padding:0 .6em;text-align:center}.swagger-ui .version-pragma__message>div{-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:55ch}.swagger-ui .version-pragma__message code{background-color:#dedede;padding:4px 4px 2px;white-space:pre}.swagger-ui .opblock-link{font-weight:400}.swagger-ui .opblock-link.shown{font-weight:700}.swagger-ui span.token-string{color:#555}.swagger-ui span.token-not-formatted{color:#555;font-weight:700}.swagger-ui .btn{background:transparent;border:2px solid grey;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 23px;-webkit-transition:all .3s;transition:all .3s}.swagger-ui .btn.btn-sm{font-size:12px;padding:4px 23px}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.swagger-ui .btn.cancel{background-color:transparent;border-color:#ff6060;color:#ff6060;font-family:sans-serif}.swagger-ui .btn.authorize{background-color:transparent;border-color:#49cc90;color:#49cc90;display:inline;line-height:1}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{background-color:#4990e2;border-color:#4990e2;color:#fff}.swagger-ui .btn-group{display:-webkit-box;display:-ms-flexbox;display:flex;padding:30px}.swagger-ui .btn-group .btn{-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{background:none;border:none;padding:0 10px}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .model-box-control,.swagger-ui .models-control,.swagger-ui .opblock-summary-control{all:inherit;border-bottom:0;cursor:pointer;-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0}.swagger-ui .model-box-control:focus,.swagger-ui .models-control:focus,.swagger-ui .opblock-summary-control:focus{outline:auto}.swagger-ui .expand-methods,.swagger-ui .expand-operation{background:none;border:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{height:20px;width:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#404040}.swagger-ui .expand-methods svg{fill:#707070;-webkit-transition:all .3s;transition:all .3s}.swagger-ui button{cursor:pointer}.swagger-ui button.invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .copy-to-clipboard{background:#7d8293;border:none;border-radius:4px;bottom:10px;height:30px;position:absolute;right:100px;width:30px}.swagger-ui .copy-to-clipboard button{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' aria-hidden='true'%3E%3Cpath fill='%23fff' fill-rule='evenodd' d='M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z'/%3E%3C/svg%3E") 50% no-repeat;border:none;height:25px;padding-left:25px}.swagger-ui .curl-command .copy-to-clipboard{bottom:5px;height:20px;right:10px;width:20px}.swagger-ui .curl-command .copy-to-clipboard button{height:18px;padding-left:18px}.swagger-ui select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f7f7f7 url('data:image/svg+xml;charset=utf-8,') right 10px center no-repeat;background-size:20px;border:2px solid #41444e;border-radius:4px;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.25);box-shadow:0 1px 2px 0 rgba(0,0,0,.25);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 40px 5px 10px}.swagger-ui select[multiple]{background:#f7f7f7;margin:5px 0;padding:5px}.swagger-ui select.invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .opblock-body select{min-width:230px}@media (max-width:768px){.swagger-ui .opblock-body select{min-width:180px}}.swagger-ui label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 5px}@media (max-width:768px){.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{max-width:175px}}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text],.swagger-ui textarea{background:#fff;border:1px solid #d9d9d9;border-radius:4px;margin:5px 0;min-width:100px;padding:8px 10px}.swagger-ui input[type=email].invalid,.swagger-ui input[type=file].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid,.swagger-ui textarea.invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui input[disabled],.swagger-ui select[disabled],.swagger-ui textarea[disabled]{background-color:#fafafa;color:#888;cursor:not-allowed}.swagger-ui select[disabled]{border-color:#888}.swagger-ui textarea[disabled]{background-color:#41444e;color:#fff}@-webkit-keyframes shake{10%,90%{-webkit-transform:translate3d(-1px,0,0);transform:translate3d(-1px,0,0)}20%,80%{-webkit-transform:translate3d(2px,0,0);transform:translate3d(2px,0,0)}30%,50%,70%{-webkit-transform:translate3d(-4px,0,0);transform:translate3d(-4px,0,0)}40%,60%{-webkit-transform:translate3d(4px,0,0);transform:translate3d(4px,0,0)}}@keyframes shake{10%,90%{-webkit-transform:translate3d(-1px,0,0);transform:translate3d(-1px,0,0)}20%,80%{-webkit-transform:translate3d(2px,0,0);transform:translate3d(2px,0,0)}30%,50%,70%{-webkit-transform:translate3d(-4px,0,0);transform:translate3d(-4px,0,0)}40%,60%{-webkit-transform:translate3d(4px,0,0);transform:translate3d(4px,0,0)}}.swagger-ui textarea{background:hsla(0,0%,100%,.8);border:none;border-radius:4px;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;min-height:280px;outline:none;padding:10px;width:100%}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{background:#41444e;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;margin:0;min-height:100px;padding:10px;resize:none}.swagger-ui .checkbox{color:#303030;padding:5px 0 10px;-webkit-transition:opacity .5s;transition:opacity .5s}.swagger-ui .checkbox label{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .checkbox p{color:#3b4151;font-family:monospace;font-style:italic;font-weight:400!important;font-weight:600;margin:0!important}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{background:#e8e8e8;border-radius:1px;-webkit-box-shadow:0 0 0 2px #e8e8e8;box-shadow:0 0 0 2px #e8e8e8;cursor:pointer;display:inline-block;-webkit-box-flex:0;-ms-flex:none;flex:none;height:16px;margin:0 8px 0 0;padding:5px;position:relative;top:3px;width:16px}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{-webkit-transform:scale(.9);transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='8' viewBox='3 7 10 8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%2341474E' fill-rule='evenodd' d='M6.333 15L3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z'/%3E%3C/svg%3E") 50% no-repeat}.swagger-ui .dialog-ux{bottom:0;left:0;position:fixed;right:0;top:0;z-index:9999}.swagger-ui .dialog-ux .backdrop-ux{background:rgba(0,0,0,.8);bottom:0;left:0;position:fixed;right:0;top:0}.swagger-ui .dialog-ux .modal-ux{background:#fff;border:1px solid #ebebeb;border-radius:4px;-webkit-box-shadow:0 10px 30px 0 rgba(0,0,0,.2);box-shadow:0 10px 30px 0 rgba(0,0,0,.2);left:50%;max-width:650px;min-width:300px;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:100%;z-index:9999}.swagger-ui .dialog-ux .modal-ux-content{max-height:540px;overflow-y:auto;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{color:#41444e;color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .dialog-ux .modal-ux-content h4{color:#3b4151;font-family:sans-serif;font-size:18px;font-weight:600;margin:15px 0 0}.swagger-ui .dialog-ux .modal-ux-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #ebebeb;display:-webkit-box;display:-ms-flexbox;display:flex;padding:12px 0}.swagger-ui .dialog-ux .modal-ux-header .close-modal{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0 10px}.swagger-ui .dialog-ux .modal-ux-header h3{color:#3b4151;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:20px;font-weight:600;margin:0;padding:0 20px}.swagger-ui .model{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600}.swagger-ui .model .deprecated span,.swagger-ui .model .deprecated td{color:#a0a0a0!important}.swagger-ui .model .deprecated>td:first-of-type{text-decoration:line-through}.swagger-ui .model-toggle{cursor:pointer;display:inline-block;font-size:10px;margin:auto .3em;position:relative;top:6px;-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.swagger-ui .model-toggle.collapsed{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.swagger-ui .model-toggle::after{background:url('data:image/svg+xml;charset=utf-8,') 50% no-repeat;background-size:100%;content:"";display:block;height:20px;width:20px}.swagger-ui .model-jump-to-path{cursor:pointer;position:relative}.swagger-ui .model-jump-to-path .view-line-link{cursor:pointer;position:absolute;top:-.4em}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{background:rgba(0,0,0,.7);border-radius:4px;color:#ebebeb;padding:.1em .5em;position:absolute;top:-1.8em;visibility:hidden;white-space:nowrap}.swagger-ui .model p{margin:0 0 1em}.swagger-ui .model .property{color:#999;font-style:italic}.swagger-ui .model .property.primitive{color:#6b6b6b}.swagger-ui table.model tr.description{color:#666;font-weight:400}.swagger-ui table.model tr.description td:first-child,.swagger-ui table.model tr.property-row.required td:first-child{font-weight:700}.swagger-ui table.model tr.property-row td{vertical-align:top}.swagger-ui table.model tr.property-row td:first-child{padding-right:.2em}.swagger-ui table.model tr.property-row .star{color:red}.swagger-ui table.model tr.extension{color:#777}.swagger-ui table.model tr.extension td:last-child{vertical-align:top}.swagger-ui section.models{border:1px solid rgba(59,65,81,.3);border-radius:4px;margin:30px 0}.swagger-ui section.models .pointer{cursor:pointer}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{border-bottom:1px solid rgba(59,65,81,.3);margin:0 0 5px}.swagger-ui section.models h4{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#606060;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;font-family:sans-serif;font-size:16px;margin:0;padding:10px 20px 10px 10px;-webkit-transition:all .2s;transition:all .2s}.swagger-ui section.models h4 svg{-webkit-transition:all .4s;transition:all .4s}.swagger-ui section.models h4 span{-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{color:#707070;font-family:sans-serif;font-size:16px;margin:0 0 10px}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{background:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;position:relative;-webkit-transition:all .5s;transition:all .5s}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-container .models-jump-to-path{opacity:.65;position:absolute;right:5px;top:8px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{background:rgba(0,0,0,.1);border-radius:4px;display:inline-block;padding:10px}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-box.deprecated{opacity:.5}.swagger-ui .model-title{color:#505050;font-family:sans-serif;font-size:16px}.swagger-ui .model-title img{bottom:0;margin-left:1em;position:relative}.swagger-ui .model-deprecated-warning{color:#f93e3e;font-family:sans-serif;font-size:16px;font-weight:600;margin-right:1em}.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-name{display:inline-block;margin-right:1em}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#606060}.swagger-ui .servers>label{color:#3b4151;font-family:sans-serif;font-size:12px;margin:-20px 15px 0 0}.swagger-ui .servers>label select{max-width:100%;min-width:130px}.swagger-ui .servers h4.message{padding-bottom:2em}.swagger-ui .servers table tr{width:30em}.swagger-ui .servers table td{display:inline-block;max-width:15em;padding-bottom:10px;padding-top:10px;vertical-align:middle}.swagger-ui .servers table td:first-of-type{padding-right:1em}.swagger-ui .servers table td input{height:100%;width:100%}.swagger-ui .servers .computed-url{margin:2em 0}.swagger-ui .servers .computed-url code{display:inline-block;font-size:16px;margin:0 1em;padding:4px}.swagger-ui .servers-title{font-size:12px;font-weight:700}.swagger-ui .operation-servers h4.message{margin-bottom:2em}.swagger-ui table{border-collapse:collapse;padding:0 10px;width:100%}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{padding:0 0 0 2em;width:174px}.swagger-ui table.headers td{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600;vertical-align:middle}.swagger-ui table.headers .header-example{color:#999;font-style:italic}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{min-width:6em;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{border-bottom:1px solid rgba(59,65,81,.2);color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;padding:12px 0;text-align:left}.swagger-ui .parameters-col_description{margin-bottom:2em;width:99%}.swagger-ui .parameters-col_description input[type=text]{max-width:340px;width:100%}.swagger-ui .parameters-col_description select{border-width:1px}.swagger-ui .parameter__name{color:#3b4151;font-family:sans-serif;font-size:16px;font-weight:400;margin-right:.75em}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required span{color:red}.swagger-ui .parameter__name.required::after{color:rgba(255,0,0,.6);content:"required";font-size:10px;padding:5px;position:relative;top:-6px}.swagger-ui .parameter__extension,.swagger-ui .parameter__in{color:grey;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__deprecated{color:red;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__empty_value_toggle{display:block;font-size:13px;padding-bottom:12px;padding-top:5px}.swagger-ui .parameter__empty_value_toggle input{margin-right:7px}.swagger-ui .parameter__empty_value_toggle.disabled{opacity:.7}.swagger-ui .table-container{padding:20px}.swagger-ui .response-col_description{width:99%}.swagger-ui .response-col_links{min-width:6em}.swagger-ui .response__extension{color:grey;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .topbar{background-color:#1b1b1b;padding:10px 0}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .topbar a{color:#fff;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:1.5em;font-weight:700;max-width:300px;text-decoration:none}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:3;-ms-flex:3;flex:3;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .topbar .download-url-wrapper input[type=text]{border:2px solid #62a03f;border-radius:4px 0 0 4px;margin:0;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0;max-width:600px;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label span{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:16px;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{border:2px solid #62a03f;-webkit-box-shadow:none;box-shadow:none;-webkit-box-flex:2;-ms-flex:2;flex:2;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .download-url-button{background:#62a03f;border:none;border-radius:0 4px 4px 0;color:#fff;font-family:sans-serif;font-size:16px;font-weight:700;padding:4px 30px}.swagger-ui .info{margin:50px 0}.swagger-ui .info.failed-config{margin-left:auto;margin-right:auto;max-width:880px;text-align:center}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info pre{font-size:14px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{color:#3b4151;font-family:sans-serif}.swagger-ui .info a{color:#4990e2;font-family:sans-serif;font-size:14px;-webkit-transition:all .4s;transition:all .4s}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300!important;font-weight:600;margin:0}.swagger-ui .info .title{color:#3b4151;font-family:sans-serif;font-size:36px;margin:0}.swagger-ui .info .title small{background:#7d8492;border-radius:57px;display:inline-block;font-size:10px;margin:0 0 0 5px;padding:2px 4px;position:relative;top:-5px;vertical-align:super}.swagger-ui .info .title small.version-stamp{background-color:#89bf04}.swagger-ui .info .title small pre{color:#fff;font-family:sans-serif;margin:0;padding:0}.swagger-ui .auth-btn-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:10px 0}.swagger-ui .auth-btn-wrapper .btn-done{margin-right:1em}.swagger-ui .auth-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{margin-right:10px;padding-right:20px}.swagger-ui .auth-container{border-bottom:1px solid #ebebeb;margin:0 0 10px;padding:10px 20px}.swagger-ui .auth-container:last-of-type{border:0;margin:0;padding:10px 20px}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{background-color:#fee;border-radius:4px;color:red;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:1em;padding:10px}.swagger-ui .auth-container .errors b{margin-right:1em;text-transform:capitalize}.swagger-ui .scopes h2{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .scopes h2 a{color:#4990e2;cursor:pointer;font-size:12px;padding-left:10px;text-decoration:underline}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{-webkit-animation:scaleUp .5s;animation:scaleUp .5s;background:rgba(249,62,62,.1);border:2px solid #f93e3e;border-radius:4px;margin:20px;padding:10px 20px}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{color:#3b4151;font-family:monospace;font-size:14px;font-weight:600;margin:0}.swagger-ui .errors-wrapper .errors small{color:#606060}.swagger-ui .errors-wrapper .errors .message{white-space:pre-line}.swagger-ui .errors-wrapper .errors .message.thrown{max-width:100%}.swagger-ui .errors-wrapper .errors .error-line{cursor:pointer;text-decoration:underline}.swagger-ui .errors-wrapper hgroup{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .errors-wrapper hgroup h4{color:#3b4151;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:sans-serif;font-size:20px;margin:0}@-webkit-keyframes scaleUp{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes scaleUp{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.swagger-ui .Resizer.vertical.disabled{display:none}.swagger-ui .markdown p,.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown p,.swagger-ui .renderedMarkdown pre{margin:1em auto;word-break:break-all;word-break:break-word}.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown pre{background:none;color:#000;font-weight:400;padding:0;white-space:pre-wrap}.swagger-ui .markdown code,.swagger-ui .renderedMarkdown code{background:rgba(0,0,0,.05);border-radius:4px;color:#9012fe;font-family:monospace;font-size:14px;font-weight:600;padding:5px 7px}.swagger-ui .markdown pre>code,.swagger-ui .renderedMarkdown pre>code{display:block} + +/*! + Theme: Solarized Dark + Author: Ethan Schoonover (modified by aramisgithub) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#363636;background:#002b36}.hljs::-moz-selection,.hljs ::-moz-selection{background-color:#586e75;color:#93a1a1}.hljs::selection,.hljs ::selection{background-color:#586e75;color:#93a1a1}.hljs-comment{color:#657b83}.hljs-tag{color:#839496}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#93a1a1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#dc322f}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#2266ef}.hljs-class .hljs-title,.hljs-strong,.hljs-title,.hljs-title.class_{color:#b58900}.hljs-strong{font-weight:700}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#c506e4}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#2aa198}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#268bd2}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#6c71c4}.hljs-emphasis{color:#6c71c4;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#d33682}.hljs-meta-keyword,.hljs-meta .hljs-keyword{font-weight:700}@media screen and (max-width:468.5px){.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{width:calc(100vw - 8rem)}}@media screen and (max-width:700px){.doc table.overview-table,.doc table.overview-table>*>tr{display:-webkit-box;display:-ms-flexbox;display:flex}.doc table.overview-table>*>tr{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.doc .sidebarblock>.content>.title{text-align:inherit;font-size:1.15em}.toolbar-search{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.overview-box .title,.toolbar-search{display:-webkit-box;display:-ms-flexbox;display:flex}.overview-box .title{font-family:Inter,sans-serif;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.overview-box>.content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.doc .overview-box .image>img{max-width:unset;width:2rem;padding-top:2rem}.doc .overview-box .overview-title{background-color:unset;border:none}.doc .overview-box .overview-title content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.overview-box .title a span{padding-right:1.5em}.doc .sidebarblock.overview-box{background-color:unset;padding-bottom:2rem;padding-left:2rem;min-height:15rem}.doc .overview-banner>.content>.title{font-size:2em!important;font-family:Inter,sans-serif}.doc table.tableblock.overview-table{-webkit-box-shadow:none!important;box-shadow:none!important}.doc table.overview-table>*>tr>*{border:none}.navbar{padding-inline:1rem}@media screen and (min-width:1024px){.toolbar{padding:0 2em 0 1.5em}main>.content{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;left:-150px}.navbar{padding:2rem;z-index:11}.navbar-brand{padding-left:unset;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item.is-hoverable:hover .navbar-dropdown{top:33px;z-index:3}.toolbar-search{display:none}.edit-this-page{display:-webkit-box;display:-ms-flexbox;display:flex}}.top-logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.5rem}.medium-zoom-image{z-index:999}.page-versions{margin:unset}.page-versions .version-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;background:-webkit-gradient(linear,left top,left bottom,from(#f7f9fb),to(#f7f9fb)) no-repeat;background:linear-gradient(180deg,#f7f9fb 0,#f7f9fb) no-repeat;margin:1.375rem .5rem 0 0;padding:.5rem;position:absolute;top:0;right:0;white-space:nowrap;min-width:unset}.DocSearch-Button{font-weight:400;padding-left:1rem}.search-box{padding-right:2em;padding-left:1em;width:100%;-ms-flex-item-align:start;align-self:start;height:2.4rem}.search-box .DocSearch-Button{border-radius:20px;width:100%}.algolia-autocomplete{width:100%;-ms-flex-item-align:center;align-self:center;height:2.5rem}.navbar-brand{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.starknet-logo{background-image:url(../img/starknet-logo-white.svg);background-repeat:no-repeat;display:inline-block;height:40px}.docs-logo{font-size:1.1875rem;line-height:1.44;letter-spacing:.01em;color:#363636}.theme-toggle{background-repeat:no-repeat;background-position:50%;-ms-flex-item-align:start;align-self:start;padding:1.2rem;border-style:none;border-radius:6px}.theme-toggle-container{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@media screen and (max-width:1023.5px){.navbar-menu{position:relative;min-height:calc(100vh - 13rem)}.theme-toggle{margin-inline:auto}}.theme-toggle.dark:hover{background-image:url(../img/moon.svg)}.pencil{background-image:url(../img/pencil.svg);background-repeat:no-repeat;height:1rem;width:1rem;padding:0 1em;vertical-align:middle}.navbar-end .navbar-item .navbar-dropdown{padding-top:.8rem}.navbar-end .navbar-item.has-dropdown,.navbar-end .navbar-item.has-dropdown .navbar-link{-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid transparent;z-index:4;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.navbar-end .navbar-item.has-dropdown:hover{border-bottom:unset!important;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:.25rem .25rem 0 0}.navbar-end .navbar-item.has-dropdown:hover .navbar-link::after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.edit-this-page:hover a{color:#4070f4;text-decoration:none}.doc{font-family:Inter,Roboto,sans-serif;max-width:72rem;padding:0 1rem 2rem}.doc .imageblock{border-radius:.5rem}.doc .imageblock .title{margin:unset}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption{padding:.5em}.doc a:hover{color:#4070f4;text-decoration:underline}.doc .listingblock,.exampleblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.doc .listingblock .title,.exampleblock .title{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center}@media screen and (max-width:1023.5px){footer .footerdiv{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1.3rem}.footer_icon p{display:none}.footer>.community_icons{width:10em}}footer .footerdiv{padding:1rem 2rem;-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}footer.footer,footer .footerdiv{display:-webkit-box;display:-ms-flexbox;display:flex}footer.footer{padding:unset}.community_icons{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:2.5rem}.community_icons,.footer_icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.footer_icon{padding:0 0 0 1.5rem;height:1.25rem;background-size:1.25rem;background-repeat:no-repeat}.footer_icon p{font-size:.875rem;margin-left:.6rem}.footer_icon svg{fill:#1b1b1b}.footer-left{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:20px}.footer-network-info{border-radius:.5rem;padding-left:.4rem;padding-right:.4rem;background-color:#ffcd9a;color:#000}.vertical-divider{width:1px;height:2rem;background:#efefef;border-radius:2px}.hr-divider{background-color:#efefef;height:1px;margin-inline:1rem;margin-block:1.625rem}.doc details{margin-left:0;padding:1rem;border-radius:.5rem}.doc details summary{padding-left:1.5rem}.doc details.result{margin-top:1rem}.doc details.result>.content{margin:.5rem 0 0}.doc details>summary::before{border:none;background-repeat:no-repeat}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 14rem)}#toc{border-radius:.5rem;margin-top:1.5rem}#toctitle{font-family:Inter,Roboto,sans-serif;font-size:29px;padding:1.25rem 1.25rem 0}#toc .sectlevel1{font-weight:450;list-style:none;padding:0 1.25rem 1.25rem}#toc .sectlevel1>li{padding:.75rem 0 0;font-size:16px}#toc .sectlevel2{font-weight:400;padding-top:.5rem;list-style:disc}.doc table.tableblock{border-collapse:collapse;border-radius:.5rem;border-style:hidden}.doc table.tableblock,.doc table.tableblock>*>tr>*{border-radius:.5rem}.doc table.tableblock>*>tr>*{border-left-width:0;border-right-width:0}.doc table.grid-all>thead th,.doc table.grid-rows>thead th{font-weight:600;line-height:2;border-width:0}.dark-mode-label,.light-mode-label{display:none;text-transform:uppercase;font-size:.75rem;font-weight:500}.light-mode-label{color:#fff}.dark-mode-label{color:#000}.desktop-only{display:none}@media screen and (min-width:1024px){.desktop-only{display:block}.doc{padding:0 4rem 2rem 5.5rem}.mobile-only{display:none}footer.footer{position:sticky;bottom:0;z-index:10}.top-logo{width:16rem}}.mask-svg-center{mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}.dark-mode-label{display:block}@media screen and (min-width:1024px){.dark-mode-label{display:none}}.DocSearch-Button{background:#fff;background-position:1em;background-repeat:no-repeat;border:1px solid #dfe6f2;border-radius:53px}.DocSearch-Button-Container .DocSearch-Search-Icon{color:#969faf}.navbar{background:#fff}.navbar-end .navbar-item .navbar-dropdown{border-top:1px solid #efefef}.navbar-end .navbar-item.has-dropdown:hover .navbar-link{border-left:1px solid #efefef;border-top:1px solid #efefef;border-right:1px solid #efefef}.doc .sidebarblock.overview-box{border:1px solid #ccc}.navbar-brand .navbar-item:first-child{color:#000}.starknet-logo{background-image:url(../img/starknet-logo-dark.svg);width:173px}.toolbar{background-color:#fbfbfb;border-top:1px solid #efefef}.theme-toggle{background-image:url(../img/moon.svg);background-color:#fff}.theme-toggle:hover{background-color:#f3f8fb}.nav-toggle{background:url(../img/collapse-icon-outlined.svg) no-repeat 50% 47.5%}.nav{border-right:1px solid #efefef}.nav-panel-explore .component .version a{border:1px solid #ccc;color:#8a8ca2}.nav-panel-explore .context:hover{color:#4070f4;background-color:#f7f9fb}.doc .sidebarblock{background-color:#dfe6f2}.doc .imageblock{border:1px solid #dfe6f2}.doc .colist>table code,.doc h2 code,.doc h3 code,.doc p code,.doc thead code{background-color:#ebf2ff;color:#6b7280}.doc .colist>table a code,.doc p a code,.doc thead a code{color:#5c94ff!important}pre{padding:0}footer.footer{border-top:1px solid #efefef}.doc details{border:1px solid #dfe6f2}.doc table.tableblock{background-color:#fff;-webkit-box-shadow:0 0 0 1px #ccc;box-shadow:0 0 0 1px #ccc}.doc table.tableblock,.doc table.tableblock>*>tr>*{border-color:#efefef}.components-versions{border-right:1px solid #efefef}#toc,#toc .sectlevel1>li a,#toc .sectlevel1>li a:visited{color:#254898}#toc{background-color:rgba(197,207,228,.2)}.doc details>summary::after{left:0;background-image:url(../img/chevron-down.svg)}.doc details[open]>summary::after{background-image:url(../img/chevron-up-black.svg)}.page-components{position:relative;line-height:1}@media screen and (max-width:1024px){.toolbar .page-components,.toolbar .page-versions{display:none}}.page-components .component-menu-toggle{color:inherit;background:url(../img/chevron.svg) no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;border:none;outline:none;line-height:inherit;padding:.5rem 1.5rem .5rem 0;position:relative;z-index:3}.page-components .component-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;background:-webkit-gradient(linear,left top,left bottom,from(#f7f9fb),to(#f7f9fb)) no-repeat;background:linear-gradient(180deg,#f7f9fb 0,#f7f9fb) no-repeat;margin:1.375rem 0 0;padding:.5rem;position:absolute;top:0;white-space:nowrap}.page-components:not(.is-active) .component-menu{display:none}.page-components .component{display:block;padding-top:.5rem}.page-components .component.is-current{display:none}.page-components .component.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none} + +/*! @algolia/autocomplete-theme-classic 1.7.4 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */.aa-Autocomplete *,.aa-DetachedFormContainer *,.aa-Panel *{-webkit-box-sizing:border-box;box-sizing:border-box}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:#262627;margin:0}.aa-Form{background-color:#fff;border:1px solid rgba(128,126,163,.8);width:100%}.aa-Form[focus-within]{-webkit-box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);-webkit-box-shadow:#5c94ff 0 0 0 2px,inset #5c94ff 0 0 0 2px;box-shadow:0 0 0 2px #5c94ff,inset 0 0 0 2px #5c94ff}.aa-Form:focus-within{-webkit-box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);-webkit-box-shadow:#5c94ff 0 0 0 2px,inset #5c94ff 0 0 0 2px;box-shadow:0 0 0 2px #5c94ff,inset 0 0 0 2px #5c94ff}.aa-InputWrapperPrefix{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;height:44px;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.aa-Label,.aa-LoadingIndicator{cursor:auto;-ms-flex-negative:0;flex-shrink:0;height:100%;padding:0;text-align:left}.aa-Label svg,.aa-LoadingIndicator svg{color:#3e34d3;color:#5c94ff;height:auto;max-height:20px;stroke-width:1.6;width:20px}.aa-LoadingIndicator,.aa-SubmitButton{height:100%;padding-left:11px;padding-right:8px;width:47px}@media (hover:none) and (pointer:coarse){.aa-LoadingIndicator,.aa-SubmitButton{padding-left:3px;width:39px}}.aa-SubmitButton{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0}.aa-LoadingIndicator{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.aa-LoadingIndicator[hidden]{display:none}.aa-InputWrapper{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3;position:relative;width:100%}.aa-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:#262627;color:#363636;font:inherit;height:44px;padding:0;width:100%}.aa-Input::-moz-placeholder{color:rgba(128,126,163,.6);color:#858585;opacity:1}.aa-Input:-ms-input-placeholder{color:rgba(128,126,163,.6);color:#858585;opacity:1}.aa-Input::-webkit-input-placeholder{color:rgba(128,126,163,.6);color:#858585;opacity:1}.aa-Input::-ms-input-placeholder{color:rgba(128,126,163,.6);color:#858585;opacity:1}.aa-Input::placeholder{color:rgba(128,126,163,.6);color:#858585;opacity:1}.aa-Input:focus{border-color:none;-webkit-box-shadow:none;box-shadow:none;outline:none}.aa-Input::-webkit-search-cancel-button,.aa-Input::-webkit-search-decoration,.aa-Input::-webkit-search-results-button,.aa-Input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.aa-InputWrapperSuffix{-webkit-box-align:center;height:44px;-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.aa-ClearButton,.aa-InputWrapperSuffix{-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.aa-ClearButton{-webkit-box-align:center;background:none;border:0;color:rgba(128,126,163,.6);color:#858585;cursor:pointer;height:100%;margin:0;padding:0 12.83328px}@media (hover:none) and (pointer:coarse){.aa-ClearButton{padding:0 10.16672px}}.aa-ClearButton:focus,.aa-ClearButton:hover{color:#262627;color:#363636}.aa-ClearButton[hidden]{display:none}.aa-ClearButton svg{stroke-width:1.6;width:20px}.aa-Panel{border-radius:4px;-webkit-box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);-webkit-box-shadow:0 4px 4px rgba(0,0,0,.25),0 1px 47px -3px rgba(0,0,0,.15),0 60px 70px -2px rgba(0,0,0,.08);box-shadow:0 4px 4px rgba(0,0,0,.25),0 1px 47px -3px rgba(0,0,0,.15),0 60px 70px -2px rgba(0,0,0,.08);margin:8px 0 0;position:absolute}@media screen and (prefers-reduced-motion){.aa-Panel{-webkit-transition:none;transition:none}}.aa-Panel button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;margin:0;padding:0}.aa-PanelLayout{padding:0}.aa-PanelLayoutColumns--twoGolden{display:grid;grid-template-columns:39.2% auto;overflow:hidden;padding:0}.aa-PanelLayoutColumns--two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));overflow:hidden;padding:0}.aa-PanelLayoutColumns--three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;padding:0}.aa-Panel--stalled .aa-Source{-webkit-filter:grayscale(1);filter:grayscale(1);opacity:.8}.aa-Panel--scrollable{margin:0;max-height:650px;overflow-x:hidden;overflow-y:auto;overflow-y:overlay;padding:8px;scrollbar-color:#8a8ca2 transparent;scrollbar-width:thin}.aa-Panel--scrollable::-webkit-scrollbar{width:13px;width:7px}.aa-Panel--scrollable::-webkit-scrollbar-track{background-color:transparent}.aa-Panel--scrollable::-webkit-scrollbar-thumb{background-color:#8a8ca2;border-radius:9999px}.aa-Source{margin:0;padding:0;position:relative;width:100%}.aa-Source:empty{display:none}.aa-SourceNoResults{font-size:1em;margin:0;padding:16px}.aa-List{list-style:none;margin:0}.aa-List,.aa-SourceHeader{padding:0;position:relative}.aa-SourceHeader{margin:8px .5em 8px 0}.aa-SourceHeader:empty{display:none}.aa-SourceHeaderTitle{background:#fff;color:#3e34d3;color:#5c94ff;font-size:.8em;font-weight:600}.aa-SourceHeaderLine{border-bottom:1px solid #5c94ff;display:block;height:2px;left:0;margin:0;opacity:.3;padding:0;position:absolute;right:0;top:8px;z-index:9998}.aa-SourceFooterSeeAll{background:-webkit-gradient(linear,left top,left bottom,from(#fff),to(rgba(128,126,163,.14)));background:linear-gradient(180deg,#fff,rgba(128,126,163,.14));border:1px solid #858585;border-radius:5px;-webkit-box-shadow:inset 0 0 2px #fff,0 2px 2px -1px rgba(76,69,88,.15);box-shadow:inset 0 0 2px #fff,0 2px 2px -1px rgba(76,69,88,.15);color:inherit;font-size:.95em;font-weight:500;padding:.475em 1em .6em;text-decoration:none}.aa-SourceFooterSeeAll:focus,.aa-SourceFooterSeeAll:hover{border:1px solid #5c94ff;color:#3e34d3;color:#5c94ff}.aa-Item{border-radius:3px;padding:4px}.aa-Item[aria-selected=true]{background-color:rgba(179,173,214,.205)}.aa-Item[aria-selected=true] .aa-ActiveOnly,.aa-Item[aria-selected=true] .aa-ItemActionButton{visibility:visible}.aa-ItemIcon{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border-radius:3px;-webkit-box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);-webkit-box-shadow:inset 0 0 0 1px #ebebeb;box-shadow:inset 0 0 0 1px #ebebeb;color:#7777a3;color:#858585;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;font-size:.7em;height:28px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden;stroke-width:1.6;text-align:center;width:28px}.aa-ItemIcon img{height:auto;max-height:20px;max-width:20px;width:auto}.aa-ItemIcon svg{height:20px;width:20px}.aa-ItemIcon--alignTop{-ms-flex-item-align:start;align-self:flex-start}.aa-ItemIcon--noBorder{background:none;-webkit-box-shadow:none;box-shadow:none}.aa-ItemIcon--picture{height:96px;width:96px}.aa-ItemIcon--picture img{max-height:100%;max-width:100%;padding:8px}.aa-ItemContent{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:grid;grid-gap:8px;gap:8px;grid-auto-flow:column;line-height:1.25em;overflow:hidden}.aa-ItemContent:empty{display:none}.aa-ItemContent mark{background:none;color:#262627;color:#363636;font-style:normal;font-weight:700}.aa-ItemContent--dual{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;text-align:left}.aa-ItemContent--dual .aa-ItemContentSubtitle,.aa-ItemContent--dual .aa-ItemContentTitle{display:block}.aa-ItemContent--indented{padding-left:36px}.aa-ItemContentBody{display:grid;grid-gap:4px;gap:4px}.aa-ItemContentTitle{display:inline-block;margin:0 .5em 0 0;max-width:100%;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.aa-ItemContentSubtitle{font-size:.92em}.aa-ItemContentSubtitleIcon::before{border-color:hsla(0,0%,52.2%,.64);border-style:solid;content:"";display:inline-block;left:1px;position:relative;top:-3px}.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon::before{border-width:0 0 1.5px;margin-left:8px;margin-right:4px;width:10px}.aa-ItemContentSubtitle--standalone{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#262627;color:#363636;display:grid;grid-gap:8px;gap:8px;grid-auto-flow:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:start}.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon::before{border-radius:0 0 0 3px;border-width:0 0 1.5px 1.5px;height:8px;width:8px}.aa-ItemContentSubtitleCategory{color:#807ea3;color:#858585;font-weight:500}.aa-ItemContentDescription{color:#262627;color:#363636;font-size:.85em;max-width:100%;overflow-x:hidden;text-overflow:ellipsis}.aa-ItemContentDescription:empty{display:none}.aa-ItemContentDescription mark{background:rgba(245,223,77,.5);color:#262627;color:#363636;font-style:normal;font-weight:500}.aa-ItemContentDash{color:rgba(128,126,163,.6);color:#858585;display:none;opacity:.4}.aa-ItemContentTag{background-color:rgba(62,52,211,.2);background-color:#5c94ff;border-radius:3px;margin:0 .4em 0 0;padding:.08em .3em}.aa-ItemLink,.aa-ItemWrapper{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:inherit;display:grid;grid-gap:4px;gap:4px;grid-auto-flow:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%}.aa-ItemLink{color:inherit;text-decoration:none}.aa-ItemActions{display:grid;grid-auto-flow:column;height:100%;justify-self:end;margin:0 -5.33333px;padding:0 2px 0 0}.aa-ItemActionButton{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:0;color:rgba(128,126,163,.6);color:#858585;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;padding:0}.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:#262627;color:#363636}@media (hover:none) and (pointer:coarse){.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:inherit}}.aa-ItemActionButton svg{color:rgba(128,126,163,.6);color:#858585;margin:5.33333px;stroke-width:1.6;width:20px}.aa-ActiveOnly{visibility:hidden}.aa-PanelHeader{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#3e34d3;background:#5c94ff;color:#fff;display:grid;height:var(--aa-modal-header-height);margin:0;padding:8px 16px;position:relative}.aa-PanelHeader::after{background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(hsla(0,0%,100%,0)));background-image:linear-gradient(#fff,hsla(0,0%,100%,0));bottom:-8px;content:"";height:8px;left:0;pointer-events:none;position:absolute;right:0}.aa-PanelFooter,.aa-PanelHeader::after{z-index:9999}.aa-PanelFooter{background-color:#fff;-webkit-box-shadow:inset 0 1px 0 rgba(128,126,163,.3);box-shadow:inset 0 1px 0 rgba(128,126,163,.3);-webkit-box-shadow:inset 0 1px 0 #ebebeb;box-shadow:inset 0 1px 0 #ebebeb;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:0;padding:16px;position:relative}.aa-PanelFooter::after{background-image:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(rgba(128,126,163,.6)));background-image:linear-gradient(hsla(0,0%,100%,0),rgba(128,126,163,.6));background-image:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(#858585));background-image:linear-gradient(hsla(0,0%,100%,0),#858585);content:"";height:16px;left:0;opacity:.12;pointer-events:none;position:absolute;right:0;top:-16px;z-index:9998}.aa-DetachedContainer{background:#fff;bottom:0;-webkit-box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);-webkit-box-shadow:0 4px 4px rgba(0,0,0,.25),0 1px 47px -3px rgba(0,0,0,.15),0 60px 70px -2px rgba(0,0,0,.08);box-shadow:0 4px 4px rgba(0,0,0,.25),0 1px 47px -3px rgba(0,0,0,.15),0 60px 70px -2px rgba(0,0,0,.08);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:9999}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:8px 0 8px 2px}.aa-Panel{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;-webkit-box-shadow:none;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{border-bottom:1px solid #ebebeb;padding:8px}.aa-DetachedCancelButton{border:0;border-radius:3px;color:inherit;color:#262627;color:#363636;margin:0 0 0 8px;padding:0 8px}.aa-DetachedCancelButton:focus,.aa-DetachedCancelButton:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);-webkit-box-shadow:inset 0 0 0 1px #ebebeb;box-shadow:inset 0 0 0 1px #ebebeb}.aa-DetachedContainer--modal{border-radius:6px;top:3%}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:500px;max-height:min(600px,75vh);padding-bottom:8px;position:static}.aa-DetachedSearchButton{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;background-color:#f6f6f6;border:1px solid rgba(128,126,163,.8);border-radius:3px;color:rgba(128,126,163,.6);color:#858585;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;font:inherit;font-family:inherit;font-size:16px;font-size:14px;height:44px;margin:0;padding:0 5.5px;position:relative;text-align:left;width:100%}.aa-DetachedSearchButton:focus{border-color:#5c94ff;-webkit-box-shadow:0 0 0 3px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:0 0 0 3px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);-webkit-box-shadow:#5c94ff 0 0 0 3px,inset #5c94ff 0 0 0 2px;box-shadow:0 0 0 3px #5c94ff,inset 0 0 0 2px #5c94ff;outline:medium none currentColor}.aa-DetachedSearchButtonIcon{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#3e34d3;color:#5c94ff;cursor:auto;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:36px}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(115,114,129,.4);height:100vh;left:0;margin:0;padding:0;position:fixed;right:0;top:0;z-index:9998}.aa-GradientBottom,.aa-GradientTop{height:8px;left:0;pointer-events:none;position:absolute;right:0;z-index:9999}.aa-GradientTop{background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(hsla(0,0%,100%,0)));background-image:linear-gradient(#fff,hsla(0,0%,100%,0));top:0}.aa-GradientBottom{background-image:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(#fff));background-image:linear-gradient(hsla(0,0%,100%,0),#fff);border-bottom-left-radius:4px;border-bottom-right-radius:4px;bottom:0}@media (hover:none) and (pointer:coarse){.aa-DesktopOnly{display:none}}@media (hover:hover){.aa-TouchOnly{display:none}}@media (hover:none) and (pointer:coarse){:root{--aa-spacing-factor:1.2;--aa-action-icon-size:22px}}.aa-Panel{background-color:#fff;border-radius:0;-webkit-box-shadow:none;box-shadow:none;margin:0;overflow:hidden;-webkit-transition:opacity .2s ease-in,-webkit-filter .2s ease-in;transition:opacity .2s ease-in,-webkit-filter .2s ease-in;transition:opacity .2s ease-in,filter .2s ease-in;transition:opacity .2s ease-in,filter .2s ease-in,-webkit-filter .2s ease-in}.aa-Item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:grid;min-height:40px;padding:0;margin-bottom:8px;border-radius:8px;background-color:#fbfbfb}.aa-ItemLink,.aa-ItemWrapper{padding:16px}.aa-Item:last-child{margin-bottom:24px}.aa-Item[aria-selected=true]{background-color:#5c94ff;color:#fff}.aa-Item[aria-selected=true] svg{color:#fff}.aa-DetachedContainer .aa-SourceHeader{margin:16px 0 12px}.aa-PanelLayout{height:100%;margin:0;max-height:650px;overflow-y:auto;padding:16px 1.5rem;margin-inline:1rem;position:relative;text-align:left}.aa-DetachedSearchButton{min-width:200px;border-radius:8px;border:0}.aa-DetachedSearchButtonIcon{color:inherit}.aa-DetachedSearchButton svg{width:16px}.aa-DetachedContainer--modal{border-radius:16px;bottom:inherit;height:auto;margin:0 auto;max-width:680px;position:absolute;top:10%}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:#363636;font-family:inherit;font-size:16px;font-size:14px;font-weight:400;line-height:1em;margin:0 .5rem;padding:0;text-align:left}.aa-DetachedFormContainer{border-bottom:1px solid #5c94ff;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-inline:2rem}.aa-DetachedFormContainer,.aa-Form{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0}.aa-Form{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#f6f6f6;border:0 solid rgba(128,126,163,.8);border-radius:3px;line-height:1em;position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1;padding-block:8px;background:transparent}.aa-SubmitButton{line-height:1;width:auto;margin:0;padding:0 16px 0 0}.aa-Form[focus-within]{border-color:#5c94ff;-webkit-box-shadow:none;box-shadow:none;outline:medium none currentColor}.aa-Form:focus-within{border-color:#5c94ff;-webkit-box-shadow:none;box-shadow:none;outline:medium none currentColor}.aa-Input::-webkit-input-placeholder{font-weight:400;color:inherit}.aa-Input::-moz-placeholder{font-weight:400;color:inherit}.aa-Input:-ms-input-placeholder{font-weight:400;color:inherit}.aa-Input::-ms-input-placeholder{font-weight:400;color:inherit}.aa-Input::placeholder{font-weight:400;color:inherit}.aa-SourceHeaderTitle{display:inline-block;font-size:14px;line-height:17px;font-weight:700;margin:0;padding:0 8px 0 0;position:relative;z-index:9999;color:inherit}.aa-DetachedCancelButton{background:none;cursor:pointer;font:inherit;border-radius:8px;border:1px solid #ebebeb;padding:10px 16px;margin:auto 0}.autocomplete-root{position:absolute;top:4.88889rem;left:30px;margin-left:20px;width:100%}.autocomplete-root .aa-Autocomplete .aa-Form{line-height:100%;color:#858585;padding:4px 8px;border-radius:.5rem;background-color:#f6f6f6;border:none}.aa-ItemContent{gap:16px}.aa-ItemContent mark{color:inherit;border-bottom:2px solid #000;font-weight:600}.aa-ItemActionButtonDanger:hover svg{fill:#ff4557}.aa-ItemLink:hover{text-decoration:none}.aa-Item[aria-selected=true] .aa-ItemContentSubtitle{color:inherit}.aa-ItemContentSubtitle{font-size:12px;font-weight:500;line-height:1.5;color:#858585;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aa-ItemContentTitle{line-height:1.7}.aa-Item[aria-selected=true] .aa-ItemContentTitle{color:inherit}.aa-Item[aria-selected=true] .aa-ItemContent mark{border-color:inherit}.aa-DetachedSearchButton:focus{-webkit-box-shadow:#5c94ff 0 0 0 0,inset #5c94ff 0 0 0 2px;box-shadow:0 0 0 0 #5c94ff,inset 0 0 0 2px #5c94ff}.aa-SourceNoResults{padding:1rem 0}@media screen and (max-width:680px){.aa-DetachedSearchButton:focus{-webkit-box-shadow:none;box-shadow:none;outline:none;border:none}.aa-DetachedSearchButton{background-color:transparent}}@media screen and (min-width:680px){.autocomplete-root{position:static;width:min(300px,50%)}}@media screen and (min-width:1024px){.autocomplete-root{margin-left:0;width:min(484px,50%)}} \ No newline at end of file diff --git a/pr-1359/_/css/vendor/tabs.css b/pr-1359/_/css/vendor/tabs.css new file mode 100644 index 0000000000..a1684b492d --- /dev/null +++ b/pr-1359/_/css/vendor/tabs.css @@ -0,0 +1 @@ +/*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */.tabs{margin-bottom:1.25em}.tablist>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin:0;padding:0}.tablist>ul,.tablist>ul li{display:-webkit-box;display:-ms-flexbox;display:flex}.tablist>ul li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;cursor:pointer;font-weight:700;line-height:1.5;padding:.25em 1em;position:relative}.tablist>ul li:focus-visible{outline:none}.tablist.ulist,.tablist.ulist>ul li{margin-top:20px}.tablist.ulist>ul li+li{margin-left:.25em}.tabs.is-loading .tablist li:not(:first-child),.tabs:not(.is-loading) .tablist li:not(.is-selected){background-color:#f5f5f5}.tabs.is-loading .tablist li:first-child::after,.tabs:not(.is-loading) .tablist li.is-selected::after{background-color:inherit;content:"";display:block;height:3px;position:absolute;bottom:-1.5px;left:0;right:0}.tablist>ul p{line-height:inherit;margin:0}.tabpanel{background-color:#fff;padding:1.25em}.tablist>ul li,.tabpanel{border:1px solid #dcdcdc}.tablist>ul li{border-bottom:0}.tabs.is-loading .tabpanel+.tabpanel,.tabs:not(.is-loading) .tabpanel.is-hidden{display:none}.tabpanel>:first-child{margin-top:0}#content .tabpanel>:last-child,#content .tabpanel>:last-child>:last-child,#content .tabpanel>:last-child>:last-child>li:last-child>:last-child{margin-bottom:0}.tablecontainer{overflow-x:auto}#content .tablecontainer{margin-bottom:1.25em}#content .tablecontainer>table.tableblock{margin-bottom:0} \ No newline at end of file diff --git a/pr-1359/_/font/FiraCode-Medium.woff b/pr-1359/_/font/FiraCode-Medium.woff new file mode 100644 index 0000000000..19251b0f36 Binary files /dev/null and b/pr-1359/_/font/FiraCode-Medium.woff differ diff --git a/pr-1359/_/font/FiraCode-Regular.woff b/pr-1359/_/font/FiraCode-Regular.woff new file mode 100644 index 0000000000..8816b695b3 Binary files /dev/null and b/pr-1359/_/font/FiraCode-Regular.woff differ diff --git a/pr-1359/_/font/IBMPlexSans-Bold.ttf b/pr-1359/_/font/IBMPlexSans-Bold.ttf new file mode 100644 index 0000000000..71cad9d3be Binary files /dev/null and b/pr-1359/_/font/IBMPlexSans-Bold.ttf differ diff --git a/pr-1359/_/font/IBMPlexSans-Bold.woff b/pr-1359/_/font/IBMPlexSans-Bold.woff new file mode 100644 index 0000000000..a5331e3b53 Binary files /dev/null and b/pr-1359/_/font/IBMPlexSans-Bold.woff differ diff --git a/pr-1359/_/font/IBMPlexSans-Medium.ttf b/pr-1359/_/font/IBMPlexSans-Medium.ttf new file mode 100644 index 0000000000..ec75fc86cb Binary files /dev/null and b/pr-1359/_/font/IBMPlexSans-Medium.ttf differ diff --git a/pr-1359/_/font/IBMPlexSans-Medium.woff b/pr-1359/_/font/IBMPlexSans-Medium.woff new file mode 100644 index 0000000000..22034ea894 Binary files /dev/null and b/pr-1359/_/font/IBMPlexSans-Medium.woff differ diff --git a/pr-1359/_/font/IBMPlexSans-Regular.ttf b/pr-1359/_/font/IBMPlexSans-Regular.ttf new file mode 100644 index 0000000000..f78a2d78f5 Binary files /dev/null and b/pr-1359/_/font/IBMPlexSans-Regular.ttf differ diff --git a/pr-1359/_/font/IBMPlexSans-Regular.woff b/pr-1359/_/font/IBMPlexSans-Regular.woff new file mode 100644 index 0000000000..80e5543fb8 Binary files /dev/null and b/pr-1359/_/font/IBMPlexSans-Regular.woff differ diff --git a/pr-1359/_/font/IBMPlexSans-SemiBold.ttf b/pr-1359/_/font/IBMPlexSans-SemiBold.ttf new file mode 100644 index 0000000000..6add7e14e5 Binary files /dev/null and b/pr-1359/_/font/IBMPlexSans-SemiBold.ttf differ diff --git a/pr-1359/_/font/IBMPlexSans-SemiBold.woff b/pr-1359/_/font/IBMPlexSans-SemiBold.woff new file mode 100644 index 0000000000..618ac3c1f1 Binary files /dev/null and b/pr-1359/_/font/IBMPlexSans-SemiBold.woff differ diff --git a/pr-1359/_/font/Inter-Bold.woff b/pr-1359/_/font/Inter-Bold.woff new file mode 100644 index 0000000000..eaf3d4bfd7 Binary files /dev/null and b/pr-1359/_/font/Inter-Bold.woff differ diff --git a/pr-1359/_/font/Inter-BoldItalic.woff b/pr-1359/_/font/Inter-BoldItalic.woff new file mode 100644 index 0000000000..3275076164 Binary files /dev/null and b/pr-1359/_/font/Inter-BoldItalic.woff differ diff --git a/pr-1359/_/font/Inter-Italic.woff b/pr-1359/_/font/Inter-Italic.woff new file mode 100644 index 0000000000..a806b38201 Binary files /dev/null and b/pr-1359/_/font/Inter-Italic.woff differ diff --git a/pr-1359/_/font/Inter-Medium.woff b/pr-1359/_/font/Inter-Medium.woff new file mode 100644 index 0000000000..d546843f28 Binary files /dev/null and b/pr-1359/_/font/Inter-Medium.woff differ diff --git a/pr-1359/_/font/Inter-MediumItalic.woff b/pr-1359/_/font/Inter-MediumItalic.woff new file mode 100644 index 0000000000..459a656889 Binary files /dev/null and b/pr-1359/_/font/Inter-MediumItalic.woff differ diff --git a/pr-1359/_/font/Inter-Regular.woff b/pr-1359/_/font/Inter-Regular.woff new file mode 100644 index 0000000000..62d3a61871 Binary files /dev/null and b/pr-1359/_/font/Inter-Regular.woff differ diff --git a/pr-1359/_/font/Inter-SemiBold.woff b/pr-1359/_/font/Inter-SemiBold.woff new file mode 100644 index 0000000000..a815f43a91 Binary files /dev/null and b/pr-1359/_/font/Inter-SemiBold.woff differ diff --git a/pr-1359/_/font/Inter-SemiBoldItalic.woff b/pr-1359/_/font/Inter-SemiBoldItalic.woff new file mode 100644 index 0000000000..909e43a97d Binary files /dev/null and b/pr-1359/_/font/Inter-SemiBoldItalic.woff differ diff --git a/pr-1359/_/font/roboto-latin-400.woff b/pr-1359/_/font/roboto-latin-400.woff new file mode 100644 index 0000000000..69c8825405 Binary files /dev/null and b/pr-1359/_/font/roboto-latin-400.woff differ diff --git a/pr-1359/_/font/roboto-latin-400.woff2 b/pr-1359/_/font/roboto-latin-400.woff2 new file mode 100644 index 0000000000..1a53701510 Binary files /dev/null and b/pr-1359/_/font/roboto-latin-400.woff2 differ diff --git a/pr-1359/_/font/roboto-latin-400italic.woff b/pr-1359/_/font/roboto-latin-400italic.woff new file mode 100644 index 0000000000..b940dbcb78 Binary files /dev/null and b/pr-1359/_/font/roboto-latin-400italic.woff differ diff --git a/pr-1359/_/font/roboto-latin-400italic.woff2 b/pr-1359/_/font/roboto-latin-400italic.woff2 new file mode 100644 index 0000000000..2741d4f082 Binary files /dev/null and b/pr-1359/_/font/roboto-latin-400italic.woff2 differ diff --git a/pr-1359/_/font/roboto-latin-500.woff b/pr-1359/_/font/roboto-latin-500.woff new file mode 100644 index 0000000000..869925869a Binary files /dev/null and b/pr-1359/_/font/roboto-latin-500.woff differ diff --git a/pr-1359/_/font/roboto-latin-500.woff2 b/pr-1359/_/font/roboto-latin-500.woff2 new file mode 100644 index 0000000000..6362d7f64a Binary files /dev/null and b/pr-1359/_/font/roboto-latin-500.woff2 differ diff --git a/pr-1359/_/font/roboto-latin-500italic.woff b/pr-1359/_/font/roboto-latin-500italic.woff new file mode 100644 index 0000000000..b794d20ded Binary files /dev/null and b/pr-1359/_/font/roboto-latin-500italic.woff differ diff --git a/pr-1359/_/font/roboto-latin-500italic.woff2 b/pr-1359/_/font/roboto-latin-500italic.woff2 new file mode 100644 index 0000000000..0ff2f813d3 Binary files /dev/null and b/pr-1359/_/font/roboto-latin-500italic.woff2 differ diff --git a/pr-1359/_/font/roboto-mono-latin-400.woff b/pr-1359/_/font/roboto-mono-latin-400.woff new file mode 100644 index 0000000000..c41382c272 Binary files /dev/null and b/pr-1359/_/font/roboto-mono-latin-400.woff differ diff --git a/pr-1359/_/font/roboto-mono-latin-400.woff2 b/pr-1359/_/font/roboto-mono-latin-400.woff2 new file mode 100644 index 0000000000..53d4b505c2 Binary files /dev/null and b/pr-1359/_/font/roboto-mono-latin-400.woff2 differ diff --git a/pr-1359/_/font/roboto-mono-latin-500.woff b/pr-1359/_/font/roboto-mono-latin-500.woff new file mode 100644 index 0000000000..ba8ff09b3f Binary files /dev/null and b/pr-1359/_/font/roboto-mono-latin-500.woff differ diff --git a/pr-1359/_/font/roboto-mono-latin-500.woff2 b/pr-1359/_/font/roboto-mono-latin-500.woff2 new file mode 100644 index 0000000000..ec09ab18f9 Binary files /dev/null and b/pr-1359/_/font/roboto-mono-latin-500.woff2 differ diff --git a/pr-1359/_/img/android-chrome-192x192.png b/pr-1359/_/img/android-chrome-192x192.png new file mode 100644 index 0000000000..d20d7453d3 Binary files /dev/null and b/pr-1359/_/img/android-chrome-192x192.png differ diff --git a/pr-1359/_/img/apple-touch-icon.png b/pr-1359/_/img/apple-touch-icon.png new file mode 100644 index 0000000000..9f1d770862 Binary files /dev/null and b/pr-1359/_/img/apple-touch-icon.png differ diff --git a/pr-1359/_/img/back.svg b/pr-1359/_/img/back.svg new file mode 100644 index 0000000000..bf7d30e9ac --- /dev/null +++ b/pr-1359/_/img/back.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/caret.svg b/pr-1359/_/img/caret.svg new file mode 100644 index 0000000000..1af41bc6ef --- /dev/null +++ b/pr-1359/_/img/caret.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/chevron-down-grey.svg b/pr-1359/_/img/chevron-down-grey.svg new file mode 100644 index 0000000000..d12dffc5aa --- /dev/null +++ b/pr-1359/_/img/chevron-down-grey.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/chevron-down.svg b/pr-1359/_/img/chevron-down.svg new file mode 100644 index 0000000000..44d602a2fd --- /dev/null +++ b/pr-1359/_/img/chevron-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/chevron-left.svg b/pr-1359/_/img/chevron-left.svg new file mode 100644 index 0000000000..3488b4fb8e --- /dev/null +++ b/pr-1359/_/img/chevron-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/chevron-right.svg b/pr-1359/_/img/chevron-right.svg new file mode 100644 index 0000000000..583f52e410 --- /dev/null +++ b/pr-1359/_/img/chevron-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/chevron-toggle.svg b/pr-1359/_/img/chevron-toggle.svg new file mode 100644 index 0000000000..c1a2e08c8f --- /dev/null +++ b/pr-1359/_/img/chevron-toggle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/chevron-up-black.svg b/pr-1359/_/img/chevron-up-black.svg new file mode 100644 index 0000000000..b38b18ff98 --- /dev/null +++ b/pr-1359/_/img/chevron-up-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/chevron-up-grey.svg b/pr-1359/_/img/chevron-up-grey.svg new file mode 100644 index 0000000000..8912b48e30 --- /dev/null +++ b/pr-1359/_/img/chevron-up-grey.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/chevron.svg b/pr-1359/_/img/chevron.svg new file mode 100644 index 0000000000..40e962aff3 --- /dev/null +++ b/pr-1359/_/img/chevron.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/collapse-icon-filled.svg b/pr-1359/_/img/collapse-icon-filled.svg new file mode 100644 index 0000000000..7830d70652 --- /dev/null +++ b/pr-1359/_/img/collapse-icon-filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/collapse-icon-outlined.svg b/pr-1359/_/img/collapse-icon-outlined.svg new file mode 100644 index 0000000000..63ceb1b557 --- /dev/null +++ b/pr-1359/_/img/collapse-icon-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/docs-white.svg b/pr-1359/_/img/docs-white.svg new file mode 100644 index 0000000000..90cf893e3c --- /dev/null +++ b/pr-1359/_/img/docs-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/docs.svg b/pr-1359/_/img/docs.svg new file mode 100644 index 0000000000..9b712e4c31 --- /dev/null +++ b/pr-1359/_/img/docs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/favicon-16x16.png b/pr-1359/_/img/favicon-16x16.png new file mode 100644 index 0000000000..cfc9eced3f Binary files /dev/null and b/pr-1359/_/img/favicon-16x16.png differ diff --git a/pr-1359/_/img/favicon-32x32.png b/pr-1359/_/img/favicon-32x32.png new file mode 100644 index 0000000000..c095788146 Binary files /dev/null and b/pr-1359/_/img/favicon-32x32.png differ diff --git a/pr-1359/_/img/favicon.ico b/pr-1359/_/img/favicon.ico new file mode 100644 index 0000000000..b6d80d6909 Binary files /dev/null and b/pr-1359/_/img/favicon.ico differ diff --git a/pr-1359/_/img/flag-filled.svg b/pr-1359/_/img/flag-filled.svg new file mode 100644 index 0000000000..fc8f829b5f --- /dev/null +++ b/pr-1359/_/img/flag-filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/home-filled.svg b/pr-1359/_/img/home-filled.svg new file mode 100644 index 0000000000..e9d34a4a66 --- /dev/null +++ b/pr-1359/_/img/home-filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/home-o.svg b/pr-1359/_/img/home-o.svg new file mode 100644 index 0000000000..95d193b772 --- /dev/null +++ b/pr-1359/_/img/home-o.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/home-outlined.svg b/pr-1359/_/img/home-outlined.svg new file mode 100644 index 0000000000..b90392943a --- /dev/null +++ b/pr-1359/_/img/home-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/home.svg b/pr-1359/_/img/home.svg new file mode 100644 index 0000000000..4e96b3545c --- /dev/null +++ b/pr-1359/_/img/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/i-caution-outlined.svg b/pr-1359/_/img/i-caution-outlined.svg new file mode 100644 index 0000000000..421885ef1e --- /dev/null +++ b/pr-1359/_/img/i-caution-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/link-icon.svg b/pr-1359/_/img/link-icon.svg new file mode 100644 index 0000000000..3c18af827b --- /dev/null +++ b/pr-1359/_/img/link-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/lisk-chevron.svg b/pr-1359/_/img/lisk-chevron.svg new file mode 100644 index 0000000000..5ce1e5b300 --- /dev/null +++ b/pr-1359/_/img/lisk-chevron.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/lisk-logo-white.svg b/pr-1359/_/img/lisk-logo-white.svg new file mode 100644 index 0000000000..78a8113817 --- /dev/null +++ b/pr-1359/_/img/lisk-logo-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/lisk-symbol.svg b/pr-1359/_/img/lisk-symbol.svg new file mode 100644 index 0000000000..db58b714ac --- /dev/null +++ b/pr-1359/_/img/lisk-symbol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/lisk-white.svg b/pr-1359/_/img/lisk-white.svg new file mode 100644 index 0000000000..1c06bff233 --- /dev/null +++ b/pr-1359/_/img/lisk-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/menu.svg b/pr-1359/_/img/menu.svg new file mode 100644 index 0000000000..8b43b2e009 --- /dev/null +++ b/pr-1359/_/img/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/moon.svg b/pr-1359/_/img/moon.svg new file mode 100644 index 0000000000..c4a48a2132 --- /dev/null +++ b/pr-1359/_/img/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/octicons-16.svg b/pr-1359/_/img/octicons-16.svg new file mode 100644 index 0000000000..e3b4e20220 --- /dev/null +++ b/pr-1359/_/img/octicons-16.svg @@ -0,0 +1 @@ +Octicons v11.2.0 by GitHub - https://primer.style/octicons/ - License: MIT \ No newline at end of file diff --git a/pr-1359/_/img/pencil-filled.svg b/pr-1359/_/img/pencil-filled.svg new file mode 100644 index 0000000000..da6988499b --- /dev/null +++ b/pr-1359/_/img/pencil-filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/pencil.svg b/pr-1359/_/img/pencil.svg new file mode 100644 index 0000000000..4690810b5a --- /dev/null +++ b/pr-1359/_/img/pencil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/pin-outlined.svg b/pr-1359/_/img/pin-outlined.svg new file mode 100644 index 0000000000..fde5e45495 --- /dev/null +++ b/pr-1359/_/img/pin-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/search-outlined-white.svg b/pr-1359/_/img/search-outlined-white.svg new file mode 100644 index 0000000000..85392bfe9f --- /dev/null +++ b/pr-1359/_/img/search-outlined-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/search-outlined.svg b/pr-1359/_/img/search-outlined.svg new file mode 100644 index 0000000000..76e4b03719 --- /dev/null +++ b/pr-1359/_/img/search-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/starkex-logo-dark.svg b/pr-1359/_/img/starkex-logo-dark.svg new file mode 100644 index 0000000000..af97eb518e --- /dev/null +++ b/pr-1359/_/img/starkex-logo-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/starkex-logo-light.svg b/pr-1359/_/img/starkex-logo-light.svg new file mode 100644 index 0000000000..5567d499bf --- /dev/null +++ b/pr-1359/_/img/starkex-logo-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/starknet-logo-dark.svg b/pr-1359/_/img/starknet-logo-dark.svg new file mode 100644 index 0000000000..21598eb79f --- /dev/null +++ b/pr-1359/_/img/starknet-logo-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/starknet-logo-light.svg b/pr-1359/_/img/starknet-logo-light.svg new file mode 100644 index 0000000000..569358e463 --- /dev/null +++ b/pr-1359/_/img/starknet-logo-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/starknet-logo-white.svg b/pr-1359/_/img/starknet-logo-white.svg new file mode 100644 index 0000000000..6a92bc47f4 --- /dev/null +++ b/pr-1359/_/img/starknet-logo-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/sun-light.svg b/pr-1359/_/img/sun-light.svg new file mode 100644 index 0000000000..7dcaa18f49 --- /dev/null +++ b/pr-1359/_/img/sun-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/tip-outlined.svg b/pr-1359/_/img/tip-outlined.svg new file mode 100644 index 0000000000..913bb75694 --- /dev/null +++ b/pr-1359/_/img/tip-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/img/transaction-flow.png b/pr-1359/_/img/transaction-flow.png new file mode 100644 index 0000000000..386a0677bc Binary files /dev/null and b/pr-1359/_/img/transaction-flow.png differ diff --git a/pr-1359/_/img/warning-outlined.svg b/pr-1359/_/img/warning-outlined.svg new file mode 100644 index 0000000000..98da9bf9b6 --- /dev/null +++ b/pr-1359/_/img/warning-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pr-1359/_/js/search-ui.js b/pr-1359/_/js/search-ui.js new file mode 100644 index 0000000000..53a8dde4d4 --- /dev/null +++ b/pr-1359/_/js/search-ui.js @@ -0,0 +1,448 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.antoraSearch = {})); +})(this, (function (exports) { 'use strict'; + + function buildHighlightedText (text, positions, snippetLength) { + const textLength = text.length; + const validPositions = positions + .filter((position) => position.length > 0 && position.start + position.length <= textLength); + + if (validPositions.length === 0) { + return [ + { + type: 'text', + text: text.slice(0, snippetLength >= textLength ? textLength : snippetLength) + (snippetLength < textLength ? '...' : ''), + }, + ] + } + + const orderedPositions = validPositions.sort((p1, p2) => p1.start - p2.start); + const range = { + start: 0, + end: textLength, + }; + const firstPosition = orderedPositions[0]; + if (snippetLength && text.length > snippetLength) { + const firstPositionStart = firstPosition.start; + const firstPositionLength = firstPosition.length; + const firstPositionEnd = firstPositionStart + firstPositionLength; + + range.start = firstPositionStart - snippetLength < 0 ? 0 : firstPositionStart - snippetLength; + range.end = firstPositionEnd + snippetLength > textLength ? textLength : firstPositionEnd + snippetLength; + } + const nodes = []; + if (firstPosition.start > 0) { + nodes.push({ + type: 'text', + text: (range.start > 0 ? '...' : '') + text.slice(range.start, firstPosition.start), + }); + } + let lastEndPosition = 0; + const positionsWithinRange = orderedPositions + .filter((position) => position.start >= range.start && position.start + position.length <= range.end); + + for (const position of positionsWithinRange) { + const start = position.start; + const length = position.length; + const end = start + length; + if (lastEndPosition > 0) { + // create text Node from the last end position to the start of the current position + nodes.push({ + type: 'text', + text: text.slice(lastEndPosition, start), + }); + } + nodes.push({ + type: 'mark', + text: text.slice(start, end), + }); + lastEndPosition = end; + } + if (lastEndPosition < range.end) { + nodes.push({ + type: 'text', + text: text.slice(lastEndPosition, range.end) + (range.end < textLength ? '...' : ''), + }); + } + + return nodes + } + + /** + * Taken and adapted from: https://github.com/olivernn/lunr.js/blob/aa5a878f62a6bba1e8e5b95714899e17e8150b38/lib/tokenizer.js#L24-L67 + * @param lunr + * @param text + * @param term + * @return {{start: number, length: number}} + */ + function findTermPosition (lunr, term, text) { + const str = text.toLowerCase(); + const len = str.length; + + for (let sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { + const char = str.charAt(sliceEnd); + const sliceLength = sliceEnd - sliceStart; + + if ((char.match(lunr.tokenizer.separator) || sliceEnd === len)) { + if (sliceLength > 0) { + const value = str.slice(sliceStart, sliceEnd); + // QUESTION: if we get an exact match without running the pipeline should we stop? + if (value.includes(term)) { + // returns the first match + return { + start: sliceStart, + length: value.length, + } + } + } + sliceStart = sliceEnd + 1; + } + } + + // not found! + return { + start: 0, + length: 0, + } + } + + /* global CustomEvent, globalThis */ + + const config = document.getElementById('search-ui-script').dataset; + const snippetLength = parseInt(config.snippetLength || 100, 10); + const siteRootPath = config.siteRootPath || ''; + appendStylesheet(config.stylesheet); + const searchInput = document.getElementById('search-input'); + const searchResultContainer = document.createElement('div'); + searchResultContainer.classList.add('search-result-dropdown-menu'); + searchInput.parentNode.appendChild(searchResultContainer); + const facetFilterInput = document.querySelector('#search-field input[type=checkbox][data-facet-filter]'); + + function appendStylesheet (href) { + if (!href) return + const link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = href; + document.head.appendChild(link); + } + + function highlightPageTitle (title, terms) { + const positions = getTermPosition(title, terms); + return buildHighlightedText(title, positions, snippetLength) + } + + function highlightSectionTitle (sectionTitle, terms) { + if (sectionTitle) { + const text = sectionTitle.text; + const positions = getTermPosition(text, terms); + return buildHighlightedText(text, positions, snippetLength) + } + return [] + } + + function highlightText (doc, terms) { + const text = doc.text; + const positions = getTermPosition(text, terms); + return buildHighlightedText(text, positions, snippetLength) + } + + function getTermPosition (text, terms) { + const positions = terms + .map((term) => findTermPosition(globalThis.lunr, term, text)) + .filter((position) => position.length > 0) + .sort((p1, p2) => p1.start - p2.start); + + if (positions.length === 0) { + return [] + } + return positions + } + + function highlightHit (searchMetadata, sectionTitle, doc) { + const terms = {}; + for (const term in searchMetadata) { + const fields = searchMetadata[term]; + for (const field in fields) { + terms[field] = [...(terms[field] || []), term]; + } + } + return { + pageTitleNodes: highlightPageTitle(doc.title, terms.title || []), + sectionTitleNodes: highlightSectionTitle(sectionTitle, terms.title || []), + pageContentNodes: highlightText(doc, terms.text || []), + } + } + + function createSearchResult (result, store, searchResultDataset) { + let currentComponent; + result.forEach(function (item) { + const ids = item.ref.split('-'); + const docId = ids[0]; + const doc = store.documents[docId]; + let sectionTitle; + if (ids.length > 1) { + const titleId = ids[1]; + sectionTitle = doc.titles.filter(function (item) { + return String(item.id) === titleId + })[0]; + } + const metadata = item.matchData.metadata; + const highlightingResult = highlightHit(metadata, sectionTitle, doc); + const componentVersion = store.componentVersions[`${doc.component}/${doc.version}`]; + if (componentVersion !== undefined && currentComponent !== componentVersion) { + const searchResultComponentHeader = document.createElement('div'); + searchResultComponentHeader.classList.add('search-result-component-header'); + const { title, displayVersion } = componentVersion; + const componentVersionText = `${title}${doc.version && displayVersion ? ` ${displayVersion}` : ''}`; + searchResultComponentHeader.appendChild(document.createTextNode(componentVersionText)); + searchResultDataset.appendChild(searchResultComponentHeader); + currentComponent = componentVersion; + } + searchResultDataset.appendChild(createSearchResultItem(doc, sectionTitle, item, highlightingResult)); + }); + } + + function createSearchResultItem (doc, sectionTitle, item, highlightingResult) { + const documentTitle = document.createElement('div'); + documentTitle.classList.add('search-result-document-title'); + highlightingResult.pageTitleNodes.forEach(function (node) { + let element; + if (node.type === 'text') { + element = document.createTextNode(node.text); + } else { + element = document.createElement('span'); + element.classList.add('search-result-highlight'); + element.innerText = node.text; + } + documentTitle.appendChild(element); + }); + const documentHit = document.createElement('div'); + documentHit.classList.add('search-result-document-hit'); + const documentHitLink = document.createElement('a'); + documentHitLink.href = siteRootPath + doc.url + (sectionTitle ? '#' + sectionTitle.hash : ''); + documentHit.appendChild(documentHitLink); + if (highlightingResult.sectionTitleNodes.length > 0) { + const documentSectionTitle = document.createElement('div'); + documentSectionTitle.classList.add('search-result-section-title'); + documentHitLink.appendChild(documentSectionTitle); + highlightingResult.sectionTitleNodes.forEach(function (node) { + let element; + if (node.type === 'text') { + element = document.createTextNode(node.text); + } else { + element = document.createElement('span'); + element.classList.add('search-result-highlight'); + element.innerText = node.text; + } + documentSectionTitle.appendChild(element); + }); + } + highlightingResult.pageContentNodes.forEach(function (node) { + let element; + if (node.type === 'text') { + element = document.createTextNode(node.text); + } else { + element = document.createElement('span'); + element.classList.add('search-result-highlight'); + element.innerText = node.text; + } + documentHitLink.appendChild(element); + }); + const searchResultItem = document.createElement('div'); + searchResultItem.classList.add('search-result-item'); + searchResultItem.appendChild(documentTitle); + searchResultItem.appendChild(documentHit); + searchResultItem.addEventListener('mousedown', function (e) { + e.preventDefault(); + }); + return searchResultItem + } + + function createNoResult (text) { + const searchResultItem = document.createElement('div'); + searchResultItem.classList.add('search-result-item'); + const documentHit = document.createElement('div'); + documentHit.classList.add('search-result-document-hit'); + const message = document.createElement('strong'); + message.innerText = 'No results found for query "' + text + '"'; + documentHit.appendChild(message); + searchResultItem.appendChild(documentHit); + return searchResultItem + } + + function clearSearchResults (reset) { + if (reset === true) searchInput.value = ''; + searchResultContainer.innerHTML = ''; + } + + function filter (result, documents) { + const facetFilter = facetFilterInput && facetFilterInput.checked && facetFilterInput.dataset.facetFilter; + if (facetFilter) { + const [field, value] = facetFilter.split(':'); + return result.filter((item) => { + const ids = item.ref.split('-'); + const docId = ids[0]; + const doc = documents[docId]; + return field in doc && doc[field] === value + }) + } + return result + } + + function search (index, documents, queryString) { + // execute an exact match search + let query; + let result = filter( + index.query(function (lunrQuery) { + const parser = new globalThis.lunr.QueryParser(queryString, lunrQuery); + parser.parse(); + query = lunrQuery; + }), + documents + ); + if (result.length > 0) { + return result + } + // no result, use a begins with search + result = filter( + index.query(function (lunrQuery) { + lunrQuery.clauses = query.clauses.map((clause) => { + if (clause.presence !== globalThis.lunr.Query.presence.PROHIBITED) { + clause.term = clause.term + '*'; + clause.wildcard = globalThis.lunr.Query.wildcard.TRAILING; + clause.usePipeline = false; + } + return clause + }); + }), + documents + ); + if (result.length > 0) { + return result + } + // no result, use a contains search + result = filter( + index.query(function (lunrQuery) { + lunrQuery.clauses = query.clauses.map((clause) => { + if (clause.presence !== globalThis.lunr.Query.presence.PROHIBITED) { + clause.term = '*' + clause.term + '*'; + clause.wildcard = globalThis.lunr.Query.wildcard.LEADING | globalThis.lunr.Query.wildcard.TRAILING; + clause.usePipeline = false; + } + return clause + }); + }), + documents + ); + return result + } + + function searchIndex (index, store, text) { + clearSearchResults(false); + if (text.trim() === '') { + return + } + const result = search(index, store.documents, text); + const searchResultDataset = document.createElement('div'); + searchResultDataset.classList.add('search-result-dataset'); + searchResultContainer.appendChild(searchResultDataset); + if (result.length > 0) { + createSearchResult(result, store, searchResultDataset); + } else { + searchResultDataset.appendChild(createNoResult(text)); + } + } + + function confineEvent (e) { + e.stopPropagation(); + } + + function debounce (func, wait, immediate) { + let timeout; + return function () { + const context = this; + const args = arguments; + const later = function () { + timeout = null; + if (!immediate) func.apply(context, args); + }; + const callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + } + } + + function enableSearchInput (enabled) { + if (facetFilterInput) { + facetFilterInput.disabled = !enabled; + } + searchInput.disabled = !enabled; + searchInput.title = enabled ? '' : 'Loading index...'; + } + + function isClosed () { + return searchResultContainer.childElementCount === 0 + } + + function executeSearch (index) { + const debug = 'URLSearchParams' in globalThis && new URLSearchParams(globalThis.location.search).has('lunr-debug'); + const query = searchInput.value; + try { + if (!query) return clearSearchResults() + searchIndex(index.index, index.store, query); + } catch (err) { + if (err instanceof globalThis.lunr.QueryParseError) { + if (debug) { + console.debug('Invalid search query: ' + query + ' (' + err.message + ')'); + } + } else { + console.error('Something went wrong while searching', err); + } + } + } + + function toggleFilter (e, index) { + searchInput.focus(); + if (!isClosed()) { + executeSearch(index); + } + } + + function initSearch (lunr, data) { + const start = performance.now(); + const index = { index: lunr.Index.load(data.index), store: data.store }; + enableSearchInput(true); + searchInput.dispatchEvent( + new CustomEvent('loadedindex', { + detail: { + took: performance.now() - start, + }, + }) + ); + searchInput.addEventListener( + 'keydown', + debounce(function (e) { + if (e.key === 'Escape' || e.key === 'Esc') return clearSearchResults(true) + executeSearch(index); + }, 100) + ); + searchInput.addEventListener('click', confineEvent); + searchResultContainer.addEventListener('click', confineEvent); + if (facetFilterInput) { + facetFilterInput.parentElement.addEventListener('click', confineEvent); + facetFilterInput.addEventListener('change', (e) => toggleFilter(e, index)); + } + document.documentElement.addEventListener('click', clearSearchResults); + } + + // disable the search input until the index is loaded + enableSearchInput(false); + + exports.initSearch = initSearch; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/pr-1359/_/js/site.js b/pr-1359/_/js/site.js new file mode 100644 index 0000000000..cad765546b --- /dev/null +++ b/pr-1359/_/js/site.js @@ -0,0 +1,6 @@ +!function(){"use strict";var o=/^sect(\d)$/,i=document.querySelector(".nav-container"),e=document.querySelector(".theme-toggle"),a=document.querySelector(".navbar-burger");a.addEventListener("click",function(e){if(a.classList.contains("is-active"))return u(e);v(e);var t=document.documentElement;t.classList.add("is-clipped--nav"),a.classList.add("is-active"),i.classList.add("is-active");var n=c.getBoundingClientRect(),e=window.innerHeight-Math.round(n.top);Math.round(n.height)!==e&&(c.style.height=e+"px");t.addEventListener("click",u)}),i.addEventListener("click",v),e.addEventListener("click",v);var c,r,s,l=i.querySelector("[data-panel=menu]");function t(){var e,t,n=window.location.hash;if(n&&(n.indexOf("%")&&(n=decodeURIComponent(n)),!(e=l.querySelector('.nav-link[href="'+n+'"]')))){n=document.getElementById(n.slice(1));if(n)for(var i=n,a=document.querySelector("article.doc");(i=i.parentNode)&&i!==a;){var c=i.id;if((c=!c&&(c=o.test(i.className))?(i.firstElementChild||{}).id:c)&&(e=l.querySelector('.nav-link[href="#'+c+'"]')))break}}if(e)t=e.parentNode;else{if(!s)return;e=(t=s).querySelector(".nav-link")}t!==r&&(m(l,".nav-item.is-active").forEach(function(e){e.classList.remove("is-active","is-current-path","is-current-page")}),t.classList.add("is-current-page"),d(r=t),p(l,e))}function d(e){for(var t,n=e.parentNode;!(t=n.classList).contains("nav-menu");)"LI"===n.tagName&&t.contains("nav-item")&&t.add("is-active","is-current-path"),n=n.parentNode;e.classList.add("is-active")}function n(){var e,t,n,i;this.classList.toggle("is-active")&&(e=parseFloat(window.getComputedStyle(this).marginTop),t=this.getBoundingClientRect(),n=l.getBoundingClientRect(),0<(i=(t.bottom-n.top-n.height+e).toFixed())&&(l.scrollTop+=Math.min((t.top-n.top-e).toFixed(),i)))}function u(e){v(e);e=document.documentElement;e.classList.remove("is-clipped--nav"),a.classList.remove("is-active"),i.classList.remove("is-active"),e.removeEventListener("click",u)}function v(e){e.stopPropagation()}function p(e,t){var n=e.getBoundingClientRect(),i=n.height,a=window.getComputedStyle(c);"sticky"===a.position&&(i-=n.top-parseFloat(a.top)),e.scrollTop=Math.max(0,.5*(t.getBoundingClientRect().height-i)+t.offsetTop)}function m(e,t){return[].slice.call(e.querySelectorAll(t))}l&&(e=i.querySelector("[data-panel=explore]"),c=i.querySelector(".nav"),r=l.querySelector(".is-current-page"),(s=r)?(d(r),p(l,r.querySelector(".nav-link"))):l.scrollTop=0,m(l,".nav-item-toggle").forEach(function(e){var t=e.parentElement;e.addEventListener("click",n.bind(t));e=function(e,t){e=e.nextElementSibling;return(!e||!t||e[e.matches?"matches":"msMatchesSelector"](t))&&e}(e,".nav-text");e&&(e.style.cursor="pointer",e.addEventListener("click",n.bind(t)))}),e&&e.querySelector(".context").addEventListener("click",function(){m(c,"[data-panel]").forEach(function(e){e.classList.toggle("is-active")})}),l.addEventListener("mousedown",function(e){1":"")+".sect"+c);r.push("h"+(i+1)+"[id]")}else r.push("h1[id].sect0");n.push(r.join(">"))}var d,s,l,u=(d=n.join(","),s=a.parentNode,[].slice.call((s||document).querySelectorAll(d)));if(!u.length)return e.parentNode.removeChild(e);var f={},m=u.reduce(function(e,t){var o=document.createElement("a");o.textContent=t.textContent,f[o.href="#"+t.id]=o;var n=document.createElement("li");return n.dataset.level=parseInt(t.nodeName.slice(1),10)-1,n.appendChild(o),e.appendChild(n),e},document.createElement("ul")),v=e.querySelector(".toc-menu");v||((v=document.createElement("div")).className="toc-menu");var p=document.createElement("h3");p.textContent=e.dataset.title||"Table of Contents",v.appendChild(p),v.appendChild(m);e=!document.getElementById("toc")&&a.querySelector("h1.page ~ :not(.is-before-toc)");e&&((p=document.createElement("aside")).className="toc embedded",p.appendChild(v.cloneNode(!0)),e.parentNode.insertBefore(p,e)),window.addEventListener("load",function(){h(),window.addEventListener("scroll",h)})}}function h(){var t,e=window.pageYOffset,o=1.15*g(document.documentElement,"fontSize")+150,n=a.offsetTop;if(e&&window.innerHeight+e+2>=document.documentElement.scrollHeight){l=Array.isArray(l)?l:Array(l||0);var i=[],r=u.length-1;return u.forEach(function(e,t){var o="#"+e.id;t===r||e.getBoundingClientRect().top+g(e,"paddingTop")>n?(i.push(o),l.indexOf(o)<0&&f[o].classList.add("is-active")):~l.indexOf(o)&&f[l.shift()].classList.remove("is-active")}),i.forEach((e,t)=>{0!==t&&f[e].classList.remove("is-active")}),m.scrollTop=m.scrollHeight-m.offsetHeight,void(l=1n||void(t="#"+e.id)}),t?t!==l&&(l&&f[l].classList.remove("is-active"),(e=f[t]).classList.add("is-active"),m.scrollHeight>m.offsetHeight&&(m.scrollTop=Math.max(0,e.offsetTop+e.offsetHeight-m.offsetHeight)),l=t):l&&(f[l].classList.remove("is-active"),l=void 0)}function g(e,t){return parseFloat(window.getComputedStyle(e)[t])}}(); +!function(){"use strict";var o=document.querySelector("article.doc"),t=document.querySelector(".toolbar");function i(e){return e&&(~e.indexOf("%")?decodeURIComponent(e):e).slice(1)}function r(e){if(e){if(e.altKey||e.ctrlKey)return;window.location.hash="#"+this.id,e.preventDefault()}window.scrollTo(0,function e(t,n){return o.contains(t)?e(t.offsetParent,t.offsetTop+n):n}(this,0)-t.getBoundingClientRect().bottom)}window.addEventListener("load",function e(t){var n,o;(n=i(window.location.hash))&&(o=document.getElementById(n))&&(r.bind(o)(),setTimeout(r.bind(o),0)),window.removeEventListener("load",e)}),Array.prototype.slice.call(document.querySelectorAll('a[href^="#"]')).forEach(function(e){var t,n;(t=i(e.hash))&&(n=document.getElementById(t))&&e.addEventListener("click",r.bind(n))})}(); +!function(){"use strict";var t,e=document.querySelector(".page-versions .version-menu-toggle");e&&(t=document.querySelector(".page-versions"),e.addEventListener("click",function(e){t.classList.toggle("is-active"),e.stopPropagation()}),document.documentElement.addEventListener("click",function(){t.classList.remove("is-active")}))}(); + +!function(){"use strict";var s=/^\$ (\S[^\\\n]*(\\\n(?!\$ )[^\\\n]*)*)(?=\n|$)/gm,l=/( ) *\\\n *|\\\n( ?) */g,d=/ +$/gm,r=(document.getElementById("site-script")||{dataset:{}}).dataset;[].slice.call(document.querySelectorAll(".doc pre.highlight, .doc .literalblock pre")).forEach(function(e){var t,n,c,i,a;if(e.classList.contains("highlight"))(c=(t=e.querySelector("code")).dataset.lang)&&"console"!==c&&((i=document.createElement("span")).className="source-lang",i.appendChild(document.createTextNode(c)));else{if(!e.innerText.startsWith("$ "))return;var o=e.parentNode.parentNode;o.classList.remove("literalblock"),o.classList.add("listingblock"),e.classList.add("highlightjs","highlight"),(t=document.createElement("code")).className="language-console hljs",t.dataset.lang="console",t.appendChild(e.firstChild),e.appendChild(t)}(c=document.createElement("div")).className="source-toolbox",i&&c.appendChild(i),window.navigator.clipboard&&((n=document.createElement("button")).className="copy-button",n.setAttribute("title","Copy to clipboard"),"svg"===r.svgAs?((o=document.createElementNS("http://www.w3.org/2000/svg","svg")).setAttribute("class","copy-icon"),(i=document.createElementNS("http://www.w3.org/2000/svg","use")).setAttribute("href",window.uiRootPath+"/img/octicons-16.svg#icon-clippy"),o.appendChild(i),n.appendChild(o)):((a=document.createElement("img")).src=window.uiRootPath+"/img/octicons-16.svg#view-clippy",a.alt="copy icon",a.className="copy-icon",n.appendChild(a)),(a=document.createElement("span")).className="copy-toast",a.appendChild(document.createTextNode("Copied!")),n.appendChild(a),c.appendChild(n)),e.appendChild(c),n&&n.addEventListener("click",function(e){var t=e.innerText.replace(d,"");"console"===e.dataset.lang&&t.startsWith("$ ")&&(t=function(e){var t,n=[];for(;t=s.exec(e);)n.push(t[1].replace(l,"$1$2"));return n.join(" && ")}(t));window.navigator.clipboard.writeText(t).then(function(){this.classList.add("clicked"),this.offsetHeight,this.classList.remove("clicked")}.bind(this),function(){})}.bind(n,t))})}(); \ No newline at end of file diff --git a/pr-1359/_/js/vendor/component-versions.js b/pr-1359/_/js/vendor/component-versions.js new file mode 100644 index 0000000000..42ca35373e --- /dev/null +++ b/pr-1359/_/js/vendor/component-versions.js @@ -0,0 +1 @@ +!function(){"use strict";var t,e=document.querySelector(".page-components .component-menu-toggle");e&&(t=document.querySelector(".page-components"),e.addEventListener("click",function(e){t.classList.toggle("is-active"),e.stopPropagation()}),document.documentElement.addEventListener("click",function(){t.classList.remove("is-active")}))}(); \ No newline at end of file diff --git a/pr-1359/_/js/vendor/custom.js b/pr-1359/_/js/vendor/custom.js new file mode 100644 index 0000000000..f34a3774e3 --- /dev/null +++ b/pr-1359/_/js/vendor/custom.js @@ -0,0 +1 @@ +function switch_style(e){var t,a;for("toggle"==e&&(e="Default"==window.localStorage.getItem("data-theme")?"Dark":"Default"),t=0,a=document.getElementsByTagName("link");te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=t.__.length&&t.__.push({}),t.__[e]}function Q(e,t,n){var r=$(T++,2);return r.t=e,r.__c||(r.__=[n?n(t):re(void 0,t),function(e){e=r.t(r.__[0],e);r.__[0]!==e&&(r.__=[e,r.__[1]],r.__c.setState({}))}],r.__c=q),r.__}function Y(e,t){var n=$(T++,4);!O.__s&&ne(n.__H,t)&&(n.__=e,n.__H=t,q.__h.push(n))}function G(e,t){var n=$(T++,7);return ne(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Z(){B.forEach(function(t){if(t.__P)try{t.__H.__h.forEach(ee),t.__H.__h.forEach(te),t.__H.__h=[]}catch(e){t.__H.__h=[],O.__e(e,t.__v)}}),B=[]}O.__b=function(e){q=null,V&&V(e)},O.__r=function(e){z&&z(e),T=0;e=(q=e.__c).__H;e&&(e.__h.forEach(ee),e.__h.forEach(te),e.__h=[])},O.diffed=function(e){W&&W(e);e=e.__c;e&&e.__H&&e.__H.__h.length&&(1!==B.push(e)&&L===O.requestAnimationFrame||((L=O.requestAnimationFrame)||function(e){function t(){clearTimeout(r),X&&cancelAnimationFrame(n),setTimeout(e)}var n,r=setTimeout(t,100);X&&(n=requestAnimationFrame(t))})(Z)),q=void 0},O.__c=function(e,n){n.some(function(t){try{t.__h.forEach(ee),t.__h=t.__h.filter(function(e){return!e.__||te(e)})}catch(e){n.some(function(e){e.__h&&(e.__h=[])}),n=[],O.__e(e,t.__v)}}),K&&K(e,n)},O.unmount=function(e){J&&J(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(ee)}catch(e){O.__e(e,t.__v)}};var X="function"==typeof requestAnimationFrame;function ee(e){var t=q;"function"==typeof e.__c&&e.__c(),q=t}function te(e){var t=q;e.__c=e.__(),q=t}function ne(n,e){return!n||n.length!==e.length||e.some(function(e,t){return e!==n[t]})}function re(e,t){return"function"==typeof t?t(e):t}function oe(e,t){for(var n in t)e[n]=t[n];return e}function ce(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var r in t)if("__source"!==r&&e[r]!==t[r])return!0;return!1}function ie(e){this.props=e}(ie.prototype=new I).isPureReactComponent=!0,ie.prototype.shouldComponentUpdate=function(e,t){return ce(this.props,e)||ce(this.state,t)};var ae=O.__b;O.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),ae&&ae(e)};var le="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911,ue=function(e,t){return null==e?null:s(s(e).map(t))},se={map:ue,forEach:ue,count:function(e){return e?s(e).length:0},only:function(e){e=s(e);if(1!==e.length)throw"Children.only";return e[0]},toArray:s},fe=O.__e;function pe(){this.__u=0,this.t=null,this.__b=null}function me(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function de(){this.u=null,this.o=null}O.__e=function(e,t,n){if(e.then)for(var r,o=t;o=o.__;)if((r=o.__c)&&r.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),r.__c(e,t);fe(e,t,n)},(pe.prototype=new I).__c=function(e,t){var n=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);function o(){i||(i=!0,n.componentWillUnmount=n.__c,c?c(a):a())}var c=me(r.__v),i=!1;n.__c=n.componentWillUnmount,n.componentWillUnmount=function(){o(),n.__c&&n.__c()};var a=function(){var e,t;if(!--r.__u)for(r.state.__e&&(e=r.state.__e,r.__v.__k[0]=function t(e,n,r){return e&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(e){return t(e,n,r)}),e.__c&&e.__c.__P===n&&(e.__e&&r.insertBefore(e.__e,e.__d),e.__c.__e=!0,e.__c.__P=r)),e}(e,e.__c.__P,e.__c.__O)),r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate()},t=!0===t.__h;r.__u++||t||r.setState({__e:r.__b=r.__v.__k[0]}),e.then(o,o)},pe.prototype.componentWillUnmount=function(){this.t=[]},pe.prototype.render=function(e,t){var n;this.__b&&(this.__v.__k&&(n=document.createElement("div"),r=this.__v.__k[0].__c,this.__v.__k[0]=function t(e,n,r){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(e){"function"==typeof e.__c&&e.__c()}),e.__c.__H=null),null!=(e=oe({},e)).__c&&(e.__c.__P===r&&(e.__c.__P=n),e.__c=null),e.__k=e.__k&&e.__k.map(function(e){return t(e,n,r)})),e}(this.__b,n,r.__O=r.__P)),this.__b=null);var r=t.__e&&i(P,null,e.fallback);return r&&(r.__h=null),[i(P,null,t.__e?null:e.children),r]};function he(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;3>>1,1),n.i.removeChild(e)}}),h(i(ve,{context:n.context},e.__v),n.l)):n.l&&n.componentWillUnmount()}function _e(e,t){return i(ye,{__v:e,i:t})}(de.prototype=new I).__e=function(n){var r=this,o=me(r.__v),c=r.o.get(n);return c[0]++,function(e){function t(){r.props.revealOrder?(c.push(e),he(r,n,c)):e()}o?o(t):t()}},de.prototype.render=function(e){this.u=null,this.o=new Map;var t=s(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},de.prototype.componentDidUpdate=de.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(e,t){he(n,t,e)})};var be="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,ge=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;function Oe(e,t,n){return null==t.__k&&(t.textContent=""),h(e,t),"function"==typeof n&&n(),e?e.__c:null}I.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(I.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})});var Se=O.event;function Ee(){}function we(){return this.cancelBubble}function je(){return this.defaultPrevented}O.event=function(e){return(e=Se?Se(e):e).persist=Ee,e.isPropagationStopped=we,e.isDefaultPrevented=je,e.nativeEvent=e};var Pe,Ie={configurable:!0,get:function(){return this.class}},ke=O.vnode;O.vnode=function(e){var t,n=e.type,r=e.props,o=r;if("string"==typeof n){for(var c in o={},r){var i=r[c];"value"===c&&"defaultValue"in r&&null==i||("defaultValue"===c&&"value"in r&&null==r.value?c="value":"download"===c&&!0===i?i="":/ondoubleclick/i.test(c)?c="ondblclick":/^onchange(textarea|input)/i.test(c+n)&&(t=r.type,!("undefined"!=typeof Symbol&&"symbol"==a(Symbol())?/fil|che|rad/i:/fil|che|ra/i).test(t))?c="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(c)?c=c.toLowerCase():ge.test(c)?c=c.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===i&&(i=void 0),o[c]=i)}"select"==n&&o.multiple&&Array.isArray(o.value)&&(o.value=s(r.children).forEach(function(e){e.props.selected=-1!=o.value.indexOf(e.props.value)})),"select"==n&&null!=o.defaultValue&&(o.value=s(r.children).forEach(function(e){e.props.selected=o.multiple?-1!=o.defaultValue.indexOf(e.props.value):o.defaultValue==e.props.value})),e.props=o}n&&r.class!=r.className&&(Ie.enumerable="className"in r,null!=r.className&&(o.class=r.className),Object.defineProperty(o,"className",Ie)),e.$$typeof=be,ke&&ke(e)};var De=O.__r;O.__r=function(e){De&&De(e),Pe=e.__c};ue={ReactCurrentDispatcher:{current:{readContext:function(e){return Pe.__n[e.__c].props.value}}}};function Ce(e){return!!e&&e.$$typeof===be}"object"==("undefined"==typeof performance?"undefined":a(performance))&&"function"==typeof performance.now&&performance.now.bind(performance);var xe={useState:function(e){return F=1,Q(re,e)},useReducer:Q,useEffect:function(e,t){var n=$(T++,3);!O.__s&&ne(n.__H,t)&&(n.__=e,n.__H=t,q.__H.__h.push(n))},useLayoutEffect:Y,useRef:function(e){return F=5,G(function(){return{current:e}},[])},useImperativeHandle:function(e,t,n){F=6,Y(function(){"function"==typeof e?e(t()):e&&(e.current=t())},null==n?n:n.concat(e))},useMemo:G,useCallback:function(e,t){return F=8,G(function(){return e},t)},useContext:function(e){var t=q.context[e.__c],n=$(T++,9);return n.__c=e,t?(null==n.__&&(n.__=!0,t.sub(q)),t.props.value):e.__},useDebugValue:function(e,t){O.useDebugValue&&O.useDebugValue(t?t(e):e)},version:"16.8.0",Children:se,render:Oe,hydrate:function(e,t,n){return R(e,t),"function"==typeof n&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(h(null,e),!0)},createPortal:_e,createElement:i,createContext:function(e,r){e={__c:r="__cC"+U++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,t;return this.getChildContext||(n=[],((t={})[r]=this).getChildContext=function(){return t},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some(l)},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return e.Provider.__=e.Consumer.contextType=e},createFactory:function(e){return i.bind(null,e)},cloneElement:function(e){return Ce(e)?function(e,t,n){var r,o,c,i=arguments,a=w({},e.props);for(c in t)"key"==c?r=t[c]:"ref"==c?o=t[c]:a[c]=t[c];if(3e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n|<\/mark>)/g,En=RegExp(Sn.source);function wn(e){var t,n,r;if(!e.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=((e.__docsearch_parent?null===(t=e.__docsearch_parent)||void 0===t||null===(n=t._highlightResult)||void 0===n||null===(r=n.hierarchy)||void 0===r?void 0:r.lvl0:null===(e=e._highlightResult)||void 0===e||null===(o=e.hierarchy)||void 0===o?void 0:o.lvl0)||{}).value;return o&&En.test(o)?o.replace(Sn,""):o}function jn(){return(jn=Object.assign||function(e){for(var t=1;tr.OPENED&&void 0===t&&(clearTimeout(o),t=e(c.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(o),clearTimeout(t),n({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(o),clearTimeout(t),n({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(c.data)})}},logger:(r=pr,{debug:function(e,t){return r<=sr&&console.debug(e,t),Promise.resolve()},info:function(e,t){return r<=fr&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:Hn(),requestsCache:Hn({serializable:!1}),hostsCache:function r(e){var o=_(e.caches),c=o.shift();return void 0===c?{get:function(e,t){var n=2e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",highlightPostTag:"",hitsPerPage:20},h)}]).catch(function(e){throw"RetryError"===e.name&&o("error"),e}).then(function(e){var t=e.results[0],e=t.hits,t=t.nbHits,e=bn(e,wn);return n.context.searchSuggestions.lengthe.length)&&(t=e.length);for(var n=0,r=new Array(t);n"}]});if("object"!=typeof a.keywords)throw Error("Expected object");var t={keyword:["break","const","continue","else","enum","false","for","fn","hint","if","impl","in","match","pub","return","struct","trait","true","type","use","as","assert","do","dyn","extern","let","macro","mod","move","ref","static_assert","static","super","try","typeof","unsafe","where","while","with","yield"].join(" "),literal:["true","false"].join(" "),type:["bool","u8","u16","u32","u64","u128","u256","usize"].join(" ")};return Object.assign(a.keywords,t),Object.assign(a.contains,[...a.contains,{className:"built_in",begin:"selector!"},{className:"built_in",begin:"component!"},{className:"class",beginKeywords:"mod",end:"{",contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{endsParent:!0})]},{className:"class",beginKeywords:"impl",end:";",contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{endsParent:!0})]},{beginKeywords:"let",end:";",contains:[e.inherit({className:"variable",begin:e.UNDERSCORE_IDENT_RE,relevance:0},{endsParent:!0})]}]),Object.assign(a,{name:"Cairo",aliases:["cairo"]}),a}var e;function a(){try{return new RegExp("(?/};return{keywords:o,lexemes:t,contains:[n,a,c,d,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r,{className:"function",lexemes:t,beginKeywords:"function",end:"{",excludeEnd:!0,contains:[s,i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r]}]}},solAposStringMode:u,solQuoteStringMode:g,HEX_APOS_STRING_MODE:c,HEX_QUOTE_STRING_MODE:d,SOL_NUMBER:l,isNegativeLookbehindAvailable:a};const{baseAssembly:b,solAposStringMode:p,solQuoteStringMode:f,HEX_APOS_STRING_MODE:E,HEX_QUOTE_STRING_MODE:N,SOL_NUMBER:y,isNegativeLookbehindAvailable:h}=t;function s(e){for(var n=p(e),a=f(e),t=[],s=0;s<32;s++)t[s]=s+1;for(var i=t.map(function(e){return 8*e}),r=[],s=0;s<=80;s++)r[s]=s;var l=t.map(function(e){return"bytes"+e}).join(" ")+" ",o=i.map(function(e){return"uint"+e}).join(" ")+" ",c=i.map(function(e){return"int"+e}).join(" ")+" ",d=[].concat.apply([],i.map(function(n){return r.map(function(e){return n+"x"+e})})),u={keyword:"var bool string int uint "+c+o+"byte bytes "+l+"fixed ufixed "+(d.map(function(e){return"fixed"+e}).join(" ")+" ")+(d.map(function(e){return"ufixed"+e}).join(" ")+" ")+"enum struct mapping address new delete if else for while continue break return throw emit try catch revert unchecked _ function modifier event constructor fallback receive error virtual override constant immutable anonymous indexed storage memory calldata external public internal payable pure view private returns import from as using global pragma contract interface library is abstract type assembly",literal:"true false wei gwei szabo finney ether seconds minutes hours days weeks years",built_in:"self this super selfdestruct suicide now msg block tx abi blockhash gasleft assert require Error Panic sha3 sha256 keccak256 ripemd160 ecrecover addmod mulmod log0 log1 log2 log3 log4"},i={className:"operator",begin:/[+\-!~*\/%<>&^|=]/},g=/[A-Za-z_$][A-Za-z_$0-9]*/,c={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,lexemes:g,keywords:u,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,a,y,"self"]},_={begin:/\.\s*/,end:/[^A-Za-z0-9$_\.]/,excludeBegin:!0,excludeEnd:!0,keywords:{built_in:"gas value selector address length push pop send transfer call callcode delegatecall staticcall balance code codehash wrap unwrap name creationCode runtimeCode interfaceId min max"},relevance:2},o=e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/,lexemes:g,keywords:u}),l="("+["gas","value","salt"].join("|")+")(?=:)",d={className:"built_in",begin:(h()?"(?]+>|\t|)+|(?:\n)))/gm,M="",C="Could not find the language '{}', did you forget to load/include a language module?",x={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},o="of and for in not or if then".split(" ");function S(e){return e.replace(/&/g,"&").replace(//g,">")}function g(e){return e.nodeName.toLowerCase()}function c(e){return n.test(e)}function d(e){var n,a={},t=Array.prototype.slice.call(arguments,1);for(n in e)a[n]=e[n];return t.forEach(function(e){for(n in e)a[n]=e[n]}),a}function _(e){var s=[];return function e(n,a){for(var t=n.firstChild;t;t=t.nextSibling)3===t.nodeType?a+=t.nodeValue.length:1===t.nodeType&&(s.push({event:"start",offset:a,node:t}),a=e(t,a),g(t).match(/br|hr|img|input/)||s.push({event:"stop",offset:a,node:t}));return a}(e,0),s}function m(e,n,a){var t=0,s="",i=[];function r(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function o(e){s+=""}function c(e){("start"===e.event?l:o)(e.node)}for(;e.length||n.length;){var d=r();if(s+=S(a.substring(t,d[0].offset)),t=d[0].offset,d===e){for(i.reverse().forEach(o);c(d.splice(0,1)[0]),(d=r())===e&&d.length&&d[0].offset===t;);i.reverse().forEach(l)}else"start"===d[0].event?i.push(d[0].node):i.pop(),c(d.splice(0,1)[0])}return s+S(a.substr(t))}function b(n){return n.variants&&!n.cached_variants&&(n.cached_variants=n.variants.map(function(e){return d(n,{variants:null},e)})),n.cached_variants||(function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(n)?[d(n,{starts:n.starts?d(n.starts):null})]:Object.isFrozen(n)?[d(n)]:[n])}function p(e){if(a&&!e.langApiRestored){for(var n in e.langApiRestored=!0,a)e[n]&&(e[a[n]]=e[n]);(e.contains||[]).concat(e.variants||[]).forEach(p)}}function f(n,t){var s={};return"string"==typeof n?a("keyword",n):i(n).forEach(function(e){a(e,n[e])}),s;function a(a,e){(e=t?e.toLowerCase():e).split(" ").forEach(function(e){var n=e.split("|");s[n[0]]=[a,(e=n[0],(n=n[1])?Number(n):function(e){return-1!=o.indexOf(e.toLowerCase())}(e)?0:1)]})}}function T(t){function d(e){return e&&e.source||e}function u(e,n){return new RegExp(d(e),"m"+(t.case_insensitive?"i":"")+(n?"g":""))}function s(s){var i={},r=[],l={},a=1;function e(e,n){i[a]=e,r.push([e,n]),a+=new RegExp(n.toString()+"|").exec("").length-1+1}for(var n=0;n')+n+(a?"":M)}function r(){var e,n,a,t,s;if(!m.keywords)return S(E);for(a="",m.lexemesRe.lastIndex=e=0,n=m.lexemesRe.exec(E);n;)a+=S(E.substring(e,n.index)),t=m,s=n,s=_.case_insensitive?s[0].toLowerCase():s[0],(s=t.keywords.hasOwnProperty(s)&&t.keywords[s])?(N+=s[1],a+=i(s[0],S(n[0]))):a+=S(n[0]),e=m.lexemesRe.lastIndex,n=m.lexemesRe.exec(E);return a+S(E.substr(e))}function l(){p+=(null!=m.subLanguage?function(){var e="string"==typeof m.subLanguage;if(e&&!w[m.subLanguage])return S(E);var n=e?k(m.subLanguage,E,!0,b[m.subLanguage]):A(E,m.subLanguage.length?m.subLanguage:void 0);return 0")+'"');if("end"===n.type){n=d(n);if(null!=n)return n}return E+=a,a.length}var _=D(n);if(!_)throw console.error(C.replace("{}",n)),new Error('Unknown language: "'+n+'"');T(_);for(var m=a||_,b={},p="",f=m;f!==_;f=f.parent)f.className&&(p=i(f.className,"",!0)+p);var E="",N=0;try{for(var y,h,v=0;;){if(m.terminators.lastIndex=v,!(y=m.terminators.exec(s)))break;h=g(s.substring(v,y.index),y),v=y.index+h}for(g(s.substr(v)),f=m;f.parent;f=f.parent)f.className&&(p+=M);return{relevance:N,value:p,illegal:!1,language:n,top:m}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{illegal:!0,relevance:0,value:S(s)};if(O)return{relevance:0,value:S(s),language:n,top:m,errorRaised:e};throw e}}function A(a,e){e=e||x.languages||i(w);var t={relevance:0,value:S(a)},s=t;return e.filter(D).filter(v).forEach(function(e){var n=k(e,a,!1);n.language=e,n.relevance>s.relevance&&(s=n),n.relevance>t.relevance&&(s=t,t=n)}),s.language&&(t.second_best=s),t}function E(e){return x.tabReplace||x.useBR?e.replace(s,function(e,n){return x.useBR&&"\n"===e?"
":x.tabReplace?n.replace(/\t/g,x.tabReplace):""}):e}function N(e){var n,a,t,s,i=function(e){var n,a,t,s,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",a=l.exec(i)){var r=D(a[1]);return r||(console.warn(C.replace("{}",a[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?a[1]:"no-highlight"}for(n=0,t=(i=i.split(/\s+/)).length;n/g,"\n"):n=e,s=n.textContent,a=i?k(i,s,!0):A(s),(n=_(n)).length&&((t=document.createElement("div")).innerHTML=a.value,a.value=m(n,_(t),s)),a.value=E(a.value),e.innerHTML=a.value,e.className=(t=e.className,s=i,i=a.language,s=s?r[s]:i,i=[t.trim()],t.match(/\bhljs\b/)||i.push("hljs"),-1===t.indexOf(s)&&i.push(s),i.join(" ").trim()),e.result={language:a.language,re:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance}))}function y(){var e;y.called||(y.called=!0,e=document.querySelectorAll("pre code"),u.forEach.call(e,N))}var h={disableAutodetect:!0};function D(e){return e=(e||"").toLowerCase(),w[e]||w[r[e]]}function v(e){e=D(e);return e&&!e.disableAutodetect}return t.highlight=k,t.highlightAuto=A,t.fixMarkup=E,t.highlightBlock=N,t.configure=function(e){x=d(x,e)},t.initHighlighting=y,t.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",y,!1),window.addEventListener("load",y,!1)},t.registerLanguage=function(n,e){var a;try{a=e(t)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",n)),!O)throw e;console.error(e),a=h}p(w[n]=a),a.rawDefinition=e.bind(null,t),a.aliases&&a.aliases.forEach(function(e){r[e]=n})},t.listLanguages=function(){return i(w)},t.getLanguage=D,t.requireLanguage=function(e){var n=D(e);if(n)return n;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},t.autoDetection=v,t.inherit=d,t.debugMode=function(){O=!1},t.IDENT_RE="[a-zA-Z]\\w*",t.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",t.NUMBER_RE="\\b\\d+(\\.\\d+)?",t.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",t.BINARY_NUMBER_RE="\\b(0b[01]+)",t.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",t.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},t.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},t.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},t.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},t.COMMENT=function(e,n,a){a=t.inherit({className:"comment",begin:e,end:n,contains:[]},a||{});return a.contains.push(t.PHRASAL_WORDS_MODE),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),a},t.C_LINE_COMMENT_MODE=t.COMMENT("//","$"),t.C_BLOCK_COMMENT_MODE=t.COMMENT("/\\*","\\*/"),t.HASH_COMMENT_MODE=t.COMMENT("#","$"),t.NUMBER_MODE={className:"number",begin:t.NUMBER_RE,relevance:0},t.C_NUMBER_MODE={className:"number",begin:t.C_NUMBER_RE,relevance:0},t.BINARY_NUMBER_MODE={className:"number",begin:t.BINARY_NUMBER_RE,relevance:0},t.CSS_NUMBER_MODE={className:"number",begin:t.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},t.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[t.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[t.BACKSLASH_ESCAPE]}]},t.TITLE_MODE={className:"title",begin:t.IDENT_RE,relevance:0},t.UNDERSCORE_TITLE_MODE={className:"title",begin:t.UNDERSCORE_IDENT_RE,relevance:0},t.METHOD_GUARD={begin:"\\.\\s*"+t.UNDERSCORE_IDENT_RE,relevance:0},[t.BACKSLASH_ESCAPE,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,t.PHRASAL_WORDS_MODE,t.COMMENT,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.HASH_COMMENT_MODE,t.NUMBER_MODE,t.C_NUMBER_MODE,t.BINARY_NUMBER_MODE,t.CSS_NUMBER_MODE,t.REGEXP_MODE,t.TITLE_MODE,t.UNDERSCORE_TITLE_MODE,t.METHOD_GUARD].forEach(function(e){!function n(a){Object.freeze(a);var t="function"==typeof a;Object.getOwnPropertyNames(a).forEach(function(e){!a.hasOwnProperty(e)||null===a[e]||"object"!=typeof a[e]&&"function"!=typeof a[e]||t&&("caller"===e||"callee"===e||"arguments"===e)||Object.isFrozen(a[e])||n(a[e])});return a}(e)}),t},w="object"==typeof window&&window||"object"==typeof self&&self,void 0===O||O.nodeType?w&&(w.hljs=t({}),"function"==typeof define&&define.amd&&define([],function(){return w.hljs})):t(O);function M(e){return{aliases:["adoc"],contains:[e.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),e.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",relevance:10,variants:[{begin:"^(={1,5}) .+?( \\1)?$"},{begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{className:"strong",begin:"\\B\\*(?![\\*\\s])",end:"(\\n{2}|\\*)",contains:[{begin:"\\\\*\\w",relevance:0}]},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0},{className:"emphasis",begin:"_(?![_\\s])",end:"(\\n{2}|_)",relevance:0},{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}}function C(e){var n={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},a={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]};return{aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,a,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},n]}}function x(e){var n="a-zA-Z_\\-!.?+*=<>&#'",a={begin:g="["+n+"]["+n+"0-9/;:]*",relevance:0},t={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},s=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i=e.COMMENT(";","$",{relevance:0}),r={className:"literal",begin:/\b(true|false|nil)\b/},l={begin:"[\\[\\{]",end:"[\\]\\}]"},o={className:"comment",begin:"\\^"+g},c=e.COMMENT("\\^\\{","\\}"),d={className:"symbol",begin:"[:]{1,2}"+g},u={begin:"\\(",end:"\\)"},g={keywords:{"builtin-name":"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},lexemes:g,className:"name",begin:g,starts:n={endsWithParent:!0,relevance:0}},a=[u,s,o,c,i,d,l,t,r,a];return u.contains=[e.COMMENT("comment",""),g,n],n.contains=a,l.contains=a,c.contains=[l],{aliases:["clj"],illegal:/\S/,contains:[u,s,o,c,i,d,l,t,r]}}function S(e){function n(e){return"(?:"+e+")?"}var a="decltype\\(auto\\)",t="[a-zA-Z_]\\w*::",s={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},i={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},{begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},r={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(i,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:n(t)+e.IDENT_RE,relevance:0},c=n(t)+e.IDENT_RE+"\\s*\\(",d={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},u=[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,i],t={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:d,contains:u.concat([{begin:/\(/,end:/\)/,keywords:d,contains:u.concat(["self"]),relevance:0}]),relevance:0},r={className:"function",begin:"((decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<.*?>)?)[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:d,illegal:/[^\w\s\*&:<>]/,contains:[{begin:a,keywords:d,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,r,s,{begin:/\(/,end:/\)/,keywords:d,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,r,s]}]},s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:d,illegal:"",keywords:d,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:d},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:l,strings:i,keywords:d}}}function T(e){var n={className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}};return{case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,{begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[n]}]}]}}function k(e){return{aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}function A(e){return{aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"/}]}]}]},i={className:"string",begin:"~[A-Z](?="+o+")",contains:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin:/\/}]},r={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},l={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},o=e.inherit(l,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),e=[r,i,s,e.HASH_COMMENT_MODE,o,l,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[r,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:n+":(?!:)",relevance:0},{className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"->"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[e.HASH_COMMENT_MODE,{className:"regexp",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return{lexemes:n,keywords:a,contains:t.contains=e}}function R(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],keywords:n,illegal:"|<-"}]}}function B(e){var n="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",a={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0};return{aliases:["jsp"],keywords:n,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:n,relevance:0,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},a,{className:"meta",begin:"@[A-Za-z]+"}]}}function z(e){var n="<>",a="",t=/<[A-Za-z0-9\\._:-]+/,s=/\/[A-Za-z0-9\\._:-]+>|\/>/,i="[A-Za-z$_][0-9A-Za-z$_]*",r={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:r,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},d={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,o]};return o.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,u,l,e.REGEXP_MODE],o=o.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]),{aliases:["js","jsx","mjs","cjs"],keywords:r,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,u,e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,l,{begin:/[{,\n]\s*/,relevance:0,contains:[{begin:i+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:i,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+i+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:i},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,contains:o}]}]},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:n,end:a},{begin:t,end:s}],subLanguage:"xml",contains:[{begin:t,end:s,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:i}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:o}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor get set",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}function U(e){var n={literal:"true false null"},a=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],t=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],s={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:n},i={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(s,{begin:/:/})].concat(a),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[e.inherit(s)],illegal:"\\S"};return t.push(i,s),a.forEach(function(e){t.push(e)}),{contains:t,keywords:n,illegal:"\\S"}}function K(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},t={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[c={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,c,t]}]};t.contains.push(s);var i={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},r={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(s,{className:"meta-string"})]}]},l={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0},o=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),c={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]};return(t=c).variants[1].contains=[c],c.variants[1].contains=[t],{aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,o,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,i,r,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[c,e.C_LINE_COMMENT_MODE,o],relevance:0},e.C_LINE_COMMENT_MODE,o,i,r,s,e.C_NUMBER_MODE]},o]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},i,r]},s,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},l]}}function $(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^\\s*([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"quote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"^```\\w*\\s*$",end:"^```[ ]*$"},{begin:"`.+?`"},{begin:"^( {4}|\\t)",end:"$",relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}function P(e){var n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},a={className:"subst",begin:/\$\{/,end:/}/,keywords:n},e=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",contains:[a],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return{aliases:["nixos"],keywords:n,contains:a.contains=e}}function q(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,a="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],keywords:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},lexemes:n,illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+a.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:a,lexemes:n,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}function j(e){var n="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",a={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},t={begin:"->{",end:"}"},s={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,a,s],e=[s,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),t,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return a.contains=e,{aliases:["pl","pm"],lexemes:/[\w\.]+/,keywords:n,contains:t.contains=e}}function H(e){var n={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},a={className:"meta",begin:/<\?(php)?|\?>/},t={className:"string",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},s={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[a]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},a,{className:"keyword",begin:/\$this\b/},n,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",n,e.C_BLOCK_COMMENT_MODE,t,s]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},t,s]}}function Z(e){var n="[ \\t\\f]*",a="("+n+"[:=]"+n+"|[ \\t\\f]+)",t="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",s="([^\\\\:= \\t\\f\\n]|\\\\.)+",i={end:a,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:t+a,returnBegin:!0,contains:[{className:"attr",begin:t,endsParent:!0,relevance:0}],starts:i},{begin:s+a,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:s,endsParent:!0,relevance:0}],starts:i},{className:"attr",relevance:0,begin:s+n+"$"}]}}function F(e){var n=e.COMMENT("#","$"),a="([A-Za-z_]|::)(\\w|::)*",t=e.inherit(e.TITLE_MODE,{begin:a}),s={className:"variable",begin:"\\$"+a},a={className:"string",contains:[e.BACKSLASH_ESCAPE,s],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]};return{aliases:["pp"],contains:[n,s,a,{beginKeywords:"class",end:"\\{|;",illegal:/=/,contains:[t,n]},{beginKeywords:"define",end:/\{/,contains:[{className:"section",begin:e.IDENT_RE,endsParent:!0}]},{begin:e.IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\S/,contains:[{className:"keyword",begin:e.IDENT_RE},{begin:/\{/,end:/\}/,keywords:{keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},relevance:0,contains:[a,n,{begin:"[a-zA-Z_]+\\s*=>",returnBegin:!0,end:"=>",contains:[{className:"attr",begin:e.IDENT_RE}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},s]}],relevance:0}]}}function G(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},t={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},i={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,t]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,t]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,t]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},r={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},s={className:"params",begin:/\(/,end:/\)/,contains:["self",a,r,i,e.HASH_COMMENT_MODE]};return t.contains=[i,r,a],{aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,r,{beginKeywords:"if",relevance:0},i,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,s,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}function W(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},t={className:"doctag",begin:"@[A-Za-z]+"},s={begin:"#<",end:">"},i=[e.COMMENT("#","$",{contains:[t]}),e.COMMENT("^\\=begin","^\\=end",{contains:[t],relevance:10}),e.COMMENT("^__END__","\\n$")],r={className:"subst",begin:"#\\{",end:"}",keywords:a},l={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},{begin:/\w+/,endSameAsBegin:!0,contains:[e.BACKSLASH_ESCAPE,r]}]}]},t={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},e=[l,s,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(i)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),t].concat(i)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[l,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[s,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,r],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(i),relevance:0}].concat(i);return r.contains=e,t.contains=e,{aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:i.concat([{begin:/^\s*=>/,starts:{end:"$",contains:e}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:e}}]).concat(e)}}function Q(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",a="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{aliases:["rs"],keywords:{keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:a},lexemes:e.IDENT_RE+"!?",illegal:""}]}}function X(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},t={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},n={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0};return{keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},t,{className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[n]},{className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[t]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[t]},n]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}function V(e){return{aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}function Y(e){var n=e.COMMENT("--","$");return{case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,lexemes:/[\w\.]+/,keywords:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,n,e.HASH_COMMENT_MODE]}}function J(e){var n={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},a=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:n,contains:[]},s={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},i={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[i],{keywords:n,contains:[s,e.C_LINE_COMMENT_MODE,a,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},i,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,contains:["self",i,s,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:n,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,a]}]}}function ee(e){var n="[A-Za-z$_][0-9A-Za-z$_]*",a={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"},t={className:"meta",begin:"@"+n},s={begin:"\\(",end:/\)/,keywords:a,contains:["self",e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.NUMBER_MODE]},i={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,s]},r={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},l={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},o={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,l],subLanguage:"xml"}},c={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,l],subLanguage:"css"}},d={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,l]};return l.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,o,c,d,r,e.REGEXP_MODE],{aliases:["ts"],keywords:a,contains:[{className:"meta",begin:/^\s*['"]use strict['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,o,c,d,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+e.IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.IDENT_RE},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:a,contains:["self",e.inherit(e.TITLE_MODE,{begin:n}),i],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",i]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+e.IDENT_RE,relevance:0},t,s]}}function ne(e){var n={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},a={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},t=e.inherit(a,{begin:"\\(",end:"\\)"}),s=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),i=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),r={endsWithParent:!0,illegal:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,i,s,t,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,t,i,s]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[r],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[r],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},r]}]}}function ae(e){var n="true false yes no null",a={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]};return{case_insensitive:!0,aliases:["yml","YAML","yaml"],contains:[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!"+e.UNDERSCORE_IDENT_RE},{className:"type",begin:"!!"+e.UNDERSCORE_IDENT_RE},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:e.C_NUMBER_RE+"\\b"},a]}}!function(){"use strict";O.registerLanguage("asciidoc",M),O.registerLanguage("bash",C),O.registerLanguage("clojure",x),O.registerLanguage("cpp",S),O.registerLanguage("css",T),O.registerLanguage("diff",k),O.registerLanguage("dockerfile",A),O.registerLanguage("elixir",D),O.registerLanguage("go",R),O.registerLanguage("groovy",L),O.registerLanguage("haskell",I),O.registerLanguage("java",B),O.registerLanguage("javascript",z),O.registerLanguage("json",U),O.registerLanguage("kotlin",K),O.registerLanguage("markdown",$),O.registerLanguage("nix",P),O.registerLanguage("objectivec",q),O.registerLanguage("perl",j),O.registerLanguage("php",H),O.registerLanguage("properties",Z),O.registerLanguage("puppet",F),O.registerLanguage("python",G),O.registerLanguage("ruby",W),O.registerLanguage("rust",Q),O.registerLanguage("scala",X),O.registerLanguage("shell",V),O.registerLanguage("sql",Y),O.registerLanguage("swift",J),O.registerLanguage("typescript",ee),O.registerLanguage("xml",ne),O.registerLanguage("yaml",ae),e(O),v(O),[].slice.call(document.querySelectorAll("pre code.hljs[data-lang]")).forEach(function(e){O.highlightBlock(e)})}()}(); \ No newline at end of file diff --git a/pr-1359/_/js/vendor/lunr.js b/pr-1359/_/js/vendor/lunr.js new file mode 100644 index 0000000000..cdc94cd390 --- /dev/null +++ b/pr-1359/_/js/vendor/lunr.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ +!function(){var e=function(t){var r=new e.Builder;return r.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),r.searchPipeline.add(e.stemmer),t.call(r,r),r.build()};e.version="2.3.9",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},e.utils.clone=function(e){if(null===e||void 0===e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i0){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/pr-1359/_/js/vendor/medium-zoom.js b/pr-1359/_/js/vendor/medium-zoom.js new file mode 100644 index 0000000000..cd8bca304b --- /dev/null +++ b/pr-1359/_/js/vendor/medium-zoom.js @@ -0,0 +1,3 @@ +/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */ +/* eslint-disable */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).mediumZoom=t()}(this,(function(){"use strict";var e=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},c=window.Promise||function(e){function t(){}e(t,t)},u=function(e){var t=e.target;t!==N?-1!==O.indexOf(t)&&w({target:t}):E()},s=function(){if(!A&&T.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(k-e)>S.scrollOffset&&setTimeout(E,150)}},f=function(e){var t=e.key||e.keyCode;"Escape"!==t&&"Esc"!==t&&27!==t||E()},p=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t;if(t.background&&(N.style.background=t.background),t.container&&t.container instanceof Object&&(n.container=e({},S.container,t.container)),t.template){var i=o(t.template)?t.template:document.querySelector(t.template);n.template=i}return S=e({},S,n),O.forEach((function(e){e.dispatchEvent(m("medium-zoom:update",{detail:{zoom:j}}))})),j},g=function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(e({},S,o))},v=function(){for(var e=arguments.length,t=Array(e),o=0;o0?t.reduce((function(e,t){return[].concat(e,i(t))}),[]):O;return n.forEach((function(e){e.classList.remove("medium-zoom-image"),e.dispatchEvent(m("medium-zoom:detach",{detail:{zoom:j}}))})),O=O.filter((function(e){return-1===n.indexOf(e)})),j},z=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return O.forEach((function(n){n.addEventListener("medium-zoom:"+e,t,o)})),x.push({type:"medium-zoom:"+e,listener:t,options:o}),j},y=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return O.forEach((function(n){n.removeEventListener("medium-zoom:"+e,t,o)})),x=x.filter((function(o){return!(o.type==="medium-zoom:"+e&&o.listener.toString()===t.toString())})),j},b=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.target,r=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},i=void 0,r=void 0;if(S.container)if(S.container instanceof Object)i=(t=e({},t,S.container)).width-t.left-t.right-2*S.margin,r=t.height-t.top-t.bottom-2*S.margin;else{var d=(o(S.container)?S.container:document.querySelector(S.container)).getBoundingClientRect(),m=d.width,a=d.height,l=d.left,c=d.top;t=e({},t,{width:m,height:a,left:l,top:c})}i=i||t.width-2*S.margin,r=r||t.height-2*S.margin;var u=T.zoomedHd||T.original,s=n(u)?i:u.naturalWidth||i,f=n(u)?r:u.naturalHeight||r,p=u.getBoundingClientRect(),g=p.top,v=p.left,h=p.width,z=p.height,y=Math.min(s,i)/h,b=Math.min(f,r)/z,E=Math.min(y,b),w="scale("+E+") translate3d("+((i-h)/2-v+S.margin+t.left)/E+"px, "+((r-z)/2-g+S.margin+t.top)/E+"px, 0)";T.zoomed.style.transform=w,T.zoomedHd&&(T.zoomedHd.style.transform=w)};return new c((function(e){if(i&&-1===O.indexOf(i))e(j);else{if(T.zoomed)e(j);else{if(i)T.original=i;else{if(!(O.length>0))return void e(j);var t=O;T.original=t[0]}if(T.original.dispatchEvent(m("medium-zoom:open",{detail:{zoom:j}})),k=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,A=!0,T.zoomed=d(T.original),document.body.appendChild(N),S.template){var n=o(S.template)?S.template:document.querySelector(S.template);T.template=document.createElement("div"),T.template.appendChild(n.content.cloneNode(!0)),document.body.appendChild(T.template)}if(document.body.appendChild(T.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),T.original.classList.add("medium-zoom-image--hidden"),T.zoomed.classList.add("medium-zoom-image--opened"),T.zoomed.addEventListener("click",E),T.zoomed.addEventListener("transitionend",(function t(){A=!1,T.zoomed.removeEventListener("transitionend",t),T.original.dispatchEvent(m("medium-zoom:opened",{detail:{zoom:j}})),e(j)})),T.original.getAttribute("data-zoom-src")){T.zoomedHd=T.zoomed.cloneNode(),T.zoomedHd.removeAttribute("srcset"),T.zoomedHd.removeAttribute("sizes"),T.zoomedHd.src=T.zoomed.getAttribute("data-zoom-src"),T.zoomedHd.onerror=function(){clearInterval(a),console.warn("Unable to reach the zoom image target "+T.zoomedHd.src),T.zoomedHd=null,r()};var a=setInterval((function(){T.zoomedHd.complete&&(clearInterval(a),T.zoomedHd.classList.add("medium-zoom-image--opened"),T.zoomedHd.addEventListener("click",E),document.body.appendChild(T.zoomedHd),r())}),10)}else if(T.original.hasAttribute("srcset")){T.zoomedHd=T.zoomed.cloneNode(),T.zoomedHd.removeAttribute("sizes"),T.zoomedHd.removeAttribute("loading");var l=T.zoomedHd.addEventListener("load",(function(){T.zoomedHd.removeEventListener("load",l),T.zoomedHd.classList.add("medium-zoom-image--opened"),T.zoomedHd.addEventListener("click",E),document.body.appendChild(T.zoomedHd),r()}))}else r()}}}))},E=function(){return new c((function(e){if(!A&&T.original){A=!0,document.body.classList.remove("medium-zoom--opened"),T.zoomed.style.transform="",T.zoomedHd&&(T.zoomedHd.style.transform=""),T.template&&(T.template.style.transition="opacity 150ms",T.template.style.opacity=0),T.original.dispatchEvent(m("medium-zoom:close",{detail:{zoom:j}})),T.zoomed.addEventListener("transitionend",(function t(){T.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(T.zoomed),T.zoomedHd&&document.body.removeChild(T.zoomedHd),document.body.removeChild(N),T.zoomed.classList.remove("medium-zoom-image--opened"),T.template&&document.body.removeChild(T.template),A=!1,T.zoomed.removeEventListener("transitionend",t),T.original.dispatchEvent(m("medium-zoom:closed",{detail:{zoom:j}})),T.original=null,T.zoomed=null,T.zoomedHd=null,T.template=null,e(j)}))}else e(j)}))},w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.target;return T.original?E():b({target:t})},L=function(){return S},H=function(){return O},C=function(){return T.original},O=[],x=[],A=!1,k=0,S=l,T={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(a)?S=a:(a||"string"==typeof a)&&v(a),S=e({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},S);var N=r(S.background);document.addEventListener("click",u),document.addEventListener("keyup",f),document.addEventListener("scroll",s),window.addEventListener("resize",E);var j={open:b,close:E,toggle:w,update:p,clone:g,attach:v,detach:h,on:z,off:y,getOptions:L,getImages:H,getZoomedImage:C};return j}})); diff --git a/pr-1359/_/js/vendor/search.js b/pr-1359/_/js/vendor/search.js new file mode 100644 index 0000000000..bcaabbac6a --- /dev/null +++ b/pr-1359/_/js/vendor/search.js @@ -0,0 +1 @@ +function e(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=t.__.length&&t.__.push({}),t.__[e]}function ne(e,t,n){var r=te(W++,2);return r.t=e,r.__c||(r.__=[n?n(t):se(void 0,t),function(e){e=r.t(r.__[0],e);r.__[0]!==e&&(r.__=[e,r.__[1]],r.__c.setState({}))}],r.__c=K),r.__}function re(e,t){var n=te(W++,4);!s.__s&&le(n.__H,t)&&(n.__=e,n.__H=t,K.__h.push(n))}function oe(e,t){var n=te(W++,7);return le(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function ce(){Q.forEach(function(t){if(t.__P)try{t.__H.__h.forEach(ae),t.__H.__h.forEach(ue),t.__H.__h=[]}catch(e){t.__H.__h=[],s.__e(e,t.__v)}}),Q=[]}s.__b=function(e){K=null,Y&&Y(e)},s.__r=function(e){G&&G(e),W=0;e=(K=e.__c).__H;e&&(e.__h.forEach(ae),e.__h.forEach(ue),e.__h=[])},s.diffed=function(e){Z&&Z(e);e=e.__c;e&&e.__H&&e.__H.__h.length&&(1!==Q.push(e)&&J===s.requestAnimationFrame||((J=s.requestAnimationFrame)||function(e){function t(){clearTimeout(r),ie&&cancelAnimationFrame(n),setTimeout(e)}var n,r=setTimeout(t,100);ie&&(n=requestAnimationFrame(t))})(ce)),K=void 0},s.__c=function(e,n){n.some(function(t){try{t.__h.forEach(ae),t.__h=t.__h.filter(function(e){return!e.__||ue(e)})}catch(e){n.some(function(e){e.__h&&(e.__h=[])}),n=[],s.__e(e,t.__v)}}),X&&X(e,n)},s.unmount=function(e){ee&&ee(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(ae)}catch(e){s.__e(e,t.__v)}};var ie="function"==typeof requestAnimationFrame;function ae(e){var t=K;"function"==typeof e.__c&&e.__c(),K=t}function ue(e){var t=K;e.__c=e.__(),K=t}function le(n,e){return!n||n.length!==e.length||e.some(function(e,t){return e!==n[t]})}function se(e,t){return"function"==typeof t?t(e):t}function fe(e,t){for(var n in t)e[n]=t[n];return e}function pe(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var r in t)if("__source"!==r&&e[r]!==t[r])return!0;return!1}function me(e){this.props=e}(me.prototype=new E).isPureReactComponent=!0,me.prototype.shouldComponentUpdate=function(e,t){return pe(this.props,e)||pe(this.state,t)};var de=s.__b;s.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),de&&de(e)};var he="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911,ve=function(e,t){return null==e?null:C(C(e).map(t))},ye={map:ve,forEach:ve,count:function(e){return e?C(e).length:0},only:function(e){e=C(e);if(1!==e.length)throw"Children.only";return e[0]},toArray:C},_e=s.__e;function be(){this.__u=0,this.t=null,this.__b=null}function ge(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function Oe(){this.u=null,this.o=null}s.__e=function(e,t,n){if(e.then)for(var r,o=t;o=o.__;)if((r=o.__c)&&r.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),r.__c(e,t);_e(e,t,n)},(be.prototype=new E).__c=function(e,t){var n=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);function o(){i||(i=!0,n.componentWillUnmount=n.__c,c?c(a):a())}var c=ge(r.__v),i=!1;n.__c=n.componentWillUnmount,n.componentWillUnmount=function(){o(),n.__c&&n.__c()};var a=function(){var e,t;if(!--r.__u)for(r.state.__e&&(e=r.state.__e,r.__v.__k[0]=function t(e,n,r){return e&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(e){return t(e,n,r)}),e.__c&&e.__c.__P===n&&(e.__e&&r.insertBefore(e.__e,e.__d),e.__c.__e=!0,e.__c.__P=r)),e}(e,e.__c.__P,e.__c.__O)),r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate()},t=!0===t.__h;r.__u++||t||r.setState({__e:r.__b=r.__v.__k[0]}),e.then(o,o)},be.prototype.componentWillUnmount=function(){this.t=[]},be.prototype.render=function(e,t){var n;this.__b&&(this.__v.__k&&(n=document.createElement("div"),r=this.__v.__k[0].__c,this.__v.__k[0]=function t(e,n,r){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(e){"function"==typeof e.__c&&e.__c()}),e.__c.__H=null),null!=(e=fe({},e)).__c&&(e.__c.__P===r&&(e.__c.__P=n),e.__c=null),e.__k=e.__k&&e.__k.map(function(e){return t(e,n,r)})),e}(this.__b,n,r.__O=r.__P)),this.__b=null);var r=t.__e&&g(S,null,e.fallback);return r&&(r.__h=null),[g(S,null,t.__e?null:e.children),r]};var Se=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;3>>1,1),n.i.removeChild(e)}}),B(g(Ee,{context:n.context},e.__v),n.l)):n.l&&n.componentWillUnmount()}function je(e,t){return g(we,{__v:e,i:t})}(Oe.prototype=new E).__e=function(n){var r=this,o=ge(r.__v),c=r.o.get(n);return c[0]++,function(e){function t(){r.props.revealOrder?(c.push(e),Se(r,n,c)):e()}o?o(t):t()}},Oe.prototype.render=function(e){this.u=null,this.o=new Map;var t=C(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Oe.prototype.componentDidUpdate=Oe.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(e,t){Se(n,t,e)})};var Pe="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,Ie=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,De=function(e){return("undefined"!=typeof Symbol&&"symbol"==n(Symbol())?/fil|che|rad/i:/fil|che|ra/i).test(e)};function ke(e,t,n){return null==t.__k&&(t.textContent=""),B(e,t),"function"==typeof n&&n(),e?e.__c:null}E.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(E.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})});var Ce=s.event;function Ae(){}function xe(){return this.cancelBubble}function Ne(){return this.defaultPrevented}s.event=function(e){return(e=Ce?Ce(e):e).persist=Ae,e.isPropagationStopped=xe,e.isDefaultPrevented=Ne,e.nativeEvent=e};var Re,Te={configurable:!0,get:function(){return this.class}},qe=s.vnode;s.vnode=function(e){var t=e.type,n=e.props,r=n;if("string"==typeof t){for(var o in r={},n){var c=n[o];"value"===o&&"defaultValue"in n&&null==c||("defaultValue"===o&&"value"in n&&null==n.value?o="value":"download"===o&&!0===c?c="":/ondoubleclick/i.test(o)?o="ondblclick":/^onchange(textarea|input)/i.test(o+t)&&!De(n.type)?o="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(o)?o=o.toLowerCase():Ie.test(o)?o=o.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===c&&(c=void 0),r[o]=c)}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=C(n.children).forEach(function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)})),"select"==t&&null!=r.defaultValue&&(r.value=C(n.children).forEach(function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value})),e.props=r}t&&n.class!=n.className&&(Te.enumerable="className"in n,null!=n.className&&(r.class=n.className),Object.defineProperty(r,"className",Te)),e.$$typeof=Pe,qe&&qe(e)};var Le=s.__r;s.__r=function(e){Le&&Le(e),Re=e.__c};var Me={ReactCurrentDispatcher:{current:{readContext:function(e){return Re.__n[e.__c].props.value}}}};function He(e){return!!e&&e.$$typeof===Pe}"object"==("undefined"==typeof performance?"undefined":n(performance))&&"function"==typeof performance.now&&performance.now.bind(performance);var Ue={useState:function(e){return $=1,ne(se,e)},useReducer:ne,useEffect:function(e,t){var n=te(W++,3);!s.__s&&le(n.__H,t)&&(n.__=e,n.__H=t,K.__H.__h.push(n))},useLayoutEffect:re,useRef:function(e){return $=5,oe(function(){return{current:e}},[])},useImperativeHandle:function(e,t,n){$=6,re(function(){"function"==typeof e?e(t()):e&&(e.current=t())},null==n?n:n.concat(e))},useMemo:oe,useCallback:function(e,t){return $=8,oe(function(){return e},t)},useContext:function(e){var t=K.context[e.__c],n=te(W++,9);return n.__c=e,t?(null==n.__&&(n.__=!0,t.sub(K)),t.props.value):e.__},useDebugValue:function(e,t){s.useDebugValue&&s.useDebugValue(t?t(e):e)},version:"16.8.0",Children:ye,render:ke,hydrate:function(e,t,n){return V(e,t),"function"==typeof n&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(B(null,e),!0)},createPortal:je,createElement:g,createContext:function(e,r){e={__c:r="__cC"+d++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,t;return this.getChildContext||(n=[],((t={})[r]=this).getChildContext=function(){return t},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some(P)},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return e.Provider.__=e.Consumer.contextType=e},createFactory:function(e){return g.bind(null,e)},cloneElement:function(e){return He(e)?z.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:S,isValidElement:He,findDOMNode:function(e){return e&&(e.base||1===e.nodeType&&e)||null},Component:E,PureComponent:me,memo:function(t,r){function n(e){var t=this.props.ref,n=t==e.ref;return!n&&t&&(t.call?t(null):t.current=null),r?!r(this.props,e)||!n:pe(this.props,e)}function e(e){return this.shouldComponentUpdate=n,g(t,e)}return e.displayName="Memo("+(t.displayName||t.name)+")",e.prototype.isReactComponent=!0,e.__f=!0,e},forwardRef:function(o){function e(e,t){var r=fe({},e);return delete r.ref,o(r,(t=e.ref||t)&&("object"!=n(t)||"current"in t)?t:null)}return e.$$typeof=he,(e.render=e).prototype.isReactComponent=e.__f=!0,e.displayName="ForwardRef("+(o.displayName||o.name)+")",e},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:S,Suspense:be,SuspenseList:Oe,lazy:function(t){var n,r,o;function e(e){if(n||(n=t()).then(function(e){r=e.default||e},function(e){o=e}),o)throw o;if(!r)throw n;return g(r,e)}return e.displayName="Lazy",e.__f=!0,e},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Me};function Fe(){return Ue.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},Ue.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}function Be(){return Ue.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},Ue.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var Ve=["translations"];function ze(){return(ze=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n|<\/mark>)/g,sr=RegExp(lr.source);function fr(e){var t,n,r;if(!e.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=((e.__docsearch_parent?null===(t=e.__docsearch_parent)||void 0===t||null===(n=t._highlightResult)||void 0===n||null===(r=n.hierarchy)||void 0===r?void 0:r.lvl0:null===(e=e._highlightResult)||void 0===e||null===(o=e.hierarchy)||void 0===o?void 0:o.lvl0)||{}).value;return o&&sr.test(o)?o.replace(lr,""):o}function pr(){return(pr=Object.assign||function(e){for(var t=1;tr.OPENED&&void 0===t&&(clearTimeout(o),t=e(c.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(o),clearTimeout(t),n({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(o),clearTimeout(t),n({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(c.data)})}},logger:(o=lo,{debug:function(e,t){return o<=ao&&console.debug(e,t),Promise.resolve()},info:function(e,t){return o<=uo&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:Nr(),requestsCache:Nr({serializable:!1}),hostsCache:xr({caches:[Ar({key:"".concat("4.8.5","-").concat(e)}),Nr()]}),userAgent:Qr("4.8.5").add({segment:"Browser",version:"lite"}),authMode:Lr.WithinQueryParameters};return eo(t(t(t({},e),r),{},{methods:{search:no,searchForFacetValues:ro,multipleQueries:no,multipleSearchForFacetValues:ro,initIndex:function(t){return function(e){return to(t)(e,{methods:{search:co,searchForFacetValues:io,findAnswers:oo}})}}}}))}so.version="4.8.5";var fo=["footer","searchBox"];function po(){return(po=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n",highlightPostTag:"",hitsPerPage:20},h)}]).catch(function(e){throw"RetryError"===e.name&&o("error"),e}).then(function(e){var t=e.results[0],e=t.hits,t=t.nbHits,e=ir(e,function(e){return fr(e)});return n.context.searchSuggestions.lengthe.length)&&(t=e.length);for(var n=0,r=new Array(t);n + + + + + diff --git a/pr-1359/_images/developers_dark.svg b/pr-1359/_images/developers_dark.svg new file mode 100644 index 0000000000..29809a4b6f --- /dev/null +++ b/pr-1359/_images/developers_dark.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/pr-1359/_images/how_SN_works.svg b/pr-1359/_images/how_SN_works.svg new file mode 100644 index 0000000000..e3d4073000 --- /dev/null +++ b/pr-1359/_images/how_SN_works.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/pr-1359/_images/how_SN_works_dark.svg b/pr-1359/_images/how_SN_works_dark.svg new file mode 100644 index 0000000000..8085513182 --- /dev/null +++ b/pr-1359/_images/how_SN_works_dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-1359/_images/roadmap.svg b/pr-1359/_images/roadmap.svg new file mode 100644 index 0000000000..c8e5b5150f --- /dev/null +++ b/pr-1359/_images/roadmap.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pr-1359/_images/roadmap_dark.svg b/pr-1359/_images/roadmap_dark.svg new file mode 100644 index 0000000000..f308639e38 --- /dev/null +++ b/pr-1359/_images/roadmap_dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/pr-1359/architecture-and-concepts/_images/STRK_estimated_circulating_supply.jpg b/pr-1359/architecture-and-concepts/_images/STRK_estimated_circulating_supply.jpg new file mode 100644 index 0000000000..a3b9184db3 Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/STRK_estimated_circulating_supply.jpg differ diff --git a/pr-1359/architecture-and-concepts/_images/architecture.png b/pr-1359/architecture-and-concepts/_images/architecture.png new file mode 100644 index 0000000000..a96e623d95 Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/architecture.png differ diff --git a/pr-1359/architecture-and-concepts/_images/l1l2.png b/pr-1359/architecture-and-concepts/_images/l1l2.png new file mode 100644 index 0000000000..86ee7ca477 Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/l1l2.png differ diff --git a/pr-1359/architecture-and-concepts/_images/l2l1.png b/pr-1359/architecture-and-concepts/_images/l2l1.png new file mode 100644 index 0000000000..249be11328 Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/l2l1.png differ diff --git a/pr-1359/architecture-and-concepts/_images/planned_distribution_STRK.jpg b/pr-1359/architecture-and-concepts/_images/planned_distribution_STRK.jpg new file mode 100644 index 0000000000..4c6f9424ec Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/planned_distribution_STRK.jpg differ diff --git a/pr-1359/architecture-and-concepts/_images/transaction-flow.png b/pr-1359/architecture-and-concepts/_images/transaction-flow.png new file mode 100644 index 0000000000..10c3dbcdce Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/transaction-flow.png differ diff --git a/pr-1359/architecture-and-concepts/_images/trie.png b/pr-1359/architecture-and-concepts/_images/trie.png new file mode 100644 index 0000000000..3d7cd72a85 Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/trie.png differ diff --git a/pr-1359/architecture-and-concepts/_images/txn-flow.png b/pr-1359/architecture-and-concepts/_images/txn-flow.png new file mode 100644 index 0000000000..742606a1f3 Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/txn-flow.png differ diff --git a/pr-1359/architecture-and-concepts/_images/verifier-constructor-params.png b/pr-1359/architecture-and-concepts/_images/verifier-constructor-params.png new file mode 100644 index 0000000000..19e75aa68d Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/verifier-constructor-params.png differ diff --git a/pr-1359/architecture-and-concepts/_images/verifier-gps-statement-verifier.png b/pr-1359/architecture-and-concepts/_images/verifier-gps-statement-verifier.png new file mode 100644 index 0000000000..199dc9c408 Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/verifier-gps-statement-verifier.png differ diff --git a/pr-1359/architecture-and-concepts/_images/verifier-sharp-verification-flow.png b/pr-1359/architecture-and-concepts/_images/verifier-sharp-verification-flow.png new file mode 100644 index 0000000000..301d11f514 Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/verifier-sharp-verification-flow.png differ diff --git a/pr-1359/architecture-and-concepts/_images/verifier-sharp-workflow.png b/pr-1359/architecture-and-concepts/_images/verifier-sharp-workflow.png new file mode 100644 index 0000000000..a7bfeca4fa Binary files /dev/null and b/pr-1359/architecture-and-concepts/_images/verifier-sharp-workflow.png differ diff --git a/pr-1359/architecture-and-concepts/accounts/account-functions/index.html b/pr-1359/architecture-and-concepts/accounts/account-functions/index.html new file mode 100644 index 0000000000..7557bd02cb --- /dev/null +++ b/pr-1359/architecture-and-concepts/accounts/account-functions/index.html @@ -0,0 +1,1269 @@ + + + + + + Account interface function reference :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Account interface function reference

+
+

Overview

+
+
+

The functions in the table Starknet account interface functions are part of account contracts. Where required, you must include these functions within your account contract. The logic of these functions can be mostly arbitrary, with a few limitations. For information on these limitations, see Limitations on validation.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Starknet account interface functions
Function nameWhen required

__validate__

+

Always required

+

__execute__

+

Always required. The signatures of __validate__ and __execute__ must be identical.

+
+
+ + + + + +
+ + +
+

At the moment of writing (Starknet 0.13.2), two critical validations must happen in __execute__, and their absence can lead to draining of the account’s funds:

+
+
+

(1) assert!(get_caller_address().is_zero())

+
+
+

This asserts that the account’s __execute__ is not called from another contract, thus skipping validations (in later versions we may disallow calling execute from another contract at the protocol level)

+
+
+

(2) assert!(get_tx_info().unbox().version.into() >= 1_u32)

+
+
+

This asserts that the transaction’s version is at least 1, preventing the account from accepting INVOKE v0 transactions. It is critical to explicitly disallow the deprecated v0 transaction type, as v0 transactions assume that the signature verification happens in __execute__, and are thus skipping __validate__ entirely.

+
+
+

__validate_declare__

+

Required for the account to be able to send a DECLARE transaction. This function must receive exactly one argument, which is the class hash of the declared class.

+

__validate_deploy__

+

Required to allow deploying an instance of the account contract with a DEPLOY_ACCOUNT transaction. The arguments of __validate_deploy__ must be the class hash of the account to be deployed, the salt used for computing the account’s contract address, followed by the constructor arguments.

+
+
+ + + + + +
+ + +
+

You can only use the __validate_deploy__ function in an account contract to validate the DEPLOY_ACCOUNT transaction for that same contract. +That is, this function runs at most once throughout the lifecycle of the account.

+
+
+

constructor

+

All contracts have a constructor function. It can be explicitly defined in the contract, or if not explicitly defined, the sequencer uses a default constructor function, which is empty.

+
+
+

When the sequencer receives a transaction, it calls the corresponding validation function with the appropriate input from the transaction’s data, as follows:

+
+
+
    +
  • +

    For an INVOKE transaction, the sequencer calls the __validate__ function with the transaction’s calldata as input. The transaction’s calldata will be deserialized to the arguments in the __validate__ function’s signature, it is up to the sender to make sure that the calldata is encoded appropriately according to validate’s signature. After successfully completing validation, the sequencer calls the __execute__ function with the same arguments.

    +
  • +
  • +

    For a DEPLOY_ACCOUNT transaction, the sequencer calls the constructor function with the transaction’s constructor_calldata as input (as above, it is expected that the constructor’s calldata successfully desieralizes to the arguments in the constructor signature). After the successful execution of the constructor, the sequencer validates the transaction by calling the __validate_deploy__ function.

    +
  • +
  • +

    For a DECLARE transaction, the sequencer validates the transaction by calling the __validate_declare__ function.

    +
  • +
  • +

    For more information on the available transaction types and their fields, see Transaction types.

    +
  • +
  • +

    For more information on the validation and execution stages, see Transaction lifecycle.

    +
  • +
+
+
+

Separating the validation and execution stages guarantees payment to sequencers for work completed and protects them from Denial of Service (DoS) attacks.

+
+
+
+
+

Potential DoS

+
+
+

The validation functions have limitations, described below, that are designed to prevent the following DoS attacks on the sequencer:

+
+
+
    +
  • +

    An attacker could cause the sequencer to perform a large amount of work before a transaction fails validation. Two examples of such attacks are:

    +
    +
      +
    • +

      Spamming INVOKE transactions whose __validate__ requires many steps, but eventually fails

      +
    • +
    • +

      Spamming DEPLOY_ACCOUNT transactions that are invalid as a result of the constructor or __validate_deploy__ failing.

      +
    • +
    +
    +
  • +
  • +

    The above attacks are solved by making sure that the validation step is not resource-intensive, e.g. by keeping the maximal number of steps low. However, even if the validation is simple, the following "mempool pollution" attack could still be possible:

    +
    +
      +
    1. +

      An attacker fills the mempool with transactions that are valid at the time they are sent.

      +
    2. +
    3. +

      The sequencer is ready to execute them, thinking that by the time it includes them in a block, they will still be valid.

      +
    4. +
    5. +

      Shortly after the transactions are sent, the attacker sends one transaction that somehow invalidates all the previous ones and makes sure it’s included in a block, e.g. by offering higher fees for this one transaction. +An example of such an attack is having the implementation of __validate__ checks that the value of a storage slot is 1, and the attacker’s transaction later sets it to 0. Restricting validation functions from calling external contracts prevents this attack.

      +
    6. +
    +
    +
  • +
+
+
+
+
+

Limitations on validation

+
+
+

The limitations listed here apply to the following validation functions:

+
+
+
    +
  • +

    __validate__, __validate_deploy__, and __validate_declare__.

    +
  • +
  • +

    A constructor, when run in a DEPLOY_ACCOUNT transaction. That is, if an account is deployed from an existing class via the deploy syscall, these limitations do not apply.

    +
  • +
+
+
+

The validation functions have the following limitations:

+
+
+
    +
  • +

    You cannot call functions in external contracts, only in your account contract.

    +
    + + + + + +
    + + +
    +

    This restriction enforces a single storage update being able to invalidate only transactions from a single account. However, be aware that an account can always invalidate its own past transactions by e.g. changing its public key.

    +
    +
    +

    This limitation implies that the fees you need to pay to invalidate transactions in the mempool are directly proportional to the number of unique accounts whose transactions you want to invalidate.

    +
    +
    +
    +
  • +
  • +

    The maximum number of computational steps, measured in Cairo steps, for a validation function is 1,000,000.

    +
  • +
  • +

    A builtin can be applied a limited number of times. For specific limits for each builtin, see Current limits.

    +
  • +
  • +

    The get_execution_info syscall behaves differently When raised from one of the validate functions:

    +
    +
      +
    • +

      sequencer_address is set to zero

      +
    • +
    • +

      block_timestamp returns the time (in UTC), rounded to the most recent hour.

      +
    • +
    • +

      block_number returns the block number, rounded down to the nearest multiple of 100.

      +
    • +
    +
    +
  • +
  • +

    The following syscalls cannot be called:

    +
    +
      +
    • +

      get_block_hash

      +
    • +
    • +

      get_sequencer_address (this syscall is only supported for Cairo 0 contracts).

      +
    • +
    +
    +
  • +
+
+
+
+
+

Invalid transactions

+
+
+

When the __validate__, __validate_deploy__, or __validate_declare__, function fails, the account in question does not pay any fee, and the transaction’s status is REJECTED.

+
+
+
+
+

Reverted transactions

+
+
+

A transaction has the status REVERTED when the __execute__ function fails. A reverted transaction is included in a block, and the sequencer is eligible to charge a fee for the work done up to the point of failure, similar to Ethereum.

+
+
+
+
+

Implementation reference

+
+
+

Thanks to account abstraction, the logic of __execute__ and the different validation functions is up to the party implementing the account. +To see a concrete implementation, see OpenZeppelin’s account component. +This implementation adheres to SNIP6, which defines a standard for account interfaces.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/accounts/approach/index.html b/pr-1359/architecture-and-concepts/accounts/approach/index.html new file mode 100644 index 0000000000..e732308ba7 --- /dev/null +++ b/pr-1359/architecture-and-concepts/accounts/approach/index.html @@ -0,0 +1,1064 @@ + + + + + + Starknet’s account interface :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Starknet’s account interface

+
+
+
+

Starknet’s account structure is inspired by Ethereum’s EIP-4337, where instead of EOAs, you use smart contract accounts with arbitrary verification logic.

+
+
+

While not mandatory at the protocol level, you can use a richer standard interface for accounts, defined in Starknet Improvement Proposal #6 (SNIP-6). SNIP-6 was developed by community members at OpenZeppelin, in close collaboration with wallet teams and other Core Starknet developers.

+
+
+
+
+

Account functions

+
+
+

A valid account contract includes specific functions, depending on the type of the contract. For more information, see Account interface function reference.

+
+
+
+
+

Replay protection

+
+
+

In Starknet, similar to Ethereum, every contract has a nonce, including an account contract. This nonce is sequential. The nonce of a transaction sent from an account must match the nonce of that account. After the transaction is executed, whether or not it is reverted, the nonce is incremented by one.

+
+
+ + + + + +
+ + +
+

In Starknet, only the nonce of account contracts, that is, those adhering to the above structure, can be non-zero.

+
+
+

In contrast, in Ethereum, regular smart contracts, known as Contract Accounts, as opposed to Externally Owned Accounts can increment their nonce by deploying smart contracts, that is, executing the CREATE and CREATE2 opcodes.

+
+
+

For more information on accounts in Ethereum, see Ethereum Accounts in the Ethereum documentation.

+
+
+
+
+

A nonce serves two important roles:

+
+
+
    +
  • +

    It guarantees transaction hash uniqueness, which is important for a good user experience.

    +
  • +
  • +

    It provides replay protection to the account: Because the signature is bound to a particular nonce, a malicious party cannot replay the transaction.

    +
  • +
+
+
+

Starknet currently determines the nonce structure at the protocol level to be sequential. In the future, Starknet will consider a more flexible design, extending account abstraction to nonce management, previously referred to as nonce abstraction.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/accounts/deploying-new-accounts/index.html b/pr-1359/architecture-and-concepts/accounts/deploying-new-accounts/index.html new file mode 100644 index 0000000000..543725ebaf --- /dev/null +++ b/pr-1359/architecture-and-concepts/accounts/deploying-new-accounts/index.html @@ -0,0 +1,1132 @@ + + + + + + Deploying a new account :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Deploying a new account

+
+
+
+

You can deploy a new account in the following ways:

+
+
+
    +
  • +

    Send a DEPLOY_ACCOUNT transaction. This method does not require a preexisting account.

    +
  • +
  • +

    Using the Universal Deployer Contract (UDC). This method requires an existing account to send the INVOKE transaction.

    +
  • +
+
+
+

Upon receiving one of these transactions, the sequencer performs the following steps:

+
+
+
    +
  1. +

    Runs the respective validation function in the contract, as follows:

    +
    +
      +
    • +

      When deploying with the DEPLOY_ACCOUNT transaction type, the sequencer executes the __validate_deploy__ function in the deployed contract.

      +
    • +
    • +

      When deploying using the UDC, the sequencer executes the __validate__ function in the contract of the sender’s address.

      +
    • +
    +
    +
  2. +
  3. +

    Executes the constructor with the given arguments.

    +
  4. +
  5. +

    Charges fees from the new account address.

    +
    + + + + + +
    + + +
    +

    If you use a DEPLOY_ACCOUNT transaction, the fees are paid from the address of the deployed account. If you use the UDC, which requires an INVOKE transaction, the fees are paid from the sender’s account. For information on the differences between V1 and V3 INVOKE transactions, see INVOKE transaction in Transaction types.

    +
    +
    +
    +
  6. +
  7. +

    Sets the account’s nonce as follows:

    +
    +
      +
    • +

      1, when deployed with a DEPLOY_ACCOUNT transaction

      +
    • +
    • +

      0, when deployed with the UDC

      +
    • +
    +
    +
  8. +
+
+
+
+
+

Deploying a new account with Starkli

+
+
+

Starkli simplifies account creation, whether you create an account as a Starknet wallet account, or using the UDC.

+
+
+

To create and deploy a new account, use Starkli’s starkli account command.

+
+
+

For more information on creating a new account as a Starknet wallet account with a DEPLOY_ACCOUNT transaction, or by using the UDC with an INVOKE transaction , see Accounts in the Starkli Book.

+
+
+
+
+

DEPLOY_ACCOUNT constructor restrictions

+
+
+

The constructor of the DEPLOY_ACCOUNT transaction has the following limitations:

+
+
+
    +
  • +

    Restricted access to sequencer_address in the get_execution_info syscall. The syscall returns zero values for sequencer_address

    +
  • +
  • +

    Restricted access to the following syscalls:

    +
    +
      +
    • +

      get_block_hash for Cairo contracts

      +
    • +
    • +

      get_sequencer_address for Cairo 0 contracts

      +
    • +
    +
    +
  • +
+
+
+
+
+

Additional resources

+
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/accounts/introduction/index.html b/pr-1359/architecture-and-concepts/accounts/introduction/index.html new file mode 100644 index 0000000000..af65f0c360 --- /dev/null +++ b/pr-1359/architecture-and-concepts/accounts/introduction/index.html @@ -0,0 +1,1104 @@ + + + + + + What is an account? :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

What is an account?

+
+
+
+

An account represents a user onchain, and enables that user to interact with the blockchain.

+
+
+

Through an account, you can send transactions and interact with other contracts. In order for you to own an onchain asset, such as an ERC-20 token or an NFT, that asset must be associated with your account address.

+
+
+
+
+

Ethereum account structure

+
+
+

Within Ethereum individual user accounts are known as Externally Owned Accounts (EOAs).

+
+
+

EOAs differ from smart contracts in that EOAs are not controlled by code, but rather by a pair of private and public keys.

+
+
+

The account’s address is derived from those keys and only by possessing the private key can you initiate transactions from an account. While Ethereum contracts are passive, that is, they can only change if they were called inside a transaction, EOAs can initiate transactions.

+
+
+

While simple, because the signature scheme is fixed, EOAs have some drawbacks, including the following:

+
+
+
    +
  • +

    Control over the private key gives complete control over +the account, so you must keep your seed phrase secure yet accessible.

    +
  • +
  • +

    Limited flexibility surrounding wallet functionality

    +
  • +
+
+
+

EIP-4337 is a design proposal for Ethereum that outlines account abstraction, whereby all accounts are managed via a dedicated smart contract on the Ethereum network, as a way to increase flexibility and usability. You can add custom logic on top of the basic EOA functionality, thereby bringing account abstraction into Ethereum.

+
+
+
+
+

What is Account Abstraction?

+
+
+

Account abstraction enables more flexible account management. Rather than the protocol determining an account’s behavior, an account contract, which is a smart contract with programmable logic, defines a user’s account.

+
+
+

Using account abstraction you can now program how your account functions.

+
+
+

For example, you can:

+
+
+
    +
  • +

    Determine what it means for a signature to be valid, or what contracts your account is allowed to interact with. This is known as signature abstraction.

    +
  • +
  • +

    Pay transaction fees in different tokens. This is known as fee abstraction.

    +
  • +
  • +

    Design your own replay protection mechanism and allow sending multiple uncoupled transactions in parallel.

    +
    +

    In Ethereum, you cannot send two transactions in parallel, you must wait for confirmation of the first before sending the second. Otherwise, the second transaction can be rejected due to an invalid nonce. With account abstraction, a sequential nonce is not required. This is known as nonce abstraction.

    +
    +
  • +
+
+
+

Today, Starknet offers signature abstraction. In the future, we will enrich the current account abstraction design. For example, see the paymaster proposal for fee abstraction in the Starknet Community Forum.

+
+
+
+
+

Examples of customizing account functionality

+
+
+

Two examples of how you might program an account to function using account abstraction are:

+
+
+ + + + + + + + + +
+Social recovery + +

A process where if you lose your wallet, you are able to retrieve it via a selected social network, vastly improving the typical experience of wallet recovery.

+
+Operating your account via facial recognition + +

With signature abstraction, you can use your phone’s native hardware to sign transactions, making it practically impossible to take control of another user’s account, even if your phone is stolen.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/accounts/simplified-transaction-flow/index.html b/pr-1359/architecture-and-concepts/accounts/simplified-transaction-flow/index.html new file mode 100644 index 0000000000..dfbe4eb194 --- /dev/null +++ b/pr-1359/architecture-and-concepts/accounts/simplified-transaction-flow/index.html @@ -0,0 +1,1036 @@ + + + + + + Simplified transaction flow :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Simplified transaction flow

+
+
+
+

The key stages of transaction lifetime are:

+
+
+
    +
  1. +

    The sequencer selects a transaction from the mempool and calls the __validate__ function.

    +
  2. +
  3. +

    If the transaction is valid, the sequencer calls the __execute__ function.

    +
  4. +
  5. +

    If __execute__ runs successfully, the sequencer includes the transaction in the block, charges the fee, and proceeds to work on the next transaction.

    +
  6. +
  7. +

    After completing the block, the sequencer sends the block to the prover.

    +
  8. +
+
+
+
+
+

The payment mechanism

+
+
+

The sequencer receives fees in ETH in return for including transactions in a block.

+
+
+

For more details on how the transaction fee is computed, see Gas and transaction fees.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/accounts/universal-deployer/index.html b/pr-1359/architecture-and-concepts/accounts/universal-deployer/index.html new file mode 100644 index 0000000000..d23895d383 --- /dev/null +++ b/pr-1359/architecture-and-concepts/accounts/universal-deployer/index.html @@ -0,0 +1,1214 @@ + + + + + + Universal Deployer Contract (UDC) :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Universal Deployer Contract (UDC)

+
+
+
+

The Universal Deployer Contract (UDC) is a singleton smart contract that wraps the deploy syscall to expose it to any contract that doesn’t implement it, such as account contracts. You can think of it as a standardized generic factory for Starknet contracts.

+
+
+

And since Starknet has no deployment transaction type, it offers a standardized way to deploy smart contracts by following the standard deployer interface and emitting a ContractDeployed event.

+
+
+

For more information see the proposal for the standard deployer interface. +For details on the motivation and the decision making process, see the Universal Deployer Contract proposal.

+
+
+
+
+

UDC address

+
+
+

The UDC address is 0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf in Mainnet, Sepolia testnet, and starknet-devnet. This address might change in the future when it is migrated to a modern version of Cairo.

+
+
+
+
+

Interface

+
+
+
+
trait IUniversalDeployer {
+    fn deployContract(
+        class_hash: ClassHash,
+        salt: felt252,
+        unique: bool,
+        calldata: Span<felt252>
+    ) -> ContractAddress;
+}
+
+
+
+
+
+

Deploying a contract with the UDC

+
+
+
Procedure
+
    +
  1. +

    Declare the contract with a DECLARE transaction, or ensure that the contract has been declared.

    +
    +

    For more information, see the DECLARE transaction.

    +
    +
  2. +
  3. +

    Call the deployContract function in the UDC.

    +
  4. +
+
+
+
Example implementation in Cairo:
+
+
#[starknet::interface]
+trait IUniversalDeployer<TContractState> {
+    fn deployContract(
+        ref self: TContractState,
+        class_hash: ClassHash,
+        salt: felt252,
+        unique: bool,
+        calldata: Span<felt252>
+    ) -> ContractAddress; }
+
+const UDC_ADDRESS: felt252 = 0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf;
+
+fn deploy() -> ContractAddress {
+    let dispatcher = IUniversalDeployerDispatcher {
+        contract_address: UDC_ADDRESS.try_into().unwrap()
+    };
+
+    // deployment parameters
+    let class_hash = class_hash_const::<
+       0x5c478ee27f2112411f86f207605b2e2c58cdb647bac0df27f660ef2252359c6
+    >();
+    let salt = 1234567879;
+    let unique = false;
+    let mut calldata = array![];
+
+    // the UDC returns the deployed contract address
+    dispatcher.deployContract(class_hash, salt, unique, calldata.span())
+}
+
+
+
+
+
+

Deployment types

+
+
+

The Universal Deployer Contract offers two types of addresses to deploy: origin-dependent and origin-independent. +As the names suggest, the origin-dependent type includes the deployer’s address in the address calculation, +whereas, the origin-independent type does not. +The unique boolean parameter ultimately determines the type of deployment.

+
+
+ + + + + +
+ + +
+

When deploying a contract that uses get_caller_address in the constructor calldata, remember that the UDC, not the account, deploys that contract. +Therefore, querying get_caller_address in a contract’s constructor returns the UDC’s address, not the account’s address.

+
+
+
+
+

Origin-dependent

+
+

By making deployments dependent upon the origin address, users can reserve a whole address space to prevent someone else from taking ownership of the address.

+
+
+

Only the owner of the origin address can deploy to those addresses.

+
+
+

Achieving this type of deployment necessitates that the origin sets unique to true in the deployContract call. +Under the hood, the function call leverages the origin’s address and creates a hashchain by hashing the origin’s address with the given salt.

+
+
+

To deploy a unique contract address pass:

+
+
+
+
let deployed_addr = udc.deployContract(class_hash, salt, true, calldata.span());
+
+
+
+
+

Origin-independent

+
+

Origin-independent contract deployments create contract addresses independent of the deployer and the UDC instance. +Instead, only the class hash, salt, and constructor arguments determine the address. +This type of deployment enables redeployments of accounts and known systems across multiple networks. +To deploy a reproducible deployment, set unique to false.

+
+
+
+
let deployed_addr = udc.deployContract(class_hash, salt, false, calldata.span());
+
+
+
+
+
+
+

Deploying the UDC

+
+
+ + + + + +
+ + +
+

The UDC has already been deployed on most networks and development environments. +The standard requires the UDC to be deployed passing deploy_from_zero=true and salt=0 as arguments to the deploy syscall. This results in a deterministic and predictable address across all instances of Starknet, facilitating SDK integration and reproducibility of deployments.

+
+
+
+
+
+
+

API specification

+
+
+

deployContract method

+
+

Deploy a contract through the Universal Deployer Contract.

+
+
+
+
fn deployContract(
+    classHash: ClassHash,
+    salt: felt252,
+    unique: bool,
+    calldata: Span<felt252>
+) -> ContractAddress
+
+
+
+
+

ContractDeployed event

+
+

Emitted when deployer deploys a contract through the Universal Deployer Contract.

+
+
+
+
#[derive(Drop, starknet::Event)]
+struct ContractDeployed {
+    address: ContractAddress,
+    deployer: ContractAddress,
+    unique: bool,
+    classHash: ClassHash,
+    calldata: Span<felt252>,
+    salt: felt252,
+}
+
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/cryptography/hash-functions/index.html b/pr-1359/architecture-and-concepts/cryptography/hash-functions/index.html new file mode 100644 index 0000000000..69abf795fc --- /dev/null +++ b/pr-1359/architecture-and-concepts/cryptography/hash-functions/index.html @@ -0,0 +1,1157 @@ + + + + + + Hash functions :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Hash functions

+
+

Domain and range

+
+
+

All hashes outputs are eventually mapped to elements in \(\mathbb{F}_P\), where \(P=2^{251}+17\cdot 2^{192}+1\).

+
+
+

There are three hash functions used throughout Starknet’s specifications:

+
+
+
    +
  • +

    \(\text{sn_keccak}: \{0,1\}^* \rightarrow \mathbb{F}_P\)

    +
  • +
  • +

    \(\text{pedersen}: \mathbb{F}_P^2\rightarrow\mathbb{F}_P\)

    +
  • +
  • +

    \(\text{poseidon}: \mathbb{F}_P^*\rightarrow \mathbb{F}_P\)

    +
  • +
+
+
+
+
+

Starknet Keccak

+
+
+

Starknet Keccak, usually denoted by \(\text{sn_keccak}\), is defined as the first 250 bits of the Keccak256 hash. For Starknet Keccak, Keccak256 is augmented +in order to fit into a field element.

+
+
+
+
+

Pedersen hash

+
+
+

Pedersen hash makes use of the following STARK friendly elliptic curve over \(\mathbb{F}_P\):

+
+
+
+\[y^2=x^3+\alpha x +\beta\] +
+
+
+

where

+
+
+
    +
  • +

    \(\alpha=1\)

    +
  • +
  • +

    \(\beta = 3141592653589793238462643383279502884197169399375105820974944592307816406665\)

    +
  • +
+
+
+

Definition

+
+

Given an input \((a,b)\in\mathbb{F}_P^2\), we begin by breaking it into \(a_{low}, a_{high}, b_{low}, b_{high}\), +where the low part consists of the low 248 bits of the element and the high part consists of the high 4 bits of the element. Our Pedersen hash is then defined by:

+
+
+
+\[h(a,b) = \left[\text{shift_point} + a_{low} \cdot P_0 + a_{high} \cdot P1 + b_{low} \cdot P2 + b_{high} \cdot P3\right]_x\] +
+
+
+

where the values of the constants \(shift\_point, P_0, P_1, P_2, P_3\) can be found in fast_pedersen_hash.py, and \([P]_x\) denotes the \(x\) coordinate of the point \(P\).

+
+
+

For more information, see STARK curve.

+
+
+
+
+
+

Poseidon hash

+
+
+

Poseidon is a family of hash functions designed to be very efficient as algebraic circuits. As such, they can be very useful in ZK-proving systems such as STARKs.

+
+
+

Poseidon is a sponge construction based on the Hades permutation. Starknet’s version of Poseidon is based on a three-element state permutation.

+
+
+

A Poseidon hash of up to 2 elements is defined as follows.

+
+
+
+\[\text{poseidon_1}(x) := \left[\text{hades_permutation}(x,0,1)\right]_0\] +
+
+
+
+\[\text{poseidon_2}(x,y) := \left[\text{hades_permutation}(x,y,2)\right]_0\] +
+
+
+

Where \([\cdot]_j\) denotes taking the \(j\)'th coordinate of a tuple.

+
+ +
+
+
+

Array hashing

+
+
+

Pedersen

+
+

Let \(h\) denote the pedersen hash function, then given an array \(a_1,...,a_n\) of \(n\) field elements +we define \(h(a_1,...,a_n)\) to be:

+
+
+
+\[h(...h(h(0, a_1),a_2),...,a_n),n)\] +
+
+
+
+

Poseidon

+
+

Let \(\text{hades}:\mathbb{F}_P^3\rightarrow\mathbb{F}_P^3\) denote the Hades permutation, with Starknet’s parameters, then given an array \(a_1,...,a_n\) of \(n\) field elements +we define \(\text{poseidon}(a_1,...,a_n)\) to be the first coordinate of \(H(a_1,...,a_n;0,0,0)\), where:

+
+
+
+\[H(a_1,...,a_n;s_1,s_2,s_3)=\begin{cases} +H\big(a_3,...,a_n;\text{hades}(s_1+a_1, s_2+a_2, s_3)\big), & \text{if } n\ge 2 \\ +\text{hades}(s_1+a_1,s_2+1,s_3), & \text{if } n=1 \\ +\text{hades}(s_1+1,s_2,s_3), & \text{if } n=0 \\ +\end{cases}\] +
+
+
+

For an implementation of the above in Python, see poseidon_hash.py, +and for an equivalent Cairo implementation, see poseidon.cairo in the cairo-lang GitHub repository.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/cryptography/p-value/index.html b/pr-1359/architecture-and-concepts/cryptography/p-value/index.html new file mode 100644 index 0000000000..ee8bc8f64a --- /dev/null +++ b/pr-1359/architecture-and-concepts/cryptography/p-value/index.html @@ -0,0 +1,1013 @@ + + + + + + The STARK field :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

The STARK field

+
+

The STARK field is the finite field \(\mathbb{F}_P\), where \(P\) is a prime number, calculated as follows:

+
+
+
+\[P = 2^{251} + 17*2^{192} + 1\] +
+
+
+

The Cairo VM uses the STARK field, referred to as a field element, or felt. The felt252 type in Cairo refers to elements of this field.

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/cryptography/stark-curve/index.html b/pr-1359/architecture-and-concepts/cryptography/stark-curve/index.html new file mode 100644 index 0000000000..0320293692 --- /dev/null +++ b/pr-1359/architecture-and-concepts/cryptography/stark-curve/index.html @@ -0,0 +1,1031 @@ + + + + + + The STARK curve :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

The STARK curve

+
+

The STARK curve is an elliptic curve defined as follows:

+
+
+
+\[y^2 \equiv x^3 + \alpha \cdot x + \beta \pmod{p}\] +
+
+
+

where:

+
+
+
+\[\begin{align*} \alpha &= 1 \\ \beta &= 3141592653589793238462643383279502884197169399375105820974944592307816406665 \\ +p &= 3618502788666131213697322783095070105623107215331596699973092056135872020481\\ &= 2^{251} + 17 \cdot 2^{192} + 1 +\end{align*}\] +
+
+
+

The Generator point used in the ECDSA scheme is:

+
+
+
+\[\begin{split}G = (874739451078007766457464989774322083649278607533249481151382481072868806602, \\ 152666792071518830868575557812948353041420400780739481342941381225525861407)\end{split}\] +
+
+
+

The STARK curve is commonly used in smart contracts but not distinguished by the Starknet protocol.

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/economics-of-starknet/index.html b/pr-1359/architecture-and-concepts/economics-of-starknet/index.html new file mode 100644 index 0000000000..78dfff89d4 --- /dev/null +++ b/pr-1359/architecture-and-concepts/economics-of-starknet/index.html @@ -0,0 +1,1187 @@ + + + + + + The token economics of Starknet :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

The token economics of Starknet

+
+
+
+

Starknet is a developing decentralized protocol and the economic mechanisms described here, also known as tokenomics, are subject to change based on governance decisions made by the larger community of Starknet. For more details on Starknet’s governance processes see the Starknet Governance Hub. This document describes certain economic fundamentals of the Starknet token. This document is intended for informational purposes only and is meant to outline the usage and functionalities of the asset within Starknet. It is important to understand that the primary purpose of the Starknet token, STRK, is to facilitate operations and activities on Starknet and it is not intended to serve as an investment.

+
+
+
+
+

Why are economics relevant?

+
+
+

Blockchains work through a combination of cryptography and economic incentives. Cryptography limits what actors in the system can do, for example, transactions must be validly signed to be included in the chain. Economic incentives encourage actors to voluntarily perform actions that maintain the network’s capabilities when spending their own resources, for example, miners or stakers actively publish new blocks to the chain because they can receive fees and new tokens as a reward. Blockchains are valuable because they are data structures maintained by diverse and, ideally, large groups of otherwise unaffiliated persons. This gives them resilience: Any one participant can disappear, but the data structure is preserved. This also gives them censorship resistance: No single person can unilaterally decide to forbid certain persons from using the network.

+
+
+

Starknet operates as a Layer 2 (L2) network on top of Ethereum. Today, Starknet achieves secure low-cost transactions by using the STARK cryptographic proof system to reduce the size of transaction data while preserving and verifying the integrity of that data. Still under development, Starknet will achieve resilience and censorship resistance by using a token, the Starknet token (STRK), to incentivize network participants to sequence transactions for users of the network and to ensure that there is a provably fair mechanism, a proof-of-stake mechanism, to determine who should sequence and submit a proof for the network blocks. A proof-of-stake mechanism might also be used to facilitate data availability solutions and other significant services required for network operations.

+
+
+
+
+

The purpose of the STRK token

+
+
+

STRK is the mechanism for paying fees to enable operation of the network, maintaining and securing the network by enabling staking for consensus, and deciding on Starknet’s values and technology goals by voting for governance proposals.

+
+
+
    +
  • +

    Transaction fees: Originally, fees in Starknet were paid only in Ether (ETH). As of v.0.13.0, fees for transactions on the network can be paid using STRK, as well as ETH.

    +
    +

    A portion of the fees paid in STRK are converted to ETH by the receiving sequencer, in order to cover Ethereum L1 gas costs, which, due to the specifications of the Ethereum protocol, must be paid in ETH.

    +
    +
  • +
  • +

    Staking: Certain services that are critical to the liveness and security of Starknet may require the staking of Starknet tokens. These services might be offered by multiple providers, and could include sequencing, reaching temporary L2 consensus before L1 finality is reached, STARK-proving services, and data availability provisioning, to name a few examples. These protocol changes are still under discussion within the larger governance community and are targeted for 2024 -2025.

    +
  • +
  • +

    Governance: Proposals for improving Starknet might require a minimal token support threshold. Voting, either directly or via delegation, will be required for changes to the protocol that are essential to Starknet’s liveness, security, and maintenance. Today, for example, major updates to the Starknet Operating System require the approval of token holders. +For more information about Governance see the Starknet Governance Hub

    +
  • +
+
+
+ + + + + +
+ + +
+

As discussed above, the Starknet tokens are digital assets intended to support the operation and usage of Starknet and are not offered as an investment. As such, the Starknet tokens do not represent any equity in StarkWare or the Starknet Foundation, nor do they provide any participation right in StarkWare or grant any right of claim from StarkWare or the Starknet Foundation.

+
+
+
+
+
+
+

Supply and distribution

+
+
+

Ten billion Starknet tokens were initially created by StarkWare in May 2022 and minted onchain on November 30, 2022.

+
+
+

The existing ten billion tokens have been or are planned to be distributed according to the following:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

20.04%: Early Contributors

Tokens allocated for StarkWare’s team members and early contributors. These tokens are subject to a lock-up schedule, as further detailed below.

18.17%: Investors

Tokens allocated for StarkWare’s investors. These tokens are subject to a lock-up schedule, as further detailed below.

10.76%: StarkWare

Tokens allocated for StarkWare for operation services such as to pay fees, provide other services on Starknet, and engage other service providers.

12.93%: Grants including Development Partners (aka DPs)

Tokens allocated for grants for research or work done to develop, test, deploy and maintain the Starknet protocol. The process for applications and allocations related to Starknet Foundation Grants will be outlined in a post at a later date.

9.00%: Community Provisions

Tokens distributed to those who contributed to Starknet and powered or developed its underlying technology.

9.00%: Community Rebates

Tokens allocated for rebates in Starknet tokens to partially cover the costs of onboarding to Starknet from Ethereum. Community rebates are not yet available and will be announced in 2024 in a subsequent post.

10.00%: Foundation Strategic Reserves

Tokens allocated for the Starknet Foundation to fund ecosystem activities that are aligned with the Foundation’s mission.

8.10%: Foundation Treasury

Token allocated for the Starknet Foundation’s treasury available for operations and other future initiatives by the Starknet Foundation.

2.00%: Donations

Tokens reserved for donations to institutions and organizations, such as universities, NGOs, etc, as decided by the Starknet Foundation.

+
+

Planned distribution of STRK

+
+
+

To align long-term incentives of the Investors and Early Contributors with the interests of the Starknet community, and following common practice in decentralized ecosystems, all tokens allocated to Investors and Early Contributors is subject to the following lock-up schedule, where percentages are based on the total token supply:

+
+
+
    +
  • +

    Up to 0.64% (64 million tokens) will be unlocked on the 15th of each month, starting April 15, 2024, and going through March 15, 2025, for a total of 7.68% (768 million tokens) unlocked by March 15, 2025.

    +
  • +
  • +

    Up to 1.27% (127 million tokens) will be unlocked on the 15th of each month, starting April 15, 2025, and going through March 15, 2027, for a total of 30.48% (3.048 billion tokens) unlocked by March 15, 2027.

    +
  • +
+
+
+
+Estimated supply of STRK in circulation +
+
Figure 1. Estimated supply of STRK in circulation
+
+
+
+
+

The graph, Estimated supply of STRK in circulation, excludes newly circulating tokens resulting from inflation or staking (see below).

+
+
+

Token allotments currently retained by the Starknet Foundation, while contractually unlocked, are not considered circulating unless granted, donated, or otherwise allocated out of originating wallets through future grants, provisions, donations, developer initiatives, or other programs.

+
+
+
+
+

Through this lock-up period, token holders cannot transfer, sell, or pledge their STRK tokens. Delegation of voting is permitted with locked tokens and, when available, staking might also be permitted.

+
+
+

The total circulating supply of tokens is planned to increase over time with the minting of new tokens by the protocol, as staking rewards, block rewards, or other rewards associated with the staking process. Such minting will be made pursuant to a schedule that will be determined with the community at a later point, not before Starknet services are more decentralized. The supply in circulation might not, therefore, remain fixed. However, as long as StarkWare is the sole operator of the Starknet sequencer, there will be no issuance of new tokens for the purpose of block rewards. For more information, see A token-minting proposal to manage inflation.

+
+
+
+
+

Risks and disclaimers

+
+
+

Starknet is a developing decentralized protocol and the economic mechanisms described herein are subject to change based on decisions made by the larger community of Starknet builders and users. Starknet relies upon third parties to adopt and implement software and protocols as users and contributors of Starknet. It also relies, in whole or partly, on third parties to develop, supply and otherwise support it. There is no assurance or guarantee that such third parties will continue to participate in the network or that the network will continue to function as intended.

+
+
+

The technical documents provided herein describe certain planned and specified economic fundamentals of a digital asset, STRK. These materials are intended for informational purposes only and are meant to outline the usage and functionalities of the asset within Starknet. It is important to understand that the primary purpose of STRK is to pay for fees, provide a mechanism for securing consensus, and allow for decentralized governance on Starknet; it is not intended to serve as an investment.

+
+
+

Starknet relies upon third parties to adopt and implement the software and protocols as users of Starknet. It also relies, in whole or partly, on third parties to develop, supply and otherwise support it. As a Layer 2 network over Ethereum, Starknet also relies upon third parties maintaining and operating the Ethereum network. There is no assurance or guarantee that those third parties will complete their work, properly carry out their obligations, and/or otherwise meet anyone’s needs.

+
+
+

STRK, as the native token of Starknet, may be subject to the risks of the Starknet network, including, without limitation, the following: (i) the technology associated with Starknet may not function as intended; (ii) the details of the Starknet token economics including the total supply and distribution schedule may be changed due to decisions made by the consensus of participants of the Starknet network; (iii) Starknet may fail to attract sufficient interest from key stakeholders or users; (iv) Starknet may not progress satisfactorily and Starknet tokens may not be useful or valuable; (v) Starknet may suffer from attacks by hackers or other individuals; and (vi) Starknet is comprised of open-source technologies that depend on a network of computers to run certain software programs to process transactions, and because of this model StarkWare and the Starknet Foundation have limited control over Starknet.

+
+
+

Risks related to blockchain technology in general and Starknet in particular may impact the usefulness of Starknet, and, in turn, the utility or value of STRK. The software and hardware, technology and technical concepts and theories applicable to Starknet and STRK are still in an early development stage and unproven, there is no warranty that Starknet will achieve any specific level of functionality or success, nor that the underlying technology will be uninterrupted or error-free, and there is an inherent risk that the technology could contain weaknesses, vulnerabilities or bugs causing, potentially, the complete loss of any Starknet tokens held by Starknet users.

+
+
+

As with most commonly used public blockchains, STRK is accessed using a private key that corresponds to the address at which they are stored. If the private key, or the "seed" used to create the address and corresponding private key are lost or stolen, the tokens associated with that address might be unrecoverable and will be permanently lost.

+
+
+

Public blockchain-based systems, including Starknet and the underlying Ethereum network, depend on independent verifiers, and therefore may be vulnerable to consensus attacks including, but not limited to, double-spend attacks, majority voting power attacks, race condition attacks, and censorship attacks. These attacks, if successful, could result in the permanent loss of STRK.

+
+
+

Starknet, STRK, and blockchain technology are nascent, and there may be additional risks not described above or that may be new or unanticipated. We recommend only using Starknet or holding STRK if you are familiar with the technology and aware of the risks.

+
+
+

This document and its contents are not, and should not be construed as, an offer to sell, or the solicitation of an offer to buy, any tokens, nor should it or any part of it form the basis or be relied on in connection with any contract or commitment whatsoever. This document is not advice of any kind, including legal, investment, financial, tax, or any other professional advice. Nothing in this document should be read or interpreted as a guarantee or promise of how the Starknet network or its STRK will develop, be utilized, or accrue value.

+
+
+

All information in this document is provided on an “as is” basis without any representation or warranty of any kind. This document only outlines current plans, which could change at the discretion of various parties, and the success of which will depend on many factors outside of Starknet Foundation’s control. Such future statements necessarily involve known and unknown risks, which may cause actual performance and results in future periods to differ materially from what we have described or implied in this document. StarkWare and the Starknet Foundation disclaim all warranties, express or implied, to the fullest extent permitted by law with respect to the functionality of Starknet and STRK.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/index.html b/pr-1359/architecture-and-concepts/index.html new file mode 100644 index 0000000000..c57132ff5d --- /dev/null +++ b/pr-1359/architecture-and-concepts/index.html @@ -0,0 +1,995 @@ + + + + + + Architecture :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Architecture

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/network-architecture/block-structure/index.html b/pr-1359/architecture-and-concepts/network-architecture/block-structure/index.html new file mode 100644 index 0000000000..63b164a81e --- /dev/null +++ b/pr-1359/architecture-and-concepts/network-architecture/block-structure/index.html @@ -0,0 +1,1358 @@ + + + + + + Block structure :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Block structure

+
+
+
+

A Starknet block is a list of transactions and a block header that contains the following fields:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription

block_number

u64

The number, that is, the height, of this block.

parent_block_hash

felt252

The hash of the block’s parent.

global_state_root

felt252

The state commitment after the block.

sequencer_address

ContractAddress

The Starknet address of the sequencer that created the block.

block_timestamp

Timestamp

The time at which the sequencer began building the block, in seconds since the Unix epoch.

transaction_count

u32

The number of transactions in the block.

events_count

u32

The number of events in the block.

state_diff_length

u32

The sum of number of storage diffs, nonce updates, deployed contracts and declared classes.

state_diff_commitment

felt252

The poseidon hash of the state diff of the block, see below for more details.

transactions_commitment

felt252

A commitment to the transactions included in the block. +The root of a height-64 binary Merkle Patricia trie. The leaf at index \(i\) corresponds to \({h(\text{transaction_hash}, \text{signature})}\).

events_commitment

felt252

The root of a height-64 binary Merkle Patricia trie. +The leaf at index \(i\) corresponds to the hash of the \(i'th\) event emitted in the block. +See below for a description on how event hashes are computed.

receipts_commitment

felt252

The root of a height-64 Merkle-Patricia trie. +The leaf at index \(i\) corresponds to the hash of the \(i'th\) transaction receipt. +See below for a description on how receipt hashes are computed.

l1_gas_price

(u128, u128)

The price of L1 gas that was used while constructing the block. L1 gas prices apply to storage updates and L1→L2 messages. As of March 2023, computation is also priced in terms of L1 gas, but this will change in the future. +The first u128 value is the price in wei. The second is the price in fri.

l1_data_gas_price

(u128, u128)

The price of L1 blob gas that was used while constructing the block. If the l1_da_mode of the block is set to BLOB, L1 blob gas prices determines the storage update cost. +The first u128 value is the price in wei. The second is the price in fri.

l1_da_mode

String

CALLDATA or BLOB, depending on how Starknet state diffs are sent to L1.

protocol_version

String

The version of the Starknet protocol used when creating the block.

+
+
+
+

Block hash

+
+
+

A block hash is defined as the Poseidon hash of the header’s fields, as follows:

+
+
+
+
h(𝐵) = h(
+    "STARKNET_BLOCK_HASH0",
+    block_number,
+    global_state_root,
+    sequencer_address,
+    block_timestamp,
+    transaction_count || event_count || state_diff_length || l1_da_mode,
+    state_diff_commitment,
+    transactions_commitment
+    events_commitment,
+    l1_gas_price_in_wei,
+    l1_gas_price_in_fri,
+    l1_data_gas_price_in_wei,
+    l1_data_gas_price_in_fri
+    receipts_commitment
+    0,
+    parent_block_hash
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    h is the Poseidon hash.

    +
  • +
  • +

    || denotes concatenation, transaction_count, event_count and state_diff_length are given 64 bits each, and l1_da_mode is one bit where 0 denotes CALLDATA and 1 denotes BLOB.

    +
  • +
+
+
+

For a reference implementation, see the sequencer repository.

+
+
+
+
+

State diff commitment

+
+
+

The state diff commitment is obtained by the chain-hash of the following:

+
+
+
    +
  • +

    updates to contract addresses \(c_1,...,c_n\), with diffs \((k^1_1, v^1_1),...,(k^1_{m_1}, v^1_{m_1}),...,(k^n_1, v^n_1),...,(k^n_{m_n},v^n_{m_n})\)

    +
  • +
  • +

    deployed contracts \((\text{deployed_address}_1, \text{deployed_class_hash}_1),...,(\text{deployed_address}_\ell,\text{deployed_class_hash}_\ell)\)

    +
  • +
  • +

    declared classes \((\text{declared_class_hash}_1, \text{declared_compiled_class_hash}_1), ..., (\text{declared_class_hash}_d, \text{declared_compiled_class_hash}_d)\)

    +
  • +
  • +

    replaced classes \((\text{replaced_contract_address}_1, \text{new_class_hash}_1),...,(\text{replaced_contract_address}_r, \text{new_class_hash}_r)\)

    +
  • +
  • +

    updated nonces \((\text{account}_1, \text{new_nonce}_1),...,(\text{account}_k, \text{new_nonce}_k)\)

    +
  • +
+
+
+

More formally, the state-diff hash is given by:

+
+
+
+\[\begin{align} +h\big( & \text{"STARKNET_STATE_DIFF0"}, \\ +& \quad \ell + r, \\ +& \quad \text{deployed_address}_1, \text{deployed_class_hash}_1,...,\text{deployed_address}_\ell,\text{deployed_class_hash}_\ell, \\ +& \quad \text{replaced_contract_address}_1, \text{new_class_hash}_1,...,\text{replaced_contract_address}_r, \text{new_class_hash}_r \\ +& \quad d, \\ +& \quad \text{declared_class_hash}_1, \text{declared_compiled_class_hash}_1, ..., \text{declared_class_hash}_d, \text{declared_compiled_class_hash}_d, \\ +& \quad 1, \\ +& \quad 0, \\ +& \quad n, \\ +& \quad c_1 \\ +& \quad k^1_1, v^1_1,...,k^1_{m_1}, v^1_{m_1} \\ +& \quad \vdots \\ +& \quad c_n \\ +& \quad k^n_1, v^n_1,...,k^n_{m_n},v^n_{m_n} \\ +& \quad k \\ +& \quad \text{account}_1, \text{new_nonce}_1,...,\text{account}_k, \text{new_nonce}_k\big) +\end{align}\] +
+
+
+

Where:

+
+
+
    +
  • +

    \(h\) is the Poseidon hash function

    +
  • +
  • +

    \(1, 0\) in the hash computation are placeholders that may be used in the future

    +
  • +
+
+
+
+
+

Receipt hash

+
+
+

A transaction receipt consists of the following fields:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription

transaction_hash

felt252

the hash of the transaction

actual_fee

u128

the fee paid on-chain

events

List<Event>

ordered list of the events emitted by the transaction

messages

List<L2toL1Message>

ordered list of the l2→l1 messages sent by the transaction

revert_reason

String

The revert reason, in case the transaction was reverted

l1_gas_consumed

u128

The amount of l1 gas that was consumed

l1_data_gas_consumed

u128

The amount of l1 data (blob) gas that was consumed

l2_gas_consumed

u128

The amount of l2 gas that was consumed

+
+

The hash of the transaction receipt is given by:

+
+
+
+
h(receipt) = h(
+    transaction_hash,
+    actual_fee,
+    h(messages),
+    sn_keccak(revert_reason),
+    h(l2_gas_consumed, l1_gas_consumed, l1_data_gas_consumed)
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    h is the Poseidon hash function

    +
  • +
  • +

    given messages \(m_1=(\text{from}_1, \text{to}_1, \text{payload}_1)...m_n=(\text{from}_n, \text{to}_n, \text{payload}_n)\), their hash is given by:

    +
  • +
+
+
+
+\[h(n, \text{from}_1, \text{to}_1, h(\text{payload}_1), ..., \text{from}_n, \text{to}_n, h(\text{payload}_n))\] +
+
+
+

where each message’s payload is length-prefixed.

+
+
+
    +
  • +

    events are omitted from the receipt’s hash since they are committed separately in the block.

    +
  • +
+
+
+
+
+

Event hash

+
+
+

The hash of an event \((\text{keys}, \text{data})\) emitted by a contract whose address is emitter_address and a transaction whose hash is tx_hash is given by:

+
+
+
+\[h\big(\text{emitter_address}, \text{tx_hash}, h(\text{keys}), h(\text{data}) \big)\] +
+
+
+

Where \(h\) is the Poseidon hash function.

+
+
+ + + + + +
+ + +
+

Zeros inside the hash computation of an object are used as placeholders, to be replaced in the future by meaningful fields.

+
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/network-architecture/data-availability/index.html b/pr-1359/architecture-and-concepts/network-architecture/data-availability/index.html new file mode 100644 index 0000000000..0bc3aaacd6 --- /dev/null +++ b/pr-1359/architecture-and-concepts/network-architecture/data-availability/index.html @@ -0,0 +1,1418 @@ + + + + + + Data availability :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Data availability

+
+

Introduction

+
+
+

Starknet is a Validity Rollup, which means that after consolidating and proving a set of Layer 2 changes, it updates, on L1, the latest proven L2 state. Alongside the proof, it publishes the state diff on L1. The state diff is the difference between the previous and new states.

+
+
+

Anyone monitoring Ethereum can use this data to reconstruct the current state of Starknet.

+
+
+ + + + + +
+ + +
+

To update the Starknet state on L1, you only need to send a valid proof along with the state difference, and there is no need to include additional details, such as transactions and events.

+
+
+

Therefore, depending on the use case, you might need more information to track Starknet’s state.

+
+
+
+
+
+
+

Data availability: EIP-4844, Starknet 0.13.1 and forward

+
+
+

Starting with Starknet version 0.13.1, the sequencer determines whether to publish the state difference on Ethereum as calldata or blobdata. In extreme situations where blob prices significantly exceed those of calldata, the Starknet sequencer can switch to publish the state diff as calldata. +Under normal conditions, blobs are the default method for publishing Starknet’s state differences.

+
+
+

The format for state diffs remains the same as in version 0.11.0, but the data sent to Ethereum is a Fast Fourier Transform (FFT) of the original data. To recover Starknet’s state diff based on blobs published onchain, you must first perform an Inverse Fast Fourier Transform (IFFT) on the raw blob, and then proceed with decoding according to the format described below.

+
+ +
+
+
+

Data availability: v0.11.0 and forward

+
+
+

v0.11.0 format

+
+

The state diffs contain information on every contract whose storage was updated and additional information on contract deployments.

+
+
+

For each affected contract, the following information is sent as calldata on L1:

+
+
+
    +
  • +

    The contract address

    +
  • +
  • +

    A single 32-byte word that includes the nonce and the following meta information about the update:

    +
    +
      +
    • +

      class information flag, whose value is one of the following:

      +
      + ++++ + + + + + + + + +
      +0 + +

      Storage updates only.

      +
      +1 + +

      The contract was deployed or replaced in this state update.

      +
      +

      When this flag is set to 1, the new class hash occupies an additional word before the storage updates section.

      +
      +
      +
      +
    • +
    • +

      number of storage updates

      +
      +

      The expected format of this 32-byte word is as follows:

      +
      +
      +
      +\[\underbrace{0\cdots0}_{\text{127 bits}}| +\underbrace{\text{class information flag}}_{\text{1 bit}}| +\underbrace{\text{new nonce}}_{\text{64 bits}}|{ +\underbrace{\text{# of storage updates}}_{\text{64 bits}}}_{\text{LSB}}\] +
      +
      +
    • +
    +
    +
  • +
+
+
+

Each storage update includes the following:

+
+
+
    +
  • +

    key - the address inside the contract’s storage where the value is updated

    +
  • +
  • +

    value - the new value

    +
  • +
+
+
+

Newly declared classes include the following:

+
+
+
    +
  • +

    The number of Cairo classes that were declared in the block

    +
  • +
  • +

    Each class includes the following:

    +
    + +
    +
  • +
+
+
+
+

v0.11.0 example of onchain data

+
+

Consider the following onchain data that was extracted from L1:

+
+
+
+
[
+  1, (1)
+  2019172390095051323869047481075102003731246132997057518965927979101413600827, (2)
+  18446744073709551617, (3)
+  100, (4)
+  200, (4)
+  1, (5)
+  1351148242645005540004162531550805076995747746087542030095186557536641755046, (6)
+  558404273560404778508455254030458021013656352466216690688595011803280448032 (7)
+]
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1The number of contracts whose state was updated.
2The address of the first, and only, contract whose state changed.
318446744073709551617, which is 264+1, encodes the following: +
+
    +
  • +

    The class information flag is 0, that is, the contract was not deployed or replaced just now, so you shouldn’t treat the next word as the class hash.

    +
  • +
  • +

    The new nonce is 1.

    +
  • +
  • +

    One storage cell was updated.

    +
  • +
+
4These two elements, 100 and 200, encode the storage update, where the value of key 100 is set to 200.
5The new declare section: 1 includes a single declare v2 transaction in this state update.
6Encoding of the class hash.
7Encoding of the compiled class hash of the declared class.
+
+
+
+
+
+

Data availability: pre v0.11.0

+
+
+

Pre v0.11.0 format

+
+

The state diffs contain information on every contract whose storage was updated and additional information on contract deployments. Those differences are sent as uint256[] array as part of the calldata, and are encoded as follows:

+
+
+
    +
  • +

    Number of cells that encode contract deployments

    +
  • +
  • +

    Each deployed contract has the following:

    +
    + +
    +
  • +
  • +

    Number of contracts whose storage is updated.

    +
    +

    Each such contract has the following:

    +
    +
    +
      +
    • +

      contract_address - the address of the contract

      +
    • +
    • +

      num_of_storage_updates - number of storage updates

      +
    • +
    • +

      nonce, num of storage updates - a uint256 value that encodes both the number of storage updates for that contract and the updated nonce:

      +
      +
      +\[\underbrace{0\cdots0}_{\text{128 bits}} | \underbrace{\text{new nonce}}_{\text{64 bits}} | +{\underbrace{\text{# of storage updates}}_{\text{64 bits}}}_{\text{LSB}}\] +
      +
      +
      +

      For each storage update:

      +
      +
      +
        +
      • +

        key - the address inside the contract’s storage where the value is updated

        +
      • +
      • +

        value - the new value

        +
      • +
      +
      +
    • +
    +
    +
  • +
+
+
+
+

Pre v0.11.0 example

+
+

The example below shows onchain data that was extracted from L1. An explanation follows, according to the above format.

+
+
+
+
[
+  2,
+  2472939307328371039455977650994226407024607754063562993856224077254594995194,
+  1336043477925910602175429627555369551262229712266217887481529642650907574765,
+  5,
+  2019172390095051323869047481075102003731246132997057518965927979101413600827,
+  18446744073709551617,
+  5,
+  102,
+  2111158214429736260101797453815341265658516118421387314850625535905115418634,
+  2,
+  619473939880410191267127038055308002651079521370507951329266275707625062498,
+  1471584055184889701471507129567376607666785522455476394130774434754411633091,
+  619473939880410191267127038055308002651079521370507951329266275707625062499,
+  541081937647750334353499719661793404023294520617957763260656728924567461866,
+  2472939307328371039455977650994226407024607754063562993856224077254594995194,
+  1,
+  955723665991825982403667749532843665052270105995360175183368988948217233556,
+  2439272289032330041885427773916021390926903450917097317807468082958581062272,
+  3429319713503054399243751728532349500489096444181867640228809233993992987070,
+  1,
+  5,
+  1110,
+  3476138891838001128614704553731964710634238587541803499001822322602421164873,
+  6,
+  59664015286291125586727181187045849528930298741728639958614076589374875456,
+  600,
+  221246409693049874911156614478125967098431447433028390043893900771521609973,
+  400,
+  558404273560404778508455254030458021013656352466216690688595011803280448030,
+  100,
+  558404273560404778508455254030458021013656352466216690688595011803280448031,
+  200,
+  558404273560404778508455254030458021013656352466216690688595011803280448032,
+  300,
+  1351148242645005540004162531550805076995747746087542030095186557536641755046,
+  500
+]
+
+
+
+
    +
  • +

    The first element, 2, is the number of cells that encode contracts deployment.

    +
  • +
  • +

    The next two elements describe a single contract deployment with the following parameters:

    +
    +
      +
    • +

      contract_address:

      +
      +
      +
      2472939307328371039455977650994226407024607754063562993856224077254594995194
      +
      +
      +
    • +
    • +

      contract_hash:

      +
      +
      +
      1336043477925910602175429627555369551262229712266217887481529642650907574765
      +
      +
      +
    • +
    +
    +
  • +
  • +

    The next element, 5 (index 3 in the array), is the number of contracts whose storage was updated. We will take only the first contract as an example.

    +
    +
      +
    • +

      contract_address:

      +
      +
      +
      2019172390095051323869047481075102003731246132997057518965927979101413600827
      +
      +
      +
    • +
    • +

      Following the above contract address, we have 18446744073709551617 (index 8 in the array), which is \(2^{64}+1\), thus:

      +
      +
        +
      • +

        The new contract nonce is 1

        +
      • +
      • +

        One storage key is updated

        +
      • +
      • +

        The value at key 5 was changed to 102

        +
      • +
      +
      +
    • +
    +
    +
  • +
+
+
+

The next 4 contract storage updates are interpreted in the same manner.

+
+
+
+
+
+

Extract from Ethereum

+
+
+

The data described above is sent across several Ethereum transactions, each holding a part of this array as calldata. Each new Starknet block has its associated state diff transactions.

+
+
+

You can find the code for extracting this data from Ethereum in Pathfinder’s repo. Pathfinder is the first Starknet full node implementation. You may also take a look at the Python script which extracts the same information.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/network-architecture/fee-mechanism/index.html b/pr-1359/architecture-and-concepts/network-architecture/fee-mechanism/index.html new file mode 100644 index 0000000000..0f29a3b3a6 --- /dev/null +++ b/pr-1359/architecture-and-concepts/network-architecture/fee-mechanism/index.html @@ -0,0 +1,1664 @@ + + + + + + Gas and transaction fees :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Gas and transaction fees

+
+
+
+

This section describes fees that are paid on L2 starting in Starknet 0.13.0. For information about messaging fees that are paid on L1, see L1 → L2 message fees.

+
+
+
+
+

Overall transaction fee

+
+
+

Starting with Starknet v0.13.1, Starknet distinguishes between blocks whose state diffs are sent to L1 as calldata and blocks whose state diffs are sent to L1 as blobs. The l1_da_mode property in the Starknet block header contains this information. The cost of computation remains the same on both options, but the cost related to data availability differs.

+
+
+

Overall transaction fee with blobs

+
+

This section shows the formula for determining a transaction’s fee. The following sections describe how this formula was derived.

+
+
+

The following formula describes the overall fee, \(F\), for a transaction:

+
+
+
+\[\begin{align} +F = \; & gas\_price \cdot \Bigg(\max_k v_k w_k + \\ +& \quad + \; \text{message_calldata_cost}\cdot 3t + (\text{message_calldata_cost} + \text{l1_log_data_cost})\cdot \sum\limits_{i=1}^t q_i \; + \\ +& \quad + \; \left(\text{l1_storage_write_cost}+\text{log_message_to_l1_cost}\right)\cdot t + \; \\ +& \quad + \; \text{l2_payload_costs}\Bigg) + \\ +& data\_gas\_price\cdot\text{felt_size_in_bytes}\cdot\bigg(2(n-1)+2(m-1) + \ell +2D \bigg) +\end{align}\] +
+
+
+

where:

+
+
+
    +
  • +

    \(v\) is a vector that represents resource usage, where each of its entries, \(v_k\), corresponds to different resource types: Cairo steps and number of applications of each builtin.

    +
    +

    For more information see Calculation of computation costs.

    +
    +
  • +
  • +

    \(w\) is the CairoResourceFeeWeights vector.

    +
  • +
  • +

    \(n\) is the number of unique contracts updated, which also includes changes to classes of existing contracts and contract deployments, even if the storage of the newly deployed contract is untouched. In other words, \(n\ge\ell\). Notice that \(n\ge 1\) always holds, because the fee token contract is always updated, which does not incur any fee.

    +
  • +
  • +

    \(m\) is the number of values updated, not counting multiple updates for the same key. Notice that \(m\ge 1\) always holds, because the sequencer’s balance is always updated, which does not incur any fee.

    +
  • +
  • +

    \(t\) is the number of L2→L1 messages sent, where the corresponding payload sizes are denoted by \(q_1,...,q_t\).

    +
  • +
  • +

    \(\ell\) is the number of contracts whose class was changed, which happens on contract deployment and when applying the replace_class syscall.

    +
  • +
  • +

    \(D\) is 1 if the transaction is of type DECLARE and 0 otherwise. Declare transactions need to post on L1 the new class hash and compiled class hash which are added to the state.

    +
  • +
  • +

    L2→L1 messaging constants:

    +
    +
    +
    +
      +
    • +

      \(\text{message_calldata_cost}\) is 1124 gas per 32-byte word.

      +
    • +
    • +

      \(\text{l1_log_data_cost}\) is 256 gas.

      +
    • +
    • +

      \(\text{l1_storage_write_cost}\) is the cost of writing to a new storage slot on Ethereum, which is 20,000 gas.

      +
    • +
    • +

      \(\text{log_message_to_l1_cost}\) is 1637 gas.

      +
    • +
    +
    +
    +
    +
    +

    For more information, see Onchain data: L2→L1 messages.

    +
    +
  • +
  • +

    \(\text{l2_payload_costs}\) is the gas cost of data sent over L2. This includes calldata, code, and event emission. For more details see L2 payloads: calldata, events, and code.

    +
  • +
  • +

    \(\text{felt_size_in_bytes}\) is 32, which is the number of bytes required to encode a single STARK field element.

    +
  • +
+
+
+
+

Overall transaction fee with calldata

+
+

This section shows the formula for determining a transaction’s fee. The following sections describe how this formula was derived.

+
+
+

The following formula describes the overall fee, \(F\), for a transaction:

+
+
+
+\[\begin{align} +F = gas\_price\cdot&\Bigg(\max_k v_k w_k + \\ +& + \; \text{da_calldata_cost}\left(2(n-1)+2(m-1) + \ell + 2D + 3t + \sum\limits_{i=1}^t q_i\right)\\ +& - \; \text{contract_update_discount}\cdot (n-1) - 240 \\ +& + \; \text{message_calldata_cost}\cdot 3t + (\text{message_calldata_cost} + \text{l1_log_data_cost})\cdot\sum\limits_{i=1}^t q_i \\ +& + \; \left(\text{l1_storage_write_cost}+\text{log_message_to_l1_cost}\right)\cdot t \\ +& + \; \text{l2_payload_costs}\Bigg) +\end{align}\] +
+
+
+

where:

+
+
+
    +
  • +

    The following constants are defined in the same manner as in the blob-based formula:

    +
    +
      +
    • +

      \(v, w, n, m, t, \ell, D\)

      +
    • +
    • +

      \(\text{message_calldata_cost}, \; \text{l1_log_data_cost}, \; \text{log_message_to_l1_cost}, \; \text{l1_storage_write_cost}\)

      +
    • +
    • +

      \(\text{l2_payload_costs}\)

      +
    • +
    +
    +
  • +
  • +

    \(\text{da_calldata_cost}\) is 551 gas per 32-byte word. This cost is derived as follows:

    +
    +
      +
    • +

      512 gas per 32-byte word for calldata.

      +
    • +
    • +

      ~100 gas for onchain hashing that happens for every sent word.

      +
    • +
    • +

      a 10% discount, because the sequencer does not incur additional costs for repeated updates to the same storage slot within a single block.

      +
    • +
    +
    +
  • +
  • +

    \(240\) is the gas discount for updating the sender’s balance, for the derivation of this number see Onchain data: Storage updates.

    +
  • +
  • +

    \(\text{contract_update_discount}\) is 312 gas, for the derivation of this discount see Onchain data: Storage updates.

    +
  • +
+
+
+
+
+
+

When is the fee charged?

+
+
+

The fee is charged atomically with the transaction execution on L2. The Starknet OS injects a transfer of the fee-related ERC-20, with an amount equal to the fee paid, the sender equal to the transaction submitter, and the sequencer as a receiver.

+
+
+
+
+

Transaction Fee limits

+
+
+

v3 transactions

+
+

With v3 transactions, users specify the max amount and max price for each resource. At the time of writing, the only available resource is L1 gas. In the future, we will introduce L2 gas which will be used to price L2 work (as opposed to only charging for the proof verification in L1 gas, which is what happens today).

+
+
+
+

Deprecated transactions (version < 3)

+
+

With older transaction versions, users specify the maximum fee that they are willing to pay for a transaction.

+
+
+

The only limitation on the sequencer, which is enforced by the Starknet OS, is that the actual fee charged is bounded by max_fee. While not enforced in the proof, the Starknet sequencer usually charges less than max_fee, as it charges in accordance with the above fee formula.

+
+
+
+
+
+

What do we price

+
+
+

At the time of writing, the following components are contributing to the transaction fee:

+
+
+
    +
  • +

    Computational complexity: The marginal cost of verifying the transaction on L1, measured in L1 gas.

    +
  • +
  • +

    Onchain data: The cost of posting the state diffs induced by the transaction to L1 (for more details, see data availability). This is measured in L1 gas or L1 data gas, depending on whether or not the L2 block in which the transaction was included uses calldata or blobs.

    +
  • +
  • +

    L2→L1 messages: Messages sent to L1 are eventually sent to the Starknet core contract as L1 calldata by the sequencer; therefore L2 transaction that send L2→L1 messages incur an additional L1 gas cost.

    +
  • +
  • +

    L2 calldata, events and code: From Starknet 0.13.1 onwards, there is a per-byte (or per felt) price for L2 payloads. For more details, see L2 payloads: calldata, events, and code.

    +
  • +
+
+
+
+
+

Fee units

+
+
+

Each transaction is associated with an estimate of the amount of gas used. Combining this estimate with the price of gas yields the estimated fee.

+
+
+

For transactions prior to v3, the fee is denominated in WEI. For transactions v3 and later, the fee is denominated in STRK.

+
+
+
+
+

Fee calculation

+
+
+

Calculation of gas prices

+
+

Every 60 seconds, Starknet samples the base price of gas and data gas on L1.

+
+
+

The price of gas on Starknet is set to the average of the last 60 gas price samples, plus 1 gwei.

+
+
+

The price of data gas on Starknet is set to the average of the last 60 data gas price samples. The data gas price on Ethereum is derived from the value of excess_blob_gas. For more information, see EIP-4844.

+
+
+
+

Computation without builtins

+
+

Let’s analyze the correct metric for measuring transaction complexity. For simplicity, we will ignore Cairo’s builtins, and address them later.

+
+
+

A Cairo program execution yields an execution trace. When proving a Starknet block, we aggregate all the transactions appearing in that block to the execution trace.

+
+
+

Starknet’s prover generates proofs for execution traces, up to some maximal length \(L\), derived from the specs of the proving machine and the desired proof latency.

+
+
+

Tracking the execution trace length associated with each transaction is simple. +Each assertion over field elements, such as verifying addition/multiplication over the field, requires the same, constant number of trace cells, which is where our "no-builtins" assumption kicks in: Pedersen occupies more trace cells than addition. Therefore, in a world without builtins, the fee of the transaction \(tx\) is correlated with \(\text{TraceCells}[tx]/L\).

+
+
+
+

Computation with builtins

+
+

In the Cairo execution trace each builtin has its own slot, which is important to consider when determining the fee.

+
+
+

For example, consider that the prover can process a trace with the following limits:

+
+ ++++++ + + + + + + + + +
up to 500,000,000 Cairo Stepsup to 20,000,000 Pedersen hashesup to 4,000,000 signature verificationsup to 10,000,000 range checks
+
+

The proof is closed and sent to L1 when any of these slots is filled.

+
+
+

Suppose that a transaction uses 10,000 Cairo steps and 500 Pedersen hashes. At most 40,000 such transactions can fit into the hypothetical trace (20,000,000/500). Therefore, its gas price correlates with 1/40,000 of the cost of submitting proof.

+
+
+

Notice that this estimate ignores the number of Cairo steps, as it is not the limiting factor, since 500,000,000/10,000 > 20,000,000/500.

+
+
+

With this example in mind, it is possible to formulate the exact fee associated with L2 computation.

+
+
+ + + + + +
+ + +
+

The allocation of resources among builtin operations must be predetermined; it is not possible to decide, post-execution, to include only 20,000,001 Pedersen hashes without additional components.

+
+
+

This safeguards fairness and prevents manipulation, ensuring integrity in proof generation and fee determination.

+
+
+
+
+
+

Calculation of computation costs

+
+

For each transaction, the sequencer calculates a vector, CairoResourceUsage, that contains the following:

+
+
+
    +
  • +

    The number of Cairo steps.

    +
  • +
  • +

    The number of applications of each Cairo builtin. For example, five range checks and two Pedersen hashes.

    +
  • +
+
+
+

The sequencer crosses this information with the CairoResourceFeeWeights vector. For each resource type, either a Cairo step or a specific builtin application, CairoResourceFeeWeights has an entry that specifies the relative gas cost of that component in the proof.

+
+
+

Going back to the above example, if the cost of submitting a proof with 20,000,000 Pedersen hashes is roughly 5m gas, then the weight of the Pedersen builtin is 0.25 gas per application (5,000,000/20,000,000). The sequencer has a predefined weights vector, in accordance with the proof parameters.

+
+
+

The sequencer charges only according to the limiting factor. Therefore the fee is correlated with:

+
+
+
+\[\max_k[\text{CairoResourceUsage}_k \cdot \text{CairoResourceFeeWeights}_k]\] +
+
+
+

where \(k\) enumerates the Cairo resource components, that is the number of Cairo steps and builtins used.

+
+ + + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Amount of gas used per Cairo step or per each time a Cairo builtin is applied
Step or builtinGas cost

Cairo step

0.0025 gas/step

Pedersen

0.08 gas/application

Poseidon

0.08 gas/application

Range check

0.04 gas/application

ECDSA

5.12 gas/application

Keccak

5.12 gas/application

Bitwise

0.16 gas/application

EC_OP

2.56 gas/application

+
+
+

Onchain data components

+
+

The onchain data associated with a transaction is composed of three parts

+
+
+
    +
  • +

    Storage updates

    +
  • +
  • +

    L2→L1 messages

    +
  • +
  • +

    Deployed contracts

    +
  • +
  • +

    Declared classes (only relevant for DECLARE transactions, and adds two additional words)

    +
  • +
+
+
+
+

Onchain data: Storage updates

+
+

Whenever a transaction updates some value in the storage of some contract, the following data is sent to L1:

+
+
+
    +
  • +

    two 32-byte words per contract

    +
  • +
  • +

    two 32-byte words for every updated storage value

    +
  • +
+
+
+

For information on the exact data and its construction, see Data availability.

+
+
+ + + + + +
+ + +
+

Only the most recent value reaches L1. So the transaction’s fee only depends on the number of unique storage updates. If the same storage cell is updated multiple times within the transaction, the fee remains that of a single update.

+
+
+
+
+

The following formula describes the storage update fee for a transaction:

+
+
+
+\[\underbrace{\textit{gas_price}\left(\text{da_calldata_cost} \cdot 2(n-1) - \text{contract_update_discount}\cdot (n-1)\right)}_{\text{contract addresses + new nonce and number of storage updates +}} \\ + ++ \\ + +\underbrace{\textit{gas_price} \cdot \left(\text{da_calldata_cost}(2(m-1))-240\right)}_{\text{storage updates}}\] +
+
+
+

where:

+
+
+
    +
  • +

    \(n\) is the number of unique contracts updated, which also includes changes to classes of existing contracts and contract deployments, even if the storage of the newly deployed contract is untouched. In other words, \(n\ge\ell\). Notice that \(n\ge 1\) always holds, because the fee token contract is always updated at the end of each transaction, in order to update the sequencer’s and the sender’s balances. The fee token contract update is not taken into account when computing the fee.

    +
  • +
  • +

    \(m\) is the number of values updated, not counting multiple updates for the same key. Notice that \(m\ge 1\) always holds, because the sequencer’s balance is updated at the end of each transaction. The sequencer’s balance update is not taken into account when computing the fee.

    +
  • +
  • +

    \(\text{contract_update_discount}\) is 312 gas, which is discounted for every updated contract. This discount is a result of the fact that out of the \(2n\) words caused by updating contracts, \(n\) words are short, including at most 6 non-zero bytes:

    +
    +
    +
    +
      +
    • +

      three bytes for the nonce

      +
    • +
    • +

      two bytes for the number of storage updates

      +
    • +
    • +

      one byte for the class information flag

      +
    • +
    +
    +
    +
    +
    +

    Taking into account that zero bytes only cost 4 gas, the cost difference between a full 32-byte word, which does not contain zeros, and a word with only six non-zero bytes is \(32\cdot16-(6\cdot16+26\cdot4)=312\).

    +
    +
  • +
  • +

    \(240\) is the gas discount for updating the sender’s balance, and is derived by assuming the balance requires at most 12 non-zero bytes, which is enough for 1.2B ETH or STRK, resulting in the following discount: \(512-(20\cdot4+12\cdot16)=240\).

    +
  • +
+
+
+ + + + + +
+ + +
+

Improvements to the above pessimistic estimation might be gradually implemented in future versions of Starknet.

+
+
+

For example, if different transactions within the same block update the same storage cell, there is no need to charge for both transactions, because only the last value reaches L1. In the future, Starknet might include a refund mechanism for such cases.

+
+
+
+
+
+

Onchain data: L2→L1 messages

+
+

When a transaction that raises the send_message_to_l1 syscall is included in a state update, the following data reaches L1:

+
+
+
    +
  • +

    L2 sender address

    +
  • +
  • +

    L1 destination address

    +
  • +
  • +

    Payload size

    +
  • +
  • +

    Payload (list of field elements)

    +
  • +
+
+
+

Consequently, the gas cost associated with a single L2→L1 message is:

+
+
+
+\[\begin{align} +\text{MESSAGE_COST} = & \; \text{message_calldata_cost}\cdot\left(3+\text{payload_size}\right) \; + \\ +& + \text{l1_log_data_cost}\cdot\text{payload_size} \; + \\ +& + \text{log_message_to_l1_cost} \; + \\ +& + \text{l1_storage_write_cost} +\end{align}\] +
+
+
+

Where:

+
+
+
    +
  • +

    \(\text{message_calldata_cost}\) is 1124 gas. This is the sum of the 512 gas paid to the core contract on submitting the state update, and 612 gas paid for the submitting of the same word to the verifier contract (which incurs ~100 additional gas for hashing). That is, messages are sent to Ethereum twice.

    +
  • +
  • +

    \(\text{log_message_to_l1_cost}\) is 1637 gas. This is the fixed cost involved in emitting a LogMessageToL1 event. This event has two topics and a data array, which adds two data words to the event, resulting in a total of \(375+2\cdot 375+2\cdot 256\) gas (log opcode cost, topic cost, and two data words cost).

    +
  • +
  • +

    \(\text{l1_log_data_cost}\) is 256 gas, which is paid for every payload element during the emission of the LogMessageToL1 event.

    +
  • +
  • +

    \(\text{l1_storage_write_cost}\) is 20,000 gas per message which is paid in order to store the message hash on the Starknet core contract. This recording of the message is what later enables the intended L1 contract to consume the message.

    +
  • +
+
+
+
+

Onchain data: Deployed contracts

+
+

When a transaction that raises the deploy syscall is included in a state update, the following data reaches L1:

+
+
+
    +
  • +

    contract address

    +
  • +
  • +

    number of storage updates and the new nonce

    +
  • +
  • +

    class hash

    +
  • +
+
+
+

The first two elements are counted in the number of unique modified contracts, denoted by \(n\) throughout this page. So the only additional word comes from publishing the class hash, which adds 551 gas. For more information, see \(\text{da_calldata_cost}\) in the final formula.

+
+
+
+

L2 payloads: calldata, events, and code

+
+

As of Starknet v0.13.1 onwards, L2 data is taken into account during pricing. This includes:

+
+
+
    +
  • +

    calldata: this includes transaction calldata (in the case of INVOKE transactions or L1_HANDLER), constructor calldata (in the case of DEPLOY_ACCOUNT transactions), and signatures

    +
  • +
  • +

    events: data and keys of emitted events

    +
  • +
  • +

    ABI: classes abi in DECLARE transactions (relevant only for DECLARE transactions of version ≥ 2)

    +
  • +
  • +

    CASM bytecode (for all available DECLARE transactions, where in version ≥ 2 this refers to the compiled class)

    +
  • +
  • +

    Sierra bytecode (relevant only for DECLARE transactions of version ≥ 2)

    +
  • +
+
+
+

The pricing of the above components in terms of L1 gas is given by the following table:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ResourceGas cost

Event key

0.256 gas/felt

Event data

0.128 gas/felt

Calldata

0.128 gas/felt

CASM bytecode

1 gas/felt

Sierra bytecode

1 gas/felt

ABI

0.032 gas/character

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/network-architecture/messaging-mechanism/index.html b/pr-1359/architecture-and-concepts/network-architecture/messaging-mechanism/index.html new file mode 100644 index 0000000000..3f1fed2337 --- /dev/null +++ b/pr-1359/architecture-and-concepts/network-architecture/messaging-mechanism/index.html @@ -0,0 +1,1517 @@ + + + + + + L1-L2 messaging mechanism :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

L1-L2 messaging mechanism

+
+
+
+

Starknet’s ability to interact with L1 is crucial. Messaging is the mechanism that enables this interaction.

+
+
+

For example, you can perform computations on L2 and use the result on L1.

+
+
+

Bridges on Starknet use the L1-L2 messaging mechanism. Consider that you want to bridge tokens from Ethereum to Starknet. You deposit your tokens in the L1 bridge contract, which automatically triggers the minting of the same token on L2. Another good use case for L1-L2 messaging is Defi pooling. For more information, see DeFi pooling on StarkWare’s site and dApps on https://www.starknet.io.

+
+
+

Be aware that the messaging mechanism is asynchronous and asymmetric.

+
+
+
    +
  • +

    Asynchronous: Your contract code, whether Cairo or Solidity, cannot await the result of the message being sent on the other layer within your contract code’s execution.

    +
  • +
  • +

    Asymmetric: Sending a message from Ethereum to Starknet, L1→L2, is fully automated by the Starknet sequencer, so the message is automatically delivered to the target contract on L2. However, when sending a message from Starknet to Ethereum, L2→L1, the sequencer only sends the hash of the message. You must then consume the message manually using a transaction on L1.

    +
  • +
+
+
+
+
+

L2 → L1 messages

+
+
+

Contracts on L2 can interact asynchronously with contracts on L1 using the L2→L1 messaging protocol.

+
+
+

The protocol consists of the following stages:

+
+
+
    +
  1. +

    During the execution of a transaction, a contract on Starknet sends a message from L2 to L1 by calling the send_message_to_L1 syscall.

    +
  2. +
  3. +

    The sequencer attaches the message parameters to the block that includes the syscall invocation. The message parameters include the address of the sender on L2, the address of the recipient contract on L1, and the message data.

    +
    +

    For example:

    +
    +
    +
    +
    let mut payload: Array<felt252> = ArrayTrait::new();
    +let to_address: EthAddress = 1_felt252.try_into().unwrap();
    +payload.append(1);
    +// potentially add more elements to payload (payload[1], payload[2],  etc.)
    +
    +send_message_to_l1_syscall(to_address: to_address.into(), payload: payload.span());
    +
    +
    +
  4. +
  5. +

    The prover proves the state update that includes this transaction.

    +
  6. +
  7. +

    The sequencer updates the L1 state.

    +
  8. +
  9. +

    The message is stored on L1 in the Starknet Core Contract and a counter on the Core Contract increases by one.

    +
  10. +
  11. +

    The processMessage function, which is part of the Starknet Core Contract, emits the LogMessageToL1 event, which contains the message parameters.

    +
  12. +
  13. +

    The message recipient on L1 can access and consume the message by calling the consumeMessageFromL2 function, which includes the message parameters within the transaction. +This function, which is part of the Starknet Core Contract, verifies the following:

    +
    +
      +
    • +

      The hashes of the L2 sent message parameters, now stored on the Core Contract, and the L1 received message parameters, are the same.

      +
    • +
    • +

      The entity calling the function is indeed the recipient on L1.

      +
      +

      In such a case, the counter corresponding to the message hash in the Starknet Core Contract decreases by one. For more information, see the consumeMessageFromL2 function in StarknetMessaging.sol.

      +
      +
    • +
    +
    +
  14. +
+
+
+

L2→L1 Messaging mechanism illustrates this flow:

+
+
+
+L2→L1 message mechanism +
+
Figure 1. L2→L1 Messaging mechanism
+
+
+

L2 → L1 message structure

+
+

The structure of an L2 → L1 message is described as follows under MSG_TO_L1 in the Starknet API JSON RPC specification:

+
+
+ ++++ + + + + + + + + + + + + +
+from_address (felt252) + +

The address of the L2 contract sending the message.

+
+to_address (EthAddress) + +

The target L1 address the message is sent to.

+
+payload (Array<felt252>) + +

The payload of the message.

+
+
+
+
+

L2 → L1 message hashing

+
+

The hash of an L2 → L1 message is computed on L1 as follows:

+
+
+
+
keccak256(
+    abi.encodePacked(
+        FromAddress,
+        uint256(ToAddress),
+        Payload.length,
+        Payload
+    )
+);
+
+
+
+ + + + + +
+ + +
+

Sending an L2 to L1 message always incurs a fixed cost of 20,000 gas, because the hash of the message being sent must be written to L1 storage in the Starknet Core Contract.

+
+
+
+
+
+
+
+

L1 → L2 messages

+
+
+

Contracts on L1 can interact asynchronously with contracts on L2 using the L1→L2 messaging protocol.

+
+
+

The protocol consists of the following stages:

+
+
+
    +
  1. +

    An L1 contract induces a message to an L2 contract on Starknet by calling the sendMessageToL2 function on the Starknet Core Contract with the message parameters.

    +
    +

    The Starknet Core Contract hashes the message parameters and updates the L1→L2 message mapping to indicate that a message with this hash was indeed sent. The L1 contract records the fee that the sender paid. For more information, see L1 → L2 message fees.

    +
    +
  2. +
  3. +

    The message is then decoded into a Starknet transaction that invokes a function annotated with the l1_handler decorator on the target contract. Transactions like this on L2 are called L1 handler transactions.

    +
    +
      +
    1. +

      The Starknet sequencer, upon receiving enough L1 confirmations for the transaction that sent the message, initiates the corresponding L2 transaction.

      +
    2. +
    3. +

      The L2 transaction invokes the relevant l1_handler function.

      +
    4. +
    +
    +
  4. +
  5. +

    The L1 Handler transaction that was created in the previous step is added to a proof.

    +
  6. +
  7. +

    The Core Contract receives the state update.

    +
  8. +
  9. +

    The message is cleared from the Core Contract’s storage to consume the message. Clearing the Core Contract’s storage does the following:

    +
    +
      +
    • +

      incurs a fixed cost of 5,000 gas

      +
    • +
    • +

      emits an L1 event logging the message consumption

      +
    • +
    +
    +
  10. +
+
+
+

At this point, the message is handled.

+
+
+

An L1→L2 message consists of the following:

+
+
+
    +
  • +

    L1 sender’s address

    +
  • +
  • +

    L2 recipient’s contract address

    +
  • +
  • +

    Function selector

    +
  • +
  • +

    Calldata array

    +
  • +
  • +

    Message nonce

    +
    + + + + + +
    + + +
    +

    The message nonce is maintained on the Starknet Core Contract on L1, and is incremented whenever a message is sent to L2. The nonce is used to avoid a hash collision between different L1 handler transactions that is caused by the same message being sent on L1 multiple times.

    +
    +
    +

    For more information, see L1→L2 structure.

    +
    +
    +
    +
  • +
+
+
+

L1 → L2 message cancellation

+
+ + + + + +
+ + +
+

The flow described here should only be used in edge cases such as bugs on the Layer 2 contract preventing message consumption.

+
+
+
+
+

Consider that Alice sends an L1 asset to a Starknet bridge to transfer it to L2, which generates the corresponding L1→L2 message. Now, consider that the L2 message consumption doesn’t function, which might happen due to a bug in the dApp’s Cairo contract. This bug could result in Alice losing custody of their asset forever.

+
+
+

To mitigate this risk, the contract that initiated the L1→L2 message can cancel it by declaring the intent to cancel, waiting five days, and then completing the cancellation. This delay protects the sequencer from a DoS attack in the form of repeatedly sending and canceling a message before it is included in L1, rendering the L2 block which contains the activation of the corresponding L1 handler invalid.

+
+
+

The steps in this flow are as follows:

+
+
+
    +
  1. +

    The user that initiated the L1→L2 message calls the startL1ToL2MessageCancellation function in the Starknet Core Contract.

    +
  2. +
  3. +

    The user waits five days until she can finalize the cancellation.

    +
  4. +
  5. +

    The user calls the cancelL1ToL2Message function.

    +
  6. +
+
+
+
+

L1 → L2 message fees

+
+

An L1 → L2 message induces a transaction on L2, which, unlike regular transactions, is not sent by an account. This calls for a different mechanism for paying the transaction’s fee, for otherwise the sequencer has no incentive of including L1 handler transactions inside a block.

+
+
+

To avoid having to interact with both L1 and L2 when sending a message, L1 → L2 messages are payable on L1, by sending ETH with the call to the payable function sendMessageToL2 on the Starknet Core Contract.

+
+
+

The sequencer takes this fee in exchange for handling the message. The sequencer charges the fee in full upon updating the L1 state with the consumption of this message.

+
+
+

The fee itself is calculated in the same manner as +"regular" L2 transactions. You can use the CLI to get an estimate of an L1 → L2 message fee.

+
+
+
+

L1 → L2 structure

+
+

For completeness, L1 → L2 structure describes the precise structure of both the message as it appears on L1 and the induced transaction as it appears on L2.

+
+ + ++++++++ + + + + + + + + + + + + + + + + + + + + +
Table 1. L1 → L2 message structure
FromAddressToAddressSelectorPayloadNonce

EthereumAddress

FieldElement

FieldElement

List

FieldElement

+
+
+

L1 → L2 hashing

+
+

The hash of the message is computed on L1 as follows:

+
+
+
+
keccak256(
+    abi.encodePacked(
+        uint256(FromAddress),
+        ToAddress,
+        Nonce,
+        Selector,
+        Payload.length,
+        Payload
+    )
+);
+
+
+
+
+

L1 handler transaction

+ ++++++++ + + + + + + + + + + + + + + + + + + + + +
VersionContractAddressSelectorCalldataNonce

FieldElement

FieldElement

FieldElement

List

FieldElement

+
+

The hash of the corresponding L1 handler transaction on L2 is computed as follows:

+
+
+
+
l1_handler_tx_hash = _h_(
+    "l1_handler",
+    version,
+    contract_address,
+    entry_point_selector,
+    _h_(calldata),
+    0,
+    chain_id,
+    nonce
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    l1_handler is a constant prefix, encoded in bytes (ASCII), as big-endian.

    +
  • +
  • +

    version is the transaction version. Only version 0 is currently supported.

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent.

    +
  • +
  • +

    h is the Pedersen hash (note that since we’re hashing an array, the # of inputs needs to be appended to the hash).

    +
  • +
  • +

    0 indicates that L1 to L2 message fees are charged on L1.

    +
  • +
+
+
+ + + + + +
+ + +
+

In an L1 handler transaction, the first element of the calldata is always the sender’s Ethereum address.

+
+
+
+
+ + + + + +
+ + +
+

Since L1 handler transactions are not initiated by an account, invoking get_caller_address() or similar account-related functions returns the address 0x0.

+
+
+
+ + +++++ + + + + + + + + + + + + + + +
Table 2. Supported versions of the L1HandlerTransaction transaction type
Current versionDeprecated versionsUnsupported versions

v0

N/A

N/A

+
+
+
+
+

Additional resources

+
+
+
    +
  • +

    send_message_to_L1 syscall

    +
  • +
  • +

    sendMessageToL2 function on the Starknet Core Contract

    +
  • +
  • +

    For more information on how messaging works within the Starknet Core Contract, including details on coding, see L1-L2 Messaging in The Cairo Book: The Cairo Programming Language

    +
  • +
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/network-architecture/messaging-reference/index.html b/pr-1359/architecture-and-concepts/network-architecture/messaging-reference/index.html new file mode 100644 index 0000000000..2aecb57fab --- /dev/null +++ b/pr-1359/architecture-and-concepts/network-architecture/messaging-reference/index.html @@ -0,0 +1,2050 @@ + + + + + + Messaging function and event reference :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Messaging function and event reference

+
+
+
+

The StarknetMessaging smart contracts include functions and events that are required when sending messages between L1 and L2.

+
+
+

For information on the messaging mechanism, see Messaging mechanism.

+
+
+

The L1 functions, where available, are defined in the following smart contract:

+
+ +++++ + + + + + + + + + + + + + + +
ContractDescriptionFunctions

StarknetMessaging.sol

The contract that implements messaging functions.

+

Interfaces are available through IStarknetMessaging.sol.

+
+

The L1 events, where available, are defined in the following smart contract:

+
+ +++++ + + + + + + + + + + + + + + +
ContractDescriptionEvents

IStarknetMessagingEvents.sol

The contract that defines messaging events.

+
+
+
+

L1 function reference

+
+
+

Functions are listed in alphabetical order.

+
+
+
+

cancelL1ToL2Message

+

Description

+
+

Cancels an L1 to L2 message. Call this function after calling the startL1ToL2MessageCancellation function. The time between the calls to these two functions must be at least the number of seconds defined by the messageCancellationDelay function.

+
+
+

Only a sender can cancel a message.

+
+
+

If the message is missing, the call reverts.

+
+
+

Be aware that the message fee is not refunded.

+
+

State Mutability

+
+

None.

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + + + + + +
+uint256 toAddress + +

The address of the L2 contract.

+
+uint256 selector + +

The function, in the recipient L2 contract, that the message called.

+
+uint256[] calldata payload + +

The payload of the message.

+
+uint256 nonce + +

The nonce of the message.

+
+
+

Returns

+
+ ++++ + + + + +
+bytes32 msgHash + +

The hash of the canceled message.

+
+
+

Emitted event

+ +

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+

consumeMessageFromL2

+

Description

+
+

Consumes a message that was sent from an L2 contract.

+
+
+

Returns the hash of the message.

+
+

State Mutability

+
+

None.

+
+

Parameters

+
+ ++++ + + + + + + + + +
+uint256 fromAddress + +

The address of the L2 contract sending the message.

+
+uint256[] calldata payload + +

The payload of the message.

+
+
+

Returns

+
+ ++++ + + + + +
+bytes32 msgHash + +

The hash of the consumed message.

+
+
+

Emitted event

+ +

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+

getMaxL1MsgFee

+

Description

+
+

Returns the maximum fee, in Wei, that Starknet accepts for a single message. If the fee passed is higher than this value, the transaction is not accepted.

+
+

State Mutability

+
+

pure

+
+

Parameters

+
+

None.

+
+

Returns

+
+ ++++ + + + + +
+uint256 MAX_L1_MSG_FEE + +

The maximum fee, in Wei, that Starknet accepts for a single message.

+
+
+

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+

l1ToL2MessageCancellations

+

Description

+
+

Returns the timestamp of the cancellation request.

+
+

State Mutability

+
+

view

+
+

Parameters

+
+ ++++ + + + + +
+bytes32 msgHash + +

The message hash.

+
+
+

Returns

+
+ ++++ + + + + +
+uint256 result + +

The Ethereum block timestamp.

+
+
+
+

Returns 0 if cancelL1ToL2Message was not called with the message hash msgHash.

+
+

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+

l1ToL2MessageNonce

+

Description

+
+

Returns the nonce of the next message sent to the L2 contract. So if If n messages have been sent to Starknet, this function returns n + 1.

+
+

State Mutability

+
+

view

+
+

Parameters

+
+

None.

+
+

Returns

+
+ ++++ + + + + +
+uint256 nonce + +

The nonce of the next message sending to L2 contract.

+
+
+

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+

l1ToL2Messages

+

Description

+
+

Indicates if a pending message is associated with a given message hash.

+
+

State Mutability

+
+

view

+
+

Parameters

+
+ ++++ + + + + +
+bytes32 msgHash + +

The message hash.

+
+
+

Returns

+
+

Returns uint256 result, where result is one of the following:

+
+
+ ++++ + + + + + + + + +
+message_fee + 1 + +

A pending message is associated with the msgHash parameter.

+
+0 + +

No pending message is associated with the msgHash parameter.

+
+
+

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+

l2ToL1Messages

+

Description

+
+

Indicates if a pending message is associated with a given message hash.

+
+

State Mutability

+
+

view

+
+

Parameters

+
+ ++++ + + + + +
+bytes32 msgHash + +

The message hash.

+
+
+

Returns

+
+

Returns uint256 result, where result is one of the following:

+
+
+ ++++ + + + + + + + + +
+1 + +

A pending message is associated with the msgHash parameter.

+
+0 + +

No pending message is associated with the msgHash parameter.

+
+
+

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+

messageCancellationDelay

+

Description

+
+

Returns the time interval, in seconds, after which you can cancel a message starting from the moment of calling the startL1ToL2MessageCancellation function. You can get the real value by calling the messageCancellationDelay function on a block explorer, such as Etherscan.

+
+

State Mutability

+
+

view

+
+

Parameters

+
+

None.

+
+

Returns

+
+ ++++ + + + + +
+uint256 result + +

The time interval.

+
+
+

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+

sendMessageToL2

+

Description

+
+

Sends a message to an L2 contract. The message fee is the cost of executing this function.

+
+

State Mutability

+
+

payable

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + +
+uint256 toAddress + +

The address of the L2 contract.

+
+uint256 selector + +

The function, in the recipient L2 contract, that the message called.

+
+uint256[] calldata payload + +

The payload of the message.

+
+
+

Returns

+
+ ++++ + + + + + + + + +
+bytes32 msgHash + +

The hash of the message.

+
+uint256 nonce + +

The nonce of the message.

+
+
+

Emitted event

+ +

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+

startL1ToL2MessageCancellation

+

Description

+
+

Starts the cancellation of a message from L1 to L2.

+
+
+

You can cancel a message after a predefined about of time from the moment this function is called. The amount of time is set by the messageCancellationDelay function.

+
+
+

You can only call this function for a message that is currently pending, and the caller must be the sender of that message.

+
+

State Mutability

+
+

None.

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + + + + + +
+uint256 toAddress + +

The address of the L2 contract.

+
+uint256 selector + +

The function, in the recipient L2 contract, that the message called.

+
+uint256[] calldata payload + +

The payload of the message.

+
+uint256 nonce + +

The nonce of the message.

+
+
+

Returns

+
+ ++++ + + + + +
+bytes32 msgHash + +

The hash of the cancellation message.

+
+
+

Emitted event

+ +

Function definition

+
+

Contract: StarknetMessaging.sol

+
+
+ +
+
+
+
+
+

L1 event reference

+
+
+

Events are listed in alphabetical order.

+
+
+
+

ConsumedMessageToL1

+

Description

+
+

This event is emitted when a message from L2 to L1 is consumed by the consumeMessageFromL2 function.

+
+

Event attributes

+
+ + + + + + + + + + + + + +
+uint256 indexed fromAddress + +

The address of the sender on L2.

+
+address indexed toAddress + +

The address of the receiver on L1.

+
+uint256[] payload + +

The payload of the consumed message.

+
+
+

Event definition

+
+ +
+
+
+
+

LogMessageToL2

+

Description

+
+

This event is emitted when a message is sent from L1 to L2 by the sendMessageToL2 function.

+
+

Event attributes

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+address indexed fromAddress + +

The address of the sender on L1.

+
+uint256 indexed toAddress + +

The address of the receiver on L2.

+
+uint256 indexed selector + +

The function, in the recipient L2 contract, that the message called.

+
+uint256[] payload + +

The payload of the message.

+
+uint256 nonce + +

The nonce of the message.

+
+uint256 fee + +

The fee associated with the message.

+
+
+

Event definition

+
+ +
+
+
+
+

MessageToL2Canceled

+

Description

+
+

This event is emitted when an L1 to L2 message is canceled by the cancelL1ToL2Message function.

+
+

Event attributes

+
+ + + + + + + + + + + + + + + + + + + + + +
+address indexed fromAddress + +

The address of the sender on L1.

+
+uint256 indexed toAddress + +

The address of the receiver on L2.

+
+uint256 indexed selector + +

The function, in the recipient L2 contract, that the message called.

+
+uint256[] payload + +

The payload of the canceled message.

+
+uint256 nonce + +

The nonce of the canceled message.

+
+
+

Event definition

+
+ +
+
+
+
+

MessageToL2CancellationStarted

+

Description

+
+

This event is emitted when the cancellation of an L1 to L2 message is started by the startL1ToL2MessageCancellation function.

+
+

Event attributes

+
+ + + + + + + + + + + + + + + + + + + + + +
+address indexed fromAddress + +

The address of the sender on L1.

+
+uint256 indexed toAddress + +

The address of the receiver on L2.

+
+uint256 indexed selector + +

The function, in the recipient L2 contract, that the message called.

+
+uint256[] payload + +

The payload of the message to be canceled.

+
+uint256 nonce + +

The nonce of the message to be canceled.

+
+
+

Event definition

+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/network-architecture/starknet-architecture-overview/index.html b/pr-1359/architecture-and-concepts/network-architecture/starknet-architecture-overview/index.html new file mode 100644 index 0000000000..f9144a93fa --- /dev/null +++ b/pr-1359/architecture-and-concepts/network-architecture/starknet-architecture-overview/index.html @@ -0,0 +1,1308 @@ + + + + + + Starknet architecture: Overview :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Starknet architecture: Overview

+
+
+
+

Starknet is a coordinated system, with each component—sequencers, +provers, and nodes—playing a specific yet interconnected role. Although +Starknet is not yet fully decentralized, it’s actively moving toward +that goal. This description of the system’s roles and how they interact should +help you better grasp the intricacies of the Starknet ecosystem.

+
+
+
+
+

Transaction flow

+
+
+

Starknet’s operation begins when a transaction is received by a gateway, +which serves as the Mempool. This stage could also be managed by the +sequencer. The transaction is initially marked as RECEIVED. The +sequencer then incorporates the transaction into the network state and +tags it as ACCEPTED_ON_L2. The final step involves the prover, which +executes the operating system on the new block, calculates its proof, +and submits it to Layer 1 (L1) for verification.

+
+
+

For more information on the transaction flow, see Transaction lifecycle.

+
+
+
+transaction flow +
+
+
+

In essence, Starknet’s architecture involves multiple components:

+
+
+
    +
  • +

    The sequencer receives transactions, orders +them, and produces blocks. It operates similarly to validators in +Ethereum or Bitcoin.

    +
  • +
  • +

    The prover generates proofs for the created blocks +and transactions. It uses the Cairo Virtual Machine (Cairo VM) to run provable +programs, thereby creating execution traces necessary for generating +STARK proofs.

    +
  • +
  • +

    L1, in this case, Ethereum, hosts a smart contract capable +of verifying these STARK proofs. If the proofs are valid, Starknet’s +state root on L1 is updated.

    +
  • +
+
+
+
+
+

Starknet’s state

+
+
+

Starknet’s state is a comprehensive snapshot maintained through Merkle +trees, much like in Ethereum. This establishes the architecture of the +validity roll-up and the roles of each component.

+
+
+
+
+

Sequencers

+
+
+

Sequencers are the backbone of the Starknet network, similar to Ethereum’s +validators. They usher transactions into the system.

+
+
+

Validity Rollups, also known as ZK-Rollups, excel at offloading some network chores, like bundling +and processing transactions, to specialized players. This setup is +similar to how Ethereum and Bitcoin delegate security to miners. +Sequencing, like mining, demands hefty resources.

+
+
+

Validity Rollups like Starknet outsource transaction processing to specialized +entities and then verify their work. These specialized entities, in the +context of Validity Rollups, are known as sequencers.

+
+
+

Instead of providing security, as miners do, sequencers provide +transaction capacity. They order, that is, sequence, multiple transactions into a +single batch, execute them, and produce a block that is later +proved by the prover and submitted to the Layer 1 network as a single, +compact proof, known as a rollup. Just as validators +in Ethereum and miners in Bitcoin are specialized actors securing the +network, sequencers in Validity Rollup-based networks are specialized +actors that provide transaction capacity.

+
+
+

This mechanism enables Validity Rollups to handle a higher volume +of transactions while maintaining the security of the underlying +Ethereum network, enhancing scalability without compromising on +security.

+
+
+

Sequencers follow a systematic method for processing transactions:

+
+
+
    +
  1. +

    Sequencing: They collect transactions from users and order them.

    +
  2. +
  3. +

    Executing: Sequencers then process these transactions.

    +
  4. +
  5. +

    Batching: Transactions are grouped together in batches for +efficiency.

    +
  6. +
  7. +

    Block Production: Sequencers produce blocks that contain batches of +processed transactions.

    +
  8. +
+
+
+

Sequencers must be reliable and highly available, as their role is +critical to the network’s smooth functioning. They need powerful and +well-connected machines to perform their role effectively, as they must process transactions rapidly and continuously.

+
+
+

The current roadmap for Starknet includes decentralizing the sequencer +role. This shift towards decentralization will enable more participants +to become sequencers, contributing to the robustness of the network.

+
+
+
+
+

Provers

+
+
+

Provers serve as the second line of verification in the Starknet +network. Their main task is to validate the work of the sequencers, when +they receive the block produced by the sequencer, and to generate proofs +that these processes were correctly performed.

+
+
+

A prover does the following:

+
+
+
    +
  1. +

    Receives blocks: Provers receive blocks of processed transactions +from sequencers.

    +
  2. +
  3. +

    Processes blocks: Provers process these blocks a second time, ensuring +that all transactions within the block have been correctly handled.

    +
  4. +
  5. +

    Generates a proof: After processing, provers generate a proof of +correct transaction processing.

    +
  6. +
  7. +

    Sends the proof to Ethereum: Finally, the proof is sent to the +Ethereum network for validation. If the proof is correct, the +Ethereum network accepts the block of transactions.

    +
  8. +
+
+
+

Provers need even more computational power than sequencers because they +have to calculate and generate proofs, a process that is computationally +heavy. However, the work of provers can be split into multiple parts, +allowing for parallelism and efficient proof generation. The proof +generation process is asynchronous, meaning it doesn’t have to occur +immediately or in real-time. This flexibility allows for the workload to +be distributed among multiple provers. Each prover can work on a +different block, allowing for parallelism and efficient proof +generation.

+
+
+

The design of Starknet relies on these two types of actors—sequencers +and provers—working in tandem to ensure efficient processing and +secure verification of transactions.

+
+
+
+
+

Optimizing sequencers and provers: Debunking common misconceptions

+
+
+

The relationship between sequencers and provers in blockchain technology +often sparks debate. A common misunderstanding suggests that either the +prover or the sequencer is the main bottleneck. To set the record +straight, let’s discuss the optimization of both components.

+
+
+

Starknet, which uses the Cairo programming language, currently supports +only sequential transactions. Plans are in place to introduce parallel +transactions in the future. However, as of now, the sequencer operates +one transaction at a time, making it the bottleneck in the system.

+
+
+

In contrast, provers operate asynchronously and can execute multiple +tasks in parallel. The use of proof recursion allows for task +distribution across multiple machines, making scalability less of an +issue for provers.

+
+
+
+
+

Nodes

+
+
+

When it comes to defining what nodes do in Bitcoin or Ethereum, people +often misinterpret their role as keeping track of every transaction +within the network. This, however, is not entirely accurate.

+
+
+

Nodes serve as auditors of the network, maintaining the state of the +network, such as how much Bitcoin each participant owns or the current +state of a specific smart contract. They maintain network state by processing +transactions and preserving a record of all transactions, but that is a +means to an end, not the end itself.

+
+
+

In Validity Rollups and specifically within Starknet, this concept is +somewhat reversed. Nodes don’t necessarily have to process transactions +to get the state. In contrast to Ethereum or Bitcoin, Starknet nodes +aren’t required to process all transactions to maintain the state of the +network.

+
+
+

You can access network state data by using the Starknet API, which uses the JSON RPC protocol, to communicate with a node. Previously, Starknet’s Gateway and Feeder Gateway APIs enabled querying the sequencer, but as the network has matured, the JSON RPC has become the standard. +Operating your own node is typically faster than using a shared architecture, like the +gateway.

+
+
+

It’s worth noting that more people running nodes increases +the resilience of the network and prevents server flooding, which has +been an issue in other L2 networks.

+
+
+

Currently, there are primarily three methods for a node to keep track of +the network’s state and nodes can implement any of these +methods:

+
+
+
    +
  1. +

    Replaying Old Transactions: Like Ethereum or Bitcoin, a node can +take all the transactions and re-execute them. Although this approach is +accurate, it isn’t scalable unless you have a powerful machine that’s +capable of handling the load. If you can replay all transactions, you +can become a sequencer.

    +
  2. +
  3. +

    Relying on L2 Consensus: Nodes can trust the sequencer to +execute the network correctly. When the sequencer updates the state and +adds a new block, nodes accept the update as accurate.

    +
  4. +
  5. +

    Checking Proof Validation on L1: Nodes can monitor the state of +the network by observing L1 and ensuring that every time a proof is +sent, they receive the updated state. This way, they don’t have to trust +anyone and only need to keep track of the latest valid transaction for +Starknet.

    +
  6. +
+
+
+

Each type of node setup comes with its own set of hardware requirements +and trust assumptions.

+
+
+

Nodes that replay transactions

+
+

Nodes that replay transactions require powerful machines to track and +execute all transactions. These nodes don’t have trust assumptions; they +rely solely on the transactions they execute, guaranteeing that the +state at any given point is valid.

+
+
+
+

Nodes that rely on L2 consensus

+
+

Nodes that rely on L2 consensus require less computational power. They +need sufficient storage to keep the state but don’t need to process a +lot of transactions. The tradeoff here is a trust assumption. +Currently, Starknet revolves around one sequencer, so these nodes +trust StarkWare not to disrupt the network. However, once a consensus +mechanism and leader election amongst sequencers are in place, these +nodes will only need to trust that a sequencer who staked their stake to +produce a block is not willing to lose it.

+
+
+
+

Nodes that check proof validation on L1

+
+

Nodes that only update their state based on proof validation on L1 +require the least hardware. They have the same requirements as an +Ethereum node, and once Ethereum light nodes become a reality, +maintaining such a node could be as simple as using a smartphone. The +only tradeoff is higher latency. Proofs are sent to Ethereum intermittently, not for every block, resulting in delayed state updates. Plans are in +place to produce proofs more frequently, even if they are not sent to +Ethereum immediately, lowering node latency.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/network-architecture/starknet-state/index.html b/pr-1359/architecture-and-concepts/network-architecture/starknet-state/index.html new file mode 100644 index 0000000000..6db7df94d7 --- /dev/null +++ b/pr-1359/architecture-and-concepts/network-architecture/starknet-state/index.html @@ -0,0 +1,1443 @@ + + + + + + Starknet state :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Starknet state

+
+
+
+

Starknet’s state consists of:

+
+
+ ++++ + + + + + + + + +
+Contract classes + +

a mapping +between the class hash and the class definition

+
+Contract instances + +

a mapping between addresses (251-bit field elements) and the contract’s state

+
+
+
+

A contract instance’s state consists of:

+
+
+ ++++ + + + + + + + + + + + + +
+Class hash + +

defines the functionality of the contract

+
+Contract storage + +

a key-value mapping where the key/values are field elements

+
+Contract nonce + +

the number of transactions sent from this contract

+
+
+
+
+
+

Transitioning to a new state

+
+
+

A transaction \(tx\) transitions the system from state \(S\) to state \(S'\) if:

+
+
+
    +
  • +

    \(tx\) is an Invoke transaction, and the storage of \(S'\) is the result of executing the target contract code with respect to the previous state \(S\). The arguments, +contract instance’s address, and the specific function entry point are part of the transaction.

    +
  • +
  • +

    \(tx\) is a Deploy account transaction, and \(S'\) contains the new contract instance’s state at the contract instance’s address. Additionally, the storage of \(S\) is updated +according to the execution of the contract instance’s constructor.

    +
  • +
  • +

    \(tx\) is a Declare transaction, and \(S'\) contains the class hash and definition in the contract class’s mapping

    +
  • +
+
+
+
+
+

State commitment

+
+
+

The state commitment is a digest that represents the state.

+
+
+

In Starknet, the state commitment combines the roots of two binary Merkle-Patricia tries of height 251 in the following manner:

+
+
+
+
state_commitment = hPos(
+    "STARKNET_STATE_V0",
+    contract_trie_root,
+    class_trie_root
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    hPos is the Poseidon hash +function.

    +
  • +
  • +

    STARKNET_STATE_V0 is a constant prefix string encoded in ASCII (and represented as a field element).

    +
  • +
  • +

    contract_trie_root is the root of the contract trie, a Merkle-Patricia trie whose leaves are the contracts' states.

    +
  • +
  • +

    class_trie_root is the root of the class trie, a Merkle-Patricia trie whose leaves are the compiled class hashes.

    +
  • +
+
+
+

The contract trie

+
+

As with Ethereum, this trie is a two-level structure, whose leaves correspond to distinct contracts. The address of each contract determines the path from the trie’s root to its corresponding leaf, whose content encodes the contract’s state.

+
+
+

The information stored in the leaf is as follows:

+
+
+
+
hPed(
+  hPed(
+    hPed(
+      class_hash,
+      storage_root
+    ),
+    nonce
+  ),
+  0
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    hPed is the Pedersen hash function.

    +
  • +
  • +

    class_hash is the hash of the contract’s definition.

    +
  • +
  • +

    storage_root is the root of another Merkle-Patricia trie of height 251 that is constructed from the contract’s storage.

    +
  • +
  • +

    nonce is the current nonce of the contract.

    +
  • +
+
+
+
+

The class trie

+
+

The class trie encodes the information about all existing +classes in Starknet’s state. This trie maps class hashes to their +compiled class hashes. The information stored in a leaf at a path corresponding to some class hash is as follows:

+
+
+
+
hPos(
+    CONTRACT_CLASS_LEAF_V0,
+    compiled_class_hash
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    hPos is the Poseidon hash function

    +
  • +
  • +

    CONTRACT_CLASS_LEAF_V0 is a constant prefix string encoded in ASCII (and represented as a field element).

    +
  • +
  • +

    compiled_class_hash is the hash of the Cairo assembly resulting from compiling the given class via the Sierra-to-Casm compiler.

    +
  • +
+
+
+ + + + + +
+ + +
+
Compiled class hash
+

The compiled class hash identifies the output of a specific Casm compilation as unique.

+
+
+

Cairo classes that are part of the state commitment are defined with Sierra, an intermediate representation between Cairo and Cairo assembly (Casm). However, the prover only works with Casm.

+
+
+

So in order to prevent needing to compile from Sierra to Casm in every block in which the class is used, the state commitment must have some information about the corresponding Cairo assembly. The compiled class hash provides this information.

+
+
+

For more information, see Cairo and Sierra.

+
+
+

The party that declares the contract signs the compiled class hash, which they obtain using an SDK, as part of the DECLARE transaction. If the transaction is included in a block, then the compiled class hash becomes part of the state commitment.

+
+
+

In the future, when Sierra-to-Casm compilation becomes part of the Starknet OS, this value might be updated via a proof of the Sierra-to-Casm compiler execution, showing that compiling the same class with a newer compiler version results in some new compiled class hash.

+
+
+
+
+
+
+
+

Merkle-Patricia trie

+
+
+

The state commitment scheme uses a binary Merkle-Patricia trie with the Pedersen hash function.

+
+
+

About nodes

+
+

Each node in the trie is represented by a triplet \((length, path, value)\), where:

+
+
+ ++++ + + + + + + + + + + + + +
+\(length\) + +

is the length of the path, measured in nodes.

+
+\(path\) + +

is the path from the current node to its unique non-empty subtrie.

+
+

\(path\) is an integer in the set \(\{0,\ldots,2^{length}-1\}\), and the binary expansion of \(path\) indicates how to proceed along the trie, as follows:

+
+
+
    +
  1. +

    Expand \(path\) to its binary representation.

    +
  2. +
  3. +

    Starting with the most significant bit, representing the root of the trie, traverse the tree node by node, where the bit values \(0\) and \(1\) indicate left and right, respectively.

    +
  4. +
+
+
+\(value\) + +

is the value of the node, which can be either data, or the hash of two non-empty child nodes.

+
+
+
+

An empty node is one whose triplet values are \((0,0,0)\). Leaf nodes and internal nodes can be empty. A subtrie rooted at a node \((length, path, value)\) has a single non-empty subtrie, rooted at the node obtained by following the path specified by \(path\).

+
+
+ + + + + +
+ + +
+

Length is specified, and cannot be deduced from \(path\), because the numbers in the triplet \((length, path, value)\) are field elements of fixed size, 251 bits each.

+
+
+

For a node where \(length>0\), \(path\) leads to the highest node whose left and right children are not empty.

+
+
+
+
+
+

Trie construction

+
+

The following rules specify how the trie is constructed from a given set of leaves:

+
+
+

The hash of a node \(N =(length, path, value)\), denoted by \(H(N)\), is:

+
+
+
+\[H(N)=\begin{cases} +value, & \text{if } length = 0 \\ +h_{Ped}(value, path) + length, & \text{otherwise} +\end{cases}\] +
+
+
+ + + + + +
+ + +
+

All arithmetic operations in the above description of \(H\) are done in the STARK field, as described in The STARK field.

+
+
+
+
+
+

Mathematical definition of the nodes in the trie

+
+

The triplet representing the parent of the nodes \(left=(\ell_L, p_L, v_L)\), \(right=(\ell_R, p_R, v_R)\) is defined as follows:

+
+
+
+\[parent= +\begin{cases} +(0,0,0), & \text{if } left=right=(0,0,0)\\ +(\ell_L + 1, p_L, v_L), & \text{if } right=(0,0,0) \text{ and } left \neq (0,0,0)\\ +(\ell_R + 1, p_R + 2^{\ell_R}, v_R), & \text{if } right\neq (0,0,0) \text{ and } left = (0,0,0)\\ +(0, 0, h_{Ped}(H(left), H(right))), & \text{otherwise} +\end{cases}\] +
+
+
+
+

Example trie

+
+

The diagram A three-level Merkle-Patricia trie illustrates the construction of a three-level-high Merkle-Patricia trie from the leaves whose values are \((0,0,1,0,0,1,0,0)\):

+
+
+
+3-level-high Merkle-Patricia trie +
+
Figure 1. A three-level Merkle-Patricia trie
+
+
+

Where \(r=h_{Ped}(H(2,2,1),H((2,1,1))\). Notice that the example does not skip from the root, whose length is zero, so the final state commitment to the trie is \(H((0,0,r))=r\).

+
+
+

Suppose that you want to prove, with respect to the state commitment just computed, that the value of the leaf whose path is given by \(101\) is \(1\). In a standard Merkle trie, the proof would consist of data from three nodes, which are siblings along the path to the root.

+
+
+

In a Merkle-Patricia trie, because the trie is sparse, you only need to send the two children of the root, which are \((2,2,1)\) and \((2,1,1)\). These two children are enough to reproduce the state commitment \(r\), and because you know that the height of the trie is three, and that it is fixed, you know that the path \(01\) of length \(2\) specified by the right-hand child, \((2,1,1)\), leads to the desired leaf.

+
+
+
+
+
+

Special addresses

+
+
+

Starknet uses special contract addresses to provide distinct capabilities beyond regular contract deployment.

+
+
+

Two such addresses are 0x0 and 0x1. These addresses are reserved for specific purposes and are +characterized by their unique behavior in comparison to traditional contract addresses.

+
+
+

Address 0x0

+
+

Address 0x0 functions as the default caller_address for external calls, including interactions with the L1 handler or deprecated Deploy transactions. Unlike regular contracts, address 0x0 does not possess a storage structure and does not accommodate storage mapping.

+
+
+
+

Address 0x1

+
+

Address 0x1 is another special contract address within Starknet’s architecture. It functions as a storage space for mapping block numbers to their corresponding block hashes. The storage structure at this address is organized as follows:

+
+
+ ++++ + + + + + + + + + + + + +
+Keys + +

Block numbers between \(\text{first_v0_12_0_block}\) and \(\text{current_block - 10}\).

+
+Values + +

Corresponding block hashes for the specified blocks.

+
+Default Values + +

For all other block numbers, the values are set to 0.

+
+
+
+

The storage organization of address 0x1 supports the efficient retrieval of block hashes based on block numbers within a defined range and is also used by the get_block_hash system call.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/network-architecture/transaction-life-cycle/index.html b/pr-1359/architecture-and-concepts/network-architecture/transaction-life-cycle/index.html new file mode 100644 index 0000000000..03f56b117c --- /dev/null +++ b/pr-1359/architecture-and-concepts/network-architecture/transaction-life-cycle/index.html @@ -0,0 +1,1380 @@ + + + + + + Transaction lifecycle :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Transaction lifecycle

+
+

Transaction flow

+
+
+
+transaction flow +
+
+
+

The high-level steps in the Starknet transaction lifecycle are as follows:

+
+
+
    +
  1. +

    Transaction submission: A transaction is submitted to one of the gateways, which functions as the mempool, and marks the transaction status as RECEIVED.

    +
  2. +
  3. +

    Mempool validation: +The mempool performs a preliminary validation on the transaction, such as ensuring that the current account balance exceeds the value of max_fee (prior to v3 transactions) or assuring the transaction’s calldata length is within the legal limit. If the transaction is invalid, it does not proceed.

    +
    +

    Mempool validation in this context is analogous to Ethereum’s signature checking, including running the account’s __validate__ function on an INVOKE transaction, __validate_declare__ on a DECLARE transaction, or __validate_deploy__ on a DEPLOY_ACCOUNT transaction, ensuring that the current account balance exceeds the value of max_fee (prior to v3 transactions), and more.

    +
    +
  4. +
  5. +

    Sequencer validation: The sequencer performs preliminary validation on the transaction before executing it to ensure that the transaction is still valid. If the transaction is invalid, it does not proceed.

    +
    +

    This validation stage repeats the same validation run during the mempool validation.

    +
    +
  6. +
  7. +

    Execution: The sequencer operation sequentially applies all transactions that passed the preliminary validation to the state. If a transaction fails during execution, it is included in the block with the status REVERTED.

    +
  8. +
  9. +

    Proof generation and verification: The Prover executes the operating system on the new block, computes the proof, and transmits it to the L1 verifier, which verifies the proof. At this point, the L1 state is updated to include the transaction.

    +
  10. +
+
+
+
+
+

Transaction status

+
+
+

The diagram below illustrates how each transaction status fits into the overall transaction flow:

+
+
+
+txn flow +
+
+
+

The following are the possible statuses of a transaction from the moment a user sends it until the moment it passes the L1 verifier:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Status typeStatusExplanation

Finality

NOT_RECEIVED

The transaction is not yet known to the sequencer.

RECEIVED

+

The transaction was received by the mempool. The transaction now either executes successfully, is rejected, or reverted.

+
+
+

The transaction has no execution status.

+

REJECTED

+

The transaction was received by the mempool but failed validation in the sequencer. Such transactions are not included in a block.

+
+
+

The transaction has no execution status.

+
+
+ + + + + +
+ + +
+

A rejected transaction is stored in the mempool. You cannot send another transaction with the same transaction hash.

+
+
+

ACCEPTED_ON_L2

The transaction was executed and entered an actual created block on L2.

ACCEPTED_ON_L1

The transaction was accepted on Ethereum.

Execution

REVERTED

+

The transaction passed validation but failed during execution in the sequencer. It is included in the block with the status REVERTED.

+
+
+ + + + + +
+ + +
+

Since only INVOKE transactions have an execution phase, DEPLOY_ACCOUNT and DECLARE transactions cannot be reverted. If either the __VALIDATE_DEPLOY__ or the __VALIDATE_DECLARE__ function fails when run in the sequencer, then the transaction is rejected.

+
+
+

SUCCEEDED

The transaction was successfully executed by the sequencer. It is included in the block.

+
+
+
+

State implications of a reverted transaction

+
+
+

When a transaction is marked as REVERTED, the following state implications occur:

+
+
+ ++++ + + + + + + + + + + + + + + + + +
+Nonce increases + +

The nonce value for the account of the failed transaction iterates despite the failure.

+
+Fee charge + +

The sequencer charges a fee for the execution of the transaction up to the point of failure. A Transfer event is emitted.

+
+Partial reversion + +

All changes that occurred during the validation stage are not reverted. However, all changes that occurred during the execution stage are reverted, including all messages to L1 or any events that were emitted during this stage.

+
+

Events might still be emitted from the validation stage or the fee charge stage.

+
+
+Fee calculation + +

The fee charged for REVERTED transactions is the smaller of the following two values:

+
+
    +
  • +

    The maximum fee that the user is willing to pay, either max_fee (pre-v3 transactions) or \(\text{max_amount} \cdot \text{max_price_per_unit}\) (v3 transactions).

    +
  • +
  • +

    The total consumed resources.

    +
  • +
+
+
+
+
+
+
Consumed Resources
+
+

The resources used for the execution of the transaction up to the point of failure. This includes Cairo steps, builtins, syscalls, L1 messages, events, and state diffs during the validation and execution stages.

+
+
+
+
+
+
+

Transaction receipt

+
+
+

To get a receipt, use the JSON RPC method starknet_getTransactionReceipt.

+
+
+

The transaction receipt contains the following fields:

+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+transaction_hash + +

The hash of the transaction.

+
+actual_fee + +

The actual fee paid for the transaction.

+
+finality_status + +

The finality status of the transaction.

+
+execution_status + +

The execution status of the transaction.

+
+block_hash + +

The hash of the block that includes the transaction

+
+block_number + +

The sequential number of the block that includes the transaction

+
+messages_sent + +

A list of messages sent to L1.

+
+events + +

The events emitted.

+
+execution_resource + +

A summary of the execution resources used by the transaction.

+
+type + +

The type of the transaction.

+
+
+
+

The following is an example of a receipt:

+
+
+
+
{
+  "jsonrpc": "2.0",
+  "result": {
+    "actual_fee": "0x221db5dbf6db",
+    "block_hash": "0x301fc0d09c5810600af7bb9610be10596ad6f4e6d28a60d397dd148f0962a88",
+    "block_number": 906096,
+    "events": [
+      {
+        "data": [
+          "0x181de8b0cd32999a5cc962c5f724bc0f6a322f02957b80e1d5fef49a87588b7",
+          "0x0",
+          "0x9184e72a000",
+          "0x0"
+        ],
+        "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
+        "keys": [
+          "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9"
+        ]
+      },
+      {
+        "data": [
+          "0x764da020183e28a48ee38a9474f84e7e5ff13194",
+          "0x9184e72a000",
+          "0x0",
+          "0x181de8b0cd32999a5cc962c5f724bc0f6a322f02957b80e1d5fef49a87588b7"
+        ],
+        "from_address": "0x73314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82",
+        "keys": [
+          "0x194fc63c49b0f07c8e7a78476844837255213824bd6cb81e0ccfb949921aad1"
+        ]
+      },
+      {
+        "data": [
+          "0x181de8b0cd32999a5cc962c5f724bc0f6a322f02957b80e1d5fef49a87588b7",
+          "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8",
+          "0x221db5dbf6db",
+          "0x0"
+        ],
+        "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
+        "keys": [
+          "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9"
+        ]
+      }
+    ],
+    "execution_status": "SUCCEEDED",
+    "finality_status": "ACCEPTED_ON_L2",
+    "messages_sent": [
+      {
+        "from_address": "0x73314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82",
+        "payload": [
+          "0x0",
+          "0x764da020183e28a48ee38a9474f84e7e5ff13194",
+          "0x9184e72a000",
+          "0x0"
+        ],
+        "to_address": "0xc3511006c04ef1d78af4c8e0e74ec18a6e64ff9e"
+      }
+    ],
+    "transaction_hash": "0xdeadbeef",
+    "type": "INVOKE"
+  },
+  "id": 1
+}
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/network-architecture/transactions/index.html b/pr-1359/architecture-and-concepts/network-architecture/transactions/index.html new file mode 100644 index 0000000000..5d9d4f29d3 --- /dev/null +++ b/pr-1359/architecture-and-concepts/network-architecture/transactions/index.html @@ -0,0 +1,2390 @@ + + + + + + Transaction types :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Transaction types

+
+
+
+

Starknet supports the following types of transactions, as defined in the Starknet API:

+
+
+ ++++ + + + + + + + + + + + + +
+DECLARE + +

Declares new contract classes, enabling new contract instances.

+
+INVOKE + +

Invokes an existing function in a contract.

+
+DEPLOY_ACCOUNT + +

Deploys new account contracts in smart wallets.

+
+
+
+

To see how these transaction types appear in the Starknet API, see starknet_api_openrpc.json.

+
+
+

This topic describes the available fields for these transaction types and how each transaction’s hash is calculated.

+
+
+
+
+

Transaction versions

+
+
+

When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases.

+
+
+

Deprecated transaction versions are still supported, but support will be removed in a future release of Starknet.

+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Supported versions of Starknet transaction types
Transaction nameCurrent versionDeprecated versionsUnsupported versions

INVOKE

v3

v1, v0

N/A

DECLARE

v3

v2, v1

v0

DEPLOY_ACCOUNT

v3

v0

N/A

DEPLOY

N/A

N/A

v0

+
+

Additionally, see information on the L1 handler transaction type.

+
+
+ + + + + +
+ + +
+

Do not submit a transaction that uses an unsupported transaction type, because it cannot be included in a proof, and so cannot become part of a Starknet block.

+
+
+
+
+ + + + + +
+ + +
+

While the L1HandlerTransaction type is a valid transaction type within Starknet, be aware that it cannot be broadcast through the Starknet API like the other transaction types listed in the table above. This transaction type is specifically designed for internal Starknet operations, particularly for handling messages from L1 to L2. +For more details, refer to the L1 handler transaction page.

+
+
+
+
+
+
+

INVOKE transaction

+
+
+

The INVOKE transaction type invokes a function in an existing contract instance. The contract code of the account that sends the INVOKE transaction determines how to process the transaction.

+
+
+ + + + + +
+ + +
+

Because an account’s __validate__ and __execute__ functions can contain any logic, the account ultimately determines how to handle the INVOKE transaction.

+
+
+
+
+

Every INVOKE transaction in Starknet undergoes the validation and execution stages, initiated by the __validate__ and __execute__ functions. The validation stage verifies that the account that sent the transaction approves it.

+
+
+

v3 transaction fields

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field nameTypeDescription

account_deployment_data

List<FieldElement>

For future use.

+

Currently this value is always empty.

+

For more information, see SNIP 8: Transaction V3 Structure

calldata

List<FieldElement>

The arguments that are passed to the validate and execute functions.

chain_id

FieldElement

The id of the chain to which the transaction is sent.

fee_data_availability_mode

FieldElement

For future use.

+

Currently this value is always 0.

+

For more information, see SNIP 8: Transaction V3 Structure

nonce

FieldElement

The transaction nonce.

nonce_data_availability_mode

FieldElement

For future use.

+

Currently this value is always 0.

+

For more information, see SNIP 8: Transaction V3 Structure

paymaster_data

List<FieldElement>

For future use.

+

Currently this value is always empty.

+

For more information, see SNIP 8: Transaction V3 Structure

resource_bounds

Dict[Resource, ResourceBounds]

+

Used for enabling the fee market.

+
+
+

A dictionary that maps resource type to resource bounds. The resource is the amount of L1 or L2 gas used to pay for the transaction.

+
+
+
+
Resource
+
+

A felt. Possible values are the felt representation of the strings L1_GAS or L2_GAS.

+
+
ResourceBounds
+
+

A struct containing the following felts:

+
+
    +
  • +

    max_amount: The maximum amount of the resource allowed for usage during the execution.

    +
  • +
  • +

    max_price_per_unit: The maximum price the user is willing to pay for the resource.
    +L1_GAS and L2_GAS are specified in units of fri, where 1 fri = 10-18 STRK.

    +
  • +
+
+
+
+

sender_address

FieldElement

The address of the account initiating the transaction.

signature

List<`FieldElement>`

Additional information given by the sender, used to validate the transaction.

tip

FieldElement

For future use. Currently this value is always 0.

version

FieldElement

+

The transaction’s version.
+When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases.

+
+
+

Transaction version, where n specifies version n transaction. For example:

+
+
+ ++++ + + + + +
+3 + +

version 3 transaction

+
+
+
+
+

v3 hash calculation

+
+

The INVOKE v3 transaction hash is calculated as a Poseidon hash over the given transaction elements, +specifically:

+
+
+
+
invoke_v3_tx_hash = h(
+    "invoke",
+    version,
+    nonce,
+    sender_address,
+    h(tip, l1_gas_bounds, l2_gas_bounds),
+    h(paymaster_data),
+    chain_id,
+    data_availability_modes,
+    h(account_deployment_data),
+    h(calldata)
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    invoke is a constant prefix string, encoded in ASCII.

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id.

    +
  • +
  • +

    l1_gas_bounds is constructed as follows:

    +
    +
    +\[\underbrace{\text{L1_GAS}}_{\text{60 bits}} | \underbrace{\text{max_amount}}_{\text{64 bits}} | +\underbrace{\text{max_price_per_unit}}_{\text{128 bits}}\] +
    +
    +
  • +
  • +

    l2_gas_bounds is constructed as follows:

    +
    +
    +\[\underbrace{\text{L2_GAS}}_{\text{60 bits}} | \underbrace{\text{max_amount}}_{\text{64 bits}} | +\underbrace{\text{max_price_per_unit}}_{\text{128 bits}}\] +
    +
    +
  • +
  • +

    data_availability_modes is a concatenation of fee_data_availability_mode +and nonce_data_availability_mode, as follows:

    +
    +
    +\[\underbrace{0\cdots0}_{\text{188 bits}} | \underbrace{\text{nonce_data_availability_mode}}_{\text{32 bits}} | +\underbrace{\text{fee_data_availability_mode}}_{\text{32 bits}}\] +
    +
    +
  • +
  • +

    h is the Poseidon hash.

    +
  • +
+
+
+
+

v1 (deprecated) transaction fields

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2. INVOKE v1 transaction fields
NameTypeDescription

sender_address

FieldElement

The address of the sender of this transaction.

calldata

List<FieldElement>

The arguments that are passed to the validate and execute functions.

signature

List<FieldElement>

Additional information given by the sender, used to validate the transaction.

max_fee

FieldElement

The maximum fee that the sender is willing to pay for the transaction

nonce

FieldElement

The transaction nonce.

version

FieldElement

The transaction’s version. The value is 1.
+When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases.

+
+
+

v1 (deprecated) hash calculation

+
+

The INVOKE v1 transaction hash is calculated as a hash over the given transaction elements, +specifically:

+
+
+
+
invoke_v1_tx_hash = h(
+    "invoke",
+    version,
+    sender_address,
+    0,
+    h(calldata),
+    max_fee,
+    chain_id,
+    nonce
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    invoke is a constant prefix string, encoded in ASCII.

    +
  • +
  • +

    The placeholder zero is used to align the hash computation for the different types of transactions.

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id.

    +
  • +
  • +

    h is the Pedersen hash

    +
  • +
+
+
+
+

v0 (deprecated) hash calculation

+
+

The hash of a v0 INVOKE transaction is computed as follows:

+
+
+
+
invoke_v0_tx_hash = h(
+    "invoke",
+    version,
+    contract_address,
+    entry_point_selector,
+    h(calldata),
+    max_fee,
+    chain_id
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    invoke is a constant prefix string, encoded in (ASCII).

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. v2 and v3

    +
  • +
  • +

    h is the Pedersen hash

    +
  • +
+
+
+
+
+
+

DECLARE transaction

+
+
+

The DECLARE transaction introduces new contract classes into the state of Starknet, enabling other contracts to deploy instances of those classes or use them in a library call. For more information, see contract classes.

+
+
+

v3 transaction fields

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field nameTypeDescription

account_deployment_data

List<FieldElement>

For future use.

+

Currently this value is always empty.

+

For more information, see SNIP 8: Transaction V3 Structure

chain_id

FieldElement

The id of the chain to which the transaction is sent.

compiled_class_hash

FieldElement

The hash of the compiled class. For more information, see Class hash.

contract_class

ContractClass

The class definition. For more information, see Class hash.

fee_data_availability_mode

FieldElement

For future use.

+

Currently this value is always 0.

+

For more information, see SNIP 8: Transaction V3 Structure

nonce

FieldElement

The transaction nonce.

nonce_data_availability_mode

FieldElement

For future use.

+

Currently this value is always 0.

+

For more information, see SNIP 8: Transaction V3 Structure

paymaster_data

List<FieldElement>

For future use.

+

Currently this value is always empty.

+

For more information, see SNIP 8: Transaction V3 Structure

resource_bounds

Dict[Resource, ResourceBounds]

+

Used for enabling the fee market.

+
+
+

A dictionary that maps resource type to resource bounds. The resource is the amount of L1 or L2 gas used to pay for the transaction.

+
+
+
+
Resource
+
+

A felt. Possible values are the felt representation of the strings L1_GAS or L2_GAS.

+
+
ResourceBounds
+
+

A struct containing the following felts:

+
+
    +
  • +

    max_amount: The maximum amount of the resource allowed for usage during the execution.

    +
  • +
  • +

    max_price_per_unit: The maximum price the user is willing to pay for the resource.
    +L1_GAS and L2_GAS are specified in units of fri, where 1 fri = 10-18 STRK.

    +
  • +
+
+
+
+

sender_address

FieldElement

The address of the account initiating the transaction.

signature

List<`FieldElement>`

Additional information given by the sender, used to validate the transaction.

tip

FieldElement

For future use. Currently this value is always 0.

version

FieldElement

+

The transaction’s version.
+When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases.

+
+
+

Transaction version, where n specifies version n transaction. For example:

+
+
+ ++++ + + + + +
+3 + +

version 3 transaction

+
+
+
+
+

v3 hash calculation

+
+

The hash of a v3 DECLARE transaction is computed as follows:

+
+
+
+
declare_v3_tx_hash = h(
+    "declare",
+    version,
+    sender_address,
+    h(tip, l1_gas_bounds, l2_gas_bounds),
+    h(paymaster_data),
+    chain_id,
+    nonce,
+    data_availability_modes,
+    h(account_deployment_data),
+    class_hash,
+    compiled_class_hash
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    declare is a constant prefix string, encoded in ASCII.

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id.

    +
  • +
  • +

    l1_gas_bounds is constructed as follows:

    +
    +
    +\[\underbrace{\text{L1_GAS}}_{\text{60 bits}} | \underbrace{\text{max_amount}}_{\text{64 bits}} | +\underbrace{\text{max_price_per_unit}}_{\text{128 bits}}\] +
    +
    +
  • +
  • +

    l2_gas_bounds is constructed as follows:

    +
    +
    +\[\underbrace{\text{L2_GAS}}_{\text{60 bits}} | \underbrace{\text{max_amount}}_{\text{64 bits}} | +\underbrace{\text{max_price_per_unit}}_{\text{128 bits}}\] +
    +
    +
  • +
  • +

    data_availability_modes is a concatenation of fee_data_availability_mode +and nonce_data_availability_mode, as follows:

    +
    +
    +\[\underbrace{0\cdots0}_{\text{188 bits}} | \underbrace{\text{nonce_data_availability_mode}}_{\text{32 bits}} | +\underbrace{\text{fee_data_availability_mode}}_{\text{32 bits}}\] +
    +
    +
  • +
  • +

    h is the Poseidon hash.

    +
  • +
  • +

    class_hash is the hash of the contract class. See Class Hash +for details about how the +hash is computed

    +
  • +
  • +

    compiled_class_hash is the hash of the compiled class +generated by the Sierra→Casm compiler that is used in Starknet

    +
  • +
+
+
+
+

v2 (deprecated) transaction fields

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3. DECLARE v2 transaction fields
NameTypeDescription

chain_id

FieldElement

The id of the chain to which the transaction is sent.

contract_class

ContractClass

The (Cairo 1.0) class.

compiled_class_hash

FieldElement

The hash of the compiled class (see here for more information)

sender_address

FieldElement

The address of the account initiating the transaction.

signature

List<FieldElement>

Additional information given by the sender, used to validate the transaction.

max_fee

FieldElement

The maximum fee that the sender is willing to pay for the transaction.

nonce

FieldElement

The transaction nonce.

version

FieldElement

The transaction’s version. The value is 2.
+When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases.

+
+
+

v2 (deprecated) hash calculation

+
+

The hash of a v2 DECLARE transaction is computed as follows:

+
+
+
+
declare_v2_tx_hash = h(
+    "declare",
+    version,
+    sender_address,
+    0,
+    h(class_hash),
+    max_fee,
+    chain_id,
+    nonce,
+    compiled_class_hash
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    h is the Poseidon hash function

    +
  • +
  • +

    class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed

    +
  • +
  • +

    compiled_class_hash is the hash of the compiled class generated by the Sierra→Casm compiler that is used in Starknet

    +
  • +
+
+
+
+

v1 (deprecated) transaction fields

+
+

This transaction version was used to declare Cairo 0 classes.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4. DECLARE v1 transaction fields
NameTypeDescription

contract_class

ContractClass

The class object.

sender_address

FieldElement

The address of the account initiating the transaction.

max_fee

FieldElement

The maximum fee that the sender is willing to pay for the transaction.

signature

List<FieldElement>

Additional information given by the sender, used to validate the transaction.

nonce

FieldElement

The transaction nonce.

version

FieldElement

The transaction’s version. Possible values are 1 or 0.
+When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases.

+
+
+

v1 (deprecated) hash calculation

+
+

The hash of a v1 DECLARE transaction is computed as follows:

+
+
+
+
declare_v1_tx_hash = h(
+    "declare",
+    version,
+    sender_address,
+    0,
+    h(class_hash),
+    max_fee,
+    chain_id,
+    nonce
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    declare is a constant prefix string, encoded in ASCII.

    +
  • +
  • +

    class_hash is the hash of the contract class. See Class Hash for details about how the hash is +computed.

    +
  • +
  • +

    The placeholder zero is used to align the hash computation for the different types of transactions.

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id.

    +
  • +
  • +

    h is the Pedersen hash

    +
  • +
+
+
+
+

v0 (unsupported) hash calculation

+
+

This transaction version was used to declare Cairo 0 classes.

+
+
+

The hash of a v0 DECLARE transaction is computed as follows:

+
+
+
+
declare_v0_tx_hash = h(
+    "declare",
+    version,
+    sender_address,
+    0,
+    h(),
+    max_fee,
+    chain_id,
+    class_hash
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    declare is a constant prefix string, encoded in ASCII.

    +
  • +
  • +

    The placeholder zeros are used to align the hash computation for the different types of transactions.

    +
  • +
  • +

    h is the Pedersen hash

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id.

    +
  • +
  • +

    class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed.

    +
  • +
+
+
+
+
+
+

DEPLOY_ACCOUNT transaction

+
+
+

Since StarkNet v0.10.1 the DEPLOY_ACCOUNT +transaction replaces the DEPLOY transaction +for deploying account contracts.

+
+
+

To use it, you should first pre-fund your new account address so that you can pay the +transaction fee. You can then send the DEPLOY_ACCOUNT transaction.

+
+
+

For more information, see Deploying a new account.

+
+
+

v3 transaction fields

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field nameTypeDescription

chain_id

FieldElement

The id of the chain to which the transaction is sent.

class_hash

FieldElement

The hash of the desired account class. For more information, see Class hash.

constructor_calldata

List<FieldElement>

The arguments to the account constructor.

contract_address_salt

FieldElement

A random salt that determines the account address.

fee_data_availability_mode

FieldElement

For future use.

+

Currently this value is always 0.

+

For more information, see SNIP 8: Transaction V3 Structure

nonce

FieldElement

The transaction nonce.

nonce_data_availability_mode

FieldElement

For future use.

+

Currently this value is always 0.

+

For more information, see SNIP 8: Transaction V3 Structure

paymaster_data

List<FieldElement>

For future use.

+

Currently this value is always empty.

+

For more information, see SNIP 8: Transaction V3 Structure

resource_bounds

Dict[Resource, ResourceBounds]

+

Used for enabling the fee market.

+
+
+

A dictionary that maps resource type to resource bounds. The resource is the amount of L1 or L2 gas used to pay for the transaction.

+
+
+
+
Resource
+
+

A felt. Possible values are the felt representation of the strings L1_GAS or L2_GAS.

+
+
ResourceBounds
+
+

A struct containing the following felts:

+
+
    +
  • +

    max_amount: The maximum amount of the resource allowed for usage during the execution.

    +
  • +
  • +

    max_price_per_unit: The maximum price the user is willing to pay for the resource.
    +L1_GAS and L2_GAS are specified in units of fri, where 1 fri = 10-18 STRK.

    +
  • +
+
+
+
+

signature

List<`FieldElement>`

Additional information given by the sender, used to validate the transaction.

tip

FieldElement

For future use. Currently this value is always 0.

version

FieldElement

+

The transaction’s version.
+When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases.

+
+
+

Transaction version, where n specifies version n transaction. For example:

+
+
+ ++++ + + + + +
+3 + +

version 3 transaction

+
+
+
+
+

v3 hash calculation

+
+

The hash of a DEPLOY_ACCOUNT transaction is computed as follows:

+
+
+
+
deploy_account_v3_tx_hash = h(
+    "deploy_account",
+    version,
+    contract_address,
+    h(tip, l1_gas_bounds, l2_gas_bounds),
+    h(paymaster_data),
+    chain_id,
+    nonce,
+    data_availability_modes,
+    h(constructor_calldata),
+    class_hash,
+    contract_address_salt
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    deploy_account is a constant prefix string, encoded in ASCII.

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id.

    +
  • +
  • +

    l1_gas_bounds is constructed as follows:

    +
    +
    +\[\underbrace{\text{L1_GAS}}_{\text{60 bits}} | \underbrace{\text{max_amount}}_{\text{64 bits}} | +\underbrace{\text{max_price_per_unit}}_{\text{128 bits}}\] +
    +
    +
  • +
  • +

    l2_gas_bounds is constructed as follows:

    +
    +
    +\[\underbrace{\text{L2_GAS}}_{\text{60 bits}} | \underbrace{\text{max_amount}}_{\text{64 bits}} | +\underbrace{\text{max_price_per_unit}}_{\text{128 bits}}\] +
    +
    +
  • +
  • +

    data_availability_modes is a concatenation of fee_data_availability_mode +and nonce_data_availability_mode, as follows:

    +
    +
    +\[\underbrace{0\cdots0}_{\text{188 bits}} | \underbrace{\text{nonce_data_availability_mode}}_{\text{32 bits}} | +\underbrace{\text{fee_data_availability_mode}}_{\text{32 bits}}\] +
    +
    +
  • +
  • +

    h is the Poseidon hash.

    +
  • +
  • +

    class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed.

    +
  • +
  • +

    contract_address is the address of the newly deployed account. For information on how this address is calculated, see Contract address.

    +
  • +
+
+
+
+

v1 (deprecated) transaction fields

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5. DEPLOY_ACCOUNT transaction fields
NameTypeDescription

class_hash

FieldElement

The hash of the desired account class.

constructor_calldata

List<FieldElement>

The arguments to the account constructor.

contract_address_salt

FieldElement

A random salt that determines the account address.

signature

List<FieldElement>

Additional information given by the sender, used to validate the transaction.

max_fee

FieldElement

The maximum fee that the sender is willing to pay for the transaction

nonce

FieldElement

The transaction nonce.

version

FieldElement

The transaction’s version. The value is 1.

+
+
+

v1 (deprecated) hash calculation

+
+

The hash of a DEPLOY_ACCOUNT transaction is computed as follows:

+
+
+
+
deploy_account_v1_tx_hash = h(
+    "deploy_account",
+    version,
+    contract_address,
+    0,
+    h(class_hash, contract_address_salt, constructor_calldata),
+    max_fee,
+    chain_id,
+    nonce
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    deploy_account is a constant prefix string, encoded in ASCII.

    +
  • +
  • +

    The placeholder zero is used to align the hash computation for the different types of transactions.

    +
  • +
  • +

    h is the Pedersen hash

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id.

    +
  • +
  • +

    class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed.

    +
  • +
+
+
+
+
+
+

DEPLOY (unsupported) transaction hash calculation

+
+
+

If you need to retrieve the hash of an existing DEPLOY transaction, you can use this information to calculate the hash of the transaction.

+
+
+

Before you can calculate the transaction hash, get the deployed contract address. The DEPLOY transaction’s hash is calculated as shown in the following pseudo code:

+
+
+
+
deploy_tx_hash = h(
+    "deploy",
+    version,
+    contract_address,
+    sn_keccak("constructor"),
+    h constructor_calldata),
+    0,
+    chain_id
+)
+
+
+
+

Where:

+
+
+
    +
  • +

    The placeholder zero is used to align the hash computation for the different types of transactions.

    +
  • +
  • +

    deploy and constructor are constant strings encoded in ASCII.

    +
  • +
  • +

    h is the Pedersen hash and +sn_keccak is Starknet Keccak.

    +
  • +
  • +

    chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id.

    +
  • +
  • +

    contract_address is calculated as described here.

    +
  • +
+
+
+
+
+

Signature

+
+
+

While Starknet does not have a specific signature scheme built into the protocol, the Cairo language, in which smart contracts are written, does have an efficient implementation for ECDSA signature with respect to a STARK-friendly curve.

+
+
+

The generator used in the ECDSA algorithm is \(G=\left(g_x, g_y\right)\) where:

+
+
+

\(g_x=874739451078007766457464989774322083649278607533249481151382481072868806602\) \(g_y=152666792071518830868575557812948353041420400780739481342941381225525861407\)

+
+
+
+
+

v3 transaction fee estimation

+
+
+

Estimate the fees of transactions with the starknet_estimateFee API call, which is part of Starknet’s API v0.7.0 and above. For more information, see the Starknet JSON RPC specification. For more information on how to construct the appropriate resource_bounds based on the response of starknet_estimateFee, see How to use the new fee estimates? on the Starknet community forum.

+
+
+
+
+

Chain ID

+
+
+

Chain IDs are given as numbers, representing the ASCII encoding of specific constant strings, as illustrated by the following Python snippet:

+
+
+
+
chain_id = int.from_bytes(value, byteorder="big", signed=False)
+
+
+
+

The following constants are currently used. They correspond to the chain IDs that Starknet currently supports:

+
+
+
    +
  • +

    SN_MAIN for Starknet’s main network.

    +
  • +
  • +

    SN_SEPOLIA for Starknet’s public testnet on Sepolia.

    +
  • +
+
+
+ + + + + +
+ + +
+

Sepolia testnet replaces Goerli testnet.

+
+
+

Goerli testnet support is now removed.

+
+
+

For more information, including bridge support for Sepolia, see Starknet Goerli Deprecation in the Starknet Dev News newsletter.

+
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/nodes/index.html b/pr-1359/architecture-and-concepts/nodes/index.html new file mode 100644 index 0000000000..d77704d444 --- /dev/null +++ b/pr-1359/architecture-and-concepts/nodes/index.html @@ -0,0 +1,1179 @@ + + + + + + Nodes :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Nodes

+
+
+
+ + + + + +
+ + +
+

This topic previously appeared in the Starknet Book.

+
+
+
+
+

This topic explores the role and functionality of nodes in the Starknet ecosystem, their interactions with sequencers, and their overall importance.

+
+
+
+
+

Overview of nodes in the Starknet ecosystem

+
+
+

A node in the Starknet ecosystem is a computer equipped with Starknet software, contributing significantly to the network’s operation. Nodes are vital for the Starknet ecosystem’s functionality, security, and overall health. Without nodes, the Starknet network would not be able to function effectively.

+
+
+

Nodes in Starknet are categorized into two types:

+
+
+
    +
  • +

    Full nodes: Store the entire Starknet state and validate all transactions, crucial for the network’s integrity.

    +
  • +
  • +

    Light nodes: Do not store the entire Starknet state but rely on full nodes for information. Light nodes are faster and more efficient but offer less security than full nodes.

    +
  • +
+
+
+

Core functions of nodes

+
+

Nodes are fundamental to the Starknet network, performing a variety of critical functions:

+
+
+
    +
  • +

    Transaction validation: Nodes ensure transactions comply with Starknet’s rules, helping prevent fraud and malicious activities.

    +
  • +
  • +

    Block Creation and Propagation: Nodes create and circulate blocks to maintain a consistent blockchain view across the network.

    +
  • +
  • +

    State maintenance: Nodes track the Starknet network’s current state, including user balances and smart contract code, essential for transaction processing and smart contract execution.

    +
  • +
  • +

    API endpoint provision: Nodes provide API endpoints, aiding developers in creating applications, wallets, and tools for network interaction.

    +
  • +
  • +

    Transaction relay: Nodes relay user transactions to other nodes, improving network performance and reducing congestion.

    +
  • +
+
+
+
+
+
+

Interplay of nodes, sequencers, clients, and the mempool in Starknet

+
+
+

Nodes and sequencers

+
+

Nodes and sequencers are interdependent:

+
+
+
    +
  • +

    Nodes and block production: Nodes depend on sequencers to create blocks and update the network state. Sequencers integrate the transactions validated by nodes into blocks, maintaining a consistent and current Starknet state.

    +
  • +
  • +

    Sequencers and transaction validation: Sequencers rely on nodes for transaction validation and network consensus. Prior to executing transactions, sequencers work with nodes to confirm transaction legitimacy, deterring fraudulent activities. Nodes also contribute to the consensus mechanism, ensuring uniformity in the blockchain state.

    +
  • +
+
+
+
+

Nodes and clients

+
+

The relationship between nodes and clients in the Starknet ecosystem is characterized by a client-server model:

+
+
+
    +
  • +

    Client requests and node responses: Clients send requests, like transaction submissions or state queries. Nodes process these requests, validating transactions, updating the network state, and providing clients with the requested data.

    +
  • +
  • +

    Client experience: Clients receive node responses, updating their local view with the latest network information. This loop enables user interaction with Starknet DApps, with nodes maintaining network integrity, while clients provide a user-friendly interface.

    +
  • +
+
+
+
+

Nodes and the mempool

+
+

The mempool acts as a holding area for unprocessed transactions:

+
+
+
    +
  • +

    Transaction validation and mempool storage: Upon receiving a transaction, a node validates it. Valid transactions are added to the mempool and broadcast to other network nodes.

    +
  • +
  • +

    Transaction selection and block inclusion: Nodes select transactions from the mempool for processing, incorporating them into blocks that are added to the blockchain.

    +
  • +
+
+
+
+
+
+

Node implementations in Starknet

+
+
+

Each Starknet node implementation has its own strengths:

+
+
+
    +
  • +

    Pathfinder, by Equilibrium: Pathfinder is a full node written in Rust. Pathfinder excels in high performance, scalability, and aligns with the Starknet Cairo specification.

    +
  • +
  • +

    Juno, by Nethermind: Juno, is a full node written in Golang. Juno is known for user-friendliness, ease of deployment, and compatibility with Ethereum tools.

    +
  • +
  • +

    Papyrus, by StarkWare: Papyrus is also a full node written in Rust. Papyrus focuses on security and robustness. It’s integral to the upcoming Starknet Sequencer, expected to boost network throughput.

    +
  • +
+
+
+

These implementations are continuously being improved, with new features and enhancements. The choice of implementation depends on user or developer preferences and requirements.

+
+
+

Key characteristics of each node implementation are summarized below:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Node ImplementationLanguageStrengths

Pathfinder

Rust

High performance, scalability, Cairo specification adherence

Papyrus

Rust

Security, robustness, Starknet Sequencer foundation

Juno

Golang

User-friendliness, ease of deployment, Ethereum compatibility

+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/provers-overview/index.html b/pr-1359/architecture-and-concepts/provers-overview/index.html new file mode 100644 index 0000000000..acc530b402 --- /dev/null +++ b/pr-1359/architecture-and-concepts/provers-overview/index.html @@ -0,0 +1,1244 @@ + + + + + + Provers :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Provers

+
+
+
+ + + + + +
+ + +
+

This topic previously appeared in the Starknet Book.

+
+
+
+
+

The only Prover in use on Starknet as of this writing is SHARP.

+
+
+

SHARP is like public transportation for proofs on Starknet, aggregating multiple Cairo programs to save costs and boost efficiency. It uses recursive proofs, enabling parallelization and optimization, making it more affordable for all users. Critical services like the gateway, validator, and Prover work together with a stateless design for flexibility. SHARP’s adoption by StarkEx and Starknet highlights its significance and potential for future optimization.

+
+
+

This topic discusses SHARP, how it has evolved to incorporate recursive proofs, and its role in reducing costs and improving efficiency within the Starknet network.

+
+
+
+
+

What is SHARP?

+
+
+

SHARP, which stands for Shared Prover, is a mechanism that aggregates multiple Cairo programs from different users, each containing different logic. These Cairo programs are then executed together, generating a single proof common to all the programs. Rather than sending the proof directly to the Solidity Verifier in Ethereum, it is initially sent to a STARK Verifier program written in Cairo. The STARK Verifier generates a new proof to confirm that the initial proofs were verified, which can be sent back into SHARP and the STARK Verifier. Details for this recursive proof process appear below. Ultimately, the last proof in the series is sent to the Solidity Verifier on Ethereum. In other words, there are many proofs generated until we reach Ethereum and the Solidity Verifier.

+
+
+

The primary benefit of SHARP lies in its ability to decrease costs and enhance efficiency within the Starknet network. It achieves this by aggregating multiple Cairo jobs, which are individual sets of computation. This aggregation enables the protocol to leverage the exponential amortization offered by STARK proofs.

+
+
+

Exponential amortization means that as the computational load of the proofs increases, the cost of verifying those proofs rises at a slower logarithmic rate than the computation increase. As a result, the cost of each transaction within the aggregated set is significantly reduced, making the overall process more cost-effective and accessible for users.

+
+
+ + + + + +
+ + +
+

In the context of SHARP and Cairo context, a jobs refer to the individual Cairo programs or tasks submitted by different users. These jobs contain specific logic or computations that must be executed on the Starknet network.

+
+
+
+
+

Additionally, SHARP enables smaller users with limited computation to benefit from joining other jobs and share the cost of generating the proofs. This collaborative approach is similar to using public transportation instead of a private car, where the cost is distributed among all participants, making it more affordable for everyone.

+
+
+
+
+

Recursive proofs in SHARP

+
+
+

One of the most powerful features of SHARP is its use of recursive proofs. Rather than directly sending the generated proofs to the Solidity Verifier, they are first sent to a STARK Verifier program written in Cairo. This Verifier, which is also a Cairo program, receives the proof and creates a new Cairo job that is sent to the Prover. The Prover then generates a new proof to confirm that the initial proofs were verified. These new proofs can be sent back into SHARP and the STARK Verifier, restarting the process.

+
+
+

This process continues recursively, with each new proof being sent to the Cairo Verifier until a trigger is reached. At this point, the last proof in the series is sent to the Solidity Verifier on Ethereum. This approach enables greater parallelization of the computation and reduces the time and cost associated with generating and verifying proofs.

+
+ +++ + + + + + +

Generated Proofs

+

+

STARK Verifier program (in Cairo)

+

+

Cairo Job

+

+

Prover

+

+

New Proof Generated

+

+

Repeat Process

+

+

Trigger Reached (last proof)

+

+

Solidity Verifier

+
+

At first glance, recursive proofs may seem more complex and time-consuming. However, there are several benefits to this approach:

+
+
+
    +
  1. +

    Parallelization: Recursive proofs enable work parallelization, reducing user latency and improving SHARP efficiency.

    +
  2. +
  3. +

    Cheaper onchain costs: Parallelization enables SHARP to create larger proofs, which were previously dependent on the limited availability of large cloud machines. As a result, onchain costs are reduced.

    +
  4. +
  5. +

    Lower cloud costs: Since each job is shorter, the required memory for processing is reduced, resulting in lower cloud costs.

    +
  6. +
  7. +

    Optimization: Recursive proofs enable SHARP to optimize for various factors, including latency, onchain costs, and time to proof.

    +
  8. +
  9. +

    Cairo support: Recursive proofs only require support in Cairo, without the need to add support in the Solidity Verifier.

    +
  10. +
+
+
+ + + + + +
+ + +
+

Latency in Starknet encompasses the time taken for processing, confirming, and including transactions in a block. Latency is affected by factors like network congestion, transaction fees, and system efficiency. Minimizing latency ensures faster transaction processing and user feedback.

+
+
+

Time to proof, however, specifically pertains to the amount of time required to generate and verify cryptographic proofs for transactions or operations.

+
+
+
+
+
+
+

SHARP backend architecture and data pipeline

+
+
+

SHARP’s backend architecture consists of several services that work together to process Cairo jobs and generate proofs. These services include:

+
+
+
    +
  1. +

    Gateway: Cairo jobs enter SHARP through the gateway.

    +
  2. +
  3. +

    Job Creator: This service prevents job duplication and ensures that the system operates consistently, regardless of multiple identical requests.

    +
  4. +
  5. +

    Validator: The validator service runs validation checks on each job, ensuring they meet the requirements and can fit within the Prover machines. Invalid jobs are tagged as such and do not proceed to the Prover.

    +
  6. +
  7. +

    Scheduler: The scheduler service creates trains that aggregate jobs and send them to the Prover. Recursive jobs are paired and sent to the Prover together.

    +
  8. +
  9. +

    Cairo Runner: This service runs Cairo for the Prover’s needs. The Cairo Runner service runs Cairo programs, executing the necessary computations and generating the execution trace as an intermediate result. The Prover then uses this execution trace.

    +
  10. +
  11. +

    Prover: The Prover computes the proofs for each train.

    +
  12. +
  13. +

    Dispatcher: The Dispatcher serves two functions in the SHARP system.

    +
    +
      +
    • +

      In the case of a recursive proof, the Dispatcher runs the Cairo Verifier program on the proof it has received from the Prover, resulting in a new Cairo job that goes back to the Validator.

      +
    • +
    • +

      In the case of a proof that is to be published onchain, the Dispatcher creates packages from the proof, which can then be sent to the Blockchain Writer.

      +
    • +
    +
    +
  14. +
  15. +

    Blockchain Writer: Once the packages have been created by the Dispatcher, they are sent to the Blockchain Writer. The Blockchain Writer is responsible for sending the packages to the appropriate blockchain, such as Ethereum, for verification. This step in the SHARP system ensures that the proofs are properly verified and that the transactions are securely recorded on the blockchain.

    +
  16. +
  17. +

    Catcher: The Catcher monitors onchain transactions to ensure that they have been accepted. While the Catcher is relevant for internal monitoring purposes, be aware that if a transaction fails, the fact won’t be registered onchain in the Fact Registry. As a result, the soundness of the system is still preserved even without the Catcher.

    +
  18. +
+
+
+

SHARP is designed to be stateless. That is, each Cairo job is executed in its own context and has no dependency on other jobs, enabling greater flexibility in processing jobs.

+
+
+
+
+

Current SHARP users

+
+
+

Currently, the primary users of SHARP include:

+
+
+
    +
  • +

    StarkEx

    +
  • +
  • +

    Starknet

    +
  • +
+
+
+
+
+

Challenges and optimization

+
+
+

Optimizing the Prover involves the numerous challenges and potential projects on which the Starkware team and the community are currently working, including:

+
+
+
    +
  • +

    Exploring more efficient hash functions for Cairo, the Prover, and Solidity.

    +
  • +
  • +

    Investigating smaller fields for recursive proof steps could lead to more efficient computations.

    +
  • +
  • +

    Adjusting various parameters of the STARK protocol, such as FRI parameters and block factors.

    +
  • +
  • +

    Optimizing the Cairo code to make it faster, resulting in a faster recursive Prover.

    +
  • +
  • +

    Developing dynamic layouts, which should enable Cairo programs to scale resources as needed.

    +
  • +
  • +

    Improving scheduling algorithm. This optimization path is external to the Prover.

    +
  • +
+
+
+

Dynamic layouts enable SHARP to determine and scale the required resources for a specific job and adjust the layout accordingly, instead of relying on predefined layouts with fixed resources. Scaling resources can lead to more efficient computation and better resource utilization. This approach can provide tailored solutions for each job, improving overall efficiency.

+
+
+
+
+

Conclusion

+
+
+

In conclusion, SHARP is a critical component of Starknet’s architecture, providing a more efficient and cost-effective solution for processing Cairo programs and verifying their proofs. By leveraging the power of STARK technology and incorporating recursive proofs, SHARP plays a vital role in improving the overall performance and scalability of the Starknet network. The stateless nature of SHARP and the reliance on the cryptographic soundness of the STARK proving system make it an innovative and valuable addition to the blockchain ecosystem.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/cairo-and-sierra/index.html b/pr-1359/architecture-and-concepts/smart-contracts/cairo-and-sierra/index.html new file mode 100644 index 0000000000..5a130c91a9 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/cairo-and-sierra/index.html @@ -0,0 +1,1154 @@ + + + + + + Cairo and Sierra :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Cairo and Sierra

+
+
+
+

Before Starknet Alpha v0.11.0 a developer would write contracts in Cairo 0 and compile them locally to Cairo assembly (or Casm for short). +Next, the developer would submit the compilation output, the contract class, to the Starknet sequencer via a DECLARE transaction.

+
+
+

Starting with Cairo 1.0, the contract class resulting from compiling Cairo 1.0 does not include Casm. Instead of Casm, it includes instructions in an intermediate representation called Safe Intermediate Representation, Sierra for short. +This new contract class is then compiled by the sequencer, via the Sierra → Casm compiler, to generate the Cairo assembly associated with this class. The Casm code is then executed by the Starknet OS.

+
+
+
+
+

Why do we need Casm?

+
+
+

Starknet is a validity rollup, which means that the execution inside every block needs to be proven, and this is where STARKs come in handy. +However, STARK proofs can address statements that are formulated in the language of polynomial +constraints, and have no knowledge of smart contract execution. +To overcome this gap, we developed Cairo.

+
+
+

Cairo instructions, previously referred to as Casm, are translated to polynomial constraints that enforce the correct execution of a program according to the Cairo semantics defined in Cairo-a Turing-complete STARK-friendly CPU architecture.

+
+
+

Thanks to Cairo, we can formulate the statement "This Starknet block is valid" in a way that we can prove. +Be aware that we can only prove things about Casm. That is, regardless of what the user sends to the Starknet sequencer, what’s proven is the correct Casm execution.

+
+
+

This means that we need a way to translate Sierra into Casm, and this is achieved with the Sierra → Casm compiler.

+
+
+
+
+

Why do we need Sierra?

+
+
+

To understand why we chose to add an additional layer between the code that the user writes (Cairo 1.0) and the code that is being proven (Casm), +we need to consider more components in the system, and the limitations of Cairo.

+
+
+

Reverted transactions, unsatisfiable AIRs, and DoS attacks

+
+

A crucial property of every decentralized L2 is that the sequencers are guaranteed to be compensated for the work they do. +The notion of reverted transactions is a good example: even if the user’s transaction failed mid execution, the sequencer should be able to include it in a block and charge execution fees up to the point of failure.

+
+
+

If the sequencer cannot charge for such transactions, then sending transactions that will eventually fail (after a lot of computation steps) is an obvious DoS attack on the sequencer. +The sequencer cannot look at a transaction and conclude that it would fail without actually doing the work (this is equivalent to solving the halting problem).

+
+
+

The obvious solution to the above predicament is to include such transactions in the block, similar to Ethereum. However, this may not be as simple to do in a validity rollup. +With Cairo 0, there is no separating layer between user code and what is being proven.

+
+
+

This means that users can write code which is unprovable in some cases. In fact, such code is very easy to write, e.g. assert 0=1 is a valid +Cairo instruction that cannot be proven, as it translates to polynomial constraints that are not satisfiable. Any Casm execution that contains this instruction cannot be proven. +Sierra is the layer between user code and the provable statement, that allows us to make sure all transactions are eventually provable.

+
+
+
+

Safe Casm

+
+

The method by which Sierra guarantees that user code is always provable is by compiling Sierra instructions to a subset of Casm, which we call "safe Casm". +The important property that we require from safe Casm is being provable for all inputs. A canonical example for safe Casm is using if/else instructions instead of assert, that is, making sure all failures are +graceful.

+
+
+

To better understand the considerations that go into designing the Sierra → Casm compiler, +consider the find_element function from the common library of Cairo 0:

+
+
+
+
func find_element{range_check_ptr}(array_ptr: felt*, elm_size, n_elms, key) -> (elm_ptr: felt*) {
+    alloc_locals;
+    local index;
+    %{
+        ...
+    %}
+    assert_nn_le(a=index, b=n_elms - 1);
+    tempvar elm_ptr = array_ptr + elm_size * index;
+    assert [elm_ptr] = key;
+    return (elm_ptr=elm_ptr);
+}
+
+
+
+ + + + + +
+ + +
+

Below we abuse the "Casm" notation by not distinguishing Cairo 0 from Casm and referring to the +above as Casm (while we actually refer to the compilation result of the above).

+
+
+
+
+

For brevity, we have omitted the hint in the above snippet, but it’s clear that this function can only execute correctly if the requested element exists in the array (otherwise it would fail for every possible hint - +there is nothing we can substitute index for, that makes the following lines run successfully).

+
+
+

Such Casm cannot be generated by the Sierra→Casm compiler. +Furthermore, simply replacing the assertion with an if/else statement doesn’t do, as this results in non-deterministic execution. That is, for the same input, different hint values can yield different results. +A malicious prover can use this freedom to harm the user - in this example, they are able to make it seem as if an element isn’t part of the array, even though it actually is.

+
+
+

The safe Casm for finding an element in an array behaves like the above snippet in the happy flow (element is there): an index is given in a hint, and we verify that the array at the hinted index contains the requested element. +However, in the unhappy flow (element isn’t there), we must go over the entire array to verify this.

+
+
+

This was not the case in Cairo 0, as we were fine with certain paths not being provable (in the above snippet, the unhappy flow in which the element isn’t in the array is never provable).

+
+
+ + + + + +
+ + +
+

Sierra’s gas metering adds further complications to the above example. Even looking through the array to verify that the element isn’t there may leave some flexibility to the prover.

+
+
+

If we take gas limitations into consideration, the user may have enough gas for the happy flow, but not for the unhappy one, making the execution stop mid-search, and allowing the prover to get away with lying about the element not being present.

+
+
+

The way we plan to handle this is by requiring the user to have enough gas for the unhappy flow before actually calling find_element.

+
+
+
+
+
+

Hints in Cairo 1.0

+
+

Smart contracts written with Cairo 1.0 cannot contain user defined hints. This is already true with Cairo 0 contracts (only whitelisted hints are accepted), but with Cairo 1.0 the hints in use are +determined by the Sierra → Casm compiler. Since this compilation is there to ensure that only +"safe" Casm is generated, there is no room for hints that are not generated by the compiler.

+
+
+

In the future, native Cairo 1.0 may contain hint syntax similar to Cairo 0, but it will not be available in Starknet smart contracts (L3s on top of Starknet may make use of such functionality). +Note that this is currently not part of Starknet’s roadmap.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/cairo-builtins/index.html b/pr-1359/architecture-and-concepts/smart-contracts/cairo-builtins/index.html new file mode 100644 index 0000000000..b9bf4538e7 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/cairo-builtins/index.html @@ -0,0 +1,1062 @@ + + + + + + Cairo builtins :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Cairo builtins

+
+

Builtins in Cairo are predefined optimized low-level execution units that the Cairo VM refers to in order to perform predefined computations that are expensive to perform in standard Cairo. Builtins enhance the functionality of the Cairo VM, enabling you to perform certain tasks, such as using the Poseidon hash, range-checks, or ECDSA signature verifications, more efficiently, using fewer trace cells.

+
+
+

In contrast to CairoZero, where you needed to consciously write code to take advantage of builtin optimizations, in Cairo, you simply write code without doing anything special, and when the Cairo VM executes the code, certain operations use builtins internally to optimize your program.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. List of Cairo builtins
Name of builtinDescription

Pedersen

Computes the Pedersen hash over two elements. Used internally in pedersen.cairo. For more information see Hash functions.

Poseidon

Computes the Hades permutation on three field elements. Used internally in poseidon.cairo. For more information, see Hash functions. The Cairo corelib functions use this builtin internally. The Cairo corelib functions are defined in info.cairo in the Cairo GitHub repository.

Range check

+

Checks whether a field element is in the range [0,2128-1].

+
+
+

Used when instantiating and comparing the various integer types.

+
+
+

All arithmetic comparisons use the range check builtin.

+

ECDSA

Verifies the validity of an ECDSA signature over the STARK curve.

+

This is used in CairoZero, but is not used in Cairo because it fails on invalid signatures. In Cairo ECDSA verification is performed with high-level code, applying the EC_OP builtin twice.

Keccak

Computes the keccak-f[1600] permutation. For more information see Keccak page on the Keccak Team site.

+

For high level Cairo keccak functions that use this builtin internally, see keccak.cairo in the Cairo corelib.

Bitwise

Computes the bitwise operations OR, AND, and XOR of two felts.

+

Used internally when performing bitwise operations using the `

, `& and ^ operators.

EC_OP

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/class-hash/index.html b/pr-1359/architecture-and-concepts/smart-contracts/class-hash/index.html new file mode 100644 index 0000000000..8e3754b959 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/class-hash/index.html @@ -0,0 +1,1172 @@ + + + + + + Class hash :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Class hash

+
+
+
+

The class hash is a hash chain of the components that define the class.

+
+
+

Classes written in Cairo are compiled into Sierra code. The Sierra code generated is an intermediate representation of the class. This new contract class is then compiled by the sequencer, via the Sierra → Casm compiler, to generate the Cairo +assembly associated with this class. The resulting Casm code is then executed by the Starknet OS.

+
+
+

For information on how the compiler converts code from Cairo to Sierra, see Cairo and Sierra.

+
+
+
+
+

Components of a Cairo class definition

+
+
+

The components that define a class are:

+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
+contract_class_version + +

The version of the contract class object. Currently, the Starknet OS +supports version 0.1.0

+
+Array of external functions entry points + +

An entry point is a pair (selector, function_idx), where function_idx is the index of the function inside the Sierra program.

+
+ + + + + +
+ + +
+

The selector is an identifier through which the function is callable in transactions or in other classes. The selector is the starknet_keccak hash of the function name, encoded in ASCII.

+
+
+
+
+Array of L1 handlers entry points + +

-

+
+Array of constructors entry points + +

Currently, the compiler allows only one constructor.

+
+ABI + +

A string representing the ABI of the class. The ABI hash (which affects the class hash) is given by:

+
+
+
starknet_keccak(bytes(ABI, "UTF-8"))
+
+
+
+ + + + + +
+ + +
+

This string is supplied by the user declaring the class (and is signed on as part of the DECLARE transaction), and is not enforced to be the true ABI of the associated class. +Without seeing the underlying source code (i.e. the Cairo code generating the class’s Sierra), this ABI should be treated as the "intended" ABI by the declaring party, which may be incorrect (intentionally or otherwise). +The "honest" string would be the json serialization of the contract’s ABI as produced by the Cairo compiler.

+
+
+
+
+Sierra program + +

An array of field elements representing the Sierra instructions.

+
+
+
+
+
+

Computing the Cairo class hash

+
+
+

The hash of the class is the chain hash of its components, computed as follows:

+
+
+
+
class_hash = ℎ(
+    contract_class_version,
+    external_entry_points,
+    l1_handler_entry_points,
+    constructor_entry_points,
+    abi_hash,
+    sierra_program_hash
+)
+
+
+
+

Where

+
+
+
    +
  • +

    \(h\) is the Poseidon hash function

    +
  • +
  • +

    The hash of an entry point array \((selector,index)_{i=1}^n\) is given by \(h(\text{selector}_1,\text{index}_1,...,\text{selector}_n,\text{index}_n)\)

    +
  • +
  • +

    The sierra_program_hash is the Poseidon hash of the bytecode array

    +
  • +
+
+
+ + + + + +
+ + +
+

The Starknet OS currently supports contract class version 0.1.0, which is represented in the above hash computation as the ASCII encoding of the string CONTRACT_CLASS_V0.1.0 (hashing the version in this manner gives us domain separation between +the hashes of classes and other objects).

+
+
+
+
+

For more details, see the Cairo implementation.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/compiled-class-hash/index.html b/pr-1359/architecture-and-concepts/smart-contracts/compiled-class-hash/index.html new file mode 100644 index 0000000000..eed3f37a0b --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/compiled-class-hash/index.html @@ -0,0 +1,1070 @@ + + + + + + Compiled class hash :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Compiled class hash

+
+
+
+

The compiled class hash is a cryptographic hash that results from the compilation process of a Cairo class

+
+
+

from its intermediate representation (Sierra) to Cairo assembly (Casm). This process is managed by the Sierra→Casm compiler.

+
+
+

The compiled class hash is crucial for ensuring the uniqueness and integrity of compiled classes within Starknet. Whether you are a developer deploying contracts or a party interested in the inner workings of Starknet’s state commitment, understanding the compiled class hash is essential.

+
+
+

For developers, the hash is an important part of the contract declaration process, ensuring that each compiled class is uniquely identifiable and verifiable. For those involved in maintaining the network, it contributes to the efficiency and performance of Starknet by optimizing the state commitment process.

+
+
+

The state commitment uses the Sierra code that results when compiling Cairo classes. Sierra acts as an intermediate representation between Cairo and Casm. Provers, however, operate solely with Casm.

+
+
+

In order to avoid recompiling, from Sierra to Casm, each block in which the class is deployed, the state commitment gets the information it needs about the corresponding Casm from the the information contained in the compiled class hash.

+
+
+

When declaring a contract, the party administering the contract endorses the compiled class hash, procured using an SDK, as an integral component of the DECLARE transaction. Following the inclusion of the transaction in a block, the compiled class hash integrates into the state commitment.

+
+
+
+
+

Purpose and Significance

+
+
+
    +
  • +

    Uniqueness: The compiled class hash ensures the uniqueness of each compiled class. It is essentially a fingerprint for the compiled output, allowing the network to verify the integrity and uniqueness of the class.

    +
  • +
  • +

    State Commitment: In Starknet, state commitment includes various components, including the Cairo classes. These classes are initially defined using Sierra. However, for the prover to function efficiently, it requires Casm.

    +
  • +
  • +

    Efficiency: By including the compiled class hash in the state commitment, Starknet avoids the need to recompile from Sierra to Casm in every block where the class is used. This optimization significantly enhances the network’s efficiency and performance.

    +
  • +
+
+
+
+
+

Usage

+
+
+

When a new contract is declared on Starknet, the compiled class hash plays a pivotal role. Here’s how:

+
+
+
    +
  • +

    Declaration Process: The party declaring the contract computes the compiled class hash using an SDK provided by Starknet.

    +
  • +
  • +

    DECLARE Transaction: This hash is then included as part of the DECLARE transaction is a specific type of transaction in Starknet used to register new contracts.

    +
  • +
  • +

    Inclusion in State Commitment: Once the DECLARE transaction is included in a block, the compiled class hash becomes part of the state commitment. This inclusion ensures that the network recognizes and stores the unique compiled output of the contract.

    +
  • +
+
+
+

Prospectively, as Sierra-to-Casm compilation integrates into the Starknet OS, the value might undergo updates via proof of the Sierra-to-Casm compiler execution. Such verification demonstrates that compiling the same class with an updated compiler version yields a fresh compiled class hash. +The compiled class hash is a basic element in Starknet’s architecture, enabling efficient state commitment and ensuring the integrity and uniqueness of compiled classes.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/contract-abi/index.html b/pr-1359/architecture-and-concepts/smart-contracts/contract-abi/index.html new file mode 100644 index 0000000000..a03ec41a0d --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/contract-abi/index.html @@ -0,0 +1,1931 @@ + + + + + + Contract ABI :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Contract ABI

+
+

Introduction

+
+
+

A contract ABI is a representation of a Starknet contract interface. It is formatted as JSON and describes the functions, structs and events which are defined in the contract.

+
+
+

You can get the contract’s ABI by using starknet-compile:

+
+
+
+
cargo run --bin starknet-compile -- --single-file </path/to/input.cairo> </path/to/output.json>
+
+
+
+
+
+

An example contract ABI

+
+
+

The following is an example contract ABI:

+
+
+
+
+
    +
  • +

    Cairo v2

    +
  • +
  • +

    Cairo v1

    +
  • +
+
+
+
+
+
[
+  {
+    "type": "impl",
+    "name": "CounterContract",
+    "interface_name": "new_syntax_test_contract::new_syntax_test_contract::ICounterContract"
+  },
+  {
+    "type": "interface",
+    "name": "new_syntax_test_contract::new_syntax_test_contract::ICounterContract",
+    "items": [
+      {
+        "type": "function",
+        "name": "increase_counter",
+        "inputs": [
+          {
+            "name": "amount",
+            "type": "core::integer::u128"
+          }
+        ],
+        "outputs": [],
+        "state_mutability": "external"
+      },
+      {
+        "type": "function",
+        "name": "decrease_counter",
+        "inputs": [
+          {
+            "name": "amount",
+            "type": "core::integer::u128"
+          }
+        ],
+        "outputs": [],
+        "state_mutability": "external"
+      },
+      {
+        "type": "function",
+        "name": "get_counter",
+        "inputs": [],
+        "outputs": [
+          {
+            "type": "core::integer::u128"
+          }
+        ],
+        "state_mutability": "view"
+      }
+    ]
+  },
+  {
+    "type": "constructor",
+    "name": "constructor",
+    "inputs": [
+      {
+        "name": "initial_counter",
+        "type": "core::integer::u128"
+      },
+      {
+        "name": "other_contract_addr",
+        "type": "core::starknet::contract_address::ContractAddress"
+      }
+    ]
+  },
+  {
+    "type": "event",
+    "name": "new_syntax_test_contract::new_syntax_test_contract::counter_contract::CounterIncreased",
+    "kind": "struct",
+    "members": [
+      {
+        "name": "amount",
+        "type": "core::integer::u128",
+        "kind": "data"
+      }
+    ]
+  },
+  {
+    "type": "event",
+    "name": "new_syntax_test_contract::new_syntax_test_contract::counter_contract::CounterDecreased",
+    "kind": "struct",
+    "members": [
+      {
+        "name": "amount",
+        "type": "core::integer::u128",
+        "kind": "data"
+      }
+    ]
+  },
+  {
+    "type": "event",
+    "name": "new_syntax_test_contract::new_syntax_test_contract::counter_contract::Event",
+    "kind": "enum",
+    "variants": [
+      {
+        "name": "CounterIncreased",
+        "type": "new_syntax_test_contract::new_syntax_test_contract::counter_contract::CounterIncreased",
+        "kind": "nested"
+      },
+      {
+        "name": "CounterDecreased",
+        "type": "new_syntax_test_contract::new_syntax_test_contract::counter_contract::CounterDecreased",
+        "kind": "nested"
+      }
+    ]
+  }
+]
+
+
+
+
+
+
+
[
+  {
+    "type": "function",
+    "name": "constructor",
+    "inputs": [
+      {
+        "name": "name_",
+        "type": "core::felt252"
+      },
+      {
+        "name": "symbol_",
+        "type": "core::felt252"
+      },
+      {
+        "name": "decimals_",
+        "type": "core::integer::u8"
+      },
+      {
+        "name": "initial_supply",
+        "type": "core::integer::u256"
+      },
+      {
+        "name": "recipient",
+        "type": "core::starknet::contract_address::ContractAddress"
+      }
+    ],
+    "outputs": [],
+    "state_mutability": "external"
+  },
+  {
+    "type": "function",
+    "name": "get_name",
+    "inputs": [],
+    "outputs": [
+      {
+        "type": "core::felt252"
+      }
+    ],
+    "state_mutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "get_symbol",
+    "inputs": [],
+    "outputs": [
+      {
+        "type": "core::felt252"
+      }
+    ],
+    "state_mutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "get_decimals",
+    "inputs": [],
+    "outputs": [
+      {
+        "type": "core::integer::u8"
+      }
+    ],
+    "state_mutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "get_total_supply",
+    "inputs": [],
+    "outputs": [
+      {
+        "type": "core::integer::u256"
+      }
+    ],
+    "state_mutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "balance_of",
+    "inputs": [
+      {
+        "name": "account",
+        "type": "core::starknet::contract_address::ContractAddress"
+      }
+    ],
+    "outputs": [
+      {
+        "type": "core::integer::u256"
+      }
+    ],
+    "state_mutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "allowance",
+    "inputs": [
+      {
+        "name": "owner",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "spender",
+        "type": "core::starknet::contract_address::ContractAddress"
+      }
+    ],
+    "outputs": [
+      {
+        "type": "core::integer::u256"
+      }
+    ],
+    "state_mutability": "view"
+  },
+  {
+    "type": "function",
+    "name": "transfer",
+    "inputs": [
+      {
+        "name": "recipient",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "amount",
+        "type": "core::integer::u256"
+      }
+    ],
+    "outputs": [],
+    "state_mutability": "external"
+  },
+  {
+    "type": "function",
+    "name": "transfer_from",
+    "inputs": [
+      {
+        "name": "sender",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "recipient",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "amount",
+        "type": "core::integer::u256"
+      }
+    ],
+    "outputs": [],
+    "state_mutability": "external"
+  },
+  {
+    "type": "function",
+    "name": "approve",
+    "inputs": [
+      {
+        "name": "spender",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "amount",
+        "type": "core::integer::u256"
+      }
+    ],
+    "outputs": [],
+    "state_mutability": "external"
+  },
+  {
+    "type": "function",
+    "name": "increase_allowance",
+    "inputs": [
+      {
+        "name": "spender",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "added_value",
+        "type": "core::integer::u256"
+      }
+    ],
+    "outputs": [],
+    "state_mutability": "external"
+  },
+  {
+    "type": "function",
+    "name": "decrease_allowance",
+    "inputs": [
+      {
+        "name": "spender",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "subtracted_value",
+        "type": "core::integer::u256"
+      }
+    ],
+    "outputs": [],
+    "state_mutability": "external"
+  },
+  {
+    "type": "event",
+    "name": "Transfer",
+    "inputs": [
+      {
+        "name": "from",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "to",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "value",
+        "type": "core::integer::u256"
+      }
+    ]
+  },
+  {
+    "type": "event",
+    "name": "Approval",
+    "inputs": [
+      {
+        "name": "owner",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "spender",
+        "type": "core::starknet::contract_address::ContractAddress"
+      },
+      {
+        "name": "value",
+        "type": "core::integer::u256"
+      }
+    ]
+  }
+]
+
+
+
+
+
+
+
+
+

Cairo v2.3.0 changes

+
+
+

Nested events

+
+

With Cairo v2.3.0 the limitations on the Event enum have been relaxed, allowing more flexibility on the events that can be emitted from a given contract.

+
+
+

For example:

+
+
+
    +
  • +

    It is no longer enforced that the Event enum variants are structs of the same name as the variant, they can now be a struct or an enum of any name.

    +
  • +
  • +

    Enum variants inside event ABI entries (entries in the abi with "type": "event" and "kind": "enum") now have two possible kinds. Before v2.3.0 it was always "kind": "nested", now "kind: "flat" is also possible.

    +
  • +
  • +

    v2.3.0 is backward compatible with version ≥ 2.0.0 ABI, so the same structure of the ABI is kept, while allowing flexibility.

    +
  • +
+
+
+ + + + + +
+ + +
+

Between versions v2.0.0 and v2.2.0, to identify all potential serializations of events (what raw keys, data arrays can be emitted given the ABI), +it was sufficient to iterate over the abi entries with "type": "event" and "kind": "struct", skipping the encapsulating Event type which has "kind": "enum".

+
+
+

With v2.3.0 onwards, doing so may result in losing information.

+
+
+
+
+

To illustrate this, consider the following example:

+
+
+
+
//high-level code defining the events
+
+#[event]
+#[derive(Drop, starknet::Event)]
+enum Event {
+    ComponentEvent: test_component::Event,
+    TestCounterIncreased: CounterIncreased,
+    TestCounterDecreased: CounterDecreased,
+    TestEnum: MyEnum
+}
+
+#[derive(Drop, starknet::Event)]
+struct CounterIncreased {
+    amount: u128
+}
+
+#[derive(Drop, starknet::Event)]
+struct CounterDecreased {
+    amount: u128
+}
+
+#[derive(Copy, Drop, starknet::Event)]
+enum MyEnum {
+  Var1: MyStruct
+}
+
+#[derive(Copy, Drop, Serde, starknet::Event)]
+struct MyStruct {
+	member: u128
+}
+
+
+
+
+

Variant names different from types

+
+

In v2.3.0 enum variant types can now have any name.

+
+
+

As an example the TestCounterIncreased variant and the CounterIncreased type, as they appear in the ABI:

+
+
+
+
{
+  "type": "event",
+  "name": "<namespace>::Event",
+  "kind": "enum",
+  "variants": [
+      {
+          "name": "ComponentEvent",
+          "type": "<namespace>::test_component::Event",
+          "kind": "nested"
+      },
+      {
+          "name": "TestCounterIncreased",
+          "type": "<namespace>::CounterIncreased",
+          "kind": "nested"
+      },
+      {
+          "name": "TestCounterDecreased",
+          "type": "<namespace>::CounterDecreased",
+          "kind": "nested"
+      },
+      {
+          "name": "TestEnum",
+          "type": "<namespace>::MyEnum",
+          "kind": "nested"
+      }
+  ]
+},
+{
+	"type": "event",
+	"name": "<namespace>::CounterIncreased",
+	"kind": "struct",
+	"members": [
+		{
+			"name": "amount",
+			"type": "core::integer::u128",
+			"kind": "data"
+		}
+	]
+}
+
+
+
+

When the contract emits the TestCounterIncreased event, for example by writing self.emit(CounterIncreased { amount })), the event that is emitted has the following keys and data:

+
+
+
    +
  • +

    One key based on the variant name: sn_keccak(TestCounterIncreased). This information only appears in the <namespace>::Event type entry in the ABI, +as the name TestCounterIncreased does not appear in the "kind": "struct" ABI entry. This did not matter in previous versions when the variant name and type had to be equal.

    +
  • +
  • +

    One data element based on the struct CounterIncreased which is associated with TestCounterIncreased via one of the Event type variants.

    +
  • +
+
+
+
+

Enum variants inside Event

+
+

The introduction of components allows variants of Event to be enums. +In the following example, we have two such variants: TestEnum (unrelated to components) and ComponentEvent.

+
+
+

The serialization to keys and data is the same in both cases, so this example will focus on TestEnum:

+
+
+

This example shows the TestEnum variant entry inside Event:

+
+
+
+
{
+"name": "TestEnum",
+"type": "<namespace>::MyEnum",
+"kind": "nested"
+}
+
+
+
+

This example shows the MyEnum event entry:

+
+
+
+
{
+	"type": "event",
+	"name": "<namespace>::MyEnum",
+	"kind": "enum",
+	"variants": [
+		{
+			"name": "Var1",
+			"type": "<namespace>::MyStruct",
+			"kind": "nested"
+		}
+	]
+}
+
+
+
+

This example shows the MyStruct event entry:

+
+
+
+
{
+	"type": "event",
+	"name": "<namespace>::MyStruct",
+	"kind": "struct",
+	"members": [
+		{
+			"name": "member",
+			"type": "core::integer::u128",
+			"kind": "data"
+		}
+	]
+}
+
+
+
+ + + + + +
+ + +
+

If a TestEnum event is being emitted via self.emit(Event::TestEnum(MyEnum::Var1(MyStruct {member: 5}))), you can implement the trait Into<MyStruct, Event> to avoid having to write it out in full.

+
+
+
+
+

When the event is emitted, the serialization to keys and data happens as follows:

+
+
+
    +
  • +

    Since the TestEnum variant has kind nested, add the first key: sn_keccak(TestEnum), and the rest of the serialization to keys and data is done recursively via the starknet::event trait implementation of MyEnum.

    +
  • +
  • +

    Next, you can handle a "kind": "nested" variant (previously it was TestEnum, now it’s Var1), which means you can add another key depending on the sub-variant: sn_keccak(Var1), and proceed to serialize according to the starknet::event +implementation of MyStruct.

    +
  • +
  • +

    Finally, proceed to serialize MyStruct, which gives us a single data member.

    +
  • +
+
+
+

This results in keys = [sn_keccak(TestEnum), sn_keccak(Var1)] and data=[5]

+
+
+ + + + + +
+ + +
+

Allowing variants that are themselves enums (TestEnum is an enum variant here) means further nesting is possible.

+
+
+
+
+

For example, if the high level code is changed to:

+
+
+
+
#[event]
+#[derive(Drop, starknet::Event)]
+enum Event {
+    ComponentEvent: test_component::Event,
+    TestCounterIncreased: CounterIncreased,
+    TestCounterDecreased: CounterDecreased,
+    TestEnum: MyEnum
+}
+
+#[derive(Copy, Drop, starknet::Event)]
+enum MyEnum {
+    Var1: AnotherEnum
+}
+
+#[derive(Copy, Drop, Serde, starknet::Event)]
+enum AnotherEnum {
+    Var2: MyStruct
+}
+
+#[derive(Copy, Drop, Serde, starknet::Event)]
+struct MyStruct {
+    member: u128,
+}
+
+
+
+

then self.emit(Event::TestEnum(MyEnum::Var1(AnotherEnum::Var2(MyStruct { member: 5 })))) +(as before, Into implementations can shorten this) will emit an event with keys = [sn_keccak(TestEnum), sn_keccak(Var1), sn_keccak(Var2)] and data=[5].

+
+
+

This will look as follows in the ABI (only the relevant parts are shown):

+
+
+
+
{
+  "type": "event",
+  "name": "<namespace>::Event",
+  "kind": "enum",
+  "variants": [
+    // ignoring all the other variants for brevity
+    {
+      "name": "TestEnum",
+      "type": "<namespace>::MyEnum",
+      "kind": "nested"
+    }
+  ]
+},
+{
+  "type": "event",
+  "name": "<namespace>::MyEnum",
+  "kind": "enum",
+  "variants": [
+    {
+      "name": "Var1",
+      "type": "<namespace>::AnotherEnum",
+      "kind": "nested"
+    }
+  ]
+},
+{
+  "type": "event",
+  "name": "<namespace>::AnotherEnum",
+  "kind": "enum",
+  "variants": [
+    {
+      "name": "Var2",
+      "type": "<namespace>::MyStruct",
+      "kind": "nested"
+    }
+  ]
+}
+
+
+
+

As TestEnum, Var1 and Var2 are of kind nested, a selector should be added to the list of keys, before continuing to recursively serialize.

+
+
+
+

Flattened enum variants

+
+

You might not want to nest enums when serializing the event. For example, if you write an ERC-20 as a component, not a contract, that is pluggable anywhere, you might not want the contract to modify the keys of known events such as Transfer.

+
+
+

To avoid nesting, write the following high level code:

+
+
+
+
#[event]
+#[derive(Drop, starknet::Event)]
+enum Event {
+	ComponentEvent: test_component::Event,
+	TestCounterIncreased: CounterIncreased,
+	TestCounterDecreased: CounterDecreased,
+	#[flat]
+	TestEnum: MyEnum
+}
+
+
+
+

By writing the above, the TestEnum variant entry in the ABI will change to:

+
+
+
+
{
+"name": "TestEnum",
+"type": "<namespace>::MyEnum",
+"kind": "flat"
+}
+
+
+
+

This means that self.emit(Event::TestEnum(MyEnum::Var1(MyStruct {member: 5}))) will emit an event with keys=[sn_keccak(Var1)] and data=[5].

+
+
+
+
+
+

Cairo v2.0.0 changes

+
+
+

With the transition to v2.0.0, the contract ABI underwent some changes.

+
+
+

Consider the following high level code that generates the ABI in the following example:

+
+
+
+
#[starknet::interface]
+trait IOtherContract<TContractState> {
+    fn decrease_allowed(self: @TContractState) -> bool;
+}
+
+#[starknet::interface]
+trait ICounterContract<TContractState> {
+    fn increase_counter(ref self: TContractState, amount: u128);
+    fn decrease_counter(ref self: TContractState, amount: u128);
+    fn get_counter(self: @TContractState) -> u128;
+}
+
+#[starknet::contract]
+mod counter_contract {
+    use starknet::ContractAddress;
+    use super::{
+        IOtherContractDispatcher, IOtherContractDispatcherTrait, IOtherContractLibraryDispatcher
+    };
+
+    #[storage]
+    struct Storage {
+        counter: u128,
+        other_contract: IOtherContractDispatcher
+    }
+
+    #[event]
+    #[derive(Drop, starknet::Event)]
+    enum Event {
+        CounterIncreased: CounterIncreased,
+        CounterDecreased: CounterDecreased
+    }
+
+    #[derive(Drop, starknet::Event)]
+    struct CounterIncreased {
+        amount: u128
+    }
+
+    #[derive(Drop, starknet::Event)]
+    struct CounterDecreased {
+        amount: u128
+    }
+
+    #[constructor]
+    fn constructor(
+        ref self: ContractState, initial_counter: u128, other_contract_addr: ContractAddress
+    ) {
+        self.counter.write(initial_counter);
+        self
+            .other_contract
+            .write(IOtherContractDispatcher { contract_address: other_contract_addr });
+    }
+
+    #[external(v0)]
+    impl CounterContract of super::ICounterContract<ContractState> {
+        fn get_counter(self: @ContractState) -> u128 {
+            self.counter.read()
+        }
+
+        fn increase_counter(ref self: ContractState, amount: u128) {
+            let current = self.counter.read();
+            self.counter.write(current + amount);
+            self.emit(CounterIncreased { amount });
+        }
+
+        fn decrease_counter(ref self: ContractState, amount: u128) {
+            let allowed = self.other_contract.read().decrease_allowed();
+            if allowed {
+                let current = self.counter.read();
+                self.counter.write(current - amount);
+                self.emit(CounterDecreased { amount });
+            }
+        }
+    }
+}
+
+
+
+

Interface and Impl ABI entries

+
+

Since the CounterContract impl is annotated with the #[external(v0)] attribute, you’ll find the following impl entry in the ABI:

+
+
+
+
{
+  "type": "impl",
+  "name": "CounterContract",
+  "interface_name": "new_syntax_test_contract::new_syntax_test_contract::ICounterContract"
+}
+----
+
+
+
+

This means that every function appearing in the ICounterContract interface +is a possible entry point of the contract.

+
+
+ + + + + +
+ + +
+

Standalone functions in the contract outside an external impl can also be annotated with #[external(v0)] (currently, this is the only way to add L1 handlers). In such cases, a corresponding function (or l1_handler) entry will be found in +the ABI in the same hierarchy as impls and interfaces.

+
+
+
+
+
+

Events

+
+

In Cairo v2, a dedicated type for the contract’s events was introduced. Currently, the contract event type must be an enum named Event, whose variants are structs of the same name as the variant. Types that can be emitted via self.emit(_) must implement the Event trait, which defines how this type should be serialized into two felt252 arrays, keys and data.

+
+
+

The Event enum variants appear in the ABI under "type" = "event" rather than regular structs.

+
+
+

For such entries, each member has an additional kind field that specifies how the serialization into keys and data takes place:

+
+
+
    +
  • +

    If the kind is key, then this member or variant are serialized into the event’s keys.

    +
  • +
  • +

    If the kind is data, then this member or variant are serialized into the event’s data.

    +
  • +
  • +

    If the kind is nested, then the member or variant are serialized according to the Event attribute, potentially adding to both keys and data.

    +
  • +
+
+
+ + + + + +
+ + +
+

This feature is not yet supported, so no high level code written in Cairo v2.0.0 can generate such an ABI.

+
+
+
+
+
+

Specification

+
+

You can find a JSON schema specification of the ABI in the starknet-specs repository.

+
+
+

For a UI-friendly version, you can use the OPEN-RPC playground.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/contract-address/index.html b/pr-1359/architecture-and-concepts/smart-contracts/contract-address/index.html new file mode 100644 index 0000000000..59cc7f0ed9 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/contract-address/index.html @@ -0,0 +1,1107 @@ + + + + + + Contract address :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Contract address

+
+

The contract address is a unique identifier of the contract on Starknet. It is a chain hash of the following information:

+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
+prefix + +

The ASCII encoding of the constant string STARKNET_CONTRACT_ADDRESS.

+
+deployer_address + +

One of the following:

+
+
    +
  • +

    When the contract is deployed via a DEPLOY_ACCOUNT transaction: 0

    +
  • +
  • +

    When the contract is deployed via a deploy system call from another contract, the value of the deploy_from_zero parameter determines this value.

    +
    +

    For information on the deploy_from_zero parameter, see the deploy system call

    +
    +
  • +
+
+
+salt + +

The salt passed by the contract calling the syscall, provided by the transaction sender.

+
+class_hash + +

See the class hash documentation.

+
+constructor_calldata_hash + +

Array hash of the inputs to the constructor.

+
+
+
+

The address is computed as follows:

+
+
+
+
contract_address = pedersen(
+    “STARKNET_CONTRACT_ADDRESS”,
+    deployer_address,
+    salt,
+    class_hash,
+    constructor_calldata_hash)
+
+
+
+ + + + + +
+ + +
+

A random salt ensures unique addresses for smart contract deployments, preventing conflicts when deploying identical contract classes.

+
+
+

It also thwarts replay attacks by influencing the transaction hash with a unique sender address.

+
+
+
+
+
Additional resources
+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/contract-classes/index.html b/pr-1359/architecture-and-concepts/smart-contracts/contract-classes/index.html new file mode 100644 index 0000000000..6e5e252432 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/contract-classes/index.html @@ -0,0 +1,1106 @@ + + + + + + Contract classes and instances :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Contract classes and instances

+
+
+
+

As in object-oriented programming, Starknet distinguishes between a contract and its implementation by separating contracts into classes and instances.

+
+
+
+
+

Contract classes

+
+
+

A contract class is the definition of a contract. It includes Cairo byte code, hint information, entry point names, and everything that defines its semantics.

+
+
+

Each class is uniquely identified by its class hash, comparable to a class name in traditional object-oriented programming languages.

+
+
+
+
+

Contract instances

+
+
+

A contract instance is a deployed contract that corresponds to a class. Only contract instances act as true contracts, in that they have their own storage and can be called by transactions or other contracts.

+
+
+

A contract class does not necessarily have a deployed instance in Starknet.

+
+
+ + + + + +
+ + +
+

A contract class does not necessarily require a deployed instance in Starknet.

+
+
+
+
+

A contract instance has a nonce, the value of which is the number of transactions originating from this address plus 1. For example, when you deploy an account with a DEPLOY_ACCOUNT transaction, the nonce of the account contract in the transaction is 0. After the DEPLOY_ACCOUNT transaction, until the account contract sends its next transaction, the nonce is 1.

+
+
+
+
+

Working with classes

+
+
+ ++++ + + + + + + + + + + + + +
+Adding new classes + +

To introduce new classes to Starknet’s state, use the DECLARE transaction.

+
+Deploying instances + +

To deploy a new instance of a previously declared class, use the deploy system call.

+
+Using class functionality + +

To use the functionality of a declared class without deploying an instance, use the library_call system call. Analogous to Ethereum’s delegatecall, it enables you to use code in an existing class without deploying a contract instance.

+
+
+
+
+
+

Additional resources

+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/contract-storage/index.html b/pr-1359/architecture-and-concepts/smart-contracts/contract-storage/index.html new file mode 100644 index 0000000000..826b397a31 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/contract-storage/index.html @@ -0,0 +1,1097 @@ + + + + + + Contract storage :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Contract storage

+
+

Storage layout

+
+
+

The contract’s storage is a persistent storage space where you can read, write, modify, and persist data. The storage is a map with \(2^{251}\) slots, where each slot is a felt which is initialized to 0.

+
+
+
+
+

Storage low level functions

+
+
+

The basic function for writing to storage writes, value to key is:

+
+
+
+
storage_write_syscall(address_domain, address, value)
+
+
+
+

storage_read is a basic function that is used for getting the storage address, this function is created by the compiler when defining a storage variable, as explained below. This function returns the address of the storage variable. Below we discuss +how this +address is determined from the variable’s name and keys.

+
+
+

Both storage_read and storage_write are system calls that can be imported by adding the line:

+
+
+
+
use starknet::syscalls::storage_read_syscall;
+use starknet::syscalls::storage_write_syscall;
+
+
+
+
+
+

Storage variables

+
+
+

The most common way to interact with a contract’s storage is through storage variables.

+
+
+

The #[storage] attribute above the Storage struct declares that the contents of this struct are part of the contract storage. The storage variables stored inside this struct can consist of a single felt, or it can be a mapping from multiple arguments to a tuple of felts or structs.

+
+
+

To use this variable, the var.read(args), var.write(args, value) and var.address(args) functions are automatically created by the #[storage] attribute, for reading the storage value, writing the storage value and getting the storage address, respectively.

+
+
+

The Starknet contract compiler generates the Cairo code that maps the storage variable’s name and argument values to an address — so that it can be part of the generated proof.

+
+
+

The address of a storage variable is computed as follows:

+
+
+
    +
  • +

    If it is a single value, then the address is sn_keccak(variable_name), where variable_name is the ASCII encoding of the variable’s name.

    +
  • +
  • +

    If it is a (nested) mapping, then the address of the value at key k_1,...,k_n is +h(...h(h(sn_keccak(variable_name),k_1),k_2),...,k_n) where \(h\) is the +Pedersen hash and the final value is taken \(\bmod 2^{251}-256\)

    +
  • +
  • +

    If it is a mapping to complex values (e.g., tuples or structs), then this complex value lies in a continuous segment starting from the address calculated in the previous point. Note that 256 field elements is the current limitation on the maximal size of a complex storage value.

    +
  • +
  • +

    Note that when calling var.address(args) for a storage variable with complex values, the returned value is the address of the first element in the storage.

    +
  • +
+
+
+

We can summarize the above as follows:

+
+
+

storage variable address := pedersen(keccak(variable name), keys)

+
+
+

The following example defines storage variables with complex values.

+
+
+
+
#[storage]
+struct Storage {
+    name: felt252,
+    symbol: felt252,
+    decimals: u8,
+    total_supply: u256,
+    balances: LegacyMap::<ContractAddress, u256>,
+    allowances: LegacyMap::<(ContractAddress, ContractAddress), u256>,
+}
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/contract-syntax/index.html b/pr-1359/architecture-and-concepts/smart-contracts/contract-syntax/index.html new file mode 100644 index 0000000000..83bd381cf1 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/contract-syntax/index.html @@ -0,0 +1,1432 @@ + + + + + + Migrating a contract from Cairo v1 to Cairo v2 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Migrating a contract from Cairo v1 to Cairo v2

+
+

With the v2.0.0 release of the Cairo compiler, the Starknet contract syntax has evolved, affecting the organization of functions, storage, and events.

+
+
+

For more information on the latest syntax changes, see the Community Forum post Cairo 1: Contract Syntax is Evolving.

+
+
+
Prerequisites
+
    +
  • +

    A contract written with the Cairo compiler v1

    +
  • +
  • +

    The most recent version of the Cairo compiler

    +
  • +
+
+
+
Procedure
+
    +
  1. +

    Change the contract annotation from #[contract] to #[starknet::contract]. For example::

    +
    +
    +
    +
      +
    • +

      Cairo v1

      +
    • +
    • +

      Cairo v2

      +
    • +
    +
    +
    +
    +
    +
    #[contract]
    +mod CounterContract {
    +   ...
    +}
    +
    +
    +
    +
    +
    +
    +
    #[starknet::contract]
    +mod CounterContract {
    +   ...
    +}
    +
    +
    +
    +
    +
    +
  2. +
  3. +

    Annotate the Storage struct with the #[storage] attribute. For example:

    +
    +
    +
    +
      +
    • +

      Cairo v1

      +
    • +
    • +

      Cairo v2

      +
    • +
    +
    +
    +
    +
    +
    struct Storage {
    +    counter: u128,
    +    other_contract: IOtherContractDispatcher
    +}
    +
    +
    +
    +
    +
    +
    +
    #[storage]
    +struct Storage {
    +    counter: u128,
    +    other_contract: IOtherContractDispatcher
    +}
    +
    +
    +
    +
    +
    +
  4. +
  5. +

    Gather your contract’s external and view function signatures under a trait annotated with +#[starknet::interface] as follows:

    +
    +
      +
    • +

      Add a generic parameter to the trait. In the following example, the name TContractState +represents the state of your contract.

      +
    • +
    • +

      For view functions, add the self: @TContractState argument.

      +
    • +
    • +

      For external functions, add the ref self: TContractState argument.

      +
    • +
    • +

      Static functions that do not touch storage or emit events do not require an additional argument.

      +
      +

      For example:

      +
      +
      +
      +
      +
        +
      • +

        Cairo v1

        +
      • +
      • +

        Cairo v2

        +
      • +
      +
      +
      +
      +
      +
      #[contract]
      +mod CounterContract {
      +   #[external]
      +   fn increase_counter(amount: u128) { ... }
      +   #[external]
      +   fn decrease_counter(amount: u128) { ... }
      +   #[view]
      +   fn get_counter() -> u128 { ... }
      +}
      +
      +
      +
      +
      +
      +
      +
      #[starknet::interface]
      +trait ICounterContract<TContractState> {
      +   fn increase_counter(ref self: TContractState, amount: u128);
      +   fn decrease_counter(ref self: TContractState, amount: u128);
      +   fn get_counter(self: @TContractState) -> u128;
      +}
      +#[starknet::contract]
      +mod CounterContract {
      +   ...
      +}
      +
      +
      +
      +
      +
      +
    • +
    +
    +
  6. +
  7. +

    Add the external and view function bodies under an impl of the interface trait, and mark the +impl with the [external(v0)] attribute, which generates the type of dispatcher that is used to call the contract.

    +
    +

    For example:

    +
    +
    +
    +
    +
      +
    • +

      Cairo v1

      +
    • +
    • +

      Cairo v2

      +
    • +
    +
    +
    +
    +
    +
    #[contract]
    +mod CounterContract {
    +   #[external]
    +   fn increase_counter(amount: u128) { ... }
    +   #[external]
    +   fn decrease_counter(amount: u128) { ... }
    +   #[view]
    +   fn get_counter() -> u128 { ... }
    +}
    +
    +
    +
    +
    +
    +
    +
    #[starknet::interface]
    +trait ICounterContract<TContractState> {
    +   fn increase_counter(ref self: TContractState, amount: u128);
    +   fn decrease_counter(ref self: TContractState, amount: u128);
    +   fn get_counter(self: @TContractState) -> u128;
    +}
    +#[starknet::contract]
    +mod CounterContract {
    +   #[external(v0)]
    +   impl CounterContract of super::ICounterContract<ContractState> {
    +      fn increase_counter(ref self: ContractState, amount: u128) { ... }
    +      fn decrease_counter(ref self: ContractState, amount: u128) { ... }
    +      fn get_counter(self: @ContractState) -> u128 { ... }
    +   }
    +}
    +
    +
    +
    +
    +
    +
  8. +
  9. +

    Replace the #[abi] attribute with #[starknet::interface].

    +
    + + + + + +
    + + +
    +

    While it doesn’t affect the generated code, adding to the trait a generic parameter T representing the contract’s state, +and adding the ref self: T argument to external functions and self: @T argument for view +functions makes the implementation more complete.

    +
    +
    +
    +
    +

    For example:

    +
    +
    +
    +
    +
      +
    • +

      Cairo v1

      +
    • +
    • +

      Cairo v2

      +
    • +
    +
    +
    +
    +
    +
    #[abi]
    +trait IOtherContract {
    +    fn decrease_allowed() -> bool;
    +}
    +
    +
    +
    +
    +
    +
    +
    #[starknet::interface]
    +trait IOtherContract<TContractState> {
    +    fn decrease_allowed(self: @TContractState) -> bool;
    +}
    +
    +
    +
    +
    +
    +
  10. +
  11. +

    Modify storage accesses to happen through ContractState or @ContractState.

    +
    + + + + + +
    + + +
    +

    No external functions in the contract that access storage also need to get it as an argument.

    +
    +
    +
    +
    +

    For example:

    +
    +
    +
    +
    +
      +
    • +

      Cairo v1

      +
    • +
    • +

      Cairo v2

      +
    • +
    +
    +
    +
    +
    +
    let current = counter::read();
    +
    +
    +
    +
    +
    +
    +
    let current = self.counter.read();
    +
    +
    +
    +
    +
    +
  12. +
  13. +

    Unify all the contract’s events under the Event enum, and add a corresponding struct for every +variant.

    +
    + + + + + +
    + + +
    +

    All the structs must derive the Event trait, +and each member type must implement the Serde trait.

    +
    +
    +
    +
    +

    For example:

    +
    +
    +
    +
    +
      +
    • +

      Cairo v1

      +
    • +
    • +

      Cairo v2

      +
    • +
    +
    +
    +
    +
    +
    #[event]
    +fn counter_increased(amount: u128) {}
    +#[event]
    +fn counter_decreased(amount: u128) {}
    +
    +
    +
    +
    +
    +
    +
    #[event]
    +#[derive(Drop, starknet::Event)]
    +enum Event {
    +    CounterIncreased: CounterIncreased,
    +    CounterDecreased: CounterDecreased
    +}
    +#[derive(Drop, starknet::Event)]
    +struct CounterIncreased {
    +    amount: u128
    +}
    +#[derive(Drop, starknet::Event)]
    +struct CounterDecreased {
    +    amount: u128
    +}
    +
    +
    +
    +
    +
    +
  14. +
  15. +

    Emit events via the ContractState type. For example:

    +
    +
    +
    +
      +
    • +

      Cairo v1

      +
    • +
    • +

      Cairo v2

      +
    • +
    +
    +
    +
    +
    +
    fn increase_counter(amount: u128) {
    +    ...
    +    counter_increased(amount);
    +}
    +
    +
    +
    +
    +
    +
    +
    fn increase_counter(ref self: ContractState, amount: u128) {
    +    ...
    +    self.emit(Event::CounterIncreased(CounterIncreased { amount }));
    +}
    +
    +
    +
    +
    +
    +
  16. +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/execution-info/index.html b/pr-1359/architecture-and-concepts/smart-contracts/execution-info/index.html new file mode 100644 index 0000000000..57c4c14810 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/execution-info/index.html @@ -0,0 +1,1260 @@ + + + + + + Execution information :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Execution information

+
+
+
+

For the most up-to-date information, see the info.cairo contract.

+
+
+

The struct ExecutionInfo contains the following information about the currently executing block and the transactions in the block.

+
+
+
+
+

The ExecutionInfo struct

+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
+block_info: Box<BlockInfo> + +

Contains information about a block. For details, see The BlockInfo struct

+
+tx_info: Box<TxInfo> + +

Contains information about a transaction. For details, see Transaction information: The TxInfo struct

+
+caller_address: ContractAddress + +

The address of the contract that invokes the get_execution_info syscall.

+
+contract_address: ContractAddress + +

The address of the contract in which the get_execution_info syscall appears.

+
+entry_point_selector: felt252 + +

The function that includes the get_execution_info syscall.

+
+
+
+
+
+

The BlockInfo struct

+
+
+ ++++ + + + + + + + + + + + + +
+block_number: u64 + +

The number of the block that is currently being executed. When called from an account contract’s `__validate__`, `__validate_deploy__`, or `__validate_declare__` function, this value is rounded down to the nearest multiple of 100.

+
+block_timestamp: u64 + +

The timestamp showing the creation time of the block, in seconds since the Unix epoch, based on UTC time, rounded down to the nearest second. When called from an account contract’s `__validate__`, `__validate_deploy__`, or `__validate_declare__` function, this value is rounded down to the nearest hour.

+
+sequencer_address: ContractAddress + +

The address of the Starknet sequencer contract.

+
+
+
+
+
+

Transaction information: The TxInfo struct

+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+version: felt252 + +

The version of the transaction. It is fixed (currently, 3) in the OS, and should be signed by the account contract. This field allows invalidating old transactions, whenever the meaning of the other transaction fields is changed (in the OS).

+
+account_contract_address: ContractAddress + +

The account contract from which this transaction originates.

+
+max_fee: u128 + +

The max_fee field of the transaction.

+
+signature: Span<felt252> + +

The signature of the transaction.

+
+transaction_hash: felt252 + +

The hash of the transaction.

+
+chain_id: felt252 + +

The identifier of the chain. +This field can be used to prevent replay of testnet transactions on mainnet.

+
+nonce: felt252 + +

The transaction’s nonce.

+
+resource_bounds: Span<ResourceBounds> + +

A span of ResourceBounds structs. For details, see The ResourceBounds struct.

+
+tip: u128 + +

The tip.

+
+paymaster_data: Span<felt252> + +

If specified, the paymaster should pay for the execution of the tx. +The data includes the address of the paymaster sponsoring the transaction, followed by +extra data to send to the paymaster.

+
+nonce_data_availability_mode: u32 + +

The data availability mode for the nonce.

+
+fee_data_availability_mode: u32 + +

The data availability mode for the account balance from which fee will be taken.

+
+account_deployment_data: Span<felt252> + +

If nonempty, will contain the required data for deploying and initializing an account +contract: its class hash, address salt and constructor calldata.

+
+
+
+
+
+

The ResourceBounds struct

+
+
+ ++++ + + + + + + + + + + + + +
+resource: felt252 + +

The name of the resource.

+
+max_amount: u64 + +

The maximum amount of the resource allowed for usage during the execution.

+
+max_price_per_unit: u128 + +

The maximum price the user is willing to pay for the resource unit.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/serialization-of-cairo-types/index.html b/pr-1359/architecture-and-concepts/smart-contracts/serialization-of-cairo-types/index.html new file mode 100644 index 0000000000..ac80f3a787 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/serialization-of-cairo-types/index.html @@ -0,0 +1,1458 @@ + + + + + + Serialization of Cairo types :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Serialization of Cairo types

+
+
+
+

When you interact with contracts, especially if you are a library or SDK developer that wants to construct transactions, you need to understand how Cairo handles types that are larger than 252 bits so you can correctly formulate the calldata in a transaction.

+
+
+

The field element (felt252), which contains 252 bits, is the only actual type in the Cairo VM. So all high-level Cairo types that are larger than 252 bits, such as u256 or arrays, are ultimately represented by a list of felts. In order to interact with a contract, you need to know how to encode its arguments as a list of felts so you can correctly formulate the calldata in the transaction. +SDKs, such as starknet.js, encode the calldata for you, so you can simply specify any type and the SDK properly formulates the calldata. For example, you don’t need to know that a u256 value is represented by two felt252 values. You can simply specify a single integer in your code, and the SDK takes care of the serialization and encoding.

+
+
+
+
+

Data types of 252 bits or less

+
+
+

The following types are smaller than 252 bits. For these types, each value is serialized as a single-member list that contains one felt252 value.

+
+
+
    +
  • +

    ContractAddress

    +
  • +
  • +

    EthAddress

    +
  • +
  • +

    StorageAddress

    +
  • +
  • +

    ClassHash

    +
  • +
  • +

    Unsigned integers smaller than 252 bits: u8, u16, u32, u64, u128, and usize

    +
  • +
  • +

    bytes31

    +
  • +
  • +

    felt252

    +
  • +
  • +

    Signed integers smaller than 252 bits: i8, i16, i32, i64, and i128.

    +
    +

    A negative value, \(-x\), is serialized as \(P-x\), where:

    +
    +
    +
    +\[P = 2^{251} + 17*2^{192} + 1\] +
    +
    +
    +

    For example, -5 is serialized as \(P-5\). For more information on the value of \(P\), see The STARK field.

    +
    +
  • +
+
+
+
+
+

Data types greater than 252 bits

+
+
+

The following Cairo data types have non-trivial serialization:

+
+
+
    +
  • +

    u256 and u512

    +
  • +
  • +

    arrays

    +
  • +
  • +

    enums

    +
  • +
  • +

    structs

    +
  • +
  • +

    ByteArray, which represents strings

    +
  • +
+
+
+
+
+

Serialization of unsigned integers

+
+
+

Among unsigned integers, only u256 and u512 have non-trivial serialization.

+
+
+

Serialization of u256 values

+
+

A u256 value in Cairo is represented by two felt252 values, as follows:

+
+
+
    +
  • +

    The first felt252 value contains the 128 least significant bits, usually referred to as the low part of the original u256 value.

    +
  • +
  • +

    The second felt252 value contains the 128 most significant bits, usually referred to as the high part of the original u256 value.

    +
  • +
+
+
+

For example:

+
+
+
    +
  • +

    A u256 variable whose decimal value is 2 is serialized as [2,0]. To understand why, examine the binary representation of 2 and split it into two 128-bit parts, as follows:

    +
    +
    +\[\underbrace{0\cdots0}_{\text{128 high bits}} | +\underbrace{0\cdots10}_{\text{128 low bits}}\] +
    +
    +
  • +
  • +

    A u256 variable whose decimal value is 2128 is serialized as [0,1]. To understand why, examine the binary representation of 2128 and split it into two 128-bit parts, as follows:

    +
    +
    +\[\underbrace{0\cdots01}_{\text{128 high bits}} | +\underbrace{0\cdots0}_{\text{128 low bits}}\] +
    +
    +
  • +
  • +

    A u256 variable whose decimal value is 2129+2128+20, is serialized as [20,3]. To understand why, examine the binary representation of the 2129+2128+20 and split it into two 128-bit parts, as follows:

    +
    +
    +\[\underbrace{0\cdots011}_{\text{128 high bits}} | +\underbrace{0\cdots10100}_{\text{128 low bits}}\] +
    +
    +
  • +
+
+
+
+

Serialization of u512 values

+
+

The u512 type in Cairo is a struct containing four felt252 members, each representing a 128-bit limb of the original integer, similar to the u256 type.

+
+
+
+
+
+

Serialization of arrays

+
+
+

Arrays are serialized as follows:

+
+
+

<array_length>, <serialized_member_0>,…​, <serialized_member_n>

+
+
+

For example, consider the following array of u256 values:

+
+
+
+
let POW_2_128: u256 = 0x100000000000000000000000000000000
+let array: Array<u256> = array![10, 20, POW_2_128]
+
+
+
+

Each u256 value in the array is represented by two felt252 values. So the array above is serialized as follows:

+
+
+
+\[\underbrace{3}_{\textit{number_of_array_members}} , +\underbrace{10,0}_{\textit{serialized_member_0}} , +\underbrace{20,0}_{\textit{serialized_member_1}} , +\underbrace{0,1}_{\textit{serialized_member_2}}\] +
+
+
+

Combining the above, the array is serialized as follows: [3,10,0,20,0,0,1]

+
+
+
+
+

Serialization of enums

+
+
+

An enum is serialized as follows:

+
+
+

<index_of_enum_variant>,<serialized_variant>

+
+
+

Note that enum variants indices are 0-based, not to confuse with their storage layout, which is 1-based, to distinguish the first variant from an uninitialized storage slot.

+
+
+
Enum serialization example 1
+

Consider the following definition of an enum named Week:

+
+
+
+
enum Week {
+    Sunday: (), // Index=0. The variant type is the unit type (0-tuple).
+    Monday: u256, // Index=1. The variant type is u256.
+}
+
+
+
+

Now consider instantiations of the Week enum’s variants as shown in the table below:

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 1. Serialization of Week variants
InstanceDescriptionSerialization

Week::Sunday

Index=0. The variant’s type is the unit type.

[0]

Week::Monday(5)

+

Index=1. The variant’s type is u256, hence serialized to [5,0], as shown in Serialization of u256 values .

+

[1,5,0]

+
+
Enum serialization example 2
+

Consider the following definition of an enum named MessageType:

+
+
+
+
enum MessageType {
+    A,
+    #[default]
+    B: u128,
+    C
+}
+
+
+
+

Now consider instantiations of the MessageType enum’s variants as shown in the table below:

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2. Serialization of MessageType variants
InstanceDescriptionSerialization

MessageType::A

Index=1. The variant’s type is the unit type.

[0]

MessageType::B(6)

+

Index=0. The variant’s type is u128.

+

[1,6]

MessageType::C

Index=2. The variant’s type is the unit type.

[2]

+
+

As you can see about, the #[default] attribute does not affect serialization. It only affects the storage layout of MessageType, where the default variant +B will be stored as 0.

+
+
+
+
+

Serialization of structs

+
+
+

You serialize a struct by serializing its members one at a time.

+
+
+

Its members are serialized in the order in which they appear in the definition of the struct.

+
+
+

For example, consider the following definition of the struct MyStruct:

+
+
+
+
struct MyStruct {
+    a: u256,
+    b: felt252,
+    c: Array<felt252>
+}
+
+
+
+

The serialization is the same for both of the following instantiations of the struct’s members:

+
+ ++++ + + + + + + +
+
+
let my_struct = MyStruct {
+    a: 2, b: 5, c: [1,2,3]
+};
+
+
+
+
let my_struct = MyStruct {
+    b: 5, c: [1,2,3], a: 2
+};
+
+
+
+

The serialization of MyStruct is determined as shown in the table Serialization for a struct in Cairo.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3. Serialization for a struct in Cairo
MemberDescriptionSerialization

a: 2

For information on serializing u256 values, see Serialization of u256 values

[2,0]

b: 5

One felt252 value

5

c: [1,2,3]

An array of three felt252 values

[3,1,2,3]

+
+

Combining the above, the struct is serialized as follows: [0,2,5,3,1,2,3]

+
+
+
+
+

Serialization of byte arrays

+
+
+

A string is represented in Cairo as a ByteArray type. A byte array is actually a struct with the following members:

+
+
+
    +
  1. +

    data: Array<felt252>
    +Contains 31-byte chunks of the byte array. Each felt252 value has exactly 31 bytes. If the number of bytes in the byte array is less than 31, then this array is empty.

    +
  2. +
  3. +

    pending_word: felt252
    +The bytes that remain after filling the data array with full 31-byte chunks. The pending word consists of at most 30 bytes.

    +
  4. +
  5. +

    pending_word_len: usize
    +The number of bytes in pending_word.

    +
  6. +
+
+
+
Example 1: A string shorter than 31 characters
+

Consider the string hello, whose ASCII encoding is the 5-byte hex value 0x68656c6c6f. The resulting byte array is serialized as follows:

+
+
+
+
    0, // Number of 31-byte words in the data array.
+    0x68656c6c6f, // Pending word
+    5 // Length of the pending word, in bytes
+
+
+
+
Example 2: A string longer than 31 bytes
+

Consider the string Long string, more than 31 characters., which is represented by the following hex values:

+
+
+
    +
  • +

    0x4c6f6e6720737472696e672c206d6f7265207468616e203331206368617261 (31-byte word)

    +
  • +
  • +

    0x63746572732e (6-byte pending word)

    +
  • +
+
+
+

The resulting byte array is serialized as follows:

+
+
+
+
    1, // Number of 31-byte words in the array construct.
+    0x4c6f6e6720737472696e672c206d6f7265207468616e203331206368617261, // 31-byte word.
+    0x63746572732e, // Pending word
+    6 // Length of the pending word, in bytes
+
+
+
+
+
+

Additional resources

+
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/starknet-events/index.html b/pr-1359/architecture-and-concepts/smart-contracts/starknet-events/index.html new file mode 100644 index 0000000000..638c788298 --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/starknet-events/index.html @@ -0,0 +1,1177 @@ + + + + + + Events :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Events

+
+
+
+

A contract may emit events throughout its execution. Each event contains the following fields:

+
+
+
    +
  • +

    from_address: address of the contract emitting the events

    +
  • +
  • +

    keys: a list of field elements

    +
  • +
  • +

    data: a list of field elements

    +
  • +
+
+
+

The keys can be used for indexing the events, while the data may contain any information that we wish to log (note that we are dealing with two separate lists of possibly varying size, rather than a list of key-value pairs).

+
+
+
+
+

Emitting events

+
+
+

Events can be defined in a contract using the @event decorator. Once an event E has been defined, the compiler automatically adds the function E.emit(). The following example illustrates how an event is defined and emitted:

+
+
+
+
#[event]
+fn Transfer(from: ContractAddress, to: ContractAddress, value: u256) {}
+
+
+
+
+
Transfer(12345, 12345, 1)
+
+
+
+

The emit function emits an event with a single key, which is an identifier of the event, given by \(\text{sn_keccak}(event\_name)\), where \(event\_name\) is the ASCII encoding of the event’s name and \(\text{sn_keccak}\) is defined here.

+
+
+

To emit custom keys, one should use the low level emit_event system call:

+
+
+
+
use starknet::syscalls::emit_event_syscall;
+
+let keys = array!['key', 'deposit'];
+let values = array![1, 2, 3];
+emit_event_syscall(keys, values).unwrap_syscall();
+
+
+
+

The above code emits an event with two keys, the strings key and deposit (think of those as identifiers of the event that can be used for indexing) and three data elements 1, 2, 3.

+
+
+ + + + + +
+ + +
+

When using the higher level emit syntax, the event’s data may be of complex types, for example:

+
+
+
+
struct Point:
+    member x : felt
+    member y : felt
+end
+
+@event
+func message_received(arr_len : felt, arr: felt*, p: Point):
+end
+
+# ...
+
+let (data : felt*) = alloc()
+assert data[0] = 1
+assert data[1] = 2
+let p = Point(3,4)
+message_received.emit(2, data, p)
+
+
+
+
+
+

The emitted events are part of the transaction receipt. For more information, see Transaction receipt.

+
+
+
+
+

Event definition in the ABI

+
+
+

The event definition appears in the contract’s ABI. It contains the list of data fields, with the name and type for each, and the list of the custom keys, that is, all keys except the event identifier discussed above. Below is an example of an event inside the ABI:

+
+
+
Example of an event in the ABI
+
+
{
+  "type": "event",
+  "name": "Transfer",
+  "inputs": [
+    {
+      "name": "from",
+      "type": "core::starknet::contract_address::ContractAddress"
+    },
+    {
+      "name": "to",
+      "type": "core::starknet::contract_address::ContractAddress"
+    },
+    {
+      "name": "value",
+      "type": "core::integer::u256"
+    }
+  ]
+}
+
+
+
+
+
+

Event hash

+
+
+

The event hash is given by:

+
+
+
+\[h(h(h(h(0,from\_address),keys\_hash),data\_hash),3)\] +
+
+
+

Where:

+
+
+
    +
  • +

    \(keys\_hash\) and \(data\_hash\) are the hashes of the keys list and data list respectively. For more information, see Array hashing.

    +
  • +
  • +

    \(h\) is the Pedersen hash function.

    +
  • +
+
+
+

The event hashes are included in the event_commitment field of a block.

+
+
+
+
+

Additional resources

+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/smart-contracts/system-calls-cairo1/index.html b/pr-1359/architecture-and-concepts/smart-contracts/system-calls-cairo1/index.html new file mode 100644 index 0000000000..ea2d19baed --- /dev/null +++ b/pr-1359/architecture-and-concepts/smart-contracts/system-calls-cairo1/index.html @@ -0,0 +1,1718 @@ + + + + + + System Calls :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

System Calls

+
+
+
+

Writing smart contracts requires various associated operations, such as calling another contract or +accessing the contract’s storage, that standalone programs do not require. The Starknet contract language supports these operations by using system calls. System calls enable a contract to require services from the Starknet OS. You can use system calls in a function to get information that depends on the broader state of Starknet, which would otherwise be inaccessible, rather than local variables that appear in the function’s scope.

+
+
+
+
+

get_block_hash

+
+

Function signature

+
+
+
extern fn get_block_hash_syscall(
+    block_number: u64
+) -> SyscallResult<felt252> implicits(GasBuiltin, System) nopanic;
+
+
+

Description

+
+

Gets the hash of a specific Starknet block within the range of [first_v0_12_0_block, current_block - 10].

+
+

Arguments

+
+ ++++ + + + + +
+block_number: u64 + +

The number of the block whose hash you want to get.

+
+
+

Return values

+
+

The hash of the specified block.

+
+

Common library

+ +

Error messages

+
+ ++++ + + + + + + + + +
+Block number out of range + +

block_number is greater than current_block - 10.

+
+0 + +

block_number is less than the first block number of v0.12.0.

+
+
+
+
+
+

get_execution_info

+
+

Function signature

+
+
+
extern fn get_execution_info_syscall() -> SyscallResult<Box<starknet::info::ExecutionInfo>> implicits(
+    GasBuiltin, System
+) nopanic;
+
+
+

Description

+
+

Gets information about the currently executing block and the transactions in the block. For a complete description of this information, see Execution information

+
+
+

This single system call contains all information for a block, transaction, and execution context.

+
+
+

When an account’s __validate__, __validate_deploy__, or __validate_declare__ function calls get_execution_info, the return values for block_timestamp and block_number are modified as follows:

+
+
+
    +
  • +

    block_timestamp returns the hour, rounded down to the nearest hour.

    +
  • +
  • +

    block_number returns the block number, rounded down to the nearest multiple of 100.

    +
  • +
+
+

Arguments

+
+

None.

+
+

Return values

+
+ ++++ + + + + +
+ExecutionInfo + +

A struct that contains information about the currently executing function, transaction, and block.

+
+
+

Common library

+ +

Example

+
+

This example shows how to pull the block number from the ExecutionInfo struct.

+
+
+
+
let execution_info = get_execution_info().unbox();
+let block_info = execution_info.block_info.unbox();
+let block number = block_info.block_number;
+
+
+
+
+
+

call_contract

+
+

Function signature

+
+
+
extern fn call_contract_syscall(
+    address: ContractAddress, entry_point_selector: felt252, calldata: Span<felt252>
+) -> SyscallResult<Span<felt252>> implicits(GasBuiltin, System) nopanic;
+
+
+

Description

+
+

Calls a given contract. This system call expects the address of the called contract, a selector for a function within that contract, and call arguments.

+
+
+ + + + + +
+ + +
+

An internal call can’t return Err(_) as this is not handled by the sequencer and the Starknet OS.

+
+
+

If call_contract_syscall fails, this can’t be caught and will therefore result in the entire transaction being reverted.

+
+
+
+

Arguments

+
+ ++++ + + + + + + + + + + + + +
+address: ContractAddress + +

The address of the contract you want to call.

+
+entry_point_selector: felt252 + +

A selector for a function within that contract.

+
+calldata: Span<felt252> + +

The calldata array.

+
+
+

Return values

+
+
    +
  • +

    The call response, of type SyscallResult<Span<felt252>>.

    +
  • +
+
+

Common library

+ +
+ + + + + +
+ + +
+

This is considered a lower-level syntax for calling contracts.

+
+
+

If the interface of the called contract is available, then you can use a more straightforward syntax.

+
+
+
+
+
+
+

deploy

+
+

Function signature

+
+
+
extern fn deploy_syscall(
+    class_hash: ClassHash,
+    contract_address_salt: felt252,
+    calldata: Span<felt252>,
+    deploy_from_zero: bool,
+) -> SyscallResult<(ContractAddress, Span::<felt252>)> implicits(GasBuiltin, System) nopanic;
+
+
+

Description

+
+

Deploys a new instance of a previously declared class.

+
+

Arguments

+
+ ++++ + + + + + + + + + + + + + + + + +
+class_hash: ClassHash + +

The class hash of the contract to be deployed.

+
+contract_address_salt: felt252 + +

The salt, an arbitrary value provided by the sender, used in the computation of the contract’s address.

+
+calldata: Span<felt252> + +

The constructor’s calldata. An array of felts.

+
+deploy_from_zero: bool + +

A flag that determines whether the deployer’s address affects the computation of the contract address. When not set, or when set to FALSE, the caller address is used as the new contract’s deployer address. When set to TRUE, 0 is used.

+
+
+

Return values

+
+
    +
  • +

    A tuple wrapped with SyscallResult where:

    +
    +
      +
    • +

      The first element is the address of the deployed contract, of type ContractAddress.

      +
    • +
    • +

      The second element is the response array from the contract’s constructor, of type Span::<felt252>.

      +
    • +
    +
    +
  • +
+
+

Common library

+ +
+
+
+

emit_event

+
+

Function signature

+
+
+
extern fn emit_event_syscall(
+    keys: Span<felt252>, data: Span<felt252>
+) -> SyscallResult<()> implicits(GasBuiltin, System) nopanic;
+
+
+

Description

+
+

Emits an event with a given set of keys and data.

+
+
+

For more information, and for a higher-level syntax for emitting events, see Starknet events.

+
+

Arguments

+
+ ++++ + + + + + + + + +
+keys: Span<felt252> + +

The event’s keys. These are analogous to Ethereum’s event topics, you can use the starknet_getEvents method to filter by these keys.

+
+data: Span<felt252> + +

The event’s data.

+
+
+

Return values

+
+

None.

+
+

Common library

+ +

Example

+
+

The following example emits an event with two keys, the strings key and deposit and three data elements: 1, 2, and 3.

+
+
+
+
let keys = array!['key', 'deposit'];
+let values = array![1, 2, 3];
+emit_event_syscall(keys, values).unwrap_syscall();
+
+
+
+
+
+

library_call

+
+

Function signature

+
+
+
extern fn library_call_syscall(
+    class_hash: ClassHash, function_selector: felt252, calldata: Span<felt252>
+) -> SyscallResult<Span<felt252>> implicits(GasBuiltin, System) nopanic;
+
+
+

Description

+
+

Calls the requested function in any previously declared class. The class is only used for its logic.

+
+
+

This system call replaces the known delegate call functionality from Ethereum, with the important difference that there is only one contract involved.

+
+

Arguments

+
+ ++++ + + + + + + + + + + + + +
+class_hash: ClassHash + +

The hash of the class you want to use.

+
+function_selector: felt252 + +

A selector for a function within that class.

+
+calldata: Span<felt252> + +

The calldata.

+
+
+

Return values

+
+
    +
  • +

    The call response, of type SyscallResult<Span<felt252>>.

    +
  • +
+
+

Common library

+ +
+
+
+

send_message_to_L1

+
+

Function signature

+
+
+
extern fn send_message_to_l1_syscall(
+    to_address: felt252, payload: Span<felt252>
+) -> SyscallResult<()> implicits(GasBuiltin, System) nopanic;
+
+
+

Description

+
+

Sends a message to L1.

+
+
+

This system call includes the message parameters as part of the proof’s output and exposes these parameters to the Starknet Core Contract on L1 once the state update, including the transaction, is received.

+
+
+

For more information, see Starknet’s messaging mechanism.

+
+

Arguments

+
+ ++++ + + + + + + + + +
+to_address: felt252 + +

The recipient’s L1 address.

+
+payload: Span<felt252> + +

The array containing the message payload

+
+
+

Return values

+
+

None.

+
+

Common library

+ +

Example

+
+

The following example sends a message whose content is (1,2) to the L1 contract whose address is 3423542542364363.

+
+
+
+
let payload = ArrayTrait::new();
+payload.append(1);
+payload.append(2);
+send_message_to_l1_syscall(payload).unwrap_syscall();
+
+
+
+
+
+

replace_class

+
+

Function signature

+
+
+
extern fn replace_class_syscall(
+    class_hash: ClassHash
+) -> SyscallResult<()> implicits(GasBuiltin, System) nopanic;
+
+
+

Description

+
+

Once replace_class is called, the class of the calling contract (i.e. the contract whose address is returned by get_contract_address at the time the syscall is called) will be replaced +by the class whose hash is given by the class_hash argument.

+
+
+ + + + + +
+ + +
+

After calling replace_class, the code currently executing from the old class will finish running.

+
+
+

The new class will be used from the next transaction onwards or if the contract is called via +the call_contract syscall in the same transaction (after the replacement).

+
+
+
+

Arguments

+
+ ++++ + + + + +
+class_hash_: ClassHash + +

The hash of the class you want to use as a replacement.

+
+
+

Return values

+
+

None.

+
+

Common library

+ +
+
+
+

storage_read

+
+

Function signature

+
+
+
extern fn storage_read_syscall(
+    address_domain: u32, address: StorageAddress
+) -> SyscallResult<felt252> implicits(GasBuiltin, System) nopanic;
+
+
+

Description

+
+

Gets the value of a key in the storage of the calling contract.

+
+
+

This system call provides direct access to any possible key in storage, in contrast with var.read(), which enables you to read storage variables that are defined explicitly in the contract.

+
+
+

For information on accessing storage by using the storage variables, see storage variables.

+
+

Arguments

+
+ ++++ + + + + + + + + +
+address_domain: u32 + +

The domain of the key, used to separate between different data availability modes. This separation is used in Starknet to offer different data availability modes. Currently, only the onchain mode (where all updates go to L1), indicated by domain 0, is supported. Other address domains which will be introduced in the future will behave differently in terms of publication (in particular, they will not be posted on L1, creating a tradeoff between cost and security).

+
+address: StorageAddress + +

The requested storage address.

+
+
+

Return values

+
+
    +
  • +

    The value of the key, of type SyscallResult<felt252>.

    +
  • +
+
+

Common library

+ +

Example

+
+
+
use starknet::storage_access::storage_base_address_from_felt252;
+
+...
+
+let storage_address = storage_base_address_from_felt252(3534535754756246375475423547453)
+storage_read_syscall(0, storage_address).unwrap_syscall()
+
+
+
+
+
+

storage_write

+
+

Function signature

+
+
+
extern fn storage_write_syscall(
+    address_domain: u32, address: StorageAddress, value: felt252
+) -> SyscallResult<()> implicits(GasBuiltin, System) nopanic;
+
+
+

Description

+
+

Sets the value of a key in the storage of the calling contract.

+
+
+

This system call provides direct access to any possible key in storage, in contrast with var.write(), which enables you to write to storage variables that are defined explicitly in the contract.

+
+
+

For information on accessing storage by using the storage variables, see storage variables.

+
+

Arguments

+
+ ++++ + + + + + + + + + + + + +
+address_domain: u32 + +

The domain of the key, used to separate between different data availability modes. This separation is used in Starknet to offer different data availability modes. Currently, only the onchain mode (where all updates go to L1), indicated by domain 0, is supported. Other address domains which will be introduced in the future will behave differently in terms of publication (in particular, they will not be posted on L1, creating a tradeoff between cost and security).

+
+address: StorageAddress + +

The requested storage address.

+
+value: felt252 + +

The value to write to the key.

+
+
+

Return values

+
+

None.

+
+
+
Common library
+

syscalls.cairo

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/architecture-and-concepts/solidity-verifier/index.html b/pr-1359/architecture-and-concepts/solidity-verifier/index.html new file mode 100644 index 0000000000..007d36f546 --- /dev/null +++ b/pr-1359/architecture-and-concepts/solidity-verifier/index.html @@ -0,0 +1,1566 @@ + + + + + + Solidity verifier :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Solidity verifier

+
+
+
+ + + + + +
+ + +
+

This topic previously appeared in the Starknet Book.

+
+
+
+
+

Starknet’s Solidity verifier ensures the truth of transactions and smart contracts.

+
+
+

The Solidity verifier is an L1 Solidity smart contract, designed to validate STARK proofs from SHARP.

+
+
+
+
+

Current architecture: Multiple smart contracts

+
+
+

The current Verifier is a set of multiple smart contracts, rather than being a singular, monolithic structure.

+
+
+

Some key smart contracts associated with the Verifier are:

+
+
+
    +
  • +

    GpsStatementVerifier: This is the primary contract of the SHARP verifier. It verifies a proof and then registers the related facts using verifyProofAndRegister. It acts as an umbrella for various layouts, each named CpuFrilessVerifier. Every layout has a unique combination of built-in resources.

    +
    +
    +The system routes each proof to its relevant layout +
    +
    Figure 1. Verifier layouts
    +
    +
    +

    The system routes each proof to its relevant layout.

    +
    +
  • +
  • +

    MemoryPageFactRegistry: This registry maintains facts for memory pages, primarily used to register outputs for data availability in rollup mode. The Fact Registry is a separate smart contract ensuring the verification and validity of attestations or facts. The verifier function is separated from the main contract to ensure each segment works optimally within its limits. The main proof segment relies on other parts, but these parts operate independently.

    +
  • +
  • +

    MerkleStatementContract: This contract verifies Merkle paths.

    +
  • +
  • +

    FriStatementContract: It focuses on verifying the FRI layers.

    +
  • +
+
+
+
+
+

SHARP Verifier contract map

+
+
+

The SHARP Verifier Contract Map contains roughly 40 contracts, detailing various components of the Solidity verifier. The images below display the contracts and their Ethereum Mainnet addresses.

+
+
+
SHARP verifier contract map
+

These are currently the entire stack of contracts that comprise the SHARP verifier, with their Ethereum Mainnet addresses.

+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Proxy + +

0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60

+
+CallProxy + +

0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458

+
+GpsStatementVerifier + +

0x6cB3EE90C50a38A0e4662bB7e7E6e40B91361BF6

+
+MemoryPageFactRegistry + +

0xFD14567eaf9ba941cB8c8a94eEC14831ca7fD1b4

+
+MerkleStatementContract + +

0x5899Efea757E0Dbd6d114b3375C23D7540f65fa4

+
+FriStatementContract + +

0x3E6118DA317f7A433031F03bB71ab870d87dd2dd

+
+CairoBootloaderProgram + +

0x5d07afFAfc8721Ef3dEe4D11A2D1484CBf6A9dDf

+
+PedersenHashPointsXColumn + +

0xc4f21318937017B8aBe5fDc0D48f58dBc1d18940

+
+PedersenHashPointsYColumn + +

0x519DA5F74503dA351EbBED889111377d33096002

+
+EcdsaHashPointsXColumn + +

0x593a71DC43e9B67FE009d7C76B6EfA925FB329B1

+
+EcdsaHashPointsYColumn + +

0xcA59f6FD499ffF50c78Ffb420a9bcd0d273abf29

+
+CpuFrilessVerifier0 + +

0x217750c27bE9147f9e358D9FF26a8224F8aCC214

+
+CpuOods0 + +

0x3405F644F9390C3478f42Fd205CE6920CcAF3280

+
+CpuConstraintPoly0 + +

0x943248dA0FFd5834Da56c5AD5308E2E2991378EB

+
+CpuFrilessVerifier1 + +

0x630A97901Ac29590DF83f4A64B8D490D54caf239

+
+CpuOods1 + +

0x8518F459A698038B4CCED66C042c48C6bB5B17fe

+
+CpuConstraintPoly1 + +

0x4CF5c11321d54b83bDAE84bBbd018c26621d2950

+
+CpuFrilessVerifier2 + +

0x8488e8f4e26eBa40faE229AB653d98E341cbE57B

+
+CpuOods2 + +

0x52314e0b25b024c34480Ac3c75cfE98c2Ed6aa4a

+
+CpuConstraintPoly2 + +

0xBE8bd7a41ba7DC7b995a53368e7fFE30Fd2BC447

+
+CpuFrilessVerifier3 + +

0x9E614a417f8309575fC11b175A51599661f2Bd21

+
+CpuOods3 + +

0xED219933b58e9c00E66682356588d42C7932EE8E

+
+CpuConstraintPoly3 + +

0x297951a67D1BF7795500C3802d21a8C846D9C962

+
+CpuFrilessVerifier4 + +

0xC879aF7D5eD80e4676C203FD300E640C297F31e3

+
+CpuOods4 + +

0x4bf82e627D57cB3F455E740bcDA25848cDbd2FF7

+
+CpuConstraintPoly4 + +

0x0C099caf7a87e4eB28bcd8D0608063f8a69bb434

+
+CpuFrilessVerifier5 + +

0x78Af2BFB12Db15d35f7dE8DD77f29C299C78c590

+
+CpuOods5 + +

0x43A1C0bBa540e1C98d4b413F876250bdCFd0b9e0

+
+CpuConstraintPoly5 + +

0x691ca565B7416B681e4f9Fb56A1283Ae8b34E55e

+
+CpuFrilessVerifier6 + +

0xe9664D230490d5A515ef7Ef30033d8075a8D0E24

+
+CpuOods6 + +

0x68293272FEA2D6e74572BC18ffaD11F21344e090

+
+CpuConstraintPoly6 + +

0xd0aAdECA2d25AEFde0da214d27b04b6ea20D7418

+
+PoseidonPoseidonFullRoundKey0Column6 + +

0x37070Fd8051f63E5A6D7E87026e086Cc19db1aBe

+
+PoseidonPoseidonFullRoundKey1Column6 + +

0xb4711a4614368516529d6118C97905aB4B28e267

+
+PoseidonPoseidonFullRoundKey 2Column6 + +

0x4FB05b7CC348C5a72C59a3f307baf66e3CA1F835

+
+PoseidonPoseidonPartialRoundKey0Column6 + +

0x812c2AD2161D099724A99C8114c539b9e5b449cd

+
+PoseidonPoseidonPartialRoundKey1Column6 + +

0x4d0E80AB34ee2B19295F2CaC3101d03452D874b8

+
+CpuFrilessVerifier7 + +

0x03Fa911dfCa026D9C8Edb508851b390accF912e8

+
+CpuOods7 + +

0xc9E067AF5d00eb4aA2E73843ac36AfF83C5CeeD3

+
+CpuConstraintPoly7 + +

0x89B7a7276cBc8Cb35Ec11fAE9da83b20Db3edf20

+
+
+
+

These contracts function as follows:

+
+
+
    +
  • +

    Proxy: This contract facilitates upgradability. It interacts with the GpsStatementVerifier contract using the delegate_call method. Notably, the state resides in the GpsStatementVerifier contract, not in the proxy.

    +
  • +
  • +

    CallProxy: Positioned between the Proxy and the GpsStatementVerifier contracts, it functions like a typical proxy. However, it avoids the delegate_call method and calls the function in the implementation contract directly.

    +
  • +
  • +

    CairoBootloaderProgram: Comprising numerical Cairo programs, it validates the Cairo program of a statement. The bootloader manages the logic executing Cairo programs to generate proof and program hash.

    +
  • +
  • +

    PedersenHashPoints (X & Y Columns): These lookup tables store vast amounts of data. Validation functions consult them to compute the Pedersen hash.

    +
  • +
  • +

    EcdsaPoints (X & Y Column): Similar to the Pedersen hash, these tables assist in calculating the elliptic curve.

    +
  • +
  • +

    CpuFrilessVerifier/CpuOods/CpuConstantPoly (0 - 7): These Verifier contracts vary in layout as shown in the GpsStatementVerifier layout image. Each layout encompasses resources, built-ins, constraints, and more, designed for a specific task. Each has unique parameters for its constructor.

    +
  • +
  • +

    PoseidonPoseidon: These contracts back the new Poseidon built-in and contain Poseidon-specific lookup tables.

    +
  • +
+
+
+
+
+

Constructor parameters of key contracts

+
+
+

When constructing the primary Verifier contracts, specific parameters are employed to facilitate functionality. These parameters reference other auxiliary contracts, decentralizing the logic and ensuring the main contract remains under the 24kb deployment limit.

+
+
+

Below is a visual representation of these parameters in relation to key contracts CpuFrilessVerifiers and GpsStatementVerifier:

+
+
+
+Constructor Parameters +
+
+
+

CpuFrilessVerifier constructor parameters

+
+

CpuFrilessVerifiers is designed to handle a diverse range of tasks. Its parameters encompass:

+
+
+
    +
  • +

    Auxiliary Polynomial Contracts: These include CpuConstraintPoly, PedersenHashPointsxColumn, PedersenHashPointsYColumn, EcdsaPointsXColumn, and EcdsaPointsYColumn.

    +
  • +
  • +

    Poseidon-Related Contracts: Several PoseidonPoseidonFullRoundKey and PoseidonPoseidonPartialRoundKey contracts.

    +
  • +
  • +

    Sampling and Memory: The contract uses CpuOods for out-of-domain sampling and MemoryPageFactRegistry for memory-related tasks.

    +
  • +
  • +

    Verification: It integrates with MerkleStatementContract for Merkle verification and FriStatementContract for Fri-related tasks.

    +
  • +
  • +

    Security: The num_security_bits and min_proof_of_work_bits contracts ensure secure operation.

    +
  • +
+
+
+ + + + + +
+ + +
+

For instances like CpuFrilessVerifier0, specific contracts (e.g., CpuConstraintPoly0, PoseidonPoseidonFullRoundKeyColumn0, CpuOods0) become particularly relevant.

+
+
+
+
+
+

GpsStatementVerifier constructor parameters

+
+

The GpsStatementVerifier functions as the hub of verifier operations, necessitating various parameters for effective functioning:

+
+
+
    +
  • +

    Bootloader: It references the CairoBootloaderProgram to initiate the system.

    +
  • +
  • +

    Memory Operations: This is facilitated by the MemoryPageFactRegistry contract.

    +
  • +
  • +

    Sub-Verifiers: It integrates a series of sub-verifiers (CpuFrilessVerifier0 through CpuFrilessVerifier7) to decentralize tasks.

    +
  • +
  • +

    Verification: The hashes, hashed_supported_cairo_verifiers and simple_bootloader_program_hash, are essential for validation processes.

    +
  • +
+
+
+
+
+
+

Interconnection of contracts

+
+
+

The GpsStatementVerifier serves as the primary verifier contract, optimized for minimal logic to fit within deployment size constraints. To function effectively:

+
+
+
    +
  • +

    It relies on smaller verifier contracts, which are already deployed and contain varied verification logic.

    +
  • +
  • +

    These smaller contracts, in turn, depend on other contracts, established during their construction.

    +
  • +
+
+
+

In essence, while the diverse functionalities reside in separate contracts for clarity and size efficiency, they are all interlinked within the GpsStatementVerifier.

+
+
+

For future enhancements or adjustments, the proxy and callproxy contracts facilitate upgradability, allowing seamless updates to the GpsStatementVerifier without compromising its foundational logic.

+
+
+
+
+

SHARP verification flow

+
+
+
+SHARP verification flow +
+
+
+
    +
  1. +

    The SHARP dispatcher transmits all essential transactions for verification, including:

    +
    +
      +
    • +

      MemoryPages (usually many).

      +
    • +
    • +

      MerkleStatements (typically between 3 and 5).

      +
    • +
    • +

      FriStatements (generally ranging from 5 to 15).

      +
    • +
    +
    +
  2. +
  3. +

    The SHARP dispatcher then forwards the proof using verifyProofAndRegister.

    +
  4. +
  5. +

    Applications, such as the Starknet monitor, validate the status. Once verification completes, they send an updateState transaction.

    +
  6. +
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/cli/starkli/index.html b/pr-1359/cli/starkli/index.html new file mode 100644 index 0000000000..d1756c5989 --- /dev/null +++ b/pr-1359/cli/starkli/index.html @@ -0,0 +1,1670 @@ + + + + + + Legacy Starknet CLI reference :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Legacy Starknet CLI reference

+
+
+
+ + + + + +
+ + +
+

The Starknet CLI is deprecated. Instead, use StarkLi CLI.

+
+
+
+
+
+
+

Basic command line syntax

+
+
+

To enter a Starknet command, use the following syntax:

+
+
+
+
$ starknet <command> <options>
+
+
+
+

Where:

+
+
+

<command> represents a single command that executes an operation on Starknet.

+
+
+

<options> represents zero or more command line options, each of which modifies the operation of the command.

+
+
+
+
+

Setting the Starknet network environment

+
+
+

You need to set your Starknet network environment to use either testnet or Mainnet.

+
+
+

You can set the environment using either a command-line option or an environment variable.

+
+
+

Possible values are:

+
+
+
+
sepolia
+
+

Sets the Starknet network to testnet

+
+
mainnet
+
+

Sets the Starknet network to Mainnet

+
+
+
+
+
Setting the network environment using a command-line option
+

When you enter any command, include the --network option. For example to use Mainnet, enter a command as follows:

+
+
+
+
$ starknet <command> --network alpha-mainnet <options>
+
+
+
+ + + + + +
+ + +
+

You can place the --network option before or after any other option.

+
+
+
+
+
Setting the network environment using an environment variable
+

Set the STARKNET_NETWORK environment variable as follows:

+
+
+
+
$ export STARKNET_NETWORK=<starknet_network>
+
+
+
+

For example, to use testnet, enter the following command:

+
+
+
+
$ export STARKNET_NETWORK=sepolia
+
+
+
+
+
+

Setting custom endpoints

+
+
+

When working with the CLI, you can manually set the endpoints for the gateways that enable you to +interact with Starknet, by including the following options:

+
+
+
+
--feeder_gateway_url
+
+

Sets the custom endpoint for read commands.

+
+
--gateway_url
+
+

Sets the custom endpoint for write commands.

+
+
+
+
+

The following are the endpoints for Starknet testnet and Mainnet:

+
+
+ +
+
+
Example: Setting a custom read endpoint
+

The following command returns the ABI using the Mainnet feeder gateway.

+
+
+
+
$ starknet get_code --feeder_gateway_url https://alpha-mainnet.starknet.io/feeder_gateway/ <options>
+
+
+
+
Example: Setting a custom write endpoint
+

The following command sends a transaction to the Starknet sequencer +using the Mainnet gateway.

+
+
+
+
$ starknet invoke --gateway_url https://alpha-mainnet.starknet.io/gateway/ <options>
+
+
+
+
+
+

starknet call

+
+
+
+
starknet call
+  --address <contract_address>
+  --abi <contract_abi>
+  --function <function_name>
+  --inputs <arguments>
+  --block_hash <block_hash>
+  --block_number <block_number>
+  --signature <signature_information>
+  --wallet <wallet_name>
+  --nonce <nonce>
+
+
+
+

Calls a Starknet contract without affecting the state, accepts the following arguments:

+
+
+
    +
  • +

    contract_address* - address of the contract being called

    +
  • +
  • +

    contract_abi* - a path to a JSON file that contains the abi of the contract being called

    +
  • +
  • +

    function_name* - name of the function which is called

    +
  • +
  • +

    arguments* - inputs to the function being called, represented by a list of space-delimited values

    +
  • +
  • +

    block_hash - the hash of the block used as the context for the call operation. If this argument is omitted, the latest block is used

    +
  • +
  • +

    block_number - same as block_hash, but specifies the context block by number or tag

    +
  • +
  • +

    signature_information - list of field elements as described here

    +
  • +
  • +

    wallet_name - the name of the desired wallet, use deploy_account to set-up new accounts in the CLI

    +
  • +
  • +

    nonce - account nonce, only relevant if the call is going through an account

    +
  • +
+
+
+ + + + + +
+ + +
+
Block Tag
+

A block context can be specified via the latest or pending tags, where the former refers to the latest accepted on L2 block and the latter refers to the pending block.

+
+
+
+
+
+
+

starknet declare

+
+
+
+
starknet declare
+--contract <contract_class>
+
+
+
+

Declares a new contract class on Starknet, accepts the following argument:

+
+
+
    +
  • +

    contract_class - path to a JSON file containing the contract’s compiled code

    +
  • +
+
+
+
+
+

starknet deploy

+
+
+
+
starknet deploy
+  --salt <salt>
+  --contract <contract_definition>
+  --inputs <constructor_inputs>
+  --token <token>
+
+
+
+

Deploys a new contract, accepts the following arguments:

+
+
+
    +
  • +

    salt - a seed that is used in the computation of the contract’s address (if not specified, the sequencer will choose a random string)

    +
  • +
  • +

    contract_definition* - path to a JSON file containing the contract’s bytecode and abi (can be obtained by executing starknet-compile)

    +
  • +
  • +

    constructor_inputs* - the arguments given to the contract’s constructor, represented by a list of space-delimited values

    +
  • +
  • +

    token - a token allowing contract deployment (can be obtained by applying here). Only used in the Alpha stages and will be deprecated in the future

    +
  • +
+
+
+ + + + + +
+ + +
+

The deploy token is a temporary measure which will be deprecated when fees are incorporated in the system. Only relevant for Mainnet.

+
+
+
+
+
+
+

starknet deploy_account

+
+
+
+
starknet deploy_account
+  --wallet <wallet_provider>
+  --account <account_name>
+
+
+
+

Deploys an account contract, accepts the following arguments:

+
+
+
    +
  • +

    account_name - the name given to the account, used for managing multiple accounts from the CLI (if not specified, the name +__default__ is used.

    +
  • +
  • +

    wallet_provider* - the path to module which manages the account (responsible for key generation, signing, etc.)

    +
  • +
+
+
+ + + + + +
+ + +
+

Today, the Starknet CLI only works with the OpenZeppelin account contract. +The CLI uses this specific wallet provider. +To use this provider, either set up the following environment variable or pass the same value directly to the wallet_provider parameter:

+
+
+
+
$ export STARKNET_WALLET=starkware.starknet.wallets.open_zeppelin.OpenZeppelinAccount
+
+
+
+
+
+ + + + + +
+ + +
+

Using the built-in wallet providers that are part of the cairo-lang package (starkware.starknet.wallets…​) is not secure (for example, the private key may be kept not encrypted and without backup in your home directory). You should only use them if you’re not overly concerned with losing access to your accounts (for example, for testing purposes).

+
+
+
+
+
+
+

starknet estimate_fee

+
+
+
+
starknet estimate_fee
+    --address <contract_address>
+    --abi <contract_abi>
+    --function <function_name>
+    --inputs <arguments>
+
+
+
+

Returns the fee estimation for a given contract call. Accepts the following arguments:

+
+
+
    +
  • +

    address* - the address of the contract being called

    +
  • +
  • +

    contract_abi* - a path to a JSON file that contains the abi of the contract being called

    +
  • +
  • +

    function_name*- the name of the function being called

    +
  • +
  • +

    arguments* - inputs to the function being called, represented by a list of space-delimited values`

    +
  • +
+
+
+
+
+

starknet estimate_message_fee

+
+
+
+
starknet estimate_message_fee
+    --from_address <sender_address>
+    --to_address <contract_address>
+    --function <function_name>
+    --inputs <arguments>
+
+
+
+

Returns the fee estimation for a given L1 handler application. Accepts the following arguments:

+
+
+
    +
  • +

    from_address* - the L1 address of the sender

    +
  • +
  • +

    to_address* - the L2 address of the recipient

    +
  • +
  • +

    contract_abi* - a path to a JSON file containing the abi of the receiving contract on L2

    +
  • +
  • +

    function_name*- the name of the desired L1 handler

    +
  • +
  • +

    arguments* - inputs to the called handler, represented by a list of space-delimited values

    +
  • +
+
+
+
+
+

starknet get_block

+
+
+
+
starknet get_block
+  --hash <block_hash>
+  --number <block_number>
+
+
+
+

Returns the requested block, exactly one of the following arguments must be given:

+
+
+
    +
  • +

    block_hash - hash of the requested block

    +
  • +
  • +

    block_number - number or tag of the requested block

    +
  • +
+
+
+
+
+

starknet get_code

+
+
+
+
starknet get_code
+  --contract_address <contact_address>
+  --block_hash <block_hash>
+  --block_number <block_number>
+
+
+
+

Returns the ABI and the byte code of the requested contract, accepts the following arguments:

+
+
+
    +
  • +

    contact_address* - address of the requested contract

    +
  • +
  • +

    block_hash - the hash of the block used as the context for the operation. If this argument is omitted, the latest block is used

    +
  • +
  • +

    block_number - same as block_hash, but specifies the context block by number or tag

    +
  • +
+
+
+
+
+

starknet get_storage_at

+
+
+
+
starknet get_storage_at
+  --contract_address <contract_address>
+  --key <key>
+  --block_hash <block_hash>
+  --block_number <block_number>
+
+
+
+

Queries a contract’s storage at a specific key, accepts the following arguments:

+
+
+
    +
  • +

    contract_address *- address of the requested contract

    +
  • +
  • +

    key* - the requested key from the given contract’s storage

    +
  • +
  • +

    block_hash - the hash of the block relative to which the storage will be provided. In case this argument is not given, the latest block is used

    +
  • +
  • +

    block_number - same as block_hash, but specifies the context block by number or tag

    +
  • +
+
+
+
+
+

starknet get_transaction

+
+
+
+
starknet get_transaction --hash <transaction_hash>
+
+
+
+

Returns the requested transaction, expects the following argument:

+
+
+
    +
  • +

    transaction_hash* - hash of the requested transaction

    +
  • +
+
+
+
+
+

starknet get_transaction_receipt

+
+
+
+
starknet get_transaction_receipt --hash <transaction_hash>
+
+
+
+

Returns the receipt associated with the transaction, expects the following argument:

+
+
+
    +
  • +

    transaction_hash* - hash of the requested transaction +starknet invoke +starknet tx_status

    +
  • +
+
+
+
+
+

starknet invoke

+
+
+
+
starknet invoke
+  --address <contract_address>
+  --abi <contract_abi>
+  --function <function_name>
+  --inputs <arguments>
+  --signature <signature_information>
+  --wallet <wallet_name>
+  --nonce <nonce>
+
+
+
+

Sends a transaction to the Starknet sequencer, accepts the following arguments:

+
+
+
    +
  • +

    address* - the address of the contract being called

    +
  • +
  • +

    contract_abi* - a path to a JSON file that contains the abi of the contract being called

    +
  • +
  • +

    function_name*- the name of the function being called

    +
  • +
  • +

    arguments* - inputs to the function being called, represented by a list of space-delimited values

    +
  • +
  • +

    signature_information - list of field elements as described here

    +
  • +
  • +

    wallet_name - the name of the desired wallet, use deploy_account to set-up new accounts in the CLI.

    +
  • +
  • +

    nonce - account nonce, only relevant if the call is going through an account

    +
  • +
+
+
+ + + + + +
+ + +
+

Today, interaction with Starknet may be done either via account or by a direct call. The signature argument can only be provided in the case of a direct call, since otherwise providing the signature is the responsibility of the account module. To use an account you must specify wallet_name, otherwise a direct call will be used (you may also explicitly perform a direct call by adding --no_wallet to the command). Note that in the future direct calls will be deprecated and the only way to interact with the system would be through accounts.

+
+
+
+
+
+
+

starknet tx_status

+
+
+
+
starknet tx_status
+  --hash <transaction_hash>
+  --contract <contract_definition>
+  --error_message
+
+
+
+

Returns the transaction status, accepts the following arguments:

+
+
+
    +
  • +

    transaction_hash* - hash of the requested transaction

    +
  • +
  • +

    contract_definition - path to a JSON file containing the compiled contract to which the transaction was addressed. If supplied, the debug information from the compiled contract will be used to add error locations.

    +
  • +
  • +

    error_message - if specified, only the error message will be returned (or empty response in case the transaction was successful)

    +
  • +
+
+
+

The possible statuses of a transaction are:

+
+
+
    +
  • +

    NOT_RECEIVED

    +
  • +
  • +

    RECEIVED

    +
  • +
  • +

    PENDING

    +
  • +
  • +

    REJECTED

    +
  • +
  • +

    ACCEPTED_ON_L2

    +
  • +
  • +

    ACCEPTED_ON_L1

    +
  • +
+
+
+

For more information, see Transaction lifecycle.

+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/cli/starknet-compiler-options/index.html b/pr-1359/cli/starknet-compiler-options/index.html new file mode 100644 index 0000000000..cdadab65cf --- /dev/null +++ b/pr-1359/cli/starknet-compiler-options/index.html @@ -0,0 +1,1166 @@ + + + + + + Legacy compiler CLI reference :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Legacy compiler CLI reference

+
+
+
+

When the Starknet compiler is installed, you can view this command-line help in a terminal by entering the following command:

+
+
+
+
starknet-compile --help
+
+
+
+
+
+

Usage

+
+
+
+
starknet-compile [-h] [--abi ABI] [--disable_hint_validation]
+                      [--account_contract] [--dont_filter_identifiers] [-v]
+                      [--prime PRIME] [--cairo_path CAIRO_PATH]
+                      [--preprocess] [--output OUTPUT] [--no_debug_info]
+                      [--debug_info_with_source]
+                      [--cairo_dependencies CAIRO_DEPENDENCIES]
+                      [--no_opt_unused_functions]
+                      file [file ...]
+
+
+
+
+
+

Example

+
+
+

The following example compiles the file contract.cairo. It generates two files:

+
+
+ + + + + + + + + +
+contract_compiled.json + +

The contract class. This file contains the bytecode and all other information necessary to execute a contract. For information on contract classes, see Contract classes and instances.

+
+contract_abi.json + +

The contract’s ABI.

+
+
+
+
+
starknet-compile contract.cairo \
+    --output contract_compiled.json \
+    --abi contract_abi.json
+
+
+
+
+
+

Description

+
+
+

A tool to compile Starknet contracts.

+
+
+
+
+

Positional arguments

+
+
+

file

+
+

File names.

+
+
+
+
+
+

Optional arguments

+
+
+

-h, --help

+
+

Show this help message and exit.

+
+
+
+

--abi ABI

+
+

Output the contract’s ABI.

+
+
+
+

--disable_hint_validation

+
+

Disable the hint validation.

+
+
+
+

--account_contract

+
+

Compile as account contract.

+
+
+
+

--dont_filter_identifiers

+
+

Disable the filter-identifiers-optimization.If True, all the identifiers will be kept, instead of just the ones mentioned in hints or 'with_attr' statements.

+
+
+
+

-v, --version

+
+

show program’s version number and exit

+
+
+
+

--prime PRIME

+
+

The size of the finite field.

+
+
+
+

--cairo_path CAIRO_PATH

+
+

A list of directories, separated by ":" to resolve import paths. The full list will consist of directories defined by this argument, followed by the environment variable CAIRO_PATH, the working directory and the standard library path.

+
+
+
+

--preprocess

+
+

Stop after the preprocessor step and output the preprocessed program.

+
+
+
+

--output OUTPUT

+
+

The output file name (default: stdout).

+
+
+
+

--no_debug_info

+
+

Don’t include debug information in the compiled file.

+
+
+
+

--debug_info_with_source

+
+

Include debug information with a copy of the source code.

+
+
+
+

--cairo_dependencies CAIRO_DEPENDENCIES

+
+

Output a list of the Cairo source files used during the compilation as a CMake file.

+
+
+
+

--no_opt_unused_functions

+
+

Disables unused function optimization.

+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/docs-common-content/1.0.0/_images/tools_workflow.jpg b/pr-1359/docs-common-content/1.0.0/_images/tools_workflow.jpg new file mode 100644 index 0000000000..605671c8b4 Binary files /dev/null and b/pr-1359/docs-common-content/1.0.0/_images/tools_workflow.jpg differ diff --git a/pr-1359/glossary/index.html b/pr-1359/glossary/index.html new file mode 100644 index 0000000000..456379d844 --- /dev/null +++ b/pr-1359/glossary/index.html @@ -0,0 +1,1351 @@ + + + + + + Glossary :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Glossary

+
+

account abstraction

+
+
+

Refers to the capability of users to define their own account logic instead of it being dictated by the protocol.

+
+
+
+
+

account contract

+
+
+

An L2 smart contract, with programmable logic, that implements a user account on Starknet. An account contract implements special methods that enable initiating transactions.

+
+
+
See also
+ +
+
+
+
+

API

+
+
+

The Starknet Node API uses the Remote Procedure Call (RPC) architectural style, written in JSON format. For complete information on the Starknet Node API in JSON RPC format, see starknet_api_openrpc.json on Github.

+
+
+
See also
+ +
+
+
+
+

block

+
+
+

An ordered set of Starknet transactions. Blocks are built by the sequencer.

+
+
+

A block has the following identifiers:

+
+
+ ++++ + + + + + + + + +
+block hash + +

A unique identifier that can be used to query and refer to the block.

+
+block number + +

A number representing the location of the block in the sequence of accepted blocks in Starknet.

+
+
+
+
+
+

builtin

+
+
+

An optimized low-level execution unit that is added to the Cairo CPU board to perform predefined computations that are expensive to perform in standard Cairo, including range-checks, Pedersen hash calculations, and ECDSA.

+
+
+
+
+

Cairo step

+
+
+

The smallest unit of execution within the Cairo VM, typically involving mathematical, logical, or control-flow operations that collectively define the behavior of a program.

+
+
+
+
+

Cairo VM

+
+
+

The Cairo Virtual Machine (VM) is software that knows how to execute compiled Cairo byte-code. The result of this execution is the program trace that can then be sent to a STARK prover in order to prove the validity of the instruction expressed in the Cairo code.

+
+
+
+
+

contract class

+
+
+

The definition of a contract. It includes Cairo byte code, entry point names, and everything that defines its semantics.

+
+
+
+
+

contract instance

+
+
+

A deployed contract that corresponds to a class. Only contract instances act as true contracts, in that they have their own storage and can be called by transactions or other contracts.

+
+
+
+
+

fri

+
+
+

The smallest denomination of STRK. 1 fri = 10-18 STRK.

+
+
+
+
+

full node

+
+
+

A machine that runs the Starknet execution protocol. A full node stays synchronized with the latest state of the network, stores past blocks and transactions, and enables users to interact with the network, such as by querying its state or by broadcasting new transactions.

+
+
+
+
+

Layer 1, L1

+
+
+

The base layer of a blockchain network, such as Ethereum, where transactions are directly recorded and validated. It includes the underlying protocol and consensus mechanism that establish the foundational rules for the blockchain.

+
+
+
+
+

Layer 2, L2

+
+
+

Exists on top of an L1 blockchain, such as Ethereum, in order to add value to the L1, by providing features such as massive computation scale without compromising on Ethereum’s composability and security.

+
+
+
+
+

multicall

+
+
+

A single transaction that executes multiple bundled transactions, which are signed once on Starknet. If one call fails, the entire operation is aborted.

+
+
+
+
+

prover

+
+
+

The entity that receives the output of Cairo programs and generates proofs to be verified. In the context of Starknet, the prover generates proofs of the computational integrity of the work performed by the sequencer. It then submits the proof to the verifier on L1, which registers the fact.

+
+
+
See also
+ +
+
+
+
+

RPC

+
+
+

The Starknet RPC API provides clients an interface to retrieve information on the state of the chain and to interact with it, such as by posting transactions or estimating the fee of a transaction before it is sent.

+
+
+
See also
+ +
+
+
+
+

sequencer

+
+
+

A set of services that together receive transactions from the network, put them in order, check their validity, and build blocks.

+
+
+
+
+

SHARP

+
+
+

The Shared Prover (SHARP) is a mechanism used in Starknet that aggregates multiple Cairo programs from different users, each containing different logic. These Cairo programs are then executed together, generating a single proof common to all the programs.

+
+
+
+
+

Sierra

+
+
+

An intermediate representation between Cairo and Casm. Sierra code is then compiled into a Casm program with the property that, for any input, the program’s execution is provable. In particular, it ensures that the execution of a transaction is provable regardless of whether the execution succeeded or was reverted due to an error.

+
+
+
Additional resources
+ +
+
+
+
+

STARK

+
+
+

A proof system that uses cryptography to provide polylogarithmic verification resources and proof size, with minimal and post-quantum-secure assumptions.

+
+
+
+
+

Starknet L1 Core Contract

+
+
+

A smart contract deployed on Ethereum. Its address is 0xc662c410c0ecf747543f5ba90660f6abebd9c8c4. It defines the state of Starknet + by storing:

+
+
+
    +
  • +

    The commitment to the L2 state.

    +
  • +
  • +

    The Starknet OS program hash – effectively defines the version of Starknet the network is running.

    +
  • +
+
+
+

The committed state on the L1 Core Contract acts as the consensus mechanism of Starknet, that is, the system is secured by the L1 Ethereum consensus. In addition to maintaining the state, the Starknet L1 Core Contract is the main hub of operations for Starknet on L1. Specifically:

+
+
+
    +
  • +

    It stores the list of allowed verifier contracts that can verify state update transactions

    +
  • +
  • +

    It deals with cross-layer interaction between L1 and L2.

    +
  • +
+
+
+
+
+

Starknet

+
+
+

A permissionless Validity-Rollup, also known as a zero-knowledge rollup (ZK rollup) for Ethereum. Starknet is a Layer 2 (L2) blockchain, enabling any dApp to achieve massive computation scale without compromising Ethereum’s composability and security.

+
+
+

Starknet aims to achieve secure, low-cost transactions and high performance by using the STARK cryptographic proof system. Starknet contracts and the Starknet OS are written in Cairo, a custom-built and specialized programming language.

+
+
+
+
+

Starknet OS

+
+
+

The Cairo program that, upon receiving a set of transaction as input, executes the state transition. For more information, see Starknet state. The integrity of this computation is what is actually proven and verified.

+
+
+
+
+

Starknet state

+
+
+

The set of all the contracts' code and all the memory slots and their values, in every contract’s storage.

+
+
+
See also
+ +
+
+
+
+

transaction

+
+
+

A transaction can be seen as a message containing a set of instructions that describe a state transition. The Starknet protocol has the following types of transactions, which affect different parts of the state:

+
+
+
    +
  • +

    DECLARE

    +
  • +
  • +

    INVOKE

    +
  • +
  • +

    DEPLOY_ACCOUNT

    +
  • +
+
+
+
See also
+ +
+
+
+
+

state diff

+
+
+

The data describing the difference between two states. It contains information on every contract whose storage was updated and additional information on contract deployments.

+
+
+
+
+

trace cell

+
+
+

A unit of measurement of proving complexity. In the STARK protocol, a computation is translated into an execution trace that must satisfy a collection of constraints. Every Cairo step translates to ~50 trace cells.

+
+
+
+
+

verifier

+
+
+

A set of L1 smart contracts whose purpose is to verify STARK proofs submitted by the Shared Prover (SHARP).

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/index.html b/pr-1359/index.html new file mode 100644 index 0000000000..174809286e --- /dev/null +++ b/pr-1359/index.html @@ -0,0 +1,1272 @@ + + + + + + Overview :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Overview

+
+
+
+

Starknet is a permissionless Validity-Rollup, also known as a zero-knowledge rollup (ZK rollup) for Ethereum. As a Layer 2 (L2) blockchain, Starknet enables any dApp to achieve massive computation scale without compromising on Ethereum’s composability +and security.

+
+
+

Starknet aims to achieve secure, low-cost transactions and high performance by using the STARK cryptographic proof system. Starknet contracts and the Starknet OS are written in Cairo, a custom-built and +specialized programming language.

+
+
+
+ + +
+

Contribute to the Starknet docs

+
+
+

Want to contribute to Starknet documentation? Get started here:

+
+
+ +
+ + + + + + + +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/notational-conventions/index.html b/pr-1359/notational-conventions/index.html new file mode 100644 index 0000000000..2f6bb3058a --- /dev/null +++ b/pr-1359/notational-conventions/index.html @@ -0,0 +1,1068 @@ + + + + + + Notational conventions :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Notational conventions

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NotationExplanation

bold

+
    +
  • +

    Indicates GUI elements, such as button text or menu names.

    +
  • +
  • +

    Highlights text for added importance or to draw attention to it.

    +
  • +
+

italics

Indicates the first occurrence of a new term, titles of documents or topics, and user-supplied or variable values.

monospace

Indicates code, commands, file paths, or other text that should be displayed in a fixed-width font to differentiate it from the surrounding text.

<item>

Indicates user-supplied or variable values in code, commands, file paths, or other text that should be displayed in a monospace font.

+

Can also refer to generic types. For example: List<felt252>

\(\text{string_in_math_notation}\)

A normal (non-italics) serif typeface indicates a fixed element or constant specified in mathematical notation.

…​

An ellipsis indicates that the preceding element can repeat multiple times.

[item, …​]

+

Square brackets indicate that the enclosed items are optional. Also can indicate a range of numbers, where the enclosed items are included. For example, in [0,100], 0 and 100 are part of the specified range.

+
+

(item1, item2)

+

Parentheses indicate a range of numbers, where the enclosed items are not included. For example, in (0,100), 0 and 100 are not part of the specified range.

item1 | item2

A vertical bar (|) indicates a choice between item1 and item2.

+

{item1, item2}

+

Curly brackets indicates a list or set of possible values.

/

A forward slash indicates a division operator or a path separator in URLs and file paths.

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/quick-start/_images/declaration-process.png b/pr-1359/quick-start/_images/declaration-process.png new file mode 100644 index 0000000000..9dc8d408c8 Binary files /dev/null and b/pr-1359/quick-start/_images/declaration-process.png differ diff --git a/pr-1359/quick-start/_images/deployment-process.png b/pr-1359/quick-start/_images/deployment-process.png new file mode 100644 index 0000000000..bb80e30fc3 Binary files /dev/null and b/pr-1359/quick-start/_images/deployment-process.png differ diff --git a/pr-1359/quick-start/_images/init_owner_field.png b/pr-1359/quick-start/_images/init_owner_field.png new file mode 100644 index 0000000000..2f9989f0af Binary files /dev/null and b/pr-1359/quick-start/_images/init_owner_field.png differ diff --git a/pr-1359/quick-start/_images/remix-starknet-icon.png b/pr-1359/quick-start/_images/remix-starknet-icon.png new file mode 100644 index 0000000000..6f2d5145f0 Binary files /dev/null and b/pr-1359/quick-start/_images/remix-starknet-icon.png differ diff --git a/pr-1359/quick-start/_images/remix_file_explorer.png b/pr-1359/quick-start/_images/remix_file_explorer.png new file mode 100644 index 0000000000..21ab525380 Binary files /dev/null and b/pr-1359/quick-start/_images/remix_file_explorer.png differ diff --git a/pr-1359/quick-start/declare-a-smart-contract/index.html b/pr-1359/quick-start/declare-a-smart-contract/index.html new file mode 100644 index 0000000000..28714d2afa --- /dev/null +++ b/pr-1359/quick-start/declare-a-smart-contract/index.html @@ -0,0 +1,1320 @@ + + + + + + Declaring a smart contract :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Declaring a smart contract

+
+

Prerequisites

+
+
+

Ensure Starkli and Scarb are installed correctly

+
+

Ensure that the below commands are working properly on your system.

+
+
+
+
starkli --version
+scarb --version
+
+
+
+

If either of the above commands fails, see Setting up your environment.

+
+
+
+
+
+

Introduction

+
+
+

Deploying a smart contract in Starknet requires two steps:

+
+
+
    +
  • +

    Declaring the class of your contract, i.e. sending your contract’s code to the network.

    +
  • +
  • +

    Deploying a contract, i.e. creating an instance of the code you previously declared.

    +
  • +
+
+
+
+declaration process +
+
+
+ + + + + +
+ + +
+

If you require a smart contract for testing, you can use this sample contract, lib.cairo, from the Starknet Book.

+
+
+
+
+

What is Declaration?

+
+

Declaration is the process of submitting your contract’s code to the Starknet network, making it available for future deployments. It’s a one-time process for each unique contract code. Think of declaration as registering a blueprint for your contract with the network.

+
+
+

We can draw a parallel with C++ programming:

+
+
+
    +
  • +

    Writing the contract code is similar to defining a class in C++.

    +
  • +
  • +

    Declaring the contract is analogous to compiling that class into object code.

    +
  • +
  • +

    Deploying an instance of the contract is like creating an object of that class.

    +
  • +
+
+
+

Another parallel with Java:

+
+
+
    +
  • +

    Writing the contract is like writing a Java class.

    +
  • +
  • +

    Declaring is similar to compiling the Java class into bytecode.

    +
  • +
  • +

    Deploying is like instantiating an object of that class in the JVM.

    +
  • +
+
+
+

Just as you can create multiple objects from a single class in C++, you can deploy multiple instances of a declared contract in Starknet.

+
+
+
+

Why Separate Declaration and Deployment?

+
+

Separating declaration from deployment offers several advantages:

+
+
+
    +
  • +

    Gas Optimization: The contract code is stored on the network only once, reducing gas costs for subsequent deployments.

    +
  • +
  • +

    Reusability: Multiple instances of the same contract can be deployed without repeatedly sending the full code.

    +
  • +
  • +

    Version Control: It allows for better management of contract versions across different deployments.

    +
  • +
+
+
+
+
+
+

Compiling a smart contract

+
+
+

You can compile a smart contract using the Scarb compiler.

+
+
+

To compile a smart contract, create a directory containing a Scarb.toml file and a subdirectory named src containing your contract source code.

+
+
+

Add the following code to the Scarb.toml file:

+
+
+
+
[package]
+name = "contracts"
+version = "0.1.0"
+
+[dependencies]
+starknet = ">=2.2.0"
+
+[[target.starknet-contract]]
+sierra = true
+
+
+
+

Navigate into the newly created directory:

+
+
+
+
cd <dir_name>
+
+
+
+

Run the following command:

+
+
+
+
scarb build
+
+
+
+

The compiled contract will be saved in the target/dev/ directory.

+
+
+

The contract is now compiled and ready to be deployed. Next you will need to declare an RPC provider within your contract.

+
+
+
+
+

Setting an RPC provider

+
+
+

To interact with the Starknet network, you need to set an RPC endpoint within Starkli.

+
+
+

The following are the RPC providers available for Starknet:

+
+ ++++ + + + + + + + + + + + + + + + + +
Provider nameDescription

Infura or Alchemy

Use a provider like Infura or Alchemy.

Custom configuration

Set up your own node and use the RPC provider of your node. More information on this can be found within the Starknet Book.

+
+

For demonstration purposes, the Starknet Sequencer’s Gateway is used in the below steps.

+
+
+
+
+

Declaring a smart contract

+
+
+

A contract can be declared on Starknet using the following command:

+
+
+
+
starkli declare target/dev/<NAME>.json --network=sepolia --compiler-version=2.1.0
+
+
+
+ + + + + +
+ + +
+

The --network flag is used to specify the network you want to use, it could also be mainnet for example.

+
+
+

The --compiler-version flag is used to specify the version of the compiler you want to use. Starkli is currently running on version 2.6.x of the compiler.

+
+
+
+
+

You can find the compiler version supported by Starkli by running:

+
+
+
+
starkli declare --help
+
+
+
+

In the --compiler-version flag you will see possible versions of the compiler:

+
+
+
+
--compiler-version <COMPILER_VERSION>
+          Statically-linked Sierra compiler version [possible values: 2.0.1, 2.1.0]
+
+
+
+

However, the Scarb compiler version may be 2.2.0, you can find this out by running:

+
+
+
+
scarb --version
+
+
+
+

This is because Starkli and Scarb are not always in sync.

+
+
+

In this case you would need to use the compiler version that Starkli is using by installing a previous version of Scarb. See the Scarb github repo for more detail.

+
+
+

You can do this by running the following command for installing Scarb version 0.6.1:

+
+
+
+
curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh -s -- -v 0.6.1
+
+
+
+

If you were using a provider like Infura or Alchemy, the declaration command would look like this:

+
+
+
+
starkli declare target/dev/contracts_Ownable.sierra.json \
+    --rpc=https://starknet-sepolia.infura.io/v3/<API_KEY> \
+    --compiler-version=2.6.0
+
+
+
+
+
+

Expected result

+
+
+

The result of the declaration command is a contract class hash:

+
+
+
+
Class hash declared: <CLASS_HASH>
+
+
+
+

This hash is the identifier of the contract class in Starknet. You can think of it as the address of the contract class. You can use a block explorer like StarkScan to see the contract class hash in the blockchain.

+
+
+

Using Starkli: You can use the following command to retrieve the contract class by its hash:

+
+
+
+
starkli class-by-hash <CLASS_HASH> --network=sepolia
+
+
+
+

If the contract is successfully declared, this command will return the contract class details.

+
+
+

If the contract you are declaring has previously been declared by someone else, you will get an output like this:

+
+
+
+
Not declaring class as its already declared. Class hash: <CLASS_HASH>
+
+
+
+

In this case, you can still use the methods above to verify the existing declaration.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/quick-start/deploy-a-smart-contract/index.html b/pr-1359/quick-start/deploy-a-smart-contract/index.html new file mode 100644 index 0000000000..4c021a6274 --- /dev/null +++ b/pr-1359/quick-start/deploy-a-smart-contract/index.html @@ -0,0 +1,1178 @@ + + + + + + Deploying a smart contract :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Deploying a smart contract

+
+

Prerequisites

+
+
+

Ensure Starkli and Scarb are installed correctly

+
+

Ensure that the below commands are working properly on your system.

+
+
+
+
starkli --version
+scarb --version
+
+
+
+

If either of the above commands fail, please visit Setting up your environment.

+
+
+
+
+
+

Introduction

+
+
+

Deploying a smart contract in Starknet requires two steps:

+
+
+
    +
  • +

    Declaring the class of your contract, i.e. sending your contract’s code to the network.

    +
  • +
  • +

    Deploying a contract, i.e. creating an instance of the code you previously declared.

    +
  • +
+
+
+
+deployment process +
+
+
+

Deployment is the process of creating a live, functional instance of your declared smart contract on the Starknet network. It’s like bringing a blueprint to life by constructing an actual building.

+
+
+

Let’s use a factory production analogy:

+
+
+
    +
  • +

    Declaration is like creating a product blueprint and registering it with the factory.

    +
  • +
  • +

    Deployment is like using that blueprint to manufacture an actual product on the assembly line.

    +
  • +
  • +

    Each deployed contract is a unique product instance, even though they’re all based on the same blueprint.

    +
  • +
+
+
+
+
+

Deploying a smart contract

+
+
+

Deploying a smart contract involves instantiating it on Starknet. The deployment command requires the class hash of the smart contract and any arguments expected by the constructor.

+
+
+

For our example, the constructor expects an address to assign as the owner:

+
+
+
+
starkli deploy \
+    <CLASS_HASH> \
+    <CONSTRUCTOR_INPUTS> \
+    --network=sepolia
+
+
+
+

With the class hash and constructor inputs, the command looks like this:

+
+
+
+
starkli deploy \
+    0x00e68b4b07aeecc72f768b1c086d9b0aadce131a40a1067ffb92d0b480cf325d \
+    0x02cdAb749380950e7a7c0deFf5ea8eDD716fEb3a2952aDd4E5659655077B8510 \
+    --network=sepolia
+
+
+
+

Think of <CLASS_HASH> as the product code in our factory analogy, and <CONSTRUCTOR_INPUTS> as the specific settings for this product instance.

+
+
+
+
+

Expected result

+
+
+

After running the command and adding your password, you will see an output similar to this:

+
+
+
+
Deploying class 0x00e68b4b07aeecc72f768b1c086d9b0aadce131a40a1067ffb92d0b480cf325d with salt 0x04bc3fc2284c8e41fb3d2a37bb0354fd0506131cc77a8c91e4e67ce3aed1d19e...
+The contract will be deployed at address 0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e
+Contract deployment transaction: 0x0086972e7463d5673d8b553ae521ec2df974a97c2ce6aafc1d1c20d22c6b96c6
+Contract deployed: 0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e
+
+
+
+

The smart contract has now been deployed to Starknet.

+
+
+

Verifying the Deployment

+
+

To verify your contract deployment:

+
+
+
    +
  • +

    Using Starkli: +You can use the following command to retrieve the class hash of your deployed contract:

    +
  • +
+
+
+
+
starkli class-hash-at <CONTRACT_ADDRESS> --network=sepolia
+
+
+
+
    +
  • +

    Using a Block Explorer:

    +
  • +
+
+
+

You can use block explorers like https://voyager.online/ or https://starkscan.co/ to search for the contract address.

+
+
+ + + + + +
+ + +
+

Remember to select the Sepolia testnet in these block explorers when searching for your deployed contract.

+
+
+
+
+

Your smart contract is now live on the Starknet network, ready to interact with users and other contracts.

+
+
+
+

Potential deployment errors

+
+

When using Starknet SDKs like starknet.js, starknet.py, or starknet-rs, you might encounter the following error during deployment:

+
+
+
+
Requested ContractAddress(PatriciaKey(<CONTRACT_ADDRESS>)) is unavailable for deployment.
+
+
+
+

This error means that a contract is already deployed at the computed address. The address is a function of the class_hash, deployer_address (if specified), salt, and constructor_calldata_hash.

+
+
+

To resolve this issue, make sure to provide a different salt value. This ensures you’re not attempting to override an already deployed contract.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/quick-start/deploy-interact-with-a-smart-contract-remix/index.html b/pr-1359/quick-start/deploy-interact-with-a-smart-contract-remix/index.html new file mode 100644 index 0000000000..3a21164d7c --- /dev/null +++ b/pr-1359/quick-start/deploy-interact-with-a-smart-contract-remix/index.html @@ -0,0 +1,1520 @@ + + + + + + Deploying and interacting with a Starknet smart contract with Remix :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Deploying and interacting with a Starknet smart contract with Remix

+
+
+
+ + + + + +
+ + +
+

This topic previously appeared in the Starknet Book.

+
+
+
+
+

To compile, deploy, and interact with our smart contract, use the Starknet Remix plugin. This tool enables you to start to develop for Starknet without the need for any local installations on your machine.

+
+
+
+
+

Setting up your environment in Remix

+
+
+
    +
  1. +

    Go to the Remix IDE website with the Starknet plugin activated.

    +
  2. +
  3. +

    Click the File Explorer File Explorer tab to review the details of the example project.

    +
  4. +
  5. +

    Click the Starknet Starknet tab, and click the Settings. Select the latest version of Cairo available in Remix.

    +
  6. +
  7. +

    In the File explorer, open the Scarb.toml file to verify the version of your project. Ensure it matches the version specified originally, and correct any discrepancies, if necessary.

    +
  8. +
+
+
+
+
+

Customizing your environment for the Ownable contract

+
+
+ + + + + +
+ + +
+

For this tutorial, a default example project is provided. Modify or remove certain files and directories as needed.

+
+
+
+
+
    +
  1. +

    Rename the root directory to ownable. In your Scarb.toml, under the [package] section, set the name to ownable.

    +
  2. +
  3. +

    Under src/, delete the balance.cairo and forty_two.cairo files, if they exist.

    +
  4. +
  5. +

    Open lib.cairo and delete all its contents.

    +
  6. +
+
+
+
+
+

Exploring the ownable Starknet smart contract

+
+
+

Explore the Example Ownable contract, crafted in Cairo for Starknet. It includes:

+
+
+
    +
  • +

    An ownership system.

    +
  • +
  • +

    A method to transfer ownership.

    +
  • +
  • +

    A method to check the current owner.

    +
  • +
  • +

    An event notification for ownership changes.

    +
  • +
+
+
+

Example: ownable Cairo contract

+
+
+
use starknet::ContractAddress; (1)
+
+#[starknet::interface]
+trait OwnableTrait<T> { (1)
+    fn transfer_ownership(ref self: T, new_owner: ContractAddress); (2)
+    fn get_owner(self: @T) -> ContractAddress; (2)
+}
+
+#[starknet::contract]
+mod Ownable {
+    use super::ContractAddress;
+    use starknet::get_caller_address;
+
+    #[event]
+    #[derive(Drop, starknet::Event)]
+    enum Event {
+      OwnershipTransferred: OwnershipTransferred, (3)
+    }
+
+    #[derive(Drop, starknet::Event)]
+    struct OwnershipTransferred { (3)
+        #[key]
+        prev_owner: ContractAddress,
+        #[key]
+        new_owner: ContractAddress,
+    }
+
+    #[storage]
+    struct Storage { (4)
+        owner: ContractAddress,
+    }
+
+    #[constructor]
+    fn constructor(ref self: ContractState, init_owner: ContractAddress) { (5)
+        self.owner.write(init_owner);
+    }
+
+    #[abi(embed_v0)]
+    impl OwnableImpl of super::OwnableTrait<ContractState> {
+        fn transfer_ownership(ref self: ContractState, new_owner: ContractAddress) {
+            self.only_owner();
+            let prev_owner = self.owner.read();
+            self.owner.write(new_owner);
+            self.emit(Event::OwnershipTransferred(OwnershipTransferred {
+                prev_owner: prev_owner,
+                new_owner: new_owner,
+            }));
+        }
+
+        fn get_owner(self: @ContractState) -> ContractAddress {
+            self.owner.read()
+        }
+    }
+
+    #[generate_trait]
+    impl PrivateMethods of PrivateMethodsTrait {
+        fn only_owner(self: @ContractState) { (6)
+            let caller = get_caller_address();
+            assert(caller == self.owner.read(), 'Caller is not the owner');
+        }
+    }
+}
+
+
+
+
+

Contract component breakdown

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Dependencies and Interface:
+starknet::ContractAddress: Represents a Starknet contract address. +OwnableTrait: Defines essential functions for transferring and retrieving ownership.
2External Functions: Contains functions for transferring ownership and fetching information about the current owner.
3Events: OwnershipTransferred indicates changes in ownership, providing details about the previous and new owners.
4Storage: Stores the contract’s state, including the address of the current owner.
5Constructor: Sets up the contract by assigning an initial owner.
6Private Methods: only_owner validates if the caller is the current owner.
+
+
+
+
+
+

Compiling the contract

+
+
+

To compile using Remix:

+
+
+
    +
  1. +

    Click the File Explorer File Explorer tab, open the lib.cairo file and insert the code from Example: ownable Cairo contract.

    +
  2. +
  3. +

    Click the Starknet Starknet tab, then click Home.

    +
  4. +
  5. +

    Under (1) Compile, click Compile lib.cairo.

    +
  6. +
  7. +

    Grant the necessary permissions when prompted. Select Remember my choice for a smoother compilation process in the future.

    +
  8. +
+
+
+

The compilation process creates an artifacts directory containing the compiled contract in two formats: a Sierra file, in JSON format, and a Casm file. For Starknet deployment, Remix uses the Sierra file.

+
+
+
+
+

Deploying your contract on the development network (devnet)

+
+
+

Deploying a smart contract in Starknet requires two high-level steps:

+
+
+
    +
  1. +

    Declare the class of your contract, that is, send your contract’s code to the network.

    +
    +

    When you declare the contract class, you establish an initial owner by calling the class’s constructor function.

    +
    +
  2. +
  3. +

    Deploy an instance of the contract class.

    +
  4. +
+
+
+

This tutorial uses a development network (devnet) to deploy your smart contract. A devnet is a Starknet instance that you run as a local node. A devnet enables much quicker development than is possible using testnet, as well as providing privacy prior to launching on testnet.

+
+
+
Declaring the contract class
+
    +
  1. +

    Select the network by clicking the Starknet tab, and then clicking the Remote Devnet menu.

    +
  2. +
  3. +

    Under Devnet account selection, open the menu to view a list of accounts specific to the designated devnet.

    +
  4. +
  5. +

    Select a devnet account from the list and note its address for later use.

    +
  6. +
  7. +

    Click the Declare lib.cairo button.

    +
    +

    Remix’s terminal provides various logs with important details such as:

    +
    +
    +
    +
    +
      +
    • +

      transaction_hash: This unique hash identifies the transaction and can be used to track its status.

      +
    • +
    • +

      class_hash: Similar to an identifier, the class hash contains the definition of the smart contract.

      +
    • +
    +
    +
    +
    +
    +
    Remix terminal output after declaring the ownable contract
    +
    +
    ------------------------ Declaring contract: lib.cairo ------------------------
    +{
    +  "transaction_hash": "0x36dabf43f4962c97cf67ba132fb520091f268e7e33477d77d01747eeb0d7b43",
    +  "class_hash": "0x540779cd109ad20f46cb36d8de1ce30c75469862b4dc75f2f29d1b4d1454f60"
    +}
    +---------------------- End Declaring contract: lib.cairo ----------------------
    +
    +
    +
  8. +
+
+
+

After Remix declares the contract class, the Declare button says Declared lib.cairo.

+
+
+

Now you’re ready to deploy an instance of the contract class.

+
+
+
Deploying a contract instance
+
    +
  1. +

    Paste the Devnet account address you used into the init_owner variable.

    +
    +

    init owner field

    +
    +
  2. +
  3. +

    Click Deploy.

    +
  4. +
+
+
+

After deployment, Remix’s terminal displays various logs, including a transaction receipt, containing important details, such as:

+
+
+
    +
  • +

    transaction_hash: This unique hash identifies the transaction and can be used to track its status.

    +
  • +
  • +

    contract_address: The address of the deployed contract. You can use this address to interact with your contract.

    +
  • +
  • +

    data: Contains the init_owner address provided to the constructor.

    +
  • +
+
+
+
Remix terminal output after deploying an instance of the Ownable class in lib.cairo
+
+
------------------------ Deploying contract: lib.cairo ------------------------
+
+{
+  "transaction_hash": "0x624f5b9f57e53f6b5b62e588f0f949442172b3ad5d04f0827928b4d12c2fa58",
+  "contract_address": [
+    "0x699952dc736661d0ed573cd2b0956c80a1602169e034fdaa3515bfbc36d6410"
+  ]
+    ...
+  "data": [
+        "0x6b0ee6f418e47408cf56c6f98261c1c5693276943be12db9597b933d363df",
+         ...
+      ]
+    ...
+}
+---------------------- End Deploying contract: lib.cairo ----------------------
+
+
+
+
+
+

Interacting with the contract

+
+
+

Now that the contract is operational on the development network, you can start interacting with it on the Starknet tab, under + (3) Interact.

+
+
+

Identifying the owner of the contract instance

+
+
    +
  • +

    Under Read you should see the get_owner() function. Click the Call button. The function doesn’t require any arguments so the calldata field remains empty. This function reads data, so its invocation is referred to as a call.

    +
  • +
+
+
+

The terminal displays the output, showing the owner’s address, which you provided during the contract’s deployment within the calldata for the constructor:

+
+
+
+
------------------- Calling get_owner ------------------------
+{
+  "resp": {
+    "result": [
+      "0x6b0ee6f418e47408cf56c6f98261c1c5693276943be12db9597b933d363df"
+    ]
+  },
+  "contract": "lib.cairo",
+  "function": "get_owner"
+}
+------------------- End calling get_owner --------------------
+
+
+
+

This call doesn’t consume gas because the function doesn’t modify the contract’s state.

+
+
+
+

Transferring ownership of the contract instance

+
+
    +
  1. +

    Under (3) Interact, select Write, where functions that alter the contract’s state are listed.

    +
  2. +
  3. +

    Select the transfer_ownership() function, which requires providing the new owner address as input.

    +
  4. +
  5. +

    Fill in the new_owner field with any Devnet address other than the one you used to deploy the contract.

    +
    + + + + + +
    + + +
    +

    Under Devnet account selection, open the menu, select a Devnet account from the list, and copy its address.

    +
    +
    +
    +
  6. +
  7. +

    Click the Call button. The terminal displays the transaction hash indicating the change in the contract’s state. Because this interaction is an INVOKE transaction, and it modifies the contract’s state. An INVOKE transaction requires the signature of the account executing the function.

    +
    +

    For INVOKE transactions, the terminal logs include a finality_status parameter indicating the outcome. A status of ACCEPTED_ON_L2 indicates approval by the Sequencer, the entity responsible for receiving and processing transactions, indicating inclusion in an upcoming block. Conversely, a REJECTED status indicates that the Sequencer did not approve the transaction, preventing its inclusion in the next block. Typically, transactions of this nature are approved, resulting in a modification of the contract’s state.

    +
    +
  8. +
+
+
+
+
---------- Invoke transfer_ownership transaction receipt ----------------
+{
+  "resp": {
+    "transaction_hash": "0x5495d56633745aa3b97bdb89c255d522e98fd2cb481974efe898560839aa472"
+  },
+  "contract": "lib.cairo",
+  "function": "get_owner"
+}
+----------End Invoke transfer_ownership transaction receipt -------------
+
+
+
+
+
+
+

Deployment on Starknet testnet

+
+
+

After testing your smart contract on a development network, the next step is deploying it onto the Starknet testnet. The Starknet testnet is a public platform accessible to all, providing an excellent environment for testing smart contracts and encouraging collaboration among developers.

+
+
+

Setting up a smart wallet and a Starknet account on testnet

+
+

Before deploying your smart contract on Starknet, it’s crucial to address transaction costs. While deploying on the Starknet testnet is free, having an operational smart wallet account is essential. You can set up a smart wallet and a Starknet account using either of the following platforms:

+
+
+ +
+
+

Both options offer robust Starknet wallets with advanced security measures and enhanced accessibility features enabled by the capabilities of the Cairo VM.

+
+
+
Here’s how to set up your smart wallet:
+
    +
  1. +

    Install the recommended browser extension corresponding to your chosen wallet.

    +
  2. +
  3. +

    Follow the instructions provided by your wallet provider to deploy your account on testnet.

    +
  4. +
  5. +

    Use the Starknet Faucet to fund your account.

    +
  6. +
  7. +

    Execute the deployment of your account onto the network, typically completed within approximately 10 seconds.

    +
  8. +
+
+
+

Once the setup is complete, you are primed to deploy your smart contracts onto the Starknet testnet.

+
+
+
+

Deployment and Interaction

+
+
    +
  1. +

    Proceed as per the aforementioned deployment steps.

    +
  2. +
  3. +

    Within the Environment selection tab, Select Wallet.

    +
  4. +
  5. +

    Select your Starknet account and proceed with the deployment and interaction processes for your contract.

    +
  6. +
+
+
+

You can monitor transaction hashes and addresses by using various Starknet block explorers such as:

+
+
+ +
+
+

These block explorers offer a graphical depiction of transactions and modifications to the contract state. Noteworthy is the visibility provided when altering contract ownership through the transfer_ownership() function, as the emitted event by the contract becomes observable within the block explorer. This mechanism serves as a potent means to monitor contractual events.

+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/quick-start/environment-setup/index.html b/pr-1359/quick-start/environment-setup/index.html new file mode 100644 index 0000000000..8282273e9b --- /dev/null +++ b/pr-1359/quick-start/environment-setup/index.html @@ -0,0 +1,1200 @@ + + + + + + Setting up your environment :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Setting up your environment

+
+
+
+

In order to interact with Starknet and compile Cairo code, you need to install several tools.

+
+
+

The following tools are recommended to begin developing on Starknet:

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
Tool nameDescriptionDocumentationCode Repository

Starkli

A command-line interface that allows you to interact with Starknet.

book.starkli.rs

github.com/xJonathanLEI/starkli

Scarb

A build toolchain and package manager for Cairo and Starknet ecosystems.

docs.swmansion.com/scarb

github.com/software-mansion/scarb

+
+
+
+

Installing Starkli

+
+
+

The steps for installing Starkli and upgrading Starkli are identical.

+
+
+
Procedure
+
    +
  1. +

    Install Starkliup, the installer for the Starkli environment:

    +
    +
    +
    curl https://get.starkli.sh | sh
    +
    +
    +
    +

    Starkliup should now be installed.

    +
    +
  2. +
  3. +

    Restart the terminal.

    +
  4. +
  5. +

    Install Starkli:

    +
    +
    +
    starkliup
    +
    +
    +
    +

    Starkli should now be installed.

    +
    +
  6. +
  7. +

    Restart the terminal and run the following command to verify the installation:

    +
    +
    +
    starkli --version
    +
    +
    +
    +

    Starkli prints the current version.

    +
    +
  8. +
+
+
+
+
+

Setting environment variables for Starkli

+
+
+

For the majority of flags available on Starkli you can set environment variables to make the commands shorter and easier to manage.

+
+
+

Setting environment variables for Starkli significantly simplifies command execution and management, thereby enhancing efficiency, readability, and control when using Starkli.

+
+
+

The two primary environment variables that are vital for effective usage of Starkli’s CLI are:

+
+
+ ++++ + + + + + + + + +
+STARKNET_ACCOUNT + +

The location of the Account Descriptor file.

+
+STARKNET_KEYSTORE + +

The location of the keystore file for the Signer.

+
+
+
+

Set these environment variables as follows:

+
+
+
+
export STARKNET_ACCOUNT=~/.starkli-wallets/deployer/account.json
+export STARKNET_KEYSTORE=~/.starkli-wallets/deployer/keystore.json
+
+
+
+
+
+

Installing Scarb

+
+
+

Scarb is compatible with macOS, Linux, and Windows operating systems.

+
+
+

MacOS and Linux installation

+
+

The steps for installing Scarb and upgrading Scarb are identical.

+
+
+
Procedure
+
    +
  1. +

    Open a terminal and execute the following command:

    +
    +
    +
    curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh
    +
    +
    +
  2. +
  3. +

    Restart the terminal and run the following command to verify the installation:

    +
    +
    +
    scarb --version
    +
    +
    +
  4. +
+
+
+

Scarb should now be installed.

+
+
+
+

Windows installation

+
+

Scarb’s installation on Windows requires manual setup.

+
+
+
Procedure
+
    +
  1. +

    Follow the steps in the Scarb documentation.

    +
  2. +
  3. +

    Restart the terminal and run the following command to verify the installation:

    +
    +
    +
    scarb --version
    +
    +
    +
  4. +
+
+
+

Scarb should now be installed.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/quick-start/interact-with-a-smart-contract/index.html b/pr-1359/quick-start/interact-with-a-smart-contract/index.html new file mode 100644 index 0000000000..f96c612f93 --- /dev/null +++ b/pr-1359/quick-start/interact-with-a-smart-contract/index.html @@ -0,0 +1,1101 @@ + + + + + + Interacting with a smart contract with Starkli :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Interacting with a smart contract with Starkli

+
+

Prerequisites

+
+
+

Ensure Starkli and Scarb are installed correctly

+
+

Ensure that the below commands are working properly on your system.

+
+
+
+
starkli --version
+scarb --version
+
+
+
+

If either of the above commands fail, see Setting up your environment.

+
+
+
+
+
+

Introduction

+
+
+

Starkli enables interaction with smart contracts via two primary methods:

+
+
+
    +
  • +

    call for read-only functions.

    +
  • +
  • +

    invoke for write functions that modify the state.

    +
  • +
+
+
+
+
+

Calling a function

+
+
+

The call command allows querying a smart contract function without sending a transaction.

+
+
+

As an example you can use the get_owner function which doesn’t expect any arguments and returns the address of the current owner:

+
+
+
+
starkli call \
+    0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e \
+    get_owner --network=sepolia
+
+
+
+

This will return the address that we passed to the constructor during deployment:

+
+
+
+
[
+    "0x02cdab749380950e7a7c0deff5ea8edd716feb3a2952add4e5659655077b8510"
+]
+
+
+
+
+
+

Invoking a function

+
+
+

To modify the state of the smart contract, use the invoke command. Unlike the call command, invoke submits a transaction to the network.

+
+
+

In this example, we’ll invoke the transfer_ownership function to transfer the ownership from our deployer address to a different smart wallet address:

+
+
+
+
starkli invoke \
+    0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e \
+    transfer_ownership \
+    0x011088d3cbe4289bc6750ee3a9cf35e52f4fa4e0ac9f42fb0b62e983139e135a \
+    --network=sepolia
+
+
+
+

After the transaction is accepted on L2, you can confirm the state transition by calling the get_owner function again:

+
+
+
+
starkli call \
+    0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e \
+    get_owner \
+    --network=sepolia
+
+
+
+

The get_owner function now returns the new owner address, confirming the successful ownership transfer.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/quick-start/set-up-an-account/index.html b/pr-1359/quick-start/set-up-an-account/index.html new file mode 100644 index 0000000000..e0819a5a44 --- /dev/null +++ b/pr-1359/quick-start/set-up-an-account/index.html @@ -0,0 +1,1289 @@ + + + + + + Setting up an account :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Setting up an account

+
+
+
+ + + + + +
+ + +
+

This guide shows you how to set up a Starknet account and wallet in the context of a smart contract deployment.

+
+
+

For information on creating a Starknet wallet as an end user, see Getting Started Using Starknet: Setting Up a Starknet Wallet.

+
+
+
+
+
+
+

Prerequisites

+
+
+
    +
  • +

    Starkli is installed correctly. Ensure that the following command shows the version information for Starkli:

    +
    +
    +
    starkli --version
    +
    +
    +
    +

    If this command fails, see Setting up your environment.

    +
    +
  • +
  • +

    A Starknet wallet is installed, either Argent X or Braavos. For information on a specific wallet, including installation instructions, see that wallet’s site.

    +
  • +
+
+
+
+
+

Creating an account

+
+
+

A smart wallet is composed of two parts:

+
+
+
    +
  • +

    A Signer: A smart contract that can sign transactions.

    +
  • +
  • +

    An Account Descriptor: A json file that contains information about the smart wallet, such as its address and +public key.

    +
  • +
+
+
+

After creating and funding your smart wallet with ETH you can deploy it to Starknet. For demonstration purposes, this page uses Starknet’s testnet.

+
+
+

For testnet transactions you can fund your wallet using one of the Starknet Sepolia faucets.

+
+
+

Creating a Signer

+
+

A Signer is a smart contract that can sign transactions. It’s a crucial component of accounts in Starknet. To create a Signer you will need the private key of your smart wallet (the public key can be derived from it).

+
+
+

Starkli has the ability to create a keystore file that securely stores the private key of smart wallets each with a password. The accounts in the keystore file can be used to sign transactions using Starkli. The main advantage of this approach +is that it prevents storing the private key as plain text on your computer. Instead, a password is used to create an encrypted file in a location of choice.

+
+
+

Normally, the keystore file is stored in the default location of the Starkli CLI.

+
+
+

Creating a keystore file

+
+

The following command creates a keystore file for a smart wallet in the default location in ~/.starkli-wallets/deployer:

+
+
+

Create a new directory:

+
+
+
+
mkdir -p ~/.starkli-wallets/deployer
+
+
+
+

Create a keystore file within the directory:

+
+
+
+
starkli signer keystore from-key ~/.starkli-wallets/deployer/keystore.json
+
+Enter private key:
+Enter password:
+Created new encrypted keystore file: /home/parallels/.starkli-wallets/deployer/keystore.json
+Public key: 0x0550…
+
+
+
+ + + + + +
+ + +
+

In the private key prompt, paste the private key of your smart wallet.

+
+
+

In the password prompt, enter a password of your choice.

+
+
+

You will need this password to sign transactions using Starkli.

+
+
+
+
+
+

Export the private key from your wallet

+
+

Next export the private key from your Argent X or Braavos wallet:

+
+
+
+

Argent X

+
+

Navigate to: Settings section → Select your Account → Export Private Key.

+
+
+
+

Braavos

+
+

Navigate to: Settings section → Privacy and SecurityExport Private Key.

+
+
+

While knowing the private key of a smart wallet is necessary to sign transactions, it’s not sufficient. We also need to inform Starkli about the signing mechanism employed by our smart wallet created by Argent X or Braavos.

+
+
+
+
+

Creating an Account Descriptor

+
+

Starkli offers a command to collect all the required information from a smart wallet by providing its onchain address. Using this data, the CLI generates a json file that can be used to sign transactions:

+
+
+
+
starkli account fetch --help
+Fetch account config from an already deployed account contract
+
+
+
+

The fetch command supports both Argent X and Braavos smart wallets. Make sure your wallet address is already deployed and enter the following command to create and save the account descriptor file:

+
+
+
+
starkli account fetch <SMART_WALLET_ADDRESS> --output ~/.starkli-wallets/deployer/account.json --rpc <YOUR_RPC_ENDPOINT_HERE>
+
+
+
+

You can obtain access to a JSON-RPC endpoint in one of the following ways:

+
+
+
    +
  • +

    Host your own node with Pathfinder, Juno, Deoxys, or Papyrus.

    +
  • +
  • +

    Use a third-party JSON-RPC API provider. For information on providers, see Full nodes and API services.

    +
  • +
+
+
+

The following command shows the details of the account descriptor:

+
+
+
+
cat ~/.starkli-wallets/deployer/account.json
+
+
+
+

The account descriptor should have the following structure:

+
+
+
+
{
+  "version": 1,
+  "variant": {
+        "type": "argent",
+        "version": 1,
+        "implementation": "<ARGENT_CLASS_HASH>",
+        "signer": "<SMART_WALLET_PUBLIC_KEY>",
+        "guardian": "0x0"
+  },
+    "deployment": {
+        "status": "deployed",
+        "class_hash": "<SMART_WALLET_CLASS_HASH>",
+        "address": "<SMART_WALLET_ADDRESS>"
+  }
+}
+
+
+
+ + + + + +
+ + +
+

If you are working with Braavos wallet, the type is defined as braavos and the account descriptor structure might be slightly different.

+
+
+
+
+
+
+
+

Deploying an account

+
+
+

Once you have an account file, you can deploy the account contract with the starkli account deploy command.

+
+
+

This command sends a DEPLOY_ACCOUNT transaction, which requires the account to contain enough ETH to pay for the transaction fee.

+
+
+

To deploy your account, run the following command:

+
+
+
+
starkli account deploy ~/.starkli-wallets/deployer/account.json
+
+
+
+ + + + + +
+ + +
+

This command requires a signer. If you receive an error after running this command, ensure you have the STARKNET_KEYSTORE environment variable set as per these instructions.

+
+
+
+
+

When run, the command shows:

+
+
+
    +
  • +

    The address where the contract will be deployed.

    +
  • +
  • +

    Instructions for the user to fund the account before proceeding.

    +
  • +
+
+
+

Here’s an example command output:

+
+
+
+
The estimated account deployment fee is 0.000011483579723913 ETH. However, to avoid failure, fund at least:
+    0.000017225369585869 ETH
+to the following address:
+    0x01cf4d57ba01109f018dec3ea079a38fc08b789e03de4df937ddb9e8a0ff853a
+Press [ENTER] once youve funded the address.
+
+
+
+

You have now successfully deployed a new account to Starknet.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/quick-start/using_devnet/index.html b/pr-1359/quick-start/using_devnet/index.html new file mode 100644 index 0000000000..94f6d0373e --- /dev/null +++ b/pr-1359/quick-start/using_devnet/index.html @@ -0,0 +1,1218 @@ + + + + + + Using a development network :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Using a development network

+
+
+
+

For a faster and more private development process, it is often preferable to use a local version of Starknet – also known as a development network (devnet) – which can be easily set up by either Starknet Devnet or Katana.

+
+
+
+
+

Prerequisites

+
+
+

Starkli is installed correctly. Ensure that the following command shows the version information for Starkli:

+
+
+
+
starkli --version
+
+
+
+

If this command fails, see Setting up your environment.

+
+
+
+
+

Using Starknet Devnet (Devnet)

+
+
+
    +
  1. +

    Install Devnet:

    +
    +
    +
    cargo install starknet-devnet
    +
    +
    +
    +

    and start it using:

    +
    +
    +
    +
    starknet-devnet --seed 42
    +
    +
    +
    + + + + + +
    + + +
    +

    Upon initialization, Devnet predeploys a fee token, universal deployer, and a set of funded accounts. By default, the set of predeployed accounts changes on each initialization, but specifying the same --seed value ensures consistent account addresses between executions.

    +
    +
    +
    +
    +

    The result should be similar to the following:

    +
    +
    +
    +
    Predeployed FeeToken
    +ETH Address: 0x49D36570D4E46F48E99674BD3FCC84644DDD6B96F7C741B1562B82F9E004DC7
    +STRK Address: 0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d
    +Class Hash: 0x046ded64ae2dead6448e247234bab192a9c483644395b66f2155f2614e5804b0
    +
    +Predeployed UDC
    +Address: 0x41A78E741E5AF2FEC34B695679BC6891742439F7AFB8484ECD7766661AD02BF
    +Class Hash: 0x7B3E05F48F0C69E4A65CE5E076A66271A527AFF2C34CE1083EC6E1526997A69
    +
    +Chain ID: SN_SEPOLIA (0x534e5f5345504f4c4941)
    +
    +| Account address |  0x34ba56f92265f0868c57d3fe72ecab144fc96f97954bbbc4252cef8e8a979ba
    +| Private key     |  0xb137668388dbe9acdfa3bc734cc2c469
    +| Public key      |  0x5a5e37c60e77a0318643b111f88413a76af6233c891a0cfb2804106372006d4
    +...
    +
    +
    +
  2. +
  3. +

    As previously described, import Devnet’s first predeployed accounts to an account file (notice that the address of the fetched account is the same as the one printed out by Devnet):

    +
    +
    +
    starkli account fetch --rpc http://127.0.0.1:5050 0x34ba56f92265f0868c57d3fe72ecab144fc96f97954bbbc4252cef8e8a979ba --output ~/.starkli-wallets/devnet/account.json
    +
    +
    +
    + + + + + +
    + + +
    +

    http://127.0.0.1:5050 are Devnet’s default host and port, which can be configured upon initialization using the --host and --port options

    +
    +
    +
    +
    +

    and create the corresponding keystore file by executing:

    +
    +
    +
    +
    starkli signer keystore from-key ~/.starkli-wallets/devnet/keystore.json
    +
    +
    +
    +

    and entring 0xb137668388dbe9acdfa3bc734cc2c469 as private key (the same one as the one printed out by Devnet)

    +
    +
  4. +
  5. +

    Now that you have an account set up, you can use Starkli to freely interact with Devnet. For example, you can redeploy Devnet’s predeployed universal deployer using the following command:

    +
  6. +
+
+
+
+
starkli deploy --rpc http://127.0.0.1:5050 --account ~/.starkli-wallets/devnet/account.json --keystore ~/.starkli-wallets/devnet/keystore.json 0x7B3E05F48F0C69E4A65CE5E076A66271A527AFF2C34CE1083EC6E1526997A69
+
+
+
+
+
+

Using Katana

+
+
+
    +
  1. +

    Install Katana:

    +
    +
    +
    git clone https://github.com/dojoengine/dojo
    +cd dojo
    +cargo install --path ./bin/katana --locked --force
    +
    +
    +
    +

    and start it using:

    +
    +
    +
    +
    katana
    +
    +
    +
    + + + + + +
    + + +
    +

    Upon initialization, Katana predeploys a fee token, universal deployer contract (UDC), and a set of funded accounts. By default, Katana predeploys the same set of accounts.

    +
    +
    +
    +
    +

    The result should be similar to the following:

    +
    +
    +
    +
    PREDEPLOYED CONTRACTS
    +==================
    +
    +| Contract        | Fee Token
    +| Address         | 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7
    +| Class Hash      | 0x02a8846878b6ad1f54f6ba46f5f40e11cee755c677f130b2c4b60566c9003f1f
    +
    +| Contract        | Universal Deployer
    +| Address         | 0x41a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf
    +| Class Hash      | 0x07b3e05f48f0c69e4a65ce5e076a66271a527aff2c34ce1083ec6e1526997a69
    +
    +| Contract        | Account Contract
    +| Class Hash      | 0x05400e90f7e0ae78bd02c77cd75527280470e2fe19c54970dd79dc37a9d3645c
    +
    +
    +PREFUNDED ACCOUNTS
    +==================
    +
    +| Account address |  0xb3ff441a68610b30fd5e2abbf3a1548eb6ba6f3559f2862bf2dc757e5828ca
    +| Private key     |  0x2bbf4f9fd0bbb2e60b0316c1fe0b76cf7a4d0198bd493ced9b8df2a3a24d68a
    +| Public key      |  0x640466ebd2ce505209d3e5c4494b4276ed8f1cde764d757eb48831961f7cdea
    +...
    +
    +
    +
  2. +
  3. +

    Starkli comes with several built-in accounts for Katana’s default initialization, which can be used to freely interact with Katana without any setup (for the full list of account addresses, see BUILTIN_ACCOUNT in Starkli’s accounts.rs file). For example, you can redeploy Katana’s predeployed universal deployer using the following command:

    +
    +
    +
    starkli deploy --rpc http://0.0.0.0:5050 --account katana 0x07b3e05f48f0c69e4a65ce5e076a66271a527aff2c34ce1083ec6e1526997a69
    +
    +
    +
    + + + + + +
    + + +
    +

    http://0.0.0.0:5050 are Katana’s default host and port, which can be configured upon initialization using the --host and --port options

    +
    +
    +
    +
  4. +
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/search-index.js b/pr-1359/search-index.js new file mode 100644 index 0000000000..09b218c2bb --- /dev/null +++ b/pr-1359/search-index.js @@ -0,0 +1 @@ +antoraSearch.initSearch(lunr, {"index":{"version":"2.3.9","fields":["title","name","text","component"],"fieldVectors":[["title/1-1",[0,29.493,1,46.357]],["name/1-1",[]],["text/1-1",[]],["component/1-1",[]],["title/1-2",[0,29.493,2,20.87]],["name/1-2",[]],["text/1-2",[]],["component/1-2",[]],["title/1-3",[3,45.949]],["name/1-3",[]],["text/1-3",[]],["component/1-3",[]],["title/1-4",[4,37.226]],["name/1-4",[]],["text/1-4",[]],["component/1-4",[]],["title/1-5",[5,57.762]],["name/1-5",[]],["text/1-5",[]],["component/1-5",[]],["title/1-6",[6,27.61,7,37.271]],["name/1-6",[]],["text/1-6",[]],["component/1-6",[]],["title/1-7",[6,27.61,8,45.425]],["name/1-7",[]],["text/1-7",[]],["component/1-7",[]],["title/1-8",[2,20.87,9,31.569]],["name/1-8",[]],["text/1-8",[]],["component/1-8",[]],["title/1-9",[2,20.87,10,38.107]],["name/1-9",[]],["text/1-9",[]],["component/1-9",[]],["title/1-10",[11,62.055]],["name/1-10",[]],["text/1-10",[]],["component/1-10",[]],["title/1-11",[12,38.552,13,33.321]],["name/1-11",[]],["text/1-11",[]],["component/1-11",[]],["title/1-12",[14,37.222,15,26.757,16,25.282]],["name/1-12",[]],["text/1-12",[]],["component/1-12",[]],["title/1-13",[14,37.222,17,31.824,18,26.757]],["name/1-13",[]],["text/1-13",[]],["component/1-13",[]],["title/1-14",[19,82.591]],["name/1-14",[]],["text/1-14",[]],["component/1-14",[]],["title/1-15",[20,50.535]],["name/1-15",[]],["text/1-15",[]],["component/1-15",[]],["title/1-16",[21,46.44]],["name/1-16",[]],["text/1-16",[]],["component/1-16",[]],["title/1-17",[22,44.581]],["name/1-17",[]],["text/1-17",[]],["component/1-17",[]],["title/1-18",[23,57.762]],["name/1-18",[]],["text/1-18",[]],["component/1-18",[]],["title/1-19",[24,49.863]],["name/1-19",[]],["text/1-19",[]],["component/1-19",[]],["title/1-20",[25,48.037]],["name/1-20",[]],["text/1-20",[]],["component/1-20",[]],["title/1-21",[2,14.962,16,21.703,26,13.4,27,31.388]],["name/1-21",[]],["text/1-21",[]],["component/1-21",[]],["title/1-22",[26,23.29]],["name/1-22",[]],["text/1-22",[]],["component/1-22",[]],["title/1-23",[26,18.691,28,45.425]],["name/1-23",[]],["text/1-23",[]],["component/1-23",[]],["title/1-24",[26,18.691,29,27.768]],["name/1-24",[]],["text/1-24",[]],["component/1-24",[]],["title/1-25",[30,29.726]],["name/1-25",[]],["text/1-25",[]],["component/1-25",[]],["title/1-26",[29,27.768,31,48.521]],["name/1-26",[]],["text/1-26",[]],["component/1-26",[]],["title/1-27",[32,46.357,33,52.978]],["name/1-27",[]],["text/1-27",[]],["component/1-27",[]],["title/1-28",[34,45.949]],["name/1-28",[]],["text/1-28",[]],["component/1-28",[]],["title/1",[35,76.073]],["name/1",[35,2.105]],["text/1",[0,1.353,1,0.633,2,2.334,3,1.691,4,2.434,6,2.992,7,0.509,8,1.166,9,0.431,10,0.52,11,0.68,12,0.526,13,1.211,14,1.62,15,0.437,16,2.466,17,0.52,18,1.469,20,1.86,21,1.709,22,1.3,23,1.684,24,1.027,25,1.768,26,2.488,27,1.124,28,1.166,29,3.009,30,2.818,32,1.684,33,0.723,34,2.551,36,0.855,37,0.7,38,1.641,39,1.893,40,2.173,41,0.598,42,0.561,43,0.905,44,2.178,45,1.123,46,0.833,47,0.919,48,1.279,49,0.57,50,1.288,51,0.514,52,2.188,53,1.424,54,0.833,55,0.57,56,1.173,57,0.498,58,0.786,59,1.144,60,0.99,61,1.19,62,0.546,63,1.615,64,0.751,65,0.546,66,1.812,67,1.977,68,1.246,69,0.721,70,1.056,71,1.021,72,0.578,73,1.166,74,0.928,75,0.588,76,0.62,77,0.608,78,0.578,79,1.166,80,0.561,81,3.113,82,1.81,83,0.441,84,0.786,85,0.905,86,1.748,87,0.723,88,2.088,89,0.833,90,0.62,91,1.065,92,0.647,93,1.088,94,0.588,95,0.503,96,0.723,97,1.702,98,0.514,99,0.723,100,0.578,101,0.786,102,0.662,103,0.608,104,1.253,105,1.36,106,0.751,107,3.431,108,0.786,109,1.316,110,0.723,111,0.723,112,0.91,113,1.19,114,1.771,115,0.503,116,1.071,117,1.124,118,1.541,119,1.246,120,0.751,121,0.408,122,0.647,123,0.546,124,0.463,125,0.786,126,0.786,127,1.027,128,0.546,129,1.36,130,0.62,131,1.34,132,0.786,133,1.056,134,0.9,135,0.62,136,0.723,137,0.967,138,0.905,139,0.786,140,0.598,141,1.929,142,1.454,143,0.751,144,1.221,145,1.814,146,0.786,147,0.428,148,0.533,149,2.044,150,1.929,151,0.633,152,0.633,153,0.751,154,1.925,155,1.418,156,0.751,157,0.723,158,0.786,159,0.52,160,0.723,161,0.546,162,0.788,163,1.3,164,0.526,165,1.567,166,1.479,167,0.947,168,1.413,169,1.246,170,1.413,171,2.074,172,1.002,173,1.002,174,0.751,175,0.608,176,0.561,177,0.463,178,0.526,179,0.647,180,0.905,181,0.7,182,1.401,183,0.561,184,1.369,185,3.025,186,0.662,187,1.071,188,0.498,189,1.014,190,0.68,191,0.7,192,0.751,193,0.509,194,0.662,195,0.588,196,1.279,197,0.588,198,0.444,199,0.52,200,0.578,201,1.413,202,0.833,203,0.598,204,1.316,205,0.723,206,1.748,207,0.471,208,1.313,209,0.554,210,0.68,211,0.608,212,1.354,213,1.144,214,0.751,215,1.088,216,0.833,217,1.36,218,0.723,219,0.484,220,0.751,221,0.598,222,0.786,223,0.608,224,0.68,225,0.62,226,1.264,227,0.893,228,1.288,229,0.786,230,0.905,231,0.588,232,0.633,233,0.723,234,0.905,235,0.786,236,0.381,237,0.833,238,1.19,239,0.662,240,0.422,241,0.633,242,0.633,243,0.751,244,0.471,245,0.493,246,0.503,247,0.87,248,0.833,249,0.833,250,0.751,251,1.863,252,0.588,253,0.608,254,0.786,255,0.751,256,0.62,257,1.279,258,0.723,259,0.588,260,0.62,261,0.723,262,0.608,263,0.578,264,0.62,265,1.246,266,0.408,267,0.647,268,0.786,269,0.723,270,0.723,271,0.546,272,0.833,273,0.467,274,1.124,275,0.885,276,0.62,277,0.488,278,0.471,279,0.554,280,0.588,281,0.444,282,0.484,283,1.144,284,0.68,285,0.662,286,1.567,287,0.833,288,0.786,289,0.786,290,0.62]],["component/1",[291,0.458]],["title/2-1",[26,18.691,292,38.107]],["name/2-1",[]],["text/2-1",[]],["component/2-1",[]],["title/2-2",[293,61.052,294,39.018]],["name/2-2",[]],["text/2-2",[]],["component/2-2",[]],["title/2-3",[57,45.477]],["name/2-3",[]],["text/2-3",[]],["component/2-3",[]],["title/2-4",[295,54.555]],["name/2-4",[]],["text/2-4",[]],["component/2-4",[]],["title/2-5",[227,29.051,296,29.051,297,33.419]],["name/2-5",[]],["text/2-5",[]],["component/2-5",[]],["title/2-6",[26,15.609,298,37.935,299,40.52]],["name/2-6",[]],["text/2-6",[]],["component/2-6",[]],["title/2",[300,51.995]],["name/2",[301,1.598]],["text/2",[0,1.511,2,1.727,3,1.89,4,1.531,6,2.874,12,1.976,13,1.708,14,2.284,17,1.953,18,1.642,25,1.976,26,3.172,28,2.328,30,1.223,48,2.552,50,1.816,52,1.483,53,2.165,57,1.87,58,2.952,59,2.284,67,1.63,68,2.487,79,2.328,86,1.953,88,1.722,91,1.502,107,2.025,118,1.722,134,2.577,149,2.284,150,1.816,163,1.834,165,3.129,166,2.952,167,1.89,168,2.82,169,2.487,170,2.82,171,3.154,185,2.051,200,2.171,206,1.953,228,1.816,240,1.584,250,2.82,251,5.336,252,2.206,253,2.284,254,2.952,255,2.82,256,2.328,257,4.121,258,2.715,259,2.206,260,2.328,261,2.715,262,2.284,263,2.171,266,2.472,292,4.553,294,3.229,296,1.783,297,3.312,298,3.759,299,2.487,302,1.91,303,1.976,304,4.554,305,3.397,306,1.606,307,2.244,308,1.931,309,2.487,310,1.852,311,2.82,312,2.108,313,3.563,314,2.244,315,2.244,316,3.129,317,2.627,318,4.061,319,3.397,320,3.689,321,2.487,322,2.82,323,2.715,324,3.397,325,2.552,326,3.397]],["component/2",[291,0.458]],["title/3",[327,55.033,328,61.052]],["name/3",[327,1.059,328,1.175]],["text/3",[36,1.463,38,2.609,67,1.397,74,2.635,83,1.418,91,2.137,92,5.16,101,2.53,104,1.514,114,2.373,124,1.488,134,3.227,145,1.463,147,1.376,162,2.87,173,1.714,184,1.655,212,1.637,245,2.635,275,1.514,277,2.609,310,3.934,313,1.891,327,4.013,329,2.53,330,2.911,331,7.687,332,2.681,333,3.742,334,2.681,335,6.648,336,2.681,337,2.327,338,1.758,339,2.681,340,2.911,341,4.834,342,1.735,343,2.911,344,2.131,345,2.911,346,2.131,347,3.539,348,3.14,349,4.834,350,2.958,351,3.695,352,5.048,353,3.864,354,2.354,355,2.911,356,4.834,357,2.681,358,2.681,359,2.87,360,2.911,361,2.53,362,2.131,363,2.911,364,2.911,365,2.081,366,3.605,367,2.911,368,2.911,369,2.417,370,1.655,371,6.648,372,2.681,373,4.834,374,6.199,375,1.891,376,5.048,377,7.218,378,7.218,379,2.911,380,2.911,381,2.911,382,2.417,383,2.911,384,1.891,385,2.417,386,2.911,387,2.911,388,1.833,389,2.252]],["component/3",[291,0.458]],["title/4-1",[390,49.802,391,35.107]],["name/4-1",[]],["text/4-1",[]],["component/4-1",[]],["title/4-2",[133,34.345,290,37.935,392,28.792]],["name/4-2",[]],["text/4-2",[]],["component/4-2",[]],["title/4-3",[347,48.521,393,51.268]],["name/4-3",[]],["text/4-3",[]],["component/4-3",[]],["title/4-4",[394,55.033,395,61.052]],["name/4-4",[]],["text/4-4",[]],["component/4-4",[]],["title/4",[26,15.609,390,41.59,392,28.792]],["name/4",[26,0.36,390,0.958]],["text/4",[2,0.15,4,0.779,14,0.618,15,0.23,16,0.42,17,0.529,18,0.445,22,1.132,25,0.535,26,2.852,30,0.998,34,0.512,37,0.368,38,1.319,44,2.038,47,0.496,50,0.492,51,0.76,52,0.755,53,1.547,62,0.555,63,0.939,66,0.283,69,0.732,75,0.309,79,0.326,80,0.295,86,0.529,88,0.241,91,1.363,98,0.76,100,0.304,102,0.673,104,1.901,107,0.548,110,1.381,115,0.744,117,0.314,120,0.395,123,0.287,124,0.243,127,0.203,128,0.555,133,3.5,134,0.344,137,0.27,141,2.918,142,0.287,145,1.228,147,0.991,148,1.017,149,1.643,150,1.482,151,0.332,153,1.11,154,1.676,155,1.632,157,3.133,159,0.273,160,0.38,162,0.619,163,1.496,167,0.512,171,1.205,172,0.28,173,0.28,175,0.32,177,0.243,178,0.276,182,0.535,184,0.27,185,1.043,187,0.299,188,0.736,189,0.283,195,0.597,196,0.691,197,0.597,198,1.513,199,0.529,200,1.97,206,0.273,207,0.478,208,0.259,209,0.291,211,0.32,217,0.38,218,0.38,219,0.254,224,0.691,225,0.326,226,0.249,227,0.249,228,0.924,229,0.799,232,0.332,233,0.38,236,0.563,238,0.332,241,1.466,243,0.764,244,0.478,246,0.264,247,0.243,252,0.597,257,1.004,259,0.868,261,0.38,264,0.916,266,0.779,267,0.34,274,1.614,277,0.257,281,1.199,290,1.437,294,0.541,296,2.057,298,0.326,302,1.374,306,0.435,308,0.982,313,2.193,314,0.314,322,0.764,323,1.676,338,0.555,344,0.348,347,2.256,354,0.231,359,0.8,366,0.276,370,0.27,390,2.083,392,4.506,393,1.034,394,2.029,395,0.438,396,1.535,397,0.475,398,2.124,399,1.124,400,2.803,401,1.162,402,1.502,403,1.162,404,1.97,405,0.972,406,0.777,407,0.951,408,1.621,409,0.799,410,2.409,411,0.847,412,1.502,413,0.955,414,0.801,415,1.502,416,0.735,417,0.673,418,0.711,419,0.955,420,0.673,421,1.728,422,1.283,423,0.357,424,1.231,425,0.847,426,0.475,427,0.413,428,0.475,429,0.38,430,0.368,431,0.92,432,0.438,433,0.475,434,0.38,435,1.32,436,0.579,437,0.413,438,0.475,439,0.395,440,0.413,441,1.466,442,0.475,443,1.337,444,0.735,445,0.847,446,1.621,447,0.475,448,0.799,449,1.337,450,0.92,451,0.475,452,1.162,453,0.438,454,0.735,455,0.357,456,0.916,457,0.608,458,0.438,459,0.438,460,1.805,461,0.579,462,1.143,463,0.38,464,0.38,465,1.081,466,0.899,467,3.176,468,0.413,469,1.381,470,1.034,471,0.657,472,1.298,473,0.438,474,1.184,475,0.475,476,0.357,477,0.475,478,0.413,479,0.764,480,0.304,481,0.348,482,0.735,483,1.184,484,0.799,485,0.413,486,0.314,487,1.231,488,0.395,489,0.735,490,0.38,491,1.162,492,1.728,493,0.332,494,0.899,495,0.438,496,0.295,497,0.529,498,0.38,499,0.438,500,0.799,501,0.368,502,0.92,503,0.563,504,0.799,505,0.475,506,2.413,507,0.799,508,2.251,509,0.368,510,0.92,511,1.337,512,0.496,513,0.92,514,1.298,515,0.314,516,0.438,517,0.395,518,1.435,519,0.326,520,0.475,521,2.096,522,3.034,523,0.847,524,0.357,525,0.34,526,1.535,527,1.822,528,0.764,529,0.829,530,0.475,531,1.728,532,0.475,533,0.475,534,0.475,535,0.475,536,0.475,537,0.475,538,0.475,539,0.368,540,0.34,541,0.643,542,0.673,543,0.735,544,0.348,545,0.92,546,0.618,547,0.735,548,1.337,549,0.395,550,0.438,551,0.413,552,0.348,553,0.475,554,0.475,555,0.764,556,0.28,557,0.643,558,0.764,559,1.337,560,0.475,561,0.475,562,0.92,563,1.017,564,0.475,565,1.728,566,0.475,567,0.395,568,0.348,569,0.475,570,0.413,571,0.799,572,0.764,573,0.413,574,0.395,575,1.535,576,0.475,577,0.438,578,1.231,579,1.931,580,0.847,581,0.92,582,0.799,583,2.029,584,0.597,585,1.502,586,0.475,587,0.475,588,0.475,589,0.475,590,0.92,591,0.475,592,0.475,593,0.395,594,2.251,595,0.413,596,0.438,597,0.368,598,0.799,599,0.475,600,0.438,601,0.438,602,0.326,603,0.413,604,0.63,605,0.291,606,0.711,607,0.267,608,0.92,609,0.475,610,1.337,611,0.304,612,0.899,613,0.787,614,0.475,615,0.673,616,0.34,617,0.413,618,0.475,619,0.27,620,0.92,621,0.413,622,1.836,623,2.553,624,2.256,625,0.847,626,0.847,627,0.92,628,0.847,629,1.068,630,0.673,631,0.764,632,0.92,633,0.357,634,0.475,635,0.475,636,0.475,637,0.438,638,0.475,639,0.252,640,0.413,641,0.475,642,0.475,643,0.475,644,0.368,645,0.961,646,0.475,647,0.475,648,0.475,649,0.475,650,0.357,651,0.475,652,2.029,653,0.475,654,0.395,655,0.475,656,0.395,657,0.326,658,0.368,659,0.829,660,0.38,661,0.438,662,0.413,663,0.673,664,0.395,665,0.413,666,0.475,667,0.326,668,0.475,669,1.337,670,1.034,671,0.475,672,0.413,673,0.475,674,0.475,675,0.799,676,0.395,677,0.711,678,0.34,679,0.847,680,0.438,681,0.413,682,0.643,683,0.304,684,0.955,685,0.395,686,0.92,687,0.438,688,0.475,689,0.92,690,0.38,691,0.475,692,0.475,693,0.395,694,0.475,695,0.475,696,0.357,697,0.38,698,0.475,699,0.348,700,0.357,701,0.475,702,0.475,703,0.475,704,0.438,705,0.799,706,0.395,707,0.475,708,0.92,709,0.847,710,0.438,711,0.475,712,0.475,713,0.475,714,0.438,715,0.326,716,0.413,717,0.475,718,0.475,719,0.475,720,0.304,721,0.368,722,0.413,723,0.438,724,0.38,725,0.413,726,0.438,727,0.847,728,0.475,729,0.475,730,0.475,731,0.348]],["component/4",[291,0.458]],["title/5",[57,45.477]],["name/5",[301,1.598]],["text/5",[]],["component/5",[291,0.458]],["title/6-1",[13,23.888,26,13.4,300,29.915,557,33.233]],["name/6-1",[]],["text/6-1",[]],["component/6-1",[]],["title/6-2",[13,27.827,27,36.564,414,18.133]],["name/6-2",[]],["text/6-2",[]],["component/6-2",[]],["title/6-3",[13,18.617,22,19.99,26,10.443,192,30.748,732,37.034,733,27.11]],["name/6-3",[]],["text/6-3",[]],["component/6-3",[]],["title/6-4",[13,33.321,22,35.779]],["name/6-4",[]],["text/6-4",[]],["component/6-4",[]],["title/6-5",[13,33.321,192,55.033]],["name/6-5",[]],["text/6-5",[]],["component/6-5",[]],["title/6-6",[13,33.321,733,48.521]],["name/6-6",[]],["text/6-6",[]],["component/6-6",[]],["title/6-7",[13,27.827,26,15.609,47,29.879]],["name/6-7",[]],["text/6-7",[]],["component/6-7",[]],["title/6",[13,41.519]],["name/6",[13,1.149]],["text/6",[2,0.753,3,1.33,4,2.657,6,0.996,12,3.124,13,5.678,22,3.659,26,2.59,29,2.839,30,3.369,38,3.182,42,0.81,45,1.115,47,2.578,50,0.698,59,2.225,63,1.071,73,0.895,81,1.165,83,1.165,86,2.354,88,0.662,91,0.577,104,0.679,110,1.043,114,0.641,118,3.436,127,1.019,129,1.043,131,0.726,140,0.862,141,4.17,142,1.444,144,1.677,146,1.134,147,0.617,149,2.225,150,1.279,154,1.911,155,0.768,157,1.043,158,1.134,163,1.786,164,0.759,167,0.726,171,2.354,179,1.71,182,1.391,187,2.578,188,0.719,192,5.281,193,0.734,207,1.244,212,0.734,219,1.279,239,0.956,241,2.314,244,1.244,247,1.692,252,0.848,256,0.895,260,1.639,263,0.834,264,0.895,266,0.588,275,0.679,281,0.641,282,0.698,292,0.75,296,1.255,297,1.444,298,1.639,306,1.131,307,0.862,320,0.878,338,0.788,346,1.751,382,1.084,406,0.759,407,1.822,409,1.134,414,1.342,419,1.71,430,2.56,455,0.981,465,0.673,481,0.956,483,0.895,487,1.202,493,1.673,498,1.043,499,1.202,506,0.933,512,1.786,529,0.81,541,0.913,557,2.314,558,1.084,594,1.202,605,0.799,622,1.797,630,0.956,645,0.726,659,1.484,660,1.043,697,1.043,733,2.998,734,0.822,735,0.822,736,1.01,737,1.673,738,1.305,739,1.043,740,1.134,741,1.305,742,1.202,743,1.305,744,0.981,745,2.203,746,0.956,747,0.878,748,0.981,749,1.305,750,1.305,751,0.848,752,1.305,753,1.084,754,1.01,755,1.305,756,1.58,757,1.639,758,0.981,759,0.848,760,1.71,761,1.305,762,2.391,763,1.134,764,1.305,765,1.043,766,1.043,767,0.981,768,1.305,769,1.305,770,1.202,771,1.305,772,1.202,773,1.202,774,1.043,775,2.618,776,1.639,777,0.685,778,1.202,779,0.981,780,0.933,781,1.305,782,2.645,783,1.305,784,1.305,785,1.529,786,1.084,787,1.084,788,2.391,789,2.927,790,1.202,791,2.998,792,1.134,793,1.986,794,2.998,795,0.981,796,2.203,797,2.203,798,1.639,799,3.4,800,1.134,801,2.078,802,0.895,803,0.981,804,0.848,805,1.202,806,1.202,807,0.848,808,1.202,809,1.305,810,1.202,811,1.134]],["component/6",[291,0.458]],["title/7-1",[23,57.762]],["name/7-1",[]],["text/7-1",[]],["component/7-1",[]],["title/7-2",[23,38.713,185,33.419,812,44.243]],["name/7-2",[]],["text/7-2",[]],["component/7-2",[]],["title/7-3",[23,29.112,57,22.921,281,20.431,813,38.341,814,36.177]],["name/7-3",[]],["text/7-3",[]],["component/7-3",[]],["title/7-4",[23,38.713,38,29.879,306,26.173]],["name/7-4",[]],["text/7-4",[]],["component/7-4",[]],["title/7-5",[78,42.369,815,61.052]],["name/7-5",[]],["text/7-5",[]],["component/7-5",[]],["title/7-6",[816,76.073]],["name/7-6",[]],["text/7-6",[]],["component/7-6",[]],["title/7",[20,50.535]],["name/7",[20,0.78,300,0.803]],["text/7",[4,0.574,6,3.435,7,0.716,11,0.501,20,4.089,23,5.173,25,2.728,26,1.323,30,1.446,32,0.891,34,4.203,36,0.335,38,2.168,40,0.911,41,0.841,42,0.414,44,0.769,50,2.508,51,1.04,53,1.108,57,0.701,59,0.857,67,0.611,71,0.283,77,0.448,78,2.329,81,1.579,86,0.383,87,0.533,88,2.378,91,1.241,93,0.426,98,1.329,100,0.426,104,0.663,107,3.308,109,0.985,114,0.327,115,2.027,116,3.145,117,0.44,118,1.423,123,0.403,134,1.361,137,1.329,141,1.501,145,0.919,147,1.723,149,2.45,150,1.501,151,0.891,152,0.466,155,0.392,161,0.403,163,0.688,164,0.388,166,1.59,167,0.709,171,0.383,172,0.392,173,1.377,176,0.414,177,0.341,178,0.388,182,0.741,184,3.002,185,5.878,186,1.339,188,1.288,189,0.397,190,0.501,191,0.985,198,0.327,200,2.568,201,1.942,204,0.985,205,2.591,206,1.051,207,2.09,208,0.694,209,0.408,210,0.501,219,1.501,220,0.554,226,0.35,227,1.474,228,1.733,231,0.433,233,0.533,239,0.932,244,0.951,257,0.501,259,3.924,261,1.018,266,1.811,269,0.533,276,0.457,282,0.356,285,0.488,290,0.457,292,0.383,296,0.35,306,0.602,307,0.44,308,0.724,309,0.932,318,0.392,321,0.488,322,0.554,337,0.533,342,0.759,346,0.932,352,0.466,354,0.325,369,0.554,370,1.843,391,0.353,393,0.516,403,0.579,404,0.426,405,0.375,406,0.388,407,2.751,414,0.417,417,0.932,420,0.488,422,0.408,434,0.533,439,0.554,446,0.516,448,0.579,455,2.436,456,0.457,461,0.42,462,0.363,463,1.018,464,0.533,465,1.448,467,0.579,481,0.932,483,0.457,484,1.59,489,0.533,493,1.964,494,0.951,506,0.477,512,1.516,515,2.141,524,0.501,527,1.59,529,0.414,546,0.448,547,1.018,557,0.466,563,0.392,611,0.814,613,0.392,622,0.501,625,0.614,630,0.488,633,0.501,637,0.614,639,0.969,654,1.058,659,0.79,663,0.488,678,0.911,682,0.891,683,0.426,684,0.477,699,0.488,720,0.814,721,0.516,722,1.59,734,0.802,735,0.802,736,0.985,737,1.279,739,0.533,740,0.579,746,1.339,747,3.154,751,0.433,756,0.841,763,0.579,767,1.374,775,0.426,776,0.457,777,1.227,787,1.058,793,0.554,805,0.614,807,0.433,812,4.638,813,0.614,815,0.614,816,0.614,817,1.173,818,0.579,819,2.172,820,1.653,821,1.274,822,1.253,823,1.829,824,0.79,825,0.957,826,1.274,827,1.274,828,0.554,829,0.667,830,3.211,831,1.415,832,0.554,833,1.685,834,1.173,835,0.554,836,1.018,837,1.829,838,0.614,839,0.533,840,0.579,841,7.231,842,1.173,843,1.274,844,1.274,845,0.448,846,0.554,847,0.667,848,0.667,849,0.667,850,0.516,851,0.554,852,0.554,853,1.058,854,0.614,855,0.579,856,1.809,857,0.408,858,0.667,859,0.667,860,0.614,861,1.058,862,0.667,863,0.614,864,0.477,865,0.873,866,2.172,867,0.614,868,1.829,869,1.058,870,0.579,871,0.614,872,0.533,873,0.614,874,0.667,875,0.388,876,0.42,877,0.667,878,0.667,879,0.533,880,0.533,881,0.466,882,0.579,883,0.501,884,1.274,885,0.533,886,1.173,887,0.667,888,0.488,889,2.331,890,0.857,891,0.667,892,1.253,893,2.338,894,0.554,895,2.338,896,0.957,897,0.516,898,0.667,899,0.516,900,1.274,901,0.477,902,0.614,903,0.516,904,0.614,905,0.356,906,1.107,907,1.018,908,0.537,909,1.107,910,1.942,911,0.579,912,0.448,913,0.579,914,0.614,915,0.408,916,0.579,917,0.579,918,0.667,919,0.667]],["component/7",[291,0.458]],["title/8-1",[2,13.107,45,19.406,57,22.921,173,24.503,306,19.682]],["name/8-1",[]],["text/8-1",[]],["component/8-1",[]],["title/8-2",[2,14.962,23,33.233,34,26.437,920,33.968]],["name/8-2",[]],["text/8-2",[]],["component/8-2",[]],["title/8-3",[2,14.962,645,26.437,908,20.022,921,27.972]],["name/8-3",[]],["text/8-3",[]],["component/8-3",[]],["title/8-4",[908,23.323,921,32.584,922,50.985]],["name/8-4",[]],["text/8-4",[]],["component/8-4",[]],["title/8-5",[908,23.323,921,32.584,923,50.985]],["name/8-5",[]],["text/8-5",[]],["component/8-5",[]],["title/8-6",[2,20.87,924,61.052]],["name/8-6",[]],["text/8-6",[]],["component/8-6",[]],["title/8-7",[23,38.713,103,37.222,231,35.953]],["name/8-7",[]],["text/8-7",[]],["component/8-7",[]],["title/8",[34,36.877,830,52.978]],["name/8",[34,0.71,830,1.019]],["text/8",[2,3.255,6,1.026,10,0.534,11,1.31,14,0.624,15,0.449,16,0.424,23,3.267,25,0.54,26,0.491,29,0.389,30,0.887,34,4.708,36,0.876,40,2.632,42,0.576,45,1.716,47,0.501,49,1.097,51,0.528,53,1.453,56,0.452,62,0.56,67,0.445,68,1.803,69,0.393,71,1.316,72,1.114,78,1.114,81,0.452,88,0.471,91,0.771,92,1.246,94,1.132,95,0.516,98,1.4,99,1.393,104,1.615,107,1.851,118,2.129,124,0.475,127,1.05,129,0.742,134,1.905,142,0.56,144,0.471,145,0.467,147,0.439,150,0.932,151,0.649,156,0.771,157,0.742,167,0.516,168,0.771,171,1.002,173,0.546,176,0.576,179,0.664,183,0.576,184,0.991,185,2.536,187,1.097,188,0.511,190,1.31,191,2.402,207,1.915,208,1.343,211,0.624,212,0.98,219,1.968,227,0.915,228,0.932,231,3.034,232,1.219,233,0.742,236,0.734,239,1.276,241,0.649,242,1.723,243,0.771,244,1.615,246,0.516,247,0.475,251,0.718,266,0.418,269,2.482,277,0.941,281,0.855,288,1.515,306,0.824,307,0.613,308,0.991,310,0.506,346,0.68,352,0.649,353,0.742,385,0.771,388,1.551,391,0.923,396,1.276,405,0.522,406,0.54,407,0.511,414,1.917,417,1.803,418,2.402,420,0.68,422,0.568,423,0.697,436,0.584,437,1.515,457,0.613,462,0.506,498,1.393,529,1.081,541,0.649,542,2.695,563,0.546,583,0.771,593,0.771,604,0.636,613,0.546,616,0.664,619,0.528,622,1.31,645,0.97,656,1.447,659,0.576,662,0.807,690,0.742,720,1.575,721,0.718,724,0.742,734,0.584,735,0.584,747,0.624,777,0.487,800,0.807,807,0.603,824,1.529,830,2.482,831,0.718,834,0.855,851,3.057,853,1.447,857,0.568,865,0.636,871,1.605,875,0.54,880,0.742,889,1.447,896,0.697,899,1.348,902,0.855,907,0.742,908,1.77,910,3.878,915,0.568,920,1.246,921,0.546,922,2.269,923,5.694,925,0.928,926,0.928,927,0.928,928,1.743,929,0.928,930,0.807,931,3.106,932,0.68,933,0.807,934,0.807,935,0.928,936,1.605,937,2.464,938,1.31,939,2.464,940,0.855,941,0.807,942,1.447,943,1.066,944,0.855,945,3.357,946,0.855,947,2.464,948,0.928,949,0.928,950,0.928,951,0.928,952,0.928,953,2.464,954,0.928,955,1.743,956,0.928,957,1.743,958,0.928,959,0.928,960,0.928,961,0.928,962,0.928,963,2.464,964,0.928,965,1.743,966,0.928,967,1.743,968,0.928,969,0.928,970,0.928,971,0.928,972,0.928,973,0.928,974,0.928,975,0.928,976,0.928,977,0.928,978,0.928,979,0.928,980,0.928,981,0.928,982,0.928,983,0.928,984,0.928,985,0.928,986,0.928,987,0.928,988,0.928,989,0.928,990,0.928,991,0.928,992,0.928,993,0.928,994,0.928,995,0.928,996,0.928,997,0.928,998,0.928,999,0.928,1000,0.928,1001,0.928,1002,0.928,1003,0.928,1004,0.928,1005,0.928,1006,0.928,1007,0.928,1008,0.928,1009,1.743,1010,0.928,1011,0.928,1012,0.928,1013,0.928,1014,0.928,1015,0.928,1016,1.743,1017,0.928,1018,0.928,1019,0.928,1020,0.928,1021,0.928,1022,1.276,1023,1.605,1024,0.855,1025,1.605,1026,0.855,1027,0.742,1028,1.743,1029,0.928,1030,1.276,1031,1.447,1032,1.743,1033,1.743,1034,1.529,1035,0.928,1036,0.928,1037,0.928,1038,0.855,1039,0.807,1040,0.624,1041,0.928,1042,0.855,1043,1.605,1044,0.742,1045,0.928,1046,0.928,1047,1.688,1048,1.172,1049,0.855,1050,1.743,1051,0.928,1052,0.807,1053,0.584,1054,0.855,1055,0.928,1056,0.928,1057,0.928,1058,0.928,1059,1.393,1060,0.928,1061,0.742,1062,0.928,1063,0.928,1064,0.718,1065,0.928,1066,0.68,1067,0.855,1068,0.855,1069,1.605,1070,0.928,1071,0.928,1072,0.649,1073,0.576,1074,0.855,1075,0.928,1076,0.928,1077,0.771,1078,0.855,1079,0.928,1080,0.771,1081,0.928,1082,0.603,1083,1.151,1084,0.928,1085,0.613,1086,0.928]],["component/8",[291,0.458]],["title/9-1",[317,36.754,350,29.075,1087,30.374,1088,34.784]],["name/9-1",[]],["text/9-1",[]],["component/9-1",[]],["title/9-2",[26,13.4,67,22.799,141,25.405,303,27.638]],["name/9-2",[]],["text/9-2",[]],["component/9-2",[]],["title/9-3",[67,26.558,262,37.222,760,39.569]],["name/9-3",[]],["text/9-3",[]],["component/9-3",[]],["title/9-4",[26,18.691,56,32.284]],["name/9-4",[]],["text/9-4",[]],["component/9-4",[]],["title/9-5",[26,18.691,278,34.476]],["name/9-5",[]],["text/9-5",[]],["component/9-5",[]],["title/9-6",[26,18.691,127,28.256]],["name/9-6",[]],["text/9-6",[]],["component/9-6",[]],["title/9-7",[26,18.691,280,43.052]],["name/9-7",[]],["text/9-7",[]],["component/9-7",[]],["title/9-8",[26,18.691,1089,61.052]],["name/9-8",[]],["text/9-8",[]],["component/9-8",[]],["title/9-9",[26,18.691,1090,61.052]],["name/9-9",[]],["text/9-9",[]],["component/9-9",[]],["title/9-10",[26,18.691,1091,57.607]],["name/9-10",[]],["text/9-10",[]],["component/9-10",[]],["title/9-11",[26,18.691,1092,61.052]],["name/9-11",[]],["text/9-11",[]],["component/9-11",[]],["title/9-12",[26,18.691,1093,61.052]],["name/9-12",[]],["text/9-12",[]],["component/9-12",[]],["title/9-13",[26,18.691,1094,61.052]],["name/9-13",[]],["text/9-13",[]],["component/9-13",[]],["title/9-14",[26,18.691,1095,61.052]],["name/9-14",[]],["text/9-14",[]],["component/9-14",[]],["title/9-15",[26,18.691,279,40.557]],["name/9-15",[]],["text/9-15",[]],["component/9-15",[]],["title/9-16",[26,18.691,1096,61.052]],["name/9-16",[]],["text/9-16",[]],["component/9-16",[]],["title/9",[26,13.4,36,23.888,1097,37.98,1098,31.953]],["name/9",[1099,1.38]],["text/9",[0,2.834,2,2.293,4,2.775,6,0.269,9,0.308,16,0.813,18,0.86,22,0.96,26,2.482,29,0.271,30,1.863,36,0.622,41,0.427,42,3.036,50,0.346,52,0.283,53,3.21,56,3.698,60,2.07,63,0.554,67,2.846,68,0.474,69,3.087,71,2.074,73,0.443,74,1.492,75,2.311,76,0.443,77,3.29,81,0.603,83,0.315,86,0.372,88,0.328,91,0.547,104,1.185,112,1.218,113,0.452,114,0.607,124,2.007,127,1.167,131,0.99,134,1.934,140,1.808,141,2.099,144,0.902,147,1.077,151,0.452,161,0.391,162,1.648,163,1.707,167,0.689,171,0.372,172,0.381,173,0.381,175,0.435,177,0.331,182,0.72,184,0.368,186,2.316,188,0.682,197,0.804,198,0.873,199,0.372,207,0.337,208,1.94,215,2.73,225,0.848,228,0.662,236,2.399,244,0.644,245,1.94,246,0.36,253,0.435,262,1.531,266,0.558,271,1.91,273,0.334,274,0.818,276,0.443,277,0.349,278,0.644,279,1.089,280,1.156,284,0.486,290,0.443,302,1,303,2.284,314,1.175,315,0.427,318,0.729,333,0.747,347,0.474,348,1.479,350,3.484,351,2.121,352,2.746,359,1.464,366,2.284,375,2.311,384,0.804,389,1.762,391,0.942,392,1.185,414,1.504,422,1.089,441,0.866,454,0.989,485,0.562,496,0.768,539,0.5,540,0.462,541,0.452,563,0.729,570,0.562,584,0.804,605,2.177,613,0.381,619,0.704,639,0.343,645,1.76,667,0.443,670,0.5,683,0.414,684,0.462,685,0.537,715,0.848,760,2.261,775,3.128,776,1.219,777,0.65,787,0.537,804,0.804,822,2.439,876,1.434,882,2.749,890,1.196,892,0.443,905,0.662,908,0.273,921,0.381,943,2.994,1085,0.427,1087,1.137,1088,0.474,1089,0.596,1090,0.596,1091,0.562,1092,1.14,1093,0.596,1094,0.596,1095,0.596,1096,1.14,1098,2.641,1099,0.391,1100,1.295,1101,0.474,1102,1.885,1103,0.42,1104,1.076,1105,0.486,1106,1.238,1107,1.477,1108,0.647,1109,0.517,1110,1.238,1111,1.238,1112,1.337,1113,0.647,1114,2.098,1115,1.238,1116,0.647,1117,1.238,1118,1.799,1119,2.772,1120,4.23,1121,2.674,1122,1.254,1123,1.935,1124,3.97,1125,1.628,1126,2.277,1127,2.277,1128,2.273,1129,2.737,1130,1.028,1131,1.357,1132,1.238,1133,1.779,1134,1.376,1135,1.337,1136,0.647,1137,0.647,1138,0.596,1139,0.906,1140,0.537,1141,0.562,1142,0.427,1143,1.238,1144,0.486,1145,1.028,1146,0.647,1147,2.208,1148,0.474,1149,0.647,1150,0.647,1151,1.238,1152,1.14,1153,0.596,1154,0.435,1155,0.647,1156,0.537,1157,0.647,1158,0.537,1159,0.596,1160,0.647,1161,0.596,1162,0.486,1163,0.517,1164,0.647,1165,0.647,1166,0.517,1167,0.989,1168,1.028,1169,1.196,1170,0.443,1171,0.474,1172,0.517,1173,0.647,1174,0.537,1175,1.422,1176,0.452,1177,2.273,1178,0.537,1179,0.596,1180,0.391,1181,1.238,1182,0.596,1183,0.5,1184,0.596,1185,0.562,1186,0.486,1187,0.486,1188,0.596,1189,0.5]],["component/9",[291,0.458]],["title/10-1",[413,59.039]],["name/10-1",[]],["text/10-1",[]],["component/10-1",[]],["title/10-2",[359,38.237]],["name/10-2",[]],["text/10-2",[]],["component/10-2",[]],["title/10-3",[1190,34.403]],["name/10-3",[]],["text/10-3",[]],["component/10-3",[]],["title/10-4",[1026,61.052,1124,36.132]],["name/10-4",[]],["text/10-4",[]],["component/10-4",[]],["title/10-5",[351,49.225]],["name/10-5",[]],["text/10-5",[]],["component/10-5",[]],["title/10-6",[375,43.052,1124,36.132]],["name/10-6",[]],["text/10-6",[]],["component/10-6",[]],["title/10-7",[320,44.571,1191,46.357]],["name/10-7",[]],["text/10-7",[]],["component/10-7",[]],["title/10-8",[1119,54.615]],["name/10-8",[]],["text/10-8",[]],["component/10-8",[]],["title/10-9",[1192,76.073]],["name/10-9",[]],["text/10-9",[]],["component/10-9",[]],["title/10-10",[1193,76.073]],["name/10-10",[]],["text/10-10",[]],["component/10-10",[]],["title/10-11",[1194,71.78]],["name/10-11",[]],["text/10-11",[]],["component/10-11",[]],["title/10-12",[240,30.901,650,49.802]],["name/10-12",[]],["text/10-12",[]],["component/10-12",[]],["title/10-13",[1195,75.107]],["name/10-13",[]],["text/10-13",[]],["component/10-13",[]],["title/10-14",[1196,83.322]],["name/10-14",[]],["text/10-14",[]],["component/10-14",[]],["title/10-15",[1197,76.073]],["name/10-15",[]],["text/10-15",[]],["component/10-15",[]],["title/10-16",[183,56.127]],["name/10-16",[]],["text/10-16",[]],["component/10-16",[]],["title/10-17",[1198,76.073]],["name/10-17",[]],["text/10-17",[]],["component/10-17",[]],["title/10-18",[1199,76.073]],["name/10-18",[]],["text/10-18",[]],["component/10-18",[]],["title/10-19",[1200,83.322]],["name/10-19",[]],["text/10-19",[]],["component/10-19",[]],["title/10-20",[1201,76.073]],["name/10-20",[]],["text/10-20",[]],["component/10-20",[]],["title/10",[36,23.888,112,25.405,1097,37.98,1098,31.953]],["name/10",[26,0.249,112,0.473,375,0.575]],["text/10",[0,1.11,2,2.512,6,1.039,7,1.403,9,2.64,10,1.434,12,1.451,26,2.068,39,1.309,41,1.648,52,1.089,53,0.984,63,2.929,69,2.349,70,2.634,74,1.36,78,1.595,81,1.215,90,1.71,91,1.877,107,1.487,112,4.998,114,1.224,118,1.265,124,2.17,130,1.71,134,4.264,177,1.275,183,5.283,184,1.418,188,1.374,208,1.36,216,2.298,232,1.745,240,1.163,245,3.021,271,2.563,273,1.286,282,1.334,297,1.506,303,1.451,320,3.727,338,1.506,348,1.62,350,2.598,351,5.771,352,2.969,359,1.155,388,1.571,414,0.817,650,1.874,658,3.284,724,1.994,756,1.648,757,1.71,876,1.571,888,1.826,905,1.334,1073,1.548,1087,1.595,1119,4.428,1124,1.36,1144,1.874,1158,2.071,1162,4.164,1182,3.911,1191,1.745,1192,2.298,1193,2.298,1194,2.168,1195,3.525,1196,5.105,1197,3.911,1198,2.298,1199,2.298,1200,3.911,1201,2.298,1202,1.548,1203,2.168,1204,4.246,1205,4.246,1206,4.246,1207,2.855,1208,3.108,1209,4.602,1210,3.393,1211,2.168,1212,2.495,1213,2.298,1214,2.495,1215,2.298,1216,1.994,1217,1.487,1218,1.874,1219,2.495,1220,1.648,1221,2.495,1222,1.874,1223,2.168,1224,2.495,1225,2.495]],["component/10",[291,0.458]],["title/11-1",[1226,53.643]],["name/11-1",[]],["text/11-1",[]],["component/11-1",[]],["title/11-2",[219,22.255,1099,25.131,1202,25.827,1227,27.496,1228,29.112]],["name/11-2",[]],["text/11-2",[]],["component/11-2",[]],["title/11-3",[1229,57.762]],["name/11-3",[]],["text/11-3",[]],["component/11-3",[]],["title/11-4",[278,42.959]],["name/11-4",[]],["text/11-4",[]],["component/11-4",[]],["title/11-5",[127,23.597,278,28.792,388,34.848]],["name/11-5",[]],["text/11-5",[]],["component/11-5",[]],["title/11-6",[2,17.429,45,25.806,112,29.594]],["name/11-6",[]],["text/11-6",[]],["component/11-6",[]],["title/11-7",[21,31.125,67,26.558,163,29.879]],["name/11-7",[]],["text/11-7",[]],["component/11-7",[]],["title/11-8",[2,17.429,45,25.806,278,28.792]],["name/11-8",[]],["text/11-8",[]],["component/11-8",[]],["title/11-9",[115,36.877,804,43.052]],["name/11-9",[]],["text/11-9",[]],["component/11-9",[]],["title/11",[2,17.429,45,25.806,278,28.792]],["name/11",[2,0.279,45,0.412,278,0.46]],["text/11",[2,3.302,4,0.516,7,1.191,9,4.146,10,2.12,12,0.665,13,1.065,21,2.073,24,1.279,26,1.968,34,0.636,39,0.6,45,1.719,49,0.72,52,1.61,53,3.358,63,0.512,65,0.691,67,1.419,69,2.075,70,0.71,71,2.29,72,0.731,78,0.731,98,1.681,102,0.837,107,0.682,112,4.751,114,3.259,115,0.636,124,1.511,127,2.975,130,0.784,134,2.019,137,2.461,141,2.889,142,0.691,144,0.58,149,0.769,159,0.658,161,0.691,162,0.53,163,2.643,167,0.636,172,0.673,173,1.74,176,0.71,177,0.585,178,0.665,183,0.71,188,0.63,189,0.682,190,0.859,194,0.837,203,0.756,206,0.658,207,0.595,208,1.154,219,0.612,228,0.612,236,0.482,240,4.058,246,0.636,259,0.743,262,0.769,266,0.955,271,1.279,278,4.872,282,0.612,290,0.784,292,0.658,302,1.191,303,0.665,306,0.541,307,1.399,312,1.314,318,1.74,320,0.769,321,0.837,339,1.054,350,3.835,351,1.262,359,0.53,366,1.232,370,0.65,384,1.375,388,0.72,405,1.191,407,1.166,455,0.859,456,0.784,462,1.154,465,1.092,480,1.354,483,0.784,494,0.595,503,1.296,512,2.337,529,1.314,540,0.818,552,0.837,563,0.673,597,0.885,604,0.784,619,0.65,633,0.859,639,1.566,650,0.859,658,0.885,659,0.71,734,1.333,760,0.818,777,1.111,802,0.784,818,0.994,819,1.638,820,0.673,822,0.784,857,1.296,865,0.784,890,1.424,892,0.784,943,0.7,1059,0.914,1072,0.8,1099,4.213,1118,0.482,1131,0.682,1144,0.859,1162,2.222,1190,0.477,1202,1.314,1227,4.14,1230,1.693,1231,1.054,1232,1.638,1233,1.054,1234,2.363,1235,0.914,1236,2.77,1237,0.756,1238,2.957,1239,0.95,1240,1.054,1241,0.95,1242,1.144,1243,1.054,1244,1.951,1245,1.144,1246,1.054,1247,1.054,1248,2.118,1249,1.144,1250,0.818,1251,1.054,1252,1.144,1253,0.673,1254,0.95,1255,0.769,1256,2.723,1257,2.723,1258,0.859,1259,0.885,1260,0.994,1261,0.95,1262,1.144,1263,1.841,1264,1.144,1265,2.164,1266,1.144,1267,1.693,1268,0.994,1269,0.658,1270,1.144,1271,1.144,1272,0.837,1273,0.994,1274,0.731,1275,1.054,1276,1.951,1277,1.054,1278,1.054,1279,0.914,1280,1.054,1281,1.054,1282,1.054,1283,1.054,1284,0.994,1285,0.914,1286,1.144,1287,1.144,1288,1.144,1289,1.144,1290,0.914,1291,0.837,1292,1.054]],["component/11",[291,0.458]],["title/12-1",[1226,53.643]],["name/12-1",[]],["text/12-1",[]],["component/12-1",[]],["title/12-2",[219,22.255,1099,25.131,1202,25.827,1227,27.496,1228,29.112]],["name/12-2",[]],["text/12-2",[]],["component/12-2",[]],["title/12-3",[1229,57.762]],["name/12-3",[]],["text/12-3",[]],["component/12-3",[]],["title/12-4",[2,17.429,45,25.806,127,23.597]],["name/12-4",[]],["text/12-4",[]],["component/12-4",[]],["title/12-5",[115,36.877,804,43.052]],["name/12-5",[]],["text/12-5",[]],["component/12-5",[]],["title/12-6",[34,36.877,127,28.256]],["name/12-6",[]],["text/12-6",[]],["component/12-6",[]],["title/12-7",[127,23.597,225,37.935,678,39.569]],["name/12-7",[]],["text/12-7",[]],["component/12-7",[]],["title/12",[2,17.429,45,25.806,127,23.597]],["name/12",[2,0.279,45,0.412,127,0.377]],["text/12",[2,3.353,4,2.046,7,1.08,9,3.279,10,3.146,26,2.096,30,0.692,34,1.069,38,1.037,45,3.209,52,0.839,53,2.933,67,1.625,69,1.435,71,2.319,72,1.228,83,0.936,88,0.974,100,1.228,114,2.228,127,4.651,134,2.572,137,1.092,141,2.427,144,0.974,148,1.131,162,0.89,163,1.037,178,1.118,183,1.192,188,1.058,190,1.444,194,1.407,203,1.269,206,1.105,207,0.999,215,1.228,219,1.81,225,2.321,228,1.027,236,2.629,240,1.579,244,0.999,267,2.421,271,1.16,278,2.846,282,1.027,292,2.61,302,1.08,303,1.118,350,4.212,359,0.89,366,1.118,407,1.058,414,1.109,465,1.746,482,2.707,503,1.176,512,2.45,529,1.192,633,1.444,734,1.21,765,5.503,775,1.228,777,1.008,785,1.228,802,1.317,804,2.199,820,1.131,845,1.292,857,1.176,901,1.374,921,2.672,1048,1.292,1072,2.368,1073,1.192,1087,1.228,1099,3.767,1102,1.145,1103,1.248,1124,1.047,1131,1.145,1139,3.323,1163,1.536,1216,1.536,1227,1.269,1230,2.707,1232,1.486,1233,5.04,1235,2.707,1239,1.595,1253,1.993,1254,1.595,1263,3.945,1285,1.536,1293,1.595,1294,1.77,1295,1.77,1296,1.67,1297,1.67,1298,4.181,1299,1.922,1300,1.444,1301,1.67,1302,1.922,1303,1.595,1304,1.486,1305,3.386,1306,1.77,1307,1.77,1308,1.922,1309,3.119,1310,1.922,1311,1.77,1312,1.77,1313,3.119,1314,1.67,1315,1.374,1316,1.536,1317,1.77,1318,1.536,1319,1.922,1320,1.317,1321,1.922,1322,1.922,1323,1.374,1324,1.77,1325,1.77,1326,1.444,1327,1.444,1328,1.67,1329,1.77]],["component/12",[291,0.458]],["title/13-1",[67,22.799,302,26.719,303,27.638,1330,36.754]],["name/13-1",[]],["text/13-1",[]],["component/13-1",[]],["title/13-2",[2,14.962,262,31.953,303,27.638,1331,39.453]],["name/13-2",[]],["text/13-2",[]],["component/13-2",[]],["title/13-3",[2,13.107,26,11.738,45,19.406,292,23.931,1331,34.561]],["name/13-3",[]],["text/13-3",[]],["component/13-3",[]],["title/13-4",[2,14.962,6,19.794,359,22,1331,39.453]],["name/13-4",[]],["text/13-4",[]],["component/13-4",[]],["title/13-5",[2,17.429,915,33.869,1332,55.354]],["name/13-5",[]],["text/13-5",[]],["component/13-5",[]],["title/13-6",[2,20.87,112,35.437]],["name/13-6",[]],["text/13-6",[]],["component/13-6",[]],["title/13-7",[2,13.107,127,17.745,141,22.255,296,21.846,1333,28.527]],["name/13-7",[]],["text/13-7",[]],["component/13-7",[]],["title/13-8",[2,20.87,144,33.598]],["name/13-8",[]],["text/13-8",[]],["component/13-8",[]],["title/13-9",[2,14.962,10,27.319,70,29.483,1304,36.754]],["name/13-9",[]],["text/13-9",[]],["component/13-9",[]],["title/13-10",[2,14.962,10,27.319,607,26.719,1334,39.453]],["name/13-10",[]],["text/13-10",[]],["component/13-10",[]],["title/13-11",[26,15.609,127,23.597,1102,32.992]],["name/13-11",[]],["text/13-11",[]],["component/13-11",[]],["title/13-12",[0,14.841,26,9.406,45,15.55,67,16.003,302,18.755,605,20.409,1102,19.88]],["name/13-12",[]],["text/13-12",[]],["component/13-12",[]],["title/13-13",[127,28.256,144,33.598]],["name/13-13",[]],["text/13-13",[]],["component/13-13",[]],["title/13",[2,11.661,26,10.443,45,17.265,127,15.787,144,18.772,1330,28.645]],["name/13",[2,0.173,45,0.256,127,0.234,144,0.278,1330,0.424]],["text/13",[0,2.238,2,2.668,4,1.114,6,0.853,7,0.896,8,0.393,9,1.706,10,1.421,13,0.289,15,0.99,17,0.916,22,0.596,24,0.666,26,1.973,29,1.355,30,1.981,34,0.319,36,0.289,37,0.444,39,0.301,45,2.098,49,1.003,50,0.852,51,0.627,52,0.251,53,2.341,54,0.529,56,1.576,60,0.334,61,0.772,62,0.666,63,0.257,67,1.186,69,0.468,70,0.989,71,1.047,72,0.705,75,0.373,80,0.356,81,0.537,91,0.906,93,0.367,98,1.164,99,0.882,104,0.574,109,0.444,112,1.73,114,0.542,115,0.614,118,0.291,119,0.42,121,0.259,124,0.293,127,2.983,128,0.347,131,0.887,134,3.826,135,0.393,137,0.326,140,0.379,141,1.532,142,0.347,143,0.477,144,1.64,145,0.801,147,0.522,155,0.338,156,0.477,159,0.33,163,2.429,164,0.334,167,0.319,171,0.33,176,0.356,177,0.293,181,0.444,182,0.334,183,0.989,193,0.323,194,0.42,199,0.33,208,1.347,213,0.386,215,0.367,219,0.307,228,0.307,236,2.119,240,0.743,244,0.299,245,1.117,259,0.373,260,0.393,271,2.162,278,2.191,279,1.512,281,0.782,282,0.59,284,0.431,291,0.203,292,1.86,294,0.65,296,1.504,297,0.347,302,0.896,303,0.642,306,0.968,307,0.379,316,0.529,318,0.338,331,2.049,334,1.887,336,1.468,338,0.666,346,0.42,348,0.373,351,2.51,353,1.274,359,0.948,366,0.334,375,0.373,382,0.477,384,0.373,399,0.733,405,1.152,407,1.128,408,0.444,414,1.727,419,0.41,420,0.42,422,0.351,427,0.499,457,2.366,462,0.313,465,1.056,471,0.41,476,0.431,480,0.367,483,0.756,498,0.882,501,1.232,508,0.529,512,0.31,540,0.789,543,0.459,556,0.338,563,0.338,584,0.373,601,0.529,605,1.98,607,0.896,616,0.41,639,0.584,645,0.614,657,1.694,659,0.356,672,0.499,682,0.401,683,0.705,684,0.41,696,0.431,700,0.431,715,0.756,720,1.019,734,0.361,735,0.361,744,0.431,751,0.373,757,0.393,758,0.829,766,0.459,776,0.393,777,0.301,780,0.789,785,3.05,786,0.916,792,0.499,801,0.499,802,0.393,803,0.431,807,0.373,824,0.356,845,0.386,855,0.499,857,0.351,864,0.41,883,0.829,888,0.808,892,0.393,896,0.829,903,1.232,905,0.59,908,0.242,912,0.386,917,0.499,921,1.687,1066,0.42,1073,0.356,1082,1.605,1083,0.729,1085,1.353,1101,1.166,1102,1.928,1119,0.347,1122,0.316,1124,0.313,1125,0.789,1161,0.529,1162,1.197,1163,0.459,1175,1.975,1176,1.114,1180,0.347,1183,0.444,1186,0.431,1187,0.431,1195,0.477,1202,0.685,1203,2.812,1207,0.386,1220,0.379,1223,0.499,1231,4.395,1244,1.016,1246,0.529,1253,0.65,1254,0.477,1255,0.742,1274,0.367,1290,0.459,1303,0.477,1304,3.258,1314,0.499,1320,2.454,1323,0.789,1330,2.77,1331,2.686,1333,3.084,1334,2.686,1335,0.959,1336,0.41,1337,0.499,1338,4.371,1339,3.235,1340,0.459,1341,0.444,1342,0.574,1343,1.103,1344,0.367,1345,0.477,1346,0.444,1347,1.103,1348,0.574,1349,0.574,1350,0.574,1351,1.143,1352,0.529,1353,1.016,1354,0.477,1355,0.477,1356,1.103,1357,2.217,1358,2.64,1359,1.274,1360,2.291,1361,0.959,1362,3.235,1363,2.98,1364,0.499,1365,0.499,1366,0.574,1367,0.574,1368,0.829,1369,0.882,1370,0.916,1371,0.42,1372,2.471,1373,0.695,1374,2.048,1375,0.789,1376,1.78,1377,2.048,1378,1.103,1379,0.574,1380,0.916,1381,0.574,1382,0.574,1383,0.574,1384,1.593,1385,0.499,1386,0.574,1387,0.574,1388,0.574,1389,0.574,1390,1.103,1391,0.882,1392,1.584,1393,0.477,1394,0.459,1395,0.444,1396,0.574,1397,0.574,1398,0.529,1399,0.574,1400,0.574,1401,0.499,1402,0.477,1403,0.574,1404,0.529,1405,0.529,1406,1.103,1407,1.232,1408,0.574,1409,0.574,1410,1.539,1411,0.574,1412,0.574,1413,1.103,1414,1.166,1415,0.666,1416,0.529,1417,0.574,1418,1.103,1419,1.103,1420,0.459,1421,0.529,1422,0.574,1423,0.574,1424,1.103,1425,0.574,1426,1.593,1427,1.103,1428,0.459,1429,0.459,1430,0.459,1431,0.367,1432,0.574,1433,0.477,1434,0.499,1435,0.459,1436,0.574,1437,0.529,1438,0.477,1439,0.401,1440,0.431,1441,0.42,1442,0.574,1443,0.477,1444,0.529,1445,0.529,1446,0.574,1447,0.574,1448,0.574,1449,0.361,1450,0.286,1451,0.529,1452,0.574]],["component/13",[291,0.458]],["title/14-1",[1099,40.018,1202,41.126]],["name/14-1",[]],["text/14-1",[]],["component/14-1",[]],["title/14-2",[67,22.799,303,27.638,348,30.864,1099,28.689]],["name/14-2",[]],["text/14-2",[]],["component/14-2",[]],["title/14-3",[1202,41.126,1227,43.783]],["name/14-3",[]],["text/14-3",[]],["component/14-3",[]],["title/14-4",[1202,34.345,1453,50.985,1454,50.985]],["name/14-4",[]],["text/14-4",[]],["component/14-4",[]],["title/14-5",[1202,41.126,1455,61.052]],["name/14-5",[]],["text/14-5",[]],["component/14-5",[]],["title/14",[67,26.558,302,31.125,303,32.195]],["name/14",[303,0.742,1440,0.958]],["text/14",[0,1.058,6,1.698,7,3.007,26,1.787,34,2.975,53,0.938,55,3.367,66,1.417,67,2.566,69,3.524,76,2.793,81,1.985,102,1.741,104,1.237,112,1.271,114,2,124,1.216,134,1.523,137,3.04,144,2.066,193,1.337,203,1.571,228,1.271,239,1.741,240,2.954,246,1.323,282,1.271,296,1.248,297,3.229,303,4.146,306,1.124,313,2.647,348,4.116,350,5.088,351,2.429,413,1.7,417,1.741,462,1.296,465,1.226,500,2.067,557,1.663,619,3.04,639,1.26,657,1.63,696,1.787,739,1.901,740,2.067,747,1.599,798,1.63,807,1.545,820,1.4,860,5.837,865,1.63,870,2.067,879,3.258,892,1.63,1022,2.983,1087,1.52,1098,1.599,1099,5.915,1107,3.384,1109,1.901,1190,0.991,1202,6.514,1203,6.196,1227,6.052,1253,3.731,1265,1.741,1277,3.754,1278,2.19,1279,1.901,1280,2.19,1281,2.19,1282,2.19,1283,3.754,1440,1.787,1453,2.19,1454,2.19,1455,3.754,1456,1.7,1457,1.599,1458,2.378,1459,2.378,1460,2.19,1461,2.378,1462,2.378,1463,2.378,1464,5.348,1465,2.378,1466,1.974,1467,2.067,1468,1.901,1469,2.067,1470,2.19,1471,2.067,1472,2.378,1473,2.067,1474,2.19,1475,1.974,1476,1.974,1477,2.378,1478,2.19,1479,2.378,1480,2.19,1481,2.378]],["component/14",[291,0.458]],["title/15-1",[1226,53.643]],["name/15-1",[]],["text/15-1",[]],["component/15-1",[]],["title/15-2",[219,22.255,1099,25.131,1202,25.827,1227,27.496,1228,29.112]],["name/15-2",[]],["text/15-2",[]],["component/15-2",[]],["title/15-3",[1229,57.762]],["name/15-3",[]],["text/15-3",[]],["component/15-3",[]],["title/15-4",[56,32.284,414,21.714]],["name/15-4",[]],["text/15-4",[]],["component/15-4",[]],["title/15-5",[279,40.557,414,21.714]],["name/15-5",[]],["text/15-5",[]],["component/15-5",[]],["title/15",[2,14.962,45,22.153,144,24.087,1099,28.689]],["name/15",[2,0.279,45,0.412,144,0.448]],["text/15",[2,2.071,18,1.531,29,2.755,30,2.367,45,3.543,49,1.994,50,1.694,52,1.383,53,2.045,56,4.383,67,1.52,73,2.171,77,2.13,127,2.209,134,4.037,141,1.694,144,1.606,147,1.498,167,1.762,178,1.842,188,1.744,189,1.888,206,1.821,219,1.694,228,1.694,236,3.531,240,2.416,246,1.762,265,2.319,279,5.128,282,1.694,302,1.781,303,1.842,306,1.498,318,1.865,350,5.128,359,2.399,414,3.111,417,2.319,496,1.965,503,1.938,529,1.965,605,1.938,607,2.914,633,2.38,670,2.45,715,2.171,767,3.894,777,1.663,804,2.058,921,1.865,1073,1.965,1099,5.06,1101,3.794,1118,2.771,1124,1.727,1154,2.13,1227,2.092,1253,1.865,1263,5.716,1304,4.009,1306,2.918,1309,6.058,1334,4.303,1358,4.774,1363,7.72,1414,2.319,1482,2.63,1483,3.168,1484,3.168,1485,3.168]],["component/15",[291,0.458]],["title/16-1",[1226,53.643]],["name/16-1",[]],["text/16-1",[]],["component/16-1",[]],["title/16-2",[0,29.493,512,35.779]],["name/16-2",[]],["text/16-2",[]],["component/16-2",[]],["title/16-3",[512,35.779,1476,55.033]],["name/16-3",[]],["text/16-3",[]],["component/16-3",[]],["title/16-4",[351,32.992,512,29.879,1475,45.959]],["name/16-4",[]],["text/16-4",[]],["component/16-4",[]],["title/16-5",[605,29.075,645,26.437,684,33.968,1107,39.453]],["name/16-5",[]],["text/16-5",[]],["component/16-5",[]],["title/16-6",[1030,48.521,1429,52.978]],["name/16-6",[]],["text/16-6",[]],["component/16-6",[]],["title/16-7",[1430,66.013]],["name/16-7",[]],["text/16-7",[]],["component/16-7",[]],["title/16-8",[0,24.63,512,29.879,1473,48.108]],["name/16-8",[]],["text/16-8",[]],["component/16-8",[]],["title/16-9",[0,29.493,127,28.256]],["name/16-9",[]],["text/16-9",[]],["component/16-9",[]],["title/16",[0,24.63,67,26.558,302,31.125]],["name/16",[0,0.394,67,0.424,302,0.497]],["text/16",[0,4.074,2,1.477,3,1.114,12,0.627,13,1.007,15,0.968,21,1.578,26,1.703,30,2.174,38,1.081,39,0.565,41,0.712,45,3.545,47,0.582,52,1.534,53,2.529,60,2.043,63,2.323,67,2.25,69,2.388,76,1.924,88,0.546,91,0.476,98,0.612,105,0.861,111,0.861,119,2.055,127,3.129,134,2.932,137,1.596,142,1.695,143,0.894,145,0.542,147,1.327,155,0.634,163,1.515,170,0.894,171,1.152,175,3.488,176,1.243,177,1.024,178,0.627,182,0.627,183,1.243,184,0.612,186,0.789,188,0.593,197,0.7,198,0.983,199,0.619,200,0.689,206,0.619,207,0.56,208,1.092,219,1.071,225,0.738,236,2.185,240,1.637,242,0.753,244,0.56,275,1.042,277,0.582,280,0.7,281,0.529,282,0.576,290,0.738,294,0.634,302,1.578,303,1.165,315,0.712,320,0.724,325,0.809,335,0.894,348,0.7,350,4.653,351,4.021,359,0.499,361,0.936,382,1.663,405,0.606,406,0.627,436,1.261,465,1.447,466,0.724,474,2.407,483,0.738,494,0.56,512,3.642,515,0.712,556,2.434,605,5.409,623,0.992,624,0.789,639,1.487,644,0.833,645,4.23,682,1.963,683,0.689,684,4.582,744,0.809,751,0.7,760,0.77,777,0.565,785,0.689,789,0.77,794,0.789,799,0.894,802,1.373,818,0.936,820,0.634,839,0.861,856,0.833,876,2.603,888,0.789,915,0.659,932,0.789,1027,0.861,1030,2.571,1049,0.992,1072,1.401,1085,0.712,1098,1.347,1099,5.337,1102,1.194,1103,0.7,1107,2.331,1145,0.894,1159,1.845,1162,1.505,1202,1.742,1207,2.362,1220,1.323,1228,0.753,1241,0.894,1250,1.432,1253,0.634,1255,0.724,1260,0.936,1291,0.789,1307,4.32,1323,0.77,1327,0.809,1346,1.549,1368,0.809,1395,2.717,1398,1.845,1404,0.992,1410,0.809,1429,3.305,1430,3.748,1431,0.689,1433,0.894,1437,0.992,1441,0.789,1473,3.594,1474,0.992,1475,4.306,1476,3.894,1478,2.586,1480,1.845,1486,0.77,1487,1.077,1488,0.833,1489,1.077,1490,2.003,1491,1.077,1492,0.789,1493,1.077,1494,1.077,1495,0.992,1496,0.861,1497,0.936,1498,1.077,1499,0.809,1500,1.077,1501,0.861,1502,1.077,1503,0.753,1504,1.077,1505,1.077,1506,0.861,1507,1.077,1508,1.077,1509,1.077,1510,1.077]],["component/16",[291,0.458]],["title/17-1",[1226,53.643]],["name/17-1",[]],["text/17-1",[]],["component/17-1",[]],["title/17-2",[26,13.4,53,18.751,1333,48.835]],["name/17-2",[]],["text/17-2",[]],["component/17-2",[]],["title/17-3",[53,26.155,1511,55.033]],["name/17-3",[]],["text/17-3",[]],["component/17-3",[]],["title/17",[53,21.843,141,29.594,296,29.051]],["name/17",[1512,2.285]],["text/17",[0,4.268,2,1.828,9,2.472,12,0.852,21,2.05,26,1.263,51,3.3,52,1.16,53,2.854,63,0.656,67,3.042,68,1.072,69,2.199,71,2.199,81,1.294,115,1.478,127,2.703,128,0.885,133,0.909,134,4.283,141,0.783,144,1.347,162,0.678,167,0.815,177,1.863,178,0.852,183,0.909,195,0.952,198,1.789,207,0.762,212,0.824,219,1.42,236,3.205,240,1.699,245,0.799,252,0.952,264,3.069,266,0.66,274,0.968,294,1.564,296,1.394,302,2.05,303,0.852,338,0.885,342,0.873,350,2.74,351,2.173,352,1.025,359,1.23,366,0.852,375,1.726,392,1.896,399,0.674,407,0.807,474,1.004,512,0.791,526,1.072,556,1.564,568,3.799,604,1.821,645,3.229,682,1.858,684,3.201,685,2.206,734,0.922,746,1.072,756,0.968,780,1.047,808,1.349,857,1.626,865,1.004,1099,5.146,1131,2.669,1202,3.22,1207,0.985,1220,3.428,1228,1.025,1251,1.349,1253,0.862,1258,1.996,1333,4.957,1336,1.047,1395,2.055,1440,1.101,1466,2.206,1471,1.273,1475,3.027,1476,1.216,1496,3.579,1511,5.265,1513,1.349,1514,2.309,1515,1.465,1516,7.607,1517,1.465,1518,2.447,1519,1.349,1520,1.465,1521,1.996,1522,2.657,1523,2.657,1524,1.349,1525,1.465,1526,2.657,1527,2.657,1528,1.465,1529,3.645,1530,1.216,1531,3.645,1532,2.657,1533,4.125,1534,2.657,1535,1.465,1536,2.657,1537,2.447,1538,1.465,1539,1.465,1540,1.465,1541,1.273,1542,1.465,1543,1.465,1544,1.465,1545,2.657,1546,1.465,1547,1.465,1548,1.465,1549,1.465,1550,1.465,1551,1.133,1552,3.645,1553,1.465,1554,1.465,1555,2.657]],["component/17",[291,0.458]],["title/18-1",[57,30.479,460,29.594,915,33.869]],["name/18-1",[]],["text/18-1",[]],["component/18-1",[]],["title/18-2",[2,20.87,460,35.437]],["name/18-2",[]],["text/18-2",[]],["component/18-2",[]],["title/18-3",[2,17.429,497,31.824,1556,34.848]],["name/18-3",[]],["text/18-3",[]],["component/18-3",[]],["title/18-4",[2,17.429,435,34.848,1557,50.985]],["name/18-4",[]],["text/18-4",[]],["component/18-4",[]],["title/18-5",[2,17.429,514,41.59,1040,37.222]],["name/18-5",[]],["text/18-5",[]],["component/18-5",[]],["title/18-6",[171,38.107,1022,48.521]],["name/18-6",[]],["text/18-6",[]],["component/18-6",[]],["title/18",[57,26.165,134,17.752,460,25.405,1558,33.233]],["name/18",[57,1.258]],["text/18",[2,3.074,12,0.561,15,0.466,17,0.555,26,0.719,27,1.194,36,0.485,38,1.731,39,0.949,40,0.69,44,0.583,47,0.521,50,1.363,51,2.158,53,0.381,57,2.09,63,1.937,69,1.08,88,0.489,91,0.427,95,2.672,98,2.158,102,0.706,104,0.502,118,3.641,127,0.411,133,2.355,141,0.516,142,1.539,144,0.916,148,2.234,151,1.264,152,0.675,155,1.064,159,1.039,161,0.583,167,1.006,171,2.182,177,0.493,179,0.69,187,0.607,193,0.543,199,0.555,204,0.746,206,1.039,207,2.249,219,2.799,228,1.363,236,0.762,244,0.94,246,2.406,247,2.211,266,1.149,276,0.661,281,1.251,291,0.341,295,0.637,298,1.239,306,0.855,313,0.627,320,0.649,347,2.348,366,1.051,372,0.889,375,0.627,390,1.358,392,3.983,393,4.356,396,0.706,399,0.444,400,1.501,405,1.804,407,3.484,414,1.715,418,0.746,430,0.746,435,6.08,436,3.545,446,0.746,458,0.889,460,5.59,462,0.526,481,0.706,486,1.194,490,0.771,493,0.675,497,5.204,509,1.398,514,4.231,519,1.239,525,0.69,526,2.348,528,0.801,556,0.568,575,1.866,598,1.571,606,2.481,607,2.134,611,0.617,613,0.568,616,0.69,619,3.201,624,0.706,631,0.801,645,2.406,660,0.771,683,0.617,697,1.445,736,0.746,737,0.675,744,0.725,758,1.915,759,0.627,776,3.859,797,0.889,807,1.174,820,0.568,824,1.582,825,0.725,831,0.746,850,1.398,857,0.59,865,0.661,875,2.515,907,0.771,908,0.762,909,1.571,913,0.839,915,0.59,916,0.839,1022,1.866,1034,1.121,1040,3.229,1053,2.019,1073,0.599,1085,0.637,1105,0.725,1118,0.762,1154,0.649,1177,0.801,1189,1.398,1190,0.753,1208,2.348,1237,0.637,1269,0.555,1294,0.889,1303,0.801,1341,0.746,1428,0.771,1457,1.215,1556,4.177,1557,1.665,1559,1.807,1560,0.965,1561,0.801,1562,0.965,1563,3.152,1564,3.758,1565,0.771,1566,0.965,1567,1.571,1568,1.501,1569,0.965,1570,0.746,1571,3.608,1572,0.889,1573,0.801,1574,1.665,1575,0.889,1576,1.501,1577,0.889,1578,2.348,1579,0.889,1580,0.839,1581,0.889,1582,0.889,1583,0.965,1584,0.965,1585,0.889,1586,0.889,1587,0.889,1588,0.889,1589,0.889,1590,0.965,1591,0.889,1592,0.965,1593,0.965,1594,0.889,1595,0.839,1596,0.965,1597,0.889,1598,0.839]],["component/18",[291,0.458]],["title/19",[134,17.752,435,29.915,509,36.754,1558,33.233]],["name/19",[435,0.803,509,0.987]],["text/19",[2,3.181,4,1.66,26,1.651,30,2.107,51,2.094,53,1.454,55,2.319,69,1.561,76,2.525,81,1.794,118,4.885,133,2.286,141,1.97,144,1.867,159,2.118,171,2.118,176,2.286,178,2.143,189,2.196,193,2.071,219,1.97,236,4.418,242,2.576,244,1.916,292,2.118,298,2.525,370,2.094,392,3.045,414,2.386,435,6.601,460,5.605,497,5.541,509,5.633,607,2.071,612,2.477,613,4.287,639,1.951,670,2.849,731,5.332,785,2.355,824,2.286,876,4.585,894,4.86,908,1.552,1226,2.393,1250,5.206,1392,2.849,1556,3.685,1564,3.202,1571,2.768,1578,3.393,1579,3.393,1598,3.202,1599,3.393,1600,3.393,1601,3.393]],["component/19",[291,0.458]],["title/20",[134,17.752,460,25.405,497,27.319,1558,33.233]],["name/20",[460,0.682,497,0.733]],["text/20",[2,2.439,4,1.826,26,1.778,30,1.458,53,1.598,55,2.55,69,1.717,74,2.208,76,2.776,81,1.973,83,3.072,91,1.791,100,2.589,104,2.107,118,3.926,133,3.913,144,2.053,182,2.356,189,2.414,193,2.278,236,1.707,264,2.776,277,2.186,292,2.329,312,3.913,392,3.28,407,3.473,414,2.066,435,3.971,460,5.364,465,2.088,483,2.776,497,6.398,613,2.384,619,3.585,639,2.145,670,3.133,776,2.776,785,2.589,854,5.809,856,3.133,869,3.363,875,2.356,876,4.876,908,1.707,1053,2.55,1241,3.363,1250,2.895,1456,2.895,1556,6.316,1561,3.363,1571,5.819,1576,3.363,1581,5.809,1602,4.05,1603,4.05,1604,3.52,1605,3.363]],["component/20",[291,0.458]],["title/21",[118,24.087,134,17.752,1066,34.784,1558,33.233]],["name/21",[460,0.682,876,0.803]],["text/21",[0,1.101,2,3.039,4,1.9,12,2.452,13,2.12,26,1.835,30,0.891,44,1.494,47,1.336,50,2.254,52,1.081,53,2.174,55,1.558,57,1.363,63,1.108,67,1.187,69,2.335,74,1.349,75,1.607,76,1.696,81,1.205,91,1.094,104,2.865,116,1.558,118,2.792,127,1.055,130,1.696,133,4.529,134,1.575,137,1.407,144,1.254,147,1.17,148,1.457,152,1.731,171,1.423,189,1.475,193,1.391,236,2.741,266,1.115,292,2.424,297,1.494,312,1.535,359,1.146,366,1.439,376,1.731,392,4.132,405,1.391,407,1.363,414,1.805,422,1.514,435,3.468,441,1.731,460,5.949,465,1.276,494,1.287,497,3.167,501,1.914,526,3.086,552,1.811,574,2.055,605,4.466,607,1.391,613,2.482,644,1.914,664,3.501,667,1.696,759,1.607,785,1.582,789,1.769,794,1.811,795,1.859,798,1.696,804,1.607,850,3.261,875,2.452,876,5.866,908,1.043,1073,1.535,1083,1.635,1098,1.664,1140,2.055,1226,1.607,1250,1.769,1290,1.978,1429,1.978,1430,1.978,1443,2.055,1456,1.769,1556,3.468,1570,3.261,1571,4.139,1576,2.055,1604,2.151,1605,2.055,1606,1.811,1607,2.475,1608,2.475,1609,1.731,1610,2.475,1611,2.279,1612,2.475,1613,1.859,1614,4.574,1615,2.151,1616,2.279,1617,1.978,1618,2.475]],["component/21",[291,0.458]],["title/22-1",[118,33.598,1563,55.033]],["name/22-1",[]],["text/22-1",[]],["component/22-1",[]],["title/22-2",[497,38.107,1619,57.607]],["name/22-2",[]],["text/22-2",[]],["component/22-2",[]],["title/22-3",[226,34.787,1180,40.018]],["name/22-3",[]],["text/22-3",[]],["component/22-3",[]],["title/22",[44,25.131,134,15.551,460,22.255,1208,30.471,1558,29.112]],["name/22",[460,0.682,1208,0.934]],["text/22",[0,1.47,2,2.89,4,2.001,26,1.252,30,1.93,44,1.128,51,3.049,52,0.816,53,1.304,55,2.08,57,1.029,67,1.585,69,2.273,76,3.676,93,1.194,100,2.112,105,2.641,118,2.719,133,3.328,152,2.311,176,2.05,178,1.922,189,3.197,193,3.016,199,1.074,219,1.766,236,3.084,266,0.842,292,2.553,297,1.128,306,1.562,342,1.114,370,1.878,392,2.79,405,1.051,407,4.718,414,2.553,429,1.494,435,4.607,460,4.581,465,0.963,486,4.047,497,4.717,606,6.346,607,3.016,639,0.99,785,3.428,798,1.281,831,2.555,857,1.143,876,3.376,908,1.392,1098,1.257,1118,1.871,1154,4.552,1208,3.251,1213,1.721,1226,2.146,1250,2.362,1431,1.194,1503,2.311,1556,3.376,1563,7.114,1564,3.859,1567,2.871,1571,3.336,1575,1.721,1577,4.09,1585,1.721,1587,4.09,1600,1.721,1601,1.721,1619,7.726,1620,6.127,1621,6.076,1622,6.346,1623,4.441,1624,3.304,1625,1.869,1626,1.869,1627,2.482,1628,1.551]],["component/22",[291,0.458]],["title/23",[134,15.551,460,22.255,1053,26.206,1351,16.598,1558,29.112]],["name/23",[1629,2.285]],["text/23",[26,2.159,63,3.429,145,3.849,163,4.133,247,3.914,325,5.753,399,3.521,407,5.484,422,4.685,460,5.324,481,5.605,497,4.402,754,5.922,759,4.973,1053,4.82,1208,5.605,1346,5.922,1351,3.971,1556,4.82,1621,6.357,1630,7.657]],["component/23",[291,0.458]],["title/24",[134,17.752,460,25.405,611,30.374,1558,33.233]],["name/24",[460,0.682,611,0.815]],["text/24",[0,1.347,2,3.272,4,1.364,26,1.408,30,1.089,53,2.514,55,1.905,56,2.431,69,1.283,74,1.65,76,2.074,81,1.474,118,4.462,133,4.587,134,1.865,159,2.87,161,3.014,178,1.76,189,1.804,193,1.702,199,2.87,219,1.618,236,3.446,246,1.684,247,2.552,283,2.035,292,1.74,306,2.36,312,3.097,366,2.904,391,2.644,392,3.314,407,2.749,414,2.884,435,4.011,460,5.817,497,5.799,501,2.341,575,2.215,605,1.852,607,1.702,611,4.725,644,2.341,731,3.654,759,1.966,785,1.935,875,4.757,876,4.011,908,1.275,1226,1.966,1250,2.163,1328,2.63,1392,2.341,1556,4.654,1572,5.868,1574,2.788,1582,5.868,1599,6.809,1609,2.117,1631,4.992,1632,3.026,1633,3.026]],["component/24",[291,0.458]],["title/25-1",[104,24.716,118,24.087,460,25.405,619,27.013]],["name/25-1",[]],["text/25-1",[]],["component/25-1",[]],["title/25-2",[497,31.824,657,37.935,1556,34.848]],["name/25-2",[]],["text/25-2",[]],["component/25-2",[]],["title/25-3",[247,28.296,850,42.814,1614,45.959]],["name/25-3",[]],["text/25-3",[]],["component/25-3",[]],["title/25-4",[104,28.792,236,23.323,399,25.453]],["name/25-4",[]],["text/25-4",[]],["component/25-4",[]],["title/25-5",[236,23.323,399,25.453,435,34.848]],["name/25-5",[]],["text/25-5",[]],["component/25-5",[]],["title/25-6",[67,22.799,497,40.967,619,27.013]],["name/25-6",[]],["text/25-6",[]],["component/25-6",[]],["title/25-7",[236,23.323,399,25.453,435,34.848]],["name/25-7",[]],["text/25-7",[]],["component/25-7",[]],["title/25-8",[63,29.683,226,34.787]],["name/25-8",[]],["text/25-8",[]],["component/25-8",[]],["title/25",[104,19.263,134,13.835,460,19.8,497,21.291,619,21.053,1558,25.901]],["name/25",[104,0.352,460,0.362,497,0.389,619,0.385]],["text/25",[2,3.016,4,2.61,26,1.812,30,2.084,36,0.863,53,2.751,55,3.645,56,0.836,57,0.945,63,0.769,67,2.419,69,2.454,75,1.99,76,3.968,86,0.987,104,3.012,118,3.775,120,2.543,134,1.144,144,1.553,145,0.863,147,2.384,159,1.761,176,1.065,177,0.877,188,0.945,189,3.451,193,3.256,228,0.918,236,3.607,239,1.256,244,0.893,246,0.955,247,3.564,266,0.774,292,3.329,306,0.812,325,1.29,359,1.418,376,2.142,399,2.662,412,1.492,414,2.805,419,1.227,435,4.688,446,1.328,460,4.876,462,0.936,497,5.915,512,1.654,574,2.543,611,1.097,613,2.968,619,2.359,657,2.099,720,1.097,748,1.29,785,3.701,840,1.492,850,5.393,865,1.176,876,5.575,908,2.44,1083,2.024,1131,1.023,1158,1.425,1180,1.036,1226,1.115,1250,4.139,1431,1.097,1556,5.575,1561,1.425,1571,1.29,1604,2.662,1611,1.581,1614,6.835,1615,2.662,1616,2.822,1617,2.448,1634,3.063,1635,3.063,1636,1.425,1637,3.063,1638,5.042]],["component/25",[291,0.458]],["title/26-1",[44,33.419,405,31.125,460,29.594]],["name/26-1",[]],["text/26-1",[]],["component/26-1",[]],["title/26-2",[236,23.323,338,33.419,1269,31.824]],["name/26-2",[]],["text/26-2",[]],["component/26-2",[]],["title/26-3",[300,51.995]],["name/26-3",[]],["text/26-3",[]],["component/26-3",[]],["title/26-4",[435,41.728,460,35.437]],["name/26-4",[]],["text/26-4",[]],["component/26-4",[]],["title/26-5",[514,49.802,1040,44.571]],["name/26-5",[]],["text/26-5",[]],["component/26-5",[]],["title/26-6",[866,63.881]],["name/26-6",[]],["text/26-6",[]],["component/26-6",[]],["title/26-7",[390,49.802,908,27.928]],["name/26-7",[]],["text/26-7",[]],["component/26-7",[]],["title/26",[134,17.752,300,29.915,460,25.405,1558,33.233]],["name/26",[300,1.438]],["text/26",[2,0.918,12,1.697,13,1.466,15,1.41,26,1.119,38,2.142,39,1.531,44,4.363,52,1.274,53,1.151,55,1.023,57,0.895,67,1.904,69,0.689,80,1.008,86,0.934,95,0.904,100,1.039,104,0.845,118,3.663,122,1.162,123,0.981,133,4.974,134,3.777,137,1.658,141,1.56,148,2.85,151,1.136,162,0.752,164,0.945,167,1.623,171,2.784,204,1.257,212,0.914,226,0.853,236,0.685,240,2.257,242,1.136,277,0.877,282,0.869,294,0.957,298,1.999,306,0.768,310,0.886,313,1.055,314,1.927,321,1.189,342,0.968,344,1.189,347,2.135,365,1.162,370,3.838,375,1.055,390,1.221,391,0.861,392,3.512,393,1.257,398,3.449,399,0.747,400,1.349,435,4.251,446,3.745,457,1.073,460,5.405,461,1.836,469,1.299,470,3.745,495,1.497,497,4.395,514,3.638,526,2.905,556,1.717,563,0.957,574,3.295,575,3.545,598,3.449,606,1.257,630,1.189,639,0.861,645,0.904,667,1.114,759,1.055,776,1.114,804,1.055,828,1.349,850,2.256,866,2.256,875,2.309,907,3.172,908,1.229,1040,2.669,1053,1.023,1073,1.008,1140,1.349,1208,1.189,1229,1.136,1234,3.172,1284,1.412,1303,1.349,1431,1.039,1457,1.093,1563,1.349,1576,2.422,1591,1.497,1594,1.497,1595,2.535,1614,2.422,1622,1.257,1639,1.412,1640,1.625,1641,1.412,1642,1.349,1643,2.687,1644,1.927,1645,2.256,1646,1.299,1647,2.917,1648,3.969,1649,1.349,1650,1.625,1651,1.625,1652,1.625,1653,1.625,1654,3.969,1655,2.917,1656,1.625,1657,1.625,1658,1.349,1659,2.687,1660,1.625,1661,1.625,1662,1.093,1663,1.625,1664,2.917,1665,1.412,1666,3.656,1667,3.172,1668,4.842,1669,2.622,1670,1.412,1671,1.625,1672,1.221,1673,1.625,1674,1.625,1675,1.497,1676,1.625,1677,1.625,1678,1.625,1679,1.625,1680,1.497,1681,1.625]],["component/26",[291,0.458]],["title/27",[134,15.551,497,23.931,1556,26.206,1558,29.112,1672,31.276]],["name/27",[497,0.509,1556,0.557,1672,0.665]],["text/27",[2,2.839,4,1.27,26,0.794,30,1.014,51,2.674,52,1.23,53,1.112,55,1.773,57,2.59,67,1.352,69,1.194,74,1.536,76,1.931,78,1.801,81,1.372,86,1.62,100,1.801,118,3.986,133,2.918,144,1.428,147,2.863,148,1.658,159,1.62,177,1.44,178,1.638,188,1.551,189,1.679,193,1.584,199,2.704,206,1.62,219,1.506,236,2.551,246,1.567,264,1.931,266,1.27,283,3.163,292,1.62,312,2.918,392,2.447,405,1.584,407,3.334,414,1.984,419,2.014,435,3.812,460,4.821,490,3.759,497,6.24,552,2.062,556,1.658,607,1.584,613,3.564,759,1.83,785,1.801,824,1.748,861,2.339,875,2.736,876,4.452,908,1.187,1226,1.83,1237,1.861,1250,2.014,1274,1.801,1291,2.062,1328,4.088,1556,7.152,1567,2.448,1571,4.55,1588,4.332,1589,2.595,1605,3.905,1619,5.263,1621,2.339,1636,2.339,1672,7.1,1682,4.55,1683,2.448,1684,2.817,1685,2.817]],["component/27",[291,0.458]],["title/28-1",[226,34.787,227,34.787]],["name/28-1",[]],["text/28-1",[]],["component/28-1",[]],["title/28",[83,26.96,392,28.792,1686,33.419]],["name/28",[83,0.621,392,0.663]],["text/28",[36,4.053,57,4.439,93,5.153,250,6.693,304,6.693,312,5.002,325,6.057,392,4.193,404,5.153,414,2.641,494,4.193,604,5.525,1686,7.215,1687,6.136,1688,7.006,1689,6.693]],["component/28",[291,0.458]],["title/29-1",[619,31.467,899,42.814,1686,33.419]],["name/29-1",[]],["text/29-1",[]],["component/29-1",[]],["title/29-2",[1097,52.978,1687,39.506]],["name/29-2",[]],["text/29-2",[]],["component/29-2",[]],["title/29-3",[2,17.429,359,25.627,1690,45.959]],["name/29-3",[]],["text/29-3",[]],["component/29-3",[]],["title/29-4",[245,30.174,1097,44.243,1687,32.992]],["name/29-4",[]],["text/29-4",[]],["component/29-4",[]],["title/29-5",[308,37.68,1669,43.783]],["name/29-5",[]],["text/29-5",[]],["component/29-5",[]],["title/29-6",[226,34.787,227,34.787]],["name/29-6",[]],["text/29-6",[]],["component/29-6",[]],["title/29",[57,36.497,1686,40.018]],["name/29",[57,1.258]],["text/29",[2,3.289,6,1.314,9,1.503,10,2.252,15,0.597,16,2.996,18,2.747,26,1.292,36,1.142,38,0.666,39,1.656,50,1.687,52,0.539,53,1.245,56,0.601,62,0.745,65,1.905,66,0.736,69,1.337,71,0.523,72,0.789,75,0.802,83,1.106,90,0.846,91,2.026,93,0.789,98,0.702,114,0.606,115,0.687,128,0.745,133,0.766,147,0.584,150,0.66,157,0.986,159,1.814,161,0.745,162,0.571,163,0.666,171,1.814,172,0.726,199,0.709,200,0.789,204,0.955,207,2.038,208,1.238,219,0.66,233,0.986,236,2.589,240,1.059,245,0.673,247,0.631,258,0.986,262,0.83,274,0.815,276,0.846,282,0.66,296,0.648,302,0.694,306,0.584,308,2.227,323,0.986,392,4.932,394,1.025,401,1.073,405,0.694,414,2.661,437,1.073,440,1.073,460,1.214,465,0.636,469,0.986,473,2.906,474,1.557,476,1.707,481,0.903,491,1.073,494,3.606,506,0.882,512,1.226,524,0.927,525,0.882,526,0.903,544,0.903,556,0.726,557,0.863,572,1.025,575,0.903,602,0.846,613,0.726,615,0.903,619,1.291,631,1.025,654,1.886,675,1.073,678,0.882,679,2.092,756,0.815,766,0.986,776,0.846,798,1.557,820,0.726,856,0.955,876,0.777,885,1.815,899,1.757,904,1.137,908,0.52,915,1.931,943,0.755,1034,0.766,1077,1.025,1083,0.815,1097,3.131,1109,0.986,1119,0.745,1162,0.927,1207,0.83,1209,1.025,1216,0.986,1218,0.927,1220,0.815,1274,0.789,1326,1.707,1327,0.927,1441,0.903,1556,0.777,1565,0.986,1627,0.927,1644,3.754,1667,0.986,1669,2.588,1686,5.53,1687,5.82,1689,1.886,1690,2.62,1691,4.063,1692,1.137,1693,1.137,1694,1.137,1695,3.882,1696,1.815,1697,1.974,1698,1.234,1699,1.073,1700,1.234,1701,1.137,1702,1.234,1703,1.234,1704,1.234,1705,1.234,1706,1.234,1707,1.234,1708,1.234,1709,3.387,1710,1.025,1711,1.234,1712,2.092,1713,2.271,1714,1.137,1715,1.234,1716,1.234,1717,1.137,1718,1.886,1719,1.234,1720,1.137,1721,2.271,1722,1.234,1723,1.234,1724,1.234,1725,3.662,1726,3.918,1727,0.83,1728,1.234,1729,1.234,1730,1.234,1731,1.234,1732,1.886,1733,3.918,1734,1.234,1735,1.234,1736,2.271,1737,1.234,1738,1.234,1739,1.234,1740,1.234,1741,1.137,1742,1.234,1743,1.234,1744,1.234,1745,1.234,1746,1.234,1747,1.234,1748,1.234,1749,2.271,1750,1.234,1751,1.234,1752,1.234,1753,1.234,1754,1.234,1755,1.025,1756,1.137,1757,0.986,1758,1.073]],["component/29",[291,0.458]],["title/30-1",[226,34.787,227,34.787]],["name/30-1",[]],["text/30-1",[]],["component/30-1",[]],["title/30",[45,25.806,86,31.824,1709,32.992]],["name/30",[429,0.707,1687,0.527,1755,0.735]],["text/30",[2,2.33,16,3.842,18,4.066,38,3.221,45,3.45,47,2.038,50,3.191,53,2.355,56,1.839,62,2.279,81,1.839,91,1.669,119,2.763,124,1.93,130,2.587,145,1.898,178,2.196,182,4.305,208,2.058,215,2.413,226,3.132,264,2.587,273,3.077,309,4.369,359,1.748,414,3.566,429,4.77,541,2.64,546,2.538,552,2.763,556,5.393,607,3.356,857,2.31,1118,2.515,1169,4.013,1171,4.369,1237,2.494,1613,2.836,1682,2.836,1709,6.645,1759,3.477,1760,8.465,1761,3.281,1762,2.587,1763,3.477,1764,8.465,1765,3.477,1766,3.017,1767,3.281,1768,5.187,1769,3.281]],["component/30",[291,0.458]],["title/31-1",[226,34.787,227,34.787]],["name/31-1",[]],["text/31-1",[]],["component/31-1",[]],["title/31",[1709,39.506,1770,48.521]],["name/31",[1709,0.76,1770,0.934]],["text/31",[16,1.724,18,3.577,36,3,50,2.018,52,1.648,55,2.377,56,2.907,66,2.25,86,3.431,98,2.146,182,3.471,199,2.17,219,2.018,246,2.1,370,3.393,407,2.079,414,2.755,456,4.09,556,4.951,571,3.281,652,2.763,735,4.659,775,4.731,875,2.196,901,2.698,1072,2.64,1154,4.977,1172,4.77,1222,2.836,1360,3.017,1438,3.134,1456,4.266,1667,6.723,1686,5.531,1709,6.779,1770,7.741,1771,3.477,1772,3.281,1773,3.775,1774,3.477,1775,3.281,1776,2.452,1777,6.983,1778,3.017,1779,4.77,1780,5.497,1781,5.187,1782,3.281,1783,7.31,1784,3.134,1785,3.477]],["component/31",[291,0.458]],["title/32",[556,32.584,1686,33.419,1709,32.992]],["name/32",[1709,1.362]],["text/32",[0,1.265,2,1.919,4,2.137,16,3.899,18,4.377,26,1.337,30,1.023,38,1.535,51,1.616,52,2.07,53,2.807,55,1.79,63,1.273,69,2.009,91,2.096,128,1.717,134,1.771,145,1.429,150,3.259,198,2.327,236,3.997,266,1.282,273,1.466,292,2.725,312,3.782,318,2.79,359,1.316,392,4.71,407,1.566,414,2.33,465,2.444,466,3.187,474,1.949,552,2.081,556,4.187,584,3.079,607,4.8,757,1.949,777,1.492,875,4.597,876,4.976,943,1.74,945,2.273,1073,1.764,1102,1.695,1103,1.847,1163,2.273,1171,2.081,1226,1.847,1338,5.298,1351,1.134,1450,1.418,1456,2.032,1503,1.989,1606,2.081,1662,1.912,1686,4.772,1687,3.633,1695,2.136,1709,6.598,1710,3.936,1712,2.619,1786,2.471,1787,2.361,1788,2.199,1789,2.273,1790,2.619,1791,2.843,1792,2.199,1793,3.666,1794,2.273,1795,2.619]],["component/32",[291,0.458]],["title/33",[197,35.953,198,27.169,1686,33.419]],["name/33",[197,0.828,198,0.626]],["text/33",[0,2.868,16,4.635,18,4.289,30,3.653,52,2.814,53,2.543,63,2.886,69,2.731,134,3.315,197,6.591,198,5.628,226,3.382,227,3.382,259,4.186,266,2.905,273,4.575,414,2.111,1643,5.936,1686,3.891,1688,5.601,1709,3.841,1796,4.718,1797,7.712,1798,7.712]],["component/33",[291,0.458]],["title/34-1",[16,25.282,36,27.827,414,18.133]],["name/34-1",[]],["text/34-1",[]],["component/34-1",[]],["title/34-2",[1709,49.225]],["name/34-2",[]],["text/34-2",[]],["component/34-2",[]],["title/34-3",[1190,34.403]],["name/34-3",[]],["text/34-3",[]],["component/34-3",[]],["title/34-4",[1449,51.995]],["name/34-4",[]],["text/34-4",[]],["component/34-4",[]],["title/34-5",[29,27.768,1799,36.877]],["name/34-5",[]],["text/34-5",[]],["component/34-5",[]],["title/34-6",[908,34.799]],["name/34-6",[]],["text/34-6",[]],["component/34-6",[]],["title/34-7",[1118,34.799]],["name/34-7",[]],["text/34-7",[]],["component/34-7",[]],["title/34-8",[1351,26.43,1450,33.052]],["name/34-8",[]],["text/34-8",[]],["component/34-8",[]],["title/34-9",[121,24.95,414,18.133,1351,22.072]],["name/34-9",[]],["text/34-9",[]],["component/34-9",[]],["title/34-10",[1781,71.78]],["name/34-10",[]],["text/34-10",[]],["component/34-10",[]],["title/34-11",[1190,34.403]],["name/34-11",[]],["text/34-11",[]],["component/34-11",[]],["title/34-12",[1449,51.995]],["name/34-12",[]],["text/34-12",[]],["component/34-12",[]],["title/34-13",[29,27.768,1799,36.877]],["name/34-13",[]],["text/34-13",[]],["component/34-13",[]],["title/34-14",[908,34.799]],["name/34-14",[]],["text/34-14",[]],["component/34-14",[]],["title/34-15",[1118,34.799]],["name/34-15",[]],["text/34-15",[]],["component/34-15",[]],["title/34-16",[1351,26.43,1450,33.052]],["name/34-16",[]],["text/34-16",[]],["component/34-16",[]],["title/34-17",[121,24.95,414,18.133,1351,22.072]],["name/34-17",[]],["text/34-17",[]],["component/34-17",[]],["title/34-18",[1783,71.78]],["name/34-18",[]],["text/34-18",[]],["component/34-18",[]],["title/34-19",[1190,34.403]],["name/34-19",[]],["text/34-19",[]],["component/34-19",[]],["title/34-20",[1449,51.995]],["name/34-20",[]],["text/34-20",[]],["component/34-20",[]],["title/34-21",[29,27.768,1799,36.877]],["name/34-21",[]],["text/34-21",[]],["component/34-21",[]],["title/34-22",[908,34.799]],["name/34-22",[]],["text/34-22",[]],["component/34-22",[]],["title/34-23",[1118,34.799]],["name/34-23",[]],["text/34-23",[]],["component/34-23",[]],["title/34-24",[1351,26.43,1450,33.052]],["name/34-24",[]],["text/34-24",[]],["component/34-24",[]],["title/34-25",[121,24.95,414,18.133,1351,22.072]],["name/34-25",[]],["text/34-25",[]],["component/34-25",[]],["title/34-26",[52,36.065]],["name/34-26",[]],["text/34-26",[]],["component/34-26",[]],["title/34-27",[1760,71.78]],["name/34-27",[]],["text/34-27",[]],["component/34-27",[]],["title/34-28",[1190,34.403]],["name/34-28",[]],["text/34-28",[]],["component/34-28",[]],["title/34-29",[1449,51.995]],["name/34-29",[]],["text/34-29",[]],["component/34-29",[]],["title/34-30",[29,27.768,1799,36.877]],["name/34-30",[]],["text/34-30",[]],["component/34-30",[]],["title/34-31",[908,34.799]],["name/34-31",[]],["text/34-31",[]],["component/34-31",[]],["title/34-32",[1118,34.799]],["name/34-32",[]],["text/34-32",[]],["component/34-32",[]],["title/34-33",[1351,26.43,1450,33.052]],["name/34-33",[]],["text/34-33",[]],["component/34-33",[]],["title/34-34",[121,24.95,414,18.133,1351,22.072]],["name/34-34",[]],["text/34-34",[]],["component/34-34",[]],["title/34-35",[1768,71.78]],["name/34-35",[]],["text/34-35",[]],["component/34-35",[]],["title/34-36",[1190,34.403]],["name/34-36",[]],["text/34-36",[]],["component/34-36",[]],["title/34-37",[1449,51.995]],["name/34-37",[]],["text/34-37",[]],["component/34-37",[]],["title/34-38",[29,27.768,1799,36.877]],["name/34-38",[]],["text/34-38",[]],["component/34-38",[]],["title/34-39",[908,34.799]],["name/34-39",[]],["text/34-39",[]],["component/34-39",[]],["title/34-40",[1118,34.799]],["name/34-40",[]],["text/34-40",[]],["component/34-40",[]],["title/34-41",[1351,26.43,1450,33.052]],["name/34-41",[]],["text/34-41",[]],["component/34-41",[]],["title/34-42",[121,24.95,414,18.133,1351,22.072]],["name/34-42",[]],["text/34-42",[]],["component/34-42",[]],["title/34-43",[52,36.065]],["name/34-43",[]],["text/34-43",[]],["component/34-43",[]],["title/34-44",[1769,71.78]],["name/34-44",[]],["text/34-44",[]],["component/34-44",[]],["title/34-45",[1190,34.403]],["name/34-45",[]],["text/34-45",[]],["component/34-45",[]],["title/34-46",[1449,51.995]],["name/34-46",[]],["text/34-46",[]],["component/34-46",[]],["title/34-47",[29,27.768,1799,36.877]],["name/34-47",[]],["text/34-47",[]],["component/34-47",[]],["title/34-48",[908,34.799]],["name/34-48",[]],["text/34-48",[]],["component/34-48",[]],["title/34-49",[1118,34.799]],["name/34-49",[]],["text/34-49",[]],["component/34-49",[]],["title/34-50",[1351,26.43,1450,33.052]],["name/34-50",[]],["text/34-50",[]],["component/34-50",[]],["title/34-51",[121,24.95,414,18.133,1351,22.072]],["name/34-51",[]],["text/34-51",[]],["component/34-51",[]],["title/34-52",[52,36.065]],["name/34-52",[]],["text/34-52",[]],["component/34-52",[]],["title/34-53",[1689,68.573]],["name/34-53",[]],["text/34-53",[]],["component/34-53",[]],["title/34-54",[1190,34.403]],["name/34-54",[]],["text/34-54",[]],["component/34-54",[]],["title/34-55",[1449,51.995]],["name/34-55",[]],["text/34-55",[]],["component/34-55",[]],["title/34-56",[29,27.768,1799,36.877]],["name/34-56",[]],["text/34-56",[]],["component/34-56",[]],["title/34-57",[908,34.799]],["name/34-57",[]],["text/34-57",[]],["component/34-57",[]],["title/34-58",[1118,34.799]],["name/34-58",[]],["text/34-58",[]],["component/34-58",[]],["title/34-59",[1351,26.43,1450,33.052]],["name/34-59",[]],["text/34-59",[]],["component/34-59",[]],["title/34-60",[121,24.95,414,18.133,1351,22.072]],["name/34-60",[]],["text/34-60",[]],["component/34-60",[]],["title/34-61",[1797,71.78]],["name/34-61",[]],["text/34-61",[]],["component/34-61",[]],["title/34-62",[1190,34.403]],["name/34-62",[]],["text/34-62",[]],["component/34-62",[]],["title/34-63",[1449,51.995]],["name/34-63",[]],["text/34-63",[]],["component/34-63",[]],["title/34-64",[29,27.768,1799,36.877]],["name/34-64",[]],["text/34-64",[]],["component/34-64",[]],["title/34-65",[908,34.799]],["name/34-65",[]],["text/34-65",[]],["component/34-65",[]],["title/34-66",[1118,34.799]],["name/34-66",[]],["text/34-66",[]],["component/34-66",[]],["title/34-67",[1351,26.43,1450,33.052]],["name/34-67",[]],["text/34-67",[]],["component/34-67",[]],["title/34-68",[121,29.876,414,21.714]],["name/34-68",[]],["text/34-68",[]],["component/34-68",[]],["title/34-69",[226,34.787,227,34.787]],["name/34-69",[]],["text/34-69",[]],["component/34-69",[]],["title/34-70",[1798,71.78]],["name/34-70",[]],["text/34-70",[]],["component/34-70",[]],["title/34-71",[1190,34.403]],["name/34-71",[]],["text/34-71",[]],["component/34-71",[]],["title/34-72",[1449,51.995]],["name/34-72",[]],["text/34-72",[]],["component/34-72",[]],["title/34-73",[29,27.768,1799,36.877]],["name/34-73",[]],["text/34-73",[]],["component/34-73",[]],["title/34-74",[908,34.799]],["name/34-74",[]],["text/34-74",[]],["component/34-74",[]],["title/34-75",[1118,34.799]],["name/34-75",[]],["text/34-75",[]],["component/34-75",[]],["title/34-76",[1351,26.43,1450,33.052]],["name/34-76",[]],["text/34-76",[]],["component/34-76",[]],["title/34-77",[121,29.876,414,21.714]],["name/34-77",[]],["text/34-77",[]],["component/34-77",[]],["title/34-78",[226,34.787,227,34.787]],["name/34-78",[]],["text/34-78",[]],["component/34-78",[]],["title/34-79",[1697,71.78]],["name/34-79",[]],["text/34-79",[]],["component/34-79",[]],["title/34-80",[1190,34.403]],["name/34-80",[]],["text/34-80",[]],["component/34-80",[]],["title/34-81",[1449,51.995]],["name/34-81",[]],["text/34-81",[]],["component/34-81",[]],["title/34-82",[29,27.768,1799,36.877]],["name/34-82",[]],["text/34-82",[]],["component/34-82",[]],["title/34-83",[908,34.799]],["name/34-83",[]],["text/34-83",[]],["component/34-83",[]],["title/34-84",[1118,34.799]],["name/34-84",[]],["text/34-84",[]],["component/34-84",[]],["title/34-85",[1351,26.43,1450,33.052]],["name/34-85",[]],["text/34-85",[]],["component/34-85",[]],["title/34-86",[121,29.876,414,21.714]],["name/34-86",[]],["text/34-86",[]],["component/34-86",[]],["title/34-87",[1800,76.073]],["name/34-87",[]],["text/34-87",[]],["component/34-87",[]],["title/34-88",[1190,34.403]],["name/34-88",[]],["text/34-88",[]],["component/34-88",[]],["title/34-89",[1449,51.995]],["name/34-89",[]],["text/34-89",[]],["component/34-89",[]],["title/34-90",[29,27.768,1799,36.877]],["name/34-90",[]],["text/34-90",[]],["component/34-90",[]],["title/34-91",[908,34.799]],["name/34-91",[]],["text/34-91",[]],["component/34-91",[]],["title/34-92",[1118,34.799]],["name/34-92",[]],["text/34-92",[]],["component/34-92",[]],["title/34-93",[1351,26.43,1450,33.052]],["name/34-93",[]],["text/34-93",[]],["component/34-93",[]],["title/34-94",[121,29.876,414,21.714]],["name/34-94",[]],["text/34-94",[]],["component/34-94",[]],["title/34-95",[1801,76.073]],["name/34-95",[]],["text/34-95",[]],["component/34-95",[]],["title/34-96",[1190,34.403]],["name/34-96",[]],["text/34-96",[]],["component/34-96",[]],["title/34-97",[1449,51.995]],["name/34-97",[]],["text/34-97",[]],["component/34-97",[]],["title/34-98",[29,27.768,1799,36.877]],["name/34-98",[]],["text/34-98",[]],["component/34-98",[]],["title/34-99",[908,34.799]],["name/34-99",[]],["text/34-99",[]],["component/34-99",[]],["title/34-100",[1118,34.799]],["name/34-100",[]],["text/34-100",[]],["component/34-100",[]],["title/34-101",[1351,26.43,1450,33.052]],["name/34-101",[]],["text/34-101",[]],["component/34-101",[]],["title/34-102",[121,29.876,414,21.714]],["name/34-102",[]],["text/34-102",[]],["component/34-102",[]],["title/34-103",[1802,76.073]],["name/34-103",[]],["text/34-103",[]],["component/34-103",[]],["title/34-104",[1190,34.403]],["name/34-104",[]],["text/34-104",[]],["component/34-104",[]],["title/34-105",[1449,51.995]],["name/34-105",[]],["text/34-105",[]],["component/34-105",[]],["title/34-106",[29,27.768,1799,36.877]],["name/34-106",[]],["text/34-106",[]],["component/34-106",[]],["title/34-107",[908,34.799]],["name/34-107",[]],["text/34-107",[]],["component/34-107",[]],["title/34-108",[1118,34.799]],["name/34-108",[]],["text/34-108",[]],["component/34-108",[]],["title/34-109",[1351,26.43,1450,33.052]],["name/34-109",[]],["text/34-109",[]],["component/34-109",[]],["title/34-110",[121,29.876,414,21.714]],["name/34-110",[]],["text/34-110",[]],["component/34-110",[]],["title/34-111",[70,51.244]],["name/34-111",[]],["text/34-111",[]],["component/34-111",[]],["title/34-112",[1190,34.403]],["name/34-112",[]],["text/34-112",[]],["component/34-112",[]],["title/34-113",[1449,51.995]],["name/34-113",[]],["text/34-113",[]],["component/34-113",[]],["title/34-114",[29,27.768,1799,36.877]],["name/34-114",[]],["text/34-114",[]],["component/34-114",[]],["title/34-115",[908,34.799]],["name/34-115",[]],["text/34-115",[]],["component/34-115",[]],["title/34-116",[1118,34.799]],["name/34-116",[]],["text/34-116",[]],["component/34-116",[]],["title/34-117",[1351,26.43,1450,33.052]],["name/34-117",[]],["text/34-117",[]],["component/34-117",[]],["title/34-118",[121,29.876,414,21.714]],["name/34-118",[]],["text/34-118",[]],["component/34-118",[]],["title/34-119",[1803,76.073]],["name/34-119",[]],["text/34-119",[]],["component/34-119",[]],["title/34-120",[1190,34.403]],["name/34-120",[]],["text/34-120",[]],["component/34-120",[]],["title/34-121",[1449,51.995]],["name/34-121",[]],["text/34-121",[]],["component/34-121",[]],["title/34-122",[29,27.768,1799,36.877]],["name/34-122",[]],["text/34-122",[]],["component/34-122",[]],["title/34-123",[908,34.799]],["name/34-123",[]],["text/34-123",[]],["component/34-123",[]],["title/34-124",[1118,34.799]],["name/34-124",[]],["text/34-124",[]],["component/34-124",[]],["title/34-125",[1351,26.43,1450,33.052]],["name/34-125",[]],["text/34-125",[]],["component/34-125",[]],["title/34-126",[121,29.876,414,21.714]],["name/34-126",[]],["text/34-126",[]],["component/34-126",[]],["title/34-127",[1669,54.555]],["name/34-127",[]],["text/34-127",[]],["component/34-127",[]],["title/34-128",[1190,34.403]],["name/34-128",[]],["text/34-128",[]],["component/34-128",[]],["title/34-129",[908,34.799]],["name/34-129",[]],["text/34-129",[]],["component/34-129",[]],["title/34-130",[29,27.768,1799,36.877]],["name/34-130",[]],["text/34-130",[]],["component/34-130",[]],["title/34-131",[1118,34.799]],["name/34-131",[]],["text/34-131",[]],["component/34-131",[]],["title/34-132",[1351,26.43,1450,33.052]],["name/34-132",[]],["text/34-132",[]],["component/34-132",[]],["title/34-133",[121,24.95,414,18.133,1351,22.072]],["name/34-133",[]],["text/34-133",[]],["component/34-133",[]],["title/34-134",[18,26.757,36,27.827,414,18.133]],["name/34-134",[]],["text/34-134",[]],["component/34-134",[]],["title/34-135",[1804,76.073]],["name/34-135",[]],["text/34-135",[]],["component/34-135",[]],["title/34-136",[1190,34.403]],["name/34-136",[]],["text/34-136",[]],["component/34-136",[]],["title/34-137",[908,34.799]],["name/34-137",[]],["text/34-137",[]],["component/34-137",[]],["title/34-138",[1118,34.799]],["name/34-138",[]],["text/34-138",[]],["component/34-138",[]],["title/34-139",[121,29.876,414,21.714]],["name/34-139",[]],["text/34-139",[]],["component/34-139",[]],["title/34-140",[1805,76.073]],["name/34-140",[]],["text/34-140",[]],["component/34-140",[]],["title/34-141",[1190,34.403]],["name/34-141",[]],["text/34-141",[]],["component/34-141",[]],["title/34-142",[908,34.799]],["name/34-142",[]],["text/34-142",[]],["component/34-142",[]],["title/34-143",[1118,34.799]],["name/34-143",[]],["text/34-143",[]],["component/34-143",[]],["title/34-144",[121,29.876,414,21.714]],["name/34-144",[]],["text/34-144",[]],["component/34-144",[]],["title/34-145",[1806,76.073]],["name/34-145",[]],["text/34-145",[]],["component/34-145",[]],["title/34-146",[1190,34.403]],["name/34-146",[]],["text/34-146",[]],["component/34-146",[]],["title/34-147",[908,34.799]],["name/34-147",[]],["text/34-147",[]],["component/34-147",[]],["title/34-148",[1118,34.799]],["name/34-148",[]],["text/34-148",[]],["component/34-148",[]],["title/34-149",[121,29.876,414,21.714]],["name/34-149",[]],["text/34-149",[]],["component/34-149",[]],["title/34-150",[1807,76.073]],["name/34-150",[]],["text/34-150",[]],["component/34-150",[]],["title/34-151",[1190,34.403]],["name/34-151",[]],["text/34-151",[]],["component/34-151",[]],["title/34-152",[908,34.799]],["name/34-152",[]],["text/34-152",[]],["component/34-152",[]],["title/34-153",[1118,34.799]],["name/34-153",[]],["text/34-153",[]],["component/34-153",[]],["title/34-154",[121,29.876,414,21.714]],["name/34-154",[]],["text/34-154",[]],["component/34-154",[]],["title/34-155",[1808,76.073]],["name/34-155",[]],["text/34-155",[]],["component/34-155",[]],["title/34-156",[1190,34.403]],["name/34-156",[]],["text/34-156",[]],["component/34-156",[]],["title/34-157",[908,34.799]],["name/34-157",[]],["text/34-157",[]],["component/34-157",[]],["title/34-158",[1118,34.799]],["name/34-158",[]],["text/34-158",[]],["component/34-158",[]],["title/34-159",[121,29.876,414,21.714]],["name/34-159",[]],["text/34-159",[]],["component/34-159",[]],["title/34-160",[1809,76.073]],["name/34-160",[]],["text/34-160",[]],["component/34-160",[]],["title/34-161",[1190,34.403]],["name/34-161",[]],["text/34-161",[]],["component/34-161",[]],["title/34-162",[908,34.799]],["name/34-162",[]],["text/34-162",[]],["component/34-162",[]],["title/34-163",[1118,34.799]],["name/34-163",[]],["text/34-163",[]],["component/34-163",[]],["title/34-164",[121,29.876,414,21.714]],["name/34-164",[]],["text/34-164",[]],["component/34-164",[]],["title/34-165",[1810,68.573]],["name/34-165",[]],["text/34-165",[]],["component/34-165",[]],["title/34-166",[1190,34.403]],["name/34-166",[]],["text/34-166",[]],["component/34-166",[]],["title/34-167",[908,34.799]],["name/34-167",[]],["text/34-167",[]],["component/34-167",[]],["title/34-168",[1118,34.799]],["name/34-168",[]],["text/34-168",[]],["component/34-168",[]],["title/34-169",[121,29.876,414,21.714]],["name/34-169",[]],["text/34-169",[]],["component/34-169",[]],["title/34-170",[1764,71.78]],["name/34-170",[]],["text/34-170",[]],["component/34-170",[]],["title/34-171",[1190,34.403]],["name/34-171",[]],["text/34-171",[]],["component/34-171",[]],["title/34-172",[908,34.799]],["name/34-172",[]],["text/34-172",[]],["component/34-172",[]],["title/34-173",[1118,34.799]],["name/34-173",[]],["text/34-173",[]],["component/34-173",[]],["title/34-174",[121,29.876,414,21.714]],["name/34-174",[]],["text/34-174",[]],["component/34-174",[]],["title/34",[36,23.888,414,15.566,1351,18.948,1686,28.689]],["name/34",[36,0.641,414,0.418]],["text/34",[0,1.02,2,3.055,3,0.211,4,0.488,9,1.219,15,0.358,16,2.766,17,0.218,18,3.465,26,0.794,27,0.251,30,1.493,36,0.372,38,0.759,39,0.738,45,0.656,47,1.382,50,0.396,51,0.615,52,0.472,53,1.989,56,1.116,62,1.036,63,0.17,66,0.838,69,0.727,70,0.459,71,1.085,81,0.527,82,0.285,90,0.507,91,0.759,93,0.473,98,0.421,103,0.255,104,0.198,111,0.304,114,0.186,116,2.355,124,0.719,127,0.977,128,0.447,130,0.964,145,0.372,147,1.211,150,0.203,152,0.266,159,0.622,161,0.447,162,0.651,163,1.085,172,0.224,176,0.236,177,0.194,178,0.629,182,1.333,188,0.209,190,0.556,193,1.289,194,0.278,197,0.914,198,1.383,200,1.465,212,0.214,215,0.243,221,0.251,222,0.33,223,0.727,236,4.463,240,0.937,242,0.266,244,0.385,245,0.59,247,0.378,256,0.26,264,0.26,269,0.591,273,2.599,275,0.385,282,0.203,292,0.218,300,0.239,301,3.526,302,0.214,306,1.211,309,0.792,310,0.59,312,0.236,331,0.271,332,0.35,342,0.226,359,0.176,366,1.781,370,0.975,375,0.247,388,0.239,391,0.201,392,5.066,399,0.175,414,2.674,417,0.278,418,0.294,419,0.271,422,0.662,429,0.591,456,0.741,462,0.935,479,0.315,506,0.271,512,0.926,526,0.542,544,0.278,546,0.255,552,0.542,556,2.324,597,0.294,606,1.088,607,1.289,619,0.615,639,0.201,652,0.278,720,0.243,726,0.35,735,0.466,757,1.755,759,0.247,775,1.636,777,0.9,798,0.26,820,0.224,857,0.662,875,4.331,879,0.591,890,0.255,899,1.555,908,0.312,912,2.789,1072,0.266,1077,0.315,1082,0.247,1085,0.251,1118,2.124,1123,3.084,1134,3.771,1135,0.285,1142,0.489,1147,0.236,1154,0.727,1169,0.497,1170,1.571,1171,4.432,1172,0.304,1190,0.158,1218,0.285,1222,0.285,1237,0.489,1259,0.837,1274,0.243,1291,1.03,1320,0.741,1327,0.285,1340,0.591,1344,0.243,1351,1.875,1414,0.278,1415,0.447,1438,0.315,1450,0.189,1456,0.529,1573,0.315,1586,0.35,1613,1.057,1644,3.33,1667,1.124,1669,2.327,1686,3.807,1687,4.329,1688,1.222,1689,1.425,1691,3.603,1692,3.82,1693,0.996,1695,0.285,1696,0.304,1697,0.643,1699,0.33,1709,5.244,1760,3.431,1763,0.681,1764,3.605,1765,0.681,1767,0.33,1768,2.225,1769,0.94,1770,2.062,1772,0.33,1774,0.35,1775,0.33,1776,0.247,1777,1.168,1779,0.304,1780,0.996,1781,2.662,1783,1.992,1785,0.35,1788,0.572,1793,6.2,1795,3.245,1797,0.33,1798,0.33,1800,0.35,1801,0.681,1802,0.681,1803,0.681,1804,0.996,1805,0.681,1806,0.681,1807,0.681,1808,0.681,1809,0.681,1810,0.898,1811,0.38,1812,1.082,1813,0.38,1814,0.74,1815,0.74,1816,0.74,1817,2.292,1818,0.643,1819,0.38,1820,0.614,1821,0.94,1822,4.91,1823,1.638,1824,1.716,1825,1.852,1826,0.38,1827,0.542,1828,0.38,1829,0.38,1830,0.74,1831,1.168,1832,1.082,1833,0.38,1834,0.681,1835,0.38,1836,0.26,1837,0.285,1838,0.229,1839,0.35,1840,0.681,1841,0.315,1842,0.285,1843,0.315,1844,0.756,1845,0.35,1846,1.222,1847,0.38,1848,0.681,1849,0.38,1850,0.304,1851,0.304,1852,0.38,1853,0.33,1854,0.304,1855,0.33,1856,0.33,1857,0.35,1858,0.38,1859,0.315,1860,0.38,1861,0.38]],["component/34",[291,0.458]],["title/35-1",[236,27.928,1686,40.018]],["name/35-1",[]],["text/35-1",[]],["component/35-1",[]],["title/35-2",[392,28.792,494,28.792,1686,33.419]],["name/35-2",[]],["text/35-2",[]],["component/35-2",[]],["title/35-3",[607,31.125,1709,32.992,1789,44.243]],["name/35-3",[]],["text/35-3",[]],["component/35-3",[]],["title/35-4",[7,20.824,15,17.901,16,16.915,56,18.038,414,12.132,1709,22.073]],["name/35-4",[]],["text/35-4",[]],["component/35-4",[]],["title/35-5",[7,23.406,17,23.931,26,11.738,309,30.471,1709,24.81]],["name/35-5",[]],["text/35-5",[]],["component/35-5",[]],["title/35-6",[4,16.692,7,20.824,91,16.374,117,24.463,607,20.824,1082,24.054]],["name/35-6",[]],["text/35-6",[]],["component/35-6",[]],["title/35-7",[607,31.125,1669,36.564,1862,42.814]],["name/35-7",[]],["text/35-7",[]],["component/35-7",[]],["title/35-8",[7,23.406,15,20.121,18,20.121,51,23.663,1669,27.496]],["name/35-8",[]],["text/35-8",[]],["component/35-8",[]],["title/35-9",[4,15.034,7,18.755,17,19.176,30,12.005,91,14.747,117,22.032,1669,22.032]],["name/35-9",[]],["text/35-9",[]],["component/35-9",[]],["title/35-10",[7,23.406,16,19.012,556,24.503,607,23.406,1082,27.037]],["name/35-10",[]],["text/35-10",[]],["component/35-10",[]],["title/35-11",[226,34.787,227,34.787]],["name/35-11",[]],["text/35-11",[]],["component/35-11",[]],["title/35",[300,34.848,1686,33.419,1687,32.992]],["name/35",[300,1.438]],["text/35",[0,0.595,2,2.163,4,2.19,7,1.374,15,0.646,16,4.234,18,3.95,20,1.495,22,2.623,26,2.043,27,2.23,29,1.748,30,1.502,34,0.744,36,1.697,38,2.252,50,1.307,51,2.372,52,0.584,53,1.332,56,2.367,60,1.964,62,1.476,65,1.476,69,1.036,91,1.493,100,0.854,104,0.695,114,0.656,117,1.614,118,1.239,128,2.038,137,0.76,141,0.715,142,0.807,150,1.307,152,1.709,155,0.787,162,0.619,163,0.722,178,0.778,182,0.778,189,1.457,191,1.034,199,0.769,207,1.271,212,0.752,220,1.11,236,2.895,240,1.139,245,1.332,247,2.133,250,1.11,266,0.603,267,0.956,273,3.543,277,1.319,296,0.702,302,0.752,308,1.389,309,0.979,344,0.979,351,2.012,366,0.778,370,0.76,391,1.295,392,4.384,404,0.854,406,2.427,414,2.374,474,2.859,486,1.614,494,2.527,496,0.829,506,0.956,512,0.722,514,1.004,526,0.979,544,0.979,556,2.86,575,0.979,584,0.868,605,0.818,606,1.034,607,3.366,613,0.787,699,0.979,720,0.854,721,1.89,734,0.842,759,0.868,767,1.836,770,1.231,775,2.158,777,1.283,798,0.916,820,0.787,831,1.034,875,3.175,901,0.956,943,1.495,1025,1.231,1034,2.095,1044,1.954,1048,1.644,1073,0.829,1077,1.11,1085,1.614,1102,0.797,1103,0.868,1105,1.004,1169,0.899,1185,1.162,1187,1.004,1253,1.988,1274,1.562,1301,1.162,1327,1.004,1344,0.854,1351,0.975,1420,1.068,1450,0.667,1456,0.956,1457,1.644,1503,0.935,1622,1.034,1641,1.162,1642,1.11,1644,2.23,1669,3.21,1686,5.089,1687,5.414,1690,1.11,1691,2.414,1695,1.004,1696,1.068,1709,5.294,1720,1.231,1725,1.068,1787,1.11,1788,2.612,1810,2.029,1841,2.029,1855,1.162,1856,1.162,1863,1.337,1864,1.162,1865,1.337,1866,1.231,1867,1.231,1868,1.11,1869,1.337,1870,3.376,1871,1.231,1872,1.337,1873,1.337,1874,1.162,1875,1.337,1876,1.337]],["component/35",[291,0.458]],["title/36",[556,32.584,1669,36.564,1686,33.419]],["name/36",[1669,1.509]],["text/36",[2,2.373,3,1.25,4,3.397,16,3.442,18,2.477,26,1.942,29,0.941,30,0.809,51,2.913,52,2.237,53,2.974,55,1.414,63,1.006,69,2.171,91,0.993,134,1.45,145,1.13,150,3.261,198,1.103,236,4.04,245,1.225,247,1.149,266,1.013,273,1.158,292,4.333,301,1.571,312,3.179,318,4.054,359,1.797,391,1.19,392,4.649,407,1.237,414,2.469,462,1.225,465,2.001,466,1.511,552,1.645,556,4.054,584,4.473,607,4.803,757,1.54,759,1.459,777,1.179,807,1.459,875,4.383,876,4.336,890,1.511,943,1.375,945,1.796,1073,1.394,1102,1.339,1103,1.459,1134,1.738,1171,3.751,1226,1.459,1255,1.511,1290,3.102,1338,7.022,1443,3.223,1488,1.738,1503,1.571,1606,1.645,1644,1.484,1669,6.51,1686,4.878,1687,4.105,1690,5.065,1691,1.606,1695,1.688,1710,3.223,1786,1.953,1788,3.963,1790,2.07,1793,1.738,1810,3.223,1840,2.07,1855,1.953,1856,1.953,1857,2.07,1862,1.738,1877,2.07,1878,2.247]],["component/36",[291,0.458]],["title/37-1",[164,38.552,1100,37.68]],["name/37-1",[]],["text/37-1",[]],["component/37-1",[]],["title/37-2",[164,32.195,1344,35.382,1879,41.59]],["name/37-2",[]],["text/37-2",[]],["component/37-2",[]],["title/37",[164,27.638,1100,27.013,1344,30.374,1879,35.703]],["name/37",[1100,1.299]],["text/37",[2,1.081,3,1.91,6,1.915,9,0.93,10,1.122,12,3.667,13,3.169,15,0.944,16,1.568,17,1.122,18,2.222,21,1.098,26,2.975,29,2.318,30,2.501,36,2.311,37,3.555,41,1.29,42,1.211,45,0.91,52,2.416,53,1.355,56,0.951,63,2.058,69,0.827,73,3.15,124,1.755,127,2.359,128,1.179,139,2.984,147,0.923,155,1.149,164,3.218,167,1.086,169,1.429,179,1.396,187,1.229,196,1.467,198,2.256,200,2.938,228,1.044,266,2.494,273,2.37,278,2.391,279,2.101,294,1.149,295,1.29,296,1.025,297,1.179,303,1.136,310,1.064,314,1.29,354,0.951,375,1.268,404,1.248,405,1.098,456,2.353,462,1.064,463,1.56,465,1.77,476,1.467,485,1.697,491,1.697,494,4.359,516,4.234,519,1.338,527,1.697,544,1.429,551,1.697,563,2.021,580,1.798,582,1.697,583,1.621,613,1.149,672,1.697,734,1.229,777,1.802,789,1.396,794,1.429,799,1.621,807,1.268,822,3.792,839,1.56,888,1.429,932,1.429,943,1.195,1098,3.091,1099,1.179,1100,3.584,1102,4.142,1103,3.594,1112,4.158,1174,1.621,1190,1.43,1218,1.467,1261,1.621,1315,1.396,1344,5.79,1482,1.621,1488,1.51,1497,1.697,1727,3.721,1789,1.56,1796,1.429,1836,2.353,1842,1.467,1879,2.58,1880,1.798,1881,1.621,1882,3.721,1883,1.338,1884,1.51,1885,4.28,1886,2.402,1887,3.792,1888,1.952,1889,1.621,1890,1.952,1891,1.798,1892,1.56,1893,1.429,1894,1.798,1895,1.952,1896,1.51,1897,1.621]],["component/37",[291,0.458]],["title/38-1",[1898,82.591]],["name/38-1",[]],["text/38-1",[]],["component/38-1",[]],["title/38-2",[83,40.226]],["name/38-2",[]],["text/38-2",[]],["component/38-2",[]],["title/38-3",[399,37.977]],["name/38-3",[]],["text/38-3",[]],["component/38-3",[]],["title/38-4",[354,40.226]],["name/38-4",[]],["text/38-4",[]],["component/38-4",[]],["title/38-5",[942,55.033,1899,55.033]],["name/38-5",[]],["text/38-5",[]],["component/38-5",[]],["title/38-6",[1900,76.073]],["name/38-6",[]],["text/38-6",[]],["component/38-6",[]],["title/38-7",[83,32.284,134,24.763]],["name/38-7",[]],["text/38-7",[]],["component/38-7",[]],["title/38-8",[134,24.763,399,30.478]],["name/38-8",[]],["text/38-8",[]],["component/38-8",[]],["title/38-9",[134,24.763,354,32.284]],["name/38-9",[]],["text/38-9",[]],["component/38-9",[]],["title/38-10",[127,23.597,134,20.68,1901,50.985]],["name/38-10",[]],["text/38-10",[]],["component/38-10",[]],["title/38-11",[134,20.68,942,45.959,1899,45.959]],["name/38-11",[]],["text/38-11",[]],["component/38-11",[]],["title/38-12",[1902,76.073]],["name/38-12",[]],["text/38-12",[]],["component/38-12",[]],["title/38-13",[83,32.284,134,24.763]],["name/38-13",[]],["text/38-13",[]],["component/38-13",[]],["title/38-14",[134,24.763,354,32.284]],["name/38-14",[]],["text/38-14",[]],["component/38-14",[]],["title/38-15",[134,15.551,247,21.278,350,25.47,1087,26.608,1672,31.276]],["name/38-15",[]],["text/38-15",[]],["component/38-15",[]],["title/38-16",[134,20.68,1180,33.419,1886,38.713]],["name/38-16",[]],["text/38-16",[]],["component/38-16",[]],["title/38-17",[1903,76.073]],["name/38-17",[]],["text/38-17",[]],["component/38-17",[]],["title/38-18",[83,40.226]],["name/38-18",[]],["text/38-18",[]],["component/38-18",[]],["title/38-19",[1904,71.78]],["name/38-19",[]],["text/38-19",[]],["component/38-19",[]],["title/38-20",[83,40.226]],["name/38-20",[]],["text/38-20",[]],["component/38-20",[]],["title/38-21",[399,37.977]],["name/38-21",[]],["text/38-21",[]],["component/38-21",[]],["title/38-22",[354,40.226]],["name/38-22",[]],["text/38-22",[]],["component/38-22",[]],["title/38-23",[1905,71.78]],["name/38-23",[]],["text/38-23",[]],["component/38-23",[]],["title/38-24",[83,40.226]],["name/38-24",[]],["text/38-24",[]],["component/38-24",[]],["title/38-25",[399,37.977]],["name/38-25",[]],["text/38-25",[]],["component/38-25",[]],["title/38-26",[354,40.226]],["name/38-26",[]],["text/38-26",[]],["component/38-26",[]],["title/38-27",[1906,71.78]],["name/38-27",[]],["text/38-27",[]],["component/38-27",[]],["title/38-28",[83,40.226]],["name/38-28",[]],["text/38-28",[]],["component/38-28",[]],["title/38-29",[399,37.977]],["name/38-29",[]],["text/38-29",[]],["component/38-29",[]],["title/38-30",[1907,76.073]],["name/38-30",[]],["text/38-30",[]],["component/38-30",[]],["title/38-31",[83,40.226]],["name/38-31",[]],["text/38-31",[]],["component/38-31",[]],["title/38-32",[399,37.977]],["name/38-32",[]],["text/38-32",[]],["component/38-32",[]],["title/38-33",[354,40.226]],["name/38-33",[]],["text/38-33",[]],["component/38-33",[]],["title/38-34",[1908,82.591]],["name/38-34",[]],["text/38-34",[]],["component/38-34",[]],["title/38-35",[83,40.226]],["name/38-35",[]],["text/38-35",[]],["component/38-35",[]],["title/38-36",[399,37.977]],["name/38-36",[]],["text/38-36",[]],["component/38-36",[]],["title/38-37",[354,40.226]],["name/38-37",[]],["text/38-37",[]],["component/38-37",[]],["title/38-38",[1909,82.591]],["name/38-38",[]],["text/38-38",[]],["component/38-38",[]],["title/38-39",[354,40.226]],["name/38-39",[]],["text/38-39",[]],["component/38-39",[]],["title/38-40",[1910,82.591]],["name/38-40",[]],["text/38-40",[]],["component/38-40",[]],["title/38-41",[1911,82.591]],["name/38-41",[]],["text/38-41",[]],["component/38-41",[]],["title/38-42",[83,40.226]],["name/38-42",[]],["text/38-42",[]],["component/38-42",[]],["title/38-43",[399,37.977]],["name/38-43",[]],["text/38-43",[]],["component/38-43",[]],["title/38-44",[1344,52.792]],["name/38-44",[]],["text/38-44",[]],["component/38-44",[]],["title/38-45",[354,40.226]],["name/38-45",[]],["text/38-45",[]],["component/38-45",[]],["title/38-46",[1912,82.591]],["name/38-46",[]],["text/38-46",[]],["component/38-46",[]],["title/38",[295,36.564,794,40.52,1180,33.419]],["name/38",[240,0.595,794,0.934]],["text/38",[0,0.265,2,0.519,3,0.331,4,1.662,6,0.248,7,0.335,8,1.451,9,1.756,10,0.343,12,1.72,13,1.486,14,1.109,15,0.288,16,0.272,17,0.343,21,4.257,24,0.36,26,1.921,29,1.069,30,0.594,31,0.436,32,1.154,34,0.636,38,0.89,41,0.756,42,0.37,47,2.169,49,1.607,50,0.319,52,0.72,53,0.651,56,0.29,60,0.959,63,0.267,65,0.691,67,0.549,69,0.485,71,1.562,73,0.408,74,0.623,77,0.769,78,1.631,80,0.71,81,0.557,83,0.803,84,0.518,86,2.12,91,1.128,93,0.381,94,0.743,95,0.636,102,0.837,104,0.595,106,0.495,112,0.319,114,0.561,115,0.918,121,0.269,123,0.36,124,0.305,131,0.636,134,0.791,137,0.339,139,1.434,141,0.319,142,0.691,144,0.302,147,2.438,148,0.351,149,0.401,159,0.343,160,0.476,161,2.79,162,0.276,163,0.322,164,1.232,173,0.971,186,0.436,187,0.72,188,0.63,199,0.658,200,1.054,203,0.394,207,0.31,219,1.132,224,0.448,225,2.966,227,1.111,228,0.319,231,0.743,236,0.482,238,0.417,240,2.519,241,0.8,244,0.858,246,0.331,247,2.636,253,0.401,258,0.476,266,0.743,273,0.307,275,0.595,281,0.292,291,0.211,294,0.351,295,3.052,306,0.282,308,0.339,310,0.325,313,0.743,318,0.673,320,0.769,321,1.55,333,0.36,338,0.691,342,0.355,348,0.387,350,0.7,352,0.8,354,1.243,362,0.837,370,0.65,375,1.375,396,0.436,399,1.695,402,0.518,404,0.381,405,0.927,407,0.328,413,1.179,417,0.436,455,0.448,465,0.307,468,0.518,474,0.784,493,3.232,494,3.047,496,0.37,504,0.518,517,0.495,522,0.495,540,0.426,542,0.436,558,0.495,567,0.495,604,0.408,605,0.365,611,0.381,612,1.109,639,0.316,645,0.331,650,0.448,663,0.436,677,0.461,678,0.426,683,0.731,693,0.495,696,0.448,715,1.451,720,1.054,737,0.417,742,0.549,746,0.837,747,0.401,756,0.756,760,2.872,775,2.568,779,0.448,791,0.436,794,2.699,795,0.448,796,0.549,798,2.285,802,0.408,803,0.859,804,0.387,806,1.054,807,2.165,814,0.518,819,0.885,820,0.351,822,0.784,865,0.408,866,0.461,888,0.837,896,0.448,905,1.364,907,1.318,915,0.7,920,0.426,932,0.436,938,0.448,942,0.95,1022,0.436,1034,0.37,1047,0.408,1048,0.401,1053,2.909,1085,0.394,1087,0.381,1112,0.859,1118,0.892,1123,0.365,1130,0.495,1142,1.09,1169,0.401,1170,0.408,1176,1.154,1177,0.495,1180,0.36,1208,0.436,1216,1.692,1217,0.355,1220,0.394,1228,0.417,1253,1.74,1258,0.448,1265,0.436,1273,3.492,1274,0.731,1279,0.914,1326,2.221,1336,0.426,1344,1.054,1345,0.95,1351,0.238,1395,0.461,1407,1.638,1433,0.495,1441,0.837,1457,0.401,1466,0.495,1470,0.549,1492,0.837,1496,0.476,1506,0.476,1533,1.519,1565,0.476,1613,0.448,1639,0.518,1662,0.401,1672,0.448,1682,0.859,1755,0.495,1756,1.054,1757,0.476,1762,0.408,1770,0.436,1782,0.518,1838,0.36,1842,0.448,1868,0.495,1882,1.424,1883,1.13,1885,0.461,1886,1.154,1889,0.495,1893,0.436,1897,0.495,1899,2.119,1901,0.549,1904,1.434,1906,1.434,1913,1.054,1914,0.994,1915,1.649,1916,1.054,1917,0.596,1918,1.434,1919,3.836,1920,1.054,1921,1.519,1922,0.518,1923,3.987,1924,5.403,1925,1.144,1926,0.95,1927,0.596,1928,0.596,1929,2.552,1930,0.549,1931,0.596,1932,0.596,1933,0.596,1934,0.596,1935,0.596,1936,1.144,1937,0.596,1938,1.144,1939,0.549,1940,0.596,1941,0.596,1942,0.596,1943,0.596,1944,0.596,1945,0.596,1946,0.596,1947,0.596,1948,0.596,1949,0.596,1950,0.596,1951,0.549,1952,0.549,1953,0.596,1954,0.596,1955,2.552,1956,2.351,1957,0.549,1958,0.596,1959,3.204,1960,0.596,1961,0.596,1962,0.596,1963,0.596,1964,0.596,1965,0.596,1966,1.144,1967,1.144,1968,0.596,1969,0.596,1970,1.144,1971,0.596,1972,0.596,1973,0.596,1974,0.596,1975,0.596,1976,0.596,1977,0.596,1978,0.596,1979,0.596,1980,0.596,1981,0.596,1982,0.549,1983,0.596,1984,0.596,1985,0.596,1986,0.596,1987,0.549,1988,1.95,1989,0.596,1990,1.144,1991,1.144,1992,0.596,1993,0.549,1994,0.549,1995,0.596,1996,0.596,1997,0.518,1998,0.596,1999,0.596,2000,0.596,2001,0.596,2002,0.549,2003,0.596,2004,1.144,2005,1.144,2006,3.701,2007,0.495,2008,1.144,2009,0.549,2010,0.549,2011,0.994,2012,1.434,2013,0.549,2014,0.518,2015,0.596,2016,0.596,2017,0.549,2018,0.596,2019,0.596,2020,0.596,2021,0.596,2022,0.495,2023,0.596,2024,0.596,2025,0.914,2026,0.549,2027,0.518,2028,0.596,2029,0.596,2030,0.596,2031,0.596,2032,0.549,2033,0.596,2034,1.144,2035,0.518,2036,0.596,2037,0.518,2038,0.476,2039,0.549,2040,1.144,2041,0.596,2042,0.549,2043,0.495,2044,2.552,2045,1.144,2046,0.495,2047,0.596,2048,0.596,2049,0.596,2050,0.596,2051,0.596,2052,0.596,2053,0.518,2054,0.518,2055,0.596,2056,0.596,2057,0.394,2058,0.596,2059,0.596,2060,0.596,2061,0.596,2062,0.596,2063,0.476,2064,0.596,2065,0.549,2066,0.596,2067,0.596,2068,0.596,2069,0.596,2070,0.596,2071,0.596,2072,0.596,2073,0.596,2074,0.495,2075,0.596,2076,0.596,2077,0.596,2078,1.144,2079,0.596,2080,0.596,2081,0.596,2082,0.596,2083,1.144,2084,0.549,2085,0.596,2086,0.596,2087,0.476,2088,0.426,2089,0.549,2090,0.596,2091,0.596,2092,0.596,2093,0.596,2094,0.596,2095,0.596,2096,0.549,2097,0.596,2098,0.596,2099,0.549]],["component/38",[291,0.458]],["title/39-1",[135,28.527,140,27.496,1887,28.527,2100,41.626,2101,36.177]],["name/39-1",[]],["text/39-1",[]],["component/39-1",[]],["title/39-2",[354,40.226]],["name/39-2",[]],["text/39-2",[]],["component/39-2",[]],["title/39-3",[1887,32.565,2101,61.931,2102,47.518]],["name/39-3",[]],["text/39-3",[]],["component/39-3",[]],["title/39-4",[354,40.226]],["name/39-4",[]],["text/39-4",[]],["component/39-4",[]],["title/39-5",[399,37.977]],["name/39-5",[]],["text/39-5",[]],["component/39-5",[]],["title/39-6",[1887,32.565,2101,41.298,2103,47.518,2104,39.453]],["name/39-6",[]],["text/39-6",[]],["component/39-6",[]],["title/39-7",[354,40.226]],["name/39-7",[]],["text/39-7",[]],["component/39-7",[]],["title/39-8",[1887,32.565,2105,47.518,2106,37.98,2107,39.453]],["name/39-8",[]],["text/39-8",[]],["component/39-8",[]],["title/39-9",[354,40.226]],["name/39-9",[]],["text/39-9",[]],["component/39-9",[]],["title/39-10",[399,37.977]],["name/39-10",[]],["text/39-10",[]],["component/39-10",[]],["title/39-11",[1887,32.565,2106,37.98,2107,39.453,2108,47.518]],["name/39-11",[]],["text/39-11",[]],["component/39-11",[]],["title/39-12",[83,40.226]],["name/39-12",[]],["text/39-12",[]],["component/39-12",[]],["title/39-13",[354,40.226]],["name/39-13",[]],["text/39-13",[]],["component/39-13",[]],["title/39-14",[399,37.977]],["name/39-14",[]],["text/39-14",[]],["component/39-14",[]],["title/39-15",[136,37.98,1276,43.768,1887,32.565,2106,37.98]],["name/39-15",[]],["text/39-15",[]],["component/39-15",[]],["title/39-16",[354,40.226]],["name/39-16",[]],["text/39-16",[]],["component/39-16",[]],["title/39-17",[1887,32.565,2106,37.98,2109,43.768,2110,43.768]],["name/39-17",[]],["text/39-17",[]],["component/39-17",[]],["title/39-18",[354,40.226]],["name/39-18",[]],["text/39-18",[]],["component/39-18",[]],["title/39-19",[399,37.977]],["name/39-19",[]],["text/39-19",[]],["component/39-19",[]],["title/39-20",[1887,32.565,2104,39.453,2111,47.518,2112,41.298]],["name/39-20",[]],["text/39-20",[]],["component/39-20",[]],["title/39-21",[83,40.226]],["name/39-21",[]],["text/39-21",[]],["component/39-21",[]],["title/39-22",[136,37.98,1887,32.565,2104,39.453,2113,47.518]],["name/39-22",[]],["text/39-22",[]],["component/39-22",[]],["title/39-23",[83,40.226]],["name/39-23",[]],["text/39-23",[]],["component/39-23",[]],["title/39-24",[354,40.226]],["name/39-24",[]],["text/39-24",[]],["component/39-24",[]],["title/39-25",[354,40.226]],["name/39-25",[]],["text/39-25",[]],["component/39-25",[]],["title/39-26",[2114,82.591]],["name/39-26",[]],["text/39-26",[]],["component/39-26",[]],["title/39-27",[83,40.226]],["name/39-27",[]],["text/39-27",[]],["component/39-27",[]],["title/39-28",[354,40.226]],["name/39-28",[]],["text/39-28",[]],["component/39-28",[]],["title/39-29",[2115,82.591]],["name/39-29",[]],["text/39-29",[]],["component/39-29",[]],["title/39-30",[83,40.226]],["name/39-30",[]],["text/39-30",[]],["component/39-30",[]],["title/39-31",[354,40.226]],["name/39-31",[]],["text/39-31",[]],["component/39-31",[]],["title/39-32",[2116,76.073]],["name/39-32",[]],["text/39-32",[]],["component/39-32",[]],["title/39-33",[83,40.226]],["name/39-33",[]],["text/39-33",[]],["component/39-33",[]],["title/39-34",[354,40.226]],["name/39-34",[]],["text/39-34",[]],["component/39-34",[]],["title/39-35",[1903,76.073]],["name/39-35",[]],["text/39-35",[]],["component/39-35",[]],["title/39-36",[354,40.226]],["name/39-36",[]],["text/39-36",[]],["component/39-36",[]],["title/39-37",[1904,71.78]],["name/39-37",[]],["text/39-37",[]],["component/39-37",[]],["title/39-38",[337,66.013]],["name/39-38",[]],["text/39-38",[]],["component/39-38",[]],["title/39-39",[83,40.226]],["name/39-39",[]],["text/39-39",[]],["component/39-39",[]],["title/39-40",[399,37.977]],["name/39-40",[]],["text/39-40",[]],["component/39-40",[]],["title/39-41",[354,40.226]],["name/39-41",[]],["text/39-41",[]],["component/39-41",[]],["title/39-42",[1344,52.792]],["name/39-42",[]],["text/39-42",[]],["component/39-42",[]],["title/39-43",[3,36.877,21,37.271]],["name/39-43",[]],["text/39-43",[]],["component/39-43",[]],["title/39-44",[465,34.175,2117,52.978]],["name/39-44",[]],["text/39-44",[]],["component/39-44",[]],["title/39-45",[399,30.478,1258,49.802]],["name/39-45",[]],["text/39-45",[]],["component/39-45",[]],["title/39-46",[2118,82.591]],["name/39-46",[]],["text/39-46",[]],["component/39-46",[]],["title/39-47",[83,40.226]],["name/39-47",[]],["text/39-47",[]],["component/39-47",[]],["title/39-48",[354,40.226]],["name/39-48",[]],["text/39-48",[]],["component/39-48",[]],["title/39-49",[147,31.341,323,52.978]],["name/39-49",[]],["text/39-49",[]],["component/39-49",[]],["title/39-50",[2119,76.073]],["name/39-50",[]],["text/39-50",[]],["component/39-50",[]],["title/39-51",[83,40.226]],["name/39-51",[]],["text/39-51",[]],["component/39-51",[]],["title/39-52",[354,40.226]],["name/39-52",[]],["text/39-52",[]],["component/39-52",[]],["title/39-53",[399,37.977]],["name/39-53",[]],["text/39-53",[]],["component/39-53",[]],["title/39-54",[147,31.341,323,52.978]],["name/39-54",[]],["text/39-54",[]],["component/39-54",[]],["title/39-55",[2120,82.591]],["name/39-55",[]],["text/39-55",[]],["component/39-55",[]],["title/39-56",[354,40.226]],["name/39-56",[]],["text/39-56",[]],["component/39-56",[]],["title/39-57",[399,37.977]],["name/39-57",[]],["text/39-57",[]],["component/39-57",[]],["title/39-58",[2121,82.591]],["name/39-58",[]],["text/39-58",[]],["component/39-58",[]],["title/39-59",[83,40.226]],["name/39-59",[]],["text/39-59",[]],["component/39-59",[]],["title/39-60",[354,40.226]],["name/39-60",[]],["text/39-60",[]],["component/39-60",[]],["title/39-61",[1905,71.78]],["name/39-61",[]],["text/39-61",[]],["component/39-61",[]],["title/39-62",[337,66.013]],["name/39-62",[]],["text/39-62",[]],["component/39-62",[]],["title/39-63",[375,35.953,1100,31.467,1258,41.59]],["name/39-63",[]],["text/39-63",[]],["component/39-63",[]],["title/39-64",[141,35.437,785,42.369]],["name/39-64",[]],["text/39-64",[]],["component/39-64",[]],["title/39-65",[822,45.425,945,52.978]],["name/39-65",[]],["text/39-65",[]],["component/39-65",[]],["title/39-66",[351,39.506,1258,49.802]],["name/39-66",[]],["text/39-66",[]],["component/39-66",[]],["title/39-67",[399,37.977]],["name/39-67",[]],["text/39-67",[]],["component/39-67",[]],["title/39-68",[354,40.226]],["name/39-68",[]],["text/39-68",[]],["component/39-68",[]],["title/39-69",[83,40.226]],["name/39-69",[]],["text/39-69",[]],["component/39-69",[]],["title/39-70",[295,36.564,1906,48.108,2025,44.243]],["name/39-70",[]],["text/39-70",[]],["component/39-70",[]],["title/39-71",[21,26.719,240,22.153,399,21.85,1220,31.388]],["name/39-71",[]],["text/39-71",[]],["component/39-71",[]],["title/39-72",[26,15.609,494,28.792,2122,48.108]],["name/39-72",[]],["text/39-72",[]],["component/39-72",[]],["title/39",[295,36.564,789,39.569,1180,33.419]],["name/39",[240,0.595,789,0.912]],["text/39",[2,0.124,3,0.986,4,1.828,6,1.099,8,1.62,9,1.725,12,0.446,13,1.459,16,1.655,18,0.37,21,4.05,22,0.785,24,1.253,26,1.78,29,0.743,30,2.272,32,0.275,34,0.809,38,0.213,41,1.561,42,0.694,47,0.414,49,1.307,50,0.41,52,0.172,53,2.388,56,0.373,58,0.342,60,1.375,61,0.275,65,0.238,66,0.235,67,0.537,69,0.474,70,0.475,71,0.616,73,0.997,74,0.61,77,0.978,78,0.252,81,0.373,83,0.545,86,0.643,88,0.2,91,1.045,92,0.548,100,0.252,104,0.205,112,0.777,114,0.193,115,0.219,118,0.2,124,0.201,131,0.809,134,1.178,137,0.224,140,0.739,141,2.055,142,0.676,145,0.385,147,1.491,149,0.265,150,0.41,151,0.275,159,0.226,161,0.676,162,0.518,163,0.604,164,0.651,167,0.623,173,0.451,174,0.636,175,0.265,176,0.244,177,0.201,178,1.207,182,0.446,183,0.244,185,0.676,187,1.661,188,0.976,189,0.457,195,1.151,197,1.535,198,1.295,199,1.019,203,0.26,206,0.643,207,0.205,208,1.439,212,1.167,213,0.265,215,0.715,221,0.26,224,0.576,225,1.62,226,0.402,228,0.21,236,0.323,238,0.536,240,1.792,244,1.373,245,0.215,246,0.219,247,1.612,252,0.256,257,0.296,262,1.775,265,0.288,266,0.655,271,0.238,272,0.363,273,0.75,275,0.582,277,0.604,278,0.922,279,0.89,281,1.424,290,0.27,291,0.271,294,0.232,295,3.184,298,0.525,303,0.651,306,1.604,308,0.636,310,0.215,313,0.256,314,0.739,322,0.327,325,0.296,335,0.636,342,0.457,348,0.498,350,0.469,351,0.667,352,0.275,354,1.011,362,0.288,366,0.651,370,0.636,375,2.496,376,0.275,384,0.727,388,0.248,389,2.438,399,2.217,402,0.666,405,0.431,407,0.422,408,0.305,411,0.706,414,0.251,417,0.561,420,2.484,422,0.241,423,0.576,434,0.315,439,0.327,444,0.315,452,0.342,456,0.767,462,0.61,465,1.219,476,0.296,480,0.49,482,0.315,486,0.506,488,0.327,493,0.783,494,3.529,496,1.288,500,0.342,504,0.342,542,0.288,544,0.288,549,0.636,563,0.451,584,0.498,596,0.363,604,0.27,611,0.49,615,0.288,619,0.224,622,0.296,630,0.819,633,0.296,639,0.406,658,0.305,659,0.244,660,0.315,661,1.339,662,0.342,663,0.288,676,2.191,677,0.593,680,0.363,681,0.342,683,0.252,696,0.296,706,2.409,715,0.27,716,0.342,734,0.705,735,0.248,751,0.498,757,0.27,758,0.296,760,1.04,767,0.296,774,0.315,775,0.49,780,0.281,785,0.252,789,4.025,791,0.288,795,0.576,803,0.576,804,0.945,817,0.363,822,3.304,828,0.327,836,0.612,839,0.315,845,0.515,857,0.241,865,1.215,872,0.612,881,0.275,896,0.296,905,0.21,911,0.973,930,2.294,933,0.342,938,0.296,943,0.89,944,0.363,945,0.315,1022,2.124,1053,0.248,1059,0.612,1061,0.315,1085,0.739,1087,0.49,1100,2.059,1102,0.867,1112,0.841,1118,0.996,1119,0.238,1122,0.217,1123,0.241,1124,0.215,1131,0.235,1135,2.549,1142,0.26,1148,0.561,1154,0.265,1156,1.472,1167,0.315,1169,1.951,1176,0.275,1180,0.238,1186,0.841,1187,0.296,1211,0.342,1218,0.296,1220,1.171,1222,0.296,1228,0.783,1253,1.392,1258,3.047,1259,0.593,1265,0.288,1269,0.226,1273,2.949,1274,0.49,1279,0.315,1293,0.636,1326,1.093,1336,1.267,1340,0.315,1341,0.305,1344,1.133,1345,0.327,1346,0.305,1351,0.446,1352,0.363,1369,0.315,1407,0.866,1431,0.715,1435,0.612,1440,0.576,1441,0.288,1450,0.558,1457,0.265,1486,0.281,1495,1.633,1496,0.315,1530,0.327,1556,0.482,1568,0.327,1573,0.327,1580,0.342,1598,0.342,1609,0.275,1613,0.296,1622,0.305,1662,0.515,1665,0.666,1682,0.296,1727,0.978,1757,0.895,1784,0.636,1837,0.296,1842,0.841,1880,0.363,1882,0.515,1883,1.422,1886,0.536,1889,0.327,1892,0.315,1897,0.929,1899,0.327,1905,2.294,1907,0.363,1913,0.363,1916,0.363,1919,0.327,1922,0.342,1926,0.636,1930,1.031,1956,1.031,1982,0.363,1987,1.031,2002,1.031,2006,1.031,2007,0.327,2013,0.363,2017,0.706,2022,1.472,2025,1.162,2026,1.633,2027,3.149,2032,1.031,2038,0.315,2046,0.327,2053,0.973,2063,0.315,2065,1.339,2099,0.363,2116,0.363,2117,1.417,2119,0.363,2122,1.264,2123,0.636,2124,0.394,2125,1.119,2126,0.394,2127,0.706,2128,0.394,2129,0.342,2130,0.363,2131,0.394,2132,1.119,2133,0.394,2134,0.363,2135,0.394,2136,0.363,2137,0.363,2138,0.766,2139,0.666,2140,0.394,2141,0.394,2142,1.371,2143,0.342,2144,0.394,2145,0.394,2146,0.394,2147,0.363,2148,0.394,2149,0.706,2150,0.394,2151,0.394,2152,0.394,2153,0.394,2154,0.394,2155,1.031,2156,0.281,2157,0.394,2158,0.394,2159,0.342,2160,0.394,2161,2.364,2162,3.153,2163,0.363,2164,0.394,2165,0.706,2166,0.394,2167,0.394,2168,0.394,2169,0.394,2170,0.394,2171,0.394,2172,0.394,2173,0.394,2174,0.394,2175,0.394,2176,0.394,2177,0.394,2178,1.119,2179,0.536,2180,0.766,2181,0.394,2182,1.031,2183,0.706,2184,0.973,2185,0.394,2186,0.394,2187,0.363,2188,0.394,2189,0.394,2190,0.394,2191,0.394,2192,0.363,2193,0.394,2194,0.394,2195,0.394,2196,0.766,2197,0.394,2198,0.394,2199,0.394,2200,0.363,2201,0.394,2202,0.394,2203,1.119,2204,0.766,2205,0.766,2206,0.394,2207,0.394,2208,0.394,2209,1.031,2210,0.342,2211,1.454,2212,0.394,2213,3.843,2214,0.766,2215,0.342,2216,0.394,2217,1.773,2218,1.119,2219,1.119,2220,0.766,2221,0.766,2222,0.766,2223,0.265,2224,0.363,2225,0.296,2226,0.394,2227,0.363,2228,0.327,2229,0.394,2230,0.394,2231,0.394,2232,1.454,2233,0.394,2234,0.394,2235,1.119,2236,2.075,2237,1.119,2238,0.706,2239,0.394,2240,0.394,2241,0.766,2242,0.394,2243,0.394,2244,0.394,2245,0.363,2246,0.363,2247,0.394,2248,0.394,2249,0.363,2250,0.315,2251,0.342,2252,1.119,2253,0.394,2254,0.394,2255,0.394,2256,0.394,2257,0.363,2258,0.342,2259,0.394,2260,0.394,2261,0.394,2262,0.394,2263,0.363,2264,0.363,2265,0.363,2266,0.26,2267,0.766,2268,0.394,2269,0.766,2270,0.766,2271,0.394,2272,0.363,2273,0.327,2274,0.394,2275,0.766,2276,0.666,2277,0.394,2278,0.394,2279,0.394,2280,0.394,2281,0.327,2282,0.327,2283,0.327,2284,0.394,2285,0.394,2286,0.394,2287,0.305,2288,0.394,2289,0.394,2290,0.394,2291,0.394,2292,0.394,2293,0.394,2294,0.394,2295,0.394,2296,0.394]],["component/39",[291,0.458]],["title/40-1",[240,25.806,247,28.296,2297,44.243]],["name/40-1",[]],["text/40-1",[]],["component/40-1",[]],["title/40",[26,15.609,240,25.806,803,41.59]],["name/40",[240,0.595,803,0.958]],["text/40",[26,3.218,52,3.567,63,3.658,134,3.052,140,5.396,240,5.321,247,5.307,295,5.396,306,3.863,1180,4.932,2297,6.529,2298,7.525,2299,7.1,2300,7.525]],["component/40",[291,0.458]],["title/41-1",[26,18.691,303,38.552]],["name/41-1",[]],["text/41-1",[]],["component/41-1",[]],["title/41-2",[26,11.738,1850,33.271,2301,38.341,2302,41.626,2303,38.341]],["name/41-2",[]],["text/41-2",[]],["component/41-2",[]],["title/41-3",[147,26.173,164,32.195,807,35.953]],["name/41-3",[]],["text/41-3",[]],["component/41-3",[]],["title/41-4",[3,36.877,399,30.478]],["name/41-4",[]],["text/41-4",[]],["component/41-4",[]],["title/41-5",[822,45.425,1112,49.802]],["name/41-5",[]],["text/41-5",[]],["component/41-5",[]],["title/41-6",[21,37.271,60,38.552]],["name/41-6",[]],["text/41-6",[]],["component/41-6",[]],["title/41-7",[6,34.403]],["name/41-7",[]],["text/41-7",[]],["component/41-7",[]],["title/41-8",[1639,71.78]],["name/41-8",[]],["text/41-8",[]],["component/41-8",[]],["title/41-9",[226,34.787,227,34.787]],["name/41-9",[]],["text/41-9",[]],["component/41-9",[]],["title/41-10",[26,11.738,582,36.177,583,34.561,1850,33.271,2304,41.626]],["name/41-10",[]],["text/41-10",[]],["component/41-10",[]],["title/41-11",[26,11.738,585,36.177,1850,33.271,2305,36.177,2306,41.626]],["name/41-11",[]],["text/41-11",[]],["component/41-11",[]],["title/41-12",[147,26.173,164,32.195,807,35.953]],["name/41-12",[]],["text/41-12",[]],["component/41-12",[]],["title/41-13",[4,24.95,247,28.296,2307,45.959]],["name/41-13",[]],["text/41-13",[]],["component/41-13",[]],["title/41-14",[3,30.796,21,31.125,60,32.195]],["name/41-14",[]],["text/41-14",[]],["component/41-14",[]],["title/41-15",[3,23.159,21,23.406,26,11.738,60,24.211,2109,38.341]],["name/41-15",[]],["text/41-15",[]],["component/41-15",[]],["title/41-16",[3,23.159,21,23.406,26,11.738,60,24.211,2308,38.341]],["name/41-16",[]],["text/41-16",[]],["component/41-16",[]],["title/41-17",[399,30.478,2179,46.357]],["name/41-17",[]],["text/41-17",[]],["component/41-17",[]],["title/41-18",[88,41.864]],["name/41-18",[]],["text/41-18",[]],["component/41-18",[]],["title/41-19",[1122,36.497,1415,40.018]],["name/41-19",[]],["text/41-19",[]],["component/41-19",[]],["title/41-20",[9,31.569,278,34.476]],["name/41-20",[]],["text/41-20",[]],["component/41-20",[]],["title/41-21",[1351,32.933]],["name/41-21",[]],["text/41-21",[]],["component/41-21",[]],["title/41-22",[247,33.883,2309,66.283]],["name/41-22",[]],["text/41-22",[]],["component/41-22",[]],["title/41-23",[226,34.787,227,34.787]],["name/41-23",[]],["text/41-23",[]],["component/41-23",[]],["title/41-24",[26,11.738,135,28.527,1850,33.271,1881,34.561,2310,38.341]],["name/41-24",[]],["text/41-24",[]],["component/41-24",[]],["title/41-25",[26,11.738,1894,38.341,1914,36.177,2311,38.341,2312,31.276]],["name/41-25",[]],["text/41-25",[]],["component/41-25",[]],["title/41-26",[6,27.61,310,36.132]],["name/41-26",[]],["text/41-26",[]],["component/41-26",[]],["title/41-27",[26,11.738,2011,36.177,2312,31.276,2313,41.626,2314,41.626]],["name/41-27",[]],["text/41-27",[]],["component/41-27",[]],["title/41-28",[26,11.738,1666,38.341,2012,36.177,2312,31.276,2315,41.626]],["name/41-28",[]],["text/41-28",[]],["component/41-28",[]],["title/41-29",[26,11.738,2038,33.271,2312,31.276,2316,38.341,2317,36.177]],["name/41-29",[]],["text/41-29",[]],["component/41-29",[]],["title/41-30",[26,13.4,2046,39.453,2312,35.703,2318,43.768]],["name/41-30",[]],["text/41-30",[]],["component/41-30",[]],["title/41-31",[26,13.4,2184,41.298,2312,53.541]],["name/41-31",[]],["text/41-31",[]],["component/41-31",[]],["title/41-32",[26,11.738,1882,27.991,2107,34.561,2312,31.276,2319,41.626]],["name/41-32",[]],["text/41-32",[]],["component/41-32",[]],["title/41-33",[26,11.738,1897,34.561,2317,36.177,2320,41.626,2321,32.196]],["name/41-33",[]],["text/41-33",[]],["component/41-33",[]],["title/41-34",[26,11.738,2107,34.561,2122,36.177,2311,38.341,2321,32.196]],["name/41-34",[]],["text/41-34",[]],["component/41-34",[]],["title/41-35",[26,11.738,2112,36.177,2321,32.196,2322,38.341,2323,41.626]],["name/41-35",[]],["text/41-35",[]],["component/41-35",[]],["title/41-36",[26,11.738,2104,34.561,2321,32.196,2324,41.626,2325,41.626]],["name/41-36",[]],["text/41-36",[]],["component/41-36",[]],["title/41-37",[26,11.738,1644,27.496,2316,38.341,2321,32.196,2326,41.626]],["name/41-37",[]],["text/41-37",[]],["component/41-37",[]],["title/41-38",[26,11.738,2106,33.271,2321,32.196,2327,41.626,2328,41.626]],["name/41-38",[]],["text/41-38",[]],["component/41-38",[]],["title/41",[26,15.609,295,36.564,1180,33.419]],["name/41",[240,0.595,1180,0.77]],["text/41",[0,1.111,1,0.207,2,1.974,3,1.61,4,2.646,5,1.746,6,2.689,7,0.906,8,0.203,9,1.721,10,0.334,11,0.223,13,0.149,14,0.199,15,0.892,16,0.945,20,0.355,21,0.628,22,0.996,24,1.114,25,0.338,26,2.146,27,0.384,28,0.765,29,0.958,30,2.29,31,0.817,32,0.597,34,0.323,36,0.149,39,0.305,41,1.218,42,0.184,44,0.179,45,0.138,47,0.461,49,0.187,50,0.158,51,0.169,52,0.904,53,2.188,56,0.785,60,0.649,61,0.207,63,1.024,64,0.482,65,0.179,66,0.177,67,0.142,69,1.602,70,0.184,71,1.459,73,0.203,74,0.317,77,0.391,78,0.546,79,0.203,80,0.36,81,1.41,83,0.416,86,0.787,88,1.368,90,0.203,91,2.006,93,0.189,98,0.169,104,0.154,107,0.177,112,1.335,114,0.905,115,0.621,116,0.187,118,0.817,119,0.217,120,0.709,121,0.262,122,0.415,123,0.515,124,0.297,127,1.611,131,0.475,132,0.258,133,0.36,134,2.541,135,0.585,136,0.464,137,0.169,140,0.196,141,0.158,142,0.179,144,0.15,145,0.149,147,2.568,148,0.174,150,0.158,151,0.207,155,0.174,159,0.334,161,2.379,162,0.395,163,0.313,164,0.497,167,0.165,172,0.342,173,0.657,175,0.199,176,0.692,177,0.57,178,0.172,181,0.229,183,0.184,184,0.33,185,0.179,196,0.839,197,0.889,198,1.855,199,0.17,201,0.246,202,0.273,205,0.464,207,0.959,208,1.78,209,0.181,210,0.436,211,0.199,212,0.167,213,0.574,214,0.709,215,0.189,218,0.682,221,0.564,224,0.223,225,1.104,226,0.845,227,0.845,228,0.731,231,0.193,232,0.207,236,0.576,238,0.597,239,0.425,240,3.246,242,0.406,244,0.302,245,0.317,246,1.026,247,0.57,252,0.193,253,0.391,259,2.347,260,0.203,263,0.189,265,0.217,266,1.216,267,0.212,269,0.237,271,0.179,273,0.299,274,0.196,275,0.712,276,0.398,277,0.739,278,1.966,279,0.683,280,0.555,281,1.603,282,0.731,283,0.199,289,0.742,291,0.205,294,0.174,295,1.064,296,0.156,297,0.179,303,0.338,306,0.762,308,0.485,310,0.746,314,0.564,315,0.564,318,0.174,321,0.217,331,0.415,338,0.179,342,0.346,344,0.217,347,0.217,348,0.193,350,0.522,351,0.509,353,0.237,354,0.416,359,0.517,366,0.497,370,0.634,376,0.207,388,0.861,399,2.926,404,0.875,405,0.327,406,0.338,413,0.212,414,0.948,419,0.212,423,0.223,436,0.537,441,0.207,453,0.273,454,0.464,455,1.21,456,0.585,457,0.196,462,1.247,463,0.464,465,0.299,466,0.199,470,0.229,472,0.223,478,0.258,479,0.246,480,1.179,482,1.654,486,0.196,488,0.246,493,0.597,494,2.57,503,0.181,509,0.229,512,0.16,515,0.196,519,0.203,525,0.212,529,0.184,539,0.229,540,0.415,541,0.781,542,0.425,546,0.199,549,0.246,555,0.246,556,0.174,563,0.342,578,0.535,603,0.258,604,0.203,605,0.355,607,0.167,611,0.713,612,0.199,616,0.212,631,0.482,639,0.308,645,0.165,650,0.223,659,0.53,665,0.258,676,0.246,683,0.371,690,0.237,693,0.246,705,0.258,724,0.892,733,0.217,735,0.537,746,0.217,753,0.246,754,0.229,757,0.203,760,0.798,776,0.585,777,0.448,786,0.246,791,0.425,798,0.203,802,0.585,803,0.223,804,0.555,812,0.892,814,0.258,819,0.863,820,0.174,822,1.104,824,0.184,845,0.199,846,0.246,852,0.246,857,0.522,864,0.212,865,0.398,867,0.273,873,0.273,881,0.207,892,0.203,897,0.229,905,1.746,912,0.391,913,0.258,915,0.181,917,0.258,920,0.212,921,0.342,943,1.399,1022,1.002,1023,0.273,1030,0.625,1031,0.246,1034,0.184,1040,0.199,1053,0.537,1059,0.237,1064,0.449,1066,0.425,1072,0.207,1082,0.193,1083,0.384,1085,0.564,1087,0.546,1088,0.425,1091,0.258,1098,0.574,1100,0.485,1102,0.815,1103,0.725,1109,0.237,1112,0.641,1118,1.376,1119,0.674,1121,0.223,1122,1.016,1123,0.355,1124,0.162,1131,0.346,1135,2.028,1142,0.196,1144,0.839,1147,0.53,1148,1.35,1152,0.273,1174,0.246,1176,0.957,1178,0.246,1179,0.535,1180,0.826,1186,0.223,1187,0.223,1194,0.258,1209,0.246,1210,0.237,1216,0.237,1217,0.177,1220,0.384,1229,0.406,1230,0.237,1234,0.237,1236,0.839,1253,2.501,1255,0.75,1259,0.229,1261,0.246,1265,0.217,1272,0.425,1274,0.189,1279,0.237,1293,0.246,1296,0.258,1300,0.223,1326,0.223,1329,0.273,1344,1.179,1345,0.482,1351,0.232,1371,0.425,1373,0.703,1375,0.212,1410,0.641,1415,1.507,1431,0.546,1435,0.237,1438,0.482,1441,0.425,1450,0.148,1503,0.207,1551,0.229,1570,0.449,1609,0.406,1617,0.237,1627,0.436,1628,0.246,1644,0.196,1645,0.449,1662,0.199,1682,0.641,1687,0.177,1691,0.212,1696,0.237,1732,0.246,1766,0.237,1775,0.258,1776,0.377,1778,0.237,1796,0.425,1836,1.104,1837,0.436,1838,0.515,1842,0.641,1851,0.237,1881,0.246,1882,0.574,1883,1.264,1884,2.087,1885,0.863,1886,0.597,1893,0.217,1896,0.863,1902,0.786,1914,0.258,1918,0.258,1920,0.273,1921,0.273,1923,0.273,1957,0.273,2011,0.258,2012,0.258,2025,0.682,2035,0.258,2038,0.237,2039,1.028,2046,0.246,2063,0.237,2087,0.237,2110,0.273,2112,0.505,2123,0.246,2129,0.258,2136,0.273,2142,0.449,2155,0.273,2165,0.535,2179,0.597,2182,0.273,2184,0.258,2223,1.679,2224,0.273,2225,0.223,2249,0.273,2250,0.237,2273,0.482,2297,0.682,2298,0.273,2299,0.258,2300,0.273,2301,1.26,2303,0.786,2305,0.742,2307,0.709,2308,0.273,2329,0.273,2330,0.246,2331,0.246,2332,0.535,2333,0.581,2334,0.786,2335,0.581,2336,0.581,2337,0.296,2338,0.296,2339,0.296,2340,0.535,2341,0.581,2342,0.258,2343,0.296,2344,0.273,2345,0.296,2346,0.296,2347,0.296,2348,0.296,2349,0.296,2350,0.212,2351,0.296,2352,1.028,2353,0.581,2354,0.581,2355,0.296,2356,0.581,2357,0.296,2358,0.296,2359,0.296,2360,0.581,2361,0.296,2362,0.246,2363,0.854,2364,2.156,2365,0.237,2366,0.436,2367,0.296,2368,0.296,2369,0.258,2370,0.296,2371,0.296,2372,0.296,2373,0.258,2374,0.237,2375,0.786,2376,0.296,2377,0.273,2378,0.258,2379,0.296,2380,0.296,2381,0.296,2382,0.854,2383,0.927,2384,1.906,2385,0.581,2386,0.535,2387,0.273,2388,0.854,2389,1.058,2390,1.136,2391,0.892,2392,0.296,2393,0.425,2394,0.229,2395,0.237,2396,0.237,2397,0.482,2398,0.482,2399,0.246,2400,0.742,2401,0.535,2402,0.581,2403,0.581,2404,0.273,2405,0.581,2406,0.581,2407,0.229,2408,0.296,2409,0.273,2410,0.296,2411,0.581,2412,0.581,2413,0.296,2414,0.296,2415,0.581,2416,0.296,2417,0.296,2418,0.581,2419,0.273,2420,0.296,2421,0.273,2422,0.296,2423,0.273,2424,0.273,2425,0.535,2426,0.296,2427,0.199,2428,0.273,2429,0.581,2430,0.296,2431,0.273,2432,0.193,2433,0.505,2434,0.296,2435,0.296,2436,0.296,2437,0.258,2438,0.581,2439,0.296,2440,0.296,2441,0.296,2442,0.581,2443,0.709,2444,1.116,2445,0.237,2446,0.229,2447,0.296,2448,0.464,2449,0.258,2450,0.296,2451,0.296,2452,0.854,2453,0.223,2454,0.296,2455,0.296,2456,0.273,2457,0.581,2458,0.212,2459,0.273,2460,0.296,2461,0.258,2462,0.97,2463,0.273,2464,0.296,2465,0.246,2466,0.296,2467,0.273,2468,0.258,2469,0.296,2470,0.246,2471,0.296,2472,0.203,2473,0.273,2474,0.581,2475,0.296,2476,0.296,2477,0.258,2478,0.296,2479,0.296,2480,0.296,2481,0.296,2482,0.296,2483,0.296,2484,0.258,2485,0.237,2486,0.436,2487,0.296,2488,0.786,2489,0.535,2490,0.296,2491,0.273,2492,0.296,2493,0.296,2494,0.854,2495,0.682,2496,0.97,2497,1.116,2498,0.296,2499,0.296,2500,0.296,2501,0.296,2502,0.296,2503,0.296,2504,0.296,2505,0.258,2506,0.296,2507,0.273,2508,0.273,2509,0.296,2510,0.296,2511,0.237,2512,0.296,2513,0.296,2514,0.258,2515,0.296,2516,0.273,2517,0.296,2518,0.296,2519,0.296,2520,0.296,2521,0.296,2522,0.296,2523,0.296,2524,0.273,2525,0.296]],["component/41",[291,0.458]],["title/42",[3,26.437,12,27.638,13,23.888,200,30.374]],["name/42",[3,0.71,200,0.815]],["text/42",[3,5.889,12,4.707,13,5.034,15,1.434,17,1.706,21,4.55,26,2.723,44,1.792,52,1.296,53,2.48,59,4.912,60,4.248,61,2.075,62,1.792,63,2.2,64,2.464,65,1.792,124,1.517,134,1.109,163,4.368,173,1.747,240,3.405,245,1.618,266,1.338,294,1.747,391,2.601,494,2.555,506,2.121,547,2.372,584,1.928,657,3.366,682,2.075,696,2.23,760,4.492,789,2.121,790,2.733,791,4.6,794,3.595,795,3.69,799,2.464,886,2.733,1034,3.047,1156,2.464,1190,1.236,1256,2.733,1257,2.733,1486,2.121,1497,2.579,1570,2.295,2245,2.733,2246,4.524,2526,4.912,2527,2.968,2528,2.968,2529,2.968,2530,2.968,2531,2.968,2532,2.968,2533,2.968,2534,2.968,2535,2.968,2536,2.968,2537,2.968,2538,2.968,2539,4.912,2540,4.912,2541,4.524,2542,4.524,2543,2.968,2544,2.968,2545,2.968,2546,2.968,2547,2.968,2548,2.968,2549,2.968,2550,2.968,2551,2.968,2552,2.968,2553,2.968,2554,2.968,2555,2.968,2556,2.968,2557,2.968,2558,2.968,2559,2.968]],["component/42",[291,0.458]],["title/43",[163,35.779,311,55.033]],["name/43",[311,1.897]],["text/43",[2,2.92,15,2.641,26,2.615,124,2.793,163,4.263,171,4.541,195,3.549,200,3.493,203,3.609,245,4.305,311,7.701,312,3.39,389,4.226,524,4.106,529,3.39,657,3.745,795,4.106,824,3.39,903,4.226,1034,3.39,1762,3.745,2560,9.275,2561,5.464,2562,5.464,2563,5.464,2564,5.464,2565,5.464,2566,5.464,2567,5.464,2568,5.464,2569,5.464,2570,5.464,2571,5.464,2572,4.749,2573,5.464,2574,5.464,2575,5.464,2576,5.464,2577,5.464,2578,5.464,2579,5.464,2580,5.464,2581,5.464,2582,5.464,2583,5.464]],["component/43",[291,0.458]],["title/44",[236,23.323,392,28.792,1687,32.992]],["name/44",[392,0.663,1687,0.76]],["text/44",[2,3.071,16,4.032,18,4.267,26,2.489,38,2.707,53,1.979,60,2.917,69,3.144,74,2.734,91,2.218,124,3.792,207,2.609,211,3.372,236,4.752,245,2.734,306,4.174,351,2.989,392,5.669,908,2.113,943,3.069,1102,2.989,1103,3.257,1105,3.768,1644,4.9,1687,6.205,1691,5.303,1845,4.62,1848,4.62,1866,4.62,1867,4.62,2228,6.159,2584,6.447,2585,5.015,2586,5.015]],["component/44",[291,0.458]],["title/45",[1725,56.955,1727,31.953,1886,33.233]],["name/45",[392,0.46,1725,0.707,1886,0.619]],["text/45",[2,1.863,6,1.137,16,2.092,18,1.319,26,2.178,36,1.372,42,1.693,45,1.272,49,1.718,53,3.506,55,1.718,59,3.08,67,1.309,69,2.508,98,1.551,124,1.395,134,1.019,140,1.803,145,2.302,147,4.201,159,1.569,164,2.664,167,2.548,177,2.341,200,1.744,205,2.181,212,1.534,265,1.998,277,1.473,282,1.459,306,1.29,308,2.604,357,2.514,370,1.551,392,4.349,427,2.372,457,1.803,494,1.419,506,3.274,518,2.266,551,2.372,557,1.909,600,2.514,612,1.835,798,3.139,845,1.835,888,1.998,1022,3.353,1131,1.626,1209,2.266,1218,2.05,1326,2.05,1405,4.219,1627,2.05,1669,3.909,1686,5.365,1687,4.131,1695,2.05,1701,2.514,1709,3.527,1725,9.478,1727,5.623,1786,2.372,1837,3.441,1864,3.981,1886,1.909,2264,6.384,2273,2.266,2310,2.514,2584,2.372,2587,4.58,2588,4.58,2589,4.58,2590,2.729,2591,2.729,2592,2.729,2593,2.372,2594,2.266,2595,2.729,2596,2.729,2597,2.729,2598,2.729,2599,2.729,2600,2.729,2601,2.729,2602,2.729]],["component/45",[291,0.458]],["title/46-1",[26,18.691,943,40.557]],["name/46-1",[]],["text/46-1",[]],["component/46-1",[]],["title/46-2",[26,13.4,240,22.153,1102,28.322,1103,30.864]],["name/46-2",[]],["text/46-2",[]],["component/46-2",[]],["title/46-3",[26,15.609,198,27.169,392,28.792]],["name/46-3",[]],["text/46-3",[]],["component/46-3",[]],["title/46-4",[26,15.609,392,28.792,469,44.243]],["name/46-4",[]],["text/46-4",[]],["component/46-4",[]],["title/46",[2,14.962,22,25.65,26,13.4,236,20.022]],["name/46",[236,0.537,338,0.77]],["text/46",[2,2.06,3,3.641,18,3.163,22,3.532,26,3.006,27,4.322,34,3.641,52,2.857,63,2.93,91,1.878,133,4.06,147,2.008,148,3.852,198,2.085,236,4.31,237,3.912,243,3.527,266,1.915,300,2.674,389,5.061,392,3.404,400,3.527,469,3.395,474,4.484,494,3.404,930,5.687,943,4.884,946,3.912,1100,2.415,1102,6.097,1103,5.184,1114,6.027,1253,2.5,1344,2.715,1519,3.912,1687,2.532,1717,7.352,1836,2.911,1885,6.173,2330,3.527,2331,3.527,2603,4.248,2604,4.248,2605,4.248,2606,4.248,2607,4.248,2608,4.248,2609,4.248]],["component/46",[291,0.458]],["title/47",[306,31.341,308,37.68]],["name/47",[308,0.725,309,0.934]],["text/47",[2,2.302,4,3.463,6,2.449,7,3.874,9,1.764,15,2.543,16,1.235,18,0.722,26,2.261,29,0.626,30,2.116,39,0.784,45,1.727,52,0.652,56,0.728,60,0.869,62,0.902,63,0.669,66,1.612,74,4.371,78,0.955,79,1.024,80,0.927,81,1.317,86,0.859,88,1.371,91,0.66,98,2.106,100,0.955,104,0.777,107,1.612,113,1.891,114,0.733,118,1.371,135,1.853,141,2.43,145,0.751,147,0.706,150,1.98,155,0.879,171,0.859,172,0.879,181,1.155,203,0.987,207,1.927,208,2.019,212,0.84,219,1.446,232,4.488,236,1.915,240,0.696,247,0.764,266,0.673,273,0.77,281,1.327,284,2.032,285,1.093,289,2.35,294,0.879,306,1.751,308,4.887,318,0.879,320,1.004,338,0.902,351,0.89,365,1.068,370,2.106,398,1.298,399,0.687,406,0.869,407,0.823,408,1.155,409,1.298,414,0.489,430,1.155,455,1.122,480,2.905,494,1.406,517,2.245,542,1.093,615,1.093,616,1.068,619,0.849,645,1.504,656,1.24,678,1.068,705,1.298,715,1.024,737,1.045,747,1.818,751,0.97,756,0.987,763,1.298,765,1.194,777,0.784,793,1.24,820,0.879,864,1.068,875,1.573,941,2.35,943,0.914,1034,0.927,1073,0.927,1083,1.786,1100,0.849,1102,2.208,1103,2.406,1105,1.122,1122,0.823,1135,1.122,1144,2.783,1162,1.122,1190,0.622,1253,0.879,1344,0.955,1351,2.344,1375,4.203,1415,0.902,1439,1.891,1441,4.698,1450,0.745,1645,7.936,1662,4.915,1687,0.89,1694,1.376,1836,1.024,1838,1.632,1877,1.376,1881,1.24,1885,2.865,1918,1.298,1926,5.328,1994,1.376,2014,2.35,2215,1.298,2223,4.315,2330,1.24,2331,1.24,2366,2.032,2407,1.155,2610,1.24,2611,1.494,2612,1.376,2613,1.494,2614,1.298,2615,1.494,2616,1.376,2617,2.491,2618,2.704,2619,2.704,2620,1.298,2621,2.704,2622,2.704,2623,4.545,2624,2.704]],["component/47",[291,0.458]],["title/48",[4,29.876,292,38.107]],["name/48",[4,0.399,292,0.509,1359,0.707]],["text/48",[4,4.928,15,3.115,26,2.502,30,2.32,50,3.446,52,2.814,63,3.974,66,3.841,69,2.731,124,3.294,149,5.967,163,3.479,292,6.813,389,4.985,1034,3.999,1290,5.151,1311,5.936,1312,5.936,1443,5.351,1444,5.936,1445,5.936,1818,5.601,1919,5.351,2625,6.445,2626,6.445,2627,6.445,2628,5.936,2629,6.445]],["component/48",[291,0.458]],["title/49-1",[700,49.802,1034,41.126]],["name/49-1",[]],["text/49-1",[]],["component/49-1",[]],["title/49",[26,18.691,307,43.783]],["name/49",[26,0.36,307,0.843]],["text/49",[0,2.821,1,4.434,2,1.284,6,3.24,13,2.05,15,1.971,17,2.344,20,2.495,22,2.201,26,3.37,27,2.693,45,1.901,57,3.491,72,2.606,144,2.067,148,2.4,164,2.372,177,2.084,187,2.567,188,3.491,221,2.693,242,2.852,262,2.742,292,2.344,294,2.4,296,3.327,297,3.828,300,2.567,304,7.89,307,5.138,325,3.064,416,5.067,420,2.985,457,2.693,462,2.223,465,2.102,557,2.852,572,5.264,663,2.985,720,2.606,779,3.064,1082,2.648,1163,3.259,1190,1.698,1229,2.852,1236,3.064,1340,3.259,1375,2.915,1868,3.385,1883,2.794,2258,3.544,2378,3.544,2484,3.544,2630,4.077,2631,4.077,2632,10.061,2633,4.077,2634,4.077,2635,4.077,2636,4.077,2637,4.077]],["component/49",[291,0.458]],["title/50-1",[92,47.382,1061,52.978]],["name/50-1",[]],["text/50-1",[]],["component/50-1",[]],["title/50-2",[26,18.691,2453,49.802]],["name/50-2",[]],["text/50-2",[]],["component/50-2",[]],["title/50-3",[71,28.09,94,43.052]],["name/50-3",[]],["text/50-3",[]],["component/50-3",[]],["title/50-4",[121,37.226]],["name/50-4",[]],["text/50-4",[]],["component/50-4",[]],["title/50-5",[71,28.09,1047,45.425]],["name/50-5",[]],["text/50-5",[]],["component/50-5",[]],["title/50-6",[71,28.09,1838,40.018]],["name/50-6",[]],["text/50-6",[]],["component/50-6",[]],["title/50-7",[94,53.643]],["name/50-7",[]],["text/50-7",[]],["component/50-7",[]],["title/50-8",[1047,56.601]],["name/50-8",[]],["text/50-8",[]],["component/50-8",[]],["title/50",[71,28.09,414,21.714]],["name/50",[71,0.541,414,0.418]],["text/50",[6,1.131,15,1.313,17,2.138,25,2.163,26,1.049,29,0.629,36,0.755,39,3.095,47,2.008,52,1.624,53,1.8,63,0.672,65,0.906,66,0.895,69,1.151,71,3.106,74,0.818,79,1.861,94,2.416,117,0.992,123,0.906,134,4.641,145,1.365,148,1.599,162,0.695,183,0.931,215,1.736,226,0.788,227,0.788,228,0.803,240,0.7,244,0.781,255,1.246,260,1.861,266,0.677,277,1.466,302,0.844,310,2.878,333,4.172,342,1.619,365,1.073,406,2.163,414,1.218,503,1.662,612,1.009,747,1.009,756,1.794,782,1.2,820,0.884,824,0.931,880,1.2,905,1.988,908,1.144,920,1.073,1030,4.317,1031,2.255,1039,1.305,1040,1.826,1047,4.042,1048,1.009,1080,1.246,1147,2.308,1156,1.246,1191,4.833,1234,1.2,1259,1.161,1300,1.128,1375,1.073,1456,1.073,1457,1.009,1492,1.099,1646,1.2,1683,3.232,1762,2.549,1776,0.975,1838,1.64,2025,1.2,2117,1.2,2159,2.36,2250,1.2,2350,1.941,2365,1.2,2375,1.383,2377,1.383,2453,2.041,2495,1.2,2638,4.202,2639,1.501,2640,1.501,2641,1.246,2642,2.502,2643,1.501,2644,1.501,2645,1.501,2646,2.716,2647,1.501,2648,4.383,2649,1.501,2650,2.502,2651,1.501,2652,1.501,2653,2.36,2654,1.501,2655,1.383,2656,2.502,2657,1.501,2658,2.716,2659,2.716,2660,2.716,2661,2.716,2662,1.501,2663,1.501,2664,3.788,2665,2.716,2666,1.501,2667,1.501,2668,1.501,2669,1.501,2670,1.501,2671,1.501,2672,1.501,2673,1.501,2674,1.501,2675,1.501,2676,1.501,2677,2.502,2678,4.202,2679,1.501,2680,2.716,2681,2.716,2682,1.501,2683,1.501,2684,1.501,2685,1.501,2686,1.501,2687,6.437,2688,5.279,2689,2.877,2690,1.501,2691,1.501,2692,1.501,2693,1.501,2694,2.716,2695,4.562,2696,1.383,2697,1.383,2698,1.501,2699,1.501,2700,2.716,2701,1.501,2702,3.426,2703,1.383,2704,2.716,2705,1.501,2706,1.501,2707,1.501,2708,1.501,2709,1.383,2710,1.501,2711,1.383,2712,1.383]],["component/50",[291,0.458]],["title/51",[25,38.552,905,35.437]],["name/51",[162,0.591,1492,0.934]],["text/51",[6,3.836,8,4.663,15,3.289,25,5.356,36,4.629,53,2.685,69,2.883,74,3.709,95,3.785,134,4.366,275,3.539,333,5.559,905,6.248,1195,5.649,1215,6.267,1492,6.74,1844,4.758,2223,4.575,2638,6.267,2713,5.649,2714,6.267]],["component/51",[291,0.458]],["title/52",[25,38.552,1040,44.571]],["name/52",[25,0.742,1040,0.858]],["text/52",[2,1.705,15,3.793,25,4.564,26,1.527,39,2.842,44,3.27,45,2.525,53,3.096,69,2.295,96,4.329,123,3.27,134,4.684,184,3.079,681,4.707,1030,3.964,1039,4.707,1040,6.205,1104,6.82,1492,3.964,1649,4.497,1658,4.497,2653,6.82,2655,4.988,2664,6.515,2713,4.497,2715,5.416,2716,5.416,2717,5.416,2718,5.416,2719,5.416,2720,5.416,2721,5.416,2722,4.497,2723,5.416,2724,5.416,2725,5.416,2726,5.416,2727,4.329]],["component/52",[291,0.458]],["title/53-1",[300,51.995]],["name/53-1",[]],["text/53-1",[]],["component/53-1",[]],["title/53-2",[678,47.382,2728,49.802]],["name/53-2",[]],["text/53-2",[]],["component/53-2",[]],["title/53-3",[118,33.598,308,37.68]],["name/53-3",[]],["text/53-3",[]],["component/53-3",[]],["title/53-4",[30,23.857,881,46.357]],["name/53-4",[]],["text/53-4",[]],["component/53-4",[]],["title/53-5",[30,23.857,223,44.571]],["name/53-5",[]],["text/53-5",[]],["component/53-5",[]],["title/53-6",[36,33.321,47,35.779]],["name/53-6",[]],["text/53-6",[]],["component/53-6",[]],["title/53",[0,21.144,36,23.888,193,26.719,414,15.566]],["name/53",[0,0.568,414,0.418]],["text/53",[0,3.643,1,0.631,2,2.181,4,1.367,5,1.187,6,0.707,7,2.024,9,1.444,10,0.519,15,1.74,17,0.519,22,3.444,26,0.677,30,3.433,39,1.261,40,1.213,42,0.56,44,0.545,47,1.637,52,1.795,53,0.948,56,2.959,62,1.024,63,1.076,67,0.814,69,1.939,71,0.719,72,0.577,74,1.962,77,0.607,79,0.618,80,0.56,81,1.753,86,0.519,88,0.86,90,0.618,91,1.341,93,0.577,98,0.513,115,0.502,116,1.068,118,4.317,123,0.545,124,0.461,127,1.293,128,0.545,131,0.944,134,0.897,137,0.965,143,0.749,145,0.853,150,0.482,151,0.631,159,0.519,162,0.418,172,0.999,173,0.531,176,0.56,177,1.84,178,2.093,179,0.645,182,0.987,188,1.323,193,1.351,198,1.488,199,0.519,200,0.577,206,0.976,207,0.469,215,1.536,223,1.141,227,0.473,231,0.586,236,0.38,240,0.791,244,0.469,245,0.492,246,0.502,247,0.461,253,0.607,266,0.765,270,0.721,274,0.596,275,1.249,277,0.487,278,1.249,279,1.47,280,2.338,281,0.443,282,0.907,283,1.141,284,0.678,302,1.351,306,0.427,308,3.454,310,0.925,312,0.56,314,0.596,318,0.531,359,0.786,370,1.724,376,0.631,384,0.586,388,0.568,399,0.415,414,3.014,439,0.749,456,1.163,462,0.492,465,2.359,466,1.141,481,1.242,483,0.618,488,0.749,494,0.469,496,0.56,503,1.038,519,0.618,529,0.56,539,0.698,543,1.356,556,0.531,624,0.66,629,0.721,639,0.478,645,0.502,652,4.206,667,1.163,670,0.698,677,0.698,682,0.631,699,0.66,721,0.698,727,0.831,733,1.758,751,1.56,777,0.891,802,0.618,804,0.586,811,0.784,820,1.414,824,0.56,857,0.552,875,0.525,879,0.721,881,2.875,894,1.409,901,0.645,905,0.482,906,0.784,912,1.141,915,0.552,921,3.172,1034,1.053,1064,1.858,1085,1.121,1100,0.513,1118,0.715,1121,0.678,1122,1.982,1124,2.241,1131,1.011,1139,0.66,1148,1.758,1170,0.618,1172,0.721,1178,1.995,1183,0.698,1186,0.678,1189,1.312,1220,0.596,1232,0.698,1237,1.121,1254,0.749,1272,1.758,1274,0.577,1291,1.242,1327,1.805,1393,0.749,1394,2.424,1415,1.831,1420,0.721,1428,0.721,1506,0.721,1606,1.242,1645,1.312,1646,0.721,1662,0.607,1727,1.615,1766,0.721,1778,0.721,1796,0.66,1851,0.721,1853,0.784,1893,0.66,2057,0.596,2163,1.563,2215,1.475,2251,0.784,2263,0.831,2287,0.698,2332,0.831,2364,2.121,2365,0.721,2393,3.945,2394,3.539,2395,2.424,2396,0.721,2397,1.409,2398,0.749,2399,0.749,2433,0.784,2443,1.409,2445,0.721,2446,0.698,2448,0.721,2449,0.784,2458,0.645,2477,0.784,2610,0.749,2641,0.749,2728,1.275,2729,4.346,2730,0.902,2731,0.902,2732,1.805,2733,0.902,2734,1.563,2735,1.475,2736,0.902,2737,0.831,2738,0.902,2739,0.902,2740,3.18,2741,0.831,2742,0.902,2743,0.902,2744,0.831,2745,0.831,2746,0.902,2747,0.721,2748,0.902,2749,0.902,2750,0.784,2751,0.902,2752,0.902,2753,0.902,2754,0.902,2755,0.902,2756,0.749,2757,0.831,2758,0.784,2759,0.902,2760,0.902,2761,0.902,2762,0.902,2763,0.902]],["component/53",[291,0.458]],["title/54-1",[0,29.493,414,21.714]],["name/54-1",[]],["text/54-1",[]],["component/54-1",[]],["title/54-2",[2747,52.978,2764,49.802]],["name/54-2",[]],["text/54-2",[]],["component/54-2",[]],["title/54",[0,24.63,193,31.125,406,32.195]],["name/54",[856,1.767]],["text/54",[0,4.916,1,3.144,2,3.026,26,2.331,27,1.763,30,2.46,36,2.26,38,1.441,39,1.401,40,1.908,41,1.763,44,2.714,45,2.715,52,1.963,53,1.774,63,2.013,71,1.131,72,1.706,80,2.789,81,2.19,90,1.829,91,1.988,116,1.68,118,1.353,127,1.138,134,0.997,150,4.078,163,1.441,169,1.954,177,1.364,193,2.528,218,2.133,221,1.763,223,1.795,231,1.734,244,1.388,252,1.734,253,1.795,266,2.625,275,1.388,282,1.427,296,2.359,306,1.262,313,1.734,338,2.714,362,1.954,404,1.706,406,1.553,414,1.473,420,1.954,436,3.667,461,1.68,470,2.065,493,1.867,503,1.633,512,1.441,524,2.006,525,1.908,546,1.795,563,1.571,602,1.829,605,1.633,619,1.517,624,1.954,629,2.133,659,1.656,734,1.68,736,2.065,753,2.216,779,2.006,811,2.32,824,1.656,825,2.006,855,2.32,857,1.633,912,1.795,1122,1.47,1123,6.401,1153,2.459,1340,2.133,1391,4.655,2009,2.459,2365,2.133,2389,2.065,2407,2.065,2485,3.593,2488,2.459,2614,2.32,2747,2.133,2764,3.378,2765,2.459,2766,2.459,2767,2.459,2768,2.669,2769,4.141,2770,4.141,2771,2.216,2772,2.459,2773,2.32,2774,2.669,2775,2.459,2776,2.32,2777,2.32]],["component/54",[291,0.458]],["title/55-1",[0,21.144,127,20.256,147,22.469,1099,28.689]],["name/55-1",[]],["text/55-1",[]],["component/55-1",[]],["title/55-2",[280,35.953,921,32.584,2443,45.959]],["name/55-2",[]],["text/55-2",[]],["component/55-2",[]],["title/55-3",[226,34.787,227,34.787]],["name/55-3",[]],["text/55-3",[]],["component/55-3",[]],["title/55",[0,24.63,127,23.597,147,26.173]],["name/55",[0,0.394,127,0.377,147,0.418]],["text/55",[0,4.863,2,2.719,6,1.813,7,1.444,15,1.241,22,3.056,26,1.227,30,3.869,49,2.74,52,1.9,53,3.407,63,1.949,67,1.232,69,3.434,81,2.758,86,1.476,118,1.302,127,4.174,134,0.959,137,1.46,147,3.152,159,1.476,162,1.189,177,1.313,182,1.494,198,2.779,206,1.476,212,1.444,221,1.696,236,2.386,253,1.727,264,1.76,266,1.158,275,2.945,279,4.564,280,5.263,307,2.874,308,1.46,310,2.372,315,1.696,350,1.571,414,1.855,465,2.919,472,3.27,512,3.056,568,3.185,605,2.663,683,2.782,731,1.88,754,1.986,777,2.284,921,2.562,1099,4.025,1118,1.082,1123,1.571,1124,1.4,1147,1.593,1468,2.053,1471,2.232,1521,6.487,1820,3.613,2364,3.96,2393,1.88,2394,1.986,2427,1.727,2432,1.668,2443,3.613,2445,3.478,2446,1.986,2448,2.053,2449,2.232,2458,1.836,2732,1.93,2778,2.568]],["component/55",[291,0.458]],["title/56-1",[0,24.63,150,29.594,436,34.848]],["name/56-1",[]],["text/56-1",[]],["component/56-1",[]],["title/56-2",[0,29.493,1,46.357]],["name/56-2",[]],["text/56-2",[]],["component/56-2",[]],["title/56-3",[0,21.144,262,31.953,359,22,414,15.566]],["name/56-3",[]],["text/56-3",[]],["component/56-3",[]],["title/56",[0,36.749]],["name/56",[1229,1.598]],["text/56",[0,4.885,1,6.529,2,2.269,26,0.909,30,2.914,38,2.346,39,0.954,40,2.306,44,1.098,45,2.026,46,1.675,50,1.724,51,1.833,52,0.794,53,1.715,56,0.886,62,1.098,66,1.084,69,0.771,75,1.181,91,0.804,98,1.034,99,1.454,102,3.85,104,0.946,106,1.51,107,1.922,114,0.893,118,0.922,134,0.679,141,1.724,144,2.203,145,0.914,149,1.223,150,3.56,155,1.07,160,1.454,161,1.098,171,1.046,173,1.07,175,1.223,194,1.331,198,2.133,199,1.046,206,1.854,224,1.366,236,1.359,246,1.794,252,3.416,262,1.223,266,0.82,282,1.724,306,0.86,308,1.034,315,1.201,317,1.407,342,1.084,354,0.886,358,1.675,359,2.012,392,1.678,399,0.836,404,1.162,407,1.001,412,1.58,414,1.723,415,2.803,422,1.113,441,1.272,444,1.454,454,1.454,461,2.03,465,0.938,466,1.223,470,2.495,483,1.246,493,1.272,496,2.696,515,2.13,546,1.223,563,1.07,573,1.58,605,2.659,611,1.162,612,2.169,613,1.07,619,1.833,640,1.58,645,2.926,654,1.51,664,1.51,682,1.272,683,1.162,684,3.106,685,1.51,687,1.675,767,1.366,777,2.76,779,1.366,785,1.162,819,2.495,820,1.07,824,2.696,825,3.265,845,1.223,881,1.272,885,1.454,901,1.3,912,1.223,1122,3.314,1123,2.659,1166,1.454,1186,1.366,1237,1.201,1253,1.07,1295,1.675,1368,1.366,1439,2.256,1469,1.58,1565,1.454,1622,1.407,1644,1.201,1691,1.3,1776,1.181,1787,2.678,1896,1.407,1993,1.675,2287,1.407,2389,1.407,2472,1.246,2484,1.58,2485,1.454,2610,1.51,2628,1.675,2722,1.51,2732,2.423,2747,1.454,2764,1.366,2766,1.675,2767,6.134,2773,1.58,2779,1.675,2780,1.819,2781,1.819,2782,1.819,2783,1.819,2784,1.819,2785,1.675,2786,3.225,2787,3.225,2788,1.819,2789,1.819,2790,1.819,2791,1.819,2792,1.819,2793,1.819]],["component/56",[291,0.458]],["title/57-1",[155,39.018,2433,57.607]],["name/57-1",[]],["text/57-1",[]],["component/57-1",[]],["title/57",[30,19.923,103,37.222,1468,44.243]],["name/57",[30,0.318,103,0.595,1468,0.707]],["text/57",[4,4.638,20,3.436,22,5.88,30,4.3,52,2.452,56,3.923,62,3.39,88,2.846,91,3.561,118,2.846,137,3.192,182,3.266,188,3.092,198,5.05,266,2.531,405,3.157,414,2.638,474,3.848,480,3.589,645,3.124,667,3.848,733,4.11,777,2.947,785,3.589,883,4.219,1118,2.366,1255,3.776,1291,4.11,2393,4.11,2458,4.014,2729,7,2794,5.615]],["component/57",[291,0.458]],["title/58-1",[236,27.928,1521,49.802]],["name/58-1",[]],["text/58-1",[]],["component/58-1",[]],["title/58-2",[193,46.44]],["name/58-2",[]],["text/58-2",[]],["component/58-2",[]],["title/58-3",[2,17.429,127,23.597,1521,41.59]],["name/58-3",[]],["text/58-3",[]],["component/58-3",[]],["title/58-4",[127,28.256,275,34.476]],["name/58-4",[]],["text/58-4",[]],["component/58-4",[]],["title/58-5",[471,47.382,659,41.126]],["name/58-5",[]],["text/58-5",[]],["component/58-5",[]],["title/58-6",[471,47.382,690,52.978]],["name/58-6",[]],["text/58-6",[]],["component/58-6",[]],["title/58-7",[127,28.256,1521,49.802]],["name/58-7",[]],["text/58-7",[]],["component/58-7",[]],["title/58-8",[3,36.877,244,34.476]],["name/58-8",[]],["text/58-8",[]],["component/58-8",[]],["title/58-9",[49,41.728,2795,61.052]],["name/58-9",[]],["text/58-9",[]],["component/58-9",[]],["title/58-10",[1351,26.43,2796,61.052]],["name/58-10",[]],["text/58-10",[]],["component/58-10",[]],["title/58",[2,14.962,127,20.256,568,34.784,1521,35.703]],["name/58",[127,0.544,568,0.934]],["text/58",[0,1.497,2,3.019,6,1.014,9,0.634,10,1.4,26,1.172,30,1.211,38,0.718,41,0.879,45,1.135,47,1.314,50,0.712,52,1.469,53,0.525,55,0.838,56,1.638,63,1.09,67,1.168,69,0.564,71,1.032,72,4.621,73,0.912,90,3.32,91,0.588,95,0.74,115,0.74,124,0.68,127,4.723,130,1.668,134,3.951,141,1.301,145,0.669,173,0.783,184,0.757,187,0.838,193,1.369,219,0.712,228,0.712,236,4.041,240,0.62,252,0.864,257,1,264,0.912,266,1.097,271,0.804,275,3.105,278,2.163,282,0.712,296,0.699,303,0.774,315,0.879,359,0.616,399,0.612,401,1.157,405,0.748,407,0.733,414,0.797,418,1.029,422,1.49,457,0.879,461,1.533,465,0.686,470,1.883,471,4.601,483,1.668,512,1.314,546,0.895,555,1.105,563,0.783,568,3.546,615,0.974,626,1.226,659,2.087,690,3.323,751,0.864,820,1.433,832,1.105,842,1.226,889,1.105,908,1.026,921,1.98,943,0.814,1068,1.226,1072,0.931,1102,0.793,1103,0.864,1118,1.026,1124,1.327,1125,0.951,1128,1.105,1139,5.292,1147,0.826,1154,1.637,1232,1.029,1292,1.226,1298,1.226,1304,1.029,1314,1.157,1315,0.951,1320,3.73,1323,3.89,1333,0.912,1334,1.105,1351,0.531,1354,1.105,1355,2.021,1357,3.216,1359,1.064,1360,1.064,1368,1,1369,1.064,1370,1.105,1373,0.838,1393,2.021,1414,0.974,1415,3.286,1450,1.214,1521,4.836,1537,1.226,1613,2.528,1714,1.226,1718,1.105,1757,1.064,1776,0.864,1838,0.804,1843,4.519,1844,3.388,1859,3.452,1886,0.931,2200,1.226,2282,1.105,2364,1.703,2378,1.157,2508,1.226,2616,1.226,2732,1,2795,4.462,2796,2.242,2797,1.331,2798,1.331,2799,2.434,2800,2.434,2801,3.452,2802,1.157,2803,1.331,2804,1.331,2805,1.331,2806,1.331,2807,1.226,2808,1.331,2809,1.331,2810,1.226,2811,1.331,2812,3.364,2813,1.226,2814,1.331,2815,2.434,2816,1.331,2817,2.434,2818,2.434,2819,2.242,2820,1.331,2821,1.331,2822,1.226]],["component/58",[291,0.458]],["title/59-1",[4,29.876,71,28.09]],["name/59-1",[]],["text/59-1",[]],["component/59-1",[]],["title/59-2",[29,23.189,31,40.52,238,38.713]],["name/59-2",[]],["text/59-2",[]],["component/59-2",[]],["title/59-3",[71,28.09,1176,46.357]],["name/59-3",[]],["text/59-3",[]],["component/59-3",[]],["title/59-4",[71,28.09,1351,26.43]],["name/59-4",[]],["text/59-4",[]],["component/59-4",[]],["title/59",[4,29.876,436,41.728]],["name/59",[4,0.575,436,0.803]],["text/59",[2,0.95,4,3.423,9,1.138,11,1.268,15,1.155,16,2.274,18,0.434,22,1.29,26,0.851,29,1.501,30,2.179,31,2.996,36,0.451,39,0.471,44,0.541,47,0.484,52,1.318,53,1.413,66,1.006,67,0.43,69,1.279,71,3.6,74,1.645,88,1.816,91,0.397,116,1.062,124,0.863,127,0.719,128,1.443,131,1.33,134,4.503,162,0.781,177,0.458,195,1.096,198,0.44,203,0.592,207,0.878,208,0.489,223,1.135,236,1.007,238,2.11,240,0.418,245,1.953,247,1.831,253,0.603,259,0.583,266,0.761,273,1.847,275,0.878,278,0.878,281,0.44,283,1.135,291,0.845,301,1.671,310,1.645,342,1.006,344,0.657,370,0.51,388,0.565,399,0.412,405,0.504,414,0.783,461,0.565,472,0.674,480,3.183,512,0.911,529,1.483,563,1.407,577,2.779,585,0.779,659,0.556,756,0.592,864,1.708,875,1.39,890,0.603,905,1.613,938,1.796,1047,2.805,1048,1.135,1121,1.268,1123,1.033,1130,0.745,1142,1.579,1145,0.745,1147,2.539,1148,0.657,1175,1.349,1176,2.505,1190,1.257,1191,5.161,1236,0.674,1320,0.615,1351,1.817,1415,1.019,1439,1.671,1450,1.192,1457,0.603,1649,0.745,1658,0.745,1670,0.779,1732,0.745,1762,1.156,1772,0.779,1789,0.717,1827,0.657,1831,1.401,1836,1.156,1844,3.187,1862,0.694,1887,0.615,1997,0.779,2087,1.91,2088,1.708,2139,2.622,2142,0.694,2143,0.779,2147,0.826,2179,3.754,2225,0.674,2250,0.717,2257,0.826,2307,0.745,2366,0.674,2374,1.91,2391,3.271,2396,1.349,2400,2.622,2401,0.826,2404,0.826,2445,1.349,2472,0.615,2648,1.984,2689,1.305,2697,1.554,2823,0.745,2824,1.688,2825,1.688,2826,0.897,2827,0.826,2828,2.39,2829,0.897,2830,2.39,2831,0.826,2832,1.688,2833,1.688,2834,1.467,2835,2.201,2836,0.897,2837,0.897,2838,1.688,2839,1.688,2840,1.688,2841,4.575,2842,0.897,2843,0.897,2844,0.897,2845,1.688,2846,0.897,2847,0.897,2848,0.897,2849,0.897,2850,0.826,2851,1.688,2852,1.688,2853,1.688,2854,1.688,2855,1.688,2856,1.688,2857,1.688,2858,1.688,2859,1.688,2860,1.688,2861,1.688,2862,1.688,2863,1.688,2864,1.688,2865,1.688,2866,1.688,2867,1.688,2868,1.688,2869,1.688,2870,1.688,2871,1.688,2872,1.688,2873,1.688,2874,1.688,2875,1.688,2876,0.897,2877,0.897,2878,6.585,2879,0.826,2880,0.897,2881,0.826,2882,0.897,2883,1.554,2884,1.554,2885,1.688,2886,1.688,2887,1.688,2888,1.688,2889,0.745,2890,0.897,2891,1.688,2892,1.688,2893,1.688,2894,0.897,2895,1.688,2896,1.688,2897,1.688,2898,0.897,2899,0.897,2900,1.688,2901,1.688,2902,0.897,2903,0.897,2904,0.897,2905,0.897,2906,0.897]],["component/59",[291,0.458]],["title/60-1",[1229,57.762]],["name/60-1",[]],["text/60-1",[]],["component/60-1",[]],["title/60-2",[26,9.406,281,16.371,385,27.693,462,18.182,2383,27.693,2389,25.798,2390,27.693]],["name/60-2",[]],["text/60-2",[]],["component/60-2",[]],["title/60-3",[281,23.323,385,39.453,462,25.903,1882,31.953]],["name/60-3",[]],["text/60-3",[]],["component/60-3",[]],["title/60-4",[61,46.357,1882,44.571]],["name/60-4",[]],["text/60-4",[]],["component/60-4",[]],["title/60-5",[281,23.323,359,22,515,31.388,1882,31.953]],["name/60-5",[]],["text/60-5",[]],["component/60-5",[]],["title/60-6",[281,23.323,462,25.903,1609,33.233,1882,31.953]],["name/60-6",[]],["text/60-6",[]],["component/60-6",[]],["title/60-7",[61,38.713,1609,38.713,1882,37.222]],["name/60-7",[]],["text/60-7",[]],["component/60-7",[]],["title/60-8",[359,25.627,1609,38.713,1882,37.222]],["name/60-8",[]],["text/60-8",[]],["component/60-8",[]],["title/60-9",[150,35.437,2907,61.052]],["name/60-9",[]],["text/60-9",[]],["component/60-9",[]],["title/60",[281,32.533,462,36.132]],["name/60",[281,0.626,462,0.695]],["text/60",[2,2.758,4,0.754,6,0.37,9,3.147,12,0.517,13,0.447,14,0.598,15,2.91,16,1.857,17,2.337,18,0.43,22,1.28,26,1.505,29,3.478,30,1.28,31,3.623,33,1.895,47,0.48,49,0.56,52,0.388,53,0.66,61,2.095,63,2.696,67,1.138,69,3.016,71,1.919,74,2.909,86,0.511,91,1.797,112,0.895,113,1.171,114,0.436,116,1.886,117,0.587,118,0.848,127,2.275,131,4.525,134,1.691,140,0.587,145,0.841,147,2.34,148,0.523,150,2.173,162,2.635,172,1.396,177,1.212,185,1.01,199,0.511,206,2.045,207,2.574,208,0.912,212,0.5,221,0.587,226,1.867,227,0.467,236,1.908,240,0.78,247,4.614,251,0.688,266,0.401,268,0.773,271,1.01,274,1.566,276,0.609,277,0.903,278,1.85,281,2.619,282,0.895,283,3.044,294,0.523,301,1.171,306,0.42,310,0.912,329,0.773,333,1.808,342,2.12,359,1.098,361,0.773,376,2.095,399,1.09,404,0.568,405,0.5,406,1.379,434,3.249,457,0.587,461,0.56,462,0.912,471,0.636,503,1.451,515,1.566,519,1.147,529,1.038,546,1.125,597,0.688,602,0.609,613,0.523,615,0.651,616,0.636,639,1.256,645,1.979,659,0.552,693,0.738,697,0.711,716,0.773,739,0.711,758,0.668,777,0.467,789,0.636,804,0.577,835,2.487,845,0.598,865,0.609,883,0.668,890,0.598,896,0.668,908,0.375,1042,1.542,1082,1.54,1083,2.991,1123,2.176,1125,2.141,1131,1.413,1207,0.598,1220,0.587,1253,0.523,1255,2.014,1265,1.736,1267,0.711,1274,0.568,1275,0.819,1285,0.711,1346,1.295,1351,0.355,1375,2.141,1391,1.895,1415,2.454,1431,0.568,1617,0.711,1672,0.668,1762,2.438,1767,0.773,1776,1.087,1793,1.295,1836,1.147,1838,1.808,1841,0.738,1896,0.688,2014,2.603,2043,0.738,2057,3.269,2117,0.711,2179,0.622,2210,1.455,2276,0.773,2281,1.39,2340,0.819,2383,0.738,2389,0.688,2390,0.738,2391,2.843,2409,0.819,2456,0.819,2472,1.147,2489,0.819,2542,0.819,2617,0.819,2734,0.819,2907,2.759,2908,0.889,2909,0.889,2910,0.819,2911,0.889,2912,0.819,2913,0.889,2914,1.674,2915,1.674,2916,0.889,2917,0.889,2918,0.889,2919,0.819,2920,0.889,2921,0.819,2922,0.889,2923,0.889,2924,0.889,2925,1.674,2926,1.674,2927,1.674,2928,1.674,2929,1.674,2930,2.371,2931,2.995,2932,1.674,2933,1.674,2934,0.889,2935,0.889,2936,0.819,2937,0.668,2938,1.674,2939,0.889,2940,0.889,2941,0.819,2942,2.371,2943,1.674,2944,1.674,2945,0.889,2946,0.889,2947,0.889,2948,0.889,2949,0.889,2950,0.889,2951,0.889,2952,0.889,2953,0.889,2954,0.889,2955,0.889,2956,0.889,2957,0.889,2958,0.889,2959,0.889,2960,0.773,2961,0.889,2962,0.711]],["component/60",[291,0.458]],["title/61-1",[30,19.923,198,27.169,737,38.713]],["name/61-1",[]],["text/61-1",[]],["component/61-1",[]],["title/61-2",[30,17.103,198,23.323,737,33.233,2391,37.98]],["name/61-2",[]],["text/61-2",[]],["component/61-2",[]],["title/61-3",[30,17.103,198,23.323,737,33.233,1415,28.689]],["name/61-3",[]],["text/61-3",[]],["component/61-3",[]],["title/61-4",[198,32.533,2458,47.382]],["name/61-4",[]],["text/61-4",[]],["component/61-4",[]],["title/61-5",[30,19.923,198,27.169,308,31.467]],["name/61-5",[]],["text/61-5",[]],["component/61-5",[]],["title/61-6",[30,23.857,2432,43.052]],["name/61-6",[]],["text/61-6",[]],["component/61-6",[]],["title/61-7",[30,14.982,134,15.551,240,19.406,1082,27.037,1100,23.663]],["name/61-7",[]],["text/61-7",[]],["component/61-7",[]],["title/61-8",[2179,57.762]],["name/61-8",[]],["text/61-8",[]],["component/61-8",[]],["title/61-9",[82,49.802,198,32.533]],["name/61-9",[]],["text/61-9",[]],["component/61-9",[]],["title/61-10",[95,36.877,198,32.533]],["name/61-10",[]],["text/61-10",[]],["component/61-10",[]],["title/61-11",[95,30.796,480,35.382,2179,38.713]],["name/61-11",[]],["text/61-11",[]],["component/61-11",[]],["title/61-12",[5,38.713,88,28.058,167,30.796]],["name/61-12",[]],["text/61-12",[]],["component/61-12",[]],["title/61-13",[5,46.357,88,33.598]],["name/61-13",[]],["text/61-13",[]],["component/61-13",[]],["title/61-14",[88,28.058,95,30.796,259,35.953]],["name/61-14",[]],["text/61-14",[]],["component/61-14",[]],["title/61-15",[281,27.169,515,36.564,915,33.869]],["name/61-15",[]],["text/61-15",[]],["component/61-15",[]],["title/61-16",[131,26.437,247,24.29,281,23.323,515,31.388]],["name/61-16",[]],["text/61-16",[]],["component/61-16",[]],["title/61-17",[273,24.5,281,23.323,515,31.388,1862,36.754]],["name/61-17",[]],["text/61-17",[]],["component/61-17",[]],["title/61-18",[2,14.962,127,20.256,281,23.323,515,31.388]],["name/61-18",[]],["text/61-18",[]],["component/61-18",[]],["title/61-19",[18,20.121,114,20.431,1351,16.598,1415,25.131,1827,30.471]],["name/61-19",[]],["text/61-19",[]],["component/61-19",[]],["title/61",[30,19.923,198,27.169,480,35.382]],["name/61",[155,0.751,198,0.626]],["text/61",[0,0.556,2,1.684,4,1.036,5,2.373,6,1.649,7,1.676,9,1.419,12,0.195,15,1.998,16,2.443,17,1.457,18,1.826,20,0.4,22,1.368,24,0.395,25,0.195,26,1.166,27,0.633,28,0.448,29,0.86,30,2.576,31,0.702,32,1.773,33,0.999,34,0.533,36,0.168,38,0.353,39,0.176,47,0.181,50,0.179,52,1.301,53,0.81,63,1.135,66,0.39,67,0.314,69,1.601,71,1.352,72,0.799,74,2.435,75,0.217,81,1.12,83,0.163,87,0.267,88,0.911,91,1.318,92,0.685,93,0.613,94,1.493,95,0.364,96,0.267,98,0.545,100,0.214,104,0.174,107,0.199,109,0.259,112,0.35,113,2.641,114,0.614,115,0.533,116,1.739,117,0.432,122,0.467,127,0.875,128,0.395,131,2.202,132,0.568,133,0.406,134,4.135,135,0.657,142,0.202,145,0.482,147,0.591,148,0.385,150,0.513,152,0.234,155,0.197,159,0.376,161,0.579,162,0.95,167,0.364,170,0.278,172,0.736,173,0.564,177,0.171,182,0.195,184,0.372,185,1.667,187,0.211,188,0.184,189,0.745,191,0.259,196,0.72,197,0.993,198,3.041,205,0.267,206,0.719,207,1.866,208,0.523,212,0.368,213,0.44,214,0.278,219,0.179,221,0.221,226,1.077,227,1.206,231,0.425,232,0.457,235,0.291,236,0.644,240,0.713,244,0.174,245,0.356,247,3.328,249,0.308,253,1.028,259,3.201,266,1.036,267,0.239,270,0.999,273,1.947,274,1.187,275,0.499,277,0.181,278,1.196,279,0.205,280,0.217,281,2.559,282,1.355,283,0.645,284,0.72,285,0.479,294,0.385,298,0.229,302,0.86,308,0.711,310,0.182,318,0.564,333,0.923,338,0.202,342,0.199,344,0.245,346,0.479,354,0.163,359,0.708,362,0.702,365,0.685,366,0.558,369,0.278,370,0.869,375,0.217,376,0.457,384,0.425,391,0.508,392,0.499,399,0.441,405,0.539,406,0.195,407,0.184,410,0.291,413,0.239,423,0.251,434,0.267,441,0.234,452,0.291,454,0.267,459,0.308,461,0.787,462,0.834,465,0.494,466,0.225,472,1.542,474,0.229,480,4.879,484,1.087,486,0.221,493,0.234,503,0.765,507,0.291,515,1.187,519,0.657,522,0.278,541,0.874,542,0.479,543,0.766,563,0.564,575,0.245,584,0.217,597,0.506,602,0.448,604,0.229,607,0.188,612,0.645,613,0.9,615,0.915,616,0.467,639,0.346,645,0.696,650,0.491,659,0.406,677,0.259,697,0.999,722,0.568,735,0.211,737,0.457,748,0.251,751,0.217,758,0.251,759,1.333,766,0.267,777,0.176,831,0.259,833,0.883,835,3.432,864,0.239,866,0.259,872,0.766,875,0.889,880,0.267,890,0.645,901,0.467,905,0.668,908,0.141,915,0.936,921,0.197,932,0.245,940,0.308,941,0.291,1034,0.595,1047,0.229,1048,0.225,1059,0.766,1073,0.406,1080,0.278,1083,0.221,1101,0.245,1119,0.579,1122,0.36,1123,0.587,1131,1.646,1134,0.259,1144,0.939,1147,0.208,1148,0.702,1170,0.448,1174,0.278,1207,0.44,1261,1.038,1265,0.245,1272,1.503,1297,0.291,1341,0.259,1346,1.183,1351,1.272,1361,1.087,1368,1.727,1375,0.467,1391,0.267,1394,0.267,1407,0.259,1410,0.491,1415,1.926,1420,0.267,1431,0.418,1439,0.234,1441,2.336,1450,0.326,1503,0.234,1530,1.27,1551,0.259,1570,0.259,1595,2.4,1597,0.308,1606,0.702,1617,0.766,1636,0.543,1644,1.518,1645,3.924,1646,0.267,1649,0.796,1658,0.796,1659,1.655,1662,0.225,1691,0.239,1761,0.833,1776,0.217,1777,0.278,1782,0.833,1792,0.259,1796,0.479,1820,0.796,1827,1.503,1831,0.278,1838,0.202,1862,1.588,1883,0.229,1919,0.278,1926,0.543,1951,0.602,1997,0.568,2057,0.221,2063,0.523,2179,2.373,2183,0.308,2187,0.602,2210,1.784,2223,0.225,2287,0.259,2305,0.568,2307,0.278,2317,0.291,2350,0.467,2362,0.543,2364,0.671,2366,0.491,2369,0.291,2383,0.278,2384,1.409,2386,0.308,2387,0.308,2389,0.259,2390,0.278,2391,0.766,2400,0.291,2423,0.308,2424,0.308,2425,0.602,2428,0.308,2431,0.308,2432,0.623,2453,0.251,2458,1.467,2459,0.602,2468,0.291,2470,0.278,2507,0.602,2511,0.523,2614,0.291,2641,0.278,2648,0.543,2664,1.704,2689,2.136,2703,0.602,2727,0.267,2740,0.742,2741,0.308,2750,0.291,2757,0.602,2758,0.291,2772,0.308,2775,0.308,2777,0.291,2831,0.308,2878,0.883,2879,1.152,2881,0.308,2921,0.308,2962,0.267,2963,1.25,2964,0.335,2965,0.654,2966,0.654,2967,0.959,2968,0.654,2969,0.654,2970,0.959,2971,1.529,2972,1.529,2973,0.654,2974,0.654,2975,0.883,2976,0.654,2977,0.654,2978,0.335,2979,0.654,2980,1.529,2981,0.959,2982,0.654,2983,0.654,2984,1.409,2985,0.654,2986,0.335,2987,0.335,2988,0.654,2989,1.25,2990,1.25,2991,0.654,2992,0.654,2993,0.335,2994,0.335,2995,0.335,2996,0.335,2997,0.654,2998,1.25,2999,0.335,3000,1.25,3001,0.654,3002,0.959,3003,2.053,3004,0.654,3005,0.959,3006,0.335,3007,0.335,3008,0.335,3009,0.335,3010,0.308,3011,0.568,3012,0.959,3013,0.308,3014,0.335,3015,0.335,3016,0.278,3017,0.335,3018,0.335,3019,0.335,3020,0.335,3021,0.335,3022,0.335,3023,0.291,3024,0.959,3025,0.335,3026,0.308,3027,0.335,3028,0.654,3029,0.335,3030,0.335,3031,0.291,3032,0.335,3033,0.335,3034,0.335,3035,0.308,3036,0.335,3037,0.335,3038,0.959,3039,0.335,3040,0.335,3041,0.335,3042,0.335,3043,0.335,3044,0.654,3045,2.053,3046,0.335,3047,0.654,3048,0.335,3049,0.308,3050,0.335,3051,0.291,3052,0.335,3053,0.335,3054,0.335,3055,0.335,3056,0.335,3057,0.335,3058,0.335,3059,0.335,3060,0.335,3061,0.335,3062,0.335,3063,0.335,3064,0.335,3065,0.308,3066,0.291,3067,0.335,3068,0.335,3069,0.335,3070,0.335,3071,0.335,3072,0.335,3073,0.335,3074,0.308,3075,0.568,3076,0.654,3077,0.291]],["component/61",[291,0.458]],["title/62-1",[16,21.703,18,22.969,134,17.752,273,24.5]],["name/62-1",[]],["text/62-1",[]],["component/62-1",[]],["title/62-2",[16,19.012,18,20.121,134,15.551,273,21.462,436,26.206]],["name/62-2",[]],["text/62-2",[]],["component/62-2",[]],["title/62-3",[16,19.012,18,20.121,71,17.641,134,15.551,273,21.462]],["name/62-3",[]],["text/62-3",[]],["component/62-3",[]],["title/62-4",[16,21.703,18,22.969,134,17.752,273,24.5]],["name/62-4",[]],["text/62-4",[]],["component/62-4",[]],["title/62-5",[16,19.012,18,20.121,134,15.551,273,21.462,1770,30.471]],["name/62-5",[]],["text/62-5",[]],["component/62-5",[]],["title/62-6",[16,19.012,18,20.121,134,15.551,198,20.431,273,21.462]],["name/62-6",[]],["text/62-6",[]],["component/62-6",[]],["title/62-7",[16,21.703,18,22.969,134,17.752,436,29.915]],["name/62-7",[]],["text/62-7",[]],["component/62-7",[]],["title/62-8",[16,21.703,18,22.969,71,20.138,134,17.752]],["name/62-8",[]],["text/62-8",[]],["component/62-8",[]],["title/62-9",[16,25.282,30,19.923,1169,37.222]],["name/62-9",[]],["text/62-9",[]],["component/62-9",[]],["title/62-10",[226,34.787,227,34.787]],["name/62-10",[]],["text/62-10",[]],["component/62-10",[]],["title/62",[16,21.703,18,22.969,155,27.972,273,24.5]],["name/62",[155,0.751,273,0.658]],["text/62",[0,0.766,2,2.732,3,0.347,4,0.776,6,0.92,7,0.673,12,0.363,14,0.805,15,0.833,16,4.582,17,0.688,18,4.287,20,0.382,21,0.351,22,2.246,26,2.061,27,4.121,29,0.925,30,2.631,34,0.347,38,0.93,42,1.069,44,1.333,50,0.334,51,1.255,52,1.16,53,1.642,56,2.026,59,0.42,60,0.363,62,0.722,63,1.19,69,1.898,71,2.254,81,0.583,83,0.304,86,0.359,88,1.119,91,1.53,94,0.406,95,0.347,98,0.979,103,1.158,107,0.372,113,0.437,114,0.587,115,0.958,116,2.819,117,0.412,123,0.377,128,1.604,131,0.958,134,2.545,141,0.334,142,0.722,144,1.346,145,0.601,150,1.18,152,0.437,155,1.809,161,0.377,162,0.289,173,0.368,177,0.612,181,0.483,182,1.002,184,0.355,185,0.377,188,0.344,197,0.406,198,1.876,199,0.359,206,0.688,208,0.652,212,0.351,215,0.399,221,0.412,224,0.469,236,1.611,240,1.94,241,0.437,244,0.325,245,0.652,247,1.358,256,0.428,259,0.777,263,0.399,264,0.82,266,1.385,271,0.722,273,5.56,274,1.138,275,0.325,277,0.646,278,0.325,279,1.054,281,0.306,306,0.566,307,0.412,309,0.457,310,0.939,312,0.387,314,0.412,331,0.855,333,0.722,342,0.372,354,0.583,359,0.554,365,0.855,366,0.363,370,0.355,391,0.331,392,0.896,394,0.518,405,0.351,406,0.363,414,1.901,415,1.04,419,0.446,424,0.575,436,1.672,441,0.437,457,0.412,466,0.42,472,0.469,474,0.428,480,0.765,486,0.412,490,1.377,494,0.622,512,0.337,514,0.469,523,0.575,542,0.457,570,0.543,593,0.518,602,1.18,607,0.351,611,0.399,639,0.331,652,0.457,667,0.82,676,1.43,677,0.483,678,0.446,683,0.399,699,0.457,704,0.575,735,0.753,744,0.469,751,0.406,756,1.138,767,0.469,777,2.35,830,0.499,836,0.499,839,0.499,840,0.543,857,0.382,864,1.231,881,0.437,890,1.158,908,1.611,920,0.446,1027,0.956,1034,0.742,1053,0.753,1073,0.387,1083,0.412,1098,0.42,1100,0.355,1109,0.499,1118,0.263,1123,2.117,1125,0.446,1131,1.316,1166,0.499,1167,0.499,1168,1.43,1169,2.57,1170,0.82,1171,1.261,1180,0.377,1191,0.437,1237,0.412,1243,0.575,1253,0.704,1272,0.876,1274,0.399,1320,0.428,1351,0.477,1393,0.518,1407,0.483,1414,0.457,1415,1.333,1416,0.575,1428,0.499,1431,0.765,1450,0.597,1482,0.518,1488,0.483,1501,0.499,1503,0.437,1556,0.753,1606,0.457,1615,0.543,1621,0.518,1622,0.925,1627,0.899,1644,0.412,1645,0.925,1667,0.956,1687,1.316,1709,0.372,1727,0.42,1741,0.575,1755,0.518,1758,0.543,1759,0.575,1770,1.944,1771,0.575,1776,0.406,1777,0.993,1779,0.956,1784,0.518,1788,0.483,1789,3.055,1793,0.925,1820,0.993,1821,1.04,1825,0.575,1827,2.798,1838,1.333,1844,0.437,1846,1.04,1862,1.707,1871,1.102,1874,1.04,1879,0.469,2043,0.518,2054,0.543,2057,0.412,2134,0.575,2156,0.446,2225,0.469,2250,0.499,2299,0.543,2364,1.205,2407,0.925,2458,0.855,2472,0.428,2486,1.659,2524,0.575,2650,1.102,2728,0.469,2740,0.483,2747,0.499,2770,0.575,2776,0.543,2807,0.575,2810,0.575,2962,0.499,2984,1.102,3010,1.586,3051,0.543,3066,1.04,3075,0.543,3077,1.918,3078,1.196,3079,0.624,3080,2.033,3081,1.196,3082,0.624,3083,0.624,3084,0.575,3085,0.624,3086,0.575,3087,0.624,3088,0.624,3089,0.575,3090,0.624,3091,0.624,3092,0.624,3093,1.04,3094,0.575,3095,0.483,3096,1.196,3097,1.586,3098,1.586,3099,1.196,3100,1.497,3101,0.543,3102,0.575,3103,2.207,3104,0.624,3105,0.624,3106,1.196,3107,0.624,3108,0.624,3109,0.624,3110,0.543,3111,0.543,3112,0.624,3113,3.188,3114,0.624,3115,1.196,3116,0.518,3117,1.04,3118,0.624,3119,0.624,3120,0.575,3121,1.102]],["component/62",[291,0.458]],["title/63-1",[16,25.282,36,27.827,414,18.133]],["name/63-1",[]],["text/63-1",[]],["component/63-1",[]],["title/63-2",[3111,71.78]],["name/63-2",[]],["text/63-2",[]],["component/63-2",[]],["title/63-3",[1190,34.403]],["name/63-3",[]],["text/63-3",[]],["component/63-3",[]],["title/63-4",[29,27.768,1799,36.877]],["name/63-4",[]],["text/63-4",[]],["component/63-4",[]],["title/63-5",[908,34.799]],["name/63-5",[]],["text/63-5",[]],["component/63-5",[]],["title/63-6",[1118,34.799]],["name/63-6",[]],["text/63-6",[]],["component/63-6",[]],["title/63-7",[1351,26.43,1450,33.052]],["name/63-7",[]],["text/63-7",[]],["component/63-7",[]],["title/63-8",[121,29.876,414,21.714]],["name/63-8",[]],["text/63-8",[]],["component/63-8",[]],["title/63-9",[3093,71.78]],["name/63-9",[]],["text/63-9",[]],["component/63-9",[]],["title/63-10",[1190,34.403]],["name/63-10",[]],["text/63-10",[]],["component/63-10",[]],["title/63-11",[29,27.768,1799,36.877]],["name/63-11",[]],["text/63-11",[]],["component/63-11",[]],["title/63-12",[908,34.799]],["name/63-12",[]],["text/63-12",[]],["component/63-12",[]],["title/63-13",[1118,34.799]],["name/63-13",[]],["text/63-13",[]],["component/63-13",[]],["title/63-14",[1351,26.43,1450,33.052]],["name/63-14",[]],["text/63-14",[]],["component/63-14",[]],["title/63-15",[121,29.876,414,21.714]],["name/63-15",[]],["text/63-15",[]],["component/63-15",[]],["title/63-16",[3122,76.073]],["name/63-16",[]],["text/63-16",[]],["component/63-16",[]],["title/63-17",[1190,34.403]],["name/63-17",[]],["text/63-17",[]],["component/63-17",[]],["title/63-18",[29,27.768,1799,36.877]],["name/63-18",[]],["text/63-18",[]],["component/63-18",[]],["title/63-19",[908,34.799]],["name/63-19",[]],["text/63-19",[]],["component/63-19",[]],["title/63-20",[1118,34.799]],["name/63-20",[]],["text/63-20",[]],["component/63-20",[]],["title/63-21",[121,29.876,414,21.714]],["name/63-21",[]],["text/63-21",[]],["component/63-21",[]],["title/63-22",[3123,76.073]],["name/63-22",[]],["text/63-22",[]],["component/63-22",[]],["title/63-23",[1190,34.403]],["name/63-23",[]],["text/63-23",[]],["component/63-23",[]],["title/63-24",[29,27.768,1799,36.877]],["name/63-24",[]],["text/63-24",[]],["component/63-24",[]],["title/63-25",[908,34.799]],["name/63-25",[]],["text/63-25",[]],["component/63-25",[]],["title/63-26",[1118,34.799]],["name/63-26",[]],["text/63-26",[]],["component/63-26",[]],["title/63-27",[121,29.876,414,21.714]],["name/63-27",[]],["text/63-27",[]],["component/63-27",[]],["title/63-28",[3124,76.073]],["name/63-28",[]],["text/63-28",[]],["component/63-28",[]],["title/63-29",[1190,34.403]],["name/63-29",[]],["text/63-29",[]],["component/63-29",[]],["title/63-30",[29,27.768,1799,36.877]],["name/63-30",[]],["text/63-30",[]],["component/63-30",[]],["title/63-31",[908,34.799]],["name/63-31",[]],["text/63-31",[]],["component/63-31",[]],["title/63-32",[1118,34.799]],["name/63-32",[]],["text/63-32",[]],["component/63-32",[]],["title/63-33",[121,29.876,414,21.714]],["name/63-33",[]],["text/63-33",[]],["component/63-33",[]],["title/63-34",[3125,76.073]],["name/63-34",[]],["text/63-34",[]],["component/63-34",[]],["title/63-35",[1190,34.403]],["name/63-35",[]],["text/63-35",[]],["component/63-35",[]],["title/63-36",[29,27.768,1799,36.877]],["name/63-36",[]],["text/63-36",[]],["component/63-36",[]],["title/63-37",[908,34.799]],["name/63-37",[]],["text/63-37",[]],["component/63-37",[]],["title/63-38",[1118,34.799]],["name/63-38",[]],["text/63-38",[]],["component/63-38",[]],["title/63-39",[121,29.876,414,21.714]],["name/63-39",[]],["text/63-39",[]],["component/63-39",[]],["title/63-40",[3126,76.073]],["name/63-40",[]],["text/63-40",[]],["component/63-40",[]],["title/63-41",[1190,34.403]],["name/63-41",[]],["text/63-41",[]],["component/63-41",[]],["title/63-42",[29,27.768,1799,36.877]],["name/63-42",[]],["text/63-42",[]],["component/63-42",[]],["title/63-43",[908,34.799]],["name/63-43",[]],["text/63-43",[]],["component/63-43",[]],["title/63-44",[1118,34.799]],["name/63-44",[]],["text/63-44",[]],["component/63-44",[]],["title/63-45",[121,29.876,414,21.714]],["name/63-45",[]],["text/63-45",[]],["component/63-45",[]],["title/63-46",[3127,76.073]],["name/63-46",[]],["text/63-46",[]],["component/63-46",[]],["title/63-47",[1190,34.403]],["name/63-47",[]],["text/63-47",[]],["component/63-47",[]],["title/63-48",[29,27.768,1799,36.877]],["name/63-48",[]],["text/63-48",[]],["component/63-48",[]],["title/63-49",[908,34.799]],["name/63-49",[]],["text/63-49",[]],["component/63-49",[]],["title/63-50",[1118,34.799]],["name/63-50",[]],["text/63-50",[]],["component/63-50",[]],["title/63-51",[121,29.876,414,21.714]],["name/63-51",[]],["text/63-51",[]],["component/63-51",[]],["title/63-52",[3100,71.78]],["name/63-52",[]],["text/63-52",[]],["component/63-52",[]],["title/63-53",[1190,34.403]],["name/63-53",[]],["text/63-53",[]],["component/63-53",[]],["title/63-54",[29,27.768,1799,36.877]],["name/63-54",[]],["text/63-54",[]],["component/63-54",[]],["title/63-55",[908,34.799]],["name/63-55",[]],["text/63-55",[]],["component/63-55",[]],["title/63-56",[1118,34.799]],["name/63-56",[]],["text/63-56",[]],["component/63-56",[]],["title/63-57",[1351,26.43,1450,33.052]],["name/63-57",[]],["text/63-57",[]],["component/63-57",[]],["title/63-58",[121,29.876,414,21.714]],["name/63-58",[]],["text/63-58",[]],["component/63-58",[]],["title/63-59",[3110,71.78]],["name/63-59",[]],["text/63-59",[]],["component/63-59",[]],["title/63-60",[1190,34.403]],["name/63-60",[]],["text/63-60",[]],["component/63-60",[]],["title/63-61",[29,27.768,1799,36.877]],["name/63-61",[]],["text/63-61",[]],["component/63-61",[]],["title/63-62",[908,34.799]],["name/63-62",[]],["text/63-62",[]],["component/63-62",[]],["title/63-63",[1118,34.799]],["name/63-63",[]],["text/63-63",[]],["component/63-63",[]],["title/63-64",[1351,26.43,1450,33.052]],["name/63-64",[]],["text/63-64",[]],["component/63-64",[]],["title/63-65",[121,29.876,414,21.714]],["name/63-65",[]],["text/63-65",[]],["component/63-65",[]],["title/63-66",[16,25.282,36,27.827,1351,22.072]],["name/63-66",[]],["text/63-66",[]],["component/63-66",[]],["title/63-67",[3128,76.073]],["name/63-67",[]],["text/63-67",[]],["component/63-67",[]],["title/63-68",[1190,34.403]],["name/63-68",[]],["text/63-68",[]],["component/63-68",[]],["title/63-69",[1351,26.43,1823,47.382]],["name/63-69",[]],["text/63-69",[]],["component/63-69",[]],["title/63-70",[121,29.876,1351,26.43]],["name/63-70",[]],["text/63-70",[]],["component/63-70",[]],["title/63-71",[3129,76.073]],["name/63-71",[]],["text/63-71",[]],["component/63-71",[]],["title/63-72",[1190,34.403]],["name/63-72",[]],["text/63-72",[]],["component/63-72",[]],["title/63-73",[1351,26.43,1823,47.382]],["name/63-73",[]],["text/63-73",[]],["component/63-73",[]],["title/63-74",[121,29.876,1351,26.43]],["name/63-74",[]],["text/63-74",[]],["component/63-74",[]],["title/63-75",[3130,76.073]],["name/63-75",[]],["text/63-75",[]],["component/63-75",[]],["title/63-76",[1190,34.403]],["name/63-76",[]],["text/63-76",[]],["component/63-76",[]],["title/63-77",[1351,26.43,1823,47.382]],["name/63-77",[]],["text/63-77",[]],["component/63-77",[]],["title/63-78",[121,29.876,1351,26.43]],["name/63-78",[]],["text/63-78",[]],["component/63-78",[]],["title/63-79",[3131,76.073]],["name/63-79",[]],["text/63-79",[]],["component/63-79",[]],["title/63-80",[1190,34.403]],["name/63-80",[]],["text/63-80",[]],["component/63-80",[]],["title/63-81",[1351,26.43,1823,47.382]],["name/63-81",[]],["text/63-81",[]],["component/63-81",[]],["title/63-82",[121,29.876,1351,26.43]],["name/63-82",[]],["text/63-82",[]],["component/63-82",[]],["title/63",[36,23.888,273,24.5,414,15.566,1351,18.948]],["name/63",[36,0.641,273,0.658]],["text/63",[2,3.161,4,0.771,15,1.17,16,3.059,18,4.341,26,0.683,30,0.328,39,1.603,45,1.129,47,0.491,52,0.397,56,3.51,63,0.408,66,1.02,67,0.437,69,1.295,71,2.589,74,0.496,77,1.628,81,0.443,87,0.728,91,0.402,115,2.303,116,1.923,134,0.639,145,0.458,150,0.487,155,1.007,162,0.792,172,1.007,177,0.875,182,1.777,193,0.512,198,2.26,212,0.962,223,0.612,236,3.133,245,0.933,259,0.591,273,5.992,282,0.487,292,0.523,294,1.425,301,4.272,306,0.43,310,1.32,331,1.223,370,2.06,414,3.316,422,0.557,462,1.32,465,0.469,613,2.711,699,0.666,757,2.484,775,0.582,777,1.603,864,2.184,875,0.529,908,1.287,1118,2.284,1123,4.409,1135,3.46,1147,1.062,1154,0.612,1170,2.836,1171,3.03,1190,0.713,1255,1.151,1351,2.67,1392,0.704,1415,1.845,1439,1.197,1450,1.523,1662,1.151,1710,0.756,1770,5.095,1778,1.368,1793,7.765,1818,1.487,1821,0.791,1822,3.597,1827,5.443,1831,1.421,1839,0.838,1893,0.666,2022,0.756,2142,1.324,2149,1.576,2486,3.11,2689,1.324,3065,0.838,3075,0.791,3093,2.104,3094,5.626,3097,3.339,3098,4.242,3100,2.104,3110,3.15,3111,2.655,3122,1.576,3123,1.576,3124,1.576,3125,1.576,3126,1.576,3127,3.339,3128,2.23,3129,2.23,3130,2.23,3131,2.23,3132,0.91,3133,0.91,3134,0.91,3135,0.91,3136,4.606,3137,6.414,3138,0.91,3139,0.91,3140,0.791,3141,3.055]],["component/63",[291,0.458]],["title/64-1",[30,23.857,103,44.571]],["name/64-1",[]],["text/64-1",[]],["component/64-1",[]],["title/64-2",[29,27.768,406,38.552]],["name/64-2",[]],["text/64-2",[]],["component/64-2",[]],["title/64-3",[22,44.581]],["name/64-3",[]],["text/64-3",[]],["component/64-3",[]],["title/64-4",[20,50.535]],["name/64-4",[]],["text/64-4",[]],["component/64-4",[]],["title/64-5",[20,22.66,22,19.99,78,23.672,209,22.66,3142,37.034,3143,37.034]],["name/64-5",[]],["text/64-5",[]],["component/64-5",[]],["title/64-6",[13,41.519]],["name/64-6",[]],["text/64-6",[]],["component/64-6",[]],["title/64-7",[13,27.827,30,19.923,2764,41.59]],["name/64-7",[]],["text/64-7",[]],["component/64-7",[]],["title/64-8",[13,23.888,18,22.969,154,37.98,622,35.703]],["name/64-8",[]],["text/64-8",[]],["component/64-8",[]],["title/64-9",[13,20.926,16,19.012,93,26.608,118,21.1,185,25.131]],["name/64-9",[]],["text/64-9",[]],["component/64-9",[]],["title/64",[26,15.609,57,30.479,300,34.848]],["name/64",[26,0.249,57,0.487,300,0.557]],["text/64",[2,0.394,3,0.696,4,2.89,6,0.749,7,0.368,8,0.449,13,3.839,14,0.842,15,0.605,16,1.459,18,0.869,20,3.923,21,0.704,22,4.543,25,0.728,26,1.618,29,2.686,30,3.403,32,0.458,34,0.696,37,0.968,38,0.353,39,0.344,41,0.432,44,0.395,45,0.584,47,0.353,48,2.077,49,1.132,50,0.961,51,0.372,52,0.286,53,1.417,57,0.99,60,0.728,63,0.293,66,1.072,67,0.601,69,0.53,73,0.449,77,0.842,78,0.418,81,2.098,86,0.72,88,0.634,90,0.449,91,0.289,93,0.418,95,0.696,98,1.022,99,0.523,100,0.8,103,0.44,104,1.661,105,0.523,107,0.746,108,0.569,109,2.138,115,0.364,116,1.449,117,0.432,118,3.25,123,0.395,131,0.364,137,0.712,140,0.432,141,4.002,144,0.332,145,0.629,147,0.592,148,0.737,149,0.44,150,3.314,152,0.875,153,0.543,154,1.437,155,0.737,156,0.543,161,0.395,163,0.971,167,0.364,168,0.543,169,0.479,171,1.836,172,0.737,173,1.88,174,0.543,176,0.777,177,0.64,179,0.468,181,0.968,182,2.089,184,2.449,185,4.424,186,0.479,188,1.267,189,0.746,201,0.543,204,0.506,206,0.376,207,1.438,208,0.357,209,0.401,212,0.368,217,0.523,219,0.961,227,0.344,228,1.23,231,1.168,235,1.563,239,0.479,241,2.233,242,0.875,244,0.935,246,1.28,247,1.632,251,3.064,252,1.168,255,0.543,263,0.418,266,1.246,275,0.651,277,0.353,281,0.321,282,0.35,291,0.231,298,0.449,302,0.368,306,1.307,314,0.432,315,0.432,320,0.44,321,0.479,370,1.308,393,0.968,396,1.316,404,0.418,406,1.608,407,3.748,414,0.214,419,0.468,420,1.316,422,0.401,425,1.153,430,0.968,432,1.656,440,0.569,445,0.603,446,0.968,448,0.569,460,0.669,462,0.357,465,1.647,467,0.569,468,0.569,476,0.492,481,0.479,486,0.827,489,0.523,494,0.34,497,0.376,506,0.468,512,0.676,518,1.039,543,0.523,547,2.21,557,0.458,563,0.385,603,0.569,611,0.418,617,0.569,619,0.372,622,1.729,629,0.523,630,0.479,639,1.691,644,0.506,664,1.039,665,0.569,667,0.449,683,0.418,706,0.543,725,0.569,733,0.479,734,0.412,736,2.778,745,0.603,746,0.479,747,1.547,748,0.94,751,0.425,758,1.729,765,0.523,772,0.603,774,0.523,777,0.344,787,0.543,792,0.569,793,1.493,801,0.569,802,0.858,807,0.425,812,0.523,819,1.78,820,0.737,822,1.577,824,0.406,825,0.492,845,0.842,846,0.543,851,1.493,856,0.506,857,0.766,866,0.968,869,0.543,882,0.569,888,0.479,890,0.44,896,0.492,901,0.895,915,1.1,924,0.603,933,0.569,938,0.492,1053,1.132,1066,1.684,1074,0.603,1087,0.418,1105,1.351,1112,0.492,1131,0.39,1147,0.406,1166,0.523,1180,0.395,1187,0.492,1189,0.506,1190,0.273,1222,1.729,1228,1.258,1253,0.385,1297,0.569,1326,0.94,1341,0.968,1402,1.039,1410,0.94,1414,0.479,1431,0.418,1439,0.875,1440,0.94,1451,0.603,1456,0.468,1469,0.569,1496,0.523,1551,0.968,1568,1.493,1628,0.543,1665,1.088,1682,0.492,1683,0.569,1758,0.569,1776,0.425,1784,0.543,1792,0.506,1837,0.492,1841,0.543,1868,0.543,1883,0.449,1893,0.916,1952,0.603,2010,0.603,2037,0.569,2054,0.569,2130,0.603,2192,0.603,2258,3.121,2273,0.543,2282,0.543,2283,0.543,2287,0.506,2297,0.523,2342,0.569,2350,0.468,2462,0.569,2467,0.603,2485,0.523,2491,0.603,2610,1.91,2764,1.351,2771,1.039,2773,0.569,3080,1.153,3140,0.569,3144,0.655,3145,0.655,3146,1.252,3147,1.252,3148,0.655,3149,0.655,3150,0.655,3151,2.775,3152,3.592,3153,0.655,3154,0.655,3155,0.655,3156,0.655,3157,0.655,3158,0.655,3159,0.655,3160,0.655,3161,0.655,3162,0.655,3163,1.252,3164,2.301,3165,0.655,3166,0.655,3167,0.655,3168,0.655,3169,0.655,3170,0.655,3171,0.655,3172,0.655,3173,0.655,3174,0.655,3175,0.655,3176,0.655,3177,0.655,3178,1.252,3179,0.655,3180,1.252,3181,0.655,3182,0.655,3183,0.655,3184,0.603,3185,0.655,3186,0.655,3187,0.655,3188,0.655,3189,0.603,3190,0.655,3191,0.603,3192,1.153,3193,0.655,3194,0.655,3195,0.655,3196,0.655,3197,0.655,3198,0.655,3199,0.655,3200,0.655,3201,0.655]],["component/64",[291,0.458]],["title/65-1",[29,23.189,147,26.173,265,40.52]],["name/65-1",[]],["text/65-1",[]],["component/65-1",[]],["title/65-2",[29,27.768,238,46.357]],["name/65-2",[]],["text/65-2",[]],["component/65-2",[]],["title/65-3",[2,20.87,2088,47.382]],["name/65-3",[]],["text/65-3",[]],["component/65-3",[]],["title/65-4",[9,31.569,2088,47.382]],["name/65-4",[]],["text/65-4",[]],["component/65-4",[]],["title/65-5",[938,41.59,2087,44.243,2088,39.569]],["name/65-5",[]],["text/65-5",[]],["component/65-5",[]],["title/65-6",[13,41.519]],["name/65-6",[]],["text/65-6",[]],["component/65-6",[]],["title/65-7",[1048,44.571,2088,47.382]],["name/65-7",[]],["text/65-7",[]],["component/65-7",[]],["title/65-8",[13,23.888,101,41.298,121,21.418,2088,33.968]],["name/65-8",[]],["text/65-8",[]],["component/65-8",[]],["title/65-9",[359,30.687,2088,47.382]],["name/65-9",[]],["text/65-9",[]],["component/65-9",[]],["title/65-10",[48,49.802,236,27.928]],["name/65-10",[]],["text/65-10",[]],["component/65-10",[]],["title/65-11",[236,27.928,1501,52.978]],["name/65-11",[]],["text/65-11",[]],["component/65-11",[]],["title/65-12",[236,27.928,3202,61.052]],["name/65-12",[]],["text/65-12",[]],["component/65-12",[]],["title/65",[26,18.691,29,27.768]],["name/65",[26,0.36,29,0.534]],["text/65",[0,0.267,2,2.304,4,1.962,6,1.239,9,3.337,10,0.345,13,3.064,15,2.845,16,0.274,17,2.132,20,0.367,24,1.796,25,0.67,26,0.468,28,0.412,29,2.793,30,1.455,37,0.464,39,1.119,48,0.866,52,0.262,53,1.014,56,0.561,57,0.331,63,1.333,66,0.358,67,0.797,69,1.572,70,0.373,71,3.101,72,1.062,74,1.622,75,1.933,80,1.323,81,0.809,88,0.304,90,0.412,91,0.51,92,0.429,94,0.749,98,0.655,104,0.312,106,0.499,111,0.921,112,3.146,114,0.295,115,0.924,116,0.378,117,0.397,121,0.749,122,0.429,123,0.363,127,0.708,128,1.796,131,2.248,134,4.293,135,0.412,142,0.696,144,0.304,145,0.302,147,0.545,148,0.353,150,0.321,158,0.522,159,0.345,162,2.822,163,0.622,172,0.353,175,0.404,177,0.307,183,0.373,185,0.696,188,0.331,194,0.44,207,0.864,208,0.628,210,0.451,211,0.775,212,1.199,213,2.256,228,0.616,232,0.42,236,2.288,238,2.826,240,0.28,244,0.864,247,0.589,253,0.404,260,0.412,265,0.44,266,0.271,271,1.287,274,0.397,277,1.387,278,0.864,279,0.367,281,0.566,282,1.591,283,2.717,284,0.451,290,0.412,291,1.643,294,0.353,306,0.545,310,4.76,312,0.373,331,0.824,333,1.551,335,0.957,352,4.663,354,0.561,359,0.278,362,1.216,365,0.824,366,1.494,406,0.966,414,1.215,423,0.451,436,1.046,461,0.378,464,0.48,486,0.397,490,0.48,494,0.312,496,0.715,503,0.367,507,2.586,519,0.412,539,0.464,555,0.499,563,0.353,567,0.957,593,0.499,624,0.44,639,0.61,645,0.641,700,0.451,731,1.216,747,0.404,751,0.39,756,1.097,773,0.553,777,0.315,852,0.499,883,0.451,897,0.464,905,1.794,906,1.002,912,0.404,920,2.398,921,0.353,938,3.271,1047,0.79,1048,1.117,1066,0.844,1100,0.341,1123,1.305,1124,0.327,1128,0.499,1131,0.358,1134,0.464,1142,0.761,1145,0.957,1147,1.031,1169,0.404,1183,2.302,1190,0.25,1191,2.594,1207,0.404,1220,0.761,1237,0.761,1274,0.384,1284,2.916,1300,1.248,1315,0.429,1323,0.824,1401,0.522,1482,0.499,1501,1.328,1503,0.42,1530,0.499,1642,2.133,1732,1.379,1762,1.461,1794,0.48,1939,0.553,2035,0.522,2057,1.408,2087,3.23,2088,4.89,2139,1.444,2143,1.002,2156,0.824,2225,0.866,2272,0.553,2276,1.002,2329,1.061,2342,0.522,2350,1.837,2366,3.491,2373,0.522,2407,0.891,2448,0.48,2648,0.499,2689,1.285,2696,1.061,2702,1.964,2709,1.061,2722,0.499,2735,0.522,2779,0.553,2819,0.553,2834,1.853,2835,2.741,2962,0.48,2975,2.741,3023,1.853,3026,0.553,3095,0.464,3202,1.53,3203,2.132,3204,2.569,3205,0.601,3206,0.601,3207,0.601,3208,0.601,3209,2.132,3210,1.152,3211,1.152,3212,1.152,3213,0.601,3214,2.132,3215,1.152,3216,1.152,3217,1.061,3218,2.132,3219,1.661,3220,0.601,3221,0.601,3222,0.601,3223,0.601,3224,1.152,3225,0.601,3226,0.601,3227,0.601,3228,1.661,3229,1.152,3230,1.152,3231,0.553,3232,1.152,3233,1.152,3234,1.152,3235,1.152,3236,1.152,3237,1.152,3238,0.601,3239,0.601,3240,0.601,3241,0.601,3242,0.553,3243,0.601,3244,0.601,3245,0.601,3246,0.601,3247,0.601,3248,0.601,3249,0.601,3250,0.553,3251,0.553,3252,0.601,3253,0.601]],["component/65",[291,0.458]],["title/66-1",[30,23.857,103,44.571]],["name/66-1",[]],["text/66-1",[]],["component/66-1",[]],["title/66-2",[30,23.857,1085,43.783]],["name/66-2",[]],["text/66-2",[]],["component/66-2",[]],["title/66-3",[29,19.907,30,17.103,223,31.953,2620,41.298]],["name/66-3",[]],["text/66-3",[]],["component/66-3",[]],["title/66-4",[30,23.857,1176,46.357]],["name/66-4",[]],["text/66-4",[]],["component/66-4",[]],["title/66",[30,23.857,1189,51.268]],["name/66",[30,0.318,1296,0.769,3254,0.885]],["text/66",[0,1.241,4,2.528,5,0.748,6,0.446,7,1.119,15,0.517,16,2.131,18,0.517,20,0.655,21,0.602,22,3.246,26,0.302,29,1.463,30,4.159,31,0.783,34,1.552,38,1.074,49,0.673,53,1.101,60,0.622,69,1.977,71,1.182,74,0.583,77,0.719,80,0.664,81,4.119,86,1.144,88,0.542,91,2.822,93,0.684,95,0.595,98,0.608,103,0.719,104,1.035,115,0.595,116,0.673,118,3.964,123,1.684,134,3.842,137,1.586,142,0.646,145,1,147,0.506,150,0.572,162,1.617,169,0.783,177,0.547,178,2.392,182,2.031,184,0.608,185,1.684,186,0.783,189,0.638,198,2.534,199,0.615,207,0.556,208,0.583,219,1.492,222,1.73,223,4.044,227,1.833,228,0.572,231,0.695,245,0.583,247,0.547,252,0.695,260,0.733,266,0.482,267,1.423,273,1.439,275,1.816,278,1.035,279,1.707,280,1.293,281,1.369,282,0.572,302,1.119,306,0.941,308,0.608,329,0.93,359,0.495,369,0.888,384,0.695,399,0.915,414,0.914,456,1.364,466,0.719,472,0.804,486,1.315,512,0.577,529,0.664,549,0.888,575,0.783,607,0.602,611,0.684,628,0.985,645,1.552,667,3.537,710,0.985,733,4.106,737,0.748,759,1.293,766,1.591,777,1.044,778,0.985,822,0.733,836,0.855,853,0.888,864,1.423,876,0.673,880,0.855,881,1.392,883,1.495,905,0.572,1073,3.203,1078,0.985,1085,4.216,1120,1.833,1121,1.495,1122,0.589,1123,1.218,1131,1.186,1148,0.783,1154,1.876,1167,2.791,1168,0.888,1175,1.591,1176,1.951,1184,0.985,1185,0.93,1186,2.624,1187,1.495,1188,0.985,1189,0.827,1235,0.855,1237,0.707,1253,0.63,1291,1.457,1336,0.765,1351,2.058,1415,0.646,1421,1.833,1450,1.741,1501,3.729,1506,2.23,1518,1.833,1609,0.748,1662,0.719,1695,0.804,1778,1.591,1792,0.827,1827,0.783,2037,2.425,2096,0.985,2238,0.985,2283,1.652,2352,0.985,2364,0.748,2366,0.804,2393,0.783,2394,1.539,2395,1.591,2432,2.268,2458,2.496,2463,0.985,2485,1.591,2511,2.23,2620,0.93,2664,0.888,2732,0.804,2740,0.827,2884,1.833,2912,1.833,3095,0.827,3184,0.985,3242,0.985,3255,2.79,3256,0.985,3257,1.07,3258,1.07,3259,1.07,3260,1.99,3261,1.99,3262,1.07,3263,1.99,3264,1.07,3265,1.07,3266,2.79,3267,2.79,3268,1.99,3269,1.99,3270,1.99,3271,1.07,3272,1.07,3273,1.07,3274,1.07]],["component/66",[291,0.458]],["title/67-1",[30,23.857,240,30.901]],["name/67-1",[]],["text/67-1",[]],["component/67-1",[]],["title/67-2",[30,23.857,279,40.557]],["name/67-2",[]],["text/67-2",[]],["component/67-2",[]],["title/67-3",[30,19.923,905,29.594,2432,35.953]],["name/67-3",[]],["text/67-3",[]],["component/67-3",[]],["title/67-4",[71,23.459,95,30.796,2432,35.953]],["name/67-4",[]],["text/67-4",[]],["component/67-4",[]],["title/67-5",[30,17.103,905,25.405,1100,27.013,2427,31.953]],["name/67-5",[]],["text/67-5",[]],["component/67-5",[]],["title/67-6",[71,20.138,95,26.437,1100,27.013,2427,31.953]],["name/67-6",[]],["text/67-6",[]],["component/67-6",[]],["title/67-7",[71,20.138,95,26.437,1100,27.013,1727,31.953]],["name/67-7",[]],["text/67-7",[]],["component/67-7",[]],["title/67-8",[30,23.857,278,34.476]],["name/67-8",[]],["text/67-8",[]],["component/67-8",[]],["title/67-9",[30,19.923,905,29.594,2432,35.953]],["name/67-9",[]],["text/67-9",[]],["component/67-9",[]],["title/67-10",[71,23.459,95,30.796,2432,35.953]],["name/67-10",[]],["text/67-10",[]],["component/67-10",[]],["title/67-11",[30,17.103,905,25.405,1100,27.013,2937,35.703]],["name/67-11",[]],["text/67-11",[]],["component/67-11",[]],["title/67-12",[71,20.138,95,26.437,1100,27.013,2937,35.703]],["name/67-12",[]],["text/67-12",[]],["component/67-12",[]],["title/67-13",[30,17.103,905,25.405,1100,27.013,2427,31.953]],["name/67-13",[]],["text/67-13",[]],["component/67-13",[]],["title/67-14",[71,20.138,95,26.437,1100,27.013,2427,31.953]],["name/67-14",[]],["text/67-14",[]],["component/67-14",[]],["title/67-15",[71,20.138,95,26.437,1727,31.953,1879,35.703]],["name/67-15",[]],["text/67-15",[]],["component/67-15",[]],["title/67-16",[30,23.857,280,43.052]],["name/67-16",[]],["text/67-16",[]],["component/67-16",[]],["title/67-17",[30,19.923,905,29.594,2432,35.953]],["name/67-17",[]],["text/67-17",[]],["component/67-17",[]],["title/67-18",[71,23.459,95,30.796,2432,35.953]],["name/67-18",[]],["text/67-18",[]],["component/67-18",[]],["title/67-19",[30,17.103,905,25.405,1100,27.013,2427,31.953]],["name/67-19",[]],["text/67-19",[]],["component/67-19",[]],["title/67-20",[71,20.138,95,26.437,1100,27.013,2427,31.953]],["name/67-20",[]],["text/67-20",[]],["component/67-20",[]],["title/67-21",[30,14.982,71,17.641,95,23.159,127,17.745,1879,31.276]],["name/67-21",[]],["text/67-21",[]],["component/67-21",[]],["title/67-22",[1122,45.477]],["name/67-22",[]],["text/67-22",[]],["component/67-22",[]],["title/67-23",[30,17.103,197,30.864,198,23.323,2432,30.864]],["name/67-23",[]],["text/67-23",[]],["component/67-23",[]],["title/67-24",[195,43.052,1336,47.382]],["name/67-24",[]],["text/67-24",[]],["component/67-24",[]],["title/67",[30,23.857,275,34.476]],["name/67",[30,0.822]],["text/67",[0,1.819,2,1.337,3,0.797,4,0.14,6,0.487,9,2.723,10,0.515,11,1.266,15,0.932,16,0.77,17,0.351,18,0.565,21,0.175,25,0.181,26,1.283,29,0.131,30,3.759,34,0.173,36,0.157,38,0.483,39,0.164,40,0.223,44,0.188,45,0.284,47,0.168,50,0.766,51,0.814,52,2.897,53,2.755,56,0.297,59,0.209,60,0.181,63,2.561,64,0.259,68,0.228,69,2.05,71,3.408,74,0.17,75,0.202,81,0.821,82,0.673,88,2.072,91,0.27,94,1.094,95,1.202,96,0.487,98,0.177,104,0.162,112,0.901,114,0.299,116,2.138,118,1.527,121,0.14,124,1.105,127,1.285,128,0.188,133,0.556,134,2.409,135,0.614,136,0.716,141,1.392,146,0.271,147,1.692,148,0.183,159,1.496,162,2.7,184,0.509,185,0.188,189,0.186,194,0.228,195,2.324,197,0.396,198,1.278,199,0.179,206,0.824,207,0.162,208,0.637,211,0.602,226,1.782,227,2.145,236,1.27,240,3.402,242,0.218,244,0.876,245,2.139,246,0.498,253,0.963,263,0.199,266,2.051,273,0.161,274,0.403,275,2.724,277,0.329,278,2.209,279,2.501,280,1.826,295,0.206,306,1.855,310,2.228,314,0.403,333,0.368,342,0.186,346,0.228,359,0.415,365,3.146,366,2.081,384,0.76,399,0.886,404,0.199,405,1.084,406,0.521,407,0.172,413,0.64,414,0.632,422,0.191,436,1.77,456,0.214,461,0.736,462,0.17,466,1.891,480,0.572,494,1.003,501,0.241,503,0.373,546,0.209,556,0.183,558,1.189,563,2.106,597,0.241,605,0.191,611,1.232,612,0.41,639,0.165,656,1.601,667,0.418,682,0.218,699,0.228,731,0.228,735,0.196,747,0.209,776,0.214,777,0.32,782,0.249,824,0.193,832,0.259,852,0.259,875,0.98,894,0.259,897,0.241,905,2.995,911,0.271,920,0.64,921,0.688,932,0.228,1034,1.045,1040,0.209,1044,0.249,1047,0.982,1048,1.296,1053,0.384,1066,0.228,1067,0.287,1073,0.556,1082,1.252,1083,0.206,1100,0.509,1102,0.697,1103,0.582,1122,1.314,1123,2.785,1124,0.637,1125,1.204,1134,0.472,1138,0.825,1139,0.446,1141,0.53,1142,2.119,1147,1.615,1154,0.41,1169,0.41,1170,2.065,1183,1.108,1190,0.803,1191,4.51,1217,0.186,1236,0.234,1253,0.183,1272,2.486,1323,2.427,1336,2.557,1344,1.525,1373,0.564,1375,0.223,1415,0.865,1524,0.287,1609,0.218,1662,1.75,1675,0.825,1687,0.186,1727,1.133,1762,3.675,1792,1.491,1836,0.418,1879,0.458,1883,0.214,1884,0.241,1885,0.693,1896,0.241,1900,0.287,2027,0.53,2057,1.719,2117,0.249,2156,1.861,2179,0.626,2223,1.605,2225,1.624,2322,0.287,2330,0.259,2331,0.259,2393,0.446,2419,1.552,2427,1.133,2432,2.548,2453,0.234,2511,2.08,2516,0.825,2689,1.303,2722,0.259,2729,0.53,2732,0.234,2740,1.846,2744,1.319,2769,2.59,2777,0.778,2850,0.825,2883,1.319,2889,0.506,2937,0.879,2960,2.444,3095,0.241,3113,6.353,3116,0.259,3117,4.323,3120,0.287,3121,1.077,3217,1.552,3275,0.287,3276,1.077,3277,1.552,3278,1.552,3279,1.552,3280,1.077,3281,0.895,3282,1.464,3283,0.895,3284,1.685,3285,0.825,3286,0.825,3287,2.812,3288,1.552,3289,0.312,3290,1.685,3291,1.685,3292,1.685,3293,0.895,3294,1.685,3295,1.685,3296,0.895,3297,0.895,3298,0.895,3299,0.895,3300,0.312,3301,0.312,3302,0.312,3303,0.53,3304,0.312,3305,0.312,3306,0.312,3307,1.077,3308,0.312,3309,0.312,3310,0.312,3311,0.312,3312,0.312,3313,0.312,3314,0.312,3315,0.312,3316,0.312,3317,0.287,3318,0.312,3319,0.312,3320,0.312,3321,0.312]],["component/67",[291,0.458]],["title/68-1",[213,44.571,639,35.107]],["name/68-1",[]],["text/68-1",[]],["component/68-1",[]],["title/68-2",[24,40.018,639,35.107]],["name/68-2",[]],["text/68-2",[]],["component/68-2",[]],["title/68-3",[30,13.329,223,24.903,652,27.11,2728,27.826,3322,37.034,3323,37.034]],["name/68-3",[]],["text/68-3",[]],["component/68-3",[]],["title/68-4",[213,44.571,2123,55.033]],["name/68-4",[]],["text/68-4",[]],["component/68-4",[]],["title/68-5",[6,23.058,1210,44.243,1884,42.814]],["name/68-5",[]],["text/68-5",[]],["component/68-5",[]],["title/68",[6,27.61,24,40.018]],["name/68",[6,0.531,24,0.77]],["text/68",[2,1.549,4,1.34,6,3.512,7,0.496,9,1.416,14,1.582,15,0.426,18,0.426,20,1.44,22,2.655,24,3.203,25,1.368,26,1.387,28,0.604,30,1.771,34,1.309,36,1.183,38,3.055,39,0.871,41,1.097,42,2.192,45,1.097,49,0.555,53,1.173,56,1.146,57,0.485,59,0.593,62,0.532,69,0.374,77,0.593,81,2.917,84,0.766,88,0.447,91,1.315,103,2.375,107,0.525,112,3.515,114,2.415,115,1.654,117,1.097,118,1.507,119,2.956,123,0.532,126,0.766,130,0.604,134,3.207,137,0.501,145,1.776,147,0.417,150,0.471,159,0.507,160,0.704,161,1.002,162,0.408,167,0.49,177,0.451,178,1.729,179,0.63,183,0.547,184,1.69,185,0.532,188,0.914,189,0.525,191,0.682,198,0.433,199,0.954,206,0.954,208,1.621,209,0.539,210,1.247,211,1.116,212,1.323,213,5.869,214,1.378,215,1.061,217,3.228,219,0.471,220,0.732,223,0.593,226,0.463,228,0.471,236,0.371,246,0.924,251,1.284,254,0.766,257,0.662,263,0.563,266,0.397,267,2.125,268,3.51,277,0.896,278,0.458,286,2.167,287,0.812,288,2.045,294,0.519,296,1.235,301,2.47,302,0.496,306,0.417,308,0.944,310,2.452,315,1.554,318,1.75,321,0.645,327,0.732,333,3.203,338,0.532,352,0.616,359,1.377,362,0.645,384,0.572,388,0.555,396,0.645,406,0.513,408,0.682,414,0.771,416,1.327,422,0.539,441,0.616,461,0.555,462,0.48,463,0.704,465,0.856,480,1.901,496,1.03,503,2.753,518,0.732,519,0.604,528,0.732,529,0.547,563,0.519,584,1.078,602,1.138,612,0.593,613,0.519,629,1.327,639,1.246,640,0.766,645,0.924,652,0.645,699,0.645,714,0.812,724,2.377,734,0.555,744,0.662,753,0.732,775,1.061,777,0.871,780,1.187,782,0.704,802,0.604,820,2.377,824,0.547,825,0.662,845,1.582,857,1.016,863,0.812,890,1.116,901,1.682,915,0.539,1053,0.555,1054,2.167,1064,0.682,1072,0.616,1087,0.563,1088,0.645,1104,0.766,1118,0.371,1130,0.732,1131,0.525,1147,0.547,1180,0.532,1210,4.524,1217,0.525,1218,0.662,1228,0.616,1255,0.593,1267,0.704,1272,0.645,1285,1.327,1291,0.645,1300,1.247,1301,0.766,1313,0.812,1327,1.247,1341,1.284,1394,2.377,1414,0.645,1503,1.161,1506,1.327,1551,0.682,1641,0.766,1642,0.732,1646,1.327,1776,0.572,1787,0.732,1796,0.645,1836,0.604,1838,2.716,1874,0.766,1882,0.593,1884,3.124,1922,0.766,2084,0.812,2123,3.353,2159,0.766,2223,1.116,2251,0.766,2287,0.682,2297,0.704,2458,1.187,2468,1.443,2472,0.604,2477,0.766,2496,0.766,2594,0.732,2711,0.812,2727,0.704,2728,1.247,2756,0.732,2776,0.766,2822,0.812,3011,0.766,3031,1.443,3189,2.739,3191,0.812,3303,0.766,3317,2.167,3324,0.881,3325,0.881,3326,0.881,3327,0.812,3328,0.881,3329,0.881,3330,0.881,3331,0.881,3332,1.66,3333,1.66,3334,0.881,3335,0.881,3336,0.881,3337,0.881,3338,0.881,3339,0.812,3340,0.881,3341,0.881,3342,0.881,3343,1.66,3344,1.66,3345,1.66,3346,0.881,3347,1.66,3348,1.66,3349,0.881,3350,2.353,3351,0.881,3352,0.881,3353,0.881,3354,0.881,3355,0.881,3356,0.881,3357,0.881,3358,0.812,3359,0.881,3360,0.881,3361,0.881,3362,0.881,3363,1.66,3364,2.973,3365,0.881,3366,0.881,3367,0.881,3368,0.881,3369,0.881,3370,0.881,3371,0.812,3372,0.881,3373,0.881,3374,0.881]],["component/68",[291,0.458]],["title/69",[5,46.357,6,27.61]],["name/69",[5,0.892,6,0.531]],["text/69",[5,6.503,6,4.3,8,3.521,15,1.882,25,1.312,32,1.577,33,1.802,34,1.255,36,1.134,39,1.184,48,1.694,50,1.206,52,2.67,53,3.989,63,2.301,65,1.362,66,1.344,71,2.592,78,3.284,79,1.546,80,3.188,81,1.896,82,1.694,86,3.969,87,3.112,88,3.499,89,2.077,90,1.546,92,4.371,93,3.909,94,2.529,96,4.888,104,3.181,107,1.344,114,3.002,118,1.143,124,1.153,134,1.92,145,1.134,167,1.255,178,1.312,221,1.49,231,2.529,245,1.229,260,2.668,266,2.756,275,1.173,282,2.082,310,1.229,318,2.292,333,3.102,408,3.012,414,2.474,524,1.694,612,2.618,639,1.194,720,1.442,747,1.516,807,1.465,851,1.872,881,1.577,897,5.841,905,2.082,932,1.651,1034,1.399,1040,1.516,1047,2.668,1122,2.829,1148,1.651,1190,0.939,1239,1.872,1241,1.872,1457,1.516,1488,1.744,1776,1.465,1794,1.802,1891,3.586,2223,1.516,2350,1.612,2369,4.466,2373,1.96,2453,5.187,2594,1.872,2677,2.077,2678,3.586,2712,2.077,2728,1.694,2771,1.872,3049,3.586,3074,2.077,3231,2.077,3375,2.255,3376,2.255,3377,2.077,3378,2.255,3379,5.138,3380,2.077,3381,2.077,3382,2.077,3383,2.255,3384,2.255,3385,2.255]],["component/69",[291,0.458]],["title/70-1",[6,19.794,9,22.632,121,21.418,915,29.075]],["name/70-1",[]],["text/70-1",[]],["component/70-1",[]],["title/70-2",[6,19.794,9,22.632,71,20.138,88,24.087]],["name/70-2",[]],["text/70-2",[]],["component/70-2",[]],["title/70",[9,31.569,71,28.09]],["name/70",[9,0.607,71,0.541]],["text/70",[2,1.473,6,3.162,9,4.903,16,0.912,22,1.078,24,5.114,26,1.319,28,3.206,30,1.261,38,1.078,39,1.838,47,1.078,52,2.043,59,1.343,60,1.162,63,0.894,69,0.846,70,1.239,71,4.101,75,3.039,81,0.973,88,1.776,107,2.088,112,3.766,113,1.397,114,3.457,115,1.111,119,1.462,122,4.573,123,3.862,124,1.021,130,1.369,134,3.298,147,0.944,153,1.658,167,1.111,175,1.343,177,1.021,184,2.66,195,2.275,210,1.5,211,1.343,212,1.123,213,2.355,240,2.621,246,1.111,266,0.9,271,1.206,276,1.369,277,1.078,278,2.434,301,2.45,306,2.212,333,1.206,347,1.462,388,1.257,405,1.123,410,1.736,414,2.096,422,1.222,441,1.397,444,1.596,478,1.736,494,1.822,496,1.239,503,1.222,613,2.062,624,1.462,658,1.545,885,1.596,905,1.068,912,1.343,915,2.863,921,2.062,1047,2.401,1061,1.596,1119,4.867,1142,3.714,1144,1.5,1147,2.173,1169,1.343,1191,2.45,1230,1.596,1236,2.632,1247,3.226,1300,1.5,1323,1.428,1401,1.736,1796,1.462,1838,4.252,2057,2.314,2089,3.226,2156,2.504,2266,1.319,2472,1.369,2486,4.225,2936,1.839,2960,1.736,2962,1.596,3151,1.736,3386,3.503,3387,3.503,3388,1.997,3389,1.997,3390,1.997,3391,1.997,3392,1.997,3393,1.997,3394,1.997,3395,1.997,3396,1.997,3397,3.503,3398,1.997,3399,1.997,3400,1.997,3401,1.997,3402,1.997,3403,1.997]],["component/70",[291,0.458]],["title/71-1",[290,45.425,464,52.978]],["name/71-1",[]],["text/71-1",[]],["component/71-1",[]],["title/71-2",[413,59.039]],["name/71-2",[]],["text/71-2",[]],["component/71-2",[]],["title/71",[9,26.363,71,23.459,112,29.594]],["name/71",[9,0.421,71,0.375,112,0.473]],["text/71",[2,2.303,4,2.218,6,2.358,9,5.205,20,1.82,24,4.415,26,2.062,28,1.138,29,3.532,30,2.265,34,1.655,39,0.871,50,0.888,51,0.944,53,2.483,57,0.914,63,1.332,66,0.99,69,0.704,70,1.03,71,4.095,72,4.371,78,1.901,81,0.809,86,1.71,88,0.842,91,2.503,98,0.944,100,1.061,104,0.864,112,5.895,114,0.815,115,1.655,127,1.268,128,1.002,129,1.327,134,0.62,141,2.159,142,1.002,145,0.835,147,1.406,162,0.769,163,0.896,176,1.03,183,1.845,185,1.002,187,3.962,188,0.914,190,1.247,207,2.101,208,0.905,210,2.234,211,2,212,0.934,213,5.199,219,3.027,221,1.097,231,1.078,238,5.897,240,0.774,241,1.161,244,0.864,246,0.924,247,1.52,261,1.327,275,0.864,277,2.18,278,4.021,296,1.561,298,1.138,317,1.284,333,1.002,338,1.002,406,1.73,407,3.117,414,0.544,416,1.327,430,1.284,465,0.856,496,1.03,498,2.377,546,1.116,572,1.379,617,1.443,619,0.944,624,2.957,639,1.575,720,1.061,736,1.284,739,1.327,744,1.247,747,3.807,786,3.354,807,1.078,915,1.82,916,1.443,1027,2.377,1066,1.215,1131,0.99,1260,1.443,1300,1.247,1315,2.126,1433,1.379,1486,1.187,1834,1.529,3011,1.443,3275,1.529,3303,1.443,3404,1.66,3405,2.974,3406,1.66,3407,1.66,3408,1.66,3409,1.66,3410,1.66,3411,1.66,3412,1.66]],["component/71",[291,0.458]],["title/72-1",[1229,57.762]],["name/72-1",[]],["text/72-1",[]],["component/72-1",[]],["title/72-2",[2,17.429,359,25.627,1119,33.419]],["name/72-2",[]],["text/72-2",[]],["component/72-2",[]],["title/72-3",[6,23.058,399,25.453,3413,50.985]],["name/72-3",[]],["text/72-3",[]],["component/72-3",[]],["title/72-4",[1351,26.43,3414,57.607]],["name/72-4",[]],["text/72-4",[]],["component/72-4",[]],["title/72-5",[124,24.29,206,27.319,275,24.716,1499,35.703]],["name/72-5",[]],["text/72-5",[]],["component/72-5",[]],["title/72-6",[1351,18.948,1371,34.784,1499,35.703,2472,32.565]],["name/72-6",[]],["text/72-6",[]],["component/72-6",[]],["title/72-7",[1371,40.52,1499,41.59,3415,55.354]],["name/72-7",[]],["text/72-7",[]],["component/72-7",[]],["title/72-8",[6,23.058,399,25.453,1892,44.243]],["name/72-8",[]],["text/72-8",[]],["component/72-8",[]],["title/72-9",[122,33.968,193,26.719,1119,28.689,1380,39.453]],["name/72-9",[]],["text/72-9",[]],["component/72-9",[]],["title/72-10",[1351,32.933]],["name/72-10",[]],["text/72-10",[]],["component/72-10",[]],["title/72-11",[244,42.959]],["name/72-11",[]],["text/72-11",[]],["component/72-11",[]],["title/72",[2,20.87,1119,40.018]],["name/72",[2,0.402,1119,0.77]],["text/72",[0,0.16,2,1.063,6,0.68,12,0.209,16,0.164,21,0.202,26,0.377,39,0.539,42,0.223,47,0.881,53,0.527,59,0.242,60,0.408,61,0.251,63,0.314,69,1.241,70,0.223,80,1.013,83,0.341,112,0.375,114,0.801,115,0.39,122,2.564,123,0.217,124,4.987,128,0.217,131,0.39,134,4.787,137,0.204,145,0.821,148,0.413,161,0.62,162,0.325,164,0.209,172,0.413,177,0.525,183,2.472,184,0.399,193,0.751,199,0.59,207,0.187,211,0.242,212,0.202,215,2.894,226,0.189,240,0.623,244,0.187,245,0.196,246,1.216,252,0.233,260,1.119,265,0.263,266,0.162,271,0.423,274,0.237,275,5.282,277,0.194,281,2.047,282,0.549,283,0.242,306,0.905,308,0.204,312,0.435,314,0.237,315,0.237,318,1.127,333,0.217,342,0.214,351,0.214,359,1.66,366,0.209,371,0.331,384,0.868,391,0.19,399,0.472,414,1.538,436,0.226,444,0.287,457,0.237,486,0.237,494,0.187,496,0.829,501,0.542,503,0.22,519,0.481,525,2.848,528,0.298,539,0.278,602,0.481,604,0.246,607,0.577,612,0.242,613,0.212,630,0.263,644,0.278,645,2.421,657,0.246,659,0.223,678,0.501,709,6.673,723,0.331,734,0.226,735,1.028,757,1.497,782,0.287,798,0.246,802,0.246,812,0.56,825,0.527,845,0.899,875,2.917,883,0.527,890,0.471,905,0.192,912,2.27,915,0.628,921,0.961,1027,0.56,1044,0.287,1053,0.226,1069,0.331,1083,0.678,1101,0.263,1105,0.27,1119,3.028,1125,0.257,1131,0.973,1147,0.435,1158,0.298,1166,0.287,1169,0.242,1170,0.246,1171,0.751,1207,0.69,1223,1.419,1229,0.251,1237,0.237,1253,0.961,1255,0.242,1259,0.278,1267,0.56,1272,0.263,1274,0.23,1285,0.287,1304,0.542,1320,0.246,1351,3.285,1353,0.331,1354,0.582,1355,1.355,1357,1.89,1359,1.305,1360,2.151,1364,0.312,1365,0.312,1368,2.695,1369,2.866,1370,3.308,1371,4.194,1373,2.956,1376,1.162,1380,1.814,1385,1.899,1428,0.287,1431,0.448,1450,1.342,1457,0.242,1499,4.678,1514,0.312,1565,0.287,1570,0.278,1580,0.312,1606,0.263,1636,0.298,1644,0.237,1691,0.257,1696,0.287,1727,0.69,1776,0.233,1779,0.287,1796,0.263,1823,0.501,1838,0.423,1842,0.27,1844,0.251,1883,0.246,1892,0.82,1988,0.331,2007,0.298,2042,0.331,2063,0.287,2266,2.369,2334,0.331,2362,0.298,2407,0.278,2427,0.242,2465,0.582,2472,0.481,2486,0.27,2593,0.312,2728,0.27,2735,0.312,2801,0.298,2802,1.162,2841,3.028,2889,2.029,2919,0.331,2937,0.527,3077,0.312,3095,0.278,3101,0.609,3256,0.331,3358,0.331,3413,1.503,3414,4.081,3416,0.359,3417,1.231,3418,0.701,3419,1.026,3420,0.945,3421,2.444,3422,3.984,3423,0.945,3424,0.945,3425,1.026,3426,1.026,3427,3.669,3428,0.701,3429,0.701,3430,0.359,3431,3.49,3432,2.698,3433,0.359,3434,1.336,3435,0.359,3436,0.359,3437,0.701,3438,0.359,3439,2.908,3440,0.359,3441,0.359,3442,0.359,3443,0.359,3444,0.359,3445,1.632,3446,0.359,3447,0.359,3448,0.359,3449,0.945,3450,0.359,3451,1.026,3452,0.359,3453,0.359,3454,1.632,3455,1.336,3456,2.691,3457,1.336,3458,4.696,3459,3.586,3460,2.929,3461,3.303,3462,0.945,3463,0.359,3464,0.359,3465,1.026,3466,1.026,3467,0.359,3468,1.026,3469,1.336,3470,1.336,3471,0.359,3472,0.359,3473,0.359,3474,0.359,3475,0.359,3476,0.359,3477,0.331,3478,0.646,3479,0.359,3480,0.359,3481,0.945,3482,0.359,3483,0.359,3484,0.646,3485,1.026,3486,0.331,3487,0.945,3488,0.359,3489,0.359,3490,0.312,3491,0.359,3492,0.331,3493,0.312]],["component/72",[291,0.458]],["title/73",[2,20.87,236,27.928]],["name/73",[2,0.402,236,0.537]],["text/73",[2,3.287,6,1.516,9,2.761,26,1.026,30,2.601,45,1.697,52,3.155,56,4.014,63,3.236,69,3.062,70,2.258,71,3.492,72,4.619,88,2.939,94,2.364,114,1.787,127,4.287,134,1.36,162,2.684,163,1.965,177,1.861,195,2.364,215,2.327,219,1.946,226,1.91,227,1.91,228,3.863,236,3.792,266,1.641,280,2.364,310,1.984,313,2.364,365,2.602,461,2.292,496,3.597,652,2.665,751,2.364,879,2.909,908,2.443,921,2.143,1125,2.602,1139,6.032,1141,3.163,1142,2.404,1154,2.448,1170,3.973,1237,2.404,1323,4.145,1324,5.34,1325,5.34,1457,2.448,1838,2.198,2057,2.404,2156,2.602,2225,2.735,2364,2.546,2505,5.039,2764,2.735,3494,5.798,3495,3.64,3496,3.64,3497,3.64,3498,3.64]],["component/73",[291,0.458]],["title/74-1",[2,20.87,9,31.569]],["name/74-1",[]],["text/74-1",[]],["component/74-1",[]],["title/74-2",[2,20.87,10,38.107]],["name/74-2",[]],["text/74-2",[]],["component/74-2",[]],["title/74-3",[9,31.569,188,36.497]],["name/74-3",[]],["text/74-3",[]],["component/74-3",[]],["title/74-4",[226,34.787,227,34.787]],["name/74-4",[]],["text/74-4",[]],["component/74-4",[]],["title/74",[2,17.429,9,26.363,10,31.824]],["name/74",[2,0.402,9,0.607]],["text/74",[0,2.712,2,3.538,6,1.184,9,5.352,10,5.844,15,2.291,26,1.719,29,1.191,30,3.415,39,1.492,47,1.535,50,1.52,53,3.369,56,3.85,63,1.273,70,1.764,71,2.009,72,1.817,74,1.55,83,1.385,91,1.257,107,2.825,113,1.989,114,2.327,121,1.282,122,2.032,123,1.717,124,2.423,125,2.471,126,2.471,127,4.333,128,1.717,129,2.273,130,1.949,131,1.582,147,2.882,159,1.635,162,1.316,167,2.637,169,2.081,207,1.479,212,1.599,228,3.803,236,1.198,263,1.817,278,3.7,280,3.079,310,1.55,359,1.316,388,1.79,406,1.654,414,1.553,465,1.466,471,2.032,725,4.12,734,1.79,777,1.492,836,2.273,1123,3.73,1210,2.273,1235,2.273,1236,3.561,1255,1.912,1883,1.949,2514,4.12,2727,2.273,3013,2.619,3250,2.619,3382,2.619,3499,4.74,3500,2.843]],["component/74",[291,0.458]],["title/75-1",[131,36.877,910,55.033]],["name/75-1",[]],["text/75-1",[]],["component/75-1",[]],["title/75-2",[79,32.565,80,29.483,131,26.437,414,15.566]],["name/75-2",[]],["text/75-2",[]],["component/75-2",[]],["title/75-3",[131,36.877,348,43.052]],["name/75-3",[]],["text/75-3",[]],["component/75-3",[]],["title/75",[2,20.87,131,36.877]],["name/75",[2,0.402,131,0.71]],["text/75",[2,1.06,6,0.795,26,0.538,39,1.767,51,1.086,53,2.149,56,1.64,69,1.914,71,0.809,83,0.93,88,0.968,94,2.187,95,1.062,112,1.8,114,0.937,123,1.153,124,3.177,131,6.346,134,3.098,142,1.153,144,0.968,162,4.609,172,1.982,173,1.124,184,1.914,185,1.153,207,0.993,209,1.168,228,1.021,232,1.335,236,3.901,246,1.062,270,2.692,271,2.033,277,1.818,278,0.993,281,0.937,285,4.549,294,1.124,306,0.903,308,1.086,310,1.041,315,1.261,317,2.605,318,3.206,333,2.033,338,1.153,342,1.138,348,5.62,359,0.884,414,2.036,422,1.168,461,1.202,486,1.261,489,1.526,503,2.06,512,1.818,529,2.089,630,1.398,645,3.03,700,1.435,715,2.308,731,1.398,756,1.261,759,1.24,810,1.759,838,1.759,872,1.526,905,1.021,920,4.442,936,1.759,1064,1.477,1087,1.221,1101,1.398,1118,1.419,1124,1.836,1128,1.585,1180,2.033,1191,3.809,1274,1.221,1373,4.318,1431,1.221,1486,2.407,1627,1.435,1761,2.927,1823,2.407,1844,2.355,1854,1.526,2057,1.261,2156,1.365,2223,3.038,2228,1.585,2453,1.435,2472,1.309,2495,2.692,2541,1.759,2584,1.66,2713,2.796,2750,1.66,2889,2.796,3414,1.66,3501,3.368,3502,1.759,3503,1.759,3504,3.102,3505,4.517,3506,1.759,3507,1.91,3508,1.91,3509,1.759,3510,5.447,3511,1.759,3512,3.368,3513,4.517,3514,3.368,3515,3.368,3516,1.91,3517,1.91,3518,1.759,3519,1.91,3520,3.368]],["component/75",[291,0.458]],["title/76",[2,11.661,6,24.485,1886,25.901,2427,24.903,2937,27.826]],["name/76",[2,0.402,1088,0.934]],["text/76",[2,2.12,6,3.677,15,0.519,26,0.303,29,0.836,47,1.078,52,0.469,53,0.424,55,0.676,56,0.523,59,0.722,62,0.648,63,0.481,69,0.846,75,1.297,83,0.972,112,1.496,114,0.527,124,0.549,128,0.648,131,3.353,134,4.706,140,0.709,161,2.49,184,1.991,193,0.604,196,0.807,207,0.558,226,0.563,240,0.5,266,0.9,271,1.69,275,1.456,276,1.368,295,0.709,306,0.944,359,2.79,399,0.918,404,0.686,414,1.974,422,0.657,457,1.849,465,0.554,496,0.666,525,0.767,567,0.891,639,0.569,683,1.276,757,3.206,820,0.632,828,1.658,875,4.926,889,0.891,908,0.841,912,4.528,1088,2.049,1101,0.786,1119,1.205,1122,0.591,1124,2.55,1226,0.697,1268,0.933,1351,2.55,1354,3.424,1355,5.31,1357,6.953,1359,4.817,1360,6.262,1361,2.432,1364,3.044,1365,4.066,1368,2.631,1369,2.237,1370,2.324,1371,1.462,1373,3.257,1376,4.497,1380,2.324,1385,0.933,1414,0.786,1450,0.996,1499,0.807,1606,0.786,1727,1.343,1779,1.596,1823,2.001,1836,0.736,1892,0.858,1896,0.83,2283,0.891,2427,4.053,2758,0.933,2801,1.658,2802,5.559,2841,7.423,2937,4.224,3101,2.432,3417,4.766,3420,4.766,3423,3.799,3424,3.799,3431,3.226,3432,2.578,3449,1.839,3462,0.989,3477,1.839,3478,1.839,3481,1.839,3484,1.839,3486,0.989,3487,0.989,3521,1.074,3522,1.074,3523,1.074,3524,1.074,3525,1.074,3526,1.997,3527,1.074,3528,1.074]],["component/76",[291,0.458]],["title/77-1",[1373,41.728,3529,57.607]],["name/77-1",[]],["text/77-1",[]],["component/77-1",[]],["title/77-2",[1373,41.728,3530,61.052]],["name/77-2",[]],["text/77-2",[]],["component/77-2",[]],["title/77-3",[30,17.103,63,21.279,1373,29.915,3531,43.768]],["name/77-3",[]],["text/77-3",[]],["component/77-3",[]],["title/77-4",[1373,41.728,3282,57.607]],["name/77-4",[]],["text/77-4",[]],["component/77-4",[]],["title/77",[63,29.683,81,32.284]],["name/77",[81,0.621,3532,1.276]],["text/77",[0,3.128,2,2.386,4,2.877,9,0.948,22,1.074,26,0.561,28,2.394,30,3.388,38,1.074,42,1.235,51,1.132,52,2.45,53,0.785,56,1.701,63,2.859,69,1.48,70,1.235,71,1.48,74,1.085,81,2.732,82,1.496,91,1.544,124,1.017,127,0.849,134,0.744,148,1.172,162,1.617,173,1.172,175,1.338,195,1.293,198,0.977,208,3.058,227,2.944,236,2.69,240,1.628,246,1.943,271,2.109,279,1.218,281,3.133,302,1.119,306,2.207,354,0.969,366,1.158,370,1.986,376,1.392,399,0.915,405,2.624,413,1.423,414,1.529,462,1.904,465,1.026,466,2.349,471,1.423,544,1.457,735,1.253,751,1.293,754,1.54,759,1.293,777,1.045,845,1.338,872,1.591,875,1.158,881,1.392,905,2.999,921,1.172,934,3.036,943,1.218,1073,1.235,1082,1.293,1102,1.186,1121,1.496,1122,1.923,1123,2.855,1125,1.423,1139,1.457,1175,1.591,1207,1.338,1320,3.844,1373,4.019,1415,1.202,1439,2.443,1662,2.349,1670,1.73,1792,1.54,1837,1.496,1844,4.916,1851,1.591,1853,1.73,1859,5.3,2142,1.54,2179,1.392,2364,3.264,2374,2.792,2393,2.557,2394,2.702,2395,2.792,2396,1.591,2397,3.875,2398,3.875,2399,3.875,2445,1.591,2446,3.61,2511,2.792,2740,1.54,2764,1.496,2785,4.299,2823,3.875,2827,1.833,2841,3.73,3023,1.73,3051,1.73,3116,1.653,3117,1.73,3251,1.833,3276,1.833,3277,1.833,3278,1.833,3279,1.833,3280,1.833,3282,3.036,3285,1.833,3286,1.833,3288,3.217,3380,1.833,3529,1.73,3530,1.833,3531,1.833,3533,1.833,3534,3.493,3535,1.99,3536,1.99,3537,1.99,3538,1.99,3539,1.99]],["component/77",[291,0.458]],["title/78-1",[275,21.651,281,20.431,748,31.276,1762,28.527,3540,36.177]],["name/78-1",[]],["text/78-1",[]],["component/78-1",[]],["title/78-2",[275,21.651,281,20.431,861,34.561,1762,28.527,3540,36.177]],["name/78-2",[]],["text/78-2",[]],["component/78-2",[]],["title/78-3",[1794,44.243,2266,36.564,3541,50.985]],["name/78-3",[]],["text/78-3",[]],["component/78-3",[]],["title/78-4",[162,25.627,1854,44.243,2266,36.564]],["name/78-4",[]],["text/78-4",[]],["component/78-4",[]],["title/78-5",[162,25.627,2266,36.564,3542,50.985]],["name/78-5",[]],["text/78-5",[]],["component/78-5",[]],["title/78-6",[1838,40.018,2266,43.783]],["name/78-6",[]],["text/78-6",[]],["component/78-6",[]],["title/78-7",[1371,48.521,2266,43.783]],["name/78-7",[]],["text/78-7",[]],["component/78-7",[]],["title/78-8",[1373,41.728,2266,43.783]],["name/78-8",[]],["text/78-8",[]],["component/78-8",[]],["title/78-9",[113,38.713,1838,33.419,2266,36.564]],["name/78-9",[]],["text/78-9",[]],["component/78-9",[]],["title/78-10",[226,34.787,227,34.787]],["name/78-10",[]],["text/78-10",[]],["component/78-10",[]],["title/78",[6,23.058,275,28.792,2266,36.564]],["name/78",[6,0.369,275,0.46,2266,0.584]],["text/78",[2,0.426,6,2.043,8,0.487,10,0.779,12,0.414,15,3.034,17,3.863,25,0.414,30,0.698,36,0.681,52,0.847,63,0.607,66,0.807,69,3.093,74,1.348,75,2.738,79,1.695,80,0.441,82,1.858,107,0.424,111,1.083,113,5.225,114,0.349,115,0.753,121,1.115,124,0.692,131,1.079,134,3.513,135,0.487,142,0.429,144,0.687,145,0.681,148,0.797,162,3.807,172,0.797,175,0.478,177,0.991,207,1.287,208,1.861,211,1.304,245,1.057,260,2.031,263,0.454,266,0.61,267,0.968,270,0.568,275,3.972,276,0.928,277,1.599,281,1.214,282,1.825,283,1.663,296,0.373,310,3.422,331,0.508,333,0.429,342,0.807,348,1.26,359,2.117,362,0.991,366,0.788,370,0.404,403,1.177,416,1.977,423,1.018,461,0.448,464,1.083,471,1.386,503,1.187,517,0.59,525,2.738,529,0.84,571,0.618,602,2.889,616,0.508,633,0.534,639,1.027,735,0.448,748,0.534,756,0.47,832,0.59,835,4.073,853,1.61,857,0.435,870,0.618,905,0.724,910,1.124,1030,0.991,1034,2.118,1044,1.977,1048,0.911,1053,0.448,1080,1.124,1082,3.186,1083,3.638,1124,0.388,1131,0.424,1135,2.565,1142,2.53,1172,0.568,1180,0.429,1183,0.55,1190,0.808,1217,0.424,1220,1.281,1222,0.534,1228,0.947,1234,2.368,1239,1.61,1253,0.797,1315,1.768,1316,0.568,1320,0.487,1371,3.347,1373,3.088,1391,1.977,1415,1.493,1420,0.568,1431,0.454,1439,0.497,1492,1.811,1499,3.436,1644,1.281,1762,4.744,1776,0.462,1794,2.729,1823,0.508,1838,4.51,1842,0.534,1843,0.59,1844,4.221,1846,0.618,1854,5.971,2057,1.634,2127,0.655,2129,1.177,2156,0.508,2209,1.247,2223,0.911,2227,0.655,2228,1.61,2266,6.093,2318,4.805,2344,0.655,2350,0.508,2366,1.018,2374,0.568,2462,1.685,2495,0.568,2594,1.124,2656,3.144,2713,0.59,2714,0.655,2727,0.568,2823,0.59,2834,1.685,2841,1.55,2941,1.247,3031,1.685,3381,1.247,3461,2.729,3518,0.655,3540,2.967,3541,1.247,3542,1.786,3543,0.711,3544,0.655,3545,0.711,3546,1.354,3547,0.711,3548,0.711,3549,0.711,3550,0.711,3551,0.711,3552,0.711,3553,0.711,3554,1.354,3555,1.354,3556,3.414,3557,1.939,3558,0.711,3559,0.711,3560,1.354,3561,0.711,3562,0.711,3563,0.711,3564,1.354,3565,0.711,3566,0.711,3567,0.711,3568,0.711,3569,0.711,3570,0.711,3571,0.711,3572,0.711,3573,0.711,3574,0.711,3575,2.473,3576,0.711,3577,1.939,3578,0.711,3579,1.939,3580,1.354,3581,0.711,3582,2.963,3583,0.711,3584,0.711,3585,2.963,3586,0.711,3587,0.711,3588,0.711,3589,0.711,3590,0.711,3591,1.354,3592,1.354,3593,1.354,3594,0.711,3595,0.711,3596,1.354,3597,1.354,3598,1.354]],["component/78",[291,0.458]],["title/79-1",[1351,26.43,1450,33.052]],["name/79-1",[]],["text/79-1",[]],["component/79-1",[]],["title/79-2",[121,24.95,1119,33.419,1351,22.072]],["name/79-2",[]],["text/79-2",[]],["component/79-2",[]],["title/79-3",[71,28.09,1351,26.43]],["name/79-3",[]],["text/79-3",[]],["component/79-3",[]],["title/79-4",[226,34.787,227,34.787]],["name/79-4",[]],["text/79-4",[]],["component/79-4",[]],["title/79",[1351,32.933]],["name/79",[26,0.36,1351,0.509]],["text/79",[2,1.252,4,1.318,15,1.923,17,2.789,30,1.052,39,2.546,52,1.277,53,2.454,56,0.794,57,0.897,63,1.781,69,1.239,70,2.468,71,2.635,79,1.117,80,1.814,81,0.794,91,0.72,94,1.899,112,0.871,114,0.8,121,0.734,123,2.401,124,3.179,134,4.357,161,0.984,162,2.587,172,0.959,176,1.011,177,0.833,207,1.521,208,2.168,215,1.041,228,0.871,232,1.139,236,0.686,245,3.945,248,1.501,262,1.966,266,1.318,271,0.984,275,3.234,277,0.879,281,3.552,282,1.563,285,1.193,301,2.045,310,0.888,314,1.076,333,2.401,359,2.246,384,1.058,388,1.026,414,1.589,436,1.026,489,1.302,503,1.789,522,1.353,525,2.09,529,1.011,546,1.096,607,2.237,645,4.816,731,1.193,735,1.026,885,1.302,905,3.325,1030,1.193,1031,1.353,1043,1.501,1082,3.151,1088,1.193,1119,2.401,1142,1.076,1147,1.814,1167,1.302,1176,2.045,1180,0.984,1191,3.909,1232,1.26,1320,2.004,1351,4.2,1357,1.26,1373,1.026,1375,1.165,1394,2.337,1407,1.26,1410,2.197,1450,3.818,1492,2.912,1605,1.353,1627,1.224,1709,1.743,1838,0.984,1854,1.302,1893,1.193,2057,1.076,2156,1.165,2223,3.758,2350,1.165,2465,2.428,2472,1.117,2496,1.416,2641,1.353,2642,2.693,3095,1.26,3102,1.501,3427,2.693,3439,1.501,3599,1.629,3600,1.629,3601,2.924,3602,2.924,3603,1.501,3604,1.629,3605,1.501,3606,1.501,3607,1.501,3608,1.501,3609,1.629,3610,1.629,3611,1.629,3612,1.629,3613,1.629,3614,1.629,3615,1.629,3616,1.629,3617,2.924,3618,2.924,3619,2.924,3620,1.629,3621,1.629]],["component/79",[291,0.458]],["title/80-1",[2448,66.013]],["name/80-1",[]],["text/80-1",[]],["component/80-1",[]],["title/80-2",[414,21.714,1122,36.497]],["name/80-2",[]],["text/80-2",[]],["component/80-2",[]],["title/80-3",[1190,34.403]],["name/80-3",[]],["text/80-3",[]],["component/80-3",[]],["title/80-4",[1124,45.021]],["name/80-4",[]],["text/80-4",[]],["component/80-4",[]],["title/80-5",[162,30.687,1118,27.928]],["name/80-5",[]],["text/80-5",[]],["component/80-5",[]],["title/80-6",[209,40.557,1217,39.506]],["name/80-6",[]],["text/80-6",[]],["component/80-6",[]],["title/80-7",[225,45.425,273,34.175]],["name/80-7",[]],["text/80-7",[]],["component/80-7",[]],["title/80-8",[2446,63.881]],["name/80-8",[]],["text/80-8",[]],["component/80-8",[]],["title/80-9",[414,21.714,1122,36.497]],["name/80-9",[]],["text/80-9",[]],["component/80-9",[]],["title/80-10",[1190,34.403]],["name/80-10",[]],["text/80-10",[]],["component/80-10",[]],["title/80-11",[1124,45.021]],["name/80-11",[]],["text/80-11",[]],["component/80-11",[]],["title/80-12",[162,30.687,1118,27.928]],["name/80-12",[]],["text/80-12",[]],["component/80-12",[]],["title/80-13",[209,40.557,1217,39.506]],["name/80-13",[]],["text/80-13",[]],["component/80-13",[]],["title/80-14",[359,38.237]],["name/80-14",[]],["text/80-14",[]],["component/80-14",[]],["title/80-15",[3622,76.073]],["name/80-15",[]],["text/80-15",[]],["component/80-15",[]],["title/80-16",[414,21.714,1122,36.497]],["name/80-16",[]],["text/80-16",[]],["component/80-16",[]],["title/80-17",[1190,34.403]],["name/80-17",[]],["text/80-17",[]],["component/80-17",[]],["title/80-18",[1124,45.021]],["name/80-18",[]],["text/80-18",[]],["component/80-18",[]],["title/80-19",[162,30.687,1118,27.928]],["name/80-19",[]],["text/80-19",[]],["component/80-19",[]],["title/80-20",[209,40.557,1217,39.506]],["name/80-20",[]],["text/80-20",[]],["component/80-20",[]],["title/80-21",[127,35.207]],["name/80-21",[]],["text/80-21",[]],["component/80-21",[]],["title/80-22",[414,21.714,1122,36.497]],["name/80-22",[]],["text/80-22",[]],["component/80-22",[]],["title/80-23",[1190,34.403]],["name/80-23",[]],["text/80-23",[]],["component/80-23",[]],["title/80-24",[1124,45.021]],["name/80-24",[]],["text/80-24",[]],["component/80-24",[]],["title/80-25",[162,30.687,1118,27.928]],["name/80-25",[]],["text/80-25",[]],["component/80-25",[]],["title/80-26",[209,40.557,1217,39.506]],["name/80-26",[]],["text/80-26",[]],["component/80-26",[]],["title/80-27",[3603,76.073]],["name/80-27",[]],["text/80-27",[]],["component/80-27",[]],["title/80-28",[414,21.714,1122,36.497]],["name/80-28",[]],["text/80-28",[]],["component/80-28",[]],["title/80-29",[1190,34.403]],["name/80-29",[]],["text/80-29",[]],["component/80-29",[]],["title/80-30",[1124,45.021]],["name/80-30",[]],["text/80-30",[]],["component/80-30",[]],["title/80-31",[162,30.687,1118,27.928]],["name/80-31",[]],["text/80-31",[]],["component/80-31",[]],["title/80-32",[209,40.557,1217,39.506]],["name/80-32",[]],["text/80-32",[]],["component/80-32",[]],["title/80-33",[359,38.237]],["name/80-33",[]],["text/80-33",[]],["component/80-33",[]],["title/80-34",[2514,71.78]],["name/80-34",[]],["text/80-34",[]],["component/80-34",[]],["title/80-35",[414,21.714,1122,36.497]],["name/80-35",[]],["text/80-35",[]],["component/80-35",[]],["title/80-36",[1190,34.403]],["name/80-36",[]],["text/80-36",[]],["component/80-36",[]],["title/80-37",[1124,45.021]],["name/80-37",[]],["text/80-37",[]],["component/80-37",[]],["title/80-38",[162,30.687,1118,27.928]],["name/80-38",[]],["text/80-38",[]],["component/80-38",[]],["title/80-39",[209,40.557,1217,39.506]],["name/80-39",[]],["text/80-39",[]],["component/80-39",[]],["title/80-40",[3066,71.78]],["name/80-40",[]],["text/80-40",[]],["component/80-40",[]],["title/80-41",[414,21.714,1122,36.497]],["name/80-41",[]],["text/80-41",[]],["component/80-41",[]],["title/80-42",[1190,34.403]],["name/80-42",[]],["text/80-42",[]],["component/80-42",[]],["title/80-43",[1124,45.021]],["name/80-43",[]],["text/80-43",[]],["component/80-43",[]],["title/80-44",[162,30.687,1118,27.928]],["name/80-44",[]],["text/80-44",[]],["component/80-44",[]],["title/80-45",[209,40.557,1217,39.506]],["name/80-45",[]],["text/80-45",[]],["component/80-45",[]],["title/80-46",[359,38.237]],["name/80-46",[]],["text/80-46",[]],["component/80-46",[]],["title/80-47",[2470,68.573]],["name/80-47",[]],["text/80-47",[]],["component/80-47",[]],["title/80-48",[414,21.714,1122,36.497]],["name/80-48",[]],["text/80-48",[]],["component/80-48",[]],["title/80-49",[1190,34.403]],["name/80-49",[]],["text/80-49",[]],["component/80-49",[]],["title/80-50",[1124,45.021]],["name/80-50",[]],["text/80-50",[]],["component/80-50",[]],["title/80-51",[162,30.687,1118,27.928]],["name/80-51",[]],["text/80-51",[]],["component/80-51",[]],["title/80-52",[209,40.557,1217,39.506]],["name/80-52",[]],["text/80-52",[]],["component/80-52",[]],["title/80-53",[3504,76.073]],["name/80-53",[]],["text/80-53",[]],["component/80-53",[]],["title/80-54",[414,21.714,1122,36.497]],["name/80-54",[]],["text/80-54",[]],["component/80-54",[]],["title/80-55",[1190,34.403]],["name/80-55",[]],["text/80-55",[]],["component/80-55",[]],["title/80-56",[1124,45.021]],["name/80-56",[]],["text/80-56",[]],["component/80-56",[]],["title/80-57",[162,30.687,1118,27.928]],["name/80-57",[]],["text/80-57",[]],["component/80-57",[]],["title/80-58",[209,40.557,1217,39.506]],["name/80-58",[]],["text/80-58",[]],["component/80-58",[]],["title/80-59",[359,38.237]],["name/80-59",[]],["text/80-59",[]],["component/80-59",[]],["title/80-60",[3506,76.073]],["name/80-60",[]],["text/80-60",[]],["component/80-60",[]],["title/80-61",[414,21.714,1122,36.497]],["name/80-61",[]],["text/80-61",[]],["component/80-61",[]],["title/80-62",[1190,34.403]],["name/80-62",[]],["text/80-62",[]],["component/80-62",[]],["title/80-63",[1124,45.021]],["name/80-63",[]],["text/80-63",[]],["component/80-63",[]],["title/80-64",[162,30.687,1118,27.928]],["name/80-64",[]],["text/80-64",[]],["component/80-64",[]],["title/80",[56,32.284,228,35.437]],["name/80",[56,0.431,228,0.473,3623,0.885]],["text/80",[2,2.421,4,2.373,9,2.372,10,0.382,15,0.881,16,1.829,17,1.339,22,0.358,26,1.227,27,0.438,28,0.869,29,0.531,30,1.307,39,0.666,40,0.475,42,0.412,45,0.309,49,0.418,50,0.974,52,1.222,53,2.63,56,4.067,62,0.401,63,2.094,67,1.342,69,0.772,71,1.539,74,1.761,80,0.787,81,1.363,88,0.643,91,0.561,92,0.907,98,1.324,100,0.424,104,0.66,107,0.396,114,0.326,115,0.369,127,0.993,130,0.455,131,3.352,134,3.12,135,0.869,137,0.377,145,0.334,147,0.861,150,0.355,155,0.391,162,2.165,163,0.983,169,0.486,171,0.729,172,0.391,173,0.391,176,0.787,177,0.339,178,0.386,179,0.475,182,0.386,183,0.412,186,0.486,193,0.373,196,0.953,200,0.424,206,2.088,208,0.993,209,0.406,212,1.31,218,1.014,221,0.438,223,0.446,228,3.667,236,3.04,244,0.345,247,0.931,252,0.431,259,0.824,263,0.424,266,0.821,271,1.406,273,1.442,275,1.455,276,0.455,277,0.358,278,0.66,281,2.136,282,0.355,283,1.881,306,1.323,310,1.525,312,1.445,318,1.072,331,0.907,333,1.1,338,0.401,342,0.756,344,0.929,346,0.486,348,2.358,359,0.843,366,0.386,370,0.377,376,0.464,384,0.824,388,1.467,406,0.386,414,1.312,441,0.464,461,0.418,462,1.525,465,0.939,483,0.869,494,0.948,496,0.412,497,0.382,512,0.685,515,0.838,563,0.747,584,0.824,602,0.455,604,0.455,613,0.391,615,0.486,645,3.596,659,0.412,682,0.887,683,1.788,700,0.499,715,0.455,720,0.424,734,0.799,735,0.418,748,0.499,775,1.164,776,1.248,777,0.666,780,0.475,804,0.431,861,0.551,869,0.551,897,0.513,908,0.534,912,3.145,921,0.391,934,2.807,1053,0.418,1061,2.582,1082,0.824,1088,1.333,1101,0.486,1118,1.179,1121,2.427,1124,0.691,1131,0.396,1139,0.486,1142,0.438,1147,1.13,1168,1.053,1170,0.455,1177,1.053,1178,1.053,1190,0.277,1207,0.446,1211,0.577,1217,0.396,1230,0.531,1235,0.531,1237,0.438,1255,0.446,1265,0.486,1320,1.248,1323,2.309,1351,1.116,1357,3.617,1373,0.799,1392,0.513,1415,2.627,1439,0.464,1450,0.908,1486,1.302,1613,0.499,1709,0.756,1718,0.551,1757,0.531,1766,0.531,1788,0.513,1822,2.431,1827,2.048,1836,1.596,1837,0.499,1838,1.406,1843,2.682,1844,3.271,1851,1.014,1859,4.595,1883,0.869,1893,0.486,1959,0.577,2038,0.531,2053,0.577,2137,1.168,2223,0.446,2265,1.168,2350,0.475,2362,0.551,2364,0.887,2365,0.531,2374,1.862,2393,0.486,2394,0.513,2395,0.531,2396,1.014,2397,1.053,2398,1.053,2399,1.053,2446,0.981,2465,1.053,2470,1.053,2486,1.369,2495,0.531,2505,1.102,2732,0.499,2737,0.611,2745,0.611,2756,1.053,2771,1.053,2801,1.053,2813,0.611,2823,1.053,3084,0.611,3086,1.168,3089,1.168,3116,1.053,3192,1.168,3307,1.168,3490,0.577,3492,0.611,3502,0.611,3503,2.146,3509,0.611,3511,0.611,3529,1.102,3533,0.611,3544,2.146,3605,0.611,3606,0.611,3607,1.168,3608,1.678,3622,0.611,3624,0.664,3625,0.664,3626,0.664,3627,0.664,3628,5.787,3629,4.676,3630,4.676,3631,4.676,3632,0.664,3633,4.676,3634,0.664,3635,0.664,3636,0.664,3637,0.664,3638,1.269,3639,0.664,3640,0.664,3641,0.664,3642,0.664,3643,0.664,3644,1.269,3645,0.664,3646,0.664,3647,0.664,3648,0.664,3649,0.664,3650,0.664,3651,1.269,3652,0.664,3653,1.269,3654,0.664,3655,0.664]],["component/80",[291,0.458]],["title/81-1",[1099,49.863]],["name/81-1",[]],["text/81-1",[]],["component/81-1",[]],["title/81-2",[391,35.107,1269,38.107]],["name/81-2",[]],["text/81-2",[]],["component/81-2",[]],["title/81-3",[3656,76.073]],["name/81-3",[]],["text/81-3",[]],["component/81-3",[]],["title/81",[297,33.419,350,33.869,1087,35.382]],["name/81",[1098,1.536]],["text/81",[0,4.019,2,1.356,6,1.794,9,3.15,26,3.117,39,2.261,53,1.7,56,2.098,63,1.929,65,3.993,71,1.826,88,3.353,91,3.56,119,3.153,127,2.82,141,4.305,144,4.081,145,2.166,147,3.128,159,2.477,187,2.712,189,2.567,193,2.422,273,2.221,277,2.325,281,2.114,294,2.536,296,3.471,297,2.601,299,3.153,307,2.845,313,2.798,350,4.047,351,2.567,494,2.241,663,3.153,903,3.332,1087,4.228,1098,2.897,1099,5.884,1202,2.673,1395,5.116,1486,3.079,1680,3.968,1699,3.744,1766,3.443,2057,2.845,2281,3.577,2473,3.968,2486,3.237,3657,3.968,3658,3.968,3659,6.092,3660,5.287,3661,3.744]],["component/81",[291,0.458]],["title/82-1",[25,38.552,3662,57.607]],["name/82-1",[]],["text/82-1",[]],["component/82-1",[]],["title/82-2",[391,35.107,1269,38.107]],["name/82-2",[]],["text/82-2",[]],["component/82-2",[]],["title/82-3",[26,18.691,3662,57.607]],["name/82-3",[]],["text/82-3",[]],["component/82-3",[]],["title/82-4",[391,35.107,1269,38.107]],["name/82-4",[]],["text/82-4",[]],["component/82-4",[]],["title/82",[256,45.425,2461,57.607]],["name/82",[256,0.874,2461,1.109]],["text/82",[2,1.69,25,4.535,26,3.148,45,2.503,53,2.118,65,6.084,68,3.93,127,2.288,144,2.721,203,3.546,256,3.679,296,2.817,299,7.376,302,3.018,396,3.93,512,2.898,541,3.754,544,3.93,657,3.679,658,4.152,765,4.291,820,3.16,824,3.331,1227,3.546,1316,4.291,1337,8.758,1467,4.665,1682,4.033,1864,4.665,3660,4.291,3662,9.302,3663,5.368,3664,4.665,3665,5.368,3666,4.665,3667,4.944,3668,5.368,3669,5.368,3670,5.368]],["component/82",[291,0.458]],["title/83-1",[26,15.609,1318,44.243,1333,37.935]],["name/83-1",[]],["text/83-1",[]],["component/83-1",[]],["title/83-2",[391,35.107,1269,38.107]],["name/83-2",[]],["text/83-2",[]],["component/83-2",[]],["title/83-3",[1511,68.573]],["name/83-3",[]],["text/83-3",[]],["component/83-3",[]],["title/83-4",[391,35.107,1269,38.107]],["name/83-4",[]],["text/83-4",[]],["component/83-4",[]],["title/83",[13,27.827,296,29.051,780,39.569]],["name/83",[1333,1.566]],["text/83",[0,2.532,4,1.602,13,3.576,26,3.211,29,1.489,47,3.071,50,1.901,53,1.403,65,4.909,81,1.732,91,2.516,125,3.09,127,1.516,137,2.021,164,3.309,184,2.021,195,2.309,244,1.849,258,2.842,266,1.602,290,2.436,296,4.979,299,4.165,306,1.681,313,3.696,404,2.272,476,2.671,494,2.959,524,2.671,540,4.067,541,2.486,556,2.093,563,2.093,684,2.541,721,2.75,746,2.602,780,5.812,791,2.602,824,2.206,846,2.952,914,3.275,1318,7.109,1333,7.504,1402,2.952,1511,5.906,1541,6.182,1609,3.979,2281,2.952,2437,4.945,2756,2.952,2910,3.275,3140,3.09,3371,3.275,3671,3.275,3672,3.555,3673,3.275,3674,3.555,3675,3.555,3676,3.555,3677,3.275,3678,3.275,3679,3.275,3680,3.275,3681,5.241]],["component/83",[291,0.458]],["title/84-1",[26,18.691,3664,57.607]],["name/84-1",[]],["text/84-1",[]],["component/84-1",[]],["title/84-2",[391,35.107,1269,38.107]],["name/84-2",[]],["text/84-2",[]],["component/84-2",[]],["title/84-3",[26,23.29]],["name/84-3",[]],["text/84-3",[]],["component/84-3",[]],["title/84-4",[391,35.107,1269,38.107]],["name/84-4",[]],["text/84-4",[]],["component/84-4",[]],["title/84-5",[3666,71.78]],["name/84-5",[]],["text/84-5",[]],["component/84-5",[]],["title/84-6",[391,35.107,1269,38.107]],["name/84-6",[]],["text/84-6",[]],["component/84-6",[]],["title/84",[256,45.425,1217,39.506]],["name/84",[256,0.874,3682,1.276]],["text/84",[26,3.492,53,1.653,65,6.142,68,4.739,105,3.348,203,2.767,240,1.953,256,2.871,296,3.398,299,6.516,313,4.205,320,2.817,396,3.067,494,2.179,541,2.93,547,3.348,605,5.447,706,6.57,892,4.437,1217,2.497,1316,5.175,1337,5.627,1429,3.348,1430,3.348,1434,3.641,1687,2.497,2432,2.721,2593,3.641,2653,3.641,2765,3.859,3339,3.859,3664,9.217,3666,5.627,3683,4.189,3684,4.189,3685,4.189,3686,4.189,3687,4.189,3688,5.963,3689,4.189,3690,4.189,3691,3.859,3692,4.189,3693,4.189,3694,4.189,3695,4.189,3696,3.859,3697,4.189]],["component/84",[291,0.458]],["title/85",[26,15.609,296,29.051,297,33.419]],["name/85",[300,1.438]],["text/85",[2,1.927,6,2.55,26,2.414,42,3.798,45,2.854,48,4.6,53,3.897,62,3.696,83,2.982,107,3.649,108,5.32,109,4.735,145,3.077,150,3.273,206,3.519,217,4.893,245,3.337,247,3.129,263,5.473,266,2.759,296,3.213,297,6.457,318,5.04,465,3.156,512,3.304,602,4.195,660,4.893,775,3.913,909,5.32,932,4.481,1293,5.083,1959,5.32,2022,5.083,3327,5.638,3698,5.638,3699,6.122]],["component/85",[291,0.458]],["title/86",[26,18.691,1315,47.382]],["name/86",[1315,1.633]],["text/86",[0,1.417,1,2.227,2,1.639,3,1.772,21,1.791,26,3.114,29,1.334,30,1.873,47,1.719,53,1.257,60,1.852,65,5.995,69,1.349,71,1.349,88,1.614,91,1.408,110,6.093,124,1.628,127,1.357,140,2.103,144,2.638,149,2.141,175,2.141,195,2.068,203,2.103,229,2.767,231,2.068,241,2.227,244,1.656,247,1.628,263,2.035,278,1.656,285,2.331,296,1.671,299,6.968,307,2.103,338,1.922,399,1.464,494,2.707,519,2.182,619,1.81,639,1.687,715,2.182,720,2.035,754,2.463,795,2.393,892,2.182,1048,2.141,1119,1.922,1122,1.753,1140,2.644,1217,1.898,1240,6.08,1315,6.008,1316,7.21,1317,7.022,1318,6.717,2437,2.767,3657,2.933,3658,2.933,3671,2.933,3678,2.933,3679,2.933,3688,2.933,3696,2.933,3700,3.184,3701,7.022,3702,6.08,3703,7.623,3704,6.601,3705,8.404,3706,3.184,3707,3.184]],["component/86",[291,0.458]],["title/87-1",[24,40.018,3016,55.033]],["name/87-1",[]],["text/87-1",[]],["component/87-1",[]],["title/87-2",[3708,76.073]],["name/87-2",[]],["text/87-2",[]],["component/87-2",[]],["title/87",[171,31.824,297,33.419,3709,50.985]],["name/87",[171,1.314]],["text/87",[2,2.95,9,2.65,24,6.186,26,1.569,30,2.88,65,4.831,91,2.46,102,4.073,103,3.741,134,3.828,137,3.163,164,3.236,171,3.199,281,3.927,296,2.92,351,4.769,494,2.894,595,4.835,746,4.073,1119,3.359,1268,4.835,1269,4.6,1351,2.219,1466,4.619,1889,4.619,2043,7.779,3016,8.507,3667,5.125,3708,5.125,3709,7.37,3710,5.564,3711,5.564,3712,5.564,3713,5.564,3714,5.564]],["component/87",[291,0.458]],["title/88-1",[6,19.794,619,27.013,892,32.565,1227,31.388]],["name/88-1",[]],["text/88-1",[]],["component/88-1",[]],["title/88-2",[391,35.107,1269,38.107]],["name/88-2",[]],["text/88-2",[]],["component/88-2",[]],["title/88-3",[26,18.691,3660,52.978]],["name/88-3",[]],["text/88-3",[]],["component/88-3",[]],["title/88-4",[391,35.107,1269,38.107]],["name/88-4",[]],["text/88-4",[]],["component/88-4",[]],["title/88-5",[26,15.609,1330,42.814,1335,48.108]],["name/88-5",[]],["text/88-5",[]],["component/88-5",[]],["title/88-6",[391,35.107,1269,38.107]],["name/88-6",[]],["text/88-6",[]],["component/88-6",[]],["title/88",[2,17.429,45,25.806,296,29.051]],["name/88",[2,0.279,45,0.412,297,0.534]],["text/88",[0,0.855,2,2.833,4,1.526,6,3.866,26,3.14,29,0.805,45,2.909,51,1.092,53,1.791,56,0.936,65,4.156,67,0.922,69,1.924,74,1.047,83,0.936,91,1.497,110,1.536,112,2.427,114,0.943,127,2.66,141,1.027,144,2.301,145,0.966,147,0.909,148,1.131,150,1.027,164,2.64,167,1.069,184,1.092,187,4.679,195,1.248,203,1.269,227,1.008,236,0.81,241,1.344,244,0.999,246,1.069,263,1.228,266,0.866,278,0.999,296,2.871,297,3.303,299,2.479,300,1.21,303,1.118,304,3.769,313,2.948,315,1.269,350,1.176,359,1.568,384,1.248,414,0.629,418,1.486,479,1.595,480,1.228,494,2.846,540,5.313,550,1.77,557,1.344,573,1.67,579,1.77,584,1.248,619,1.925,659,1.192,675,1.67,696,2.544,700,1.444,715,1.317,720,1.228,774,1.536,779,1.444,791,1.407,800,1.67,892,3.111,899,2.619,903,4.826,943,1.176,1072,1.344,1087,1.228,1102,1.145,1202,1.192,1227,4.548,1232,1.486,1267,1.536,1330,6.712,1333,1.317,1335,4.755,1336,1.374,1344,1.228,1392,1.486,1395,1.486,1402,1.595,1434,2.943,1457,1.292,1460,1.77,1486,1.374,1488,1.486,1514,1.67,1541,1.67,1561,1.595,1568,1.595,1573,1.595,1628,1.595,2007,1.595,2074,1.595,2142,1.486,2421,1.77,3035,1.77,3377,1.77,3656,1.77,3659,1.77,3660,5.941,3661,1.67,3673,1.77,3680,1.77,3681,1.77,3698,1.77,3701,3.119,3702,1.77,3715,1.922,3716,1.922,3717,3.386,3718,1.922,3719,1.922,3720,1.922,3721,1.922,3722,1.922,3723,1.922,3724,1.922,3725,1.922,3726,1.922,3727,1.922]],["component/88",[291,0.458]],["title/89-1",[24,33.419,112,29.594,568,40.52]],["name/89-1",[]],["text/89-1",[]],["component/89-1",[]],["title/89-2",[391,35.107,1269,38.107]],["name/89-2",[]],["text/89-2",[]],["component/89-2",[]],["title/89-3",[21,31.125,621,48.108,775,35.382]],["name/89-3",[]],["text/89-3",[]],["component/89-3",[]],["title/89-4",[391,35.107,1269,38.107]],["name/89-4",[]],["text/89-4",[]],["component/89-4",[]],["title/89-5",[2,14.962,657,32.565,2572,41.298,3728,43.768]],["name/89-5",[]],["text/89-5",[]],["component/89-5",[]],["title/89-6",[391,35.107,1269,38.107]],["name/89-6",[]],["text/89-6",[]],["component/89-6",[]],["title/89-7",[6,27.61,2074,55.033]],["name/89-7",[]],["text/89-7",[]],["component/89-7",[]],["title/89-8",[391,35.107,1269,38.107]],["name/89-8",[]],["text/89-8",[]],["component/89-8",[]],["title/89-9",[6,27.61,3493,57.607]],["name/89-9",[]],["text/89-9",[]],["component/89-9",[]],["title/89-10",[391,35.107,1269,38.107]],["name/89-10",[]],["text/89-10",[]],["component/89-10",[]],["title/89-11",[26,15.609,1333,37.935,3729,50.985]],["name/89-11",[]],["text/89-11",[]],["component/89-11",[]],["title/89-12",[391,35.107,1269,38.107]],["name/89-12",[]],["text/89-12",[]],["component/89-12",[]],["title/89",[663,60.458]],["name/89",[663,1.673]],["text/89",[1,2.899,2,2.271,3,1.349,6,3.687,8,1.662,9,1.155,10,1.394,12,1.411,13,1.219,16,1.108,21,3.61,24,4.355,26,2.7,32,1.696,45,2.53,53,2.846,56,1.181,63,1.086,65,3.277,73,1.662,81,2.019,91,1.072,112,3.856,114,1.19,127,1.034,134,0.906,144,1.229,147,1.147,164,2.411,167,1.349,172,1.428,174,2.014,184,2.356,187,1.527,213,3.65,240,1.131,244,1.262,285,1.775,296,1.273,297,3.876,306,1.147,312,2.572,315,1.602,317,1.876,318,2.44,320,2.787,351,3.235,353,1.939,359,1.919,388,1.527,404,2.649,457,1.602,494,2.156,512,2.237,540,2.963,568,3.034,584,1.575,595,2.108,621,3.602,639,2.195,657,3.719,667,1.662,720,1.55,775,2.649,779,1.822,780,1.734,791,1.775,820,1.428,892,1.662,903,1.876,943,1.484,1024,2.234,1064,1.876,1202,3.367,1207,1.631,1217,1.446,1222,1.822,1227,1.602,1318,1.939,1333,5.386,1410,3.114,1431,1.55,1440,1.822,1467,2.108,1468,1.939,1486,1.734,1513,2.234,1551,1.876,1718,2.014,2074,5.331,2572,4.717,3016,2.014,3151,2.108,3490,2.108,3493,3.602,3660,4.338,3661,2.108,3677,3.818,3691,2.234,3728,4.999,3729,2.234,3730,2.425,3731,2.425,3732,4.145,3733,2.425,3734,2.425,3735,2.425,3736,2.425,3737,2.425,3738,2.425,3739,2.425,3740,2.425]],["component/89",[291,0.458]],["title/90-1",[391,35.107,1269,38.107]],["name/90-1",[]],["text/90-1",[]],["component/90-1",[]],["title/90",[6,17.339,114,20.431,1052,36.177,1435,33.271,3741,38.341]],["name/90",[3742,2.105]],["text/90",[2,1.871,6,4.397,45,2.771,53,2.345,61,4.156,62,3.588,65,3.588,91,2.628,112,3.177,114,4.116,121,2.679,163,3.208,164,3.457,187,3.741,188,3.272,225,4.073,263,3.799,293,5.474,318,3.498,337,4.75,338,3.588,354,2.894,482,4.75,496,3.687,584,3.86,774,4.75,1038,5.474,1052,5.165,1202,3.687,1227,5.539,1336,4.248,1435,4.75,1884,4.597,2282,4.934,2612,5.474,3741,5.474,3742,7.724,3743,5.943,3744,5.943,3745,5.943,3746,5.943]],["component/90",[291,0.458]]],"invertedIndex":[["",{"_index":134,"title":{"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"38-7":{},"38-8":{},"38-9":{},"38-10":{},"38-11":{},"38-13":{},"38-14":{},"38-15":{},"38-16":{},"61-7":{},"62-1":{},"62-2":{},"62-3":{},"62-4":{},"62-5":{},"62-6":{},"62-7":{},"62-8":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"21":{},"24":{},"25":{},"26":{},"32":{},"33":{},"36":{},"38":{},"39":{},"40":{},"41":{},"42":{},"45":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"87":{},"89":{}},"component":{}}],["0",{"_index":310,"title":{"41-26":{}},"name":{},"text":{"2":{},"3":{},"8":{},"26":{},"34":{},"37":{},"38":{},"39":{},"41":{},"50":{},"53":{},"55":{},"59":{},"60":{},"61":{},"62":{},"63":{},"65":{},"67":{},"68":{},"69":{},"73":{},"74":{},"75":{},"78":{},"79":{},"80":{}},"component":{}}],["0'",{"_index":2447,"title":{},"name":{},"text":{"41":{}},"component":{}}],["0.000011483579723913",{"_index":1505,"title":{},"name":{},"text":{"16":{}},"component":{}}],["0.000017225369585869",{"_index":1507,"title":{},"name":{},"text":{"16":{}},"component":{}}],["0.0025",{"_index":2423,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["0.032",{"_index":2387,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["0.04",{"_index":3046,"title":{},"name":{},"text":{"61":{}},"component":{}}],["0.08",{"_index":3044,"title":{},"name":{},"text":{"61":{}},"component":{}}],["0.1",{"_index":2234,"title":{},"name":{},"text":{"39":{}},"component":{}}],["0.1.0",{"_index":1247,"title":{},"name":{},"text":{"11":{},"70":{}},"component":{}}],["0.10.3",{"_index":2262,"title":{},"name":{},"text":{"39":{}},"component":{}}],["0.11.0",{"_index":2913,"title":{},"name":{},"text":{"60":{}},"component":{}}],["0.11.0.2",{"_index":2197,"title":{},"name":{},"text":{"39":{}},"component":{}}],["0.11.1.1",{"_index":2177,"title":{},"name":{},"text":{"39":{}},"component":{}}],["0.11.2a0",{"_index":2166,"title":{},"name":{},"text":{"39":{}},"component":{}}],["0.12.0a0",{"_index":2151,"title":{},"name":{},"text":{"39":{}},"component":{}}],["0.12.1",{"_index":2019,"title":{},"name":{},"text":{"38":{}},"component":{}}],["0.12.2",{"_index":1949,"title":{},"name":{},"text":{"38":{}},"component":{}}],["0.128",{"_index":2425,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["0.13.0",{"_index":2431,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["0.13.1",{"_index":2383,"title":{"60-2":{}},"name":{},"text":{"41":{},"60":{},"61":{}},"component":{}}],["0.13.1.1",{"_index":2382,"title":{},"name":{},"text":{"41":{}},"component":{}}],["0.13.2",{"_index":2332,"title":{},"name":{},"text":{"41":{},"53":{}},"component":{}}],["0.16",{"_index":3048,"title":{},"name":{},"text":{"61":{}},"component":{}}],["0.25",{"_index":3039,"title":{},"name":{},"text":{"61":{}},"component":{}}],["0.256",{"_index":2428,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["0.4.0",{"_index":1963,"title":{},"name":{},"text":{"38":{}},"component":{}}],["0.5.0",{"_index":1964,"title":{},"name":{},"text":{"38":{}},"component":{}}],["0.5.5",{"_index":2113,"title":{"39-22":{}},"name":{},"text":{},"component":{}}],["0.5.6",{"_index":2111,"title":{"39-20":{}},"name":{},"text":{},"component":{}}],["0.6.0",{"_index":2109,"title":{"39-17":{},"41-15":{}},"name":{},"text":{},"component":{}}],["0.6.1",{"_index":1276,"title":{"39-15":{}},"name":{},"text":{"11":{}},"component":{}}],["0.6.2",{"_index":2108,"title":{"39-11":{}},"name":{},"text":{},"component":{}}],["0.6.3",{"_index":2105,"title":{"39-8":{}},"name":{},"text":{},"component":{}}],["0.6.4",{"_index":2103,"title":{"39-6":{}},"name":{},"text":{},"component":{}}],["0.6.5",{"_index":2102,"title":{"39-3":{}},"name":{},"text":{},"component":{}}],["0.6.6",{"_index":2100,"title":{"39-1":{}},"name":{},"text":{},"component":{}}],["0.64",{"_index":576,"title":{},"name":{},"text":{"4":{}},"component":{}}],["0.7.0",{"_index":2308,"title":{"41-16":{}},"name":{},"text":{"41":{}},"component":{}}],["0.875",{"_index":2385,"title":{},"name":{},"text":{"41":{}},"component":{}}],["000",{"_index":1645,"title":{},"name":{},"text":{"26":{},"41":{},"47":{},"53":{},"61":{},"62":{}},"component":{}}],["000/10",{"_index":3030,"title":{},"name":{},"text":{"61":{}},"component":{}}],["000/20",{"_index":3040,"title":{},"name":{},"text":{"61":{}},"component":{}}],["000/500",{"_index":3028,"title":{},"name":{},"text":{"61":{}},"component":{}}],["001",{"_index":3033,"title":{},"name":{},"text":{"61":{}},"component":{}}],["00:00",{"_index":1852,"title":{},"name":{},"text":{"34":{}},"component":{}}],["01",{"_index":3247,"title":{},"name":{},"text":{"65":{}},"component":{}}],["04",{"_index":2314,"title":{"41-27":{}},"name":{},"text":{},"component":{}}],["05",{"_index":2104,"title":{"39-6":{},"39-20":{},"39-22":{},"41-36":{}},"name":{},"text":{},"component":{}}],["06",{"_index":2106,"title":{"39-8":{},"39-11":{},"39-15":{},"39-17":{},"41-38":{}},"name":{},"text":{},"component":{}}],["07",{"_index":2101,"title":{"39-1":{},"39-3":{},"39-6":{}},"name":{},"text":{},"component":{}}],["089",{"_index":2621,"title":{},"name":{},"text":{"47":{}},"component":{}}],["0=1",{"_index":3340,"title":{},"name":{},"text":{"68":{}},"component":{}}],["0x",{"_index":2224,"title":{},"name":{},"text":{"39":{},"41":{}},"component":{}}],["0x0",{"_index":1501,"title":{"65-11":{}},"name":{},"text":{"16":{},"62":{},"65":{},"66":{}},"component":{}}],["0x0086972e7463d5673d8b553ae521ec2df974a97c2ce6aafc1d1c20d22c6b96c6",{"_index":1310,"title":{},"name":{},"text":{"12":{}},"component":{}}],["0x00e68b4b07aeecc72f768b1c086d9b0aadce131a40a1067ffb92d0b480cf325d",{"_index":1305,"title":{},"name":{},"text":{"12":{}},"component":{}}],["0x011088d3cbe4289bc6750ee3a9cf35e52f4fa4e0ac9f42fb0b62e983139e135a",{"_index":1484,"title":{},"name":{},"text":{"15":{}},"component":{}}],["0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7",{"_index":1309,"title":{},"name":{},"text":{"12":{},"15":{}},"component":{}}],["0x01cf4d57ba01109f018dec3ea079a38fc08b789e03de4df937ddb9e8a0ff853a",{"_index":1508,"title":{},"name":{},"text":{"16":{}},"component":{}}],["0x02a8846878b6ad1f54f6ba46f5f40e11cee755c677f130b2c4b60566c9003f1f",{"_index":1544,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x02cdab749380950e7a7c0deff5ea8edd716feb3a2952add4e5659655077b8510",{"_index":1306,"title":{},"name":{},"text":{"12":{},"15":{}},"component":{}}],["0x035c332b8de00874e702b4831c84b22281fb3246f714475496d74e644f35d492",{"_index":2609,"title":{},"name":{},"text":{"46":{}},"component":{}}],["0x03fa911dfca026d9c8edb508851b390accf912e8",{"_index":1017,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf",{"_index":2799,"title":{},"name":{},"text":{"58":{}},"component":{}}],["0x046ded64ae2dead6448e247234bab192a9c483644395b66f2155f2614e5804b0",{"_index":1520,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",{"_index":1519,"title":{},"name":{},"text":{"17":{},"46":{}},"component":{}}],["0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",{"_index":2607,"title":{},"name":{},"text":{"46":{}},"component":{}}],["0x04bc3fc2284c8e41fb3d2a37bb0354fd0506131cc77a8c91e4e67ce3aed1d19",{"_index":1308,"title":{},"name":{},"text":{"12":{}},"component":{}}],["0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8",{"_index":1706,"title":{},"name":{},"text":{"29":{}},"component":{}}],["0x05400e90f7e0ae78bd02c77cd75527280470e2fe19c54970dd79dc37a9d3645c",{"_index":1546,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x0550",{"_index":1494,"title":{},"name":{},"text":{"16":{}},"component":{}}],["0x05cd48fccbfd8aa2773fe22c217e808319ffcc1c5a6a463f7d8fa2da48218196",{"_index":1708,"title":{},"name":{},"text":{"29":{}},"component":{}}],["0x0782f0ddca11d9950bc3220e35ac82cf868778edb67a5e58b39838544bc4cd0f",{"_index":2608,"title":{},"name":{},"text":{"46":{}},"component":{}}],["0x07b3e05f48f0c69e4a65ce5e076a66271a527aff2c34ce1083ec6e1526997a69",{"_index":1545,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x07ec0d28e50322eb0c159b9090ecf3aea8346df",{"_index":2605,"title":{},"name":{},"text":{"46":{}},"component":{}}],["0x0c099caf7a87e4eb28bcd8d0608063f8a69bb434",{"_index":992,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x0efe6a8b",{"_index":1712,"title":{},"name":{},"text":{"29":{},"32":{}},"component":{}}],["0x1",{"_index":3202,"title":{"65-12":{}},"name":{},"text":{"65":{}},"component":{}}],["0x100000000000000000000000000000000",{"_index":3565,"title":{},"name":{},"text":{"78":{}},"component":{}}],["0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8",{"_index":3272,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0x181de8b0cd32999a5cc962c5f724bc0f6a322f02957b80e1d5fef49a87588b7",{"_index":3266,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0x194fc63c49b0f07c8e7a78476844837255213824bd6cb81e0ccfb949921aad1",{"_index":3271,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0x217750c27be9147f9e358d9ff26a8224f8acc214",{"_index":964,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x221db5dbf6db",{"_index":3263,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0x297951a67d1bf7795500c3802d21a8c846d9c962",{"_index":986,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x2bbf4f9fd0bbb2e60b0316c1fe0b76cf7a4d0198bd493ced9b8df2a3a24d68a",{"_index":1549,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x301fc0d09c5810600af7bb9610be10596ad6f4e6d28a60d397dd148f0962a88",{"_index":3264,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0x3405f644f9390c3478f42fd205ce6920ccaf3280",{"_index":966,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x34ba56f92265f0868c57d3fe72ecab144fc96f97954bbbc4252cef8e8a979ba",{"_index":1526,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x36dabf43f4962c97cf67ba132fb520091f268e7e33477d77d01747eeb0d7b43",{"_index":1408,"title":{},"name":{},"text":{"13":{}},"component":{}}],["0x37070fd8051f63e5a6d7e87026e086cc19db1ab",{"_index":1006,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x3e6118da317f7a433031f03bb71ab870d87dd2dd",{"_index":952,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x41a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf",{"_index":1522,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x43a1c0bba540e1c98d4b413f876250bdcfd0b9e0",{"_index":996,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x47312450b3ac8b5b8e247a6bb6d523e7605bdb60",{"_index":946,"title":{},"name":{},"text":{"8":{},"46":{}},"component":{}}],["0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",{"_index":1518,"title":{},"name":{},"text":{"17":{},"66":{}},"component":{}}],["0x4bf82e627d57cb3f455e740bcda25848cdbd2ff7",{"_index":990,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x4c6f6e6720737472696e672c206d6f7265207468616e203331206368617261",{"_index":3597,"title":{},"name":{},"text":{"78":{}},"component":{}}],["0x4cf5c11321d54b83bdae84bbbd018c26621d2950",{"_index":974,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x4d0e80ab34ee2b19295f2cac3101d03452d874b8",{"_index":1015,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x4fb05b7cc348c5a72c59a3f307baf66e3ca1f835",{"_index":1011,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x519da5f74503da351ebbed889111377d33096002",{"_index":958,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x52314e0b25b024c34480ac3c75cfe98c2ed6aa4a",{"_index":978,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x534e5f5345504f4c4941",{"_index":1525,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x540779cd109ad20f46cb36d8de1ce30c75469862b4dc75f2f29d1b4d1454f60",{"_index":1409,"title":{},"name":{},"text":{"13":{}},"component":{}}],["0x5495d56633745aa3b97bdb89c255d522e98fd2cb481974efe898560839aa472",{"_index":1425,"title":{},"name":{},"text":{"13":{}},"component":{}}],["0x5899efea757e0dbd6d114b3375c23d7540f65fa4",{"_index":951,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x593a71dc43e9b67fe009d7c76b6efa925fb329b1",{"_index":960,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x5a5e37c60e77a0318643b111f88413a76af6233c891a0cfb2804106372006d4",{"_index":1528,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x5d07affafc8721ef3dee4d11a2d1484cbf6a9ddf",{"_index":954,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x624f5b9f57e53f6b5b62e588f0f949442172b3ad5d04f0827928b4d12c2fa58",{"_index":1411,"title":{},"name":{},"text":{"13":{}},"component":{}}],["0x630a97901ac29590df83f4a64b8d490d54caf239",{"_index":970,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x63746572732e",{"_index":3598,"title":{},"name":{},"text":{"78":{}},"component":{}}],["0x640466ebd2ce505209d3e5c4494b4276ed8f1cde764d757eb48831961f7cdea",{"_index":1550,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x68293272fea2d6e74572bc18ffad11f21344e090",{"_index":1002,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x68656c6c6f",{"_index":3596,"title":{},"name":{},"text":{"78":{}},"component":{}}],["0x691ca565b7416b681e4f9fb56a1283ae8b34e55",{"_index":998,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x69328dec",{"_index":1878,"title":{},"name":{},"text":{"36":{}},"component":{}}],["0x699952dc736661d0ed573cd2b0956c80a1602169e034fdaa3515bfbc36d6410",{"_index":1412,"title":{},"name":{},"text":{"13":{}},"component":{}}],["0x6b0ee6f418e47408cf56c6f98261c1c5693276943be12db9597b933d363df",{"_index":1413,"title":{},"name":{},"text":{"13":{}},"component":{}}],["0x6cb3ee90c50a38a0e4662bb7e7e6e40b91361bf6",{"_index":949,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x73314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82",{"_index":3270,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0x764da020183e28a48ee38a9474f84e7e5ff13194",{"_index":3269,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0x78af2bfb12db15d35f7de8dd77f29c299c78c590",{"_index":994,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x7b3e05f48f0c69e4a65ce5e076a66271a527aff2c34ce1083ec6e1526997a69",{"_index":1523,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0x812c2ad2161d099724a99c8114c539b9e5b449cd",{"_index":1013,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x8488e8f4e26eba40fae229ab653d98e341cbe57b",{"_index":976,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x8518f459a698038b4cced66c042c48c6bb5b17f",{"_index":972,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x89b7a7276cbc8cb35ec11fae9da83b20db3edf20",{"_index":1021,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x9184e72a000",{"_index":3267,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0x943248da0ffd5834da56c5ad5308e2e2991378eb",{"_index":968,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9",{"_index":3268,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0x9e614a417f8309575fc11b175a51599661f2bd21",{"_index":982,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",{"_index":1705,"title":{},"name":{},"text":{"29":{}},"component":{}}],["0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419",{"_index":1790,"title":{},"name":{},"text":{"32":{},"36":{}},"component":{}}],["0xb137668388dbe9acdfa3bc734cc2c469",{"_index":1527,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0xb3ff441a68610b30fd5e2abbf3a1548eb6ba6f3559f2862bf2dc757e5828ca",{"_index":1548,"title":{},"name":{},"text":{"17":{}},"component":{}}],["0xb4711a4614368516529d6118c97905ab4b28e267",{"_index":1008,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xbe8bd7a41ba7dc7b995a53368e7ffe30fd2bc447",{"_index":980,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xc3511006c04ef1d78af4c8e0e74ec18a6e64ff9",{"_index":3273,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0xc4f21318937017b8abe5fdc0d48f58dbc1d18940",{"_index":956,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xc662c410c0ecf747543f5ba90660f6abebd9c8c4",{"_index":237,"title":{},"name":{},"text":{"1":{},"46":{}},"component":{}}],["0xc879af7d5ed80e4676c203fd300e640c297f31e3",{"_index":988,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xc9e067af5d00eb4aa2e73843ac36aff83c5ceed3",{"_index":1019,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xca59f6fd499fff50c78ffb420a9bcd0d273abf29",{"_index":962,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xd0aadeca2d25aefde0da214d27b04b6ea20d7418",{"_index":1004,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xd4c4044aca68ebbcb81b13cc2699e1bca2d3f458",{"_index":948,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xdeadbeef",{"_index":3274,"title":{},"name":{},"text":{"66":{}},"component":{}}],["0xe2bb56ee936fd6433dc0f6e7e3b8365c906aa057",{"_index":2604,"title":{},"name":{},"text":{"46":{}},"component":{}}],["0xe2bbb158",{"_index":1713,"title":{},"name":{},"text":{"29":{}},"component":{}}],["0xe9664d230490d5a515ef7ef30033d8075a8d0e24",{"_index":1000,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xed219933b58e9c00e66682356588d42c7932ee8",{"_index":984,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0xf6080d9fbeebcd44d89affbfd42f098cbff92816",{"_index":1707,"title":{},"name":{},"text":{"29":{}},"component":{}}],["0xf6080d9fbeebcd44d89affbfd42f098cbff92816#writeproxycontract",{"_index":1711,"title":{},"name":{},"text":{"29":{}},"component":{}}],["0xfd14567eaf9ba941cb8c8a94eec14831ca7fd1b4",{"_index":950,"title":{},"name":{},"text":{"8":{}},"component":{}}],["0}_{\\textit{serialized_member_0",{"_index":3569,"title":{},"name":{},"text":{"78":{}},"component":{}}],["0}_{\\textit{serialized_member_1",{"_index":3571,"title":{},"name":{},"text":{"78":{}},"component":{}}],["1",{"_index":15,"title":{"1-12":{},"35-4":{},"35-8":{}},"name":{},"text":{"1":{},"4":{},"8":{},"13":{},"16":{},"18":{},"26":{},"29":{},"34":{},"35":{},"37":{},"38":{},"41":{},"42":{},"43":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"55":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"74":{},"76":{},"78":{},"79":{},"80":{}},"component":{}}],["1.0",{"_index":1884,"title":{"68-5":{}},"name":{},"text":{"37":{},"41":{},"67":{},"68":{},"90":{}},"component":{}}],["1.0.0",{"_index":2181,"title":{},"name":{},"text":{"39":{}},"component":{}}],["1.1k",{"_index":2368,"title":{},"name":{},"text":{"41":{}},"component":{}}],["1.27",{"_index":588,"title":{},"name":{},"text":{"4":{}},"component":{}}],["1.2b",{"_index":3061,"title":{},"name":{},"text":{"61":{}},"component":{}}],["1.6",{"_index":1664,"title":{},"name":{},"text":{"26":{}},"component":{}}],["1.6.0",{"_index":2333,"title":{},"name":{},"text":{"41":{}},"component":{}}],["1/40",{"_index":3029,"title":{},"name":{},"text":{"61":{}},"component":{}}],["1/sierra",{"_index":2072,"title":{},"name":{},"text":{"38":{}},"component":{}}],["10",{"_index":135,"title":{"39-1":{},"41-24":{}},"name":{},"text":{"1":{},"13":{},"41":{},"47":{},"61":{},"65":{},"67":{},"78":{},"80":{}},"component":{}}],["10.00",{"_index":553,"title":{},"name":{},"text":{"4":{}},"component":{}}],["10.76",{"_index":532,"title":{},"name":{},"text":{"4":{}},"component":{}}],["100",{"_index":376,"title":{},"name":{},"text":{"3":{},"21":{},"25":{},"39":{},"41":{},"53":{},"60":{},"61":{},"77":{},"80":{}},"component":{}}],["10000",{"_index":1616,"title":{},"name":{},"text":{"21":{},"25":{}},"component":{}}],["101",{"_index":3244,"title":{},"name":{},"text":{"65":{}},"component":{}}],["102",{"_index":2944,"title":{},"name":{},"text":{"60":{}},"component":{}}],["1024",{"_index":2196,"title":{},"name":{},"text":{"39":{}},"component":{}}],["1110",{"_index":2953,"title":{},"name":{},"text":{"60":{}},"component":{}}],["1124",{"_index":2988,"title":{},"name":{},"text":{"61":{}},"component":{}}],["12",{"_index":2317,"title":{"41-29":{},"41-33":{}},"name":{},"text":{"61":{}},"component":{}}],["12.93",{"_index":534,"title":{},"name":{},"text":{"4":{}},"component":{}}],["12345",{"_index":3601,"title":{},"name":{},"text":{"79":{}},"component":{}}],["1234567879",{"_index":2809,"title":{},"name":{},"text":{"58":{}},"component":{}}],["127",{"_index":589,"title":{},"name":{},"text":{"4":{}},"component":{}}],["128",{"_index":3556,"title":{},"name":{},"text":{"78":{}},"component":{}}],["13",{"_index":2306,"title":{"41-11":{}},"name":{},"text":{},"component":{}}],["1336043477925910602175429627555369551262229712266217887481529642650907574765",{"_index":2943,"title":{},"name":{},"text":{"60":{}},"component":{}}],["1351148242645005540004162531550805076995747746087542030095186557536641755046",{"_index":2932,"title":{},"name":{},"text":{"60":{}},"component":{}}],["1352",{"_index":1935,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1359",{"_index":1937,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1373",{"_index":1931,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1378",{"_index":1928,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1387",{"_index":1954,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1394",{"_index":1941,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1395",{"_index":1943,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1396",{"_index":1942,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1397",{"_index":1947,"title":{},"name":{},"text":{"38":{}},"component":{}}],["14",{"_index":2110,"title":{"39-17":{}},"name":{},"text":{"41":{}},"component":{}}],["1400",{"_index":1958,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1401",{"_index":1925,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1405",{"_index":1950,"title":{},"name":{},"text":{"38":{}},"component":{}}],["1471584055184889701471507129567376607666785522455476394130774434754411633091",{"_index":2947,"title":{},"name":{},"text":{"60":{}},"component":{}}],["15",{"_index":583,"title":{"41-10":{}},"name":{},"text":{"4":{},"8":{},"37":{}},"component":{}}],["152666792071518830868575557812948353041420400780739481342941381225525861407",{"_index":2725,"title":{},"name":{},"text":{"52":{}},"component":{}}],["15th",{"_index":580,"title":{},"name":{},"text":{"4":{},"37":{}},"component":{}}],["1637",{"_index":2991,"title":{},"name":{},"text":{"61":{}},"component":{}}],["17",{"_index":2720,"title":{},"name":{},"text":{"52":{}},"component":{}}],["17*2^{192",{"_index":2714,"title":{},"name":{},"text":{"51":{},"78":{}},"component":{}}],["17/11",{"_index":2295,"title":{},"name":{},"text":{"39":{}},"component":{}}],["18",{"_index":136,"title":{"39-15":{},"39-22":{}},"name":{},"text":{"1":{},"41":{},"67":{}},"component":{}}],["18.17",{"_index":530,"title":{},"name":{},"text":{"4":{}},"component":{}}],["180",{"_index":2370,"title":{},"name":{},"text":{"41":{}},"component":{}}],["18446744073709551617",{"_index":2931,"title":{},"name":{},"text":{"60":{}},"component":{}}],["19",{"_index":1894,"title":{"41-25":{}},"name":{},"text":{"37":{}},"component":{}}],["1_felt252.try_into",{"_index":3085,"title":{},"name":{},"text":{"62":{}},"component":{}}],["1_u32",{"_index":2739,"title":{},"name":{},"text":{"53":{}},"component":{}}],["1}_{\\textit{serialized_member_2",{"_index":3573,"title":{},"name":{},"text":{"78":{}},"component":{}}],["1’",{"_index":2076,"title":{},"name":{},"text":{"38":{}},"component":{}}],["2",{"_index":17,"title":{"1-13":{},"35-5":{},"35-9":{}},"name":{},"text":{"1":{},"2":{},"4":{},"13":{},"18":{},"34":{},"37":{},"38":{},"42":{},"49":{},"50":{},"53":{},"60":{},"61":{},"62":{},"65":{},"67":{},"78":{},"79":{},"80":{}},"component":{}}],["2.0",{"_index":1695,"title":{},"name":{},"text":{"29":{},"32":{},"34":{},"35":{},"36":{},"45":{},"66":{}},"component":{}}],["2.0.0",{"_index":2334,"title":{},"name":{},"text":{"41":{},"72":{}},"component":{}}],["2.0.1",{"_index":1270,"title":{},"name":{},"text":{"11":{}},"component":{}}],["2.00",{"_index":564,"title":{},"name":{},"text":{"4":{}},"component":{}}],["2.1.0",{"_index":1271,"title":{},"name":{},"text":{"11":{}},"component":{}}],["2.2.0",{"_index":1248,"title":{},"name":{},"text":{"11":{}},"component":{}}],["2.4.0",{"_index":2439,"title":{},"name":{},"text":{"41":{}},"component":{}}],["2.56",{"_index":3050,"title":{},"name":{},"text":{"61":{}},"component":{}}],["2.6.x",{"_index":1266,"title":{},"name":{},"text":{"11":{}},"component":{}}],["2.8.2",{"_index":2335,"title":{},"name":{},"text":{"41":{}},"component":{}}],["20",{"_index":1644,"title":{"41-37":{}},"name":{},"text":{"26":{},"29":{},"34":{},"35":{},"36":{},"41":{},"44":{},"56":{},"61":{},"62":{},"72":{},"78":{}},"component":{}}],["20.04",{"_index":520,"title":{},"name":{},"text":{"4":{}},"component":{}}],["200",{"_index":2014,"title":{},"name":{},"text":{"38":{},"47":{},"60":{}},"component":{}}],["2019172390095051323869047481075102003731246132997057518965927979101413600827",{"_index":2930,"title":{},"name":{},"text":{"60":{}},"component":{}}],["2022",{"_index":513,"title":{},"name":{},"text":{"4":{}},"component":{}}],["2023",{"_index":1887,"title":{"39-1":{},"39-3":{},"39-6":{},"39-8":{},"39-11":{},"39-15":{},"39-17":{},"39-20":{},"39-22":{}},"name":{},"text":{"37":{},"59":{}},"component":{}}],["2024",{"_index":491,"title":{},"name":{},"text":{"4":{},"29":{},"37":{}},"component":{}}],["2025",{"_index":492,"title":{},"name":{},"text":{"4":{}},"component":{}}],["2027",{"_index":590,"title":{},"name":{},"text":{"4":{}},"component":{}}],["20\\cdot4+12\\cdot16",{"_index":3062,"title":{},"name":{},"text":{"61":{}},"component":{}}],["21",{"_index":1666,"title":{"41-28":{}},"name":{},"text":{"26":{}},"component":{}}],["2111158214429736260101797453815341265658516118421387314850625535905115418634",{"_index":2945,"title":{},"name":{},"text":{"60":{}},"component":{}}],["2128",{"_index":3381,"title":{},"name":{},"text":{"69":{},"78":{}},"component":{}}],["2129+2128+20",{"_index":3560,"title":{},"name":{},"text":{"78":{}},"component":{}}],["22",{"_index":2321,"title":{"41-33":{},"41-34":{},"41-35":{},"41-36":{},"41-37":{},"41-38":{}},"name":{},"text":{},"component":{}}],["221246409693049874911156614478125967098431447433028390043893900771521609973",{"_index":2957,"title":{},"name":{},"text":{"60":{}},"component":{}}],["23",{"_index":2312,"title":{"41-25":{},"41-27":{},"41-28":{},"41-29":{},"41-30":{},"41-31":{},"41-32":{}},"name":{},"text":{},"component":{}}],["24",{"_index":1850,"title":{"41-2":{},"41-10":{},"41-11":{},"41-24":{}},"name":{},"text":{"34":{}},"component":{}}],["24/11",{"_index":2296,"title":{},"name":{},"text":{"39":{}},"component":{}}],["240",{"_index":2998,"title":{},"name":{},"text":{"61":{}},"component":{}}],["240\\right",{"_index":3055,"title":{},"name":{},"text":{"61":{}},"component":{}}],["2439272289032330041885427773916021390926903450917097317807468082958581062272",{"_index":2951,"title":{},"name":{},"text":{"60":{}},"component":{}}],["2472939307328371039455977650994226407024607754063562993856224077254594995194",{"_index":2942,"title":{},"name":{},"text":{"60":{}},"component":{}}],["248",{"_index":2662,"title":{},"name":{},"text":{"50":{}},"component":{}}],["24kb",{"_index":1051,"title":{},"name":{},"text":{"8":{}},"component":{}}],["25",{"_index":2112,"title":{"39-20":{},"41-35":{}},"name":{},"text":{"41":{}},"component":{}}],["250",{"_index":2649,"title":{},"name":{},"text":{"50":{}},"component":{}}],["251",{"_index":3203,"title":{},"name":{},"text":{"65":{}},"component":{}}],["252",{"_index":3540,"title":{"78-1":{},"78-2":{}},"name":{},"text":{"78":{}},"component":{}}],["256",{"_index":1761,"title":{},"name":{},"text":{"30":{},"61":{},"75":{}},"component":{}}],["25th",{"_index":2589,"title":{},"name":{},"text":{"45":{}},"component":{}}],["264+1",{"_index":2934,"title":{},"name":{},"text":{"60":{}},"component":{}}],["28",{"_index":2303,"title":{"41-2":{}},"name":{},"text":{"41":{}},"component":{}}],["29",{"_index":2107,"title":{"39-8":{},"39-11":{},"41-32":{},"41-34":{}},"name":{},"text":{},"component":{}}],["290",{"_index":2619,"title":{},"name":{},"text":{"47":{}},"component":{}}],["2^{192",{"_index":2721,"title":{},"name":{},"text":{"52":{}},"component":{}}],["2^{192}+1",{"_index":2640,"title":{},"name":{},"text":{"50":{}},"component":{}}],["2^{251",{"_index":2713,"title":{},"name":{},"text":{"51":{},"52":{},"75":{},"78":{}},"component":{}}],["2^{64}+1",{"_index":2961,"title":{},"name":{},"text":{"60":{}},"component":{}}],["2^{\\ell_r",{"_index":3240,"title":{},"name":{},"text":{"65":{}},"component":{}}],["2^{length",{"_index":3221,"title":{},"name":{},"text":{"65":{}},"component":{}}],["2column6",{"_index":1010,"title":{},"name":{},"text":{"8":{}},"component":{}}],["2d",{"_index":2979,"title":{},"name":{},"text":{"61":{}},"component":{}}],["2k",{"_index":2371,"title":{},"name":{},"text":{"41":{}},"component":{}}],["2n",{"_index":3057,"title":{},"name":{},"text":{"61":{}},"component":{}}],["3",{"_index":1082,"title":{"35-6":{},"35-10":{},"61-7":{}},"name":{},"text":{"8":{},"13":{},"34":{},"41":{},"49":{},"60":{},"67":{},"77":{},"78":{},"79":{},"80":{}},"component":{}}],["3+\\text{payload_size}\\right",{"_index":3071,"title":{},"name":{},"text":{"61":{}},"component":{}}],["3.048",{"_index":592,"title":{},"name":{},"text":{"4":{}},"component":{}}],["3.10",{"_index":2218,"title":{},"name":{},"text":{"39":{}},"component":{}}],["3.8",{"_index":2219,"title":{},"name":{},"text":{"39":{}},"component":{}}],["3.9",{"_index":2217,"title":{},"name":{},"text":{"39":{}},"component":{}}],["30",{"_index":517,"title":{},"name":{},"text":{"4":{},"38":{},"47":{},"78":{}},"component":{}}],["30.48",{"_index":591,"title":{},"name":{},"text":{"4":{}},"component":{}}],["300",{"_index":2617,"title":{},"name":{},"text":{"47":{},"60":{}},"component":{}}],["31",{"_index":2318,"title":{"41-30":{}},"name":{},"text":{"78":{}},"component":{}}],["312",{"_index":3005,"title":{},"name":{},"text":{"61":{}},"component":{}}],["3141592653589793238462643383279502884197169399375105820974944592307816406665",{"_index":2655,"title":{},"name":{},"text":{"50":{},"52":{}},"component":{}}],["32",{"_index":2210,"title":{},"name":{},"text":{"39":{},"60":{},"61":{}},"component":{}}],["32\\cdot16",{"_index":3059,"title":{},"name":{},"text":{"61":{}},"component":{}}],["3423542542364363",{"_index":3646,"title":{},"name":{},"text":{"80":{}},"component":{}}],["3429319713503054399243751728532349500489096444181867640228809233993992987070",{"_index":2952,"title":{},"name":{},"text":{"60":{}},"component":{}}],["3476138891838001128614704553731964710634238587541803499001822322602421164873",{"_index":2954,"title":{},"name":{},"text":{"60":{}},"component":{}}],["3534535754756246375475423547453",{"_index":3655,"title":{},"name":{},"text":{"80":{}},"component":{}}],["3618502788666131213697322783095070105623107215331596699973092056135872020481",{"_index":2719,"title":{},"name":{},"text":{"52":{}},"component":{}}],["375+2\\cdot",{"_index":3076,"title":{},"name":{},"text":{"61":{}},"component":{}}],["3t",{"_index":2970,"title":{},"name":{},"text":{"61":{}},"component":{}}],["4",{"_index":1375,"title":{},"name":{},"text":{"13":{},"41":{},"47":{},"49":{},"50":{},"60":{},"61":{},"67":{},"79":{}},"component":{}}],["40",{"_index":941,"title":{},"name":{},"text":{"8":{},"47":{},"61":{}},"component":{}}],["400",{"_index":2456,"title":{},"name":{},"text":{"41":{},"60":{}},"component":{}}],["42",{"_index":1515,"title":{},"name":{},"text":{"17":{}},"component":{}}],["4337",{"_index":2766,"title":{},"name":{},"text":{"54":{},"56":{}},"component":{}}],["446",{"_index":2622,"title":{},"name":{},"text":{"47":{}},"component":{}}],["4844",{"_index":2390,"title":{"60-2":{}},"name":{},"text":{"41":{},"60":{},"61":{}},"component":{}}],["5",{"_index":1083,"title":{},"name":{},"text":{"8":{},"13":{},"21":{},"25":{},"29":{},"41":{},"47":{},"60":{},"61":{},"62":{},"67":{},"72":{},"78":{}},"component":{}}],["5.12",{"_index":3047,"title":{},"name":{},"text":{"61":{}},"component":{}}],["50",{"_index":289,"title":{},"name":{},"text":{"1":{},"41":{},"47":{}},"component":{}}],["500",{"_index":1617,"title":{},"name":{},"text":{"21":{},"25":{},"41":{},"60":{},"61":{}},"component":{}}],["512",{"_index":3002,"title":{},"name":{},"text":{"61":{}},"component":{}}],["541081937647750334353499719661793404023294520617957763260656728924567461866",{"_index":2949,"title":{},"name":{},"text":{"60":{}},"component":{}}],["551",{"_index":3001,"title":{},"name":{},"text":{"61":{}},"component":{}}],["558404273560404778508455254030458021013656352466216690688595011803280448030",{"_index":2958,"title":{},"name":{},"text":{"60":{}},"component":{}}],["558404273560404778508455254030458021013656352466216690688595011803280448031",{"_index":2959,"title":{},"name":{},"text":{"60":{}},"component":{}}],["558404273560404778508455254030458021013656352466216690688595011803280448032",{"_index":2933,"title":{},"name":{},"text":{"60":{}},"component":{}}],["59664015286291125586727181187045849528930298741728639958614076589374875456",{"_index":2955,"title":{},"name":{},"text":{"60":{}},"component":{}}],["5m",{"_index":3037,"title":{},"name":{},"text":{"61":{}},"component":{}}],["6",{"_index":1391,"title":{},"name":{},"text":{"13":{},"54":{},"60":{},"61":{},"78":{}},"component":{}}],["60",{"_index":3012,"title":{},"name":{},"text":{"61":{}},"component":{}}],["600",{"_index":2956,"title":{},"name":{},"text":{"60":{}},"component":{}}],["612",{"_index":3073,"title":{},"name":{},"text":{"61":{}},"component":{}}],["619473939880410191267127038055308002651079521370507951329266275707625062498",{"_index":2946,"title":{},"name":{},"text":{"60":{}},"component":{}}],["619473939880410191267127038055308002651079521370507951329266275707625062499",{"_index":2948,"title":{},"name":{},"text":{"60":{}},"component":{}}],["64",{"_index":577,"title":{},"name":{},"text":{"4":{},"59":{}},"component":{}}],["6\\cdot16+26\\cdot4",{"_index":3060,"title":{},"name":{},"text":{"61":{}},"component":{}}],["7",{"_index":1042,"title":{},"name":{},"text":{"8":{},"60":{}},"component":{}}],["7.68",{"_index":586,"title":{},"name":{},"text":{"4":{}},"component":{}}],["726",{"_index":2260,"title":{},"name":{},"text":{"39":{}},"component":{}}],["768",{"_index":587,"title":{},"name":{},"text":{"4":{}},"component":{}}],["799",{"_index":2248,"title":{},"name":{},"text":{"39":{}},"component":{}}],["8",{"_index":2960,"title":{},"name":{},"text":{"60":{},"67":{},"70":{}},"component":{}}],["8.10",{"_index":561,"title":{},"name":{},"text":{"4":{}},"component":{}}],["81",{"_index":2618,"title":{},"name":{},"text":{"47":{}},"component":{}}],["874739451078007766457464989774322083649278607533249481151382481072868806602",{"_index":2724,"title":{},"name":{},"text":{"52":{}},"component":{}}],["895",{"_index":2020,"title":{},"name":{},"text":{"38":{}},"component":{}}],["9.00",{"_index":545,"title":{},"name":{},"text":{"4":{}},"component":{}}],["900",{"_index":2021,"title":{},"name":{},"text":{"38":{}},"component":{}}],["906096",{"_index":3265,"title":{},"name":{},"text":{"66":{}},"component":{}}],["907",{"_index":2018,"title":{},"name":{},"text":{"38":{}},"component":{}}],["908",{"_index":2024,"title":{},"name":{},"text":{"38":{}},"component":{}}],["95220",{"_index":2216,"title":{},"name":{},"text":{"39":{}},"component":{}}],["955723665991825982403667749532843665052270105995360175183368988948217233556",{"_index":2950,"title":{},"name":{},"text":{"60":{}},"component":{}}],["_",{"_index":3492,"title":{},"name":{},"text":{"72":{},"80":{}},"component":{}}],["__default__",{"_index":1150,"title":{},"name":{},"text":{"9":{}},"component":{}}],["__execute__",{"_index":2729,"title":{},"name":{},"text":{"53":{},"57":{},"67":{}},"component":{}}],["__validate__",{"_index":2393,"title":{},"name":{},"text":{"41":{},"53":{},"55":{},"57":{},"66":{},"67":{},"77":{},"80":{}},"component":{}}],["__validate_declare__",{"_index":2395,"title":{},"name":{},"text":{"41":{},"53":{},"66":{},"77":{},"80":{}},"component":{}}],["__validate_deploy__",{"_index":2394,"title":{},"name":{},"text":{"41":{},"53":{},"55":{},"66":{},"77":{},"80":{}},"component":{}}],["_h_",{"_index":3115,"title":{},"name":{},"text":{"62":{}},"component":{}}],["_{\\text{contract",{"_index":3053,"title":{},"name":{},"text":{"61":{}},"component":{}}],["_{\\text{storag",{"_index":3056,"title":{},"name":{},"text":{"61":{}},"component":{}}],["_{i=1}^n",{"_index":3398,"title":{},"name":{},"text":{"70":{}},"component":{}}],["a=index",{"_index":3353,"title":{},"name":{},"text":{"68":{}},"component":{}}],["a_1",{"_index":2687,"title":{},"name":{},"text":{"50":{}},"component":{}}],["a_2",{"_index":2690,"title":{},"name":{},"text":{"50":{}},"component":{}}],["a_3",{"_index":2698,"title":{},"name":{},"text":{"50":{}},"component":{}}],["a_n",{"_index":2688,"title":{},"name":{},"text":{"50":{}},"component":{}}],["a_n;0",{"_index":2692,"title":{},"name":{},"text":{"50":{}},"component":{}}],["a_n;\\text{had",{"_index":2699,"title":{},"name":{},"text":{"50":{}},"component":{}}],["a_n;s_1",{"_index":2693,"title":{},"name":{},"text":{"50":{}},"component":{}}],["a_{high",{"_index":2659,"title":{},"name":{},"text":{"50":{}},"component":{}}],["a_{low",{"_index":2658,"title":{},"name":{},"text":{"50":{}},"component":{}}],["abdk",{"_index":2561,"title":{},"name":{},"text":{"43":{}},"component":{}}],["abi",{"_index":1119,"title":{"72":{},"10-8":{},"72-2":{},"72-9":{},"79-2":{}},"name":{"72":{}},"text":{"9":{},"10":{},"13":{},"29":{},"39":{},"41":{},"61":{},"70":{},"72":{},"76":{},"79":{},"86":{},"87":{}},"component":{}}],["abi.encodepack",{"_index":3096,"title":{},"name":{},"text":{"62":{}},"component":{}}],["abi_hash",{"_index":3396,"title":{},"name":{},"text":{"70":{}},"component":{}}],["abil",{"_index":839,"title":{},"name":{},"text":{"7":{},"16":{},"37":{},"39":{},"62":{}},"component":{}}],["abort",{"_index":180,"title":{},"name":{},"text":{"1":{}},"component":{}}],["abov",{"_index":503,"title":{},"name":{},"text":{"4":{},"11":{},"12":{},"15":{},"41":{},"50":{},"53":{},"54":{},"60":{},"61":{},"65":{},"67":{},"68":{},"70":{},"72":{},"75":{},"78":{},"79":{}},"component":{}}],["absenc",{"_index":2730,"title":{},"name":{},"text":{"53":{}},"component":{}}],["abstract",{"_index":1,"title":{"1-1":{},"56-2":{}},"name":{},"text":{"1":{},"41":{},"49":{},"53":{},"54":{},"56":{},"86":{},"89":{}},"component":{}}],["abus",{"_index":3357,"title":{},"name":{},"text":{"68":{}},"component":{}}],["acceler",{"_index":2455,"title":{},"name":{},"text":{"41":{}},"component":{}}],["accept",{"_index":77,"title":{},"name":{},"text":{"1":{},"7":{},"9":{},"15":{},"38":{},"39":{},"41":{},"53":{},"63":{},"64":{},"66":{},"68":{}},"component":{}}],["accepted_on_l1",{"_index":1188,"title":{},"name":{},"text":{"9":{},"66":{}},"component":{}}],["accepted_on_l2",{"_index":1187,"title":{},"name":{},"text":{"9":{},"13":{},"35":{},"39":{},"41":{},"64":{},"66":{}},"component":{}}],["access",{"_index":683,"title":{},"name":{},"text":{"4":{},"7":{},"9":{},"13":{},"16":{},"18":{},"38":{},"39":{},"41":{},"55":{},"56":{},"62":{},"64":{},"76":{},"80":{}},"component":{}}],["accident",{"_index":2199,"title":{},"name":{},"text":{"39":{}},"component":{}}],["accommod",{"_index":2035,"title":{},"name":{},"text":{"38":{},"41":{},"65":{}},"component":{}}],["accord",{"_index":519,"title":{},"name":{},"text":{"4":{},"18":{},"37":{},"41":{},"53":{},"60":{},"61":{},"65":{},"68":{},"72":{},"86":{}},"component":{}}],["accordingli",{"_index":913,"title":{},"name":{},"text":{"7":{},"18":{},"41":{}},"component":{}}],["account",{"_index":0,"title":{"16":{},"53":{},"54":{},"55":{},"56":{},"1-1":{},"1-2":{},"13-12":{},"16-2":{},"16-8":{},"16-9":{},"54-1":{},"55-1":{},"56-1":{},"56-2":{},"56-3":{}},"name":{"16":{},"53":{},"55":{}},"text":{"1":{},"2":{},"9":{},"10":{},"13":{},"14":{},"16":{},"17":{},"21":{},"22":{},"24":{},"32":{},"33":{},"34":{},"35":{},"38":{},"41":{},"49":{},"53":{},"54":{},"55":{},"56":{},"58":{},"61":{},"62":{},"65":{},"66":{},"67":{},"72":{},"74":{},"77":{},"81":{},"83":{},"86":{},"88":{}},"component":{}}],["account_contract",{"_index":1193,"title":{"10-10":{}},"name":{},"text":{"10":{}},"component":{}}],["account_contract_address",{"_index":3536,"title":{},"name":{},"text":{"77":{}},"component":{}}],["account_deployment_data",{"_index":3276,"title":{},"name":{},"text":{"67":{},"77":{}},"component":{}}],["account_nam",{"_index":1149,"title":{},"name":{},"text":{"9":{}},"component":{}}],["accounts.r",{"_index":1554,"title":{},"name":{},"text":{"17":{}},"component":{}}],["account’",{"_index":2732,"title":{},"name":{},"text":{"53":{},"55":{},"56":{},"58":{},"66":{},"67":{},"80":{}},"component":{}}],["accru",{"_index":718,"title":{},"name":{},"text":{"4":{}},"component":{}}],["accumul",{"_index":1579,"title":{},"name":{},"text":{"18":{},"19":{}},"component":{}}],["accur",{"_index":1568,"title":{},"name":{},"text":{"18":{},"39":{},"64":{},"88":{}},"component":{}}],["achiev",{"_index":257,"title":{},"name":{},"text":{"1":{},"2":{},"4":{},"7":{},"39":{},"58":{},"68":{}},"component":{}}],["act",{"_index":129,"title":{},"name":{},"text":{"1":{},"6":{},"8":{},"71":{},"74":{}},"component":{}}],["action",{"_index":429,"title":{},"name":{"30":{}},"text":{"4":{},"22":{},"30":{},"34":{}},"component":{}}],["activ",{"_index":419,"title":{},"name":{},"text":{"4":{},"6":{},"13":{},"25":{},"27":{},"34":{},"41":{},"62":{},"64":{}},"component":{}}],["actor",{"_index":425,"title":{},"name":{},"text":{"4":{},"64":{}},"component":{}}],["actors—sequenc",{"_index":3172,"title":{},"name":{},"text":{"64":{}},"component":{}}],["actual",{"_index":267,"title":{},"name":{},"text":{"1":{},"4":{},"12":{},"35":{},"41":{},"61":{},"66":{},"68":{},"78":{}},"component":{}}],["actual_fe",{"_index":2884,"title":{},"name":{},"text":{"59":{},"66":{}},"component":{}}],["ad",{"_index":83,"title":{"28":{},"38-2":{},"38-7":{},"38-13":{},"38-18":{},"38-20":{},"38-24":{},"38-28":{},"38-31":{},"38-35":{},"38-42":{},"39-12":{},"39-21":{},"39-23":{},"39-27":{},"39-30":{},"39-33":{},"39-39":{},"39-47":{},"39-51":{},"39-59":{},"39-69":{}},"name":{"28":{}},"text":{"1":{},"3":{},"6":{},"9":{},"12":{},"20":{},"29":{},"38":{},"39":{},"41":{},"61":{},"62":{},"72":{},"74":{},"75":{},"76":{},"85":{},"88":{}},"component":{}}],["adapt",{"_index":1932,"title":{},"name":{},"text":{"38":{}},"component":{}}],["add",{"_index":161,"title":{},"name":{},"text":{"1":{},"7":{},"9":{},"11":{},"18":{},"24":{},"29":{},"34":{},"38":{},"39":{},"41":{},"56":{},"61":{},"62":{},"64":{},"68":{},"72":{},"76":{},"79":{}},"component":{}}],["add_mod",{"_index":2353,"title":{},"name":{},"text":{"41":{}},"component":{}}],["add_to_delegation_pool",{"_index":1582,"title":{},"name":{},"text":{"18":{},"24":{}},"component":{}}],["added_valu",{"_index":3448,"title":{},"name":{},"text":{"72":{}},"component":{}}],["addit",{"_index":226,"title":{"22-3":{},"25-8":{},"28-1":{},"29-6":{},"30-1":{},"31-1":{},"34-69":{},"34-78":{},"35-11":{},"41-9":{},"41-23":{},"55-3":{},"62-10":{},"74-4":{},"78-10":{},"79-4":{}},"name":{},"text":{"1":{},"4":{},"7":{},"26":{},"30":{},"33":{},"39":{},"41":{},"50":{},"60":{},"61":{},"67":{},"68":{},"72":{},"73":{},"76":{}},"component":{}}],["addition",{"_index":852,"title":{},"name":{},"text":{"7":{},"41":{},"65":{},"67":{}},"component":{}}],["addition/multipl",{"_index":3020,"title":{},"name":{},"text":{"61":{}},"component":{}}],["address",{"_index":236,"title":{"44":{},"46":{},"73":{},"25-4":{},"25-5":{},"25-7":{},"26-2":{},"35-1":{},"58-1":{},"65-10":{},"65-11":{},"65-12":{}},"name":{"46":{},"73":{}},"text":{"1":{},"4":{},"8":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"29":{},"32":{},"34":{},"35":{},"36":{},"38":{},"39":{},"41":{},"44":{},"46":{},"47":{},"53":{},"55":{},"56":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"65":{},"67":{},"68":{},"73":{},"74":{},"75":{},"77":{},"79":{},"80":{},"88":{}},"component":{}}],["address_domain",{"_index":3503,"title":{},"name":{},"text":{"75":{},"80":{}},"component":{}}],["adher",{"_index":811,"title":{},"name":{},"text":{"6":{},"53":{},"54":{}},"component":{}}],["adjust",{"_index":907,"title":{},"name":{},"text":{"7":{},"8":{},"18":{},"26":{},"38":{}},"component":{}}],["admin",{"_index":1748,"title":{},"name":{},"text":{"29":{}},"component":{}}],["administ",{"_index":3406,"title":{},"name":{},"text":{"71":{}},"component":{}}],["administr",{"_index":1700,"title":{},"name":{},"text":{"29":{}},"component":{}}],["adopt",{"_index":625,"title":{},"name":{},"text":{"4":{},"7":{}},"component":{}}],["advanc",{"_index":1432,"title":{},"name":{},"text":{"13":{}},"component":{}}],["advantag",{"_index":1241,"title":{},"name":{},"text":{"11":{},"16":{},"20":{},"69":{}},"component":{}}],["advic",{"_index":708,"title":{},"name":{},"text":{"4":{}},"component":{}}],["affect",{"_index":276,"title":{},"name":{},"text":{"1":{},"7":{},"9":{},"18":{},"29":{},"41":{},"60":{},"70":{},"76":{},"78":{},"80":{}},"component":{}}],["afford",{"_index":821,"title":{},"name":{},"text":{"7":{}},"component":{}}],["aforement",{"_index":1442,"title":{},"name":{},"text":{"13":{}},"component":{}}],["again",{"_index":1485,"title":{},"name":{},"text":{"15":{}},"component":{}}],["against",{"_index":1775,"title":{},"name":{},"text":{"31":{},"34":{},"41":{}},"component":{}}],["agent",{"_index":1744,"title":{},"name":{},"text":{"29":{}},"component":{}}],["aggreg",{"_index":205,"title":{},"name":{},"text":{"1":{},"7":{},"41":{},"45":{},"61":{}},"component":{}}],["aid",{"_index":761,"title":{},"name":{},"text":{"6":{}},"component":{}}],["aim",{"_index":258,"title":{},"name":{},"text":{"1":{},"2":{},"29":{},"38":{},"83":{}},"component":{}}],["air",{"_index":3323,"title":{"68-3":{}},"name":{},"text":{},"component":{}}],["aka",{"_index":536,"title":{},"name":{},"text":{"4":{}},"component":{}}],["alchemi",{"_index":1257,"title":{},"name":{},"text":{"11":{},"42":{}},"component":{}}],["algebra",{"_index":2377,"title":{},"name":{},"text":{"41":{},"50":{}},"component":{}}],["algorithm",{"_index":911,"title":{},"name":{},"text":{"7":{},"39":{},"67":{}},"component":{}}],["alic",{"_index":3106,"title":{},"name":{},"text":{"62":{}},"component":{}}],["align",{"_index":558,"title":{},"name":{},"text":{"4":{},"6":{},"38":{},"67":{}},"component":{}}],["alloc",{"_index":522,"title":{},"name":{},"text":{"4":{},"38":{},"61":{},"79":{}},"component":{}}],["alloc_loc",{"_index":3351,"title":{},"name":{},"text":{"68":{}},"component":{}}],["allot",{"_index":599,"title":{},"name":{},"text":{"4":{}},"component":{}}],["allow",{"_index":246,"title":{},"name":{},"text":{"1":{},"4":{},"8":{},"9":{},"11":{},"14":{},"15":{},"18":{},"24":{},"25":{},"27":{},"31":{},"38":{},"39":{},"41":{},"53":{},"56":{},"64":{},"67":{},"68":{},"70":{},"71":{},"72":{},"75":{},"77":{},"88":{}},"component":{}}],["along",{"_index":2276,"title":{},"name":{},"text":{"39":{},"60":{},"65":{}},"component":{}}],["alongsid",{"_index":2340,"title":{},"name":{},"text":{"41":{},"60":{}},"component":{}}],["alpha",{"_index":1104,"title":{},"name":{},"text":{"9":{},"52":{},"68":{}},"component":{}}],["alpha=1",{"_index":2654,"title":{},"name":{},"text":{"50":{}},"component":{}}],["alphabet",{"_index":1818,"title":{},"name":{},"text":{"34":{},"48":{},"63":{}},"component":{}}],["alreadi",{"_index":1072,"title":{},"name":{},"text":{"8":{},"11":{},"12":{},"16":{},"31":{},"34":{},"41":{},"58":{},"68":{},"88":{}},"component":{}}],["alter",{"_index":1419,"title":{},"name":{},"text":{"13":{}},"component":{}}],["altern",{"_index":1880,"title":{},"name":{},"text":{"37":{},"39":{}},"component":{}}],["although",{"_index":3146,"title":{},"name":{},"text":{"64":{}},"component":{}}],["altogeth",{"_index":2591,"title":{},"name":{},"text":{"45":{}},"component":{}}],["alway",{"_index":1272,"title":{},"name":{},"text":{"11":{},"41":{},"53":{},"61":{},"62":{},"67":{},"68":{},"72":{}},"component":{}}],["aminsato",{"_index":1953,"title":{},"name":{},"text":{"38":{}},"component":{}}],["amongst",{"_index":3197,"title":{},"name":{},"text":{"64":{}},"component":{}}],["amort",{"_index":844,"title":{},"name":{},"text":{"7":{}},"component":{}}],["amount",{"_index":875,"title":{},"name":{},"text":{"7":{},"8":{},"18":{},"20":{},"21":{},"24":{},"26":{},"27":{},"31":{},"32":{},"34":{},"35":{},"36":{},"47":{},"53":{},"59":{},"61":{},"63":{},"67":{},"72":{},"76":{},"77":{}},"component":{}}],["analog",{"_index":1235,"title":{},"name":{},"text":{"11":{},"12":{},"66":{},"74":{},"80":{}},"component":{}}],["analysi",{"_index":3709,"title":{"87":{}},"name":{},"text":{"87":{}},"component":{}}],["analyz",{"_index":3016,"title":{"87-1":{}},"name":{},"text":{"61":{},"87":{},"89":{}},"component":{}}],["and/or",{"_index":636,"title":{},"name":{},"text":{"4":{}},"component":{}}],["annot",{"_index":3101,"title":{},"name":{},"text":{"62":{},"72":{},"76":{}},"component":{}}],["announc",{"_index":551,"title":{},"name":{},"text":{"4":{},"37":{},"45":{}},"component":{}}],["annual",{"_index":1594,"title":{},"name":{},"text":{"18":{},"26":{}},"component":{}}],["anoth",{"_index":1237,"title":{},"name":{},"text":{"11":{},"18":{},"27":{},"30":{},"34":{},"53":{},"56":{},"62":{},"65":{},"66":{},"72":{},"73":{},"80":{}},"component":{}}],["anotherenum",{"_index":3469,"title":{},"name":{},"text":{"72":{}},"component":{}}],["anotherenum::var2",{"_index":3471,"title":{},"name":{},"text":{"72":{}},"component":{}}],["anvil",{"_index":3740,"title":{},"name":{},"text":{"89":{}},"component":{}}],["anyon",{"_index":1841,"title":{},"name":{},"text":{"34":{},"35":{},"60":{},"64":{}},"component":{}}],["anyone’",{"_index":638,"title":{},"name":{},"text":{"4":{}},"component":{}}],["anyth",{"_index":3377,"title":{},"name":{},"text":{"69":{},"88":{}},"component":{}}],["anywher",{"_index":3474,"title":{},"name":{},"text":{"72":{}},"component":{}}],["ap",{"_index":2494,"title":{},"name":{},"text":{"41":{}},"component":{}}],["api",{"_index":3,"title":{"42":{},"1-3":{},"39-43":{},"41-4":{},"41-14":{},"41-15":{},"41-16":{},"58-8":{}},"name":{"42":{}},"text":{"1":{},"2":{},"6":{},"16":{},"34":{},"36":{},"37":{},"38":{},"39":{},"41":{},"42":{},"46":{},"62":{},"64":{},"67":{},"86":{},"89":{}},"component":{}}],["api/starknet",{"_index":2528,"title":{},"name":{},"text":{"42":{}},"component":{}}],["apibara",{"_index":3687,"title":{},"name":{},"text":{"84":{}},"component":{}}],["app",{"_index":1864,"title":{},"name":{},"text":{"35":{},"45":{},"82":{}},"component":{}}],["appear",{"_index":735,"title":{},"name":{},"text":{"6":{},"7":{},"8":{},"13":{},"31":{},"34":{},"39":{},"41":{},"61":{},"62":{},"67":{},"72":{},"77":{},"78":{},"79":{},"80":{}},"component":{}}],["append",{"_index":3119,"title":{},"name":{},"text":{"62":{}},"component":{}}],["appli",{"_index":1148,"title":{},"name":{},"text":{"9":{},"39":{},"41":{},"53":{},"59":{},"61":{},"66":{},"69":{}},"component":{}}],["applic",{"_index":541,"title":{},"name":{},"text":{"4":{},"6":{},"8":{},"9":{},"30":{},"41":{},"61":{},"82":{},"83":{},"84":{}},"component":{}}],["approach",{"_index":856,"title":{},"name":{"54":{}},"text":{"7":{},"16":{},"20":{},"29":{},"64":{}},"component":{}}],["appropri",{"_index":894,"title":{},"name":{},"text":{"7":{},"19":{},"53":{},"67":{}},"component":{}}],["approv",{"_index":501,"title":{},"name":{},"text":{"4":{},"13":{},"21":{},"24":{},"67":{},"72":{}},"component":{}}],["approxim",{"_index":1438,"title":{},"name":{},"text":{"13":{},"31":{},"34":{},"41":{}},"component":{}}],["april",{"_index":582,"title":{"41-10":{}},"name":{},"text":{"4":{},"37":{}},"component":{}}],["arbitrari",{"_index":2365,"title":{},"name":{},"text":{"41":{},"50":{},"53":{},"54":{},"80":{}},"component":{}}],["architectur",{"_index":57,"title":{"5":{},"18":{},"29":{},"64":{},"2-3":{},"7-3":{},"8-1":{},"18-1":{}},"name":{"18":{},"29":{},"64":{}},"text":{"1":{},"2":{},"7":{},"18":{},"21":{},"22":{},"25":{},"26":{},"27":{},"28":{},"49":{},"64":{},"65":{},"68":{},"71":{},"79":{}},"component":{}}],["area",{"_index":783,"title":{},"name":{},"text":{"6":{}},"component":{}}],["aren’t",{"_index":3185,"title":{},"name":{},"text":{"64":{}},"component":{}}],["arg",{"_index":3510,"title":{},"name":{},"text":{"75":{}},"component":{}}],["argent",{"_index":1429,"title":{"16-6":{}},"name":{},"text":{"13":{},"16":{},"21":{},"84":{}},"component":{}}],["argentx",{"_index":3692,"title":{},"name":{},"text":{"84":{}},"component":{}}],["argument",{"_index":1124,"title":{"10-4":{},"10-6":{},"80-4":{},"80-11":{},"80-18":{},"80-24":{},"80-30":{},"80-37":{},"80-43":{},"80-50":{},"80-56":{},"80-63":{}},"name":{},"text":{"9":{},"10":{},"12":{},"13":{},"15":{},"39":{},"41":{},"53":{},"55":{},"58":{},"65":{},"67":{},"75":{},"76":{},"78":{},"80":{}},"component":{}}],["aris",{"_index":1743,"title":{},"name":{},"text":{"29":{}},"component":{}}],["arithmet",{"_index":3231,"title":{},"name":{},"text":{"65":{},"69":{}},"component":{}}],["around",{"_index":2491,"title":{},"name":{},"text":{"41":{},"64":{}},"component":{}}],["arr",{"_index":3611,"title":{},"name":{},"text":{"79":{}},"component":{}}],["arr_len",{"_index":3610,"title":{},"name":{},"text":{"79":{}},"component":{}}],["array",{"_index":1838,"title":{"50-6":{},"78-6":{},"78-9":{}},"name":{},"text":{"34":{},"38":{},"41":{},"47":{},"50":{},"58":{},"60":{},"61":{},"62":{},"68":{},"70":{},"72":{},"73":{},"78":{},"79":{},"80":{}},"component":{}}],["array!['key",{"_index":3605,"title":{},"name":{},"text":{"79":{},"80":{}},"component":{}}],["array![1",{"_index":3606,"title":{},"name":{},"text":{"79":{},"80":{}},"component":{}}],["array![10",{"_index":3566,"title":{},"name":{},"text":{"78":{}},"component":{}}],["array_ptr",{"_index":3347,"title":{},"name":{},"text":{"68":{}},"component":{}}],["arraytrait::new",{"_index":3084,"title":{},"name":{},"text":{"62":{},"80":{}},"component":{}}],["artifact",{"_index":1400,"title":{},"name":{},"text":{"13":{}},"component":{}}],["ascii",{"_index":2156,"title":{},"name":{},"text":{"39":{},"62":{},"65":{},"67":{},"70":{},"73":{},"75":{},"78":{},"79":{}},"component":{}}],["asdf",{"_index":3744,"title":{},"name":{},"text":{"90":{}},"component":{}}],["aspect",{"_index":1561,"title":{},"name":{},"text":{"18":{},"20":{},"25":{},"88":{}},"component":{}}],["assembl",{"_index":1300,"title":{},"name":{},"text":{"12":{},"41":{},"50":{},"65":{},"68":{},"70":{},"71":{}},"component":{}}],["assert",{"_index":1394,"title":{},"name":{},"text":{"13":{},"53":{},"61":{},"68":{},"79":{}},"component":{}}],["assert_nn_l",{"_index":3352,"title":{},"name":{},"text":{"68":{}},"component":{}}],["asset",{"_index":415,"title":{},"name":{},"text":{"4":{},"56":{},"62":{}},"component":{}}],["assign",{"_index":1303,"title":{},"name":{},"text":{"12":{},"13":{},"18":{},"26":{}},"component":{}}],["assist",{"_index":1038,"title":{},"name":{},"text":{"8":{},"90":{}},"component":{}}],["associ",{"_index":613,"title":{},"name":{},"text":{"4":{},"7":{},"8":{},"9":{},"18":{},"19":{},"20":{},"21":{},"25":{},"27":{},"29":{},"35":{},"37":{},"56":{},"60":{},"61":{},"63":{},"68":{},"70":{},"72":{},"80":{}},"component":{}}],["assum",{"_index":2741,"title":{},"name":{},"text":{"53":{},"61":{}},"component":{}}],["assumpt",{"_index":235,"title":{},"name":{},"text":{"1":{},"61":{},"64":{}},"component":{}}],["assur",{"_index":628,"title":{},"name":{},"text":{"4":{},"66":{}},"component":{}}],["asymmetr",{"_index":3081,"title":{},"name":{},"text":{"62":{}},"component":{}}],["asynchron",{"_index":3080,"title":{},"name":{},"text":{"62":{},"64":{}},"component":{}}],["atom",{"_index":3006,"title":{},"name":{},"text":{"61":{}},"component":{}}],["attach",{"_index":1825,"title":{},"name":{},"text":{"34":{},"62":{}},"component":{}}],["attack",{"_index":652,"title":{"68-3":{}},"name":{},"text":{"4":{},"31":{},"34":{},"53":{},"62":{},"68":{},"73":{}},"component":{}}],["attacker’",{"_index":2754,"title":{},"name":{},"text":{"53":{}},"component":{}}],["attempt",{"_index":1328,"title":{},"name":{},"text":{"12":{},"24":{},"27":{}},"component":{}}],["attent",{"_index":340,"title":{},"name":{},"text":{"3":{}},"component":{}}],["attest",{"_index":935,"title":{},"name":{},"text":{"8":{}},"component":{}}],["attract",{"_index":643,"title":{},"name":{},"text":{"4":{}},"component":{}}],["attribut",{"_index":1823,"title":{"63-69":{},"63-73":{},"63-77":{},"63-81":{}},"name":{},"text":{"34":{},"72":{},"75":{},"76":{},"78":{}},"component":{}}],["audit",{"_index":311,"title":{"43":{}},"name":{"43":{}},"text":{"2":{},"43":{}},"component":{}}],["auditor",{"_index":3182,"title":{},"name":{},"text":{"64":{}},"component":{}}],["aug",{"_index":2315,"title":{"41-28":{}},"name":{},"text":{},"component":{}}],["auger",{"_index":2175,"title":{},"name":{},"text":{"39":{}},"component":{}}],["augment",{"_index":2651,"title":{},"name":{},"text":{"50":{}},"component":{}}],["august",{"_index":2302,"title":{"41-2":{}},"name":{},"text":{},"component":{}}],["authent",{"_index":2451,"title":{},"name":{},"text":{"41":{}},"component":{}}],["author",{"_index":1598,"title":{},"name":{},"text":{"18":{},"19":{},"39":{}},"component":{}}],["autoformatt",{"_index":2471,"title":{},"name":{},"text":{"41":{}},"component":{}}],["autom",{"_index":1755,"title":{},"name":{"30":{}},"text":{"29":{},"38":{},"62":{}},"component":{}}],["automat",{"_index":1627,"title":{},"name":{},"text":{"22":{},"29":{},"41":{},"45":{},"62":{},"75":{},"79":{}},"component":{}}],["auxiliari",{"_index":1050,"title":{},"name":{},"text":{"8":{}},"component":{}}],["avail",{"_index":462,"title":{"60":{},"60-2":{},"60-3":{},"60-6":{}},"name":{"60":{}},"text":{"4":{},"7":{},"8":{},"11":{},"13":{},"14":{},"18":{},"25":{},"34":{},"36":{},"37":{},"39":{},"41":{},"49":{},"53":{},"60":{},"61":{},"63":{},"64":{},"67":{},"68":{},"77":{},"80":{}},"component":{}}],["averag",{"_index":2459,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["avnu",{"_index":2597,"title":{},"name":{},"text":{"45":{}},"component":{}}],["avoid",{"_index":1027,"title":{},"name":{},"text":{"8":{},"16":{},"62":{},"71":{},"72":{}},"component":{}}],["aw",{"_index":2555,"title":{},"name":{},"text":{"42":{}},"component":{}}],["await",{"_index":3082,"title":{},"name":{},"text":{"62":{}},"component":{}}],["awar",{"_index":699,"title":{},"name":{},"text":{"4":{},"7":{},"35":{},"53":{},"62":{},"63":{},"67":{},"68":{}},"component":{}}],["away",{"_index":3369,"title":{},"name":{},"text":{"68":{}},"component":{}}],["b",{"_index":2656,"title":{},"name":{},"text":{"50":{},"78":{}},"component":{}}],["b=n_elm",{"_index":3354,"title":{},"name":{},"text":{"68":{}},"component":{}}],["b_{high",{"_index":2661,"title":{},"name":{},"text":{"50":{}},"component":{}}],["b_{low",{"_index":2660,"title":{},"name":{},"text":{"50":{}},"component":{}}],["back",{"_index":831,"title":{},"name":{},"text":{"7":{},"8":{},"18":{},"22":{},"35":{},"61":{}},"component":{}}],["backbon",{"_index":3154,"title":{},"name":{},"text":{"64":{}},"component":{}}],["backend",{"_index":813,"title":{"7-3":{}},"name":{},"text":{"7":{}},"component":{}}],["backfil",{"_index":3714,"title":{},"name":{},"text":{"87":{}},"component":{}}],["backup",{"_index":1160,"title":{},"name":{},"text":{"9":{}},"component":{}}],["backward",{"_index":1696,"title":{},"name":{},"text":{"29":{},"34":{},"35":{},"41":{},"72":{}},"component":{}}],["balanc",{"_index":759,"title":{},"name":{},"text":{"6":{},"18":{},"21":{},"23":{},"24":{},"26":{},"27":{},"34":{},"35":{},"36":{},"61":{},"66":{},"75":{},"77":{}},"component":{}}],["balance.cairo",{"_index":1348,"title":{},"name":{},"text":{"13":{}},"component":{}}],["balance_of",{"_index":3444,"title":{},"name":{},"text":{"72":{}},"component":{}}],["bar",{"_index":381,"title":{},"name":{},"text":{"3":{}},"component":{}}],["base",{"_index":148,"title":{},"name":{},"text":{"1":{},"4":{},"12":{},"18":{},"21":{},"26":{},"27":{},"38":{},"41":{},"46":{},"49":{},"50":{},"60":{},"61":{},"64":{},"65":{},"67":{},"72":{},"77":{},"78":{},"88":{}},"component":{}}],["basi",{"_index":705,"title":{},"name":{},"text":{"4":{},"41":{},"47":{}},"component":{}}],["basic",{"_index":317,"title":{"9-1":{}},"name":{},"text":{"2":{},"56":{},"71":{},"75":{},"89":{}},"component":{}}],["batch",{"_index":3164,"title":{},"name":{},"text":{"64":{}},"component":{}}],["be",{"_index":42,"title":{},"name":{},"text":{"1":{},"6":{},"7":{},"8":{},"9":{},"37":{},"38":{},"39":{},"41":{},"45":{},"53":{},"62":{},"68":{},"72":{},"77":{},"80":{},"85":{}},"component":{}}],["becom",{"_index":1066,"title":{"21":{}},"name":{},"text":{"8":{},"13":{},"41":{},"64":{},"65":{},"67":{},"71":{}},"component":{}}],["befor",{"_index":199,"title":{},"name":{},"text":{"1":{},"4":{},"9":{},"13":{},"16":{},"18":{},"22":{},"24":{},"27":{},"29":{},"31":{},"35":{},"38":{},"39":{},"41":{},"53":{},"56":{},"60":{},"62":{},"66":{},"67":{},"68":{},"72":{}},"component":{}}],["began",{"_index":2826,"title":{},"name":{},"text":{"59":{}},"component":{}}],["begin",{"_index":1456,"title":{},"name":{},"text":{"14":{},"20":{},"21":{},"31":{},"32":{},"34":{},"35":{},"50":{},"64":{}},"component":{}}],["begin{align",{"_index":1649,"title":{},"name":{},"text":{"26":{},"52":{},"59":{},"61":{}},"component":{}}],["begin{cas",{"_index":2696,"title":{},"name":{},"text":{"50":{},"65":{}},"component":{}}],["begin{split}g",{"_index":2723,"title":{},"name":{},"text":{"52":{}},"component":{}}],["behav",{"_index":2756,"title":{},"name":{},"text":{"53":{},"68":{},"80":{},"83":{}},"component":{}}],["behavior",{"_index":106,"title":{},"name":{},"text":{"1":{},"38":{},"56":{},"65":{}},"component":{}}],["behind",{"_index":1679,"title":{},"name":{},"text":{"26":{}},"component":{}}],["below",{"_index":529,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"8":{},"11":{},"12":{},"15":{},"41":{},"43":{},"53":{},"59":{},"60":{},"66":{},"68":{},"75":{},"78":{},"79":{}},"component":{}}],["benefit",{"_index":837,"title":{},"name":{},"text":{"7":{}},"component":{}}],["beosin",{"_index":2563,"title":{},"name":{},"text":{"43":{}},"component":{}}],["beosin.com",{"_index":2564,"title":{},"name":{},"text":{"43":{}},"component":{}}],["besid",{"_index":1702,"title":{},"name":{},"text":{"29":{}},"component":{}}],["best",{"_index":2612,"title":{},"name":{},"text":{"47":{},"90":{}},"component":{}}],["beta",{"_index":2653,"title":{},"name":{},"text":{"50":{},"52":{},"84":{}},"component":{}}],["better",{"_index":321,"title":{},"name":{},"text":{"2":{},"7":{},"11":{},"26":{},"38":{},"41":{},"64":{},"68":{}},"component":{}}],["between",{"_index":212,"title":{},"name":{},"text":{"1":{},"3":{},"6":{},"8":{},"17":{},"26":{},"34":{},"35":{},"39":{},"41":{},"45":{},"47":{},"55":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"68":{},"70":{},"71":{},"72":{},"74":{},"80":{}},"component":{}}],["beyond",{"_index":3249,"title":{},"name":{},"text":{"65":{}},"component":{}}],["big",{"_index":2250,"title":{},"name":{},"text":{"39":{},"41":{},"50":{},"59":{},"62":{}},"component":{}}],["bigg",{"_index":2965,"title":{},"name":{},"text":{"61":{}},"component":{}}],["billion",{"_index":511,"title":{},"name":{},"text":{"4":{}},"component":{}}],["bin",{"_index":3416,"title":{},"name":{},"text":{"72":{}},"component":{}}],["bin/katana",{"_index":1542,"title":{},"name":{},"text":{"17":{}},"component":{}}],["binari",{"_index":2834,"title":{},"name":{},"text":{"59":{},"65":{},"78":{}},"component":{}}],["bit",{"_index":1762,"title":{"78-1":{},"78-2":{}},"name":{},"text":{"30":{},"38":{},"43":{},"50":{},"59":{},"60":{},"65":{},"67":{},"78":{}},"component":{}}],["bitcoin",{"_index":3152,"title":{},"name":{},"text":{"64":{}},"component":{}}],["bits}}}_{\\text{lsb",{"_index":2929,"title":{},"name":{},"text":{"60":{}},"component":{}}],["bitwis",{"_index":2369,"title":{},"name":{},"text":{"41":{},"61":{},"69":{}},"component":{}}],["blake2s.cairo",{"_index":2523,"title":{},"name":{},"text":{"41":{}},"component":{}}],["blast",{"_index":2526,"title":{},"name":{},"text":{"42":{}},"component":{}}],["blend",{"_index":1753,"title":{},"name":{},"text":{"29":{}},"component":{}}],["blob",{"_index":2391,"title":{"61-2":{}},"name":{},"text":{"41":{},"59":{},"60":{},"61":{}},"component":{}}],["blobdata",{"_index":2409,"title":{},"name":{},"text":{"41":{},"60":{}},"component":{}}],["block",{"_index":4,"title":{"48":{},"59":{},"1-4":{},"35-6":{},"35-9":{},"41-13":{},"59-1":{}},"name":{"48":{},"59":{}},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"9":{},"11":{},"12":{},"13":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{},"32":{},"34":{},"35":{},"36":{},"38":{},"39":{},"41":{},"47":{},"48":{},"53":{},"57":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"71":{},"77":{},"79":{},"80":{},"83":{},"88":{}},"component":{}}],["block_download",{"_index":2145,"title":{},"name":{},"text":{"39":{}},"component":{}}],["block_hash",{"_index":1120,"title":{},"name":{},"text":{"9":{},"66":{}},"component":{}}],["block_head",{"_index":2408,"title":{},"name":{},"text":{"41":{}},"component":{}}],["block_info",{"_index":3533,"title":{},"name":{},"text":{"77":{},"80":{}},"component":{}}],["block_info.block_numb",{"_index":3637,"title":{},"name":{},"text":{"80":{}},"component":{}}],["block_lat",{"_index":2144,"title":{},"name":{},"text":{"39":{}},"component":{}}],["block_numb",{"_index":1121,"title":{},"name":{},"text":{"9":{},"41":{},"53":{},"59":{},"66":{},"77":{},"80":{}},"component":{}}],["block_process",{"_index":2148,"title":{},"name":{},"text":{"39":{}},"component":{}}],["block_tim",{"_index":2141,"title":{},"name":{},"text":{"39":{}},"component":{}}],["block_timestamp",{"_index":2396,"title":{},"name":{},"text":{"41":{},"53":{},"59":{},"77":{},"80":{}},"component":{}}],["blockchain",{"_index":149,"title":{},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"11":{},"38":{},"39":{},"48":{},"56":{},"64":{},"86":{}},"component":{}}],["blockhash",{"_index":2466,"title":{},"name":{},"text":{"41":{}},"component":{}}],["blockifi",{"_index":1918,"title":{},"name":{},"text":{"38":{},"41":{},"47":{}},"component":{}}],["blockinfo",{"_index":3530,"title":{"77-2":{}},"name":{},"text":{"77":{}},"component":{}}],["blockpack",{"_index":2337,"title":{},"name":{},"text":{"41":{}},"component":{}}],["blockpi",{"_index":2529,"title":{},"name":{},"text":{"42":{}},"component":{}}],["block’",{"_index":2147,"title":{},"name":{},"text":{"39":{},"59":{}},"component":{}}],["blogpost",{"_index":3727,"title":{},"name":{},"text":{"88":{}},"component":{}}],["blueprint",{"_index":1233,"title":{},"name":{},"text":{"11":{},"12":{}},"component":{}}],["bmod",{"_index":3517,"title":{},"name":{},"text":{"75":{}},"component":{}}],["board",{"_index":85,"title":{},"name":{},"text":{"1":{}},"component":{}}],["bodi",{"_index":3523,"title":{},"name":{},"text":{"76":{}},"component":{}}],["bold",{"_index":330,"title":{},"name":{},"text":{"3":{}},"component":{}}],["book",{"_index":307,"title":{"49":{}},"name":{"49":{}},"text":{"2":{},"6":{},"7":{},"8":{},"11":{},"13":{},"49":{},"55":{},"62":{},"81":{},"86":{}},"component":{}}],["book.starkli.r",{"_index":1458,"title":{},"name":{},"text":{"14":{}},"component":{}}],["bool",{"_index":2801,"title":{},"name":{},"text":{"58":{},"72":{},"76":{},"80":{}},"component":{}}],["boolean",{"_index":2508,"title":{},"name":{},"text":{"41":{},"58":{}},"component":{}}],["boost",{"_index":805,"title":{},"name":{},"text":{"6":{},"7":{}},"component":{}}],["bootload",{"_index":1028,"title":{},"name":{},"text":{"8":{}},"component":{}}],["both",{"_index":1431,"title":{},"name":{},"text":{"13":{},"16":{},"22":{},"25":{},"26":{},"39":{},"41":{},"60":{},"61":{},"62":{},"64":{},"72":{},"75":{},"78":{},"89":{}},"component":{}}],["bottleneck",{"_index":3178,"title":{},"name":{},"text":{"64":{}},"component":{}}],["bound",{"_index":2777,"title":{},"name":{},"text":{"54":{},"61":{},"67":{}},"component":{}}],["box",{"_index":3534,"title":{},"name":{},"text":{"77":{}},"component":{}}],["braavo",{"_index":1430,"title":{"16-7":{}},"name":{},"text":{"13":{},"16":{},"21":{},"84":{}},"component":{}}],["bracket",{"_index":373,"title":{},"name":{},"text":{"3":{}},"component":{}}],["break",{"_index":2025,"title":{"39-70":{}},"name":{},"text":{"38":{},"39":{},"41":{},"50":{}},"component":{}}],["breakdown",{"_index":1332,"title":{"13-5":{}},"name":{},"text":{},"component":{}}],["breviti",{"_index":3358,"title":{},"name":{},"text":{"68":{},"72":{}},"component":{}}],["bridg",{"_index":1687,"title":{"35":{},"44":{},"29-2":{},"29-4":{}},"name":{"30":{},"44":{}},"text":{"28":{},"29":{},"32":{},"34":{},"35":{},"36":{},"41":{},"44":{},"45":{},"46":{},"47":{},"62":{},"67":{},"84":{}},"component":{}}],["bridged_token",{"_index":1739,"title":{},"name":{},"text":{"29":{}},"component":{}}],["bridge’",{"_index":1826,"title":{},"name":{},"text":{"34":{}},"component":{}}],["bring",{"_index":1295,"title":{},"name":{},"text":{"12":{},"56":{}},"component":{}}],["broad",{"_index":1752,"title":{},"name":{},"text":{"29":{}},"component":{}}],["broadcast",{"_index":146,"title":{},"name":{},"text":{"1":{},"6":{},"67":{}},"component":{}}],["broader",{"_index":3624,"title":{},"name":{},"text":{"80":{}},"component":{}}],["browser",{"_index":1434,"title":{},"name":{},"text":{"13":{},"84":{},"88":{}},"component":{}}],["btc",{"_index":1719,"title":{},"name":{},"text":{"29":{}},"component":{}}],["bug",{"_index":676,"title":{},"name":{},"text":{"4":{},"39":{},"41":{},"62":{}},"component":{}}],["bugfix",{"_index":2212,"title":{},"name":{},"text":{"39":{}},"component":{}}],["build",{"_index":203,"title":{},"name":{},"text":{"1":{},"11":{},"12":{},"14":{},"38":{},"39":{},"43":{},"47":{},"59":{},"82":{},"84":{},"86":{},"88":{}},"component":{}}],["builder",{"_index":621,"title":{"89-3":{}},"name":{},"text":{"4":{},"89":{}},"component":{}}],["built",{"_index":68,"title":{},"name":{},"text":{"1":{},"2":{},"8":{},"9":{},"17":{},"67":{},"82":{},"84":{}},"component":{}}],["builtin",{"_index":5,"title":{"69":{},"1-5":{},"61-12":{},"61-13":{}},"name":{"69":{}},"text":{"41":{},"53":{},"61":{},"66":{},"69":{}},"component":{}}],["builtin_account",{"_index":1553,"title":{},"name":{},"text":{"17":{}},"component":{}}],["builtin_instance_count",{"_index":2351,"title":{},"name":{},"text":{"41":{}},"component":{}}],["bulk",{"_index":2202,"title":{},"name":{},"text":{"39":{}},"component":{}}],["bundl",{"_index":174,"title":{},"name":{},"text":{"1":{},"39":{},"64":{},"89":{}},"component":{}}],["burn",{"_index":1855,"title":{},"name":{},"text":{"34":{},"35":{},"36":{}},"component":{}}],["button",{"_index":334,"title":{},"name":{},"text":{"3":{},"13":{}},"component":{}}],["buy",{"_index":703,"title":{},"name":{},"text":{"4":{}},"component":{}}],["byte",{"_index":113,"title":{"78-9":{}},"name":{},"text":{"1":{},"9":{},"47":{},"60":{},"61":{},"62":{},"70":{},"74":{},"78":{}},"component":{}}],["bytearray",{"_index":3555,"title":{},"name":{},"text":{"78":{}},"component":{}}],["bytecod",{"_index":1144,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"41":{},"47":{},"61":{},"70":{}},"component":{}}],["byteorder=\"big",{"_index":3319,"title":{},"name":{},"text":{"67":{}},"component":{}}],["bytes31",{"_index":3547,"title":{},"name":{},"text":{"78":{}},"component":{}}],["bytes32",{"_index":3136,"title":{},"name":{},"text":{"63":{}},"component":{}}],["c",{"_index":1234,"title":{},"name":{},"text":{"11":{},"26":{},"41":{},"50":{},"78":{}},"component":{}}],["c_1",{"_index":2851,"title":{},"name":{},"text":{"59":{}},"component":{}}],["c_n",{"_index":2852,"title":{},"name":{},"text":{"59":{}},"component":{}}],["cach",{"_index":1916,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["cairo",{"_index":6,"title":{"68":{},"69":{},"76":{},"78":{},"90":{},"1-6":{},"1-7":{},"13-4":{},"41-7":{},"41-26":{},"68-5":{},"70-1":{},"70-2":{},"72-3":{},"72-8":{},"88-1":{},"89-7":{},"89-9":{}},"name":{"68":{},"69":{},"78":{}},"text":{"1":{},"2":{},"6":{},"7":{},"8":{},"9":{},"10":{},"13":{},"14":{},"29":{},"37":{},"38":{},"39":{},"41":{},"45":{},"47":{},"49":{},"50":{},"51":{},"53":{},"55":{},"58":{},"60":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"81":{},"85":{},"88":{},"89":{},"90":{}},"component":{}}],["cairo0",{"_index":2590,"title":{},"name":{},"text":{"45":{}},"component":{}}],["cairo1",{"_index":3623,"title":{},"name":{"80":{}},"text":{},"component":{}}],["cairo1.0",{"_index":2490,"title":{},"name":{},"text":{"41":{}},"component":{}}],["cairo_depend",{"_index":1200,"title":{"10-19":{}},"name":{},"text":{"10":{}},"component":{}}],["cairo_path",{"_index":1196,"title":{"10-14":{}},"name":{},"text":{"10":{}},"component":{}}],["cairobootloaderprogram",{"_index":953,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cairoresourcefeeweight",{"_index":2981,"title":{},"name":{},"text":{"61":{}},"component":{}}],["cairoresourceusag",{"_index":3036,"title":{},"name":{},"text":{"61":{}},"component":{}}],["cairozero",{"_index":1891,"title":{},"name":{},"text":{"37":{},"69":{}},"component":{}}],["cairo’",{"_index":3018,"title":{},"name":{},"text":{"61":{}},"component":{}}],["calcul",{"_index":95,"title":{"61-10":{},"61-11":{},"61-14":{},"67-4":{},"67-6":{},"67-7":{},"67-10":{},"67-12":{},"67-14":{},"67-15":{},"67-18":{},"67-20":{},"67-21":{}},"name":{},"text":{"1":{},"8":{},"18":{},"26":{},"38":{},"51":{},"58":{},"61":{},"62":{},"64":{},"66":{},"67":{},"75":{}},"component":{}}],["calculate_staking_reward",{"_index":1592,"title":{},"name":{},"text":{"18":{}},"component":{}}],["call",{"_index":56,"title":{"80":{},"9-4":{},"15-4":{},"35-4":{}},"name":{"80":{}},"text":{"1":{},"8":{},"9":{},"13":{},"15":{},"24":{},"25":{},"29":{},"30":{},"31":{},"34":{},"35":{},"37":{},"38":{},"39":{},"41":{},"47":{},"53":{},"56":{},"57":{},"58":{},"62":{},"63":{},"65":{},"67":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"79":{},"80":{},"81":{},"88":{},"89":{}},"component":{}}],["call_contract",{"_index":3622,"title":{"80-15":{}},"name":{},"text":{"80":{}},"component":{}}],["call_contract_syscal",{"_index":3638,"title":{},"name":{},"text":{"80":{}},"component":{}}],["callabl",{"_index":3388,"title":{},"name":{},"text":{"70":{}},"component":{}}],["callback",{"_index":1763,"title":{},"name":{},"text":{"30":{},"34":{}},"component":{}}],["calldata",{"_index":1415,"title":{"41-19":{},"61-3":{},"61-19":{}},"name":{},"text":{"13":{},"34":{},"41":{},"47":{},"53":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"66":{},"67":{},"77":{},"78":{},"80":{}},"component":{}}],["calldata.span",{"_index":2812,"title":{},"name":{},"text":{"58":{}},"component":{}}],["caller",{"_index":1392,"title":{},"name":{},"text":{"13":{},"19":{},"24":{},"63":{},"80":{},"88":{}},"component":{}}],["caller_address",{"_index":3251,"title":{},"name":{},"text":{"65":{},"77":{}},"component":{}}],["caller’",{"_index":1819,"title":{},"name":{},"text":{"34":{}},"component":{}}],["callproxi",{"_index":947,"title":{},"name":{},"text":{"8":{}},"component":{}}],["came",{"_index":1872,"title":{},"name":{},"text":{"35":{}},"component":{}}],["cancel",{"_index":1770,"title":{"31":{},"62-5":{}},"name":{"31":{}},"text":{"31":{},"34":{},"38":{},"62":{},"63":{}},"component":{}}],["cancell1tol2messag",{"_index":3111,"title":{"63-2":{}},"name":{},"text":{"62":{},"63":{}},"component":{}}],["canon",{"_index":3342,"title":{},"name":{},"text":{"68":{}},"component":{}}],["can’t",{"_index":2265,"title":{},"name":{},"text":{"39":{},"80":{}},"component":{}}],["cap",{"_index":1677,"title":{},"name":{},"text":{"26":{}},"component":{}}],["capabl",{"_index":37,"title":{},"name":{},"text":{"1":{},"4":{},"13":{},"37":{},"64":{},"65":{}},"component":{}}],["capac",{"_index":3163,"title":{},"name":{},"text":{"64":{}},"component":{}}],["capit",{"_index":1602,"title":{},"name":{},"text":{"20":{}},"component":{}}],["car",{"_index":858,"title":{},"name":{},"text":{"7":{}},"component":{}}],["care",{"_index":3543,"title":{},"name":{},"text":{"78":{}},"component":{}}],["cargo",{"_index":1514,"title":{},"name":{},"text":{"17":{},"72":{},"88":{}},"component":{}}],["carri",{"_index":634,"title":{},"name":{},"text":{"4":{}},"component":{}}],["case",{"_index":890,"title":{},"name":{},"text":{"7":{},"9":{},"11":{},"34":{},"36":{},"59":{},"60":{},"61":{},"62":{},"64":{},"68":{},"72":{}},"component":{}}],["casm",{"_index":213,"title":{"68-1":{},"68-4":{}},"name":{},"text":{"1":{},"13":{},"39":{},"41":{},"61":{},"65":{},"68":{},"70":{},"71":{},"89":{}},"component":{}}],["cast",{"_index":3659,"title":{},"name":{},"text":{"81":{},"88":{}},"component":{}}],["cat",{"_index":1498,"title":{},"name":{},"text":{"16":{}},"component":{}}],["catcher",{"_index":895,"title":{},"name":{},"text":{"7":{}},"component":{}}],["categor",{"_index":743,"title":{},"name":{},"text":{"6":{}},"component":{}}],["categori",{"_index":3730,"title":{},"name":{},"text":{"89":{}},"component":{}}],["cater",{"_index":2630,"title":{},"name":{},"text":{"49":{}},"component":{}}],["caught",{"_index":3640,"title":{},"name":{},"text":{"80":{}},"component":{}}],["caus",{"_index":677,"title":{},"name":{},"text":{"4":{},"38":{},"39":{},"53":{},"61":{},"62":{}},"component":{}}],["caveat",{"_index":2288,"title":{},"name":{},"text":{"39":{}},"component":{}}],["cd",{"_index":1251,"title":{},"name":{},"text":{"11":{},"17":{}},"component":{}}],["cdot",{"_index":2664,"title":{},"name":{},"text":{"50":{},"52":{},"61":{},"66":{}},"component":{}}],["cdot\\sum\\limits_{i=1}^t",{"_index":2999,"title":{},"name":{},"text":{"61":{}},"component":{}}],["cdot]_j",{"_index":2683,"title":{},"name":{},"text":{"50":{}},"component":{}}],["cell",{"_index":33,"title":{"1-27":{}},"name":{},"text":{"1":{},"60":{},"61":{},"69":{}},"component":{}}],["censorship",{"_index":449,"title":{},"name":{},"text":{"4":{}},"component":{}}],["central",{"_index":1562,"title":{},"name":{},"text":{"18":{}},"component":{}}],["certain",{"_index":408,"title":{},"name":{},"text":{"4":{},"13":{},"39":{},"47":{},"68":{},"69":{}},"component":{}}],["chain",{"_index":195,"title":{"67-24":{}},"name":{},"text":{"1":{},"4":{},"17":{},"39":{},"43":{},"59":{},"67":{},"70":{},"73":{},"77":{},"83":{},"86":{},"88":{}},"component":{}}],["chain_id",{"_index":3117,"title":{},"name":{},"text":{"62":{},"67":{},"77":{}},"component":{}}],["chainbas",{"_index":2531,"title":{},"name":{},"text":{"42":{}},"component":{}}],["chainsecurity.com",{"_index":2565,"title":{},"name":{},"text":{"43":{}},"component":{}}],["chainstack",{"_index":2532,"title":{},"name":{},"text":{"42":{}},"component":{}}],["challeng",{"_index":815,"title":{"7-5":{}},"name":{},"text":{"7":{}},"component":{}}],["chang",{"_index":399,"title":{"25-4":{},"25-5":{},"25-7":{},"38-3":{},"38-8":{},"38-21":{},"38-25":{},"38-29":{},"38-32":{},"38-36":{},"38-43":{},"39-5":{},"39-10":{},"39-14":{},"39-19":{},"39-40":{},"39-45":{},"39-53":{},"39-57":{},"39-67":{},"39-71":{},"41-4":{},"41-17":{},"72-3":{},"72-8":{}},"name":{},"text":{"4":{},"13":{},"17":{},"18":{},"23":{},"25":{},"26":{},"34":{},"38":{},"39":{},"41":{},"47":{},"53":{},"56":{},"58":{},"59":{},"60":{},"61":{},"66":{},"67":{},"72":{},"76":{},"77":{},"86":{}},"component":{}}],["change_operational_address",{"_index":1637,"title":{},"name":{},"text":{"25":{}},"component":{}}],["change_reward_address",{"_index":1638,"title":{},"name":{},"text":{"25":{}},"component":{}}],["changelog",{"_index":2044,"title":{},"name":{},"text":{"38":{}},"component":{}}],["channel",{"_index":3678,"title":{},"name":{},"text":{"83":{},"86":{}},"component":{}}],["chapter",{"_index":2632,"title":{},"name":{},"text":{"49":{}},"component":{}}],["charact",{"_index":2129,"title":{},"name":{},"text":{"39":{},"41":{},"78":{}},"component":{}}],["character",{"_index":773,"title":{},"name":{},"text":{"6":{},"65":{}},"component":{}}],["characterist",{"_index":809,"title":{},"name":{},"text":{"6":{}},"component":{}}],["charg",{"_index":2458,"title":{"61-4":{}},"name":{},"text":{"41":{},"53":{},"55":{},"57":{},"61":{},"62":{},"66":{},"68":{}},"component":{}}],["cheaper",{"_index":867,"title":{},"name":{},"text":{"7":{},"41":{}},"component":{}}],["cheatcod",{"_index":3722,"title":{},"name":{},"text":{"88":{}},"component":{}}],["check",{"_index":93,"title":{"64-9":{}},"name":{},"text":{"1":{},"7":{},"13":{},"22":{},"28":{},"29":{},"34":{},"38":{},"41":{},"53":{},"61":{},"64":{},"66":{},"69":{}},"component":{}}],["child",{"_index":3224,"title":{},"name":{},"text":{"65":{}},"component":{}}],["children",{"_index":3228,"title":{},"name":{},"text":{"65":{}},"component":{}}],["choic",{"_index":382,"title":{},"name":{},"text":{"3":{},"6":{},"13":{},"16":{}},"component":{}}],["choos",{"_index":1140,"title":{},"name":{},"text":{"9":{},"21":{},"26":{},"86":{}},"component":{}}],["chore",{"_index":3157,"title":{},"name":{},"text":{"64":{}},"component":{}}],["chose",{"_index":3329,"title":{},"name":{},"text":{"68":{}},"component":{}}],["chosen",{"_index":1436,"title":{},"name":{},"text":{"13":{}},"component":{}}],["chunk",{"_index":3592,"title":{},"name":{},"text":{"78":{}},"component":{}}],["ci/cd",{"_index":1901,"title":{"38-10":{}},"name":{},"text":{"38":{}},"component":{}}],["circuit",{"_index":2375,"title":{},"name":{},"text":{"41":{},"50":{}},"component":{}}],["circuit_test.cairo",{"_index":2379,"title":{},"name":{},"text":{"41":{}},"component":{}}],["circul",{"_index":594,"title":{},"name":{},"text":{"4":{},"6":{}},"component":{}}],["claim",{"_index":509,"title":{"19":{}},"name":{"19":{}},"text":{"4":{},"18":{},"19":{},"41":{}},"component":{}}],["claim_reward",{"_index":1578,"title":{},"name":{},"text":{"18":{},"19":{}},"component":{}}],["clariti",{"_index":1075,"title":{},"name":{},"text":{"8":{}},"component":{}}],["class",{"_index":9,"title":{"70":{},"71":{},"74":{},"1-8":{},"41-20":{},"65-4":{},"70-1":{},"70-2":{},"74-1":{},"74-3":{}},"name":{"70":{},"71":{},"74":{}},"text":{"1":{},"9":{},"10":{},"11":{},"12":{},"13":{},"17":{},"29":{},"34":{},"37":{},"38":{},"39":{},"41":{},"47":{},"53":{},"58":{},"59":{},"60":{},"61":{},"65":{},"67":{},"68":{},"70":{},"71":{},"73":{},"74":{},"77":{},"80":{},"81":{},"87":{},"89":{}},"component":{}}],["class/inst",{"_index":2509,"title":{},"name":{},"text":{"41":{}},"component":{}}],["class_hash",{"_index":1323,"title":{},"name":{},"text":{"12":{},"13":{},"16":{},"58":{},"65":{},"67":{},"70":{},"73":{},"80":{}},"component":{}}],["class_hash_",{"_index":3650,"title":{},"name":{},"text":{"80":{}},"component":{}}],["class_hash_const",{"_index":2808,"title":{},"name":{},"text":{"58":{}},"component":{}}],["class_trie_root",{"_index":3212,"title":{},"name":{},"text":{"65":{}},"component":{}}],["classhash",{"_index":1843,"title":{},"name":{},"text":{"34":{},"58":{},"78":{},"80":{}},"component":{}}],["class’",{"_index":1401,"title":{},"name":{},"text":{"13":{},"65":{},"70":{}},"component":{}}],["cleaner",{"_index":1975,"title":{},"name":{},"text":{"38":{}},"component":{}}],["cleanup",{"_index":1969,"title":{},"name":{},"text":{"38":{}},"component":{}}],["clear",{"_index":1874,"title":{},"name":{},"text":{"35":{},"62":{},"68":{}},"component":{}}],["clearer",{"_index":1996,"title":{},"name":{},"text":{"38":{}},"component":{}}],["cli",{"_index":1098,"title":{"9":{},"10":{}},"name":{"81":{}},"text":{"9":{},"14":{},"16":{},"21":{},"22":{},"37":{},"41":{},"62":{},"81":{}},"component":{}}],["click",{"_index":1338,"title":{},"name":{},"text":{"13":{},"32":{},"36":{}},"component":{}}],["client",{"_index":192,"title":{"6-3":{},"6-5":{}},"name":{},"text":{"1":{},"6":{}},"component":{}}],["clone",{"_index":1539,"title":{},"name":{},"text":{"17":{}},"component":{}}],["close",{"_index":2614,"title":{},"name":{},"text":{"47":{},"54":{},"61":{}},"component":{}}],["closer",{"_index":2293,"title":{},"name":{},"text":{"39":{}},"component":{}}],["cloud",{"_index":868,"title":{},"name":{},"text":{"7":{}},"component":{}}],["cmake",{"_index":1224,"title":{},"name":{},"text":{"10":{}},"component":{}}],["code",{"_index":114,"title":{"90":{},"61-19":{}},"name":{},"text":{"1":{},"3":{},"6":{},"7":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"29":{},"34":{},"35":{},"38":{},"39":{},"41":{},"47":{},"56":{},"60":{},"61":{},"62":{},"65":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"80":{},"88":{},"89":{},"90":{}},"component":{}}],["code’",{"_index":3083,"title":{},"name":{},"text":{"62":{}},"component":{}}],["coin",{"_index":1722,"title":{},"name":{},"text":{"29":{}},"component":{}}],["collabor",{"_index":855,"title":{},"name":{},"text":{"7":{},"13":{},"54":{}},"component":{}}],["collect",{"_index":105,"title":{},"name":{},"text":{"1":{},"16":{},"22":{},"64":{},"84":{}},"component":{}}],["collis",{"_index":3104,"title":{},"name":{},"text":{"62":{}},"component":{}}],["column",{"_index":1032,"title":{},"name":{},"text":{"8":{}},"component":{}}],["combin",{"_index":423,"title":{},"name":{},"text":{"4":{},"8":{},"39":{},"41":{},"61":{},"65":{},"78":{}},"component":{}}],["come",{"_index":1551,"title":{},"name":{},"text":{"17":{},"41":{},"61":{},"64":{},"68":{},"89":{}},"component":{}}],["comfort",{"_index":3724,"title":{},"name":{},"text":{"88":{}},"component":{}}],["comm",{"_index":1977,"title":{},"name":{},"text":{"38":{}},"component":{}}],["command",{"_index":350,"title":{"81":{},"9-1":{},"38-15":{}},"name":{},"text":{"3":{},"9":{},"10":{},"11":{},"12":{},"14":{},"15":{},"16":{},"17":{},"38":{},"39":{},"41":{},"55":{},"81":{},"88":{}},"component":{}}],["comment",{"_index":2493,"title":{},"name":{},"text":{"41":{}},"component":{}}],["commiss",{"_index":1614,"title":{"25-3":{}},"name":{},"text":{"21":{},"25":{},"26":{}},"component":{}}],["commit",{"_index":238,"title":{"59-2":{},"65-2":{}},"name":{},"text":{"1":{},"4":{},"38":{},"39":{},"41":{},"59":{},"65":{},"71":{}},"component":{}}],["common",{"_index":209,"title":{"64-5":{},"80-6":{},"80-13":{},"80-20":{},"80-26":{},"80-32":{},"80-39":{},"80-45":{},"80-52":{},"80-58":{}},"name":{},"text":{"1":{},"4":{},"7":{},"41":{},"64":{},"68":{},"75":{},"80":{}},"component":{}}],["common_receipt_properti",{"_index":2417,"title":{},"name":{},"text":{"41":{}},"component":{}}],["commonli",{"_index":681,"title":{},"name":{},"text":{"4":{},"39":{},"52":{}},"component":{}}],["commun",{"_index":404,"title":{},"name":{},"text":{"4":{},"7":{},"28":{},"35":{},"37":{},"38":{},"41":{},"54":{},"56":{},"60":{},"64":{},"67":{},"76":{},"83":{},"89":{}},"component":{}}],["community’",{"_index":1751,"title":{},"name":{},"text":{"29":{}},"component":{}}],["compact",{"_index":3165,"title":{},"name":{},"text":{"64":{}},"component":{}}],["compani",{"_index":2560,"title":{},"name":{},"text":{"43":{}},"component":{}}],["companion",{"_index":2634,"title":{},"name":{},"text":{"49":{}},"component":{}}],["compar",{"_index":3382,"title":{},"name":{},"text":{"69":{},"74":{}},"component":{}}],["comparison",{"_index":2373,"title":{},"name":{},"text":{"41":{},"65":{},"69":{}},"component":{}}],["compat",{"_index":798,"title":{},"name":{},"text":{"6":{},"14":{},"21":{},"22":{},"29":{},"34":{},"35":{},"38":{},"41":{},"45":{},"72":{}},"component":{}}],["compens",{"_index":3330,"title":{},"name":{},"text":{"68":{}},"component":{}}],["competit",{"_index":1674,"title":{},"name":{},"text":{"26":{}},"component":{}}],["compil",{"_index":112,"title":{"10":{},"71":{},"11-6":{},"13-6":{},"89-1":{}},"name":{"10":{},"71":{}},"text":{"1":{},"9":{},"10":{},"11":{},"13":{},"14":{},"38":{},"39":{},"41":{},"60":{},"61":{},"65":{},"67":{},"68":{},"70":{},"71":{},"72":{},"75":{},"76":{},"79":{},"88":{},"89":{},"90":{}},"component":{}}],["compiled_class_hash",{"_index":3217,"title":{},"name":{},"text":{"65":{},"67":{}},"component":{}}],["complet",{"_index":62,"title":{},"name":{},"text":{"1":{},"4":{},"8":{},"13":{},"29":{},"30":{},"34":{},"35":{},"42":{},"47":{},"53":{},"56":{},"57":{},"62":{},"68":{},"76":{},"80":{},"85":{},"90":{}},"component":{}}],["complex",{"_index":285,"title":{},"name":{},"text":{"1":{},"7":{},"47":{},"61":{},"75":{},"79":{},"86":{},"89":{}},"component":{}}],["compli",{"_index":750,"title":{},"name":{},"text":{"6":{}},"component":{}}],["compliant",{"_index":2062,"title":{},"name":{},"text":{"38":{}},"component":{}}],["complic",{"_index":3368,"title":{},"name":{},"text":{"68":{}},"component":{}}],["compon",{"_index":915,"title":{"13-5":{},"18-1":{},"61-15":{},"70-1":{}},"name":{},"text":{"7":{},"8":{},"16":{},"18":{},"29":{},"38":{},"41":{},"53":{},"61":{},"64":{},"68":{},"70":{},"71":{},"72":{}},"component":{}}],["componentev",{"_index":3454,"title":{},"name":{},"text":{"72":{}},"component":{}}],["component—sequenc",{"_index":3144,"title":{},"name":{},"text":{"64":{}},"component":{}}],["compos",{"_index":170,"title":{},"name":{},"text":{"1":{},"2":{},"16":{},"61":{}},"component":{}}],["comprehens",{"_index":1868,"title":{},"name":{},"text":{"35":{},"38":{},"49":{},"64":{}},"component":{}}],["compris",{"_index":656,"title":{},"name":{},"text":{"4":{},"8":{},"47":{},"67":{}},"component":{}}],["compromis",{"_index":168,"title":{},"name":{},"text":{"1":{},"2":{},"8":{},"64":{}},"component":{}}],["comput",{"_index":88,"title":{"41-18":{},"61-12":{},"61-13":{},"61-14":{},"70-2":{}},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"8":{},"9":{},"12":{},"16":{},"18":{},"39":{},"41":{},"47":{},"53":{},"57":{},"59":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"73":{},"75":{},"80":{},"81":{},"86":{}},"component":{}}],["computation",{"_index":3169,"title":{},"name":{},"text":{"64":{}},"component":{}}],["concaten",{"_index":2850,"title":{},"name":{},"text":{"59":{},"67":{}},"component":{}}],["concept",{"_index":665,"title":{},"name":{},"text":{"4":{},"41":{},"64":{}},"component":{}}],["concepts:cryptography/hash",{"_index":3620,"title":{},"name":{},"text":{"79":{}},"component":{}}],["concern",{"_index":1165,"title":{},"name":{},"text":{"9":{}},"component":{}}],["conclud",{"_index":3334,"title":{},"name":{},"text":{"68":{}},"component":{}}],["conclus",{"_index":816,"title":{"7-6":{}},"name":{},"text":{"7":{}},"component":{}}],["concret",{"_index":2761,"title":{},"name":{},"text":{"53":{}},"component":{}}],["concurr",{"_index":1927,"title":{},"name":{},"text":{"38":{}},"component":{}}],["condit",{"_index":693,"title":{},"name":{},"text":{"4":{},"38":{},"41":{},"60":{}},"component":{}}],["config",{"_index":1495,"title":{},"name":{},"text":{"16":{},"39":{}},"component":{}}],["configur",{"_index":1258,"title":{"39-45":{},"39-63":{},"39-66":{}},"name":{},"text":{"11":{},"17":{},"38":{},"39":{}},"component":{}}],["confirm",{"_index":767,"title":{},"name":{},"text":{"6":{},"7":{},"15":{},"35":{},"39":{},"56":{},"62":{}},"component":{}}],["conflict",{"_index":3495,"title":{},"name":{},"text":{"73":{}},"component":{}}],["confus",{"_index":2227,"title":{},"name":{},"text":{"39":{},"78":{}},"component":{}}],["congest",{"_index":763,"title":{},"name":{},"text":{"6":{},"7":{},"47":{}},"component":{}}],["connect",{"_index":706,"title":{},"name":{},"text":{"4":{},"39":{},"64":{},"84":{}},"component":{}}],["conscious",{"_index":3376,"title":{},"name":{},"text":{"69":{}},"component":{}}],["consecut",{"_index":2476,"title":{},"name":{},"text":{"41":{}},"component":{}}],["consensi",{"_index":2566,"title":{},"name":{},"text":{"43":{}},"component":{}}],["consensu",{"_index":154,"title":{"64-8":{}},"name":{},"text":{"1":{},"4":{},"6":{},"64":{}},"component":{}}],["consensys.net/dilig",{"_index":2568,"title":{},"name":{},"text":{"43":{}},"component":{}}],["consequ",{"_index":3068,"title":{},"name":{},"text":{"61":{}},"component":{}}],["consid",{"_index":602,"title":{},"name":{},"text":{"4":{},"29":{},"54":{},"60":{},"61":{},"62":{},"68":{},"72":{},"78":{},"80":{},"85":{}},"component":{}}],["consider",{"_index":3344,"title":{},"name":{},"text":{"68":{}},"component":{}}],["consist",{"_index":756,"title":{},"name":{},"text":{"6":{},"7":{},"10":{},"17":{},"29":{},"38":{},"47":{},"50":{},"59":{},"62":{},"65":{},"75":{},"78":{}},"component":{}}],["consol",{"_index":1991,"title":{},"name":{},"text":{"38":{}},"component":{}}],["consolid",{"_index":2908,"title":{},"name":{},"text":{"60":{}},"component":{}}],["const",{"_index":2803,"title":{},"name":{},"text":{"58":{}},"component":{}}],["constant",{"_index":365,"title":{},"name":{},"text":{"3":{},"26":{},"47":{},"50":{},"61":{},"62":{},"65":{},"67":{},"73":{}},"component":{}}],["constraint",{"_index":288,"title":{},"name":{},"text":{"1":{},"8":{},"68":{}},"component":{}}],["constru",{"_index":701,"title":{},"name":{},"text":{"4":{}},"component":{}}],["construct",{"_index":1048,"title":{"65-7":{}},"name":{},"text":{"8":{},"12":{},"35":{},"38":{},"50":{},"59":{},"61":{},"65":{},"67":{},"78":{},"86":{}},"component":{}}],["constructor",{"_index":921,"title":{"8-3":{},"8-4":{},"8-5":{},"55-2":{}},"name":{},"text":{"8":{},"9":{},"12":{},"13":{},"15":{},"41":{},"53":{},"55":{},"58":{},"61":{},"65":{},"67":{},"70":{},"72":{},"73":{},"77":{},"80":{}},"component":{}}],["constructor_calldata",{"_index":2744,"title":{},"name":{},"text":{"53":{},"67":{}},"component":{}}],["constructor_calldata_hash",{"_index":1325,"title":{},"name":{},"text":{"12":{},"73":{}},"component":{}}],["constructor_entry_point",{"_index":3395,"title":{},"name":{},"text":{"70":{}},"component":{}}],["constructor_input",{"_index":1146,"title":{},"name":{},"text":{"9":{}},"component":{}}],["constructor’",{"_index":2745,"title":{},"name":{},"text":{"53":{},"80":{}},"component":{}}],["consult",{"_index":1036,"title":{},"name":{},"text":{"8":{}},"component":{}}],["consum",{"_index":864,"title":{},"name":{},"text":{"7":{},"13":{},"41":{},"47":{},"59":{},"61":{},"62":{},"63":{},"66":{}},"component":{}}],["consumedmessagetol1",{"_index":3128,"title":{"63-67":{}},"name":{},"text":{"63":{}},"component":{}}],["consumedmessagetol2",{"_index":3135,"title":{},"name":{},"text":{"63":{}},"component":{}}],["consumemessagefroml2",{"_index":3093,"title":{"63-9":{}},"name":{},"text":{"62":{},"63":{}},"component":{}}],["consumpt",{"_index":3103,"title":{},"name":{},"text":{"62":{}},"component":{}}],["contact_address",{"_index":1173,"title":{},"name":{},"text":{"9":{}},"component":{}}],["contain",{"_index":208,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"16":{},"29":{},"30":{},"39":{},"41":{},"47":{},"59":{},"60":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"68":{},"71":{},"77":{},"78":{},"79":{},"80":{}},"component":{}}],["content",{"_index":700,"title":{"49-1":{}},"name":{},"text":{"4":{},"13":{},"65":{},"75":{},"80":{},"88":{}},"component":{}}],["context",{"_index":186,"title":{},"name":{},"text":{"1":{},"7":{},"9":{},"16":{},"38":{},"64":{},"66":{},"80":{}},"component":{}}],["contigu",{"_index":2339,"title":{},"name":{},"text":{"41":{}},"component":{}}],["continu",{"_index":630,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"26":{},"39":{},"64":{},"72":{},"75":{}},"component":{}}],["contract",{"_index":2,"title":{"11":{},"12":{},"13":{},"15":{},"46":{},"58":{},"72":{},"73":{},"74":{},"75":{},"76":{},"88":{},"1-2":{},"1-8":{},"1-9":{},"1-21":{},"8-1":{},"8-2":{},"8-3":{},"8-6":{},"11-6":{},"11-8":{},"12-4":{},"13-2":{},"13-3":{},"13-4":{},"13-5":{},"13-6":{},"13-7":{},"13-8":{},"13-9":{},"13-10":{},"18-2":{},"18-3":{},"18-4":{},"18-5":{},"29-3":{},"58-3":{},"61-18":{},"65-3":{},"72-2":{},"74-1":{},"74-2":{},"89-5":{}},"name":{"11":{},"12":{},"13":{},"15":{},"72":{},"73":{},"74":{},"75":{},"76":{},"88":{}},"text":{"1":{},"2":{},"4":{},"6":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"29":{},"30":{},"32":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"43":{},"44":{},"45":{},"46":{},"47":{},"49":{},"52":{},"53":{},"54":{},"55":{},"56":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"67":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{}},"component":{}}],["contract.cairo",{"_index":1204,"title":{},"name":{},"text":{"10":{}},"component":{}}],["contract_abi",{"_index":1126,"title":{},"name":{},"text":{"9":{}},"component":{}}],["contract_abi.json",{"_index":1206,"title":{},"name":{},"text":{"10":{}},"component":{}}],["contract_address",{"_index":1125,"title":{},"name":{},"text":{"9":{},"13":{},"58":{},"60":{},"62":{},"67":{},"72":{},"73":{},"77":{}},"component":{}}],["contract_address.cairo",{"_index":3498,"title":{},"name":{},"text":{"73":{}},"component":{}}],["contract_address_salt",{"_index":3307,"title":{},"name":{},"text":{"67":{},"80":{}},"component":{}}],["contract_class",{"_index":1138,"title":{},"name":{},"text":{"9":{},"67":{}},"component":{}}],["contract_class_leaf_v0",{"_index":3216,"title":{},"name":{},"text":{"65":{}},"component":{}}],["contract_class_v0.1.0",{"_index":3403,"title":{},"name":{},"text":{"70":{}},"component":{}}],["contract_class_vers",{"_index":3386,"title":{},"name":{},"text":{"70":{}},"component":{}}],["contract_compiled.json",{"_index":1205,"title":{},"name":{},"text":{"10":{}},"component":{}}],["contract_definit",{"_index":1143,"title":{},"name":{},"text":{"9":{}},"component":{}}],["contract_hash",{"_index":2938,"title":{},"name":{},"text":{"60":{}},"component":{}}],["contract_trie_root",{"_index":3211,"title":{},"name":{},"text":{"65":{}},"component":{}}],["contractaddress",{"_index":1320,"title":{},"name":{},"text":{"12":{},"13":{},"34":{},"58":{},"59":{},"62":{},"72":{},"77":{},"78":{},"79":{},"80":{}},"component":{}}],["contractaddresszeroable::zero",{"_index":1849,"title":{},"name":{},"text":{"34":{}},"component":{}}],["contractclass",{"_index":2516,"title":{},"name":{},"text":{"41":{},"67":{}},"component":{}}],["contractdefinit",{"_index":2515,"title":{},"name":{},"text":{"41":{}},"component":{}}],["contractdeploy",{"_index":2796,"title":{"58-10":{}},"name":{},"text":{"58":{}},"component":{}}],["contractst",{"_index":1376,"title":{},"name":{},"text":{"13":{},"72":{},"76":{}},"component":{}}],["contractu",{"_index":601,"title":{},"name":{},"text":{"4":{},"13":{}},"component":{}}],["contract’",{"_index":271,"title":{},"name":{},"text":{"1":{},"9":{},"10":{},"11":{},"12":{},"13":{},"39":{},"41":{},"58":{},"60":{},"62":{},"65":{},"70":{},"72":{},"75":{},"76":{},"77":{},"79":{},"80":{}},"component":{}}],["contrast",{"_index":2771,"title":{},"name":{},"text":{"54":{},"64":{},"69":{},"80":{}},"component":{}}],["contribut",{"_index":298,"title":{"2-6":{}},"name":{},"text":{"2":{},"4":{},"6":{},"18":{},"19":{},"26":{},"39":{},"61":{},"64":{},"71":{}},"component":{}}],["contributor",{"_index":323,"title":{"39-49":{},"39-54":{}},"name":{},"text":{"2":{},"4":{},"29":{}},"component":{}}],["control",{"_index":102,"title":{},"name":{},"text":{"1":{},"4":{},"11":{},"14":{},"18":{},"38":{},"56":{},"87":{}},"component":{}}],["conveni",{"_index":2254,"title":{},"name":{},"text":{"39":{}},"component":{}}],["convent",{"_index":328,"title":{"3":{}},"name":{"3":{}},"text":{},"component":{}}],["convers",{"_index":1423,"title":{},"name":{},"text":{"13":{}},"component":{}}],["convert",{"_index":478,"title":{},"name":{},"text":{"4":{},"41":{},"70":{}},"component":{}}],["coordin",{"_index":1683,"title":{},"name":{},"text":{"27":{},"50":{},"64":{}},"component":{}}],["copi",{"_index":1223,"title":{},"name":{},"text":{"10":{},"13":{},"72":{}},"component":{}}],["cor",{"_index":2185,"title":{},"name":{},"text":{"39":{}},"component":{}}],["core",{"_index":27,"title":{"1-21":{},"6-2":{}},"name":{},"text":{"1":{},"18":{},"34":{},"35":{},"41":{},"46":{},"49":{},"54":{},"61":{},"62":{},"80":{}},"component":{}}],["core::felt252",{"_index":3434,"title":{},"name":{},"text":{"72":{}},"component":{}}],["core::integer::u128",{"_index":3421,"title":{},"name":{},"text":{"72":{}},"component":{}}],["core::integer::u256",{"_index":3439,"title":{},"name":{},"text":{"72":{},"79":{}},"component":{}}],["core::integer::u8",{"_index":3437,"title":{},"name":{},"text":{"72":{}},"component":{}}],["core::starknet::contract_address::contractaddress",{"_index":3427,"title":{},"name":{},"text":{"72":{},"79":{}},"component":{}}],["corelib",{"_index":3379,"title":{},"name":{},"text":{"69":{}},"component":{}}],["correct",{"_index":1341,"title":{},"name":{},"text":{"13":{},"18":{},"39":{},"61":{},"64":{},"68":{}},"component":{}}],["correctli",{"_index":1228,"title":{"11-2":{},"12-2":{},"15-2":{}},"name":{},"text":{"16":{},"17":{},"38":{},"39":{},"64":{},"68":{},"78":{}},"component":{}}],["correl",{"_index":3024,"title":{},"name":{},"text":{"61":{}},"component":{}}],["correspond",{"_index":128,"title":{},"name":{},"text":{"1":{},"4":{},"13":{},"17":{},"29":{},"32":{},"34":{},"35":{},"37":{},"53":{},"59":{},"61":{},"62":{},"65":{},"67":{},"71":{},"72":{},"74":{},"76":{}},"component":{}}],["cost",{"_index":259,"title":{"61-14":{}},"name":{},"text":{"1":{},"2":{},"4":{},"7":{},"11":{},"13":{},"33":{},"41":{},"59":{},"61":{},"62":{},"63":{},"80":{}},"component":{}}],["count",{"_index":1782,"title":{},"name":{},"text":{"31":{},"38":{},"61":{}},"component":{}}],["counter",{"_index":1779,"title":{},"name":{},"text":{"31":{},"34":{},"62":{},"72":{},"76":{}},"component":{}}],["counter::read",{"_index":3524,"title":{},"name":{},"text":{"76":{}},"component":{}}],["counter_contract",{"_index":3479,"title":{},"name":{},"text":{"72":{}},"component":{}}],["counter_decreas",{"_index":3527,"title":{},"name":{},"text":{"76":{}},"component":{}}],["counter_increas",{"_index":3526,"title":{},"name":{},"text":{"76":{}},"component":{}}],["countercontract",{"_index":3417,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["counterdecreas",{"_index":3432,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["counterincreas",{"_index":3431,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["counterpart",{"_index":3718,"title":{},"name":{},"text":{"88":{}},"component":{}}],["cours",{"_index":2290,"title":{},"name":{},"text":{"39":{}},"component":{}}],["cover",{"_index":479,"title":{},"name":{},"text":{"4":{},"34":{},"41":{},"88":{}},"component":{}}],["cp",{"_index":1648,"title":{},"name":{},"text":{"26":{}},"component":{}}],["cp\\right",{"_index":1653,"title":{},"name":{},"text":{"26":{}},"component":{}}],["cpu",{"_index":84,"title":{},"name":{},"text":{"1":{},"38":{},"68":{}},"component":{}}],["cpuconstraintpoli",{"_index":1055,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuconstraintpoly0",{"_index":967,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuconstraintpoly1",{"_index":973,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuconstraintpoly2",{"_index":979,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuconstraintpoly3",{"_index":985,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuconstraintpoly4",{"_index":991,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuconstraintpoly5",{"_index":997,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuconstraintpoly6",{"_index":1003,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuconstraintpoly7",{"_index":1020,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifi",{"_index":922,"title":{"8-4":{}},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifier/cpuoods/cpuconstantpoli",{"_index":1041,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifier0",{"_index":963,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifier1",{"_index":969,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifier2",{"_index":975,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifier3",{"_index":981,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifier4",{"_index":987,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifier5",{"_index":993,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifier6",{"_index":999,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpufrilessverifier7",{"_index":1016,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuood",{"_index":1060,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuoods0",{"_index":965,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuoods1",{"_index":971,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuoods2",{"_index":977,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuoods3",{"_index":983,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuoods4",{"_index":989,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuoods5",{"_index":995,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuoods6",{"_index":1001,"title":{},"name":{},"text":{"8":{}},"component":{}}],["cpuoods7",{"_index":1018,"title":{},"name":{},"text":{"8":{}},"component":{}}],["craft",{"_index":1350,"title":{},"name":{},"text":{"13":{}},"component":{}}],["crate",{"_index":2437,"title":{},"name":{},"text":{"41":{},"83":{},"86":{}},"component":{}}],["creat",{"_index":512,"title":{"16-2":{},"16-3":{},"16-4":{},"16-8":{}},"name":{},"text":{"4":{},"6":{},"7":{},"11":{},"12":{},"13":{},"16":{},"17":{},"25":{},"29":{},"34":{},"35":{},"41":{},"54":{},"55":{},"58":{},"59":{},"62":{},"64":{},"66":{},"75":{},"80":{},"82":{},"85":{},"89":{}},"component":{}}],["create2",{"_index":2774,"title":{},"name":{},"text":{"54":{}},"component":{}}],["creation",{"_index":754,"title":{},"name":{},"text":{"6":{},"23":{},"41":{},"55":{},"77":{},"86":{}},"component":{}}],["creator",{"_index":877,"title":{},"name":{},"text":{"7":{}},"component":{}}],["critic",{"_index":481,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"18":{},"23":{},"29":{},"53":{},"64":{}},"component":{}}],["cross",{"_index":249,"title":{},"name":{},"text":{"1":{},"61":{}},"component":{}}],["crucial",{"_index":744,"title":{},"name":{},"text":{"6":{},"13":{},"16":{},"18":{},"62":{},"68":{},"71":{}},"component":{}}],["crypto",{"_index":2067,"title":{},"name":{},"text":{"38":{}},"component":{}}],["cryptoexpert",{"_index":2686,"title":{},"name":{},"text":{"50":{}},"component":{}}],["cryptograph",{"_index":261,"title":{},"name":{},"text":{"1":{},"2":{},"4":{},"7":{},"71":{}},"component":{}}],["cryptographi",{"_index":229,"title":{},"name":{},"text":{"1":{},"4":{},"86":{}},"component":{}}],["curl",{"_index":1277,"title":{},"name":{},"text":{"11":{},"14":{}},"component":{}}],["curli",{"_index":383,"title":{},"name":{},"text":{"3":{}},"component":{}}],["current",{"_index":306,"title":{"47":{},"7-4":{},"8-1":{}},"name":{},"text":{"2":{},"4":{},"6":{},"7":{},"8":{},"11":{},"13":{},"14":{},"15":{},"18":{},"22":{},"24":{},"25":{},"26":{},"29":{},"34":{},"38":{},"39":{},"40":{},"41":{},"44":{},"45":{},"47":{},"53":{},"54":{},"56":{},"60":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"70":{},"72":{},"75":{},"76":{},"77":{},"80":{},"83":{},"89":{}},"component":{}}],["current_block",{"_index":2137,"title":{},"name":{},"text":{"39":{},"80":{}},"component":{}}],["curv",{"_index":1040,"title":{"52":{},"18-5":{},"26-5":{}},"name":{"52":{}},"text":{"8":{},"18":{},"26":{},"41":{},"50":{},"52":{},"67":{},"69":{}},"component":{}}],["custodi",{"_index":1771,"title":{},"name":{},"text":{"31":{},"62":{}},"component":{}}],["custom",{"_index":262,"title":{"9-3":{},"13-2":{},"56-3":{}},"name":{},"text":{"1":{},"2":{},"9":{},"11":{},"29":{},"39":{},"49":{},"56":{},"79":{}},"component":{}}],["custom.sqlit",{"_index":2277,"title":{},"name":{},"text":{"39":{}},"component":{}}],["cycl",{"_index":3254,"title":{},"name":{"66":{}},"text":{},"component":{}}],["d",{"_index":1997,"title":{},"name":{},"text":{"38":{},"59":{},"61":{}},"component":{}}],["da",{"_index":2388,"title":{},"name":{},"text":{"41":{}},"component":{}}],["dai",{"_index":1725,"title":{"45":{}},"name":{"45":{}},"text":{"29":{},"35":{},"45":{}},"component":{}}],["dao’",{"_index":2588,"title":{},"name":{},"text":{"45":{}},"component":{}}],["dapp",{"_index":256,"title":{"82":{},"84":{}},"name":{"82":{},"84":{}},"text":{"1":{},"2":{},"6":{},"34":{},"62":{},"82":{},"84":{}},"component":{}}],["dapp’",{"_index":3107,"title":{},"name":{},"text":{"62":{}},"component":{}}],["data",{"_index":281,"title":{"60":{},"7-3":{},"60-2":{},"60-3":{},"60-5":{},"60-6":{},"61-15":{},"61-16":{},"61-17":{},"61-18":{},"78-1":{},"78-2":{}},"name":{"60":{}},"text":{"1":{},"4":{},"6":{},"8":{},"13":{},"16":{},"18":{},"38":{},"39":{},"41":{},"47":{},"53":{},"59":{},"60":{},"61":{},"62":{},"64":{},"65":{},"66":{},"72":{},"75":{},"77":{},"78":{},"79":{},"80":{},"81":{},"87":{}},"component":{}}],["data=[5",{"_index":3468,"title":{},"name":{},"text":{"72":{}},"component":{}}],["data[0",{"_index":3612,"title":{},"name":{},"text":{"79":{}},"component":{}}],["data[1",{"_index":3613,"title":{},"name":{},"text":{"79":{}},"component":{}}],["data\\_gas\\_price\\cdot\\text{felt_size_in_bytes}\\cdot\\bigg",{"_index":2978,"title":{},"name":{},"text":{"61":{}},"component":{}}],["data\\_hash",{"_index":3618,"title":{},"name":{},"text":{"79":{}},"component":{}}],["data_avail",{"_index":2418,"title":{},"name":{},"text":{"41":{}},"component":{}}],["data_availability_mod",{"_index":3292,"title":{},"name":{},"text":{"67":{}},"component":{}}],["data_ga",{"_index":2392,"title":{},"name":{},"text":{"41":{}},"component":{}}],["data_gas_consum",{"_index":2411,"title":{},"name":{},"text":{"41":{}},"component":{}}],["data_gas_consumed=0",{"_index":2416,"title":{},"name":{},"text":{"41":{}},"component":{}}],["data_gas_pric",{"_index":2412,"title":{},"name":{},"text":{"41":{}},"component":{}}],["databas",{"_index":2006,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["date",{"_index":544,"title":{},"name":{},"text":{"4":{},"29":{},"34":{},"35":{},"37":{},"39":{},"77":{},"82":{}},"component":{}}],["day",{"_index":1667,"title":{},"name":{},"text":{"26":{},"29":{},"31":{},"34":{},"62":{}},"component":{}}],["db",{"_index":2002,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["deactiv",{"_index":1832,"title":{},"name":{},"text":{"34":{}},"component":{}}],["deal",{"_index":248,"title":{},"name":{},"text":{"1":{},"79":{}},"component":{}}],["debat",{"_index":3176,"title":{},"name":{},"text":{"64":{}},"component":{}}],["debug",{"_index":1182,"title":{},"name":{},"text":{"9":{},"10":{}},"component":{}}],["debug_info_with_sourc",{"_index":1199,"title":{"10-18":{}},"name":{},"text":{"10":{}},"component":{}}],["debunk",{"_index":3142,"title":{"64-5":{}},"name":{},"text":{},"component":{}}],["dec",{"_index":2320,"title":{"41-33":{}},"name":{},"text":{},"component":{}}],["decemb",{"_index":1895,"title":{},"name":{},"text":{"37":{}},"component":{}}],["decentr",{"_index":396,"title":{},"name":{},"text":{"4":{},"8":{},"18":{},"38":{},"64":{},"68":{},"82":{},"84":{}},"component":{}}],["decid",{"_index":452,"title":{},"name":{},"text":{"4":{},"39":{},"61":{}},"component":{}}],["decim",{"_index":2228,"title":{},"name":{},"text":{"39":{},"44":{},"75":{},"78":{}},"component":{}}],["decimals_",{"_index":3436,"title":{},"name":{},"text":{"72":{}},"component":{}}],["decis",{"_index":401,"title":{},"name":{},"text":{"4":{},"29":{},"58":{}},"component":{}}],["declar",{"_index":278,"title":{"11":{},"9-5":{},"11-4":{},"11-5":{},"11-8":{},"41-20":{},"67-8":{}},"name":{"11":{}},"text":{"1":{},"9":{},"11":{},"12":{},"13":{},"37":{},"39":{},"41":{},"53":{},"58":{},"59":{},"60":{},"61":{},"62":{},"65":{},"66":{},"67":{},"68":{},"70":{},"71":{},"74":{},"75":{},"80":{},"86":{},"88":{}},"component":{}}],["declare_v0_tx_hash",{"_index":3306,"title":{},"name":{},"text":{"67":{}},"component":{}}],["declare_v1_tx_hash",{"_index":3305,"title":{},"name":{},"text":{"67":{}},"component":{}}],["declare_v2_tx_hash",{"_index":3304,"title":{},"name":{},"text":{"67":{}},"component":{}}],["declare_v3_tx_hash",{"_index":3302,"title":{},"name":{},"text":{"67":{}},"component":{}}],["declaretransact",{"_index":2071,"title":{},"name":{},"text":{"38":{}},"component":{}}],["decod",{"_index":2043,"title":{},"name":{},"text":{"38":{},"60":{},"62":{},"87":{}},"component":{}}],["decompil",{"_index":3712,"title":{},"name":{},"text":{"87":{}},"component":{}}],["decor",{"_index":3102,"title":{},"name":{},"text":{"62":{},"79":{}},"component":{}}],["decreas",{"_index":840,"title":{},"name":{},"text":{"7":{},"25":{},"62":{}},"component":{}}],["decrease_allow",{"_index":3449,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["decrease_count",{"_index":3423,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["dedic",{"_index":1565,"title":{},"name":{},"text":{"18":{},"29":{},"38":{},"56":{},"72":{}},"component":{}}],["deduc",{"_index":3225,"title":{},"name":{},"text":{"65":{}},"component":{}}],["deep",{"_index":3661,"title":{},"name":{},"text":{"81":{},"88":{},"89":{}},"component":{}}],["deepen",{"_index":2636,"title":{},"name":{},"text":{"49":{}},"component":{}}],["default",{"_index":1220,"title":{"39-71":{}},"name":{},"text":{"10":{},"13":{},"16":{},"17":{},"29":{},"38":{},"39":{},"41":{},"53":{},"60":{},"65":{},"78":{}},"component":{}}],["defi",{"_index":3078,"title":{},"name":{},"text":{"62":{}},"component":{}}],["defin",{"_index":39,"title":{},"name":{},"text":{"1":{},"10":{},"11":{},"13":{},"16":{},"18":{},"26":{},"29":{},"34":{},"41":{},"47":{},"50":{},"52":{},"53":{},"54":{},"56":{},"59":{},"61":{},"63":{},"64":{},"65":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"79":{},"80":{},"81":{}},"component":{}}],["definit",{"_index":121,"title":{"34-9":{},"34-17":{},"34-25":{},"34-34":{},"34-42":{},"34-51":{},"34-60":{},"34-68":{},"34-77":{},"34-86":{},"34-94":{},"34-102":{},"34-110":{},"34-118":{},"34-126":{},"34-133":{},"34-139":{},"34-144":{},"34-149":{},"34-154":{},"34-159":{},"34-164":{},"34-169":{},"34-174":{},"50-4":{},"63-8":{},"63-15":{},"63-21":{},"63-27":{},"63-33":{},"63-39":{},"63-45":{},"63-51":{},"63-58":{},"63-65":{},"63-70":{},"63-74":{},"63-78":{},"63-82":{},"65-8":{},"70-1":{},"79-2":{}},"name":{},"text":{"1":{},"13":{},"38":{},"41":{},"65":{},"67":{},"74":{},"78":{},"79":{},"90":{}},"component":{}}],["delay",{"_index":1784,"title":{},"name":{},"text":{"31":{},"39":{},"62":{},"64":{}},"component":{}}],["deleg",{"_index":497,"title":{"20":{},"25":{},"27":{},"18-3":{},"22-2":{},"25-2":{},"25-6":{}},"name":{"20":{},"25":{},"27":{}},"text":{"4":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"64":{},"80":{}},"component":{}}],["delegate_cal",{"_index":1023,"title":{},"name":{},"text":{"8":{},"41":{}},"component":{}}],["delegatecal",{"_index":3500,"title":{},"name":{},"text":{"74":{}},"component":{}}],["delegator’",{"_index":1564,"title":{},"name":{},"text":{"18":{},"19":{},"22":{}},"component":{}}],["delet",{"_index":1347,"title":{},"name":{},"text":{"13":{}},"component":{}}],["delimit",{"_index":1129,"title":{},"name":{},"text":{"9":{}},"component":{}}],["deliv",{"_index":2299,"title":{},"name":{},"text":{"40":{},"41":{},"62":{}},"component":{}}],["demand",{"_index":3160,"title":{},"name":{},"text":{"64":{}},"component":{}}],["demonstr",{"_index":1260,"title":{},"name":{},"text":{"11":{},"16":{},"71":{}},"component":{}}],["denial",{"_index":2748,"title":{},"name":{},"text":{"53":{}},"component":{}}],["denomin",{"_index":132,"title":{},"name":{},"text":{"1":{},"41":{},"61":{}},"component":{}}],["denot",{"_index":2648,"title":{},"name":{},"text":{"50":{},"59":{},"61":{},"65":{}},"component":{}}],["deoxi",{"_index":1497,"title":{},"name":{},"text":{"16":{},"37":{},"42":{}},"component":{}}],["depend",{"_index":659,"title":{"58-5":{}},"name":{},"text":{"4":{},"6":{},"7":{},"8":{},"11":{},"13":{},"39":{},"41":{},"54":{},"58":{},"59":{},"60":{},"61":{},"72":{},"80":{},"88":{}},"component":{}}],["depict",{"_index":1447,"title":{},"name":{},"text":{"13":{}},"component":{}}],["deploy",{"_index":127,"title":{"12":{},"13":{},"55":{},"58":{},"9-6":{},"11-5":{},"12-4":{},"12-6":{},"12-7":{},"13-7":{},"13-11":{},"13-13":{},"16-9":{},"38-10":{},"55-1":{},"58-3":{},"58-4":{},"58-7":{},"61-18":{},"67-21":{},"80-21":{}},"name":{"12":{},"13":{},"55":{},"58":{}},"text":{"1":{},"4":{},"6":{},"8":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"18":{},"21":{},"34":{},"37":{},"41":{},"53":{},"54":{},"55":{},"58":{},"59":{},"60":{},"61":{},"65":{},"67":{},"71":{},"73":{},"74":{},"77":{},"80":{},"81":{},"82":{},"83":{},"86":{},"88":{},"89":{}},"component":{}}],["deploy_account",{"_index":280,"title":{"9-7":{},"55-2":{},"67-16":{}},"name":{},"text":{"1":{},"9":{},"16":{},"41":{},"53":{},"55":{},"61":{},"66":{},"67":{},"73":{},"74":{}},"component":{}}],["deploy_account_v1_tx_hash",{"_index":3309,"title":{},"name":{},"text":{"67":{}},"component":{}}],["deploy_account_v3_tx_hash",{"_index":3308,"title":{},"name":{},"text":{"67":{}},"component":{}}],["deploy_contract",{"_index":2503,"title":{},"name":{},"text":{"41":{}},"component":{}}],["deploy_from_zero",{"_index":2505,"title":{},"name":{},"text":{"41":{},"73":{},"80":{}},"component":{}}],["deploy_from_zero=tru",{"_index":2820,"title":{},"name":{},"text":{"58":{}},"component":{}}],["deploy_syscal",{"_index":3642,"title":{},"name":{},"text":{"80":{}},"component":{}}],["deploy_tx_hash",{"_index":3311,"title":{},"name":{},"text":{"67":{}},"component":{}}],["deployaccount",{"_index":2444,"title":{},"name":{},"text":{"41":{}},"component":{}}],["deploycontract",{"_index":2795,"title":{"58-9":{}},"name":{},"text":{"58":{}},"component":{}}],["deployed_addr",{"_index":2817,"title":{},"name":{},"text":{"58":{}},"component":{}}],["deployer_address",{"_index":1324,"title":{},"name":{},"text":{"12":{},"73":{}},"component":{}}],["deployer’",{"_index":2813,"title":{},"name":{},"text":{"58":{},"80":{}},"component":{}}],["deposit",{"_index":1709,"title":{"30":{},"31":{},"32":{},"34-2":{},"35-3":{},"35-4":{},"35-5":{}},"name":{"31":{},"32":{}},"text":{"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"45":{},"62":{},"79":{},"80":{}},"component":{}}],["depositcancelrequest",{"_index":1781,"title":{"34-10":{}},"name":{},"text":{"31":{},"34":{}},"component":{}}],["depositor",{"_index":1785,"title":{},"name":{},"text":{"31":{},"34":{}},"component":{}}],["depositreclaim",{"_index":1783,"title":{"34-18":{}},"name":{},"text":{"31":{},"34":{}},"component":{}}],["depositwithmessag",{"_index":1760,"title":{"34-27":{}},"name":{},"text":{"30":{},"34":{}},"component":{}}],["depositwithmessagecancelrequest",{"_index":1768,"title":{"34-35":{}},"name":{},"text":{"30":{},"34":{}},"component":{}}],["depositwithmessagereclaim",{"_index":1769,"title":{"34-44":{}},"name":{},"text":{"30":{},"34":{}},"component":{}}],["deprec",{"_index":1100,"title":{"37":{},"37-1":{},"39-63":{},"61-7":{},"67-5":{},"67-6":{},"67-7":{},"67-11":{},"67-12":{},"67-13":{},"67-14":{},"67-19":{},"67-20":{}},"name":{"37":{}},"text":{"9":{},"37":{},"39":{},"41":{},"46":{},"47":{},"53":{},"62":{},"65":{},"67":{}},"component":{}}],["deprecated_declar",{"_index":2464,"title":{},"name":{},"text":{"41":{}},"component":{}}],["derefer",{"_index":1981,"title":{},"name":{},"text":{"38":{}},"component":{}}],["deriv",{"_index":1368,"title":{},"name":{},"text":{"13":{},"16":{},"56":{},"58":{},"61":{},"72":{},"76":{}},"component":{}}],["describ",{"_index":274,"title":{},"name":{},"text":{"1":{},"4":{},"9":{},"17":{},"29":{},"41":{},"53":{},"60":{},"61":{},"62":{},"65":{},"67":{},"72":{}},"component":{}}],["descript",{"_index":1190,"title":{"10-3":{},"34-3":{},"34-11":{},"34-19":{},"34-28":{},"34-36":{},"34-45":{},"34-54":{},"34-62":{},"34-71":{},"34-80":{},"34-88":{},"34-96":{},"34-104":{},"34-112":{},"34-120":{},"34-128":{},"34-136":{},"34-141":{},"34-146":{},"34-151":{},"34-156":{},"34-161":{},"34-166":{},"34-171":{},"63-3":{},"63-10":{},"63-17":{},"63-23":{},"63-29":{},"63-35":{},"63-41":{},"63-47":{},"63-53":{},"63-60":{},"63-68":{},"63-72":{},"63-76":{},"63-80":{},"80-3":{},"80-10":{},"80-17":{},"80-23":{},"80-29":{},"80-36":{},"80-42":{},"80-49":{},"80-55":{},"80-62":{}},"name":{},"text":{"11":{},"14":{},"18":{},"34":{},"37":{},"42":{},"47":{},"49":{},"59":{},"63":{},"64":{},"65":{},"67":{},"69":{},"78":{},"80":{}},"component":{}}],["descriptor",{"_index":1473,"title":{"16-8":{}},"name":{},"text":{"14":{},"16":{}},"component":{}}],["deseri",{"_index":2742,"title":{},"name":{},"text":{"53":{}},"component":{}}],["desier",{"_index":2746,"title":{},"name":{},"text":{"53":{}},"component":{}}],["design",{"_index":824,"title":{},"name":{},"text":{"7":{},"8":{},"13":{},"18":{},"19":{},"27":{},"41":{},"43":{},"50":{},"53":{},"54":{},"56":{},"64":{},"67":{},"68":{},"82":{},"83":{}},"component":{}}],["desir",{"_index":1134,"title":{},"name":{},"text":{"9":{},"34":{},"36":{},"61":{},"65":{},"67":{}},"component":{}}],["despit",{"_index":3257,"title":{},"name":{},"text":{"66":{}},"component":{}}],["destin",{"_index":3067,"title":{},"name":{},"text":{"61":{}},"component":{}}],["detail",{"_index":405,"title":{"26-1":{}},"name":{},"text":{"4":{},"7":{},"8":{},"11":{},"13":{},"16":{},"18":{},"21":{},"22":{},"27":{},"29":{},"37":{},"38":{},"39":{},"41":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"67":{},"70":{},"77":{}},"component":{}}],["detect",{"_index":1756,"title":{},"name":{},"text":{"29":{},"38":{}},"component":{}}],["detector",{"_index":3713,"title":{},"name":{},"text":{"87":{}},"component":{}}],["deter",{"_index":769,"title":{},"name":{},"text":{"6":{}},"component":{}}],["determin",{"_index":461,"title":{},"name":{},"text":{"4":{},"7":{},"26":{},"54":{},"56":{},"58":{},"59":{},"60":{},"61":{},"65":{},"67":{},"68":{},"73":{},"75":{},"78":{},"80":{}},"component":{}}],["determinist",{"_index":2822,"title":{},"name":{},"text":{"58":{},"68":{}},"component":{}}],["dev",{"_index":2330,"title":{},"name":{},"text":{"41":{},"46":{},"47":{},"67":{}},"component":{}}],["develop",{"_index":296,"title":{"17":{},"83":{},"85":{},"88":{},"2-5":{},"13-7":{}},"name":{},"text":{"2":{},"4":{},"6":{},"7":{},"13":{},"14":{},"17":{},"29":{},"35":{},"37":{},"41":{},"49":{},"54":{},"58":{},"68":{},"71":{},"78":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{}},"component":{}}],["developer’",{"_index":1876,"title":{},"name":{},"text":{"35":{}},"component":{}}],["deviat",{"_index":2291,"title":{},"name":{},"text":{"39":{}},"component":{}}],["devnet",{"_index":1333,"title":{"13-7":{},"17-2":{},"83-1":{},"89-11":{}},"name":{"83":{}},"text":{"13":{},"17":{},"58":{},"83":{},"88":{},"89":{}},"component":{}}],["devnet’",{"_index":1529,"title":{},"name":{},"text":{"17":{}},"component":{}}],["diagnost",{"_index":3745,"title":{},"name":{},"text":{"90":{}},"component":{}}],["diagram",{"_index":3242,"title":{},"name":{},"text":{"65":{},"66":{}},"component":{}}],["dict[resourc",{"_index":3281,"title":{},"name":{},"text":{"67":{}},"component":{}}],["dictat",{"_index":43,"title":{},"name":{},"text":{"1":{}},"component":{}}],["dictionari",{"_index":3283,"title":{},"name":{},"text":{"67":{}},"component":{}}],["diff",{"_index":31,"title":{"1-26":{},"59-2":{}},"name":{},"text":{"38":{},"41":{},"59":{},"60":{},"61":{},"66":{}},"component":{}}],["differ",{"_index":206,"title":{"72-5":{}},"name":{},"text":{"1":{},"2":{},"4":{},"7":{},"11":{},"12":{},"15":{},"16":{},"18":{},"27":{},"39":{},"53":{},"55":{},"56":{},"60":{},"61":{},"62":{},"64":{},"67":{},"68":{},"80":{},"85":{}},"component":{}}],["differenti",{"_index":357,"title":{},"name":{},"text":{"3":{},"45":{}},"component":{}}],["digest",{"_index":3206,"title":{},"name":{},"text":{"65":{}},"component":{}}],["digit",{"_index":504,"title":{},"name":{},"text":{"4":{},"38":{},"39":{}},"component":{}}],["dilig",{"_index":2567,"title":{},"name":{},"text":{"43":{}},"component":{}}],["direct",{"_index":1177,"title":{},"name":{},"text":{"9":{},"18":{},"38":{},"80":{}},"component":{}}],["directli",{"_index":151,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"8":{},"9":{},"18":{},"26":{},"39":{},"41":{},"53":{}},"component":{}}],["directori",{"_index":1162,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"13":{},"16":{},"29":{},"47":{}},"component":{}}],["disabl",{"_index":1209,"title":{},"name":{},"text":{"10":{},"29":{},"41":{},"45":{}},"component":{}}],["disable_hint_valid",{"_index":1192,"title":{"10-9":{}},"name":{},"text":{"10":{}},"component":{}}],["disallow",{"_index":2163,"title":{},"name":{},"text":{"39":{},"53":{}},"component":{}}],["disappear",{"_index":447,"title":{},"name":{},"text":{"4":{}},"component":{}}],["disclaim",{"_index":395,"title":{"4-4":{}},"name":{},"text":{"4":{}},"component":{}}],["discord",{"_index":3679,"title":{},"name":{},"text":{"83":{},"86":{}},"component":{}}],["discount",{"_index":3003,"title":{},"name":{},"text":{"61":{}},"component":{}}],["discoveri",{"_index":3690,"title":{},"name":{},"text":{"84":{}},"component":{}}],["discrep",{"_index":1342,"title":{},"name":{},"text":{"13":{}},"component":{}}],["discret",{"_index":719,"title":{},"name":{},"text":{"4":{}},"component":{}}],["discuss",{"_index":489,"title":{},"name":{},"text":{"4":{},"7":{},"64":{},"75":{},"79":{}},"component":{}}],["disk",{"_index":2195,"title":{},"name":{},"text":{"39":{}},"component":{}}],["dispatch",{"_index":889,"title":{},"name":{},"text":{"7":{},"8":{},"58":{},"76":{}},"component":{}}],["dispatcher.deploycontract",{"_index":2811,"title":{},"name":{},"text":{"58":{}},"component":{}}],["display",{"_index":353,"title":{},"name":{},"text":{"3":{},"8":{},"13":{},"41":{},"89":{}},"component":{}}],["disrupt",{"_index":3194,"title":{},"name":{},"text":{"64":{}},"component":{}}],["distinct",{"_index":2329,"title":{},"name":{},"text":{"41":{},"65":{}},"component":{}}],["distinguish",{"_index":2727,"title":{},"name":{},"text":{"52":{},"61":{},"68":{},"74":{},"78":{}},"component":{}}],["distribut",{"_index":393,"title":{"4-3":{}},"name":{},"text":{"4":{},"7":{},"18":{},"26":{},"64":{}},"component":{}}],["dive",{"_index":3736,"title":{},"name":{},"text":{"89":{}},"component":{}}],["divers",{"_index":437,"title":{},"name":{},"text":{"4":{},"8":{},"29":{}},"component":{}}],["divid",{"_index":1560,"title":{},"name":{},"text":{"18":{}},"component":{}}],["divis",{"_index":387,"title":{},"name":{},"text":{"3":{}},"component":{}}],["do",{"_index":2728,"title":{"53-2":{},"68-3":{}},"name":{},"text":{"53":{},"62":{},"68":{},"69":{},"72":{}},"component":{}}],["doc",{"_index":299,"title":{"2-6":{}},"name":{},"text":{"2":{},"81":{},"82":{},"83":{},"84":{},"86":{},"88":{}},"component":{}}],["docker",{"_index":1899,"title":{"38-5":{},"38-11":{}},"name":{},"text":{"38":{},"39":{}},"component":{}}],["docs.swmansion.com/scarb",{"_index":1461,"title":{},"name":{},"text":{"14":{}},"component":{}}],["document",{"_index":313,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"14":{},"18":{},"26":{},"38":{},"39":{},"54":{},"73":{},"81":{},"83":{},"84":{},"88":{}},"component":{}}],["doesn’t",{"_index":1414,"title":{},"name":{},"text":{"13":{},"15":{},"34":{},"58":{},"62":{},"64":{},"68":{},"76":{}},"component":{}}],["dojo",{"_index":1541,"title":{},"name":{},"text":{"17":{},"83":{},"88":{}},"component":{}}],["domain",{"_index":1061,"title":{"50-1":{}},"name":{},"text":{"8":{},"39":{},"70":{},"80":{}},"component":{}}],["domin",{"_index":2367,"title":{},"name":{},"text":{"41":{}},"component":{}}],["donat",{"_index":565,"title":{},"name":{},"text":{"4":{}},"component":{}}],["done",{"_index":539,"title":{},"name":{},"text":{"4":{},"9":{},"41":{},"53":{},"65":{},"72":{}},"component":{}}],["dont_filter_identifi",{"_index":1194,"title":{"10-11":{}},"name":{},"text":{"10":{},"41":{}},"component":{}}],["don’t",{"_index":1222,"title":{},"name":{},"text":{"10":{},"31":{},"34":{},"39":{},"64":{},"78":{},"89":{}},"component":{}}],["doubl",{"_index":691,"title":{},"name":{},"text":{"4":{}},"component":{}}],["down",{"_index":2398,"title":{},"name":{},"text":{"41":{},"53":{},"77":{},"80":{}},"component":{}}],["download",{"_index":2146,"title":{},"name":{},"text":{"39":{}},"component":{}}],["dp",{"_index":537,"title":{},"name":{},"text":{"4":{}},"component":{}}],["drain",{"_index":2731,"title":{},"name":{},"text":{"53":{}},"component":{}}],["draw",{"_index":339,"title":{},"name":{},"text":{"3":{},"11":{}},"component":{}}],["drawback",{"_index":2781,"title":{},"name":{},"text":{"56":{}},"component":{}}],["drop",{"_index":1369,"title":{},"name":{},"text":{"13":{},"39":{},"58":{},"72":{},"76":{}},"component":{}}],["drpc",{"_index":2533,"title":{},"name":{},"text":{"42":{}},"component":{}}],["dry_run",{"_index":2504,"title":{},"name":{},"text":{"41":{}},"component":{}}],["due",{"_index":224,"title":{},"name":{},"text":{"1":{},"4":{},"38":{},"39":{},"41":{},"56":{},"62":{}},"component":{}}],["dump",{"_index":3674,"title":{},"name":{},"text":{"83":{}},"component":{}}],["duplex",{"_index":1976,"title":{},"name":{},"text":{"38":{}},"component":{}}],["duplic",{"_index":878,"title":{},"name":{},"text":{"7":{}},"component":{}}],["dure",{"_index":1073,"title":{},"name":{},"text":{"8":{},"10":{},"12":{},"13":{},"15":{},"18":{},"21":{},"26":{},"32":{},"35":{},"36":{},"47":{},"61":{},"62":{},"66":{},"67":{},"77":{}},"component":{}}],["dwellir",{"_index":2536,"title":{},"name":{},"text":{"42":{}},"component":{}}],["dynam",{"_index":909,"title":{},"name":{},"text":{"7":{},"18":{},"85":{}},"component":{}}],["e",{"_index":3599,"title":{},"name":{},"text":{"79":{}},"component":{}}],["e.emit",{"_index":3600,"title":{},"name":{},"text":{"79":{}},"component":{}}],["e.g",{"_index":1064,"title":{},"name":{},"text":{"8":{},"41":{},"53":{},"68":{},"75":{},"89":{}},"component":{}}],["each",{"_index":207,"title":{},"name":{},"text":{"1":{},"4":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"16":{},"17":{},"18":{},"29":{},"35":{},"38":{},"39":{},"41":{},"44":{},"47":{},"53":{},"59":{},"60":{},"61":{},"64":{},"65":{},"66":{},"67":{},"71":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{}},"component":{}}],["earli",{"_index":521,"title":{},"name":{},"text":{"4":{}},"component":{}}],["earlier",{"_index":2154,"title":{},"name":{},"text":{"39":{}},"component":{}}],["earn",{"_index":1576,"title":{},"name":{},"text":{"18":{},"20":{},"21":{},"26":{}},"component":{}}],["eas",{"_index":797,"title":{},"name":{},"text":{"6":{},"18":{}},"component":{}}],["easi",{"_index":3339,"title":{},"name":{},"text":{"68":{},"84":{}},"component":{}}],["easier",{"_index":1467,"title":{},"name":{},"text":{"14":{},"82":{},"89":{}},"component":{}}],["easiest",{"_index":3715,"title":{},"name":{},"text":{"88":{}},"component":{}}],["easili",{"_index":1513,"title":{},"name":{},"text":{"17":{},"89":{}},"component":{}}],["ec",{"_index":2519,"title":{},"name":{},"text":{"41":{}},"component":{}}],["ec_op",{"_index":3049,"title":{},"name":{},"text":{"61":{},"69":{}},"component":{}}],["ecdsa",{"_index":96,"title":{},"name":{},"text":{"1":{},"52":{},"61":{},"67":{},"69":{}},"component":{}}],["ecdsahashpointsxcolumn",{"_index":959,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ecdsahashpointsycolumn",{"_index":961,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ecdsapoint",{"_index":1037,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ecdsapointsxcolumn",{"_index":1056,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ecdsapointsycolumn",{"_index":1057,"title":{},"name":{},"text":{"8":{}},"component":{}}],["econom",{"_index":390,"title":{"4":{},"4-1":{},"26-7":{}},"name":{"4":{}},"text":{"4":{},"18":{},"26":{}},"component":{}}],["ecosystem",{"_index":557,"title":{"6-1":{}},"name":{},"text":{"4":{},"6":{},"7":{},"14":{},"29":{},"45":{},"49":{},"64":{},"88":{}},"component":{}}],["ecosystem’",{"_index":741,"title":{},"name":{},"text":{"6":{}},"component":{}}],["edg",{"_index":3105,"title":{},"name":{},"text":{"62":{}},"component":{}}],["edit",{"_index":3699,"title":{},"name":{},"text":{"85":{}},"component":{}}],["effect",{"_index":239,"title":{},"name":{},"text":{"1":{},"6":{},"7":{},"8":{},"14":{},"25":{},"41":{},"64":{}},"component":{}}],["effici",{"_index":747,"title":{},"name":{},"text":{"6":{},"7":{},"8":{},"14":{},"38":{},"47":{},"50":{},"64":{},"65":{},"67":{},"69":{},"71":{}},"component":{}}],["eip",{"_index":2389,"title":{"60-2":{}},"name":{},"text":{"41":{},"54":{},"56":{},"60":{},"61":{}},"component":{}}],["eip4844",{"_index":2429,"title":{},"name":{},"text":{"41":{}},"component":{}}],["ekubo",{"_index":2596,"title":{},"name":{},"text":{"45":{}},"component":{}}],["elect",{"_index":3196,"title":{},"name":{},"text":{"64":{}},"component":{}}],["element",{"_index":333,"title":{},"name":{},"text":{"3":{},"9":{},"38":{},"50":{},"51":{},"60":{},"61":{},"62":{},"65":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"75":{},"78":{},"79":{},"80":{}},"component":{}}],["elig",{"_index":2760,"title":{},"name":{},"text":{"53":{}},"component":{}}],["ell",{"_index":2879,"title":{},"name":{},"text":{"59":{},"61":{}},"component":{}}],["ell_l",{"_index":3232,"title":{},"name":{},"text":{"65":{}},"component":{}}],["ell_r",{"_index":3235,"title":{},"name":{},"text":{"65":{}},"component":{}}],["ellipsi",{"_index":367,"title":{},"name":{},"text":{"3":{}},"component":{}}],["ellipt",{"_index":1039,"title":{},"name":{},"text":{"8":{},"50":{},"52":{}},"component":{}}],["elm_ptr",{"_index":3350,"title":{},"name":{},"text":{"68":{}},"component":{}}],["elm_ptr=elm_ptr",{"_index":3356,"title":{},"name":{},"text":{"68":{}},"component":{}}],["elm_siz",{"_index":3348,"title":{},"name":{},"text":{"68":{}},"component":{}}],["embed",{"_index":2289,"title":{},"name":{},"text":{"39":{}},"component":{}}],["embed_v0",{"_index":1379,"title":{},"name":{},"text":{"13":{}},"component":{}}],["emiss",{"_index":1951,"title":{},"name":{},"text":{"38":{},"61":{}},"component":{}}],["emit",{"_index":1450,"title":{"34-8":{},"34-16":{},"34-24":{},"34-33":{},"34-41":{},"34-50":{},"34-59":{},"34-67":{},"34-76":{},"34-85":{},"34-93":{},"34-101":{},"34-109":{},"34-117":{},"34-125":{},"34-132":{},"63-7":{},"63-14":{},"63-57":{},"63-64":{},"79-1":{}},"name":{},"text":{"13":{},"32":{},"34":{},"35":{},"39":{},"41":{},"47":{},"58":{},"59":{},"61":{},"62":{},"63":{},"66":{},"72":{},"76":{},"79":{},"80":{}},"component":{}}],["emit_ev",{"_index":3603,"title":{"80-27":{}},"name":{},"text":{"79":{}},"component":{}}],["emit_event_syscal",{"_index":3607,"title":{},"name":{},"text":{"79":{},"80":{}},"component":{}}],["emitter_address",{"_index":2902,"title":{},"name":{},"text":{"59":{}},"component":{}}],["emphas",{"_index":2274,"title":{},"name":{},"text":{"39":{}},"component":{}}],["employ",{"_index":1049,"title":{},"name":{},"text":{"8":{},"16":{}},"component":{}}],["empti",{"_index":1183,"title":{},"name":{},"text":{"9":{},"13":{},"53":{},"65":{},"67":{},"78":{}},"component":{}}],["enabl",{"_index":50,"title":{},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"9":{},"13":{},"15":{},"18":{},"21":{},"29":{},"30":{},"31":{},"34":{},"35":{},"38":{},"39":{},"41":{},"48":{},"56":{},"58":{},"61":{},"62":{},"64":{},"67":{},"69":{},"71":{},"74":{},"80":{},"83":{}},"component":{}}],["encapsul",{"_index":3453,"title":{},"name":{},"text":{"72":{}},"component":{}}],["enclos",{"_index":374,"title":{},"name":{},"text":{"3":{}},"component":{}}],["encod",{"_index":2057,"title":{},"name":{},"text":{"38":{},"53":{},"60":{},"61":{},"62":{},"65":{},"67":{},"70":{},"73":{},"75":{},"78":{},"79":{},"81":{}},"component":{}}],["encompass",{"_index":871,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["encount",{"_index":1319,"title":{},"name":{},"text":{"12":{}},"component":{}}],["encourag",{"_index":427,"title":{},"name":{},"text":{"4":{},"13":{},"45":{}},"component":{}}],["encrypt",{"_index":1159,"title":{},"name":{},"text":{"9":{},"16":{}},"component":{}}],["end",{"_index":1410,"title":{},"name":{},"text":{"13":{},"16":{},"41":{},"61":{},"64":{},"79":{},"89":{}},"component":{}}],["endian",{"_index":2524,"title":{},"name":{},"text":{"41":{},"62":{}},"component":{}}],["endors",{"_index":3407,"title":{},"name":{},"text":{"71":{}},"component":{}}],["endpoint",{"_index":760,"title":{"9-3":{}},"name":{},"text":{"6":{},"9":{},"11":{},"16":{},"38":{},"39":{},"41":{},"42":{}},"component":{}}],["endpoints/starknet",{"_index":2535,"title":{},"name":{},"text":{"42":{}},"component":{}}],["end{align",{"_index":1658,"title":{},"name":{},"text":{"26":{},"52":{},"59":{},"61":{}},"component":{}}],["end{cas",{"_index":2709,"title":{},"name":{},"text":{"50":{},"65":{}},"component":{}}],["end{split",{"_index":2726,"title":{},"name":{},"text":{"52":{}},"component":{}}],["enforc",{"_index":1796,"title":{},"name":{},"text":{"33":{},"37":{},"41":{},"53":{},"61":{},"68":{},"70":{},"72":{}},"component":{}}],["engag",{"_index":533,"title":{},"name":{},"text":{"4":{}},"component":{}}],["engin",{"_index":3681,"title":{},"name":{},"text":{"83":{},"88":{}},"component":{}}],["enhanc",{"_index":807,"title":{"41-3":{},"41-12":{}},"name":{},"text":{"6":{},"7":{},"8":{},"13":{},"14":{},"18":{},"36":{},"37":{},"38":{},"64":{},"69":{},"71":{}},"component":{}}],["enough",{"_index":1503,"title":{},"name":{},"text":{"16":{},"22":{},"32":{},"35":{},"36":{},"41":{},"61":{},"62":{},"65":{},"68":{}},"component":{}}],["enrich",{"_index":1993,"title":{},"name":{},"text":{"38":{},"56":{}},"component":{}}],["enrol",{"_index":1688,"title":{},"name":{},"text":{"28":{},"33":{},"34":{}},"component":{}}],["enrolltokenbridg",{"_index":1689,"title":{"34-53":{}},"name":{},"text":{"28":{},"29":{},"34":{}},"component":{}}],["ensur",{"_index":219,"title":{"11-2":{},"12-2":{},"15-2":{}},"name":{},"text":{"1":{},"4":{},"6":{},"7":{},"8":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"18":{},"19":{},"22":{},"24":{},"27":{},"29":{},"31":{},"38":{},"47":{},"58":{},"61":{},"64":{},"66":{},"68":{},"71":{},"73":{}},"component":{}}],["enter",{"_index":876,"title":{},"name":{"21":{}},"text":{"7":{},"9":{},"10":{},"16":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{},"29":{},"32":{},"36":{},"66":{}},"component":{}}],["enter_delegation_pool",{"_index":1581,"title":{},"name":{},"text":{"18":{},"20":{}},"component":{}}],["entir",{"_index":179,"title":{},"name":{},"text":{"1":{},"6":{},"8":{},"18":{},"37":{},"53":{},"64":{},"68":{},"80":{}},"component":{}}],["entiti",{"_index":181,"title":{},"name":{},"text":{"1":{},"13":{},"41":{},"47":{},"62":{},"64":{}},"component":{}}],["entr",{"_index":1535,"title":{},"name":{},"text":{"17":{}},"component":{}}],["entri",{"_index":122,"title":{"72-9":{}},"name":{},"text":{"1":{},"26":{},"41":{},"61":{},"65":{},"70":{},"72":{},"74":{}},"component":{}}],["entro",{"_index":3708,"title":{"87-2":{}},"name":{},"text":{"87":{}},"component":{}}],["entry/exit",{"_index":1671,"title":{},"name":{},"text":{"26":{}},"component":{}}],["entry_point_selector",{"_index":3116,"title":{},"name":{},"text":{"62":{},"67":{},"77":{},"80":{}},"component":{}}],["entry_point_typ",{"_index":2480,"title":{},"name":{},"text":{"41":{}},"component":{}}],["entrypoint",{"_index":2207,"title":{},"name":{},"text":{"39":{}},"component":{}}],["enum",{"_index":1371,"title":{"72-6":{},"72-7":{},"78-7":{}},"name":{},"text":{"13":{},"41":{},"72":{},"76":{},"78":{}},"component":{}}],["enumer",{"_index":3043,"title":{},"name":{},"text":{"61":{}},"component":{}}],["enum’",{"_index":3580,"title":{},"name":{},"text":{"78":{}},"component":{}}],["env",{"_index":2240,"title":{},"name":{},"text":{"39":{}},"component":{}}],["environ",{"_index":303,"title":{"14":{},"9-2":{},"13-1":{},"13-2":{},"14-2":{},"41-1":{}},"name":{"14":{}},"text":{"2":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"37":{},"39":{},"41":{},"58":{},"88":{}},"component":{}}],["eoa",{"_index":2767,"title":{},"name":{},"text":{"54":{},"56":{}},"component":{}}],["ephemer",{"_index":2194,"title":{},"name":{},"text":{"39":{}},"component":{}}],["epoch",{"_index":1670,"title":{},"name":{},"text":{"26":{},"59":{},"77":{}},"component":{}}],["eqlab",{"_index":1608,"title":{},"name":{},"text":{"21":{}},"component":{}}],["equal",{"_index":1636,"title":{},"name":{},"text":{"25":{},"27":{},"61":{},"72":{}},"component":{}}],["equilibrium",{"_index":790,"title":{},"name":{},"text":{"6":{},"42":{}},"component":{}}],["equip",{"_index":738,"title":{},"name":{},"text":{"6":{}},"component":{}}],["equiti",{"_index":505,"title":{},"name":{},"text":{"4":{}},"component":{}}],["equiv",{"_index":2716,"title":{},"name":{},"text":{"52":{}},"component":{}}],["equival",{"_index":2711,"title":{},"name":{},"text":{"50":{},"68":{}},"component":{}}],["erc",{"_index":1691,"title":{},"name":{},"text":{"29":{},"34":{},"35":{},"36":{},"41":{},"44":{},"56":{},"61":{},"72":{}},"component":{}}],["erc20",{"_index":1610,"title":{},"name":{},"text":{"21":{}},"component":{}}],["err",{"_index":3639,"title":{},"name":{},"text":{"80":{}},"component":{}}],["error",{"_index":225,"title":{"12-7":{},"80-7":{}},"name":{},"text":{"1":{},"4":{},"9":{},"12":{},"16":{},"38":{},"39":{},"41":{},"90":{}},"component":{}}],["error_messag",{"_index":1181,"title":{},"name":{},"text":{"9":{}},"component":{}}],["especi",{"_index":2127,"title":{},"name":{},"text":{"39":{},"78":{}},"component":{}}],["essenc",{"_index":1074,"title":{},"name":{},"text":{"8":{},"64":{}},"component":{}}],["essenti",{"_index":498,"title":{},"name":{},"text":{"4":{},"6":{},"8":{},"13":{},"71":{}},"component":{}}],["establish",{"_index":156,"title":{},"name":{},"text":{"1":{},"8":{},"13":{},"64":{}},"component":{}}],["estim",{"_index":197,"title":{"33":{},"67-23":{}},"name":{"33":{}},"text":{"1":{},"4":{},"9":{},"16":{},"33":{},"34":{},"39":{},"41":{},"61":{},"62":{},"67":{}},"component":{}}],["estimate_fe",{"_index":1089,"title":{"9-8":{}},"name":{},"text":{"9":{}},"component":{}}],["estimate_fee_bulk",{"_index":2474,"title":{},"name":{},"text":{"41":{}},"component":{}}],["estimate_message_fe",{"_index":1090,"title":{"9-9":{}},"name":{},"text":{"9":{}},"component":{}}],["estimatedepositfeewei",{"_index":1797,"title":{"34-61":{}},"name":{},"text":{"33":{},"34":{}},"component":{}}],["estimateenrollmentfeewei",{"_index":1798,"title":{"34-70":{}},"name":{},"text":{"33":{},"34":{}},"component":{}}],["etc",{"_index":570,"title":{},"name":{},"text":{"4":{},"9":{},"62":{}},"component":{}}],["eth",{"_index":474,"title":{},"name":{},"text":{"4":{},"16":{},"17":{},"29":{},"32":{},"35":{},"38":{},"46":{},"57":{},"61":{},"62":{}},"component":{}}],["eth_l1_gas_pric",{"_index":2405,"title":{},"name":{},"text":{"41":{}},"component":{}}],["ethaddress",{"_index":1846,"title":{},"name":{},"text":{"34":{},"62":{},"78":{}},"component":{}}],["ethaddresszeroable::zero",{"_index":1847,"title":{},"name":{},"text":{"34":{}},"component":{}}],["ether",{"_index":473,"title":{},"name":{},"text":{"4":{},"29":{}},"component":{}}],["ethereum",{"_index":150,"title":{"56-1":{},"60-9":{}},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"8":{},"29":{},"32":{},"34":{},"35":{},"36":{},"39":{},"41":{},"47":{},"53":{},"54":{},"56":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"68":{},"80":{},"85":{},"88":{}},"component":{}}],["ethereumaddress",{"_index":3112,"title":{},"name":{},"text":{"62":{}},"component":{}}],["ethereum’",{"_index":169,"title":{},"name":{},"text":{"1":{},"2":{},"37":{},"54":{},"64":{},"66":{},"74":{},"80":{}},"component":{}}],["etherscan",{"_index":1710,"title":{},"name":{},"text":{"29":{},"32":{},"36":{},"63":{}},"component":{}}],["even",{"_index":901,"title":{},"name":{},"text":{"7":{},"12":{},"31":{},"35":{},"53":{},"56":{},"61":{},"64":{},"68":{}},"component":{}}],["event",{"_index":1351,"title":{"23":{},"34":{},"63":{},"79":{},"34-8":{},"34-9":{},"34-16":{},"34-17":{},"34-24":{},"34-25":{},"34-33":{},"34-34":{},"34-41":{},"34-42":{},"34-50":{},"34-51":{},"34-59":{},"34-60":{},"34-67":{},"34-76":{},"34-85":{},"34-93":{},"34-101":{},"34-109":{},"34-117":{},"34-125":{},"34-132":{},"34-133":{},"41-21":{},"58-10":{},"59-4":{},"61-19":{},"63-7":{},"63-14":{},"63-57":{},"63-64":{},"63-66":{},"63-69":{},"63-70":{},"63-73":{},"63-74":{},"63-77":{},"63-78":{},"63-81":{},"63-82":{},"72-4":{},"72-6":{},"72-10":{},"79-1":{},"79-2":{},"79-3":{}},"name":{"79":{}},"text":{"13":{},"23":{},"32":{},"34":{},"35":{},"38":{},"39":{},"41":{},"47":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"66":{},"72":{},"76":{},"79":{},"80":{},"87":{}},"component":{}}],["event::counterincreas",{"_index":3528,"title":{},"name":{},"text":{"76":{}},"component":{}}],["event::ownershiptransf",{"_index":1386,"title":{},"name":{},"text":{"13":{}},"component":{}}],["event::testenum",{"_index":3465,"title":{},"name":{},"text":{"72":{}},"component":{}}],["event\\_nam",{"_index":3602,"title":{},"name":{},"text":{"79":{}},"component":{}}],["event_commit",{"_index":3619,"title":{},"name":{},"text":{"79":{}},"component":{}}],["event_count",{"_index":2845,"title":{},"name":{},"text":{"59":{}},"component":{}}],["events_commit",{"_index":2838,"title":{},"name":{},"text":{"59":{}},"component":{}}],["events_count",{"_index":2829,"title":{},"name":{},"text":{"59":{}},"component":{}}],["eventu",{"_index":1646,"title":{},"name":{},"text":{"26":{},"50":{},"53":{},"61":{},"68":{}},"component":{}}],["event’",{"_index":2465,"title":{},"name":{},"text":{"41":{},"72":{},"79":{},"80":{}},"component":{}}],["everyon",{"_index":859,"title":{},"name":{},"text":{"7":{}},"component":{}}],["everyth",{"_index":125,"title":{},"name":{},"text":{"1":{},"74":{},"83":{}},"component":{}}],["evm",{"_index":3698,"title":{},"name":{},"text":{"85":{},"88":{}},"component":{}}],["evolv",{"_index":828,"title":{},"name":{},"text":{"7":{},"26":{},"39":{},"76":{}},"component":{}}],["exact",{"_index":2187,"title":{},"name":{},"text":{"39":{},"61":{}},"component":{}}],["exactli",{"_index":1172,"title":{},"name":{},"text":{"9":{},"31":{},"34":{},"53":{},"78":{}},"component":{}}],["examin",{"_index":3557,"title":{},"name":{},"text":{"78":{}},"component":{}}],["exampl",{"_index":359,"title":{"10-2":{},"13-4":{},"29-3":{},"56-3":{},"60-5":{},"60-8":{},"65-9":{},"72-2":{},"80-14":{},"80-33":{},"80-46":{},"80-59":{}},"name":{},"text":{"3":{},"4":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"21":{},"25":{},"30":{},"32":{},"34":{},"36":{},"41":{},"53":{},"56":{},"58":{},"60":{},"61":{},"62":{},"65":{},"66":{},"67":{},"68":{},"72":{},"74":{},"75":{},"76":{},"78":{},"79":{},"80":{},"88":{},"89":{}},"component":{}}],["exce",{"_index":2912,"title":{},"name":{},"text":{"60":{},"66":{}},"component":{}}],["excel",{"_index":792,"title":{},"name":{},"text":{"6":{},"13":{},"64":{}},"component":{}}],["except",{"_index":3615,"title":{},"name":{},"text":{"79":{}},"component":{}}],["excess_blob_ga",{"_index":3015,"title":{},"name":{},"text":{"61":{}},"component":{}}],["exchang",{"_index":1759,"title":{},"name":{},"text":{"30":{},"62":{}},"component":{}}],["exclud",{"_index":596,"title":{},"name":{},"text":{"4":{},"39":{}},"component":{}}],["execut",{"_index":81,"title":{"77":{}},"name":{"77":{}},"text":{"1":{},"6":{},"7":{},"8":{},"9":{},"10":{},"13":{},"14":{},"17":{},"19":{},"20":{},"21":{},"24":{},"27":{},"30":{},"34":{},"38":{},"39":{},"41":{},"47":{},"53":{},"54":{},"55":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"77":{},"79":{},"80":{},"83":{},"89":{}},"component":{}}],["execution_info",{"_index":3635,"title":{},"name":{},"text":{"80":{}},"component":{}}],["execution_info.block_info.unbox",{"_index":3636,"title":{},"name":{},"text":{"80":{}},"component":{}}],["execution_resourc",{"_index":2352,"title":{},"name":{},"text":{"41":{},"66":{}},"component":{}}],["execution_statu",{"_index":3260,"title":{},"name":{},"text":{"66":{}},"component":{}}],["executioninfo",{"_index":3529,"title":{"77-1":{}},"name":{},"text":{"77":{},"80":{}},"component":{}}],["exhibit",{"_index":2126,"title":{},"name":{},"text":{"39":{}},"component":{}}],["exist",{"_index":159,"title":{},"name":{},"text":{"1":{},"4":{},"11":{},"13":{},"18":{},"19":{},"24":{},"25":{},"27":{},"29":{},"34":{},"38":{},"39":{},"41":{},"45":{},"53":{},"55":{},"61":{},"65":{},"67":{},"68":{},"74":{},"81":{}},"component":{}}],["exit",{"_index":1208,"title":{"22":{}},"name":{"22":{}},"text":{"10":{},"18":{},"22":{},"23":{},"26":{},"38":{}},"component":{}}],["exit_delegation_pool_act",{"_index":1587,"title":{},"name":{},"text":{"18":{},"22":{}},"component":{}}],["exit_delegation_pool_int",{"_index":1585,"title":{},"name":{},"text":{"18":{},"22":{}},"component":{}}],["expand",{"_index":1939,"title":{},"name":{},"text":{"38":{},"65":{}},"component":{}}],["expans",{"_index":3222,"title":{},"name":{},"text":{"65":{}},"component":{}}],["expect",{"_index":804,"title":{"11-9":{},"12-5":{}},"name":{},"text":{"6":{},"9":{},"12":{},"15":{},"21":{},"26":{},"38":{},"39":{},"41":{},"53":{},"60":{},"80":{}},"component":{}}],["expens",{"_index":89,"title":{},"name":{},"text":{"1":{},"69":{}},"component":{}}],["experi",{"_index":779,"title":{},"name":{},"text":{"6":{},"38":{},"49":{},"54":{},"56":{},"88":{},"89":{}},"component":{}}],["experiment",{"_index":2136,"title":{},"name":{},"text":{"39":{},"41":{}},"component":{}}],["expir",{"_index":1624,"title":{},"name":{},"text":{"22":{}},"component":{}}],["explain",{"_index":2541,"title":{},"name":{},"text":{"42":{},"75":{}},"component":{}}],["explan",{"_index":329,"title":{},"name":{},"text":{"3":{},"60":{},"66":{}},"component":{}}],["explicitli",{"_index":1178,"title":{},"name":{},"text":{"9":{},"41":{},"53":{},"80":{}},"component":{}}],["explor",{"_index":292,"title":{"48":{},"2-1":{},"13-3":{}},"name":{"48":{}},"text":{"2":{},"6":{},"7":{},"11":{},"12":{},"13":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{},"32":{},"34":{},"36":{},"48":{},"49":{},"63":{}},"component":{}}],["exponenti",{"_index":843,"title":{},"name":{},"text":{"7":{}},"component":{}}],["export",{"_index":1107,"title":{"16-5":{}},"name":{},"text":{"9":{},"14":{},"16":{}},"component":{}}],["expos",{"_index":1757,"title":{},"name":{},"text":{"29":{},"38":{},"39":{},"58":{},"80":{}},"component":{}}],["express",{"_index":120,"title":{},"name":{},"text":{"1":{},"4":{},"25":{},"41":{}},"component":{}}],["extend",{"_index":2009,"title":{},"name":{},"text":{"38":{},"54":{}},"component":{}}],["extens",{"_index":1435,"title":{"90":{}},"name":{},"text":{"13":{},"39":{},"41":{},"90":{}},"component":{}}],["extent",{"_index":729,"title":{},"name":{},"text":{"4":{}},"component":{}}],["extern",{"_index":912,"title":{},"name":{},"text":{"7":{},"13":{},"34":{},"41":{},"53":{},"54":{},"56":{},"65":{},"70":{},"72":{},"76":{},"80":{}},"component":{}}],["external_entry_point",{"_index":3393,"title":{},"name":{},"text":{"70":{}},"component":{}}],["extra",{"_index":3538,"title":{},"name":{},"text":{"77":{}},"component":{}}],["extract",{"_index":2907,"title":{"60-9":{}},"name":{},"text":{"60":{}},"component":{}}],["extrem",{"_index":2910,"title":{},"name":{},"text":{"60":{},"83":{}},"component":{}}],["extropi",{"_index":2569,"title":{},"name":{},"text":{"43":{}},"component":{}}],["f",{"_index":2963,"title":{},"name":{},"text":{"61":{}},"component":{}}],["f[1600",{"_index":3383,"title":{},"name":{},"text":{"69":{}},"component":{}}],["facial",{"_index":2789,"title":{},"name":{},"text":{"56":{}},"component":{}}],["facilit",{"_index":418,"title":{},"name":{},"text":{"4":{},"8":{},"18":{},"34":{},"58":{},"88":{}},"component":{}}],["fact",{"_index":191,"title":{},"name":{},"text":{"1":{},"7":{},"8":{},"35":{},"61":{},"68":{}},"component":{}}],["factor",{"_index":722,"title":{},"name":{},"text":{"4":{},"7":{},"61":{}},"component":{}}],["factori",{"_index":1298,"title":{},"name":{},"text":{"12":{},"58":{}},"component":{}}],["fail",{"_index":178,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"11":{},"12":{},"15":{},"16":{},"17":{},"19":{},"22":{},"24":{},"27":{},"30":{},"34":{},"35":{},"39":{},"41":{},"53":{},"66":{},"68":{},"69":{},"80":{}},"component":{}}],["failur",{"_index":1506,"title":{},"name":{},"text":{"16":{},"38":{},"53":{},"66":{},"68":{}},"component":{}}],["fair",{"_index":459,"title":{},"name":{},"text":{"4":{},"61":{}},"component":{}}],["fairli",{"_index":1590,"title":{},"name":{},"text":{"18":{}},"component":{}}],["fake",{"_index":2499,"title":{},"name":{},"text":{"41":{}},"component":{}}],["fallback",{"_index":1948,"title":{},"name":{},"text":{"38":{}},"component":{}}],["fals",{"_index":1613,"title":{},"name":{},"text":{"21":{},"30":{},"34":{},"38":{},"39":{},"58":{},"80":{}},"component":{}}],["famili",{"_index":2675,"title":{},"name":{},"text":{"50":{}},"component":{}}],["familiar",{"_index":698,"title":{},"name":{},"text":{"4":{}},"component":{}}],["faq",{"_index":2245,"title":{},"name":{},"text":{"39":{},"42":{}},"component":{}}],["far",{"_index":2422,"title":{},"name":{},"text":{"41":{}},"component":{}}],["fashion",{"_index":2205,"title":{},"name":{},"text":{"39":{}},"component":{}}],["fast",{"_index":2281,"title":{},"name":{},"text":{"39":{},"60":{},"81":{},"83":{}},"component":{}}],["fast_pedersen_hash.pi",{"_index":2673,"title":{},"name":{},"text":{"50":{}},"component":{}}],["faster",{"_index":746,"title":{},"name":{},"text":{"6":{},"7":{},"17":{},"38":{},"41":{},"64":{},"83":{},"87":{}},"component":{}}],["faucet",{"_index":1437,"title":{},"name":{},"text":{"13":{},"16":{}},"component":{}}],["favor",{"_index":2275,"title":{},"name":{},"text":{"39":{}},"component":{}}],["featru",{"_index":3711,"title":{},"name":{},"text":{"87":{}},"component":{}}],["featur",{"_index":164,"title":{"37":{},"37-1":{},"37-2":{},"41-3":{},"41-12":{}},"name":{},"text":{"1":{},"6":{},"7":{},"13":{},"26":{},"37":{},"38":{},"39":{},"41":{},"45":{},"49":{},"72":{},"83":{},"87":{},"88":{},"89":{},"90":{}},"component":{}}],["fee",{"_index":198,"title":{"33":{},"61":{},"46-3":{},"61-1":{},"61-2":{},"61-3":{},"61-4":{},"61-5":{},"61-9":{},"61-10":{},"62-6":{},"67-23":{}},"name":{"33":{},"61":{}},"text":{"1":{},"4":{},"7":{},"9":{},"16":{},"17":{},"32":{},"33":{},"34":{},"36":{},"37":{},"39":{},"41":{},"46":{},"53":{},"55":{},"56":{},"57":{},"59":{},"61":{},"62":{},"63":{},"66":{},"67":{},"68":{},"77":{}},"component":{}}],["fee_data_availability_mod",{"_index":3277,"title":{},"name":{},"text":{"67":{},"77":{}},"component":{}}],["fee_estim",{"_index":2410,"title":{},"name":{},"text":{"41":{}},"component":{}}],["feedback",{"_index":873,"title":{},"name":{},"text":{"7":{},"41":{}},"component":{}}],["feeder",{"_index":1112,"title":{"41-5":{}},"name":{},"text":{"9":{},"37":{},"38":{},"39":{},"41":{},"64":{}},"component":{}}],["feeder_gateway_url",{"_index":1110,"title":{},"name":{},"text":{"9":{}},"component":{}}],["feetoken",{"_index":1517,"title":{},"name":{},"text":{"17":{}},"component":{}}],["felt",{"_index":2223,"title":{},"name":{},"text":{"39":{},"41":{},"47":{},"51":{},"61":{},"67":{},"68":{},"69":{},"75":{},"78":{},"79":{},"80":{}},"component":{}}],["felt252",{"_index":1844,"title":{},"name":{},"text":{"34":{},"51":{},"58":{},"59":{},"62":{},"72":{},"75":{},"77":{},"78":{},"80":{}},"component":{}}],["fetch",{"_index":1395,"title":{},"name":{},"text":{"13":{},"16":{},"17":{},"38":{},"81":{},"88":{}},"component":{}}],["few",{"_index":488,"title":{},"name":{},"text":{"4":{},"39":{},"41":{},"53":{}},"component":{}}],["fewer",{"_index":3375,"title":{},"name":{},"text":{"69":{}},"component":{}}],["fft",{"_index":2916,"title":{},"name":{},"text":{"60":{}},"component":{}}],["fibrou",{"_index":2598,"title":{},"name":{},"text":{"45":{}},"component":{}}],["field",{"_index":905,"title":{"51":{},"67-3":{},"67-5":{},"67-9":{},"67-11":{},"67-13":{},"67-17":{},"67-19":{}},"name":{},"text":{"7":{},"9":{},"10":{},"13":{},"38":{},"39":{},"41":{},"50":{},"51":{},"53":{},"59":{},"61":{},"65":{},"66":{},"67":{},"69":{},"70":{},"72":{},"75":{},"77":{},"78":{},"79":{}},"component":{}}],["fieldel",{"_index":3113,"title":{},"name":{},"text":{"62":{},"67":{}},"component":{}}],["figur",{"_index":593,"title":{},"name":{},"text":{"4":{},"8":{},"62":{},"65":{}},"component":{}}],["file",{"_index":351,"title":{"10-5":{},"16-4":{},"39-66":{}},"name":{},"text":{"3":{},"9":{},"10":{},"11":{},"13":{},"14":{},"16":{},"17":{},"35":{},"39":{},"41":{},"44":{},"47":{},"72":{},"81":{},"87":{},"89":{}},"component":{}}],["filenam",{"_index":2278,"title":{},"name":{},"text":{"39":{}},"component":{}}],["file’",{"_index":2517,"title":{},"name":{},"text":{"41":{}},"component":{}}],["fill",{"_index":1420,"title":{},"name":{},"text":{"13":{},"35":{},"53":{},"61":{},"78":{}},"component":{}}],["filter",{"_index":1211,"title":{},"name":{},"text":{"10":{},"39":{},"80":{}},"component":{}}],["final",{"_index":486,"title":{},"name":{},"text":{"4":{},"18":{},"22":{},"35":{},"39":{},"41":{},"61":{},"62":{},"64":{},"65":{},"66":{},"72":{},"75":{}},"component":{}}],["finality_statu",{"_index":1421,"title":{},"name":{},"text":{"13":{},"66":{}},"component":{}}],["financi",{"_index":711,"title":{},"name":{},"text":{"4":{}},"component":{}}],["find",{"_index":1267,"title":{},"name":{},"text":{"11":{},"60":{},"68":{},"72":{},"88":{}},"component":{}}],["find_el",{"_index":3345,"title":{},"name":{},"text":{"68":{}},"component":{}}],["find_element{range_check_ptr",{"_index":3346,"title":{},"name":{},"text":{"68":{}},"component":{}}],["fine",{"_index":3365,"title":{},"name":{},"text":{"68":{}},"component":{}}],["fingerprint",{"_index":3409,"title":{},"name":{},"text":{"71":{}},"component":{}}],["finish",{"_index":3649,"title":{},"name":{},"text":{"80":{}},"component":{}}],["finit",{"_index":1215,"title":{},"name":{},"text":{"10":{},"51":{}},"component":{}}],["first",{"_index":342,"title":{},"name":{},"text":{"3":{},"7":{},"17":{},"22":{},"26":{},"34":{},"38":{},"39":{},"41":{},"50":{},"56":{},"59":{},"60":{},"61":{},"62":{},"67":{},"72":{},"75":{},"78":{},"80":{}},"component":{}}],["first_v0_12_0_block",{"_index":3632,"title":{},"name":{},"text":{"80":{}},"component":{}}],["fit",{"_index":880,"title":{},"name":{},"text":{"7":{},"8":{},"50":{},"61":{},"66":{}},"component":{}}],["five",{"_index":1777,"title":{},"name":{},"text":{"31":{},"34":{},"61":{},"62":{}},"component":{}}],["fix",{"_index":354,"title":{"38-4":{},"38-9":{},"38-14":{},"38-22":{},"38-26":{},"38-33":{},"38-37":{},"38-39":{},"38-45":{},"39-2":{},"39-4":{},"39-7":{},"39-9":{},"39-13":{},"39-16":{},"39-18":{},"39-24":{},"39-25":{},"39-28":{},"39-31":{},"39-34":{},"39-36":{},"39-41":{},"39-48":{},"39-52":{},"39-56":{},"39-60":{},"39-68":{}},"name":{},"text":{"3":{},"4":{},"7":{},"37":{},"38":{},"39":{},"41":{},"56":{},"61":{},"62":{},"65":{},"77":{},"90":{}},"component":{}}],["flag",{"_index":1265,"title":{},"name":{},"text":{"11":{},"14":{},"38":{},"39":{},"41":{},"60":{},"61":{},"80":{}},"component":{}}],["flag}}_{\\text{1",{"_index":2924,"title":{},"name":{},"text":{"60":{}},"component":{}}],["flame",{"_index":3735,"title":{},"name":{},"text":{"89":{}},"component":{}}],["flat",{"_index":3451,"title":{},"name":{},"text":{"72":{}},"component":{}}],["flatten",{"_index":3415,"title":{"72-7":{}},"name":{},"text":{},"component":{}}],["flexibl",{"_index":825,"title":{},"name":{},"text":{"7":{},"18":{},"54":{},"56":{},"64":{},"68":{},"72":{}},"component":{}}],["flood",{"_index":3188,"title":{},"name":{},"text":{"64":{}},"component":{}}],["flow",{"_index":103,"title":{"57":{},"8-7":{},"64-1":{},"66-1":{}},"name":{"57":{}},"text":{"1":{},"34":{},"62":{},"64":{},"66":{},"68":{},"87":{}},"component":{}}],["fn",{"_index":1357,"title":{},"name":{},"text":{"13":{},"58":{},"72":{},"76":{},"79":{},"80":{}},"component":{}}],["focu",{"_index":2007,"title":{},"name":{},"text":{"38":{},"39":{},"72":{},"88":{}},"component":{}}],["focus",{"_index":800,"title":{},"name":{},"text":{"6":{},"8":{},"88":{}},"component":{}}],["focustre",{"_index":3707,"title":{},"name":{},"text":{"86":{}},"component":{}}],["follow",{"_index":69,"title":{},"name":{},"text":{"1":{},"4":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"29":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"44":{},"45":{},"48":{},"50":{},"51":{},"52":{},"53":{},"55":{},"56":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"70":{},"71":{},"72":{},"73":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"86":{},"88":{}},"component":{}}],["font",{"_index":356,"title":{},"name":{},"text":{"3":{}},"component":{}}],["foo",{"_index":2497,"title":{},"name":{},"text":{"41":{}},"component":{}}],["foo.return.s",{"_index":2525,"title":{},"name":{},"text":{"41":{}},"component":{}}],["forbid",{"_index":453,"title":{},"name":{},"text":{"4":{},"41":{}},"component":{}}],["forc",{"_index":1543,"title":{},"name":{},"text":{"17":{}},"component":{}}],["forev",{"_index":3108,"title":{},"name":{},"text":{"62":{}},"component":{}}],["forg",{"_index":3720,"title":{},"name":{},"text":{"88":{}},"component":{}}],["fork",{"_index":3673,"title":{},"name":{},"text":{"83":{},"88":{}},"component":{}}],["form",{"_index":704,"title":{},"name":{},"text":{"4":{},"62":{}},"component":{}}],["formal",{"_index":2257,"title":{},"name":{},"text":{"39":{},"59":{}},"component":{}}],["format",{"_index":61,"title":{"60-4":{},"60-7":{}},"name":{},"text":{"1":{},"13":{},"39":{},"41":{},"42":{},"60":{},"72":{},"90":{}},"component":{}}],["former",{"_index":1136,"title":{},"name":{},"text":{"9":{}},"component":{}}],["formul",{"_index":3031,"title":{},"name":{},"text":{"61":{},"68":{},"78":{}},"component":{}}],["formula",{"_index":1595,"title":{},"name":{},"text":{"18":{},"26":{},"61":{}},"component":{}}],["forty_two.cairo",{"_index":1349,"title":{},"name":{},"text":{"13":{}},"component":{}}],["forum",{"_index":1896,"title":{},"name":{},"text":{"37":{},"41":{},"56":{},"60":{},"67":{},"76":{}},"component":{}}],["forward",{"_index":385,"title":{"60-2":{},"60-3":{}},"name":{},"text":{"3":{},"8":{}},"component":{}}],["found",{"_index":1259,"title":{},"name":{},"text":{"11":{},"34":{},"39":{},"41":{},"50":{},"72":{}},"component":{}}],["foundat",{"_index":157,"title":{},"name":{},"text":{"1":{},"4":{},"6":{},"8":{},"29":{}},"component":{}}],["foundation’",{"_index":559,"title":{},"name":{},"text":{"4":{}},"component":{}}],["foundri",{"_index":3660,"title":{"88-3":{}},"name":{},"text":{"81":{},"82":{},"88":{},"89":{}},"component":{}}],["four",{"_index":2344,"title":{},"name":{},"text":{"41":{},"78":{}},"component":{}}],["fourier",{"_index":2914,"title":{},"name":{},"text":{"60":{}},"component":{}}],["frac{c}{10",{"_index":1660,"title":{},"name":{},"text":{"26":{}},"component":{}}],["framework",{"_index":2461,"title":{"82":{}},"name":{"82":{}},"text":{"41":{}},"component":{}}],["fraud",{"_index":752,"title":{},"name":{},"text":{"6":{}},"component":{}}],["fraudul",{"_index":770,"title":{},"name":{},"text":{"6":{},"35":{}},"component":{}}],["frax",{"_index":1733,"title":{},"name":{},"text":{"29":{}},"component":{}}],["free",{"_index":672,"title":{},"name":{},"text":{"4":{},"13":{},"37":{}},"component":{}}],["freedom",{"_index":3361,"title":{},"name":{},"text":{"68":{}},"component":{}}],["freeli",{"_index":1536,"title":{},"name":{},"text":{"17":{}},"component":{}}],["frequent",{"_index":3201,"title":{},"name":{},"text":{"64":{}},"component":{}}],["fresh",{"_index":3412,"title":{},"name":{},"text":{"71":{}},"component":{}}],["fri",{"_index":11,"title":{"1-10":{}},"name":{},"text":{"1":{},"7":{},"8":{},"41":{},"59":{},"67":{}},"component":{}}],["friendli",{"_index":782,"title":{},"name":{},"text":{"6":{},"50":{},"67":{},"68":{},"72":{}},"component":{}}],["fristat",{"_index":1084,"title":{},"name":{},"text":{"8":{}},"component":{}}],["fristatementcontract",{"_index":939,"title":{},"name":{},"text":{"8":{}},"component":{}}],["from\\_address",{"_index":3616,"title":{},"name":{},"text":{"79":{}},"component":{}}],["from_address",{"_index":1167,"title":{},"name":{},"text":{"9":{},"39":{},"62":{},"66":{},"79":{}},"component":{}}],["from_block=\"latest",{"_index":2259,"title":{},"name":{},"text":{"39":{}},"component":{}}],["fromaddress",{"_index":3097,"title":{},"name":{},"text":{"62":{},"63":{}},"component":{}}],["frontend",{"_index":2633,"title":{},"name":{},"text":{"49":{}},"component":{}}],["full",{"_index":12,"title":{"42":{},"1-11":{}},"name":{},"text":{"1":{},"2":{},"6":{},"10":{},"11":{},"16":{},"17":{},"18":{},"21":{},"26":{},"37":{},"38":{},"39":{},"42":{},"60":{},"61":{},"62":{},"72":{},"78":{},"89":{}},"component":{}}],["full_output",{"_index":2348,"title":{},"name":{},"text":{"41":{}},"component":{}}],["fullest",{"_index":728,"title":{},"name":{},"text":{"4":{}},"component":{}}],["fulli",{"_index":2054,"title":{},"name":{},"text":{"38":{},"62":{},"64":{}},"component":{}}],["func",{"_index":2496,"title":{},"name":{},"text":{"41":{},"68":{},"79":{}},"component":{}}],["function",{"_index":414,"title":{"34":{},"50":{},"53":{},"63":{},"6-2":{},"15-4":{},"15-5":{},"34-1":{},"34-9":{},"34-17":{},"34-25":{},"34-34":{},"34-42":{},"34-51":{},"34-60":{},"34-68":{},"34-77":{},"34-86":{},"34-94":{},"34-102":{},"34-110":{},"34-118":{},"34-126":{},"34-133":{},"34-134":{},"34-139":{},"34-144":{},"34-149":{},"34-154":{},"34-159":{},"34-164":{},"34-169":{},"34-174":{},"35-4":{},"54-1":{},"56-3":{},"63-1":{},"63-8":{},"63-15":{},"63-21":{},"63-27":{},"63-33":{},"63-39":{},"63-45":{},"63-51":{},"63-58":{},"63-65":{},"75-2":{},"80-2":{},"80-9":{},"80-16":{},"80-22":{},"80-28":{},"80-35":{},"80-41":{},"80-48":{},"80-54":{},"80-61":{}},"name":{"34":{},"50":{},"53":{}},"text":{"4":{},"6":{},"7":{},"8":{},"9":{},"10":{},"12":{},"13":{},"15":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"39":{},"41":{},"47":{},"50":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"79":{},"80":{},"88":{}},"component":{}}],["function_idx",{"_index":3387,"title":{},"name":{},"text":{"70":{}},"component":{}}],["function_nam",{"_index":1127,"title":{},"name":{},"text":{"9":{}},"component":{}}],["function_selector",{"_index":3644,"title":{},"name":{},"text":{"80":{}},"component":{}}],["functions.adoc#array_hash",{"_index":3621,"title":{},"name":{},"text":{"79":{}},"component":{}}],["function’",{"_index":1766,"title":{},"name":{},"text":{"30":{},"41":{},"53":{},"80":{},"81":{}},"component":{}}],["fund",{"_index":556,"title":{"32":{},"36":{},"35-10":{}},"name":{},"text":{"4":{},"13":{},"16":{},"17":{},"18":{},"26":{},"27":{},"29":{},"30":{},"31":{},"32":{},"34":{},"35":{},"36":{},"41":{},"53":{},"67":{},"83":{}},"component":{}}],["fundament",{"_index":409,"title":{},"name":{},"text":{"4":{},"6":{},"47":{}},"component":{}}],["further",{"_index":528,"title":{},"name":{},"text":{"4":{},"18":{},"68":{},"72":{}},"component":{}}],["furthermor",{"_index":3360,"title":{},"name":{},"text":{"68":{}},"component":{}}],["futur",{"_index":563,"title":{},"name":{},"text":{"4":{},"7":{},"8":{},"9":{},"11":{},"13":{},"26":{},"37":{},"39":{},"41":{},"54":{},"56":{},"58":{},"59":{},"61":{},"64":{},"65":{},"67":{},"68":{},"80":{},"83":{}},"component":{}}],["fuzz",{"_index":3723,"title":{},"name":{},"text":{"88":{}},"component":{}}],["fuzzinglab",{"_index":3710,"title":{},"name":{},"text":{"87":{}},"component":{}}],["fx",{"_index":1734,"title":{},"name":{},"text":{"29":{}},"component":{}}],["g=\\left",{"_index":3312,"title":{},"name":{},"text":{"67":{}},"component":{}}],["g_x",{"_index":3313,"title":{},"name":{},"text":{"67":{}},"component":{}}],["g_x=874739451078007766457464989774322083649278607533249481151382481072868806602",{"_index":3315,"title":{},"name":{},"text":{"67":{}},"component":{}}],["g_y=152666792071518830868575557812948353041420400780739481342941381225525861407",{"_index":3316,"title":{},"name":{},"text":{"67":{}},"component":{}}],["g_y\\right",{"_index":3314,"title":{},"name":{},"text":{"67":{}},"component":{}}],["ga",{"_index":480,"title":{"61":{},"61-11":{}},"name":{},"text":{"4":{},"11":{},"13":{},"39":{},"41":{},"47":{},"57":{},"59":{},"61":{},"62":{},"67":{},"68":{},"88":{}},"component":{}}],["game",{"_index":3680,"title":{},"name":{},"text":{"83":{},"88":{}},"component":{}}],["gap",{"_index":3326,"title":{},"name":{},"text":{"68":{}},"component":{}}],["gas/appl",{"_index":3045,"title":{},"name":{},"text":{"61":{}},"component":{}}],["gas/charact",{"_index":2386,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["gas/felt",{"_index":2384,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["gas/step",{"_index":2424,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["gas\\_pric",{"_index":2964,"title":{},"name":{},"text":{"61":{}},"component":{}}],["gas\\_price\\cdot&\\bigg",{"_index":2994,"title":{},"name":{},"text":{"61":{}},"component":{}}],["gas_consum",{"_index":2414,"title":{},"name":{},"text":{"41":{}},"component":{}}],["gas_pric",{"_index":2415,"title":{},"name":{},"text":{"41":{}},"component":{}}],["gasbuiltin",{"_index":3630,"title":{},"name":{},"text":{"80":{}},"component":{}}],["gateway",{"_index":822,"title":{"39-65":{},"41-5":{}},"name":{},"text":{"7":{},"9":{},"11":{},"37":{},"38":{},"39":{},"41":{},"64":{},"66":{}},"component":{}}],["gateway_url",{"_index":1111,"title":{},"name":{},"text":{"9":{}},"component":{}}],["gateway’",{"_index":2157,"title":{},"name":{},"text":{"39":{}},"component":{}}],["gather",{"_index":3521,"title":{},"name":{},"text":{"76":{}},"component":{}}],["gener",{"_index":184,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"7":{},"8":{},"9":{},"10":{},"16":{},"41":{},"52":{},"58":{},"61":{},"62":{},"64":{},"66":{},"67":{},"68":{},"70":{},"72":{},"75":{},"76":{},"83":{},"88":{},"89":{}},"component":{}}],["generate_trait",{"_index":1387,"title":{},"name":{},"text":{"13":{}},"component":{}}],["genesi",{"_index":2243,"title":{},"name":{},"text":{"39":{}},"component":{}}],["get",{"_index":1486,"title":{},"name":{},"text":{"16":{},"39":{},"42":{},"71":{},"75":{},"80":{},"81":{},"88":{},"89":{}},"component":{}}],["get_block",{"_index":1091,"title":{"9-10":{}},"name":{},"text":{"9":{},"41":{}},"component":{}}],["get_block_hash",{"_index":2448,"title":{"80-1":{}},"name":{},"text":{"41":{},"53":{},"55":{},"65":{}},"component":{}}],["get_block_hash_syscal",{"_index":3627,"title":{},"name":{},"text":{"80":{}},"component":{}}],["get_block_trac",{"_index":2356,"title":{},"name":{},"text":{"41":{}},"component":{}}],["get_caller_address",{"_index":1393,"title":{},"name":{},"text":{"13":{},"53":{},"58":{},"62":{}},"component":{}}],["get_class_by_hash",{"_index":2512,"title":{},"name":{},"text":{"41":{}},"component":{}}],["get_class_hash_at",{"_index":2513,"title":{},"name":{},"text":{"41":{}},"component":{}}],["get_cod",{"_index":1092,"title":{"9-11":{}},"name":{},"text":{"9":{}},"component":{}}],["get_contract_address",{"_index":3648,"title":{},"name":{},"text":{"80":{}},"component":{}}],["get_count",{"_index":3424,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["get_decim",{"_index":3442,"title":{},"name":{},"text":{"72":{}},"component":{}}],["get_erc20_class_hash",{"_index":1804,"title":{"34-135":{}},"name":{},"text":{"34":{}},"component":{}}],["get_execution_info",{"_index":2446,"title":{"80-8":{}},"name":{},"text":{"41":{},"53":{},"55":{},"77":{},"80":{}},"component":{}}],["get_execution_info_syscal",{"_index":3634,"title":{},"name":{},"text":{"80":{}},"component":{}}],["get_ident",{"_index":1805,"title":{"34-140":{}},"name":{},"text":{"34":{}},"component":{}}],["get_l1_token",{"_index":1806,"title":{"34-145":{}},"name":{},"text":{"34":{}},"component":{}}],["get_l2_token",{"_index":1807,"title":{"34-150":{}},"name":{},"text":{"34":{}},"component":{}}],["get_nam",{"_index":3440,"title":{},"name":{},"text":{"72":{}},"component":{}}],["get_own",{"_index":1363,"title":{},"name":{},"text":{"13":{},"15":{}},"component":{}}],["get_remaining_withdrawal_quota",{"_index":1808,"title":{"34-155":{}},"name":{},"text":{"34":{}},"component":{}}],["get_sequencer_address",{"_index":2449,"title":{},"name":{},"text":{"41":{},"53":{},"55":{}},"component":{}}],["get_state_upd",{"_index":2452,"title":{},"name":{},"text":{"41":{}},"component":{}}],["get_storage_at",{"_index":1093,"title":{"9-12":{}},"name":{},"text":{"9":{}},"component":{}}],["get_symbol",{"_index":3441,"title":{},"name":{},"text":{"72":{}},"component":{}}],["get_total_suppli",{"_index":3443,"title":{},"name":{},"text":{"72":{}},"component":{}}],["get_transact",{"_index":1094,"title":{"9-13":{}},"name":{},"text":{"9":{}},"component":{}}],["get_transaction_receipt",{"_index":1095,"title":{"9-14":{}},"name":{},"text":{"9":{}},"component":{}}],["get_transaction_trac",{"_index":2357,"title":{},"name":{},"text":{"41":{}},"component":{}}],["get_tx_info",{"_index":2736,"title":{},"name":{},"text":{"53":{}},"component":{}}],["get_vers",{"_index":1809,"title":{"34-160":{}},"name":{},"text":{"34":{}},"component":{}}],["getblock",{"_index":2538,"title":{},"name":{},"text":{"42":{}},"component":{}}],["getblockbodi",{"_index":1933,"title":{},"name":{},"text":{"38":{}},"component":{}}],["getbridg",{"_index":1697,"title":{"34-79":{}},"name":{},"text":{"29":{},"34":{}},"component":{}}],["getmaxl1msgfe",{"_index":3122,"title":{"63-16":{}},"name":{},"text":{"63":{}},"component":{}}],["getregistri",{"_index":1800,"title":{"34-87":{}},"name":{},"text":{"34":{}},"component":{}}],["getstatu",{"_index":1801,"title":{"34-95":{}},"name":{},"text":{"34":{}},"component":{}}],["getwithdrawalbridg",{"_index":1802,"title":{"34-103":{}},"name":{},"text":{"34":{}},"component":{}}],["ginger",{"_index":2582,"title":{},"name":{},"text":{"43":{}},"component":{}}],["gingersec.xyz",{"_index":2583,"title":{},"name":{},"text":{"43":{}},"component":{}}],["git",{"_index":1538,"title":{},"name":{},"text":{"17":{}},"component":{}}],["github",{"_index":65,"title":{},"name":{},"text":{"1":{},"11":{},"29":{},"35":{},"38":{},"39":{},"41":{},"42":{},"50":{},"69":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"89":{},"90":{}},"component":{}}],["github.com/eqlabs/pathfind",{"_index":2559,"title":{},"name":{},"text":{"42":{}},"component":{}}],["github.com/kasarlabs/deoxi",{"_index":2554,"title":{},"name":{},"text":{"42":{}},"component":{}}],["github.com/nethermindeth/juno",{"_index":2556,"title":{},"name":{},"text":{"42":{}},"component":{}}],["github.com/softwar",{"_index":1462,"title":{},"name":{},"text":{"14":{}},"component":{}}],["github.com/starkwar",{"_index":2557,"title":{},"name":{},"text":{"42":{}},"component":{}}],["github.com/xjonathanlei/starkli",{"_index":1459,"title":{},"name":{},"text":{"14":{}},"component":{}}],["give",{"_index":444,"title":{},"name":{},"text":{"4":{},"39":{},"56":{},"70":{},"72":{}},"component":{}}],["given",{"_index":1147,"title":{},"name":{},"text":{"9":{},"34":{},"41":{},"50":{},"55":{},"58":{},"59":{},"61":{},"63":{},"64":{},"65":{},"67":{},"68":{},"70":{},"72":{},"79":{},"80":{}},"component":{}}],["glanc",{"_index":862,"title":{},"name":{},"text":{"7":{}},"component":{}}],["global",{"_index":1915,"title":{},"name":{},"text":{"38":{}},"component":{}}],["global_state_root",{"_index":2825,"title":{},"name":{},"text":{"59":{}},"component":{}}],["glossari",{"_index":35,"title":{"1":{}},"name":{"1":{}},"text":{},"component":{}}],["gnark",{"_index":2066,"title":{},"name":{},"text":{"38":{}},"component":{}}],["go",{"_index":584,"title":{},"name":{},"text":{"4":{},"9":{},"13":{},"32":{},"35":{},"36":{},"39":{},"42":{},"61":{},"68":{},"80":{},"88":{},"89":{},"90":{}},"component":{}}],["goal",{"_index":468,"title":{},"name":{},"text":{"4":{},"38":{},"64":{}},"component":{}}],["goe",{"_index":891,"title":{},"name":{},"text":{"7":{}},"component":{}}],["goerli",{"_index":1885,"title":{},"name":{},"text":{"37":{},"38":{},"41":{},"46":{},"47":{},"67":{}},"component":{}}],["golang",{"_index":796,"title":{},"name":{},"text":{"6":{},"38":{}},"component":{}}],["gomaxproc",{"_index":1946,"title":{},"name":{},"text":{"38":{}},"component":{}}],["good",{"_index":2776,"title":{},"name":{},"text":{"54":{},"62":{},"68":{}},"component":{}}],["govern",{"_index":400,"title":{},"name":{},"text":{"4":{},"18":{},"26":{},"46":{}},"component":{}}],["gpsstatementverifi",{"_index":923,"title":{"8-5":{}},"name":{},"text":{"8":{}},"component":{}}],["grace",{"_index":2084,"title":{},"name":{},"text":{"38":{},"68":{}},"component":{}}],["gracefulli",{"_index":2036,"title":{},"name":{},"text":{"38":{}},"component":{}}],["grade",{"_index":3669,"title":{},"name":{},"text":{"82":{}},"component":{}}],["gradual",{"_index":3064,"title":{},"name":{},"text":{"61":{}},"component":{}}],["grant",{"_index":508,"title":{},"name":{},"text":{"4":{},"13":{}},"component":{}}],["graph",{"_index":595,"title":{},"name":{},"text":{"4":{},"87":{},"89":{}},"component":{}}],["graphic",{"_index":1446,"title":{},"name":{},"text":{"13":{}},"component":{}}],["grasp",{"_index":3149,"title":{},"name":{},"text":{"64":{}},"component":{}}],["great",{"_index":3738,"title":{},"name":{},"text":{"89":{}},"component":{}}],["greater",{"_index":861,"title":{"78-2":{}},"name":{},"text":{"7":{},"27":{},"80":{}},"component":{}}],["group",{"_index":440,"title":{},"name":{},"text":{"4":{},"29":{},"64":{}},"component":{}}],["grpc",{"_index":2034,"title":{},"name":{},"text":{"38":{}},"component":{}}],["guarante",{"_index":629,"title":{},"name":{},"text":{"4":{},"53":{},"54":{},"64":{},"68":{}},"component":{}}],["guard",{"_index":1774,"title":{},"name":{},"text":{"31":{},"34":{}},"component":{}}],["guardian",{"_index":1500,"title":{},"name":{},"text":{"16":{}},"component":{}}],["gui",{"_index":332,"title":{},"name":{},"text":{"3":{},"34":{}},"component":{}}],["guid",{"_index":325,"title":{},"name":{},"text":{"2":{},"16":{},"23":{},"25":{},"28":{},"39":{},"49":{}},"component":{}}],["guidelin",{"_index":319,"title":{},"name":{},"text":{"2":{}},"component":{}}],["gwei",{"_index":3014,"title":{},"name":{},"text":{"61":{}},"component":{}}],["h",{"_index":1191,"title":{"10-7":{}},"name":{},"text":{"10":{},"50":{},"59":{},"62":{},"65":{},"67":{},"70":{},"75":{},"79":{}},"component":{}}],["h\\big",{"_index":2697,"title":{},"name":{},"text":{"50":{},"59":{}},"component":{}}],["h_{ped",{"_index":3229,"title":{},"name":{},"text":{"65":{}},"component":{}}],["hacker",{"_index":653,"title":{},"name":{},"text":{"4":{}},"component":{}}],["hade",{"_index":2677,"title":{},"name":{},"text":{"50":{},"69":{}},"component":{}}],["haiko",{"_index":2600,"title":{},"name":{},"text":{"45":{}},"component":{}}],["halt",{"_index":3335,"title":{},"name":{},"text":{"68":{}},"component":{}}],["hand",{"_index":3248,"title":{},"name":{},"text":{"65":{}},"component":{}}],["handi",{"_index":3324,"title":{},"name":{},"text":{"68":{}},"component":{}}],["handl",{"_index":1053,"title":{"23":{}},"name":{},"text":{"8":{},"18":{},"20":{},"23":{},"26":{},"38":{},"39":{},"41":{},"62":{},"64":{},"67":{},"68":{},"72":{},"78":{},"80":{}},"component":{}}],["handle_deposit",{"_index":1870,"title":{},"name":{},"text":{"35":{}},"component":{}}],["handler",{"_index":1169,"title":{"62-9":{}},"name":{},"text":{"9":{},"30":{},"34":{},"35":{},"38":{},"39":{},"62":{},"65":{},"67":{},"70":{},"72":{}},"component":{}}],["handling_staking_ev",{"_index":1629,"title":{},"name":{"23":{}},"text":{},"component":{}}],["happen",{"_index":1606,"title":{},"name":{},"text":{"21":{},"32":{},"36":{},"53":{},"61":{},"62":{},"72":{},"76":{}},"component":{}}],["happi",{"_index":3363,"title":{},"name":{},"text":{"68":{}},"component":{}}],["hard",{"_index":2253,"title":{},"name":{},"text":{"39":{}},"component":{}}],["hardwar",{"_index":664,"title":{},"name":{},"text":{"4":{},"21":{},"56":{},"64":{}},"component":{}}],["harm",{"_index":3362,"title":{},"name":{},"text":{"68":{}},"component":{}}],["hash",{"_index":71,"title":{"50":{},"70":{},"71":{},"50-3":{},"50-5":{},"50-6":{},"59-1":{},"59-3":{},"59-4":{},"62-3":{},"62-8":{},"67-4":{},"67-6":{},"67-7":{},"67-10":{},"67-12":{},"67-14":{},"67-15":{},"67-18":{},"67-20":{},"67-21":{},"70-2":{},"79-3":{}},"name":{"50":{},"70":{},"71":{}},"text":{"1":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"17":{},"29":{},"34":{},"38":{},"39":{},"41":{},"50":{},"53":{},"54":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"65":{},"66":{},"67":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"77":{},"79":{},"80":{},"81":{},"86":{}},"component":{}}],["hashchain",{"_index":2816,"title":{},"name":{},"text":{"58":{}},"component":{}}],["hashed_supported_cairo_verifi",{"_index":1070,"title":{},"name":{},"text":{"8":{}},"component":{}}],["hassl",{"_index":2239,"title":{},"name":{},"text":{"39":{}},"component":{}}],["have",{"_index":1428,"title":{},"name":{},"text":{"13":{},"18":{},"53":{},"62":{},"72":{}},"component":{}}],["header",{"_index":2307,"title":{"41-13":{}},"name":{},"text":{"41":{},"59":{},"61":{}},"component":{}}],["header’",{"_index":2843,"title":{},"name":{},"text":{"59":{}},"component":{}}],["health",{"_index":742,"title":{},"name":{},"text":{"6":{},"38":{}},"component":{}}],["healthi",{"_index":2015,"title":{},"name":{},"text":{"38":{}},"component":{}}],["heart",{"_index":3683,"title":{},"name":{},"text":{"84":{}},"component":{}}],["heavi",{"_index":3170,"title":{},"name":{},"text":{"64":{}},"component":{}}],["hefti",{"_index":3161,"title":{},"name":{},"text":{"64":{}},"component":{}}],["height",{"_index":2139,"title":{},"name":{},"text":{"39":{},"59":{},"65":{}},"component":{}}],["held",{"_index":680,"title":{},"name":{},"text":{"4":{},"39":{}},"component":{}}],["hello",{"_index":3595,"title":{},"name":{},"text":{"78":{}},"component":{}}],["help",{"_index":320,"title":{"10-7":{}},"name":{},"text":{"2":{},"6":{},"10":{},"11":{},"16":{},"18":{},"38":{},"47":{},"64":{},"84":{},"89":{}},"component":{}}],["helper",{"_index":2522,"title":{},"name":{},"text":{"41":{}},"component":{}}],["henc",{"_index":3584,"title":{},"name":{},"text":{"78":{}},"component":{}}],["here",{"_index":314,"title":{},"name":{},"text":{"2":{},"4":{},"9":{},"26":{},"37":{},"39":{},"41":{},"53":{},"62":{},"64":{},"67":{},"72":{},"79":{}},"component":{}}],["herein",{"_index":620,"title":{},"name":{},"text":{"4":{}},"component":{}}],["here’",{"_index":1433,"title":{},"name":{},"text":{"13":{},"16":{},"38":{},"71":{}},"component":{}}],["hex",{"_index":2209,"title":{},"name":{},"text":{"39":{},"78":{}},"component":{}}],["hidden",{"_index":2158,"title":{},"name":{},"text":{"39":{}},"component":{}}],["hierarchi",{"_index":3491,"title":{},"name":{},"text":{"72":{}},"component":{}}],["high",{"_index":260,"title":{},"name":{},"text":{"1":{},"2":{},"6":{},"13":{},"41":{},"50":{},"65":{},"66":{},"69":{},"72":{},"78":{}},"component":{}}],["higher",{"_index":1893,"title":{},"name":{},"text":{"37":{},"38":{},"41":{},"53":{},"63":{},"64":{},"79":{},"80":{}},"component":{}}],["highest",{"_index":3227,"title":{},"name":{},"text":{"65":{}},"component":{}}],["highest_block",{"_index":2140,"title":{},"name":{},"text":{"39":{}},"component":{}}],["highli",{"_index":2130,"title":{},"name":{},"text":{"39":{},"64":{}},"component":{}}],["highlight",{"_index":337,"title":{"39-38":{},"39-62":{}},"name":{},"text":{"3":{},"7":{},"90":{}},"component":{}}],["hinder",{"_index":2280,"title":{},"name":{},"text":{"39":{}},"component":{}}],["hint",{"_index":1210,"title":{"68-5":{}},"name":{},"text":{"10":{},"41":{},"68":{},"74":{}},"component":{}}],["histor",{"_index":2182,"title":{},"name":{},"text":{"39":{},"41":{}},"component":{}}],["histori",{"_index":1889,"title":{},"name":{},"text":{"37":{},"38":{},"39":{},"87":{}},"component":{}}],["hoc",{"_index":2376,"title":{},"name":{},"text":{"41":{}},"component":{}}],["hold",{"_index":697,"title":{},"name":{},"text":{"4":{},"6":{},"18":{},"60":{},"61":{}},"component":{}}],["holder",{"_index":502,"title":{},"name":{},"text":{"4":{}},"component":{}}],["home",{"_index":1161,"title":{},"name":{},"text":{"9":{},"13":{}},"component":{}}],["home/parallels/.starkli",{"_index":1493,"title":{},"name":{},"text":{"16":{}},"component":{}}],["honest",{"_index":3392,"title":{},"name":{},"text":{"70":{}},"component":{}}],["hood",{"_index":2378,"title":{},"name":{},"text":{"41":{},"49":{},"58":{}},"component":{}}],["hook",{"_index":3685,"title":{},"name":{},"text":{"84":{}},"component":{}}],["host",{"_index":1496,"title":{},"name":{},"text":{"16":{},"17":{},"38":{},"39":{},"64":{}},"component":{}}],["hotfix",{"_index":2241,"title":{},"name":{},"text":{"39":{}},"component":{}}],["hour",{"_index":1851,"title":{},"name":{},"text":{"34":{},"41":{},"53":{},"77":{},"80":{}},"component":{}}],["hped",{"_index":3214,"title":{},"name":{},"text":{"65":{}},"component":{}}],["hpo",{"_index":3209,"title":{},"name":{},"text":{"65":{}},"component":{}}],["http",{"_index":1279,"title":{},"name":{},"text":{"11":{},"14":{},"38":{},"39":{},"41":{}},"component":{}}],["http://0.0.0.0:5050",{"_index":1555,"title":{},"name":{},"text":{"17":{}},"component":{}}],["http://127.0.0.1:5050",{"_index":1531,"title":{},"name":{},"text":{"17":{}},"component":{}}],["httpport",{"_index":2004,"title":{},"name":{},"text":{"38":{}},"component":{}}],["httpport:$httpport",{"_index":1998,"title":{},"name":{},"text":{"38":{}},"component":{}}],["https://alpha",{"_index":1114,"title":{},"name":{},"text":{"9":{},"46":{}},"component":{}}],["https://alpha4.starknet.io/feeder_gateway",{"_index":1113,"title":{},"name":{},"text":{"9":{}},"component":{}}],["https://alpha4.starknet.io/gateway",{"_index":1116,"title":{},"name":{},"text":{"9":{}},"component":{}}],["https://blastapi.io/publ",{"_index":2527,"title":{},"name":{},"text":{"42":{}},"component":{}}],["https://data.voyager.onlin",{"_index":2546,"title":{},"name":{},"text":{"42":{}},"component":{}}],["https://docs.swmansion.com/scarb/install.sh",{"_index":1282,"title":{},"name":{},"text":{"11":{},"14":{}},"component":{}}],["https://drpc.org/publ",{"_index":2534,"title":{},"name":{},"text":{"42":{}},"component":{}}],["https://get.starkli.sh",{"_index":1465,"title":{},"name":{},"text":{"14":{}},"component":{}}],["https://github.com/dojoengine/dojo",{"_index":1540,"title":{},"name":{},"text":{"17":{}},"component":{}}],["https://github.com/eqlabs/pathfinder/releases/tag/v0.4.1",{"_index":2232,"title":{},"name":{},"text":{"39":{}},"component":{}}],["https://github.com/matthieuaug",{"_index":2176,"title":{},"name":{},"text":{"39":{}},"component":{}}],["https://github.com/shrame",{"_index":2173,"title":{},"name":{},"text":{"39":{}},"component":{}}],["https://github.com/starkwar",{"_index":2079,"title":{},"name":{},"text":{"38":{}},"component":{}}],["https://starkgate.starknet.io",{"_index":1865,"title":{},"name":{},"text":{"35":{}},"component":{}}],["https://starknet.blockpi.network/v1/rpc/publ",{"_index":2530,"title":{},"name":{},"text":{"42":{}},"component":{}}],["https://starknet.nftscan.com",{"_index":2629,"title":{},"name":{},"text":{"48":{}},"component":{}}],["https://starkscan.co",{"_index":1312,"title":{},"name":{},"text":{"12":{},"48":{}},"component":{}}],["https://viewblock.io/starknet",{"_index":2625,"title":{},"name":{},"text":{"48":{}},"component":{}}],["https://voyager.onlin",{"_index":1311,"title":{},"name":{},"text":{"12":{},"48":{}},"component":{}}],["https://www.dwellir.com/networks/starknet",{"_index":2537,"title":{},"name":{},"text":{"42":{}},"component":{}}],["https://www.lavanet.xyz/get",{"_index":2544,"title":{},"name":{},"text":{"42":{}},"component":{}}],["https://www.oklink.com/starknet",{"_index":2626,"title":{},"name":{},"text":{"48":{}},"component":{}}],["https://www.starknet.io",{"_index":3079,"title":{},"name":{},"text":{"62":{}},"component":{}}],["hub",{"_index":243,"title":{},"name":{},"text":{"1":{},"4":{},"8":{},"46":{}},"component":{}}],["hypothet",{"_index":3027,"title":{},"name":{},"text":{"61":{}},"component":{}}],["i'th",{"_index":2839,"title":{},"name":{},"text":{"59":{}},"component":{}}],["i.",{"_index":1230,"title":{},"name":{},"text":{"11":{},"12":{},"41":{},"70":{},"80":{}},"component":{}}],["i128",{"_index":3552,"title":{},"name":{},"text":{"78":{}},"component":{}}],["i16",{"_index":3549,"title":{},"name":{},"text":{"78":{}},"component":{}}],["i32",{"_index":3550,"title":{},"name":{},"text":{"78":{}},"component":{}}],["i64",{"_index":3551,"title":{},"name":{},"text":{"78":{}},"component":{}}],["i8",{"_index":3548,"title":{},"name":{},"text":{"78":{}},"component":{}}],["icountercontract",{"_index":3478,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["id",{"_index":1336,"title":{"67-24":{}},"name":{},"text":{"13":{},"17":{},"38":{},"39":{},"66":{},"67":{},"88":{},"90":{}},"component":{}}],["ideal",{"_index":438,"title":{},"name":{},"text":{"4":{}},"component":{}}],["ident",{"_index":879,"title":{},"name":{},"text":{"7":{},"14":{},"34":{},"53":{},"73":{}},"component":{}}],["identifi",{"_index":70,"title":{"13-9":{},"34-111":{}},"name":{},"text":{"1":{},"10":{},"11":{},"13":{},"34":{},"39":{},"41":{},"65":{},"70":{},"71":{},"72":{},"73":{},"74":{},"77":{},"79":{}},"component":{}}],["if/els",{"_index":3343,"title":{},"name":{},"text":{"68":{}},"component":{}}],["ifft",{"_index":2918,"title":{},"name":{},"text":{"60":{}},"component":{}}],["ignor",{"_index":2063,"title":{},"name":{},"text":{"38":{},"39":{},"41":{},"61":{},"72":{}},"component":{}}],["ii",{"_index":641,"title":{},"name":{},"text":{"4":{}},"component":{}}],["iii",{"_index":642,"title":{},"name":{},"text":{"4":{}},"component":{}}],["illustr",{"_index":3095,"title":{},"name":{},"text":{"62":{},"65":{},"66":{},"67":{},"72":{},"79":{}},"component":{}}],["imag",{"_index":942,"title":{"38-5":{},"38-11":{}},"name":{},"text":{"8":{},"38":{}},"component":{}}],["immedi",{"_index":1665,"title":{},"name":{},"text":{"26":{},"39":{},"64":{}},"component":{}}],["impact",{"_index":661,"title":{},"name":{},"text":{"4":{},"39":{}},"component":{}}],["imperson",{"_index":3675,"title":{},"name":{},"text":{"83":{}},"component":{}}],["impl",{"_index":1380,"title":{"72-9":{}},"name":{},"text":{"13":{},"72":{},"76":{}},"component":{}}],["implement",{"_index":47,"title":{"6-7":{},"53-6":{}},"name":{},"text":{"1":{},"4":{},"6":{},"8":{},"16":{},"18":{},"21":{},"30":{},"34":{},"38":{},"39":{},"41":{},"50":{},"53":{},"58":{},"59":{},"60":{},"61":{},"63":{},"64":{},"67":{},"70":{},"72":{},"74":{},"76":{},"83":{},"86":{}},"component":{}}],["impli",{"_index":727,"title":{},"name":{},"text":{"4":{},"53":{}},"component":{}}],["implic",{"_index":2620,"title":{"66-3":{}},"name":{},"text":{"47":{},"66":{}},"component":{}}],["implicit",{"_index":3629,"title":{},"name":{},"text":{"80":{}},"component":{}}],["import",{"_index":338,"title":{"26-2":{}},"name":{"46":{}},"text":{"3":{},"4":{},"6":{},"10":{},"13":{},"17":{},"38":{},"41":{},"47":{},"54":{},"61":{},"68":{},"71":{},"75":{},"80":{},"86":{},"90":{}},"component":{}}],["impos",{"_index":1740,"title":{},"name":{},"text":{"29":{}},"component":{}}],["imposs",{"_index":2792,"title":{},"name":{},"text":{"56":{}},"component":{}}],["improv",{"_index":493,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"18":{},"38":{},"39":{},"41":{},"54":{},"56":{},"61":{}},"component":{}}],["in",{"_index":1045,"title":{},"name":{},"text":{"8":{}},"component":{}}],["in\\mathbb{f}_p^2",{"_index":2657,"title":{},"name":{},"text":{"50":{}},"component":{}}],["inaccess",{"_index":3625,"title":{},"name":{},"text":{"80":{}},"component":{}}],["inact",{"_index":1835,"title":{},"name":{},"text":{"34":{}},"component":{}}],["inbox",{"_index":2300,"title":{},"name":{},"text":{"40":{},"41":{}},"component":{}}],["incent",{"_index":424,"title":{},"name":{},"text":{"4":{},"62":{}},"component":{}}],["incentiv",{"_index":458,"title":{},"name":{},"text":{"4":{},"18":{}},"component":{}}],["includ",{"_index":91,"title":{"35-6":{},"35-9":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"10":{},"13":{},"16":{},"18":{},"20":{},"21":{},"29":{},"30":{},"32":{},"34":{},"35":{},"36":{},"38":{},"39":{},"41":{},"44":{},"46":{},"47":{},"53":{},"54":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"71":{},"74":{},"77":{},"79":{},"80":{},"81":{},"83":{},"86":{},"87":{},"88":{},"89":{},"90":{}},"component":{}}],["inclus",{"_index":786,"title":{},"name":{},"text":{"6":{},"13":{},"41":{},"71":{}},"component":{}}],["incom",{"_index":2017,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["incompat",{"_index":2180,"title":{},"name":{},"text":{"39":{}},"component":{}}],["inconsist",{"_index":2125,"title":{},"name":{},"text":{"39":{}},"component":{}}],["incorpor",{"_index":787,"title":{},"name":{},"text":{"6":{},"7":{},"9":{},"64":{}},"component":{}}],["incorrect",{"_index":3390,"title":{},"name":{},"text":{"70":{}},"component":{}}],["increas",{"_index":611,"title":{"24":{}},"name":{"24":{}},"text":{"4":{},"7":{},"18":{},"24":{},"25":{},"38":{},"39":{},"41":{},"56":{},"62":{},"64":{},"66":{},"67":{}},"component":{}}],["increase_allow",{"_index":3447,"title":{},"name":{},"text":{"72":{}},"component":{}}],["increase_count",{"_index":3420,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["increase_stak",{"_index":1572,"title":{},"name":{},"text":{"18":{},"24":{}},"component":{}}],["increment",{"_index":2770,"title":{},"name":{},"text":{"54":{},"62":{}},"component":{}}],["incur",{"_index":2984,"title":{},"name":{},"text":{"61":{},"62":{}},"component":{}}],["inde",{"_index":1871,"title":{},"name":{},"text":{"35":{},"62":{}},"component":{}}],["independ",{"_index":690,"title":{"58-6":{}},"name":{},"text":{"4":{},"8":{},"41":{},"58":{}},"component":{}}],["index",{"_index":301,"title":{},"name":{"2":{},"5":{}},"text":{"34":{},"36":{},"59":{},"60":{},"63":{},"68":{},"70":{},"79":{}},"component":{}}],["index=0",{"_index":3577,"title":{},"name":{},"text":{"78":{}},"component":{}}],["index=1",{"_index":3579,"title":{},"name":{},"text":{"78":{}},"component":{}}],["index=2",{"_index":3589,"title":{},"name":{},"text":{"78":{}},"component":{}}],["indic",{"_index":331,"title":{},"name":{},"text":{"3":{},"13":{},"34":{},"41":{},"62":{},"63":{},"65":{},"78":{},"80":{}},"component":{}}],["indirectli",{"_index":1640,"title":{},"name":{},"text":{"26":{}},"component":{}}],["individu",{"_index":654,"title":{},"name":{},"text":{"4":{},"7":{},"29":{},"56":{}},"component":{}}],["induc",{"_index":3010,"title":{},"name":{},"text":{"61":{},"62":{}},"component":{}}],["inflat",{"_index":598,"title":{},"name":{},"text":{"4":{},"18":{},"26":{}},"component":{}}],["influenc",{"_index":3497,"title":{},"name":{},"text":{"73":{}},"component":{}}],["info",{"_index":3532,"title":{},"name":{"77":{}},"text":{},"component":{}}],["info.cairo",{"_index":3380,"title":{},"name":{},"text":{"69":{},"77":{}},"component":{}}],["inform",{"_index":63,"title":{"77":{},"25-8":{},"77-3":{}},"name":{},"text":{"1":{},"4":{},"6":{},"9":{},"10":{},"11":{},"13":{},"16":{},"17":{},"18":{},"21":{},"23":{},"25":{},"32":{},"33":{},"34":{},"36":{},"37":{},"38":{},"40":{},"41":{},"42":{},"46":{},"47":{},"48":{},"50":{},"53":{},"54":{},"55":{},"58":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"67":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"89":{}},"component":{}}],["infrastructur",{"_index":2309,"title":{"41-22":{}},"name":{},"text":{},"component":{}}],["infura",{"_index":1256,"title":{},"name":{},"text":{"11":{},"42":{}},"component":{}}],["inher",{"_index":673,"title":{},"name":{},"text":{"4":{}},"component":{}}],["inherit",{"_index":1694,"title":{},"name":{},"text":{"29":{},"47":{}},"component":{}}],["init_own",{"_index":1377,"title":{},"name":{},"text":{"13":{}},"component":{}}],["initi",{"_index":51,"title":{"35-8":{}},"name":{},"text":{"1":{},"4":{},"7":{},"8":{},"13":{},"17":{},"18":{},"19":{},"22":{},"27":{},"32":{},"34":{},"35":{},"36":{},"41":{},"56":{},"62":{},"64":{},"67":{},"71":{},"75":{},"77":{},"88":{}},"component":{}}],["initial_count",{"_index":3425,"title":{},"name":{},"text":{"72":{}},"component":{}}],["initial_suppli",{"_index":3438,"title":{},"name":{},"text":{"72":{}},"component":{}}],["initiate_token_withdraw",{"_index":1810,"title":{"34-165":{}},"name":{},"text":{"34":{},"35":{},"36":{}},"component":{}}],["inject",{"_index":3007,"title":{},"name":{},"text":{"61":{}},"component":{}}],["inner",{"_index":3404,"title":{},"name":{},"text":{"71":{}},"component":{}}],["innov",{"_index":919,"title":{},"name":{},"text":{"7":{}},"component":{}}],["input",{"_index":215,"title":{},"name":{},"text":{"1":{},"9":{},"12":{},"13":{},"30":{},"34":{},"39":{},"41":{},"50":{},"53":{},"62":{},"68":{},"72":{},"73":{},"79":{}},"component":{}}],["insert",{"_index":1396,"title":{},"name":{},"text":{"13":{}},"component":{}}],["insid",{"_index":2472,"title":{"72-6":{}},"name":{},"text":{"41":{},"56":{},"59":{},"60":{},"62":{},"68":{},"70":{},"72":{},"75":{},"79":{}},"component":{}}],["inspir",{"_index":2765,"title":{},"name":{},"text":{"54":{},"84":{}},"component":{}}],["instal",{"_index":1202,"title":{"11-2":{},"12-2":{},"14-1":{},"14-3":{},"14-4":{},"14-5":{},"15-2":{}},"name":{},"text":{"10":{},"11":{},"13":{},"14":{},"16":{},"17":{},"81":{},"88":{},"89":{},"90":{}},"component":{}}],["instanc",{"_index":10,"title":{"74":{},"1-9":{},"13-9":{},"13-10":{},"74-2":{}},"name":{},"text":{"1":{},"8":{},"10":{},"11":{},"12":{},"13":{},"29":{},"37":{},"38":{},"41":{},"53":{},"58":{},"65":{},"67":{},"74":{},"78":{},"80":{},"89":{}},"component":{}}],["instance’",{"_index":3204,"title":{},"name":{},"text":{"65":{}},"component":{}}],["instanti",{"_index":1239,"title":{},"name":{},"text":{"11":{},"12":{},"69":{},"78":{}},"component":{}}],["instead",{"_index":41,"title":{},"name":{},"text":{"1":{},"7":{},"9":{},"10":{},"16":{},"37":{},"38":{},"39":{},"41":{},"54":{},"58":{},"64":{},"68":{}},"component":{}}],["institut",{"_index":566,"title":{},"name":{},"text":{"4":{}},"component":{}}],["instruct",{"_index":119,"title":{},"name":{},"text":{"1":{},"13":{},"16":{},"30":{},"41":{},"68":{},"70":{},"81":{}},"component":{}}],["int",{"_index":2206,"title":{},"name":{},"text":{"39":{}},"component":{}}],["int.from_byt",{"_index":3318,"title":{},"name":{},"text":{"67":{}},"component":{}}],["integ",{"_index":1794,"title":{"78-3":{}},"name":{},"text":{"32":{},"65":{},"69":{},"78":{}},"component":{}}],["integr",{"_index":187,"title":{},"name":{},"text":{"1":{},"4":{},"6":{},"8":{},"18":{},"37":{},"38":{},"39":{},"49":{},"58":{},"61":{},"71":{},"81":{},"88":{},"89":{},"90":{}},"component":{}}],["intend",{"_index":410,"title":{},"name":{},"text":{"4":{},"61":{},"70":{}},"component":{}}],["intens",{"_index":2749,"title":{},"name":{},"text":{"53":{}},"component":{}}],["intent",{"_index":1621,"title":{},"name":{},"text":{"22":{},"23":{},"27":{},"62":{}},"component":{}}],["intention",{"_index":3391,"title":{},"name":{},"text":{"70":{}},"component":{}}],["interact",{"_index":144,"title":{"13":{},"15":{},"13-8":{},"13-13":{}},"name":{"13":{},"15":{}},"text":{"1":{},"6":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"18":{},"19":{},"20":{},"21":{},"25":{},"27":{},"38":{},"41":{},"49":{},"56":{},"62":{},"64":{},"65":{},"75":{},"78":{},"81":{},"82":{},"86":{},"88":{},"89":{}},"component":{}}],["interconnect",{"_index":924,"title":{"8-6":{}},"name":{},"text":{"64":{}},"component":{}}],["interdepend",{"_index":764,"title":{},"name":{},"text":{"6":{}},"component":{}}],["interest",{"_index":572,"title":{},"name":{},"text":{"4":{},"29":{},"49":{},"71":{}},"component":{}}],["interfac",{"_index":193,"title":{"53":{},"54":{},"58-2":{},"72-9":{}},"name":{},"text":{"1":{},"6":{},"13":{},"14":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{},"34":{},"53":{},"54":{},"58":{},"63":{},"72":{},"76":{},"80":{},"81":{}},"component":{}}],["interface_nam",{"_index":3418,"title":{},"name":{},"text":{"72":{}},"component":{}}],["interlink",{"_index":1076,"title":{},"name":{},"text":{"8":{}},"component":{}}],["intermedi",{"_index":210,"title":{},"name":{},"text":{"1":{},"7":{},"41":{},"65":{},"68":{},"70":{},"71":{}},"component":{}}],["intermitt",{"_index":3200,"title":{},"name":{},"text":{"64":{}},"component":{}}],["intern",{"_index":897,"title":{},"name":{},"text":{"7":{},"41":{},"65":{},"67":{},"69":{},"80":{}},"component":{}}],["interplay",{"_index":732,"title":{"6-3":{}},"name":{},"text":{},"component":{}}],["interpret",{"_index":716,"title":{},"name":{},"text":{"4":{},"39":{},"60":{}},"component":{}}],["interv",{"_index":2149,"title":{},"name":{},"text":{"39":{},"63":{}},"component":{}}],["intricaci",{"_index":3150,"title":{},"name":{},"text":{"64":{}},"component":{}}],["introduc",{"_index":1883,"title":{},"name":{},"text":{"37":{},"38":{},"39":{},"41":{},"49":{},"61":{},"64":{},"67":{},"72":{},"74":{},"80":{}},"component":{}}],["introduct",{"_index":1229,"title":{"11-3":{},"12-3":{},"15-3":{},"60-1":{},"72-1":{}},"name":{"56":{}},"text":{"26":{},"41":{},"49":{},"72":{}},"component":{}}],["invalid",{"_index":881,"title":{"53-4":{}},"name":{},"text":{"7":{},"39":{},"41":{},"53":{},"56":{},"62":{},"66":{},"69":{},"77":{}},"component":{}}],["invers",{"_index":2917,"title":{},"name":{},"text":{"60":{}},"component":{}}],["invest",{"_index":421,"title":{},"name":{},"text":{"4":{}},"component":{}}],["investig",{"_index":904,"title":{},"name":{},"text":{"7":{},"29":{}},"component":{}}],["investor",{"_index":531,"title":{},"name":{},"text":{"4":{}},"component":{}}],["invoc",{"_index":1416,"title":{},"name":{},"text":{"13":{},"62":{}},"component":{}}],["invok",{"_index":279,"title":{"9-15":{},"15-5":{},"67-2":{}},"name":{},"text":{"1":{},"9":{},"13":{},"15":{},"37":{},"39":{},"41":{},"53":{},"55":{},"61":{},"62":{},"65":{},"66":{},"67":{},"77":{}},"component":{}}],["invoke_v0_tx_hash",{"_index":3301,"title":{},"name":{},"text":{"67":{}},"component":{}}],["invoke_v1_tx_hash",{"_index":3300,"title":{},"name":{},"text":{"67":{}},"component":{}}],["invoke_v3_tx_hash",{"_index":3289,"title":{},"name":{},"text":{"67":{}},"component":{}}],["invoketransact",{"_index":2075,"title":{},"name":{},"text":{"38":{}},"component":{}}],["involv",{"_index":100,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"12":{},"20":{},"22":{},"26":{},"27":{},"35":{},"39":{},"47":{},"61":{},"64":{},"71":{},"80":{}},"component":{}}],["iothercontract",{"_index":3477,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["iothercontractdispatch",{"_index":3481,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["iothercontractdispatchertrait",{"_index":3482,"title":{},"name":{},"text":{"72":{}},"component":{}}],["iothercontractlibrarydispatch",{"_index":3483,"title":{},"name":{},"text":{"72":{}},"component":{}}],["ip",{"_index":2623,"title":{},"name":{},"text":{"47":{}},"component":{}}],["irongauntlet",{"_index":1934,"title":{},"name":{},"text":{"38":{}},"component":{}}],["is_zero",{"_index":2733,"title":{},"name":{},"text":{"53":{}},"component":{}}],["isn’t",{"_index":3189,"title":{},"name":{},"text":{"64":{},"68":{}},"component":{}}],["isservicingtoken",{"_index":1803,"title":{"34-119":{}},"name":{},"text":{"34":{}},"component":{}}],["issu",{"_index":1326,"title":{},"name":{},"text":{"12":{},"29":{},"38":{},"39":{},"41":{},"45":{},"64":{}},"component":{}}],["issuanc",{"_index":618,"title":{},"name":{},"text":{"4":{}},"component":{}}],["istarkgatemanager.sol",{"_index":1813,"title":{},"name":{},"text":{"34":{}},"component":{}}],["istarkgateregistry.sol",{"_index":1815,"title":{},"name":{},"text":{"34":{}},"component":{}}],["istarkgateservice.sol",{"_index":1816,"title":{},"name":{},"text":{"34":{}},"component":{}}],["istarknetmessaging.sol",{"_index":3133,"title":{},"name":{},"text":{"63":{}},"component":{}}],["istarknetmessagingev",{"_index":3141,"title":{},"name":{},"text":{"63":{}},"component":{}}],["istarknetmessagingevents.sol",{"_index":3134,"title":{},"name":{},"text":{"63":{}},"component":{}}],["ital",{"_index":341,"title":{},"name":{},"text":{"3":{}},"component":{}}],["item",{"_index":371,"title":{},"name":{},"text":{"3":{},"72":{}},"component":{}}],["item1",{"_index":377,"title":{},"name":{},"text":{"3":{}},"component":{}}],["item2",{"_index":378,"title":{},"name":{},"text":{"3":{}},"component":{}}],["iter",{"_index":3256,"title":{},"name":{},"text":{"66":{},"72":{}},"component":{}}],["itself",{"_index":1758,"title":{},"name":{},"text":{"29":{},"62":{},"64":{}},"component":{}}],["it’",{"_index":802,"title":{},"name":{},"text":{"6":{},"11":{},"12":{},"13":{},"16":{},"38":{},"41":{},"53":{},"64":{},"68":{},"72":{}},"component":{}}],["iuniversaldeploy",{"_index":2800,"title":{},"name":{},"text":{"58":{}},"component":{}}],["iuniversaldeployerdispatch",{"_index":2805,"title":{},"name":{},"text":{"58":{}},"component":{}}],["iv",{"_index":647,"title":{},"name":{},"text":{"4":{}},"component":{}}],["j",{"_index":2684,"title":{},"name":{},"text":{"50":{}},"component":{}}],["jan",{"_index":2310,"title":{"41-24":{}},"name":{},"text":{"45":{}},"component":{}}],["januari",{"_index":1701,"title":{},"name":{},"text":{"29":{},"45":{}},"component":{}}],["java",{"_index":1238,"title":{},"name":{},"text":{"11":{}},"component":{}}],["javascript",{"_index":3732,"title":{},"name":{},"text":{"89":{}},"component":{}}],["jediswap",{"_index":2599,"title":{},"name":{},"text":{"45":{}},"component":{}}],["job",{"_index":841,"title":{},"name":{},"text":{"7":{}},"component":{}}],["join",{"_index":854,"title":{},"name":{},"text":{"7":{},"20":{}},"component":{}}],["jonathan",{"_index":3657,"title":{},"name":{},"text":{"81":{},"86":{}},"component":{}}],["joshklop",{"_index":1929,"title":{},"name":{},"text":{"38":{}},"component":{}}],["journey",{"_index":2635,"title":{},"name":{},"text":{"49":{}},"component":{}}],["js",{"_index":3729,"title":{"89-11":{}},"name":{},"text":{"89":{}},"component":{}}],["json",{"_index":60,"title":{"41-6":{},"41-14":{},"41-15":{},"41-16":{}},"name":{},"text":{"1":{},"9":{},"13":{},"16":{},"35":{},"38":{},"39":{},"41":{},"42":{},"44":{},"47":{},"62":{},"64":{},"66":{},"67":{},"70":{},"72":{},"86":{}},"component":{}}],["jsonrpc",{"_index":3262,"title":{},"name":{},"text":{"66":{}},"component":{}}],["juli",{"_index":2316,"title":{"41-29":{},"41-37":{}},"name":{},"text":{},"component":{}}],["june",{"_index":2328,"title":{"41-38":{}},"name":{},"text":{},"component":{}}],["juno",{"_index":794,"title":{"38":{}},"name":{"38":{}},"text":{"6":{},"16":{},"21":{},"37":{},"38":{},"42":{}},"component":{}}],["juno_gettransactionstatu",{"_index":1966,"title":{},"name":{},"text":{"38":{}},"component":{}}],["juno_vers",{"_index":2031,"title":{},"name":{},"text":{"38":{}},"component":{}}],["juno’",{"_index":1990,"title":{},"name":{},"text":{"38":{}},"component":{}}],["jvm",{"_index":1240,"title":{},"name":{},"text":{"11":{},"86":{}},"component":{}}],["k",{"_index":2881,"title":{},"name":{},"text":{"59":{},"61":{}},"component":{}}],["k^1_1",{"_index":2853,"title":{},"name":{},"text":{"59":{}},"component":{}}],["k^1_{m_1",{"_index":2855,"title":{},"name":{},"text":{"59":{}},"component":{}}],["k^n_1",{"_index":2857,"title":{},"name":{},"text":{"59":{}},"component":{}}],["k^n_{m_n",{"_index":2859,"title":{},"name":{},"text":{"59":{}},"component":{}}],["k_1",{"_index":3514,"title":{},"name":{},"text":{"75":{}},"component":{}}],["k_2",{"_index":3516,"title":{},"name":{},"text":{"75":{}},"component":{}}],["k_n",{"_index":3515,"title":{},"name":{},"text":{"75":{}},"component":{}}],["kasar",{"_index":2553,"title":{},"name":{},"text":{"42":{}},"component":{}}],["katana",{"_index":1511,"title":{"17-3":{},"83-3":{}},"name":{},"text":{"17":{},"83":{}},"component":{}}],["katana’",{"_index":1552,"title":{},"name":{},"text":{"17":{}},"component":{}}],["keccak",{"_index":2453,"title":{"50-2":{}},"name":{},"text":{"41":{},"50":{},"61":{},"67":{},"69":{},"75":{}},"component":{}}],["keccak.cairo",{"_index":3384,"title":{},"name":{},"text":{"69":{}},"component":{}}],["keccak256",{"_index":2650,"title":{},"name":{},"text":{"50":{},"62":{}},"component":{}}],["keep",{"_index":2610,"title":{},"name":{},"text":{"47":{},"53":{},"56":{},"64":{}},"component":{}}],["kept",{"_index":1158,"title":{},"name":{},"text":{"9":{},"10":{},"25":{},"72":{}},"component":{}}],["key",{"_index":645,"title":{"8-3":{},"16-5":{}},"name":{},"text":{"4":{},"6":{},"8":{},"9":{},"13":{},"16":{},"17":{},"18":{},"26":{},"38":{},"41":{},"47":{},"53":{},"56":{},"57":{},"60":{},"61":{},"65":{},"66":{},"68":{},"72":{},"75":{},"79":{},"80":{}},"component":{}}],["key/valu",{"_index":3205,"title":{},"name":{},"text":{"65":{}},"component":{}}],["keys=[sn_keccak",{"_index":3475,"title":{},"name":{},"text":{"72":{}},"component":{}}],["keys\\_hash",{"_index":3617,"title":{},"name":{},"text":{"79":{}},"component":{}}],["keystor",{"_index":1475,"title":{"16-4":{}},"name":{},"text":{"14":{},"16":{},"17":{}},"component":{}}],["keyword",{"_index":2492,"title":{},"name":{},"text":{"41":{}},"component":{}}],["kick",{"_index":3021,"title":{},"name":{},"text":{"61":{}},"component":{}}],["kind",{"_index":709,"title":{},"name":{},"text":{"4":{},"72":{}},"component":{}}],["kirugan",{"_index":1936,"title":{},"name":{},"text":{"38":{}},"component":{}}],["kit",{"_index":3696,"title":{},"name":{},"text":{"84":{},"86":{}},"component":{}}],["know",{"_index":111,"title":{},"name":{},"text":{"1":{},"16":{},"34":{},"65":{},"78":{}},"component":{}}],["knowledg",{"_index":254,"title":{},"name":{},"text":{"1":{},"2":{},"68":{}},"component":{}}],["known",{"_index":252,"title":{},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"17":{},"39":{},"41":{},"54":{},"56":{},"58":{},"64":{},"66":{},"72":{},"80":{}},"component":{}}],["kubernet",{"_index":1944,"title":{},"name":{},"text":{"38":{}},"component":{}}],["l",{"_index":3019,"title":{},"name":{},"text":{"61":{}},"component":{}}],["l1",{"_index":16,"title":{"62":{},"1-12":{},"1-21":{},"34-1":{},"35-4":{},"35-10":{},"62-1":{},"62-2":{},"62-3":{},"62-4":{},"62-5":{},"62-6":{},"62-7":{},"62-8":{},"62-9":{},"63-1":{},"63-66":{},"64-9":{}},"name":{},"text":{"1":{},"4":{},"8":{},"9":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"44":{},"45":{},"47":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"70":{},"72":{},"80":{},"89":{}},"component":{}}],["l1<>l2",{"_index":3677,"title":{},"name":{},"text":{"83":{},"89":{}},"component":{}}],["l1_bridge_address",{"_index":2585,"title":{},"name":{},"text":{"44":{}},"component":{}}],["l1_da_mod",{"_index":2400,"title":{},"name":{},"text":{"41":{},"59":{},"61":{}},"component":{}}],["l1_data_ga",{"_index":2420,"title":{},"name":{},"text":{"41":{}},"component":{}}],["l1_data_gas_consum",{"_index":2887,"title":{},"name":{},"text":{"59":{}},"component":{}}],["l1_data_gas_pric",{"_index":2401,"title":{},"name":{},"text":{"41":{},"59":{}},"component":{}}],["l1_data_gas_price_in_fri",{"_index":2849,"title":{},"name":{},"text":{"59":{}},"component":{}}],["l1_data_gas_price_in_wei",{"_index":2848,"title":{},"name":{},"text":{"59":{}},"component":{}}],["l1_ga",{"_index":2419,"title":{},"name":{},"text":{"41":{},"67":{}},"component":{}}],["l1_gas_bound",{"_index":3290,"title":{},"name":{},"text":{"67":{}},"component":{}}],["l1_gas_consum",{"_index":2886,"title":{},"name":{},"text":{"59":{}},"component":{}}],["l1_gas_pric",{"_index":2404,"title":{},"name":{},"text":{"41":{},"59":{}},"component":{}}],["l1_gas_price_in_fri",{"_index":2847,"title":{},"name":{},"text":{"59":{}},"component":{}}],["l1_gas_price_in_wei",{"_index":2846,"title":{},"name":{},"text":{"59":{}},"component":{}}],["l1_handler",{"_index":3077,"title":{},"name":{},"text":{"61":{},"62":{},"72":{}},"component":{}}],["l1_handler_entry_point",{"_index":3394,"title":{},"name":{},"text":{"70":{}},"component":{}}],["l1_handler_tx_hash",{"_index":3114,"title":{},"name":{},"text":{"62":{}},"component":{}}],["l1_handler_txn_receipt",{"_index":1973,"title":{},"name":{},"text":{"38":{}},"component":{}}],["l1_recipi",{"_index":1840,"title":{},"name":{},"text":{"34":{},"36":{}},"component":{}}],["l1_token",{"_index":1857,"title":{},"name":{},"text":{"34":{},"36":{}},"component":{}}],["l1_token_address",{"_index":1848,"title":{},"name":{},"text":{"34":{},"44":{}},"component":{}}],["l1handlertransact",{"_index":3120,"title":{},"name":{},"text":{"62":{},"67":{}},"component":{}}],["l1tol2messag",{"_index":3125,"title":{"63-34":{}},"name":{},"text":{"63":{}},"component":{}}],["l1tol2messagecancel",{"_index":3123,"title":{"63-22":{}},"name":{},"text":{"63":{}},"component":{}}],["l1tol2messagenonc",{"_index":3124,"title":{"63-28":{}},"name":{},"text":{"63":{}},"component":{}}],["l1→l2",{"_index":1789,"title":{"35-3":{}},"name":{},"text":{"32":{},"37":{},"59":{},"62":{}},"component":{}}],["l2",{"_index":18,"title":{"62":{},"1-13":{},"34-134":{},"35-8":{},"61-19":{},"62-1":{},"62-2":{},"62-3":{},"62-4":{},"62-5":{},"62-6":{},"62-7":{},"62-8":{},"64-8":{}},"name":{},"text":{"1":{},"2":{},"4":{},"9":{},"15":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"39":{},"44":{},"45":{},"46":{},"47":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"66":{},"67":{},"68":{}},"component":{}}],["l2_bridge_address",{"_index":2586,"title":{},"name":{},"text":{"44":{}},"component":{}}],["l2_ga",{"_index":3284,"title":{},"name":{},"text":{"67":{}},"component":{}}],["l2_gas_bound",{"_index":3291,"title":{},"name":{},"text":{"67":{}},"component":{}}],["l2_gas_consum",{"_index":2888,"title":{},"name":{},"text":{"59":{}},"component":{}}],["l2_token",{"_index":1858,"title":{},"name":{},"text":{"34":{}},"component":{}}],["l2_token_address",{"_index":1845,"title":{},"name":{},"text":{"34":{},"44":{}},"component":{}}],["l2recipi",{"_index":1795,"title":{},"name":{},"text":{"32":{},"34":{}},"component":{}}],["l2tol1messag",{"_index":3126,"title":{"63-40":{}},"name":{},"text":{"63":{}},"component":{}}],["l2→l1",{"_index":1862,"title":{"35-7":{},"61-17":{}},"name":{},"text":{"36":{},"59":{},"61":{},"62":{}},"component":{}}],["l3",{"_index":3374,"title":{},"name":{},"text":{"68":{}},"component":{}}],["label",{"_index":1715,"title":{},"name":{},"text":{"29":{}},"component":{}}],["lambdaclass’",{"_index":2454,"title":{},"name":{},"text":{"41":{}},"component":{}}],["lang",{"_index":1156,"title":{},"name":{},"text":{"9":{},"39":{},"42":{},"50":{}},"component":{}}],["languag",{"_index":263,"title":{},"name":{},"text":{"1":{},"2":{},"6":{},"41":{},"62":{},"64":{},"67":{},"68":{},"74":{},"78":{},"80":{},"85":{},"86":{},"88":{},"90":{}},"component":{}}],["larg",{"_index":439,"title":{},"name":{},"text":{"4":{},"7":{},"39":{},"53":{}},"component":{}}],["larger",{"_index":403,"title":{},"name":{},"text":{"4":{},"7":{},"78":{}},"component":{}}],["last",{"_index":833,"title":{},"name":{},"text":{"7":{},"61":{}},"component":{}}],["latenc",{"_index":866,"title":{"26-6":{}},"name":{},"text":{"7":{},"26":{},"38":{},"61":{},"64":{}},"component":{}}],["later",{"_index":543,"title":{},"name":{},"text":{"4":{},"13":{},"53":{},"61":{},"64":{}},"component":{}}],["latest",{"_index":140,"title":{"39-1":{}},"name":{},"text":{"1":{},"6":{},"9":{},"13":{},"39":{},"40":{},"41":{},"45":{},"60":{},"64":{},"76":{},"86":{}},"component":{}}],["latter",{"_index":1137,"title":{},"name":{},"text":{"9":{}},"component":{}}],["launch",{"_index":1405,"title":{},"name":{},"text":{"13":{},"45":{}},"component":{}}],["lava",{"_index":2543,"title":{},"name":{},"text":{"42":{}},"component":{}}],["law",{"_index":730,"title":{},"name":{},"text":{"4":{}},"component":{}}],["layer",{"_index":14,"title":{"1-12":{},"1-13":{}},"name":{},"text":{"1":{},"2":{},"4":{},"8":{},"38":{},"41":{},"60":{},"62":{},"64":{},"68":{}},"component":{}}],["layerswap",{"_index":2595,"title":{},"name":{},"text":{"45":{}},"component":{}}],["layout",{"_index":910,"title":{"75-1":{}},"name":{},"text":{"7":{},"8":{},"78":{}},"component":{}}],["ldot",{"_index":3220,"title":{},"name":{},"text":{"65":{}},"component":{}}],["lead",{"_index":906,"title":{},"name":{},"text":{"7":{},"53":{},"65":{}},"component":{}}],["leader",{"_index":3195,"title":{},"name":{},"text":{"64":{}},"component":{}}],["leaf",{"_index":2835,"title":{},"name":{},"text":{"59":{},"65":{}},"component":{}}],["learn",{"_index":304,"title":{},"name":{},"text":{"2":{},"28":{},"49":{},"88":{}},"component":{}}],["leav",{"_index":1642,"title":{},"name":{},"text":{"26":{},"35":{},"65":{},"68":{}},"component":{}}],["led",{"_index":2226,"title":{},"name":{},"text":{"39":{}},"component":{}}],["ledger",{"_index":1618,"title":{},"name":{},"text":{"21":{}},"component":{}}],["left",{"_index":2975,"title":{},"name":{},"text":{"61":{},"65":{}},"component":{}}],["left=right",{"_index":3238,"title":{},"name":{},"text":{"65":{}},"component":{}}],["left[\\text{hades_permut",{"_index":2680,"title":{},"name":{},"text":{"50":{}},"component":{}}],["left[\\text{self_stak",{"_index":1651,"title":{},"name":{},"text":{"26":{}},"component":{}}],["left[\\text{shift_point",{"_index":2663,"title":{},"name":{},"text":{"50":{}},"component":{}}],["legaci",{"_index":1097,"title":{"9":{},"10":{},"29-2":{},"29-4":{}},"name":{},"text":{"29":{}},"component":{}}],["legacy_bridge_eic.cairo",{"_index":1704,"title":{},"name":{},"text":{"29":{}},"component":{}}],["legacybridge.sol",{"_index":1703,"title":{},"name":{},"text":{"29":{}},"component":{}}],["legacymap",{"_index":3520,"title":{},"name":{},"text":{"75":{}},"component":{}}],["legal",{"_index":710,"title":{},"name":{},"text":{"4":{},"66":{}},"component":{}}],["legitimaci",{"_index":768,"title":{},"name":{},"text":{"6":{}},"component":{}}],["lei",{"_index":3658,"title":{},"name":{},"text":{"81":{},"86":{}},"component":{}}],["length",{"_index":2366,"title":{},"name":{},"text":{"41":{},"47":{},"59":{},"61":{},"65":{},"66":{},"78":{}},"component":{}}],["length>0",{"_index":3226,"title":{},"name":{},"text":{"65":{}},"component":{}}],["less",{"_index":748,"title":{"78-1":{}},"name":{},"text":{"6":{},"25":{},"61":{},"64":{},"78":{},"80":{}},"component":{}}],["let",{"_index":1573,"title":{},"name":{},"text":{"18":{},"34":{},"39":{},"88":{}},"component":{}}],["let’",{"_index":1297,"title":{},"name":{},"text":{"12":{},"61":{},"64":{}},"component":{}}],["level",{"_index":80,"title":{"75-2":{}},"name":{},"text":{"1":{},"4":{},"13":{},"26":{},"38":{},"41":{},"47":{},"53":{},"54":{},"65":{},"66":{},"69":{},"72":{},"78":{},"79":{},"80":{}},"component":{}}],["leverag",{"_index":842,"title":{},"name":{},"text":{"7":{},"58":{}},"component":{}}],["li",{"_index":838,"title":{},"name":{},"text":{"7":{},"75":{}},"component":{}}],["lib",{"_index":3682,"title":{},"name":{"84":{}},"text":{},"component":{}}],["lib.cairo",{"_index":1231,"title":{},"name":{},"text":{"11":{},"13":{}},"component":{}}],["libfunc",{"_index":2135,"title":{},"name":{},"text":{"39":{}},"component":{}}],["librari",{"_index":1217,"title":{"84":{},"80-6":{},"80-13":{},"80-20":{},"80-26":{},"80-32":{},"80-39":{},"80-45":{},"80-52":{},"80-58":{}},"name":{},"text":{"10":{},"38":{},"41":{},"67":{},"68":{},"78":{},"80":{},"84":{},"86":{},"89":{}},"component":{}}],["library_cal",{"_index":2514,"title":{"80-34":{}},"name":{},"text":{"41":{},"74":{}},"component":{}}],["library_call_syscal",{"_index":3643,"title":{},"name":{},"text":{"80":{}},"component":{}}],["libs/papyru",{"_index":2558,"title":{},"name":{},"text":{"42":{}},"component":{}}],["libs/starknet",{"_index":2080,"title":{},"name":{},"text":{"38":{}},"component":{}}],["life",{"_index":1296,"title":{},"name":{"66":{}},"text":{"12":{},"41":{}},"component":{}}],["lifecycl",{"_index":1189,"title":{"66":{}},"name":{},"text":{"9":{},"18":{},"53":{},"64":{},"66":{}},"component":{}}],["lifetim",{"_index":2794,"title":{},"name":{},"text":{"57":{}},"component":{}}],["light",{"_index":745,"title":{},"name":{},"text":{"6":{},"64":{}},"component":{}}],["limb",{"_index":3563,"title":{},"name":{},"text":{"78":{}},"component":{}}],["limit",{"_index":308,"title":{"47":{},"29-5":{},"53-3":{},"61-5":{}},"name":{"47":{}},"text":{"2":{},"4":{},"7":{},"8":{},"29":{},"35":{},"38":{},"39":{},"41":{},"45":{},"47":{},"53":{},"55":{},"56":{},"61":{},"66":{},"68":{},"72":{},"75":{}},"component":{}}],["line",{"_index":1087,"title":{"81":{},"9-1":{},"38-15":{}},"name":{},"text":{"9":{},"10":{},"12":{},"14":{},"38":{},"39":{},"41":{},"64":{},"68":{},"75":{},"81":{},"88":{}},"component":{}}],["link",{"_index":1269,"title":{"26-2":{},"81-2":{},"82-2":{},"82-4":{},"83-2":{},"83-4":{},"84-2":{},"84-4":{},"84-6":{},"88-2":{},"88-4":{},"88-6":{},"89-2":{},"89-4":{},"89-6":{},"89-8":{},"89-10":{},"89-12":{},"90-1":{}},"name":{},"text":{"11":{},"18":{},"39":{},"87":{}},"component":{}}],["linux",{"_index":1454,"title":{"14-4":{}},"name":{},"text":{"14":{}},"component":{}}],["liquid",{"_index":1728,"title":{},"name":{},"text":{"29":{}},"component":{}}],["list",{"_index":245,"title":{"29-4":{}},"name":{},"text":{"1":{},"3":{},"9":{},"10":{},"13":{},"17":{},"29":{},"34":{},"35":{},"36":{},"39":{},"41":{},"42":{},"43":{},"44":{},"53":{},"59":{},"61":{},"62":{},"63":{},"66":{},"67":{},"69":{},"72":{},"78":{},"79":{},"85":{}},"component":{}}],["live",{"_index":482,"title":{},"name":{},"text":{"4":{},"12":{},"39":{},"41":{},"90":{}},"component":{}}],["load",{"_index":846,"title":{},"name":{},"text":{"7":{},"41":{},"64":{},"83":{}},"component":{}}],["local",{"_index":780,"title":{"83":{}},"name":{},"text":{"6":{},"13":{},"17":{},"39":{},"68":{},"80":{},"83":{},"89":{}},"component":{}}],["locat",{"_index":76,"title":{},"name":{},"text":{"1":{},"9":{},"14":{},"16":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{}},"component":{}}],["lock",{"_index":526,"title":{},"name":{},"text":{"4":{},"17":{},"18":{},"21":{},"26":{},"29":{},"34":{},"35":{}},"component":{}}],["lockup",{"_index":1668,"title":{},"name":{},"text":{"26":{}},"component":{}}],["log",{"_index":1407,"title":{},"name":{},"text":{"13":{},"38":{},"39":{},"61":{},"62":{},"79":{}},"component":{}}],["logarithm",{"_index":849,"title":{},"name":{},"text":{"7":{}},"component":{}}],["logic",{"_index":40,"title":{},"name":{},"text":{"1":{},"7":{},"8":{},"18":{},"53":{},"54":{},"56":{},"67":{},"80":{}},"component":{}}],["logmessagetol1",{"_index":3075,"title":{},"name":{},"text":{"61":{},"62":{},"63":{}},"component":{}}],["logmessagetol2",{"_index":3129,"title":{"63-71":{}},"name":{},"text":{"63":{}},"component":{}}],["logstateupd",{"_index":2341,"title":{},"name":{},"text":{"41":{}},"component":{}}],["long",{"_index":571,"title":{},"name":{},"text":{"4":{},"31":{},"78":{}},"component":{}}],["longer",{"_index":1842,"title":{},"name":{},"text":{"34":{},"37":{},"38":{},"39":{},"41":{},"72":{},"78":{}},"component":{}}],["look",{"_index":1285,"title":{},"name":{},"text":{"11":{},"12":{},"60":{},"68":{},"72":{}},"component":{}}],["lookup",{"_index":1033,"title":{},"name":{},"text":{"8":{}},"component":{}}],["loop",{"_index":781,"title":{},"name":{},"text":{"6":{}},"component":{}}],["lose",{"_index":1166,"title":{},"name":{},"text":{"9":{},"56":{},"62":{},"64":{},"72":{}},"component":{}}],["loss",{"_index":679,"title":{},"name":{},"text":{"4":{},"29":{}},"component":{}}],["lost",{"_index":686,"title":{},"name":{},"text":{"4":{}},"component":{}}],["lot",{"_index":3191,"title":{},"name":{},"text":{"64":{},"68":{}},"component":{}}],["low",{"_index":79,"title":{"75-2":{}},"name":{},"text":{"1":{},"2":{},"4":{},"41":{},"47":{},"50":{},"53":{},"69":{},"78":{},"79":{}},"component":{}}],["lower",{"_index":869,"title":{},"name":{},"text":{"7":{},"20":{},"64":{},"80":{}},"component":{}}],["lusd",{"_index":1736,"title":{},"name":{},"text":{"29":{}},"component":{}}],["ly",{"_index":3370,"title":{},"name":{},"text":{"68":{}},"component":{}}],["m",{"_index":1659,"title":{},"name":{},"text":{"26":{},"61":{}},"component":{}}],["m\\ge",{"_index":2985,"title":{},"name":{},"text":{"61":{}},"component":{}}],["m_1",{"_index":2890,"title":{},"name":{},"text":{"59":{}},"component":{}}],["m_n",{"_index":2894,"title":{},"name":{},"text":{"59":{}},"component":{}}],["machin",{"_index":109,"title":{},"name":{},"text":{"1":{},"7":{},"13":{},"61":{},"64":{},"85":{}},"component":{}}],["maco",{"_index":1453,"title":{"14-4":{}},"name":{},"text":{"14":{}},"component":{}}],["made",{"_index":402,"title":{},"name":{},"text":{"4":{},"38":{},"39":{}},"component":{}}],["main",{"_index":242,"title":{},"name":{},"text":{"1":{},"8":{},"16":{},"19":{},"26":{},"34":{},"41":{},"49":{},"64":{},"67":{}},"component":{}}],["mainnet",{"_index":943,"title":{"46-1":{}},"name":{},"text":{"8":{},"9":{},"11":{},"29":{},"32":{},"35":{},"36":{},"37":{},"39":{},"41":{},"44":{},"46":{},"47":{},"58":{},"77":{},"88":{},"89":{}},"component":{}}],["mainnet.json",{"_index":1866,"title":{},"name":{},"text":{"35":{},"44":{}},"component":{}}],["mainnet.starknet.io",{"_index":2603,"title":{},"name":{},"text":{"46":{}},"component":{}}],["mainnet.starknet.io/feeder_gateway",{"_index":1115,"title":{},"name":{},"text":{"9":{}},"component":{}}],["mainnet.starknet.io/gateway",{"_index":1117,"title":{},"name":{},"text":{"9":{}},"component":{}}],["maintain",{"_index":241,"title":{},"name":{},"text":{"1":{},"4":{},"6":{},"8":{},"38":{},"62":{},"64":{},"71":{},"86":{},"88":{}},"component":{}}],["mainten",{"_index":499,"title":{},"name":{},"text":{"4":{},"6":{}},"component":{}}],["major",{"_index":500,"title":{},"name":{},"text":{"4":{},"14":{},"39":{}},"component":{}}],["make",{"_index":820,"title":{},"name":{},"text":{"7":{},"11":{},"12":{},"14":{},"16":{},"18":{},"29":{},"34":{},"35":{},"38":{},"41":{},"47":{},"50":{},"53":{},"56":{},"58":{},"64":{},"68":{},"76":{},"82":{},"89":{}},"component":{}}],["maker",{"_index":2587,"title":{},"name":{},"text":{"45":{}},"component":{}}],["malici",{"_index":753,"title":{},"name":{},"text":{"6":{},"41":{},"54":{},"68":{}},"component":{}}],["manag",{"_index":619,"title":{"25":{},"25-1":{},"25-6":{},"29-1":{},"88-1":{}},"name":{"25":{}},"text":{"4":{},"8":{},"9":{},"11":{},"14":{},"18":{},"20":{},"25":{},"29":{},"34":{},"39":{},"47":{},"54":{},"56":{},"64":{},"71":{},"86":{},"88":{}},"component":{}}],["mandatori",{"_index":2488,"title":{},"name":{},"text":{"41":{},"54":{}},"component":{}}],["mani",{"_index":721,"title":{},"name":{},"text":{"4":{},"7":{},"8":{},"35":{},"53":{},"83":{}},"component":{}}],["manipul",{"_index":3035,"title":{},"name":{},"text":{"61":{},"88":{}},"component":{}}],["manner",{"_index":2962,"title":{},"name":{},"text":{"60":{},"61":{},"62":{},"65":{},"70":{}},"component":{}}],["mansion",{"_index":3702,"title":{},"name":{},"text":{"86":{},"88":{}},"component":{}}],["mansion/scarb",{"_index":1463,"title":{},"name":{},"text":{"14":{}},"component":{}}],["manual",{"_index":1109,"title":{},"name":{},"text":{"9":{},"14":{},"29":{},"41":{},"62":{}},"component":{}}],["manufactur",{"_index":1299,"title":{},"name":{},"text":{"12":{}},"component":{}}],["map",{"_index":920,"title":{"8-2":{}},"name":{},"text":{"8":{},"38":{},"41":{},"50":{},"62":{},"65":{},"67":{},"75":{}},"component":{}}],["mar",{"_index":2319,"title":{"41-32":{}},"name":{},"text":{},"component":{}}],["march",{"_index":585,"title":{"41-11":{}},"name":{},"text":{"4":{},"59":{}},"component":{}}],["margin",{"_index":3009,"title":{},"name":{},"text":{"61":{}},"component":{}}],["mark",{"_index":2283,"title":{},"name":{},"text":{"39":{},"64":{},"66":{},"76":{}},"component":{}}],["market",{"_index":1675,"title":{},"name":{},"text":{"26":{},"67":{}},"component":{}}],["marketplac",{"_index":3746,"title":{},"name":{},"text":{"90":{}},"component":{}}],["massiv",{"_index":165,"title":{},"name":{},"text":{"1":{},"2":{}},"component":{}}],["master",{"_index":2435,"title":{},"name":{},"text":{"41":{}},"component":{}}],["match",{"_index":1340,"title":{},"name":{},"text":{"13":{},"34":{},"39":{},"49":{},"54":{}},"component":{}}],["materi",{"_index":632,"title":{},"name":{},"text":{"4":{}},"component":{}}],["mathbb{f}_p",{"_index":2638,"title":{},"name":{},"text":{"50":{},"51":{}},"component":{}}],["mathbb{f}_p^*\\rightarrow",{"_index":2647,"title":{},"name":{},"text":{"50":{}},"component":{}}],["mathbb{f}_p^2\\rightarrow\\mathbb{f}_p",{"_index":2645,"title":{},"name":{},"text":{"50":{}},"component":{}}],["mathemat",{"_index":101,"title":{"65-8":{}},"name":{},"text":{"1":{},"3":{}},"component":{}}],["matter",{"_index":3463,"title":{},"name":{},"text":{"72":{}},"component":{}}],["matthieu",{"_index":2174,"title":{},"name":{},"text":{"39":{}},"component":{}}],["matur",{"_index":3186,"title":{},"name":{},"text":{"64":{}},"component":{}}],["max",{"_index":1926,"title":{},"name":{},"text":{"38":{},"39":{},"47":{},"61":{}},"component":{}}],["max_amount",{"_index":3285,"title":{},"name":{},"text":{"67":{},"77":{}},"component":{}}],["max_fe",{"_index":2511,"title":{},"name":{},"text":{"41":{},"61":{},"66":{},"67":{},"77":{}},"component":{}}],["max_k",{"_index":2966,"title":{},"name":{},"text":{"61":{}},"component":{}}],["max_k[\\text{cairoresourceusage}_k",{"_index":3041,"title":{},"name":{},"text":{"61":{}},"component":{}}],["max_l1_msg_fe",{"_index":3138,"title":{},"name":{},"text":{"63":{}},"component":{}}],["max_price_per_unit",{"_index":3286,"title":{},"name":{},"text":{"67":{},"77":{}},"component":{}}],["maxim",{"_index":2750,"title":{},"name":{},"text":{"53":{},"61":{},"75":{}},"component":{}}],["maximum",{"_index":1662,"title":{},"name":{},"text":{"26":{},"32":{},"38":{},"39":{},"41":{},"47":{},"53":{},"61":{},"63":{},"66":{},"67":{},"77":{}},"component":{}}],["mean",{"_index":845,"title":{},"name":{},"text":{"7":{},"12":{},"13":{},"39":{},"41":{},"45":{},"56":{},"60":{},"64":{},"68":{},"72":{},"77":{}},"component":{}}],["meaning",{"_index":2906,"title":{},"name":{},"text":{"59":{}},"component":{}}],["meant",{"_index":411,"title":{},"name":{},"text":{"4":{},"39":{}},"component":{}}],["measur",{"_index":284,"title":{},"name":{},"text":{"1":{},"9":{},"13":{},"47":{},"53":{},"61":{},"65":{}},"component":{}}],["mechan",{"_index":155,"title":{"62":{},"57-1":{}},"name":{"61":{},"62":{}},"text":{"1":{},"4":{},"6":{},"7":{},"13":{},"16":{},"18":{},"35":{},"37":{},"41":{},"47":{},"56":{},"61":{},"62":{},"63":{},"64":{},"80":{}},"component":{}}],["medium",{"_index":2473,"title":{},"name":{},"text":{"41":{},"81":{}},"component":{}}],["meet",{"_index":637,"title":{},"name":{},"text":{"4":{},"7":{}},"component":{}}],["member",{"_index":525,"title":{},"name":{},"text":{"4":{},"18":{},"29":{},"41":{},"54":{},"72":{},"76":{},"78":{},"79":{}},"component":{}}],["member’",{"_index":1584,"title":{},"name":{},"text":{"18":{}},"component":{}}],["memori",{"_index":269,"title":{},"name":{},"text":{"1":{},"7":{},"8":{},"34":{},"41":{}},"component":{}}],["memorypag",{"_index":1079,"title":{},"name":{},"text":{"8":{}},"component":{}}],["memorypagefactregistri",{"_index":931,"title":{},"name":{},"text":{"8":{}},"component":{}}],["mempool",{"_index":733,"title":{"6-3":{},"6-6":{}},"name":{},"text":{"6":{},"41":{},"53":{},"57":{},"64":{},"66":{}},"component":{}}],["memstorag",{"_index":2058,"title":{},"name":{},"text":{"38":{}},"component":{}}],["mention",{"_index":1213,"title":{},"name":{},"text":{"10":{},"22":{}},"component":{}}],["menu",{"_index":336,"title":{},"name":{},"text":{"3":{},"13":{}},"component":{}}],["merkl",{"_index":938,"title":{"65-5":{}},"name":{},"text":{"8":{},"38":{},"39":{},"59":{},"64":{},"65":{}},"component":{}}],["merklestat",{"_index":1081,"title":{},"name":{},"text":{"8":{}},"component":{}}],["merklestatementcontract",{"_index":937,"title":{},"name":{},"text":{"8":{}},"component":{}}],["messag",{"_index":273,"title":{"62":{},"63":{},"61-17":{},"62-1":{},"62-2":{},"62-3":{},"62-4":{},"62-5":{},"62-6":{},"80-7":{}},"name":{"62":{},"63":{}},"text":{"1":{},"9":{},"10":{},"30":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"47":{},"59":{},"61":{},"62":{},"63":{},"66":{},"67":{},"80":{},"81":{}},"component":{}}],["message_fe",{"_index":3139,"title":{},"name":{},"text":{"63":{}},"component":{}}],["message_hash",{"_index":1972,"title":{},"name":{},"text":{"38":{}},"component":{}}],["message_receiv",{"_index":3609,"title":{},"name":{},"text":{"79":{}},"component":{}}],["message_received.emit",{"_index":3614,"title":{},"name":{},"text":{"79":{}},"component":{}}],["messagecancellationdelay",{"_index":3127,"title":{"63-46":{}},"name":{},"text":{"63":{}},"component":{}}],["messages_s",{"_index":3261,"title":{},"name":{},"text":{"66":{}},"component":{}}],["messagetol2cancel",{"_index":3130,"title":{"63-75":{}},"name":{},"text":{"63":{}},"component":{}}],["messagetol2cancellationstart",{"_index":3131,"title":{"63-79":{}},"name":{},"text":{"63":{}},"component":{}}],["messagetyp",{"_index":3585,"title":{},"name":{},"text":{"78":{}},"component":{}}],["messagetype::a",{"_index":3586,"title":{},"name":{},"text":{"78":{}},"component":{}}],["messagetype::b",{"_index":3587,"title":{},"name":{},"text":{"78":{}},"component":{}}],["messagetype::c",{"_index":3588,"title":{},"name":{},"text":{"78":{}},"component":{}}],["message’",{"_index":2898,"title":{},"name":{},"text":{"59":{}},"component":{}}],["met",{"_index":2615,"title":{},"name":{},"text":{"47":{}},"component":{}}],["meta",{"_index":2920,"title":{},"name":{},"text":{"60":{}},"component":{}}],["metamask",{"_index":3693,"title":{},"name":{},"text":{"84":{}},"component":{}}],["meter",{"_index":3367,"title":{},"name":{},"text":{"68":{}},"component":{}}],["method",{"_index":49,"title":{"58-9":{}},"name":{},"text":{"1":{},"8":{},"11":{},"13":{},"15":{},"38":{},"39":{},"41":{},"45":{},"55":{},"60":{},"64":{},"66":{},"68":{},"80":{}},"component":{}}],["metric",{"_index":1919,"title":{},"name":{},"text":{"38":{},"39":{},"48":{},"61":{}},"component":{}}],["metricsport",{"_index":2005,"title":{},"name":{},"text":{"38":{}},"component":{}}],["metricsport:$metricsport",{"_index":1999,"title":{},"name":{},"text":{"38":{}},"component":{}}],["microsoft",{"_index":3743,"title":{},"name":{},"text":{"90":{}},"component":{}}],["mid",{"_index":3332,"title":{},"name":{},"text":{"68":{}},"component":{}}],["migrat",{"_index":1886,"title":{"45":{},"76":{},"38-16":{}},"name":{"45":{}},"text":{"37":{},"38":{},"39":{},"41":{},"45":{},"58":{}},"component":{}}],["million",{"_index":578,"title":{},"name":{},"text":{"4":{},"41":{}},"component":{}}],["min",{"_index":2624,"title":{},"name":{},"text":{"47":{}},"component":{}}],["min_proof_of_work_bit",{"_index":1063,"title":{},"name":{},"text":{"8":{}},"component":{}}],["mind",{"_index":1597,"title":{},"name":{},"text":{"18":{},"61":{}},"component":{}}],["mine",{"_index":3159,"title":{},"name":{},"text":{"64":{}},"component":{}}],["miner",{"_index":432,"title":{},"name":{},"text":{"4":{},"64":{}},"component":{}}],["minim",{"_index":233,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"8":{},"29":{}},"component":{}}],["minimum",{"_index":1643,"title":{},"name":{},"text":{"26":{},"33":{}},"component":{}}],["minor",{"_index":2065,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["mint",{"_index":514,"title":{"18-5":{},"26-5":{}},"name":{},"text":{"4":{},"18":{},"26":{},"35":{},"62":{}},"component":{}}],["misconcept",{"_index":3143,"title":{"64-5":{}},"name":{},"text":{},"component":{}}],["misinterpret",{"_index":3181,"title":{},"name":{},"text":{"64":{}},"component":{}}],["mismatch",{"_index":2155,"title":{},"name":{},"text":{"39":{},"41":{}},"component":{}}],["miss",{"_index":2022,"title":{},"name":{},"text":{"38":{},"39":{},"63":{},"85":{}},"component":{}}],["mission",{"_index":560,"title":{},"name":{},"text":{"4":{}},"component":{}}],["misunderstand",{"_index":3177,"title":{},"name":{},"text":{"64":{}},"component":{}}],["mitig",{"_index":1741,"title":{},"name":{},"text":{"29":{},"62":{}},"component":{}}],["mix",{"_index":2631,"title":{},"name":{},"text":{"49":{}},"component":{}}],["mkdir",{"_index":1491,"title":{},"name":{},"text":{"16":{}},"component":{}}],["mock",{"_index":3676,"title":{},"name":{},"text":{"83":{}},"component":{}}],["mod",{"_index":1365,"title":{},"name":{},"text":{"13":{},"72":{},"76":{}},"component":{}}],["mode",{"_index":934,"title":{},"name":{},"text":{"8":{},"77":{},"80":{}},"component":{}}],["model",{"_index":660,"title":{},"name":{},"text":{"4":{},"6":{},"18":{},"39":{},"85":{}},"component":{}}],["modern",{"_index":1714,"title":{},"name":{},"text":{"29":{},"58":{}},"component":{}}],["modif",{"_index":1424,"title":{},"name":{},"text":{"13":{}},"component":{}}],["modifi",{"_index":1101,"title":{},"name":{},"text":{"9":{},"13":{},"15":{},"61":{},"72":{},"75":{},"76":{},"80":{}},"component":{}}],["modul",{"_index":1152,"title":{},"name":{},"text":{"9":{},"41":{}},"component":{}}],["modular",{"_index":1559,"title":{},"name":{},"text":{"18":{}},"component":{}}],["moment",{"_index":1778,"title":{},"name":{},"text":{"31":{},"41":{},"53":{},"63":{},"66":{}},"component":{}}],["monday",{"_index":3578,"title":{},"name":{},"text":{"78":{}},"component":{}}],["monitor",{"_index":896,"title":{},"name":{},"text":{"7":{},"8":{},"13":{},"38":{},"39":{},"60":{},"64":{}},"component":{}}],["monolith",{"_index":927,"title":{},"name":{},"text":{"8":{}},"component":{}}],["monospac",{"_index":349,"title":{},"name":{},"text":{"3":{}},"component":{}}],["month",{"_index":581,"title":{},"name":{},"text":{"4":{}},"component":{}}],["more",{"_index":266,"title":{},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"8":{},"9":{},"11":{},"17":{},"18":{},"21":{},"22":{},"25":{},"27":{},"32":{},"33":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"42":{},"46":{},"47":{},"50":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"72":{},"73":{},"76":{},"78":{},"79":{},"80":{},"83":{},"85":{},"88":{}},"component":{}}],["mostli",{"_index":2263,"title":{},"name":{},"text":{"39":{},"53":{}},"component":{}}],["motiv",{"_index":2798,"title":{},"name":{},"text":{"58":{}},"component":{}}],["move",{"_index":1682,"title":{},"name":{},"text":{"27":{},"30":{},"38":{},"39":{},"41":{},"64":{},"82":{}},"component":{}}],["movement",{"_index":1811,"title":{},"name":{},"text":{"34":{}},"component":{}}],["msg_to_l1",{"_index":2134,"title":{},"name":{},"text":{"39":{},"62":{}},"component":{}}],["msghash",{"_index":3137,"title":{},"name":{},"text":{"63":{}},"component":{}}],["much",{"_index":1402,"title":{},"name":{},"text":{"13":{},"64":{},"83":{},"88":{}},"component":{}}],["mul_mod",{"_index":2354,"title":{},"name":{},"text":{"41":{}},"component":{}}],["multi",{"_index":1699,"title":{},"name":{},"text":{"29":{},"34":{},"81":{}},"component":{}}],["multical",{"_index":19,"title":{"1-14":{}},"name":{},"text":{},"component":{}}],["multipl",{"_index":173,"title":{"8-1":{}},"name":{},"text":{"1":{},"3":{},"4":{},"7":{},"8":{},"9":{},"11":{},"38":{},"39":{},"41":{},"42":{},"53":{},"56":{},"58":{},"61":{},"62":{},"64":{},"75":{},"77":{},"80":{}},"component":{}}],["mut",{"_index":2810,"title":{},"name":{},"text":{"58":{},"62":{}},"component":{}}],["mutabl",{"_index":1799,"title":{"34-5":{},"34-13":{},"34-21":{},"34-30":{},"34-38":{},"34-47":{},"34-56":{},"34-64":{},"34-73":{},"34-82":{},"34-90":{},"34-98":{},"34-106":{},"34-114":{},"34-122":{},"34-130":{},"63-4":{},"63-11":{},"63-18":{},"63-24":{},"63-30":{},"63-36":{},"63-42":{},"63-48":{},"63-54":{},"63-61":{}},"name":{},"text":{},"component":{}}],["my_struct",{"_index":3591,"title":{},"name":{},"text":{"78":{}},"component":{}}],["myenum",{"_index":3459,"title":{},"name":{},"text":{"72":{}},"component":{}}],["myenum::var1",{"_index":3466,"title":{},"name":{},"text":{"72":{}},"component":{}}],["mystruct",{"_index":3461,"title":{},"name":{},"text":{"72":{},"78":{}},"component":{}}],["n",{"_index":2689,"title":{},"name":{},"text":{"50":{},"59":{},"61":{},"63":{},"65":{},"67":{}},"component":{}}],["n/a",{"_index":3121,"title":{},"name":{},"text":{"62":{},"67":{}},"component":{}}],["n=0",{"_index":2708,"title":{},"name":{},"text":{"50":{}},"component":{}}],["n=1",{"_index":2706,"title":{},"name":{},"text":{"50":{}},"component":{}}],["n\\ge",{"_index":2703,"title":{},"name":{},"text":{"50":{},"61":{}},"component":{}}],["n\\ge\\el",{"_index":2983,"title":{},"name":{},"text":{"61":{}},"component":{}}],["n_elm",{"_index":3349,"title":{},"name":{},"text":{"68":{}},"component":{}}],["name",{"_index":124,"title":{"72-5":{}},"name":{},"text":{"1":{},"3":{},"4":{},"8":{},"9":{},"10":{},"11":{},"13":{},"14":{},"30":{},"34":{},"37":{},"38":{},"39":{},"41":{},"42":{},"43":{},"44":{},"45":{},"48":{},"53":{},"58":{},"59":{},"67":{},"69":{},"70":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"86":{}},"component":{}}],["name_",{"_index":3433,"title":{},"name":{},"text":{"72":{}},"component":{}}],["nascent",{"_index":694,"title":{},"name":{},"text":{"4":{}},"component":{}}],["nativ",{"_index":640,"title":{},"name":{},"text":{"4":{},"56":{},"68":{}},"component":{}}],["natur",{"_index":917,"title":{},"name":{},"text":{"7":{},"13":{},"41":{}},"component":{}}],["navig",{"_index":1250,"title":{},"name":{},"text":{"11":{},"16":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{}},"component":{}}],["near",{"_index":2242,"title":{},"name":{},"text":{"39":{}},"component":{}}],["nearest",{"_index":2399,"title":{},"name":{},"text":{"41":{},"53":{},"77":{},"80":{}},"component":{}}],["necessari",{"_index":888,"title":{},"name":{},"text":{"7":{},"10":{},"13":{},"16":{},"37":{},"38":{},"45":{},"64":{}},"component":{}}],["necessarili",{"_index":725,"title":{},"name":{},"text":{"4":{},"64":{},"74":{}},"component":{}}],["necessit",{"_index":1068,"title":{},"name":{},"text":{"8":{},"58":{}},"component":{}}],["need",{"_index":639,"title":{"68-1":{},"68-2":{}},"name":{},"text":{"4":{},"7":{},"9":{},"11":{},"13":{},"14":{},"16":{},"19":{},"20":{},"22":{},"26":{},"34":{},"38":{},"39":{},"41":{},"53":{},"60":{},"61":{},"62":{},"64":{},"65":{},"67":{},"68":{},"69":{},"71":{},"76":{},"78":{},"86":{},"89":{}},"component":{}}],["neg",{"_index":3553,"title":{},"name":{},"text":{"78":{}},"component":{}}],["neglig",{"_index":2372,"title":{},"name":{},"text":{"41":{}},"component":{}}],["neq",{"_index":3239,"title":{},"name":{},"text":{"65":{}},"component":{}}],["nest",{"_index":3414,"title":{"72-4":{}},"name":{},"text":{"72":{},"75":{}},"component":{}}],["nethermind",{"_index":795,"title":{},"name":{},"text":{"6":{},"21":{},"38":{},"39":{},"42":{},"43":{},"86":{}},"component":{}}],["nethermind.io",{"_index":2571,"title":{},"name":{},"text":{"43":{}},"component":{}}],["nethermind/juno:v0.6.0",{"_index":2001,"title":{},"name":{},"text":{"38":{}},"component":{}}],["nethermind/juno:v0.7.0",{"_index":1985,"title":{},"name":{},"text":{"38":{}},"component":{}}],["nethermind/juno:v0.7.3",{"_index":1960,"title":{},"name":{},"text":{"38":{}},"component":{}}],["network",{"_index":141,"title":{"17":{},"9-2":{},"13-7":{},"39-64":{}},"name":{},"text":{"1":{},"4":{},"6":{},"7":{},"9":{},"11":{},"12":{},"13":{},"15":{},"17":{},"18":{},"19":{},"26":{},"35":{},"38":{},"39":{},"41":{},"47":{},"56":{},"58":{},"62":{},"64":{},"67":{},"71":{},"81":{},"88":{}},"component":{}}],["network=sepolia",{"_index":1263,"title":{},"name":{},"text":{"11":{},"12":{},"15":{}},"component":{}}],["network’",{"_index":430,"title":{},"name":{},"text":{"4":{},"6":{},"18":{},"47":{},"64":{},"71":{}},"component":{}}],["never",{"_index":1641,"title":{},"name":{},"text":{"26":{},"35":{},"68":{}},"component":{}}],["new",{"_index":147,"title":{"55":{},"39-49":{},"39-54":{},"41-3":{},"41-12":{},"55-1":{},"65-1":{}},"name":{"55":{}},"text":{"1":{},"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"13":{},"15":{},"16":{},"21":{},"25":{},"27":{},"29":{},"34":{},"37":{},"38":{},"39":{},"41":{},"45":{},"46":{},"47":{},"55":{},"60":{},"61":{},"64":{},"65":{},"66":{},"67":{},"68":{},"70":{},"71":{},"74":{},"80":{},"81":{},"88":{},"89":{}},"component":{}}],["new_account",{"_index":2478,"title":{},"name":{},"text":{"41":{}},"component":{}}],["new_own",{"_index":1362,"title":{},"name":{},"text":{"13":{}},"component":{}}],["new_syntax_test_contract::new_syntax_test_contract::counter_contract::counterdecreas",{"_index":3429,"title":{},"name":{},"text":{"72":{}},"component":{}}],["new_syntax_test_contract::new_syntax_test_contract::counter_contract::counterincreas",{"_index":3428,"title":{},"name":{},"text":{"72":{}},"component":{}}],["new_syntax_test_contract::new_syntax_test_contract::counter_contract::ev",{"_index":3430,"title":{},"name":{},"text":{"72":{}},"component":{}}],["new_syntax_test_contract::new_syntax_test_contract::icountercontract",{"_index":3419,"title":{},"name":{},"text":{"72":{}},"component":{}}],["newer",{"_index":2272,"title":{},"name":{},"text":{"39":{},"65":{}},"component":{}}],["newhead",{"_index":2167,"title":{},"name":{},"text":{"39":{}},"component":{}}],["newli",{"_index":597,"title":{},"name":{},"text":{"4":{},"11":{},"34":{},"60":{},"61":{},"67":{}},"component":{}}],["newslett",{"_index":2331,"title":{},"name":{},"text":{"41":{},"46":{},"47":{},"67":{}},"component":{}}],["newton",{"_index":2244,"title":{},"name":{},"text":{"39":{}},"component":{}}],["next",{"_index":1255,"title":{},"name":{},"text":{"11":{},"13":{},"16":{},"36":{},"41":{},"57":{},"60":{},"63":{},"68":{},"72":{},"74":{},"80":{}},"component":{}}],["nextj",{"_index":3663,"title":{},"name":{},"text":{"82":{}},"component":{}}],["nft",{"_index":2628,"title":{},"name":{},"text":{"48":{},"56":{}},"component":{}}],["nftscan",{"_index":2627,"title":{},"name":{},"text":{"48":{}},"component":{}}],["ngo",{"_index":569,"title":{},"name":{},"text":{"4":{}},"component":{}}],["nice",{"_index":2249,"title":{},"name":{},"text":{"39":{},"41":{}},"component":{}}],["nil",{"_index":1979,"title":{},"name":{},"text":{"38":{}},"component":{}}],["no_debug_info",{"_index":1198,"title":{"10-17":{}},"name":{},"text":{"10":{}},"component":{}}],["no_opt_unused_funct",{"_index":1201,"title":{"10-20":{}},"name":{},"text":{"10":{}},"component":{}}],["no_wallet",{"_index":1179,"title":{},"name":{},"text":{"9":{},"41":{}},"component":{}}],["node",{"_index":13,"title":{"6":{},"42":{},"83":{},"1-11":{},"6-1":{},"6-2":{},"6-3":{},"6-4":{},"6-5":{},"6-6":{},"6-7":{},"64-6":{},"64-7":{},"64-8":{},"64-9":{},"65-6":{},"65-8":{}},"name":{"6":{}},"text":{"1":{},"2":{},"6":{},"11":{},"13":{},"16":{},"21":{},"26":{},"37":{},"38":{},"39":{},"41":{},"42":{},"49":{},"60":{},"64":{},"65":{},"83":{},"89":{}},"component":{}}],["nodes—play",{"_index":3145,"title":{},"name":{},"text":{"64":{}},"component":{}}],["non",{"_index":362,"title":{},"name":{},"text":{"3":{},"38":{},"39":{},"54":{},"61":{},"65":{},"68":{},"78":{}},"component":{}}],["nonc",{"_index":1123,"title":{},"name":{},"text":{"9":{},"34":{},"38":{},"39":{},"41":{},"54":{},"55":{},"56":{},"59":{},"60":{},"61":{},"62":{},"63":{},"65":{},"66":{},"67":{},"74":{},"77":{}},"component":{}}],["nonce_data_availability_mod",{"_index":3278,"title":{},"name":{},"text":{"67":{},"77":{}},"component":{}}],["nonce}}_{\\text{64",{"_index":2926,"title":{},"name":{},"text":{"60":{}},"component":{}}],["none",{"_index":1822,"title":{},"name":{},"text":{"34":{},"63":{},"80":{}},"component":{}}],["nonempti",{"_index":3539,"title":{},"name":{},"text":{"77":{}},"component":{}}],["nonpay",{"_index":1824,"title":{},"name":{},"text":{"34":{}},"component":{}}],["nopan",{"_index":3631,"title":{},"name":{},"text":{"80":{}},"component":{}}],["normal",{"_index":361,"title":{},"name":{},"text":{"3":{},"16":{},"60":{}},"component":{}}],["nostra",{"_index":2601,"title":{},"name":{},"text":{"45":{}},"component":{}}],["not_receiv",{"_index":1185,"title":{},"name":{},"text":{"9":{},"35":{},"66":{}},"component":{}}],["notabl",{"_index":1024,"title":{},"name":{},"text":{"8":{},"89":{}},"component":{}}],["notat",{"_index":327,"title":{"3":{}},"name":{"3":{}},"text":{"3":{},"68":{}},"component":{}}],["note",{"_index":1180,"title":{"38":{},"39":{},"41":{},"22-3":{},"38-16":{}},"name":{"41":{}},"text":{"9":{},"13":{},"25":{},"38":{},"39":{},"40":{},"41":{},"62":{},"64":{},"68":{},"75":{},"78":{},"79":{}},"component":{}}],["noteworthi",{"_index":1448,"title":{},"name":{},"text":{"13":{}},"component":{}}],["noth",{"_index":714,"title":{},"name":{},"text":{"4":{},"68":{}},"component":{}}],["notic",{"_index":1530,"title":{},"name":{},"text":{"17":{},"39":{},"61":{},"65":{}},"component":{}}],["notif",{"_index":1352,"title":{},"name":{},"text":{"13":{},"39":{}},"component":{}}],["notion",{"_index":3331,"title":{},"name":{},"text":{"68":{}},"component":{}}],["nov",{"_index":2311,"title":{"41-25":{},"41-34":{}},"name":{},"text":{},"component":{}}],["novelti",{"_index":2469,"title":{},"name":{},"text":{"41":{}},"component":{}}],["novemb",{"_index":516,"title":{},"name":{},"text":{"4":{},"37":{}},"component":{}}],["now",{"_index":1253,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"35":{},"38":{},"39":{},"41":{},"46":{},"47":{},"56":{},"60":{},"62":{},"64":{},"66":{},"67":{},"72":{},"78":{}},"component":{}}],["nownod",{"_index":2547,"title":{},"name":{},"text":{"42":{}},"component":{}}],["npm",{"_index":3688,"title":{},"name":{},"text":{"84":{},"86":{}},"component":{}}],["num",{"_index":2940,"title":{},"name":{},"text":{"60":{}},"component":{}}],["num_of_storage_upd",{"_index":2939,"title":{},"name":{},"text":{"60":{}},"component":{}}],["num_security_bit",{"_index":1062,"title":{},"name":{},"text":{"8":{}},"component":{}}],["numashex",{"_index":2041,"title":{},"name":{},"text":{"38":{}},"component":{}}],["number",{"_index":74,"title":{},"name":{},"text":{"1":{},"3":{},"9":{},"10":{},"20":{},"21":{},"24":{},"27":{},"38":{},"39":{},"41":{},"44":{},"47":{},"50":{},"51":{},"53":{},"59":{},"60":{},"61":{},"63":{},"65":{},"66":{},"67":{},"74":{},"77":{},"78":{},"80":{},"88":{}},"component":{}}],["numer",{"_index":902,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["object",{"_index":1236,"title":{},"name":{},"text":{"11":{},"41":{},"49":{},"59":{},"67":{},"70":{},"74":{}},"component":{}}],["oblig",{"_index":635,"title":{},"name":{},"text":{"4":{}},"component":{}}],["observ",{"_index":1451,"title":{},"name":{},"text":{"13":{},"64":{}},"component":{}}],["obtain",{"_index":1145,"title":{},"name":{},"text":{"9":{},"16":{},"59":{},"65":{}},"component":{}}],["obviou",{"_index":3333,"title":{},"name":{},"text":{"68":{}},"component":{}}],["occasion",{"_index":2230,"title":{},"name":{},"text":{"39":{}},"component":{}}],["occupi",{"_index":2921,"title":{},"name":{},"text":{"60":{},"61":{}},"component":{}}],["occur",{"_index":2037,"title":{},"name":{},"text":{"38":{},"64":{},"66":{}},"component":{}}],["occurr",{"_index":343,"title":{},"name":{},"text":{"3":{}},"component":{}}],["oct",{"_index":2323,"title":{"41-35":{}},"name":{},"text":{},"component":{}}],["offer",{"_index":483,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"11":{},"13":{},"16":{},"20":{},"53":{},"56":{},"58":{},"80":{}},"component":{}}],["offici",{"_index":1913,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["offload",{"_index":3156,"title":{},"name":{},"text":{"64":{}},"component":{}}],["offset",{"_index":2208,"title":{},"name":{},"text":{"39":{}},"component":{}}],["oklink",{"_index":1445,"title":{},"name":{},"text":{"13":{},"48":{}},"component":{}}],["okx",{"_index":3695,"title":{},"name":{},"text":{"84":{}},"component":{}}],["old",{"_index":1837,"title":{},"name":{},"text":{"34":{},"39":{},"41":{},"45":{},"64":{},"77":{},"80":{}},"component":{}}],["older",{"_index":2183,"title":{},"name":{},"text":{"39":{},"61":{}},"component":{}}],["omerfirmak",{"_index":1924,"title":{},"name":{},"text":{"38":{}},"component":{}}],["omit",{"_index":1130,"title":{},"name":{},"text":{"9":{},"38":{},"59":{},"68":{}},"component":{}}],["omnia",{"_index":2548,"title":{},"name":{},"text":{"42":{}},"component":{}}],["on",{"_index":177,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"9":{},"10":{},"11":{},"13":{},"16":{},"17":{},"18":{},"25":{},"27":{},"34":{},"39":{},"41":{},"45":{},"49":{},"53":{},"54":{},"55":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"68":{},"70":{},"72":{},"73":{},"78":{},"79":{},"80":{}},"component":{}}],["on_rec",{"_index":1764,"title":{"34-170":{}},"name":{},"text":{"30":{},"34":{}},"component":{}}],["onboard",{"_index":550,"title":{},"name":{},"text":{"4":{},"88":{}},"component":{}}],["onc",{"_index":176,"title":{},"name":{},"text":{"1":{},"7":{},"8":{},"11":{},"13":{},"16":{},"19":{},"22":{},"25":{},"34":{},"39":{},"41":{},"53":{},"64":{},"71":{},"79":{},"80":{}},"component":{}}],["onchain",{"_index":515,"title":{"60-5":{},"61-15":{},"61-16":{},"61-17":{},"61-18":{}},"name":{},"text":{"4":{},"7":{},"16":{},"41":{},"56":{},"60":{},"61":{},"80":{}},"component":{}}],["ongo",{"_index":1920,"title":{},"name":{},"text":{"38":{},"41":{}},"component":{}}],["onlin",{"_index":3737,"title":{},"name":{},"text":{"89":{}},"component":{}}],["only_own",{"_index":1390,"title":{},"name":{},"text":{"13":{}},"component":{}}],["onto",{"_index":1426,"title":{},"name":{},"text":{"13":{}},"component":{}}],["onward",{"_index":2362,"title":{},"name":{},"text":{"41":{},"61":{},"72":{},"80":{}},"component":{}}],["op",{"_index":2520,"title":{},"name":{},"text":{"41":{}},"component":{}}],["opcod",{"_index":2775,"title":{},"name":{},"text":{"54":{},"61":{}},"component":{}}],["open",{"_index":657,"title":{"25-2":{},"89-5":{}},"name":{},"text":{"4":{},"13":{},"14":{},"25":{},"42":{},"43":{},"72":{},"82":{},"89":{}},"component":{}}],["openzeppelin",{"_index":1153,"title":{},"name":{},"text":{"9":{},"54":{}},"component":{}}],["openzeppelin’",{"_index":2762,"title":{},"name":{},"text":{"53":{}},"component":{}}],["oper",{"_index":104,"title":{"25":{},"25-1":{},"25-4":{}},"name":{"25":{}},"text":{"1":{},"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"13":{},"14":{},"18":{},"20":{},"21":{},"25":{},"26":{},"34":{},"35":{},"38":{},"39":{},"41":{},"47":{},"56":{},"61":{},"64":{},"65":{},"66":{},"67":{},"69":{},"71":{},"80":{}},"component":{}}],["operational_address",{"_index":1611,"title":{},"name":{},"text":{"21":{},"25":{}},"component":{}}],["oppos",{"_index":2772,"title":{},"name":{},"text":{"54":{},"61":{}},"component":{}}],["optim",{"_index":78,"title":{"7-5":{},"64-5":{}},"name":{},"text":{"1":{},"7":{},"8":{},"10":{},"11":{},"27":{},"38":{},"39":{},"41":{},"47":{},"64":{},"69":{},"71":{}},"component":{}}],["optimis",{"_index":2271,"title":{},"name":{},"text":{"39":{}},"component":{}}],["optimist",{"_index":2336,"title":{},"name":{},"text":{"41":{}},"component":{}}],["optimization.if",{"_index":1212,"title":{},"name":{},"text":{"10":{}},"component":{}}],["option",{"_index":375,"title":{"10-6":{},"39-63":{}},"name":{"10":{}},"text":{"3":{},"9":{},"13":{},"17":{},"18":{},"26":{},"34":{},"37":{},"38":{},"39":{},"61":{}},"component":{}}],["order",{"_index":66,"title":{},"name":{},"text":{"1":{},"4":{},"14":{},"29":{},"31":{},"34":{},"39":{},"41":{},"47":{},"48":{},"50":{},"56":{},"59":{},"61":{},"63":{},"64":{},"65":{},"69":{},"71":{},"78":{}},"component":{}}],["organ",{"_index":567,"title":{},"name":{},"text":{"4":{},"38":{},"65":{},"76":{}},"component":{}}],["orient",{"_index":3499,"title":{},"name":{},"text":{"74":{}},"component":{}}],["origin",{"_index":471,"title":{"58-5":{},"58-6":{}},"name":{},"text":{"4":{},"13":{},"58":{},"60":{},"74":{},"77":{},"78":{}},"component":{}}],["origin’",{"_index":2815,"title":{},"name":{},"text":{"58":{}},"component":{}}],["os",{"_index":28,"title":{"1-23":{}},"name":{},"text":{"1":{},"2":{},"41":{},"61":{},"65":{},"68":{},"70":{},"71":{},"77":{},"80":{}},"component":{}}],["os_program_hash",{"_index":2347,"title":{},"name":{},"text":{"41":{}},"component":{}}],["osec.io",{"_index":2575,"title":{},"name":{},"text":{"43":{}},"component":{}}],["osoutputhead",{"_index":2343,"title":{},"name":{},"text":{"41":{}},"component":{}}],["other",{"_index":1639,"title":{"41-8":{}},"name":{},"text":{"26":{},"38":{}},"component":{}}],["other_contract",{"_index":3484,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["other_contract_addr",{"_index":3426,"title":{},"name":{},"text":{"72":{}},"component":{}}],["otherwis",{"_index":441,"title":{},"name":{},"text":{"4":{},"9":{},"21":{},"41":{},"56":{},"61":{},"62":{},"68":{},"70":{},"80":{}},"component":{}}],["ottersec",{"_index":2574,"title":{},"name":{},"text":{"43":{}},"component":{}}],["out",{"_index":604,"title":{},"name":{},"text":{"4":{},"8":{},"11":{},"17":{},"28":{},"38":{},"39":{},"41":{},"61":{},"72":{},"80":{}},"component":{}}],["outcom",{"_index":1422,"title":{},"name":{},"text":{"13":{}},"component":{}}],["outlin",{"_index":412,"title":{},"name":{},"text":{"4":{},"25":{},"56":{}},"component":{}}],["output",{"_index":183,"title":{"10-16":{}},"name":{},"text":{"1":{},"8":{},"10":{},"11":{},"12":{},"13":{},"16":{},"17":{},"39":{},"41":{},"50":{},"65":{},"68":{},"71":{},"72":{},"80":{}},"component":{}}],["outsid",{"_index":723,"title":{},"name":{},"text":{"4":{},"72":{}},"component":{}}],["outsourc",{"_index":3162,"title":{},"name":{},"text":{"64":{}},"component":{}}],["over",{"_index":612,"title":{},"name":{},"text":{"4":{},"19":{},"38":{},"41":{},"45":{},"50":{},"56":{},"61":{},"67":{},"68":{},"69":{},"72":{}},"component":{}}],["overal",{"_index":737,"title":{"61-1":{},"61-2":{},"61-3":{}},"name":{},"text":{"6":{},"7":{},"18":{},"38":{},"47":{},"61":{},"66":{}},"component":{}}],["overall_fe",{"_index":2413,"title":{},"name":{},"text":{"41":{}},"component":{}}],["overcom",{"_index":3325,"title":{},"name":{},"text":{"68":{}},"component":{}}],["overflow",{"_index":2124,"title":{},"name":{},"text":{"39":{}},"component":{}}],["overli",{"_index":1164,"title":{},"name":{},"text":{"9":{}},"component":{}}],["overrid",{"_index":1329,"title":{},"name":{},"text":{"12":{},"41":{}},"component":{}}],["oversight",{"_index":1754,"title":{},"name":{},"text":{"29":{}},"component":{}}],["overview",{"_index":300,"title":{"2":{},"26":{},"35":{},"64":{},"6-1":{},"26-3":{},"53-1":{}},"name":{"7":{},"26":{},"35":{},"64":{},"85":{}},"text":{"34":{},"46":{},"49":{},"88":{}},"component":{}}],["own",{"_index":2773,"title":{},"name":{},"text":{"54":{},"56":{},"64":{}},"component":{}}],["ownabl",{"_index":1331,"title":{"13-2":{},"13-3":{},"13-4":{}},"name":{},"text":{"13":{}},"component":{}}],["ownableimpl",{"_index":1381,"title":{},"name":{},"text":{"13":{}},"component":{}}],["ownabletrait",{"_index":1356,"title":{},"name":{},"text":{"13":{}},"component":{}}],["owner",{"_index":1304,"title":{"13-9":{}},"name":{},"text":{"12":{},"13":{},"15":{},"58":{},"72":{}},"component":{}}],["ownership",{"_index":1334,"title":{"13-10":{}},"name":{},"text":{"13":{},"15":{},"58":{}},"component":{}}],["ownershiptransf",{"_index":1372,"title":{},"name":{},"text":{"13":{}},"component":{}}],["owner’",{"_index":1417,"title":{},"name":{},"text":{"13":{}},"component":{}}],["p",{"_index":1492,"title":{},"name":{"51":{}},"text":{"16":{},"38":{},"50":{},"51":{},"52":{},"78":{},"79":{}},"component":{}}],["p1",{"_index":2666,"title":{},"name":{},"text":{"50":{}},"component":{}}],["p2",{"_index":2667,"title":{},"name":{},"text":{"50":{}},"component":{}}],["p2p",{"_index":1921,"title":{},"name":{},"text":{"38":{},"41":{}},"component":{}}],["p3\\right]_x",{"_index":2668,"title":{},"name":{},"text":{"50":{}},"component":{}}],["p=2^{251}+17\\cdot",{"_index":2639,"title":{},"name":{},"text":{"50":{}},"component":{}}],["p]_x",{"_index":2674,"title":{},"name":{},"text":{"50":{}},"component":{}}],["p_0",{"_index":2665,"title":{},"name":{},"text":{"50":{}},"component":{}}],["p_1",{"_index":2670,"title":{},"name":{},"text":{"50":{}},"component":{}}],["p_2",{"_index":2671,"title":{},"name":{},"text":{"50":{}},"component":{}}],["p_3",{"_index":2672,"title":{},"name":{},"text":{"50":{}},"component":{}}],["p_l",{"_index":3233,"title":{},"name":{},"text":{"65":{}},"component":{}}],["p_r",{"_index":3236,"title":{},"name":{},"text":{"65":{}},"component":{}}],["pack",{"_index":2338,"title":{},"name":{},"text":{"41":{}},"component":{}}],["packag",{"_index":892,"title":{"88-1":{}},"name":{},"text":{"7":{},"9":{},"11":{},"13":{},"14":{},"41":{},"84":{},"86":{},"88":{},"89":{}},"component":{}}],["page",{"_index":932,"title":{},"name":{},"text":{"8":{},"16":{},"37":{},"38":{},"61":{},"67":{},"69":{},"85":{}},"component":{}}],["paid",{"_index":472,"title":{},"name":{},"text":{"4":{},"41":{},"55":{},"59":{},"61":{},"62":{},"66":{}},"component":{}}],["pair",{"_index":885,"title":{},"name":{},"text":{"7":{},"29":{},"56":{},"70":{},"79":{}},"component":{}}],["panic",{"_index":1982,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["papyru",{"_index":799,"title":{},"name":{},"text":{"6":{},"16":{},"37":{},"42":{}},"component":{}}],["paradigm",{"_index":2510,"title":{},"name":{},"text":{"41":{}},"component":{}}],["parallel",{"_index":819,"title":{},"name":{},"text":{"7":{},"11":{},"38":{},"41":{},"56":{},"64":{}},"component":{}}],["paramet",{"_index":908,"title":{"8-3":{},"8-4":{},"8-5":{},"26-7":{},"34-6":{},"34-14":{},"34-22":{},"34-31":{},"34-39":{},"34-48":{},"34-57":{},"34-65":{},"34-74":{},"34-83":{},"34-91":{},"34-99":{},"34-107":{},"34-115":{},"34-123":{},"34-129":{},"34-137":{},"34-142":{},"34-147":{},"34-152":{},"34-157":{},"34-162":{},"34-167":{},"34-172":{},"63-5":{},"63-12":{},"63-19":{},"63-25":{},"63-31":{},"63-37":{},"63-43":{},"63-49":{},"63-55":{},"63-62":{}},"name":{},"text":{"7":{},"8":{},"9":{},"13":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"29":{},"34":{},"44":{},"50":{},"58":{},"60":{},"61":{},"62":{},"63":{},"73":{},"76":{},"80":{}},"component":{}}],["parent",{"_index":2143,"title":{},"name":{},"text":{"39":{},"59":{},"65":{}},"component":{}}],["parent_block_hash",{"_index":2824,"title":{},"name":{},"text":{"59":{}},"component":{}}],["parenthes",{"_index":379,"title":{},"name":{},"text":{"3":{}},"component":{}}],["part",{"_index":277,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"8":{},"9":{},"16":{},"20":{},"26":{},"35":{},"39":{},"41":{},"45":{},"50":{},"53":{},"60":{},"61":{},"62":{},"64":{},"65":{},"67":{},"68":{},"70":{},"71":{},"72":{},"75":{},"78":{},"79":{},"80":{},"81":{}},"component":{}}],["parti",{"_index":624,"title":{},"name":{},"text":{"4":{},"16":{},"18":{},"53":{},"54":{},"65":{},"70":{},"71":{}},"component":{}}],["partial",{"_index":549,"title":{},"name":{},"text":{"4":{},"39":{},"41":{},"66":{}},"component":{}}],["particip",{"_index":446,"title":{},"name":{},"text":{"4":{},"7":{},"18":{},"25":{},"26":{},"64":{}},"component":{}}],["particular",{"_index":218,"title":{},"name":{},"text":{"1":{},"4":{},"41":{},"54":{},"80":{}},"component":{}}],["particularli",{"_index":1067,"title":{},"name":{},"text":{"8":{},"67":{}},"component":{}}],["partli",{"_index":627,"title":{},"name":{},"text":{"4":{}},"component":{}}],["partner",{"_index":535,"title":{},"name":{},"text":{"4":{}},"component":{}}],["pass",{"_index":1154,"title":{},"name":{},"text":{"9":{},"15":{},"18":{},"22":{},"31":{},"34":{},"39":{},"58":{},"63":{},"66":{},"67":{},"73":{}},"component":{}}],["passiv",{"_index":2780,"title":{},"name":{},"text":{"56":{}},"component":{}}],["password",{"_index":1307,"title":{},"name":{},"text":{"12":{},"16":{}},"component":{}}],["past",{"_index":143,"title":{},"name":{},"text":{"1":{},"13":{},"16":{},"53":{}},"component":{}}],["patch",{"_index":2059,"title":{},"name":{},"text":{"38":{}},"component":{}}],["path",{"_index":352,"title":{},"name":{},"text":{"3":{},"7":{},"8":{},"9":{},"10":{},"17":{},"38":{},"39":{},"65":{},"68":{}},"component":{}}],["pathfind",{"_index":789,"title":{"39":{}},"name":{"39":{}},"text":{"6":{},"16":{},"21":{},"37":{},"39":{},"42":{},"60":{}},"component":{}}],["pathfinder_getproof",{"_index":2211,"title":{},"name":{},"text":{"39":{}},"component":{}}],["pathfinder_gettransactionstatu",{"_index":2204,"title":{},"name":{},"text":{"39":{}},"component":{}}],["pathfinder_subscribe_newhead",{"_index":2168,"title":{},"name":{},"text":{"39":{}},"component":{}}],["pathfinder_vers",{"_index":2269,"title":{},"name":{},"text":{"39":{}},"component":{}}],["pathfinder’",{"_index":2542,"title":{},"name":{},"text":{"42":{},"60":{}},"component":{}}],["patricia",{"_index":2087,"title":{"65-5":{}},"name":{},"text":{"38":{},"41":{},"59":{},"65":{}},"component":{}}],["patriciakey",{"_index":1321,"title":{},"name":{},"text":{"12":{}},"component":{}}],["pattern",{"_index":3734,"title":{},"name":{},"text":{"89":{}},"component":{}}],["paus",{"_index":1623,"title":{},"name":{},"text":{"22":{}},"component":{}}],["pay",{"_index":466,"title":{},"name":{},"text":{"4":{},"16":{},"32":{},"36":{},"41":{},"53":{},"56":{},"61":{},"62":{},"66":{},"67":{},"77":{}},"component":{}}],["payabl",{"_index":1821,"title":{},"name":{},"text":{"34":{},"62":{},"63":{}},"component":{}}],["payableamount",{"_index":1791,"title":{},"name":{},"text":{"32":{}},"component":{}}],["payload",{"_index":1827,"title":{"61-19":{}},"name":{},"text":{"34":{},"59":{},"61":{},"62":{},"63":{},"66":{},"80":{}},"component":{}}],["payload.append",{"_index":3086,"title":{},"name":{},"text":{"62":{},"80":{}},"component":{}}],["payload.length",{"_index":3099,"title":{},"name":{},"text":{"62":{}},"component":{}}],["payload.span",{"_index":3091,"title":{},"name":{},"text":{"62":{}},"component":{}}],["payload[1",{"_index":3087,"title":{},"name":{},"text":{"62":{}},"component":{}}],["payload[2",{"_index":3088,"title":{},"name":{},"text":{"62":{}},"component":{}}],["paymast",{"_index":2785,"title":{},"name":{},"text":{"56":{},"77":{}},"component":{}}],["paymaster_data",{"_index":3279,"title":{},"name":{},"text":{"67":{},"77":{}},"component":{}}],["payment",{"_index":2433,"title":{"57-1":{}},"name":{},"text":{"41":{},"53":{}},"component":{}}],["peckshield",{"_index":2576,"title":{},"name":{},"text":{"43":{}},"component":{}}],["peckshield.com",{"_index":2577,"title":{},"name":{},"text":{"43":{}},"component":{}}],["pedersen",{"_index":94,"title":{"50-3":{},"50-7":{}},"name":{},"text":{"1":{},"8":{},"38":{},"50":{},"61":{},"62":{},"65":{},"67":{},"69":{},"73":{},"75":{},"79":{}},"component":{}}],["pedersen.cairo",{"_index":3378,"title":{},"name":{},"text":{"69":{}},"component":{}}],["pedersenhashpoint",{"_index":1029,"title":{},"name":{},"text":{"8":{}},"component":{}}],["pedersenhashpointsxcolumn",{"_index":955,"title":{},"name":{},"text":{"8":{}},"component":{}}],["pedersenhashpointsycolumn",{"_index":957,"title":{},"name":{},"text":{"8":{}},"component":{}}],["peer",{"_index":2008,"title":{},"name":{},"text":{"38":{}},"component":{}}],["pend",{"_index":1135,"title":{},"name":{},"text":{"9":{},"34":{},"39":{},"41":{},"47":{},"63":{},"78":{}},"component":{}}],["pending_word",{"_index":3593,"title":{},"name":{},"text":{"78":{}},"component":{}}],["pending_word_len",{"_index":3594,"title":{},"name":{},"text":{"78":{}},"component":{}}],["pendingtransact",{"_index":1968,"title":{},"name":{},"text":{"38":{}},"component":{}}],["peopl",{"_index":3180,"title":{},"name":{},"text":{"64":{}},"component":{}}],["per",{"_index":1441,"title":{},"name":{},"text":{"13":{},"16":{},"29":{},"38":{},"39":{},"41":{},"47":{},"61":{}},"component":{}}],["percentag",{"_index":574,"title":{},"name":{},"text":{"4":{},"21":{},"25":{},"26":{}},"component":{}}],["perform",{"_index":86,"title":{"30":{}},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"9":{},"25":{},"26":{},"27":{},"31":{},"38":{},"39":{},"41":{},"47":{},"53":{},"55":{},"60":{},"62":{},"64":{},"66":{},"69":{},"71":{}},"component":{}}],["period",{"_index":606,"title":{},"name":{},"text":{"4":{},"18":{},"22":{},"26":{},"34":{},"35":{}},"component":{}}],["perman",{"_index":689,"title":{},"name":{},"text":{"4":{}},"component":{}}],["permiss",{"_index":1397,"title":{},"name":{},"text":{"13":{}},"component":{}}],["permissionless",{"_index":250,"title":{},"name":{},"text":{"1":{},"2":{},"28":{},"35":{}},"component":{}}],["permissionlessli",{"_index":1698,"title":{},"name":{},"text":{"29":{}},"component":{}}],["permit",{"_index":610,"title":{},"name":{},"text":{"4":{}},"component":{}}],["permut",{"_index":2678,"title":{},"name":{},"text":{"50":{},"69":{}},"component":{}}],["persist",{"_index":3501,"title":{},"name":{},"text":{"75":{}},"component":{}}],["person",{"_index":443,"title":{},"name":{},"text":{"4":{}},"component":{}}],["pertain",{"_index":874,"title":{},"name":{},"text":{"7":{}},"component":{}}],["pertin",{"_index":2292,"title":{},"name":{},"text":{"39":{}},"component":{}}],["pessimist",{"_index":3063,"title":{},"name":{},"text":{"61":{}},"component":{}}],["phase",{"_index":2463,"title":{},"name":{},"text":{"41":{},"66":{}},"component":{}}],["phone",{"_index":2793,"title":{},"name":{},"text":{"56":{}},"component":{}}],["phone’",{"_index":2791,"title":{},"name":{},"text":{"56":{}},"component":{}}],["phrase",{"_index":2782,"title":{},"name":{},"text":{"56":{}},"component":{}}],["pipelin",{"_index":814,"title":{"7-3":{}},"name":{},"text":{"38":{},"41":{}},"component":{}}],["pivot",{"_index":3410,"title":{},"name":{},"text":{"71":{}},"component":{}}],["place",{"_index":1105,"title":{},"name":{},"text":{"9":{},"18":{},"35":{},"44":{},"47":{},"64":{},"72":{}},"component":{}}],["placehold",{"_index":2883,"title":{},"name":{},"text":{"59":{},"67":{}},"component":{}}],["plain",{"_index":1489,"title":{},"name":{},"text":{"16":{}},"component":{}}],["plan",{"_index":518,"title":{},"name":{},"text":{"4":{},"45":{},"64":{},"68":{}},"component":{}}],["platform",{"_index":1427,"title":{},"name":{},"text":{"13":{}},"component":{}}],["play",{"_index":916,"title":{},"name":{},"text":{"7":{},"18":{},"71":{}},"component":{}}],["player",{"_index":3158,"title":{},"name":{},"text":{"64":{}},"component":{}}],["playground",{"_index":3493,"title":{"89-9":{}},"name":{},"text":{"72":{},"89":{}},"component":{}}],["pleas",{"_index":1293,"title":{},"name":{},"text":{"12":{},"39":{},"41":{},"85":{}},"component":{}}],["pledg",{"_index":609,"title":{},"name":{},"text":{"4":{}},"component":{}}],["plethora",{"_index":3719,"title":{},"name":{},"text":{"88":{}},"component":{}}],["plu",{"_index":3013,"title":{},"name":{},"text":{"61":{},"74":{}},"component":{}}],["pluggabl",{"_index":3473,"title":{},"name":{},"text":{"72":{}},"component":{}}],["plugin",{"_index":1335,"title":{"88-5":{}},"name":{},"text":{"13":{},"88":{}},"component":{}}],["plugin’",{"_index":3725,"title":{},"name":{},"text":{"88":{}},"component":{}}],["pmod{p",{"_index":2718,"title":{},"name":{},"text":{"52":{}},"component":{}}],["pod",{"_index":1945,"title":{},"name":{},"text":{"38":{}},"component":{}}],["point",{"_index":123,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"26":{},"38":{},"41":{},"50":{},"52":{},"53":{},"62":{},"64":{},"65":{},"66":{},"68":{},"70":{},"72":{},"74":{},"75":{},"79":{}},"component":{}}],["pointer",{"_index":1980,"title":{},"name":{},"text":{"38":{}},"component":{}}],["polici",{"_index":1647,"title":{},"name":{},"text":{"26":{}},"component":{}}],["poll",{"_index":2132,"title":{},"name":{},"text":{"39":{}},"component":{}}],["pollut",{"_index":2751,"title":{},"name":{},"text":{"53":{}},"component":{}}],["polylogarithm",{"_index":230,"title":{},"name":{},"text":{"1":{}},"component":{}}],["polynomi",{"_index":1054,"title":{},"name":{},"text":{"8":{},"68":{}},"component":{}}],["pool",{"_index":1556,"title":{"27":{},"18-3":{},"25-2":{}},"name":{"27":{}},"text":{"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"27":{},"29":{},"39":{},"62":{}},"component":{}}],["pool_memb",{"_index":1601,"title":{},"name":{},"text":{"19":{},"22":{}},"component":{}}],["pooling_en",{"_index":1612,"title":{},"name":{},"text":{"21":{}},"component":{}}],["poolmemberinfo",{"_index":1569,"title":{},"name":{},"text":{"18":{}},"component":{}}],["pool’",{"_index":1583,"title":{},"name":{},"text":{"18":{}},"component":{}}],["popular",{"_index":3691,"title":{},"name":{},"text":{"84":{},"89":{}},"component":{}}],["port",{"_index":1533,"title":{},"name":{},"text":{"17":{},"38":{}},"component":{}}],["portion",{"_index":477,"title":{},"name":{},"text":{"4":{}},"component":{}}],["poseidon",{"_index":1047,"title":{"50-5":{},"50-8":{}},"name":{},"text":{"8":{},"38":{},"50":{},"59":{},"61":{},"65":{},"67":{},"69":{},"70":{}},"component":{}}],["poseidon.cairo",{"_index":2712,"title":{},"name":{},"text":{"50":{},"69":{}},"component":{}}],["poseidon_hash.pi",{"_index":2710,"title":{},"name":{},"text":{"50":{}},"component":{}}],["poseidonposeidon",{"_index":1046,"title":{},"name":{},"text":{"8":{}},"component":{}}],["poseidonposeidonfullroundkey",{"_index":1009,"title":{},"name":{},"text":{"8":{}},"component":{}}],["poseidonposeidonfullroundkey0column6",{"_index":1005,"title":{},"name":{},"text":{"8":{}},"component":{}}],["poseidonposeidonfullroundkey1column6",{"_index":1007,"title":{},"name":{},"text":{"8":{}},"component":{}}],["poseidonposeidonfullroundkeycolumn0",{"_index":1065,"title":{},"name":{},"text":{"8":{}},"component":{}}],["poseidonposeidonpartialroundkey",{"_index":1058,"title":{},"name":{},"text":{"8":{}},"component":{}}],["poseidonposeidonpartialroundkey0column6",{"_index":1012,"title":{},"name":{},"text":{"8":{}},"component":{}}],["poseidonposeidonpartialroundkey1column6",{"_index":1014,"title":{},"name":{},"text":{"8":{}},"component":{}}],["posit",{"_index":1026,"title":{"10-4":{}},"name":{},"text":{"8":{}},"component":{}}],["possess",{"_index":2779,"title":{},"name":{},"text":{"56":{},"65":{}},"component":{}}],["possibl",{"_index":384,"title":{},"name":{},"text":{"3":{},"9":{},"11":{},"13":{},"39":{},"53":{},"61":{},"66":{},"67":{},"68":{},"72":{},"79":{},"80":{},"88":{}},"component":{}}],["post",{"_index":196,"title":{},"name":{},"text":{"1":{},"4":{},"37":{},"41":{},"61":{},"76":{},"80":{}},"component":{}}],["potent",{"_index":1452,"title":{},"name":{},"text":{"13":{}},"component":{}}],["potenti",{"_index":678,"title":{"12-7":{},"53-2":{}},"name":{},"text":{"4":{},"7":{},"29":{},"38":{},"47":{},"62":{},"72":{}},"component":{}}],["pow_2_128",{"_index":3564,"title":{},"name":{},"text":{"78":{}},"component":{}}],["power",{"_index":547,"title":{},"name":{},"text":{"4":{},"7":{},"42":{},"64":{},"84":{}},"component":{}}],["pprof",{"_index":2073,"title":{},"name":{},"text":{"38":{}},"component":{}}],["pr",{"_index":1923,"title":{},"name":{},"text":{"38":{},"41":{}},"component":{}}],["practic",{"_index":573,"title":{},"name":{},"text":{"4":{},"56":{},"88":{}},"component":{}}],["pre",{"_index":1609,"title":{"60-6":{},"60-7":{},"60-8":{}},"name":{},"text":{"21":{},"24":{},"39":{},"41":{},"66":{},"67":{},"83":{}},"component":{}}],["preced",{"_index":368,"title":{},"name":{},"text":{"3":{}},"component":{}}],["precis",{"_index":1615,"title":{},"name":{},"text":{"21":{},"25":{},"62":{}},"component":{}}],["precomput",{"_index":2068,"title":{},"name":{},"text":{"38":{}},"component":{}}],["predefin",{"_index":87,"title":{},"name":{},"text":{"1":{},"7":{},"61":{},"63":{},"69":{}},"component":{}}],["predeploy",{"_index":1516,"title":{},"name":{},"text":{"17":{}},"component":{}}],["predetermin",{"_index":3032,"title":{},"name":{},"text":{"61":{}},"component":{}}],["predica",{"_index":3337,"title":{},"name":{},"text":{"68":{}},"component":{}}],["predict",{"_index":2616,"title":{},"name":{},"text":{"47":{},"58":{}},"component":{}}],["preexist",{"_index":2778,"title":{},"name":{},"text":{"55":{}},"component":{}}],["prefer",{"_index":808,"title":{},"name":{},"text":{"6":{},"17":{}},"component":{}}],["prefix",{"_index":2225,"title":{},"name":{},"text":{"39":{},"41":{},"59":{},"62":{},"65":{},"67":{},"73":{}},"component":{}}],["prefund",{"_index":1547,"title":{},"name":{},"text":{"17":{}},"component":{}}],["preliminari",{"_index":3255,"title":{},"name":{},"text":{"66":{}},"component":{}}],["prepar",{"_index":1607,"title":{},"name":{},"text":{"21":{}},"component":{}}],["preprocess",{"_index":1197,"title":{"10-15":{}},"name":{},"text":{"10":{}},"component":{}}],["preprocessor",{"_index":1219,"title":{},"name":{},"text":{"10":{}},"component":{}}],["prerequisit",{"_index":1226,"title":{"11-1":{},"12-1":{},"15-1":{},"16-1":{},"17-1":{}},"name":{},"text":{"19":{},"21":{},"22":{},"24":{},"25":{},"27":{},"32":{},"36":{},"76":{}},"component":{}}],["present",{"_index":3371,"title":{},"name":{},"text":{"68":{},"83":{}},"component":{}}],["preserv",{"_index":448,"title":{},"name":{},"text":{"4":{},"7":{},"64":{}},"component":{}}],["press",{"_index":1509,"title":{},"name":{},"text":{"16":{}},"component":{}}],["pretti",{"_index":1992,"title":{},"name":{},"text":{"38":{}},"component":{}}],["prettifi",{"_index":2380,"title":{},"name":{},"text":{"41":{}},"component":{}}],["prev_block_hash",{"_index":2346,"title":{},"name":{},"text":{"41":{}},"component":{}}],["prev_block_numb",{"_index":2345,"title":{},"name":{},"text":{"41":{}},"component":{}}],["prev_own",{"_index":1374,"title":{},"name":{},"text":{"13":{}},"component":{}}],["prevent",{"_index":751,"title":{},"name":{},"text":{"6":{},"7":{},"13":{},"16":{},"39":{},"47":{},"53":{},"58":{},"61":{},"62":{},"64":{},"65":{},"73":{},"77":{}},"component":{}}],["previou",{"_index":1274,"title":{},"name":{},"text":{"11":{},"13":{},"27":{},"29":{},"34":{},"35":{},"38":{},"39":{},"41":{},"53":{},"60":{},"62":{},"65":{},"72":{},"75":{}},"component":{}}],["previous",{"_index":734,"title":{},"name":{},"text":{"6":{},"7":{},"8":{},"11":{},"12":{},"13":{},"17":{},"35":{},"37":{},"39":{},"54":{},"64":{},"68":{},"72":{},"74":{},"80":{}},"component":{}}],["price",{"_index":2179,"title":{"41-17":{},"61-8":{},"61-11":{}},"name":{},"text":{"39":{},"41":{},"59":{},"60":{},"61":{},"67":{},"77":{}},"component":{}}],["price_in_fri",{"_index":2403,"title":{},"name":{},"text":{"41":{}},"component":{}}],["price_in_wei",{"_index":2402,"title":{},"name":{},"text":{"41":{}},"component":{}}],["primari",{"_index":417,"title":{},"name":{},"text":{"4":{},"7":{},"8":{},"14":{},"15":{},"34":{},"38":{},"39":{}},"component":{}}],["primarili",{"_index":933,"title":{},"name":{},"text":{"8":{},"39":{},"64":{}},"component":{}}],["prime",{"_index":1195,"title":{"10-13":{}},"name":{},"text":{"10":{},"13":{},"51":{}},"component":{}}],["print",{"_index":1466,"title":{},"name":{},"text":{"14":{},"17":{},"38":{},"87":{}},"component":{}}],["prior",{"_index":766,"title":{},"name":{},"text":{"6":{},"13":{},"29":{},"61":{},"66":{}},"component":{}}],["privaci",{"_index":1404,"title":{},"name":{},"text":{"13":{},"16":{}},"component":{}}],["privat",{"_index":684,"title":{"16-5":{}},"name":{},"text":{"4":{},"7":{},"9":{},"13":{},"16":{},"17":{},"56":{},"83":{}},"component":{}}],["privatemethod",{"_index":1388,"title":{},"name":{},"text":{"13":{}},"component":{}}],["privatemethodstrait",{"_index":1389,"title":{},"name":{},"text":{"13":{}},"component":{}}],["problem",{"_index":3336,"title":{},"name":{},"text":{"68":{}},"component":{}}],["proce",{"_index":883,"title":{},"name":{},"text":{"7":{},"13":{},"57":{},"60":{},"65":{},"66":{},"72":{}},"component":{}}],["procedur",{"_index":55,"title":{},"name":{},"text":{"1":{},"14":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"31":{},"32":{},"36":{},"45":{},"58":{},"76":{}},"component":{}}],["proceed",{"_index":1504,"title":{},"name":{},"text":{"16":{}},"component":{}}],["process",{"_index":407,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"8":{},"11":{},"12":{},"13":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"24":{},"27":{},"31":{},"32":{},"36":{},"38":{},"39":{},"47":{},"56":{},"58":{},"61":{},"64":{},"67":{},"71":{}},"component":{}}],["processmessag",{"_index":3092,"title":{},"name":{},"text":{"62":{}},"component":{}}],["procur",{"_index":3408,"title":{},"name":{},"text":{"71":{}},"component":{}}],["produc",{"_index":3151,"title":{},"name":{},"text":{"64":{},"70":{},"89":{}},"component":{}}],["product",{"_index":765,"title":{},"name":{},"text":{"6":{},"12":{},"47":{},"64":{},"82":{}},"component":{}}],["profession",{"_index":713,"title":{},"name":{},"text":{"4":{}},"component":{}}],["profil",{"_index":2074,"title":{"89-7":{}},"name":{},"text":{"38":{},"88":{},"89":{}},"component":{}}],["program",{"_index":107,"title":{},"name":{},"text":{"1":{},"2":{},"4":{},"7":{},"8":{},"10":{},"11":{},"41":{},"47":{},"56":{},"61":{},"62":{},"64":{},"68":{},"69":{},"70":{},"74":{},"78":{},"80":{},"85":{}},"component":{}}],["programm",{"_index":46,"title":{},"name":{},"text":{"1":{},"56":{}},"component":{}}],["program’",{"_index":216,"title":{},"name":{},"text":{"1":{},"10":{}},"component":{}}],["progress",{"_index":648,"title":{},"name":{},"text":{"4":{}},"component":{}}],["project",{"_index":903,"title":{},"name":{},"text":{"7":{},"13":{},"43":{},"81":{},"88":{},"89":{}},"component":{}}],["prometheu",{"_index":1938,"title":{},"name":{},"text":{"38":{}},"component":{}}],["promin",{"_index":3684,"title":{},"name":{},"text":{"84":{}},"component":{}}],["promis",{"_index":717,"title":{},"name":{},"text":{"4":{}},"component":{}}],["promot",{"_index":1673,"title":{},"name":{},"text":{"26":{}},"component":{}}],["prompt",{"_index":1398,"title":{},"name":{},"text":{"13":{},"16":{}},"component":{}}],["proof",{"_index":185,"title":{"7-2":{},"64-9":{}},"name":{},"text":{"1":{},"2":{},"4":{},"7":{},"8":{},"39":{},"41":{},"60":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"68":{},"71":{},"75":{}},"component":{}}],["proof’",{"_index":3645,"title":{},"name":{},"text":{"80":{}},"component":{}}],["propag",{"_index":755,"title":{},"name":{},"text":{"6":{}},"component":{}}],["proper",{"_index":1681,"title":{},"name":{},"text":{"26":{}},"component":{}}],["properli",{"_index":633,"title":{},"name":{},"text":{"4":{},"7":{},"11":{},"12":{},"15":{},"39":{},"78":{}},"component":{}}],["properti",{"_index":214,"title":{},"name":{},"text":{"1":{},"41":{},"61":{},"68":{}},"component":{}}],["proport",{"_index":2755,"title":{},"name":{},"text":{"53":{}},"component":{}}],["propos",{"_index":470,"title":{},"name":{},"text":{"4":{},"26":{},"41":{},"54":{},"56":{},"58":{}},"component":{}}],["prospect",{"_index":3411,"title":{},"name":{},"text":{"71":{}},"component":{}}],["protect",{"_index":2747,"title":{"54-2":{}},"name":{},"text":{"53":{},"54":{},"56":{},"62":{}},"component":{}}],["proto",{"_index":1278,"title":{},"name":{},"text":{"11":{},"14":{}},"component":{}}],["protocol",{"_index":44,"title":{"22":{},"26-1":{}},"name":{},"text":{"1":{},"4":{},"7":{},"18":{},"21":{},"22":{},"26":{},"41":{},"42":{},"52":{},"53":{},"54":{},"56":{},"59":{},"62":{},"64":{},"67":{}},"component":{}}],["protocol_vers",{"_index":2842,"title":{},"name":{},"text":{"59":{}},"component":{}}],["protocol’",{"_index":1591,"title":{},"name":{},"text":{"18":{},"26":{}},"component":{}}],["prototyp",{"_index":3668,"title":{},"name":{},"text":{"82":{}},"component":{}}],["provabl",{"_index":217,"title":{},"name":{},"text":{"1":{},"4":{},"64":{},"68":{},"85":{}},"component":{}}],["prove",{"_index":117,"title":{"35-6":{},"35-9":{}},"name":{},"text":{"1":{},"4":{},"7":{},"35":{},"50":{},"60":{},"61":{},"62":{},"64":{},"65":{},"68":{}},"component":{}}],["proven",{"_index":268,"title":{},"name":{},"text":{"1":{},"60":{},"68":{}},"component":{}}],["prover",{"_index":20,"title":{"7":{},"1-15":{},"64-4":{},"64-5":{}},"name":{"7":{}},"text":{"1":{},"7":{},"35":{},"41":{},"49":{},"57":{},"61":{},"62":{},"64":{},"65":{},"66":{},"68":{},"71":{}},"component":{}}],["provers—work",{"_index":3173,"title":{},"name":{},"text":{"64":{}},"component":{}}],["prover’",{"_index":887,"title":{},"name":{},"text":{"7":{}},"component":{}}],["provid",{"_index":163,"title":{"43":{},"11-7":{}},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"9":{},"11":{},"12":{},"13":{},"16":{},"23":{},"29":{},"34":{},"35":{},"38":{},"39":{},"41":{},"42":{},"43":{},"48":{},"54":{},"64":{},"65":{},"71":{},"73":{},"80":{},"90":{}},"component":{}}],["provis",{"_index":487,"title":{},"name":{},"text":{"4":{},"6":{}},"component":{}}],["proxi",{"_index":945,"title":{"39-65":{}},"name":{},"text":{"8":{},"32":{},"36":{},"39":{}},"component":{}}],["pscott",{"_index":2252,"title":{},"name":{},"text":{"39":{}},"component":{}}],["pseudo",{"_index":3310,"title":{},"name":{},"text":{"67":{}},"component":{}}],["pub",{"_index":3706,"title":{},"name":{},"text":{"86":{}},"component":{}}],["public",{"_index":682,"title":{},"name":{},"text":{"4":{},"7":{},"13":{},"16":{},"17":{},"42":{},"53":{},"56":{},"67":{},"80":{}},"component":{}}],["publish",{"_index":434,"title":{},"name":{},"text":{"4":{},"7":{},"39":{},"60":{},"61":{}},"component":{}}],["pull",{"_index":1959,"title":{},"name":{},"text":{"38":{},"80":{},"85":{}},"component":{}}],["pure",{"_index":1839,"title":{},"name":{},"text":{"34":{},"63":{}},"component":{}}],["purpos",{"_index":290,"title":{"4-2":{},"71-1":{}},"name":{},"text":{"1":{},"4":{},"7":{},"9":{},"11":{},"16":{},"39":{},"65":{},"83":{}},"component":{}}],["pursuant",{"_index":614,"title":{},"name":{},"text":{"4":{}},"component":{}}],["put",{"_index":202,"title":{},"name":{},"text":{"1":{},"41":{}},"component":{}}],["pypi",{"_index":3700,"title":{},"name":{},"text":{"86":{}},"component":{}}],["python",{"_index":2117,"title":{"39-44":{}},"name":{},"text":{"39":{},"50":{},"60":{},"67":{}},"component":{}}],["python3.7",{"_index":2500,"title":{},"name":{},"text":{"41":{}},"component":{}}],["python3.9",{"_index":2501,"title":{},"name":{},"text":{"41":{}},"component":{}}],["q_1",{"_index":2986,"title":{},"name":{},"text":{"61":{}},"component":{}}],["q_i",{"_index":2974,"title":{},"name":{},"text":{"61":{}},"component":{}}],["q_i\\right",{"_index":2996,"title":{},"name":{},"text":{"61":{}},"component":{}}],["q_t",{"_index":2987,"title":{},"name":{},"text":{"61":{}},"component":{}}],["quad",{"_index":2878,"title":{},"name":{},"text":{"59":{},"61":{}},"component":{}}],["qualiti",{"_index":2430,"title":{},"name":{},"text":{"41":{}},"component":{}}],["quantum",{"_index":234,"title":{},"name":{},"text":{"1":{}},"component":{}}],["queri",{"_index":73,"title":{},"name":{},"text":{"1":{},"6":{},"9":{},"15":{},"37":{},"38":{},"39":{},"41":{},"58":{},"64":{},"89":{}},"component":{}}],["question",{"_index":2759,"title":{},"name":{},"text":{"53":{}},"component":{}}],["quick",{"_index":293,"title":{"2-2":{}},"name":{},"text":{"90":{}},"component":{}}],["quicker",{"_index":1403,"title":{},"name":{},"text":{"13":{}},"component":{}}],["quickli",{"_index":2637,"title":{},"name":{},"text":{"49":{}},"component":{}}],["quicknod",{"_index":2549,"title":{},"name":{},"text":{"42":{}},"component":{}}],["quit",{"_index":2286,"title":{},"name":{},"text":{"39":{}},"component":{}}],["quorum",{"_index":1749,"title":{},"name":{},"text":{"29":{}},"component":{}}],["quota",{"_index":1869,"title":{},"name":{},"text":{"35":{}},"component":{}}],["r",{"_index":1732,"title":{},"name":{},"text":{"29":{},"41":{},"59":{},"65":{}},"component":{}}],["r=h_{ped",{"_index":3243,"title":{},"name":{},"text":{"65":{}},"component":{}}],["race",{"_index":692,"title":{},"name":{},"text":{"4":{}},"component":{}}],["rais",{"_index":2757,"title":{},"name":{},"text":{"53":{},"61":{}},"component":{}}],["random",{"_index":1141,"title":{},"name":{},"text":{"9":{},"67":{},"73":{}},"component":{}}],["rang",{"_index":92,"title":{"50-1":{}},"name":{},"text":{"1":{},"3":{},"8":{},"39":{},"61":{},"65":{},"69":{},"80":{}},"component":{}}],["range_check96",{"_index":2355,"title":{},"name":{},"text":{"41":{}},"component":{}}],["rapidli",{"_index":2192,"title":{},"name":{},"text":{"39":{},"64":{}},"component":{}}],["rate",{"_index":850,"title":{"25-3":{}},"name":{},"text":{"7":{},"18":{},"21":{},"25":{},"26":{}},"component":{}}],["ratio",{"_index":2475,"title":{},"name":{},"text":{"41":{}},"component":{}}],["rational",{"_index":1678,"title":{},"name":{},"text":{"26":{}},"component":{}}],["raw",{"_index":2919,"title":{},"name":{},"text":{"60":{},"72":{}},"component":{}}],["rc0",{"_index":2165,"title":{},"name":{},"text":{"39":{},"41":{}},"component":{}}],["rc1",{"_index":2078,"title":{},"name":{},"text":{"38":{}},"component":{}}],["re",{"_index":2273,"title":{},"name":{},"text":{"39":{},"41":{},"45":{},"64":{}},"component":{}}],["reach",{"_index":484,"title":{},"name":{},"text":{"4":{},"7":{},"61":{}},"component":{}}],["react",{"_index":3664,"title":{"84-1":{}},"name":{},"text":{"82":{},"84":{}},"component":{}}],["read",{"_index":715,"title":{},"name":{},"text":{"4":{},"9":{},"13":{},"15":{},"38":{},"39":{},"47":{},"75":{},"80":{},"86":{},"88":{}},"component":{}}],["read/writ",{"_index":1877,"title":{},"name":{},"text":{"36":{},"47":{}},"component":{}}],["readabl",{"_index":1470,"title":{},"name":{},"text":{"14":{},"38":{}},"component":{}}],["readi",{"_index":1254,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"53":{}},"component":{}}],["readm",{"_index":2246,"title":{},"name":{},"text":{"39":{},"42":{}},"component":{}}],["real",{"_index":3140,"title":{},"name":{},"text":{"63":{},"64":{},"83":{}},"component":{}}],["realiti",{"_index":3198,"title":{},"name":{},"text":{"64":{}},"component":{}}],["realli",{"_index":1626,"title":{},"name":{},"text":{"22":{}},"component":{}}],["reason",{"_index":1772,"title":{},"name":{},"text":{"31":{},"34":{},"59":{}},"component":{}}],["rebat",{"_index":548,"title":{},"name":{},"text":{"4":{}},"component":{}}],["recalcul",{"_index":1574,"title":{},"name":{},"text":{"18":{},"24":{}},"component":{}}],["receipt",{"_index":1176,"title":{"59-3":{},"66-4":{}},"name":{},"text":{"9":{},"13":{},"38":{},"39":{},"41":{},"59":{},"66":{},"79":{}},"component":{}}],["receipts_commit",{"_index":2840,"title":{},"name":{},"text":{"59":{}},"component":{}}],["receipt’",{"_index":2899,"title":{},"name":{},"text":{"59":{}},"component":{}}],["receiv",{"_index":182,"title":{},"name":{},"text":{"1":{},"4":{},"6":{},"7":{},"9":{},"13":{},"16":{},"20":{},"30":{},"31":{},"34":{},"35":{},"39":{},"53":{},"55":{},"57":{},"61":{},"62":{},"63":{},"64":{},"66":{},"80":{}},"component":{}}],["receiver_interface.cairo",{"_index":1861,"title":{},"name":{},"text":{"34":{}},"component":{}}],["recent",{"_index":2758,"title":{},"name":{},"text":{"53":{},"61":{},"76":{}},"component":{}}],["recipi",{"_index":1171,"title":{},"name":{},"text":{"9":{},"30":{},"32":{},"34":{},"36":{},"62":{},"63":{},"72":{}},"component":{}}],["recipients’",{"_index":1860,"title":{},"name":{},"text":{"34":{}},"component":{}}],["recipient’",{"_index":1788,"title":{},"name":{},"text":{"32":{},"34":{},"35":{},"36":{},"62":{},"80":{}},"component":{}}],["reclaim",{"_index":1780,"title":{},"name":{},"text":{"31":{},"34":{}},"component":{}}],["recogn",{"_index":1834,"title":{},"name":{},"text":{"34":{},"71":{}},"component":{}}],["recognit",{"_index":2790,"title":{},"name":{},"text":{"56":{}},"component":{}}],["recommend",{"_index":696,"title":{},"name":{},"text":{"4":{},"13":{},"14":{},"38":{},"39":{},"42":{},"88":{}},"component":{}}],["recompil",{"_index":3405,"title":{},"name":{},"text":{"71":{}},"component":{}}],["reconstruct",{"_index":2909,"title":{},"name":{},"text":{"60":{}},"component":{}}],["record",{"_index":152,"title":{},"name":{},"text":{"1":{},"7":{},"18":{},"21":{},"22":{},"34":{},"35":{},"61":{},"62":{},"64":{}},"component":{}}],["recov",{"_index":1767,"title":{},"name":{},"text":{"30":{},"34":{},"60":{}},"component":{}}],["recoveri",{"_index":2787,"title":{},"name":{},"text":{"56":{}},"component":{}}],["recurs",{"_index":812,"title":{"7-2":{}},"name":{},"text":{"7":{},"41":{},"64":{},"72":{}},"component":{}}],["reddio",{"_index":2550,"title":{},"name":{},"text":{"42":{}},"component":{}}],["redeploy",{"_index":1537,"title":{},"name":{},"text":{"17":{},"58":{}},"component":{}}],["reduc",{"_index":455,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"11":{},"38":{},"41":{},"47":{}},"component":{}}],["reduct",{"_index":2039,"title":{},"name":{},"text":{"38":{},"41":{}},"component":{}}],["ref",{"_index":1359,"title":{},"name":{"48":{}},"text":{"13":{},"58":{},"72":{},"76":{}},"component":{}}],["refactor",{"_index":1955,"title":{},"name":{},"text":{"38":{}},"component":{}}],["refer",{"_index":36,"title":{"9":{},"10":{},"34":{},"53":{},"63":{},"34-1":{},"34-134":{},"53-6":{},"63-1":{},"63-66":{}},"name":{"34":{},"63":{}},"text":{"1":{},"3":{},"7":{},"8":{},"9":{},"13":{},"18":{},"25":{},"28":{},"29":{},"31":{},"34":{},"35":{},"37":{},"41":{},"45":{},"50":{},"51":{},"54":{},"59":{},"61":{},"67":{},"68":{},"69":{},"78":{}},"component":{}}],["reflect",{"_index":1750,"title":{},"name":{},"text":{"29":{}},"component":{}}],["refund",{"_index":3065,"title":{},"name":{},"text":{"61":{},"63":{}},"component":{}}],["regardless",{"_index":220,"title":{},"name":{},"text":{"1":{},"7":{},"35":{},"68":{}},"component":{}}],["regenesi",{"_index":2592,"title":{},"name":{},"text":{"45":{}},"component":{}}],["regist",{"_index":190,"title":{},"name":{},"text":{"1":{},"7":{},"8":{},"11":{},"12":{},"34":{},"71":{}},"component":{}}],["registri",{"_index":899,"title":{"29-1":{}},"name":{},"text":{"7":{},"8":{},"29":{},"34":{},"88":{}},"component":{}}],["regular",{"_index":2407,"title":{},"name":{},"text":{"41":{},"47":{},"54":{},"62":{},"65":{},"72":{}},"component":{}}],["reject",{"_index":1186,"title":{},"name":{},"text":{"9":{},"13":{},"39":{},"41":{},"53":{},"56":{},"66":{}},"component":{}}],["rel",{"_index":1174,"title":{},"name":{},"text":{"9":{},"37":{},"41":{},"61":{}},"component":{}}],["relat",{"_index":542,"title":{},"name":{},"text":{"4":{},"8":{},"38":{},"39":{},"41":{},"47":{},"61":{},"62":{}},"component":{}}],["relationship",{"_index":772,"title":{},"name":{},"text":{"6":{},"64":{}},"component":{}}],["relax",{"_index":2042,"title":{},"name":{},"text":{"38":{},"72":{}},"component":{}}],["relay",{"_index":762,"title":{},"name":{},"text":{"6":{}},"component":{}}],["releas",{"_index":295,"title":{"38":{},"39":{},"41":{},"2-4":{},"39-70":{}},"name":{},"text":{"18":{},"37":{},"38":{},"39":{},"40":{},"41":{},"67":{},"76":{}},"component":{}}],["relev",{"_index":391,"title":{"4-1":{},"81-2":{},"82-2":{},"82-4":{},"83-2":{},"83-4":{},"84-2":{},"84-4":{},"84-6":{},"88-2":{},"88-4":{},"88-6":{},"89-2":{},"89-4":{},"89-6":{},"89-8":{},"89-10":{},"89-12":{},"90-1":{}},"name":{},"text":{"7":{},"8":{},"9":{},"24":{},"26":{},"34":{},"35":{},"36":{},"42":{},"61":{},"62":{},"72":{}},"component":{}}],["reli",{"_index":622,"title":{"64-8":{}},"name":{},"text":{"4":{},"6":{},"7":{},"8":{},"39":{},"64":{}},"component":{}}],["reliabl",{"_index":1952,"title":{},"name":{},"text":{"38":{},"64":{}},"component":{}}],["relianc",{"_index":918,"title":{},"name":{},"text":{"7":{}},"component":{}}],["reliev",{"_index":1603,"title":{},"name":{},"text":{"20":{}},"component":{}}],["remain",{"_index":616,"title":{},"name":{},"text":{"4":{},"8":{},"13":{},"18":{},"41":{},"47":{},"60":{},"61":{},"78":{}},"component":{}}],["rememb",{"_index":1314,"title":{},"name":{},"text":{"12":{},"13":{},"58":{}},"component":{}}],["remix",{"_index":1330,"title":{"13":{},"13-1":{},"88-5":{}},"name":{"13":{}},"text":{"13":{},"88":{}},"component":{}}],["remix’",{"_index":1406,"title":{},"name":{},"text":{"13":{}},"component":{}}],["remot",{"_index":54,"title":{},"name":{},"text":{"1":{},"13":{}},"component":{}}],["remov",{"_index":1344,"title":{"37":{},"37-2":{},"38-44":{},"39-42":{}},"name":{},"text":{"13":{},"34":{},"35":{},"37":{},"38":{},"39":{},"41":{},"46":{},"47":{},"67":{},"88":{}},"component":{}}],["renam",{"_index":1345,"title":{},"name":{},"text":{"13":{},"38":{},"39":{},"41":{}},"component":{}}],["render",{"_index":3109,"title":{},"name":{},"text":{"62":{}},"component":{}}],["reorg",{"_index":2032,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["reorgan",{"_index":2033,"title":{},"name":{},"text":{"38":{}},"component":{}}],["repeat",{"_index":369,"title":{},"name":{},"text":{"3":{},"7":{},"61":{},"66":{}},"component":{}}],["repeatedli",{"_index":1243,"title":{},"name":{},"text":{"11":{},"62":{}},"component":{}}],["replac",{"_index":1836,"title":{},"name":{},"text":{"34":{},"37":{},"41":{},"46":{},"47":{},"59":{},"60":{},"67":{},"68":{},"76":{},"80":{}},"component":{}}],["replace_class",{"_index":2470,"title":{"80-47":{}},"name":{},"text":{"41":{},"61":{},"80":{}},"component":{}}],["replace_class_syscal",{"_index":3647,"title":{},"name":{},"text":{"80":{}},"component":{}}],["replay",{"_index":2764,"title":{"54-2":{},"64-7":{}},"name":{},"text":{"54":{},"56":{},"64":{},"73":{},"77":{}},"component":{}}],["repo",{"_index":1275,"title":{},"name":{},"text":{"11":{},"60":{}},"component":{}}],["report",{"_index":2421,"title":{},"name":{},"text":{"41":{},"88":{}},"component":{}}],["repositori",{"_index":1457,"title":{},"name":{},"text":{"14":{},"18":{},"26":{},"35":{},"38":{},"39":{},"50":{},"59":{},"69":{},"72":{},"73":{},"88":{}},"component":{}}],["repres",{"_index":75,"title":{},"name":{},"text":{"1":{},"4":{},"9":{},"13":{},"21":{},"25":{},"29":{},"56":{},"61":{},"65":{},"67":{},"70":{},"76":{},"78":{}},"component":{}}],["represent",{"_index":211,"title":{},"name":{},"text":{"1":{},"4":{},"8":{},"41":{},"44":{},"65":{},"67":{},"68":{},"70":{},"71":{},"72":{},"78":{}},"component":{}}],["reproduc",{"_index":2819,"title":{},"name":{},"text":{"58":{},"65":{}},"component":{}}],["request",{"_index":775,"title":{"89-3":{}},"name":{},"text":{"6":{},"7":{},"9":{},"12":{},"31":{},"34":{},"35":{},"38":{},"39":{},"63":{},"68":{},"80":{},"85":{},"89":{}},"component":{}}],["requests.@joshklop",{"_index":1978,"title":{},"name":{},"text":{"38":{}},"component":{}}],["requir",{"_index":465,"title":{"39-44":{}},"name":{},"text":{"4":{},"6":{},"7":{},"11":{},"12":{},"13":{},"14":{},"16":{},"20":{},"21":{},"22":{},"29":{},"32":{},"36":{},"37":{},"38":{},"39":{},"41":{},"49":{},"53":{},"55":{},"56":{},"58":{},"61":{},"63":{},"64":{},"68":{},"71":{},"74":{},"76":{},"77":{},"80":{},"85":{}},"component":{}}],["research",{"_index":538,"title":{},"name":{},"text":{"4":{}},"component":{}}],["reserv",{"_index":555,"title":{},"name":{},"text":{"4":{},"41":{},"58":{},"65":{}},"component":{}}],["resid",{"_index":1025,"title":{},"name":{},"text":{"8":{},"35":{}},"component":{}}],["resili",{"_index":445,"title":{},"name":{},"text":{"4":{},"64":{}},"component":{}}],["resist",{"_index":450,"title":{},"name":{},"text":{"4":{}},"component":{}}],["resolv",{"_index":1216,"title":{},"name":{},"text":{"10":{},"12":{},"29":{},"38":{},"41":{}},"component":{}}],["resourc",{"_index":227,"title":{"2-5":{},"28-1":{},"29-6":{},"30-1":{},"31-1":{},"34-69":{},"34-78":{},"35-11":{},"41-9":{},"41-23":{},"55-3":{},"62-10":{},"74-4":{},"78-10":{},"79-4":{}},"name":{},"text":{"1":{},"4":{},"7":{},"8":{},"33":{},"38":{},"41":{},"50":{},"53":{},"60":{},"61":{},"64":{},"66":{},"67":{},"73":{},"77":{},"88":{}},"component":{}}],["resource_bound",{"_index":3280,"title":{},"name":{},"text":{"67":{},"77":{}},"component":{}}],["resourcebound",{"_index":3282,"title":{"77-4":{}},"name":{},"text":{"67":{},"77":{}},"component":{}}],["resp",{"_index":1418,"title":{},"name":{},"text":{"13":{}},"component":{}}],["respect",{"_index":731,"title":{},"name":{},"text":{"4":{},"19":{},"24":{},"55":{},"65":{},"67":{},"75":{},"79":{}},"component":{}}],["respond",{"_index":1630,"title":{},"name":{},"text":{"23":{}},"component":{}}],["respons",{"_index":776,"title":{},"name":{},"text":{"6":{},"7":{},"9":{},"13":{},"18":{},"20":{},"26":{},"29":{},"41":{},"67":{},"80":{}},"component":{}}],["rest",{"_index":3467,"title":{},"name":{},"text":{"72":{}},"component":{}}],["restart",{"_index":860,"title":{},"name":{},"text":{"7":{},"14":{}},"component":{}}],["restor",{"_index":2198,"title":{},"name":{},"text":{"39":{}},"component":{}}],["restrict",{"_index":2443,"title":{"55-2":{}},"name":{},"text":{"41":{},"53":{},"55":{}},"component":{}}],["restructur",{"_index":1995,"title":{},"name":{},"text":{"38":{}},"component":{}}],["result",{"_index":115,"title":{"11-9":{},"12-5":{}},"name":{},"text":{"1":{},"4":{},"7":{},"11":{},"13":{},"17":{},"29":{},"38":{},"39":{},"41":{},"53":{},"58":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"68":{},"70":{},"71":{},"72":{},"78":{},"80":{}},"component":{}}],["resync",{"_index":2055,"title":{},"name":{},"text":{"38":{}},"component":{}}],["retain",{"_index":600,"title":{},"name":{},"text":{"4":{},"45":{}},"component":{}}],["reth",{"_index":1731,"title":{},"name":{},"text":{"29":{}},"component":{}}],["retriev",{"_index":194,"title":{},"name":{},"text":{"1":{},"11":{},"12":{},"13":{},"34":{},"56":{},"65":{},"67":{}},"component":{}}],["return",{"_index":1118,"title":{"34-7":{},"34-15":{},"34-23":{},"34-32":{},"34-40":{},"34-49":{},"34-58":{},"34-66":{},"34-75":{},"34-84":{},"34-92":{},"34-100":{},"34-108":{},"34-116":{},"34-124":{},"34-131":{},"34-138":{},"34-143":{},"34-148":{},"34-153":{},"34-158":{},"34-163":{},"34-168":{},"34-173":{},"63-6":{},"63-13":{},"63-20":{},"63-26":{},"63-32":{},"63-38":{},"63-44":{},"63-50":{},"63-56":{},"63-63":{},"80-5":{},"80-12":{},"80-19":{},"80-25":{},"80-31":{},"80-38":{},"80-44":{},"80-51":{},"80-57":{},"80-64":{}},"name":{},"text":{"9":{},"11":{},"15":{},"18":{},"22":{},"30":{},"34":{},"38":{},"39":{},"41":{},"53":{},"55":{},"57":{},"58":{},"62":{},"63":{},"68":{},"75":{},"80":{}},"component":{}}],["reusabl",{"_index":1242,"title":{},"name":{},"text":{"11":{}},"component":{}}],["revers",{"_index":3184,"title":{},"name":{},"text":{"64":{},"66":{}},"component":{}}],["revert",{"_index":223,"title":{"53-5":{},"66-3":{},"68-3":{}},"name":{},"text":{"1":{},"34":{},"53":{},"54":{},"59":{},"63":{},"66":{},"68":{},"80":{}},"component":{}}],["revert_reason",{"_index":2885,"title":{},"name":{},"text":{"59":{}},"component":{}}],["review",{"_index":316,"title":{},"name":{},"text":{"2":{},"13":{}},"component":{}}],["revis",{"_index":1994,"title":{},"name":{},"text":{"38":{},"47":{}},"component":{}}],["reviv",{"_index":2381,"title":{},"name":{},"text":{"41":{}},"component":{}}],["revolv",{"_index":3193,"title":{},"name":{},"text":{"64":{}},"component":{}}],["reward",{"_index":435,"title":{"19":{},"18-4":{},"25-5":{},"25-7":{},"26-4":{}},"name":{"19":{}},"text":{"4":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{}},"component":{}}],["reward_address",{"_index":1604,"title":{},"name":{},"text":{"20":{},"21":{},"25":{}},"component":{}}],["rich",{"_index":3726,"title":{},"name":{},"text":{"88":{}},"component":{}}],["richer",{"_index":2768,"title":{},"name":{},"text":{"54":{}},"component":{}}],["right",{"_index":507,"title":{},"name":{},"text":{"4":{},"61":{},"65":{}},"component":{}}],["right\\neq",{"_index":3241,"title":{},"name":{},"text":{"65":{}},"component":{}}],["right]_0",{"_index":2681,"title":{},"name":{},"text":{"50":{}},"component":{}}],["rightarrow",{"_index":2643,"title":{},"name":{},"text":{"50":{}},"component":{}}],["rise",{"_index":847,"title":{},"name":{},"text":{"7":{}},"component":{}}],["risk",{"_index":394,"title":{"4-4":{}},"name":{},"text":{"4":{},"29":{},"62":{}},"component":{}}],["roadmap",{"_index":2297,"title":{"40-1":{}},"name":{},"text":{"40":{},"41":{},"64":{},"68":{}},"component":{}}],["robust",{"_index":801,"title":{},"name":{},"text":{"6":{},"13":{},"64":{}},"component":{}}],["rocket",{"_index":1730,"title":{},"name":{},"text":{"29":{}},"component":{}}],["role",{"_index":736,"title":{},"name":{},"text":{"6":{},"7":{},"18":{},"54":{},"64":{},"71":{}},"component":{}}],["roll",{"_index":3153,"title":{},"name":{},"text":{"64":{}},"component":{}}],["rollup",{"_index":251,"title":{},"name":{},"text":{"1":{},"2":{},"8":{},"60":{},"64":{},"68":{}},"component":{}}],["room",{"_index":3373,"title":{},"name":{},"text":{"68":{}},"component":{}}],["root",{"_index":291,"title":{},"name":{},"text":{"13":{},"18":{},"38":{},"39":{},"41":{},"59":{},"64":{},"65":{}},"component":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{}}}],["root/juno:/var/lib/juno",{"_index":2000,"title":{},"name":{},"text":{"38":{}},"component":{}}],["roughli",{"_index":940,"title":{},"name":{},"text":{"8":{},"61":{}},"component":{}}],["round",{"_index":2397,"title":{},"name":{},"text":{"41":{},"53":{},"77":{},"80":{}},"component":{}}],["rout",{"_index":930,"title":{},"name":{},"text":{"8":{},"39":{},"46":{}},"component":{}}],["rpc",{"_index":21,"title":{"1-16":{},"11-7":{},"39-43":{},"39-71":{},"41-6":{},"41-14":{},"41-15":{},"41-16":{},"89-3":{}},"name":{},"text":{"1":{},"11":{},"16":{},"17":{},"37":{},"38":{},"39":{},"41":{},"42":{},"62":{},"64":{},"66":{},"67":{},"72":{},"86":{},"89":{}},"component":{}}],["rpc.cor",{"_index":2186,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc.msgtol1",{"_index":2023,"title":{},"name":{},"text":{"38":{}},"component":{}}],["rpc.websocket",{"_index":2169,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc.websocket.capac",{"_index":2170,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc/pathfind",{"_index":2268,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc/pathfinder/v0.1",{"_index":2285,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc/pathfinder/v0.1/pathfinder_getproof",{"_index":2255,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc/v0.1",{"_index":2235,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc/v0.2",{"_index":2237,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc/v0.2/pathfinder_getproof",{"_index":2256,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc/v0.3",{"_index":2221,"title":{},"name":{},"text":{"39":{}},"component":{}}],["rpc/vx_i",{"_index":2539,"title":{},"name":{},"text":{"42":{}},"component":{}}],["rpc=https://starknet",{"_index":1287,"title":{},"name":{},"text":{"11":{}},"component":{}}],["rs",{"_index":1318,"title":{"83-1":{}},"name":{},"text":{"12":{},"83":{},"86":{},"89":{}},"component":{}}],["rule",{"_index":158,"title":{},"name":{},"text":{"1":{},"6":{},"65":{}},"component":{}}],["run",{"_index":137,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"11":{},"12":{},"13":{},"14":{},"16":{},"21":{},"26":{},"35":{},"38":{},"39":{},"41":{},"53":{},"55":{},"57":{},"64":{},"66":{},"68":{},"72":{},"80":{},"83":{},"87":{}},"component":{}}],["runner",{"_index":886,"title":{},"name":{},"text":{"7":{},"42":{}},"component":{}}],["rust",{"_index":791,"title":{},"name":{},"text":{"6":{},"38":{},"39":{},"41":{},"42":{},"83":{},"88":{},"89":{}},"component":{}}],["s",{"_index":1284,"title":{},"name":{},"text":{"11":{},"26":{},"65":{}},"component":{}}],["s_1+1",{"_index":2707,"title":{},"name":{},"text":{"50":{}},"component":{}}],["s_1+a_1",{"_index":2700,"title":{},"name":{},"text":{"50":{}},"component":{}}],["s_2",{"_index":2694,"title":{},"name":{},"text":{"50":{}},"component":{}}],["s_2+1",{"_index":2705,"title":{},"name":{},"text":{"50":{}},"component":{}}],["s_2+a_2",{"_index":2701,"title":{},"name":{},"text":{"50":{}},"component":{}}],["s_3",{"_index":2695,"title":{},"name":{},"text":{"50":{}},"component":{}}],["safe",{"_index":2123,"title":{"68-4":{}},"name":{},"text":{"39":{},"41":{},"68":{}},"component":{}}],["safeguard",{"_index":3034,"title":{},"name":{},"text":{"61":{}},"component":{}}],["salt",{"_index":1139,"title":{},"name":{},"text":{"9":{},"12":{},"53":{},"58":{},"67":{},"73":{},"77":{},"80":{}},"component":{}}],["salt=0",{"_index":2821,"title":{},"name":{},"text":{"58":{}},"component":{}}],["same",{"_index":1131,"title":{},"name":{},"text":{"9":{},"11":{},"12":{},"17":{},"25":{},"39":{},"41":{},"45":{},"53":{},"60":{},"61":{},"62":{},"64":{},"65":{},"66":{},"68":{},"71":{},"72":{},"78":{},"80":{}},"component":{}}],["sampl",{"_index":1059,"title":{},"name":{},"text":{"8":{},"11":{},"39":{},"41":{},"61":{}},"component":{}}],["satisfactorili",{"_index":649,"title":{},"name":{},"text":{"4":{}},"component":{}}],["satisfi",{"_index":287,"title":{},"name":{},"text":{"1":{},"68":{}},"component":{}}],["satur",{"_index":2152,"title":{},"name":{},"text":{"39":{}},"component":{}}],["save",{"_index":818,"title":{},"name":{},"text":{"7":{},"11":{},"16":{}},"component":{}}],["scaffold",{"_index":3662,"title":{"82-1":{},"82-3":{}},"name":{},"text":{"82":{}},"component":{}}],["scalabl",{"_index":793,"title":{},"name":{},"text":{"6":{},"7":{},"47":{},"64":{}},"component":{}}],["scalar",{"_index":2521,"title":{},"name":{},"text":{"41":{}},"component":{}}],["scale",{"_index":166,"title":{},"name":{},"text":{"1":{},"2":{},"7":{}},"component":{}}],["scarb",{"_index":1227,"title":{"11-2":{},"12-2":{},"14-3":{},"15-2":{},"88-1":{}},"name":{},"text":{"11":{},"12":{},"14":{},"15":{},"82":{},"88":{},"89":{},"90":{}},"component":{}}],["scarb.toml",{"_index":1244,"title":{},"name":{},"text":{"11":{},"13":{}},"component":{}}],["scarbs.xyz",{"_index":3717,"title":{},"name":{},"text":{"88":{}},"component":{}}],["scarb’",{"_index":1481,"title":{},"name":{},"text":{"14":{}},"component":{}}],["schedul",{"_index":527,"title":{},"name":{},"text":{"4":{},"7":{},"37":{}},"component":{}}],["schema",{"_index":1988,"title":{},"name":{},"text":{"38":{},"72":{}},"component":{}}],["scheme",{"_index":2722,"title":{},"name":{},"text":{"52":{},"56":{},"65":{},"67":{}},"component":{}}],["scope",{"_index":3626,"title":{},"name":{},"text":{"80":{}},"component":{}}],["script",{"_index":2489,"title":{},"name":{},"text":{"41":{},"60":{}},"component":{}}],["sdk",{"_index":1315,"title":{"86":{}},"name":{"86":{}},"text":{"12":{},"37":{},"58":{},"65":{},"71":{},"78":{},"86":{}},"component":{}}],["seamless",{"_index":1077,"title":{},"name":{},"text":{"8":{},"29":{},"34":{},"35":{}},"component":{}}],["seamlessli",{"_index":3670,"title":{},"name":{},"text":{"82":{}},"component":{}}],["search",{"_index":1313,"title":{},"name":{},"text":{"12":{},"68":{}},"component":{}}],["second",{"_index":1439,"title":{},"name":{},"text":{"13":{},"47":{},"56":{},"59":{},"61":{},"63":{},"64":{},"77":{},"78":{},"80":{}},"component":{}}],["secp",{"_index":2498,"title":{},"name":{},"text":{"41":{}},"component":{}}],["secp256k1",{"_index":2450,"title":{},"name":{},"text":{"41":{}},"component":{}}],["secp256k1_mul",{"_index":2440,"title":{},"name":{},"text":{"41":{}},"component":{}}],["secp256r1",{"_index":2442,"title":{},"name":{},"text":{"41":{}},"component":{}}],["secp256r1_mul",{"_index":2441,"title":{},"name":{},"text":{"41":{}},"component":{}}],["section",{"_index":1346,"title":{},"name":{},"text":{"13":{},"16":{},"23":{},"39":{},"60":{},"61":{}},"component":{}}],["secur",{"_index":171,"title":{"87":{},"18-6":{}},"name":{"87":{}},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"8":{},"9":{},"13":{},"16":{},"18":{},"19":{},"21":{},"26":{},"29":{},"43":{},"47":{},"56":{},"64":{},"80":{},"87":{}},"component":{}}],["security.extropy.io",{"_index":2570,"title":{},"name":{},"text":{"43":{}},"component":{}}],["securityqq",{"_index":2247,"title":{},"name":{},"text":{"39":{}},"component":{}}],["see",{"_index":52,"title":{"34-26":{},"34-43":{},"34-52":{}},"name":{},"text":{"1":{},"2":{},"4":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"21":{},"22":{},"26":{},"27":{},"29":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"46":{},"47":{},"48":{},"50":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"67":{},"69":{},"70":{},"73":{},"76":{},"77":{},"78":{},"79":{},"80":{}},"component":{}}],["seed",{"_index":685,"title":{},"name":{},"text":{"4":{},"9":{},"17":{},"56":{}},"component":{}}],["seem",{"_index":863,"title":{},"name":{},"text":{"7":{},"68":{}},"component":{}}],["seen",{"_index":272,"title":{},"name":{},"text":{"1":{},"39":{}},"component":{}}],["segment",{"_index":936,"title":{},"name":{},"text":{"8":{},"75":{}},"component":{}}],["select",{"_index":785,"title":{"39-64":{}},"name":{},"text":{"6":{},"12":{},"13":{},"16":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{},"39":{},"56":{},"57":{}},"component":{}}],["selector",{"_index":2486,"title":{},"name":{},"text":{"41":{},"62":{},"63":{},"70":{},"72":{},"80":{},"81":{}},"component":{}}],["self",{"_index":1360,"title":{},"name":{},"text":{"13":{},"31":{},"58":{},"72":{},"76":{}},"component":{}}],["self.counter.read",{"_index":3487,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["self.counter.writ",{"_index":3485,"title":{},"name":{},"text":{"72":{}},"component":{}}],["self.emit",{"_index":1385,"title":{},"name":{},"text":{"13":{},"72":{},"76":{}},"component":{}}],["self.only_own",{"_index":1383,"title":{},"name":{},"text":{"13":{}},"component":{}}],["self.other_contract.read",{"_index":3488,"title":{},"name":{},"text":{"72":{}},"component":{}}],["self.owner.read",{"_index":1384,"title":{},"name":{},"text":{"13":{}},"component":{}}],["self.owner.writ",{"_index":1378,"title":{},"name":{},"text":{"13":{}},"component":{}}],["sell",{"_index":608,"title":{},"name":{},"text":{"4":{}},"component":{}}],["sem",{"_index":2060,"title":{},"name":{},"text":{"38":{}},"component":{}}],["semant",{"_index":126,"title":{},"name":{},"text":{"1":{},"68":{},"74":{}},"component":{}}],["send",{"_index":777,"title":{},"name":{},"text":{"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"32":{},"34":{},"35":{},"36":{},"37":{},"41":{},"47":{},"53":{},"55":{},"56":{},"57":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"74":{},"77":{},"80":{}},"component":{}}],["send_message_to_l1",{"_index":3066,"title":{"80-40":{}},"name":{},"text":{"61":{},"62":{}},"component":{}}],["send_message_to_l1_syscal",{"_index":3089,"title":{},"name":{},"text":{"62":{},"80":{}},"component":{}}],["sender",{"_index":1170,"title":{},"name":{},"text":{"9":{},"34":{},"38":{},"53":{},"61":{},"62":{},"63":{},"67":{},"72":{},"73":{},"80":{}},"component":{}}],["sender_address",{"_index":3287,"title":{},"name":{},"text":{"67":{}},"component":{}}],["sender’",{"_index":1820,"title":{},"name":{},"text":{"34":{},"55":{},"61":{},"62":{}},"component":{}}],["sendmessagetol2",{"_index":3100,"title":{"63-52":{}},"name":{},"text":{"62":{},"63":{}},"component":{}}],["sent",{"_index":116,"title":{},"name":{},"text":{"1":{},"7":{},"21":{},"34":{},"41":{},"53":{},"54":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{}},"component":{}}],["sep",{"_index":2313,"title":{"41-27":{}},"name":{},"text":{},"component":{}}],["separ",{"_index":388,"title":{"11-5":{}},"name":{},"text":{"3":{},"8":{},"10":{},"11":{},"34":{},"39":{},"41":{},"53":{},"59":{},"68":{},"70":{},"74":{},"79":{},"80":{},"89":{}},"component":{}}],["sepolia",{"_index":1103,"title":{"46-2":{}},"name":{},"text":{"9":{},"12":{},"16":{},"32":{},"35":{},"36":{},"37":{},"41":{},"44":{},"46":{},"47":{},"58":{},"67":{}},"component":{}}],["sepolia.infura.io/v3",{"_index":1288,"title":{},"name":{},"text":{"11":{}},"component":{}}],["sepolia.json",{"_index":1867,"title":{},"name":{},"text":{"35":{},"44":{}},"component":{}}],["sepolia.starknet.io",{"_index":2606,"title":{},"name":{},"text":{"46":{}},"component":{}}],["sepolia’",{"_index":1888,"title":{},"name":{},"text":{"37":{}},"component":{}}],["sept",{"_index":2325,"title":{"41-36":{}},"name":{},"text":{},"component":{}}],["sequenc",{"_index":22,"title":{"46":{},"1-17":{},"6-3":{},"6-4":{},"64-3":{},"64-5":{}},"name":{},"text":{"1":{},"4":{},"6":{},"9":{},"13":{},"35":{},"39":{},"41":{},"46":{},"49":{},"53":{},"55":{},"57":{},"59":{},"60":{},"61":{},"62":{},"64":{},"66":{},"68":{},"70":{},"77":{},"80":{}},"component":{}}],["sequencer_address",{"_index":2445,"title":{},"name":{},"text":{"41":{},"53":{},"55":{},"59":{},"77":{}},"component":{}}],["sequencer’",{"_index":1261,"title":{},"name":{},"text":{"11":{},"37":{},"41":{},"61":{}},"component":{}}],["sequenti",{"_index":2485,"title":{},"name":{},"text":{"41":{},"54":{},"56":{},"64":{},"66":{}},"component":{}}],["serd",{"_index":3462,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["seri",{"_index":834,"title":{},"name":{},"text":{"7":{},"8":{}},"component":{}}],["serial",{"_index":2266,"title":{"78":{},"78-3":{},"78-4":{},"78-5":{},"78-6":{},"78-7":{},"78-8":{},"78-9":{}},"name":{"78":{}},"text":{"39":{},"70":{},"72":{},"78":{}},"component":{}}],["serif",{"_index":363,"title":{},"name":{},"text":{"3":{}},"component":{}}],["seriou",{"_index":1742,"title":{},"name":{},"text":{"29":{}},"component":{}}],["serv",{"_index":420,"title":{},"name":{},"text":{"4":{},"7":{},"8":{},"13":{},"39":{},"49":{},"54":{},"64":{}},"component":{}}],["server",{"_index":774,"title":{},"name":{},"text":{"6":{},"39":{},"64":{},"88":{},"90":{}},"component":{}}],["servic",{"_index":200,"title":{"42":{}},"name":{"42":{}},"text":{"1":{},"2":{},"4":{},"7":{},"16":{},"29":{},"34":{},"37":{},"38":{},"43":{},"45":{},"53":{},"80":{}},"component":{}}],["set",{"_index":67,"title":{"14":{},"16":{},"9-2":{},"9-3":{},"11-7":{},"13-1":{},"13-12":{},"14-2":{},"25-6":{}},"name":{"16":{}},"text":{"1":{},"2":{},"3":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"21":{},"22":{},"25":{},"26":{},"27":{},"38":{},"39":{},"41":{},"45":{},"53":{},"55":{},"58":{},"59":{},"60":{},"61":{},"63":{},"64":{},"65":{},"80":{},"88":{}},"component":{}}],["set_open_for_deleg",{"_index":1634,"title":{},"name":{},"text":{"25":{}},"component":{}}],["setup",{"_index":1440,"title":{},"name":{"14":{}},"text":{"13":{},"14":{},"17":{},"39":{},"64":{},"89":{}},"component":{}}],["setwithdrawlimitpct",{"_index":1746,"title":{},"name":{},"text":{"29":{}},"component":{}}],["sever",{"_index":865,"title":{},"name":{},"text":{"7":{},"8":{},"11":{},"14":{},"17":{},"18":{},"25":{},"38":{},"39":{},"41":{},"60":{}},"component":{}}],["sfrxeth",{"_index":1735,"title":{},"name":{},"text":{"29":{}},"component":{}}],["sh",{"_index":1283,"title":{},"name":{},"text":{"11":{},"14":{}},"component":{}}],["sha256",{"_index":2363,"title":{},"name":{},"text":{"41":{}},"component":{}}],["share",{"_index":204,"title":{},"name":{},"text":{"1":{},"7":{},"18":{},"26":{},"29":{},"64":{}},"component":{}}],["sharp",{"_index":23,"title":{"1-18":{},"7-1":{},"7-2":{},"7-3":{},"7-4":{},"8-2":{},"8-7":{}},"name":{},"text":{"1":{},"7":{},"8":{}},"component":{}}],["sharp’",{"_index":826,"title":{},"name":{},"text":{"7":{}},"component":{}}],["shift",{"_index":3168,"title":{},"name":{},"text":{"64":{}},"component":{}}],["shift\\_point",{"_index":2669,"title":{},"name":{},"text":{"50":{}},"component":{}}],["short",{"_index":2468,"title":{},"name":{},"text":{"41":{},"61":{},"68":{}},"component":{}}],["shorten",{"_index":3472,"title":{},"name":{},"text":{"72":{}},"component":{}}],["shorter",{"_index":870,"title":{},"name":{},"text":{"7":{},"14":{},"78":{}},"component":{}}],["shortli",{"_index":2752,"title":{},"name":{},"text":{"53":{}},"component":{}}],["shouldn’t",{"_index":2935,"title":{},"name":{},"text":{"60":{}},"component":{}}],["show",{"_index":1207,"title":{},"name":{},"text":{"10":{},"13":{},"16":{},"17":{},"29":{},"60":{},"61":{},"65":{},"72":{},"77":{},"80":{},"89":{}},"component":{}}],["shown",{"_index":1044,"title":{},"name":{},"text":{"8":{},"35":{},"67":{},"72":{},"78":{}},"component":{}}],["shrame",{"_index":2171,"title":{},"name":{},"text":{"39":{}},"component":{}}],["shutdown",{"_index":2085,"title":{},"name":{},"text":{"38":{}},"component":{}}],["sibl",{"_index":3245,"title":{},"name":{},"text":{"65":{}},"component":{}}],["sierra",{"_index":24,"title":{"68":{},"1-19":{},"68-2":{},"87-1":{},"89-1":{}},"name":{"68":{}},"text":{"1":{},"11":{},"13":{},"38":{},"39":{},"41":{},"61":{},"65":{},"68":{},"70":{},"71":{},"87":{},"89":{}},"component":{}}],["sierra_program",{"_index":2426,"title":{},"name":{},"text":{"41":{}},"component":{}}],["sierra_program_hash",{"_index":3397,"title":{},"name":{},"text":{"70":{}},"component":{}}],["sierra’",{"_index":3366,"title":{},"name":{},"text":{"68":{}},"component":{}}],["sierra→casm",{"_index":3303,"title":{},"name":{},"text":{"67":{},"68":{},"71":{}},"component":{}}],["sign",{"_index":175,"title":{},"name":{},"text":{"1":{},"4":{},"9":{},"16":{},"39":{},"41":{},"56":{},"65":{},"70":{},"77":{},"78":{},"86":{}},"component":{}}],["signal",{"_index":1620,"title":{},"name":{},"text":{"22":{}},"component":{}}],["signatur",{"_index":1122,"title":{"41-19":{},"67-22":{},"80-2":{},"80-9":{},"80-16":{},"80-22":{},"80-28":{},"80-35":{},"80-41":{},"80-48":{},"80-54":{},"80-61":{}},"name":{},"text":{"9":{},"13":{},"39":{},"41":{},"47":{},"53":{},"54":{},"56":{},"61":{},"66":{},"67":{},"69":{},"76":{},"77":{},"86":{}},"component":{}}],["signature_inform",{"_index":1132,"title":{},"name":{},"text":{"9":{}},"component":{}}],["signed=fals",{"_index":3320,"title":{},"name":{},"text":{"67":{}},"component":{}}],["signer",{"_index":1476,"title":{"16-3":{}},"name":{},"text":{"14":{},"16":{},"17":{}},"component":{}}],["signific",{"_index":464,"title":{"71-1":{}},"name":{},"text":{"4":{},"7":{},"65":{},"78":{}},"component":{}}],["significantli",{"_index":739,"title":{},"name":{},"text":{"6":{},"7":{},"14":{},"60":{},"71":{}},"component":{}}],["silent",{"_index":2229,"title":{},"name":{},"text":{"39":{}},"component":{}}],["similar",{"_index":857,"title":{},"name":{},"text":{"7":{},"8":{},"11":{},"12":{},"13":{},"17":{},"18":{},"22":{},"30":{},"34":{},"39":{},"41":{},"53":{},"54":{},"62":{},"64":{},"68":{},"78":{}},"component":{}}],["similarli",{"_index":1628,"title":{},"name":{},"text":{"22":{},"41":{},"64":{},"88":{}},"component":{}}],["simpl",{"_index":2287,"title":{},"name":{},"text":{"39":{},"53":{},"56":{},"61":{},"64":{},"68":{}},"component":{}}],["simple_bootloader_program_hash",{"_index":1071,"title":{},"name":{},"text":{"8":{}},"component":{}}],["simpli",{"_index":2594,"title":{},"name":{},"text":{"45":{},"68":{},"69":{},"78":{}},"component":{}}],["simplic",{"_index":3017,"title":{},"name":{},"text":{"61":{}},"component":{}}],["simplifi",{"_index":1468,"title":{"57":{}},"name":{"57":{}},"text":{"14":{},"55":{},"89":{}},"component":{}}],["simul",{"_index":2203,"title":{},"name":{},"text":{"39":{}},"component":{}}],["singl",{"_index":172,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"9":{},"11":{},"29":{},"34":{},"41":{},"47":{},"53":{},"60":{},"61":{},"63":{},"64":{},"65":{},"72":{},"75":{},"78":{},"79":{},"80":{},"89":{}},"component":{}}],["singleton",{"_index":2797,"title":{},"name":{},"text":{"58":{}},"component":{}}],["singular",{"_index":926,"title":{},"name":{},"text":{"8":{}},"component":{}}],["site",{"_index":1488,"title":{},"name":{},"text":{"16":{},"36":{},"37":{},"62":{},"69":{},"88":{}},"component":{}}],["situat",{"_index":2911,"title":{},"name":{},"text":{"60":{}},"component":{}}],["six",{"_index":3058,"title":{},"name":{},"text":{"61":{}},"component":{}}],["size",{"_index":232,"title":{},"name":{},"text":{"1":{},"4":{},"8":{},"10":{},"41":{},"47":{},"61":{},"65":{},"75":{},"79":{}},"component":{}}],["skip",{"_index":2735,"title":{},"name":{},"text":{"53":{},"65":{},"72":{}},"component":{}}],["slash",{"_index":386,"title":{},"name":{},"text":{"3":{}},"component":{}}],["slightli",{"_index":1502,"title":{},"name":{},"text":{"16":{}},"component":{}}],["slot",{"_index":270,"title":{},"name":{},"text":{"1":{},"53":{},"61":{},"75":{},"78":{}},"component":{}}],["slow",{"_index":2160,"title":{},"name":{},"text":{"39":{}},"component":{}}],["slower",{"_index":848,"title":{},"name":{},"text":{"7":{}},"component":{}}],["small",{"_index":1890,"title":{},"name":{},"text":{"37":{}},"component":{}}],["smaller",{"_index":853,"title":{},"name":{},"text":{"7":{},"8":{},"66":{},"78":{}},"component":{}}],["smallest",{"_index":97,"title":{},"name":{},"text":{"1":{}},"component":{}}],["smart",{"_index":45,"title":{"11":{},"12":{},"13":{},"15":{},"30":{},"88":{},"8-1":{},"11-6":{},"11-8":{},"12-4":{},"13-3":{},"13-12":{}},"name":{"11":{},"12":{},"13":{},"15":{},"88":{}},"text":{"1":{},"6":{},"8":{},"11":{},"12":{},"13":{},"15":{},"16":{},"30":{},"34":{},"37":{},"41":{},"45":{},"47":{},"49":{},"52":{},"54":{},"56":{},"58":{},"63":{},"64":{},"67":{},"68":{},"73":{},"80":{},"82":{},"85":{},"88":{},"89":{},"90":{}},"component":{}}],["smartphon",{"_index":3199,"title":{},"name":{},"text":{"64":{}},"component":{}}],["smooth",{"_index":2467,"title":{},"name":{},"text":{"41":{},"64":{}},"component":{}}],["smoother",{"_index":1399,"title":{},"name":{},"text":{"13":{}},"component":{}}],["sn_keccak",{"_index":2889,"title":{},"name":{},"text":{"59":{},"67":{},"72":{},"75":{}},"component":{}}],["sn_main",{"_index":3321,"title":{},"name":{},"text":{"67":{}},"component":{}}],["sn_sepolia",{"_index":1524,"title":{},"name":{},"text":{"17":{},"67":{}},"component":{}}],["snap",{"_index":3694,"title":{},"name":{},"text":{"84":{}},"component":{}}],["snapshot",{"_index":2010,"title":{},"name":{},"text":{"38":{},"64":{}},"component":{}}],["sncast",{"_index":3656,"title":{"81-3":{}},"name":{},"text":{"88":{}},"component":{}}],["snforge_std",{"_index":3721,"title":{},"name":{},"text":{"88":{}},"component":{}}],["snip",{"_index":2769,"title":{},"name":{},"text":{"54":{},"67":{}},"component":{}}],["snip6",{"_index":2763,"title":{},"name":{},"text":{"53":{}},"component":{}}],["snippet",{"_index":3317,"title":{},"name":{},"text":{"67":{},"68":{}},"component":{}}],["social",{"_index":2786,"title":{},"name":{},"text":{"56":{}},"component":{}}],["soft",{"_index":2267,"title":{},"name":{},"text":{"39":{}},"component":{}}],["softwar",{"_index":110,"title":{},"name":{},"text":{"1":{},"4":{},"6":{},"86":{},"88":{}},"component":{}}],["sole",{"_index":617,"title":{},"name":{},"text":{"4":{},"64":{},"71":{}},"component":{}}],["solicit",{"_index":702,"title":{},"name":{},"text":{"4":{}},"component":{}}],["solid",{"_index":830,"title":{"8":{}},"name":{"8":{}},"text":{"7":{},"8":{},"62":{}},"component":{}}],["solut",{"_index":463,"title":{},"name":{},"text":{"4":{},"7":{},"37":{},"41":{},"68":{}},"component":{}}],["solv",{"_index":2477,"title":{},"name":{},"text":{"41":{},"53":{},"68":{}},"component":{}}],["somehow",{"_index":2753,"title":{},"name":{},"text":{"53":{}},"component":{}}],["someon",{"_index":1292,"title":{},"name":{},"text":{"11":{},"58":{}},"component":{}}],["sometim",{"_index":2214,"title":{},"name":{},"text":{"39":{}},"component":{}}],["somewhat",{"_index":3183,"title":{},"name":{},"text":{"64":{}},"component":{}}],["sound",{"_index":900,"title":{},"name":{},"text":{"7":{}},"component":{}}],["sourc",{"_index":658,"title":{},"name":{},"text":{"4":{},"10":{},"11":{},"39":{},"70":{},"82":{}},"component":{}}],["space",{"_index":1128,"title":{},"name":{},"text":{"9":{},"58":{},"65":{},"75":{}},"component":{}}],["spaceshard",{"_index":3671,"title":{},"name":{},"text":{"83":{},"86":{}},"component":{}}],["spam",{"_index":2215,"title":{},"name":{},"text":{"39":{},"47":{},"53":{}},"component":{}}],["span",{"_index":1859,"title":{},"name":{},"text":{"34":{},"58":{},"77":{},"80":{}},"component":{}}],["spark",{"_index":3175,"title":{},"name":{},"text":{"64":{}},"component":{}}],["spars",{"_index":3246,"title":{},"name":{},"text":{"65":{}},"component":{}}],["spawn",{"_index":3739,"title":{},"name":{},"text":{"89":{}},"component":{}}],["spec",{"_index":1570,"title":{},"name":{},"text":{"18":{},"21":{},"41":{},"42":{},"61":{},"72":{}},"component":{}}],["special",{"_index":48,"title":{"65-10":{}},"name":{},"text":{"1":{},"2":{},"64":{},"65":{},"69":{},"85":{}},"component":{}}],["specif",{"_index":244,"title":{"58-8":{},"72-11":{}},"name":{},"text":{"1":{},"4":{},"6":{},"7":{},"8":{},"9":{},"12":{},"13":{},"16":{},"18":{},"19":{},"25":{},"34":{},"38":{},"39":{},"41":{},"50":{},"53":{},"54":{},"61":{},"62":{},"64":{},"65":{},"67":{},"71":{},"72":{},"80":{},"83":{},"86":{},"88":{},"89":{}},"component":{}}],["specifi",{"_index":366,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"11":{},"12":{},"13":{},"17":{},"18":{},"21":{},"24":{},"34":{},"35":{},"39":{},"41":{},"61":{},"62":{},"65":{},"67":{},"72":{},"77":{},"78":{},"80":{}},"component":{}}],["specs/tree/v0.3.0",{"_index":2081,"title":{},"name":{},"text":{"38":{}},"component":{}}],["spend",{"_index":431,"title":{},"name":{},"text":{"4":{}},"component":{}}],["spender",{"_index":3445,"title":{},"name":{},"text":{"72":{}},"component":{}}],["split",{"_index":2462,"title":{},"name":{},"text":{"41":{},"64":{},"78":{}},"component":{}}],["spong",{"_index":2676,"title":{},"name":{},"text":{"50":{}},"component":{}}],["sponsor",{"_index":3537,"title":{},"name":{},"text":{"77":{}},"component":{}}],["sqrt{",{"_index":1661,"title":{},"name":{},"text":{"26":{}},"component":{}}],["squar",{"_index":372,"title":{},"name":{},"text":{"3":{},"18":{}},"component":{}}],["src",{"_index":1246,"title":{},"name":{},"text":{"11":{},"13":{}},"component":{}}],["srivastav",{"_index":2172,"title":{},"name":{},"text":{"39":{}},"component":{}}],["ssf",{"_index":1281,"title":{},"name":{},"text":{"11":{},"14":{}},"component":{}}],["stabil",{"_index":1957,"title":{},"name":{},"text":{"38":{},"41":{}},"component":{}}],["stabl",{"_index":2611,"title":{},"name":{},"text":{"47":{}},"component":{}}],["stablecoin",{"_index":1726,"title":{},"name":{},"text":{"29":{}},"component":{}}],["stack",{"_index":944,"title":{},"name":{},"text":{"8":{},"39":{}},"component":{}}],["stage",{"_index":667,"title":{},"name":{},"text":{"4":{},"9":{},"21":{},"26":{},"53":{},"57":{},"62":{},"64":{},"66":{},"67":{},"89":{}},"component":{}}],["stake",{"_index":460,"title":{"18":{},"20":{},"22":{},"23":{},"24":{},"25":{},"26":{},"18-1":{},"18-2":{},"25-1":{},"26-1":{},"26-4":{}},"name":{"20":{},"21":{},"22":{},"24":{},"25":{}},"text":{"4":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"29":{},"64":{}},"component":{}}],["stakehold",{"_index":646,"title":{},"name":{},"text":{"4":{}},"component":{}}],["staker",{"_index":433,"title":{},"name":{},"text":{"4":{}},"component":{}}],["staker_address",{"_index":1600,"title":{},"name":{},"text":{"19":{},"22":{}},"component":{}}],["stakerinfo",{"_index":1566,"title":{},"name":{},"text":{"18":{}},"component":{}}],["staknet",{"_index":2070,"title":{},"name":{},"text":{"38":{}},"component":{}}],["stand",{"_index":829,"title":{},"name":{},"text":{"7":{}},"component":{}}],["standalon",{"_index":3490,"title":{},"name":{},"text":{"72":{},"80":{},"89":{}},"component":{}}],["standard",{"_index":90,"title":{},"name":{},"text":{"1":{},"10":{},"29":{},"34":{},"41":{},"53":{},"54":{},"58":{},"64":{},"65":{},"69":{}},"component":{}}],["stark",{"_index":25,"title":{"51":{},"52":{},"1-20":{},"82-1":{}},"name":{"52":{}},"text":{"1":{},"2":{},"4":{},"7":{},"8":{},"41":{},"50":{},"51":{},"52":{},"61":{},"64":{},"65":{},"67":{},"68":{},"69":{},"78":{},"82":{}},"component":{}}],["starkdefi",{"_index":2602,"title":{},"name":{},"text":{"45":{}},"component":{}}],["starkex",{"_index":827,"title":{},"name":{},"text":{"7":{}},"component":{}}],["starkgat",{"_index":1686,"title":{"28":{},"29":{},"32":{},"33":{},"34":{},"35":{},"36":{},"29-1":{},"35-1":{},"35-2":{}},"name":{},"text":{"28":{},"29":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"45":{}},"component":{}}],["starkgatemanager.sol",{"_index":1812,"title":{},"name":{},"text":{"34":{}},"component":{}}],["starkgateregistry.sol",{"_index":1814,"title":{},"name":{},"text":{"34":{}},"component":{}}],["starkgate’",{"_index":1786,"title":{},"name":{},"text":{"32":{},"36":{},"45":{}},"component":{}}],["starkli",{"_index":1099,"title":{"15":{},"11-2":{},"12-2":{},"14-1":{},"14-2":{},"15-2":{},"55-1":{},"81-1":{}},"name":{"9":{}},"text":{"9":{},"11":{},"12":{},"14":{},"15":{},"16":{},"17":{},"37":{},"55":{},"81":{}},"component":{}}],["starkliup",{"_index":1464,"title":{},"name":{},"text":{"14":{}},"component":{}}],["starkli’",{"_index":1471,"title":{},"name":{},"text":{"14":{},"17":{},"55":{}},"component":{}}],["starknet",{"_index":26,"title":{"4":{},"9":{},"13":{},"40":{},"41":{},"46":{},"49":{},"64":{},"65":{},"85":{},"86":{},"1-21":{},"1-22":{},"1-23":{},"1-24":{},"2-1":{},"2-6":{},"6-1":{},"6-3":{},"6-7":{},"9-2":{},"9-4":{},"9-5":{},"9-6":{},"9-7":{},"9-8":{},"9-9":{},"9-10":{},"9-11":{},"9-12":{},"9-13":{},"9-14":{},"9-15":{},"9-16":{},"13-3":{},"13-11":{},"13-12":{},"17-2":{},"35-5":{},"39-72":{},"41-1":{},"41-2":{},"41-10":{},"41-11":{},"41-15":{},"41-16":{},"41-24":{},"41-25":{},"41-27":{},"41-28":{},"41-29":{},"41-30":{},"41-31":{},"41-32":{},"41-33":{},"41-34":{},"41-35":{},"41-36":{},"41-37":{},"41-38":{},"46-1":{},"46-2":{},"46-3":{},"46-4":{},"50-2":{},"60-2":{},"82-3":{},"83-1":{},"84-1":{},"84-3":{},"88-3":{},"88-5":{},"89-11":{}},"name":{"4":{},"10":{},"49":{},"64":{},"65":{},"79":{}},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"29":{},"32":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"52":{},"53":{},"54":{},"55":{},"56":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{}},"component":{}}],["starknet'",{"_index":305,"title":{},"name":{},"text":{"2":{}},"component":{}}],["starknet.dart",{"_index":3705,"title":{},"name":{},"text":{"86":{}},"component":{}}],["starknet.go",{"_index":3703,"title":{},"name":{},"text":{"86":{}},"component":{}}],["starknet.j",{"_index":1316,"title":{},"name":{},"text":{"12":{},"78":{},"82":{},"84":{},"86":{}},"component":{}}],["starknet.pi",{"_index":1317,"title":{},"name":{},"text":{"12":{},"86":{}},"component":{}}],["starknet.swift",{"_index":3704,"title":{},"name":{},"text":{"86":{}},"component":{}}],["starknet::contract",{"_index":1364,"title":{},"name":{},"text":{"13":{},"72":{},"76":{}},"component":{}}],["starknet::contractaddress",{"_index":1353,"title":{},"name":{},"text":{"13":{},"72":{}},"component":{}}],["starknet::ev",{"_index":1370,"title":{},"name":{},"text":{"13":{},"58":{},"72":{},"76":{}},"component":{}}],["starknet::get_caller_address",{"_index":1367,"title":{},"name":{},"text":{"13":{}},"component":{}}],["starknet::interfac",{"_index":1354,"title":{},"name":{},"text":{"13":{},"58":{},"72":{},"76":{}},"component":{}}],["starknet::storage_access::storage_base_address_from_felt252",{"_index":3652,"title":{},"name":{},"text":{"80":{}},"component":{}}],["starknet::syscalls::emit_event_syscal",{"_index":3604,"title":{},"name":{},"text":{"79":{}},"component":{}}],["starknet::syscalls::storage_read_syscal",{"_index":3507,"title":{},"name":{},"text":{"75":{}},"component":{}}],["starknet::syscalls::storage_write_syscal",{"_index":3508,"title":{},"name":{},"text":{"75":{}},"component":{}}],["starknet_account",{"_index":1472,"title":{},"name":{},"text":{"14":{}},"component":{}}],["starknet_account=~/.starkli",{"_index":1477,"title":{},"name":{},"text":{"14":{}},"component":{}}],["starknet_adddeclaretransact",{"_index":2028,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_adddeployaccounttransact",{"_index":2029,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_adddeploytransact",{"_index":2233,"title":{},"name":{},"text":{"39":{}},"component":{}}],["starknet_addinvoketransact",{"_index":2030,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_api_openrpc.json",{"_index":64,"title":{},"name":{},"text":{"1":{},"41":{},"42":{},"67":{}},"component":{}}],["starknet_block_hash0",{"_index":2844,"title":{},"name":{},"text":{"59":{}},"component":{}}],["starknet_blockhashandnumb",{"_index":2092,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_blocknumb",{"_index":2091,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_cal",{"_index":2026,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["starknet_chainid",{"_index":2090,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_contract_address",{"_index":3494,"title":{},"name":{},"text":{"73":{}},"component":{}}],["starknet_estimatefe",{"_index":2027,"title":{},"name":{},"text":{"38":{},"39":{},"67":{}},"component":{}}],["starknet_estimatemessagefe",{"_index":2013,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["starknet_ev",{"_index":2270,"title":{},"name":{},"text":{"39":{}},"component":{}}],["starknet_getblocktransactioncount",{"_index":2097,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_getblockwithtx",{"_index":2094,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_getblockwithtxhash",{"_index":2093,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_getclass",{"_index":2051,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_getclassat",{"_index":2052,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_getclasshashat",{"_index":2050,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_getev",{"_index":2053,"title":{},"name":{},"text":{"38":{},"39":{},"80":{}},"component":{}}],["starknet_getnonc",{"_index":2048,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_getstateupd",{"_index":2099,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["starknet_getstorageat",{"_index":2049,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_gettransactionbyblockidandindex",{"_index":2098,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_gettransactionbyhash",{"_index":2095,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_gettransactionreceipt",{"_index":2096,"title":{},"name":{},"text":{"38":{},"66":{}},"component":{}}],["starknet_gettransactionstatu",{"_index":1967,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_keccak",{"_index":2089,"title":{},"name":{},"text":{"38":{},"70":{}},"component":{}}],["starknet_keystor",{"_index":1474,"title":{},"name":{},"text":{"14":{},"16":{}},"component":{}}],["starknet_keystore=~/.starkli",{"_index":1479,"title":{},"name":{},"text":{"14":{}},"component":{}}],["starknet_network",{"_index":1106,"title":{},"name":{},"text":{"9":{}},"component":{}}],["starknet_network=sepolia",{"_index":1108,"title":{},"name":{},"text":{"9":{}},"component":{}}],["starknet_pendingtransact",{"_index":1974,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_simul",{"_index":2222,"title":{},"name":{},"text":{"39":{}},"component":{}}],["starknet_simulatetransact",{"_index":1987,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["starknet_specvers",{"_index":1965,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_state_v0",{"_index":3210,"title":{},"name":{},"text":{"65":{}},"component":{}}],["starknet_sync",{"_index":2040,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_traceblocktransact",{"_index":1970,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_tracetransact",{"_index":1986,"title":{},"name":{},"text":{"38":{}},"component":{}}],["starknet_vers",{"_index":2502,"title":{},"name":{},"text":{"41":{}},"component":{}}],["starknet_wallet=starkware.starknet.wallets.open_zeppelin.openzeppelinaccount",{"_index":1155,"title":{},"name":{},"text":{"9":{}},"component":{}}],["starknetkit",{"_index":3666,"title":{"84-5":{}},"name":{},"text":{"82":{},"84":{}},"component":{}}],["starknetmessag",{"_index":3132,"title":{},"name":{},"text":{"63":{}},"component":{}}],["starknetmessaging.sol",{"_index":3094,"title":{},"name":{},"text":{"62":{},"63":{}},"component":{}}],["starknettokenbridge.sol",{"_index":1692,"title":{},"name":{},"text":{"29":{},"34":{}},"component":{}}],["starknet’",{"_index":406,"title":{"54":{},"64-2":{}},"name":{},"text":{"4":{},"6":{},"7":{},"8":{},"16":{},"35":{},"41":{},"47":{},"50":{},"54":{},"60":{},"61":{},"62":{},"64":{},"65":{},"67":{},"68":{},"71":{},"74":{},"80":{}},"component":{}}],["starkscan",{"_index":1290,"title":{},"name":{},"text":{"11":{},"13":{},"21":{},"36":{},"48":{}},"component":{}}],["starkwar",{"_index":506,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"29":{},"34":{},"35":{},"42":{},"45":{},"64":{}},"component":{}}],["starkware.starknet.wallet",{"_index":1157,"title":{},"name":{},"text":{"9":{}},"component":{}}],["starkware’",{"_index":523,"title":{},"name":{},"text":{"4":{},"62":{}},"component":{}}],["start",{"_index":294,"title":{"2-2":{}},"name":{},"text":{"2":{},"4":{},"13":{},"16":{},"17":{},"26":{},"37":{},"38":{},"39":{},"41":{},"42":{},"47":{},"49":{},"60":{},"61":{},"63":{},"65":{},"68":{},"75":{},"81":{}},"component":{}}],["started/starknet",{"_index":2545,"title":{},"name":{},"text":{"42":{}},"component":{}}],["startl1tol2messagecancel",{"_index":3110,"title":{"63-59":{}},"name":{},"text":{"62":{},"63":{}},"component":{}}],["state",{"_index":29,"title":{"65":{},"1-24":{},"1-26":{},"34-5":{},"34-13":{},"34-21":{},"34-30":{},"34-38":{},"34-47":{},"34-56":{},"34-64":{},"34-73":{},"34-82":{},"34-90":{},"34-98":{},"34-106":{},"34-114":{},"34-122":{},"34-130":{},"59-2":{},"63-4":{},"63-11":{},"63-18":{},"63-24":{},"63-30":{},"63-36":{},"63-42":{},"63-48":{},"63-54":{},"63-61":{},"64-2":{},"65-1":{},"65-2":{},"66-3":{}},"name":{"65":{}},"text":{"1":{},"6":{},"8":{},"9":{},"13":{},"15":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"47":{},"50":{},"59":{},"60":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"71":{},"74":{},"76":{},"80":{},"83":{},"86":{},"88":{}},"component":{}}],["state_commit",{"_index":3208,"title":{},"name":{},"text":{"65":{}},"component":{}}],["state_diff_commit",{"_index":2832,"title":{},"name":{},"text":{"59":{}},"component":{}}],["state_diff_length",{"_index":2830,"title":{},"name":{},"text":{"59":{}},"component":{}}],["state_mut",{"_index":3422,"title":{},"name":{},"text":{"72":{}},"component":{}}],["stateless",{"_index":823,"title":{},"name":{},"text":{"7":{}},"component":{}}],["statement",{"_index":724,"title":{},"name":{},"text":{"4":{},"8":{},"10":{},"41":{},"68":{}},"component":{}}],["statesnapshot",{"_index":2047,"title":{},"name":{},"text":{"38":{}},"component":{}}],["static",{"_index":1268,"title":{},"name":{},"text":{"11":{},"76":{},"87":{}},"component":{}}],["statu",{"_index":1085,"title":{"66-2":{}},"name":{},"text":{"8":{},"9":{},"13":{},"16":{},"18":{},"34":{},"35":{},"38":{},"39":{},"41":{},"53":{},"66":{}},"component":{}}],["status",{"_index":1184,"title":{},"name":{},"text":{"9":{},"66":{}},"component":{}}],["stay",{"_index":138,"title":{},"name":{},"text":{"1":{}},"component":{}}],["stdout",{"_index":1221,"title":{},"name":{},"text":{"10":{}},"component":{}}],["step",{"_index":7,"title":{"1-6":{},"35-4":{},"35-5":{},"35-6":{},"35-8":{},"35-9":{},"35-10":{}},"name":{},"text":{"1":{},"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"35":{},"38":{},"41":{},"47":{},"53":{},"55":{},"61":{},"62":{},"64":{},"66":{},"68":{}},"component":{}}],["still",{"_index":456,"title":{},"name":{},"text":{"4":{},"7":{},"11":{},"31":{},"34":{},"37":{},"39":{},"41":{},"53":{},"66":{},"67":{}},"component":{}}],["stolen",{"_index":687,"title":{},"name":{},"text":{"4":{},"56":{}},"component":{}}],["stop",{"_index":1218,"title":{},"name":{},"text":{"10":{},"29":{},"34":{},"37":{},"39":{},"45":{},"68":{}},"component":{}}],["storag",{"_index":131,"title":{"75":{},"61-16":{},"75-1":{},"75-2":{},"75-3":{}},"name":{"75":{}},"text":{"1":{},"6":{},"9":{},"13":{},"38":{},"39":{},"41":{},"53":{},"59":{},"60":{},"61":{},"62":{},"64":{},"65":{},"72":{},"74":{},"75":{},"76":{},"78":{},"80":{}},"component":{}}],["storage_address",{"_index":3653,"title":{},"name":{},"text":{"80":{}},"component":{}}],["storage_base_address_from_felt252",{"_index":3654,"title":{},"name":{},"text":{"80":{}},"component":{}}],["storage_read",{"_index":3504,"title":{"80-53":{}},"name":{},"text":{"75":{}},"component":{}}],["storage_read_syscal",{"_index":3651,"title":{},"name":{},"text":{"80":{}},"component":{}}],["storage_root",{"_index":3215,"title":{},"name":{},"text":{"65":{}},"component":{}}],["storage_writ",{"_index":3506,"title":{"80-60":{}},"name":{},"text":{"75":{}},"component":{}}],["storage_write_syscal",{"_index":3502,"title":{},"name":{},"text":{"75":{},"80":{}},"component":{}}],["storageaddress",{"_index":3544,"title":{},"name":{},"text":{"78":{},"80":{}},"component":{}}],["store",{"_index":142,"title":{},"name":{},"text":{"1":{},"4":{},"6":{},"8":{},"11":{},"13":{},"16":{},"18":{},"35":{},"38":{},"39":{},"41":{},"61":{},"62":{},"65":{},"66":{},"71":{},"75":{},"78":{}},"component":{}}],["straight",{"_index":3179,"title":{},"name":{},"text":{"64":{}},"component":{}}],["straightforward",{"_index":3641,"title":{},"name":{},"text":{"80":{}},"component":{}}],["strateg",{"_index":554,"title":{},"name":{},"text":{"4":{}},"component":{}}],["strategi",{"_index":1589,"title":{},"name":{},"text":{"18":{},"27":{}},"component":{}}],["streamlin",{"_index":1989,"title":{},"name":{},"text":{"38":{}},"component":{}}],["strength",{"_index":788,"title":{},"name":{},"text":{"6":{}},"component":{}}],["string",{"_index":1142,"title":{},"name":{},"text":{"9":{},"34":{},"38":{},"39":{},"41":{},"59":{},"65":{},"67":{},"70":{},"73":{},"78":{},"79":{},"80":{}},"component":{}}],["strk",{"_index":133,"title":{"4-2":{}},"name":{},"text":{"1":{},"4":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"26":{},"27":{},"29":{},"41":{},"46":{},"61":{},"67":{}},"component":{}}],["strk_l1_gas_pric",{"_index":2406,"title":{},"name":{},"text":{"41":{}},"component":{}}],["strknetkit",{"_index":3697,"title":{},"name":{},"text":{"84":{}},"component":{}}],["struct",{"_index":1373,"title":{"77-1":{},"77-2":{},"77-3":{},"77-4":{},"78-8":{}},"name":{},"text":{"13":{},"41":{},"58":{},"67":{},"72":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{}},"component":{}}],["structur",{"_index":436,"title":{"59":{},"56-1":{},"62-2":{},"62-7":{}},"name":{"59":{}},"text":{"4":{},"8":{},"16":{},"18":{},"41":{},"54":{},"62":{},"65":{},"67":{},"72":{},"79":{}},"component":{}}],["struct’",{"_index":3590,"title":{},"name":{},"text":{"78":{}},"component":{}}],["stuck",{"_index":2231,"title":{},"name":{},"text":{"39":{}},"component":{}}],["studio",{"_index":3741,"title":{"90":{}},"name":{},"text":{"90":{}},"component":{}}],["style",{"_index":58,"title":{},"name":{},"text":{"1":{},"2":{},"39":{}},"component":{}}],["sub",{"_index":1069,"title":{},"name":{},"text":{"8":{},"72":{}},"component":{}}],["subdirectori",{"_index":1245,"title":{},"name":{},"text":{"11":{}},"component":{}}],["subject",{"_index":398,"title":{},"name":{},"text":{"4":{},"26":{},"47":{}},"component":{}}],["submiss",{"_index":778,"title":{},"name":{},"text":{"6":{},"66":{}},"component":{}}],["submit",{"_index":189,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"11":{},"15":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{},"35":{},"39":{},"61":{},"64":{},"66":{},"67":{},"68":{},"81":{}},"component":{}}],["submitt",{"_index":3008,"title":{},"name":{},"text":{"61":{}},"component":{}}],["subscrib",{"_index":2298,"title":{},"name":{},"text":{"40":{},"41":{}},"component":{}}],["subscript",{"_index":1930,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["subsequ",{"_index":552,"title":{},"name":{},"text":{"4":{},"11":{},"21":{},"27":{},"30":{},"32":{},"34":{},"36":{}},"component":{}}],["subset",{"_index":3341,"title":{},"name":{},"text":{"68":{}},"component":{}}],["substanti",{"_index":2128,"title":{},"name":{},"text":{"39":{}},"component":{}}],["substitut",{"_index":3359,"title":{},"name":{},"text":{"68":{}},"component":{}}],["substrat",{"_index":2552,"title":{},"name":{},"text":{"42":{}},"component":{}}],["subtracted_valu",{"_index":3450,"title":{},"name":{},"text":{"72":{}},"component":{}}],["subtri",{"_index":3219,"title":{},"name":{},"text":{"65":{}},"component":{}}],["succe",{"_index":1765,"title":{},"name":{},"text":{"30":{},"34":{}},"component":{}}],["succeed",{"_index":222,"title":{},"name":{},"text":{"1":{},"34":{},"66":{}},"component":{}}],["success",{"_index":670,"title":{},"name":{},"text":{"4":{},"9":{},"15":{},"19":{},"20":{},"53":{}},"component":{}}],["successfulli",{"_index":1291,"title":{},"name":{},"text":{"11":{},"16":{},"27":{},"34":{},"53":{},"57":{},"66":{},"68":{}},"component":{}}],["such",{"_index":145,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"7":{},"8":{},"13":{},"16":{},"23":{},"25":{},"30":{},"32":{},"34":{},"36":{},"39":{},"41":{},"45":{},"47":{},"50":{},"53":{},"56":{},"58":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"68":{},"69":{},"71":{},"72":{},"78":{},"80":{},"81":{},"85":{},"88":{}},"component":{}}],["suffer",{"_index":651,"title":{},"name":{},"text":{"4":{}},"component":{}}],["suffici",{"_index":644,"title":{},"name":{},"text":{"4":{},"16":{},"21":{},"24":{},"64":{},"72":{}},"component":{}}],["suffix",{"_index":2540,"title":{},"name":{},"text":{"42":{}},"component":{}}],["suggest",{"_index":2282,"title":{},"name":{},"text":{"39":{},"58":{},"64":{},"90":{}},"component":{}}],["suit",{"_index":1680,"title":{},"name":{},"text":{"26":{},"81":{}},"component":{}}],["sum",{"_index":2831,"title":{},"name":{},"text":{"59":{},"61":{}},"component":{}}],["sum\\limits_{i=1}^t",{"_index":2973,"title":{},"name":{},"text":{"61":{}},"component":{}}],["summar",{"_index":810,"title":{},"name":{},"text":{"6":{},"75":{}},"component":{}}],["summari",{"_index":2238,"title":{},"name":{},"text":{"39":{},"66":{}},"component":{}}],["sunday",{"_index":3576,"title":{},"name":{},"text":{"78":{}},"component":{}}],["super",{"_index":3480,"title":{},"name":{},"text":{"72":{}},"component":{}}],["super::contractaddress",{"_index":1366,"title":{},"name":{},"text":{"13":{}},"component":{}}],["super::icountercontract",{"_index":3486,"title":{},"name":{},"text":{"72":{},"76":{}},"component":{}}],["super::ownabletrait",{"_index":1382,"title":{},"name":{},"text":{"13":{}},"component":{}}],["superflu",{"_index":1716,"title":{},"name":{},"text":{"29":{}},"component":{}}],["supplementari",{"_index":324,"title":{},"name":{},"text":{"2":{}},"component":{}}],["suppli",{"_index":347,"title":{"4-3":{}},"name":{},"text":{"3":{},"4":{},"9":{},"18":{},"26":{},"41":{},"70":{}},"component":{}}],["supplier",{"_index":1557,"title":{"18-4":{}},"name":{},"text":{"18":{}},"component":{}}],["support",{"_index":494,"title":{"35-2":{},"39-72":{}},"name":{},"text":{"4":{},"7":{},"11":{},"16":{},"21":{},"28":{},"29":{},"35":{},"37":{},"38":{},"39":{},"41":{},"42":{},"45":{},"46":{},"47":{},"53":{},"62":{},"64":{},"65":{},"67":{},"70":{},"72":{},"80":{},"81":{},"83":{},"84":{},"86":{},"87":{},"88":{},"89":{}},"component":{}}],["suppos",{"_index":3026,"title":{},"name":{},"text":{"61":{},"65":{}},"component":{}}],["sure",{"_index":1327,"title":{},"name":{},"text":{"12":{},"16":{},"29":{},"34":{},"35":{},"53":{},"68":{}},"component":{}}],["surround",{"_index":358,"title":{},"name":{},"text":{"3":{},"56":{}},"component":{}}],["swap",{"_index":2264,"title":{},"name":{},"text":{"39":{},"45":{}},"component":{}}],["switch",{"_index":1672,"title":{"27":{},"38-15":{}},"name":{"27":{}},"text":{"26":{},"27":{},"38":{},"60":{}},"component":{}}],["switch_delegation_pool",{"_index":1588,"title":{},"name":{},"text":{"18":{},"27":{}},"component":{}}],["symbol",{"_index":2584,"title":{},"name":{},"text":{"44":{},"45":{},"75":{}},"component":{}}],["symbol_",{"_index":3435,"title":{},"name":{},"text":{"72":{}},"component":{}}],["sync",{"_index":1273,"title":{},"name":{},"text":{"11":{},"38":{},"39":{}},"component":{}}],["sync.pol",{"_index":2150,"title":{},"name":{},"text":{"39":{}},"component":{}}],["synchron",{"_index":139,"title":{},"name":{},"text":{"1":{},"37":{},"38":{}},"component":{}}],["sync’d",{"_index":2138,"title":{},"name":{},"text":{"39":{}},"component":{}}],["syntax",{"_index":1088,"title":{"9-1":{}},"name":{"76":{}},"text":{"9":{},"41":{},"68":{},"76":{},"79":{},"80":{}},"component":{}}],["syscal",{"_index":2364,"title":{},"name":{},"text":{"41":{},"53":{},"55":{},"58":{},"61":{},"62":{},"66":{},"73":{},"77":{},"80":{}},"component":{}}],["syscallresult",{"_index":3628,"title":{},"name":{},"text":{"80":{}},"component":{}}],["syscalls.cairo",{"_index":3633,"title":{},"name":{},"text":{"80":{}},"component":{}}],["system",{"_index":228,"title":{"80":{}},"name":{"80":{}},"text":{"1":{},"2":{},"4":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"18":{},"25":{},"37":{},"38":{},"39":{},"41":{},"50":{},"58":{},"64":{},"65":{},"66":{},"68":{},"73":{},"74":{},"75":{},"79":{},"80":{}},"component":{}}],["systemat",{"_index":3167,"title":{},"name":{},"text":{"64":{}},"component":{}}],["system’",{"_index":3148,"title":{},"name":{},"text":{"64":{}},"component":{}}],["t",{"_index":1361,"title":{},"name":{},"text":{"13":{},"61":{},"76":{}},"component":{}}],["tab",{"_index":1339,"title":{},"name":{},"text":{"13":{}},"component":{}}],["tabl",{"_index":1034,"title":{"49-1":{}},"name":{},"text":{"8":{},"18":{},"29":{},"35":{},"38":{},"41":{},"42":{},"43":{},"47":{},"48":{},"53":{},"61":{},"62":{},"67":{},"69":{},"78":{}},"component":{}}],["tag",{"_index":882,"title":{},"name":{},"text":{"7":{},"9":{},"64":{}},"component":{}}],["tailor",{"_index":914,"title":{},"name":{},"text":{"7":{},"83":{}},"component":{}}],["take",{"_index":1776,"title":{},"name":{},"text":{"31":{},"34":{},"41":{},"50":{},"56":{},"58":{},"60":{},"61":{},"62":{},"64":{},"68":{},"69":{},"72":{},"78":{}},"component":{}}],["taken",{"_index":872,"title":{},"name":{},"text":{"7":{},"39":{},"61":{},"75":{},"77":{}},"component":{}}],["tandem",{"_index":3174,"title":{},"name":{},"text":{"64":{}},"component":{}}],["target",{"_index":490,"title":{},"name":{},"text":{"4":{},"18":{},"27":{},"62":{},"65":{}},"component":{}}],["target.starknet",{"_index":1249,"title":{},"name":{},"text":{"11":{}},"component":{}}],["target/dev",{"_index":1252,"title":{},"name":{},"text":{"11":{}},"component":{}}],["target/dev/.json",{"_index":1262,"title":{},"name":{},"text":{"11":{}},"component":{}}],["target/dev/contracts_ownable.sierra.json",{"_index":1286,"title":{},"name":{},"text":{"11":{}},"component":{}}],["task",{"_index":851,"title":{},"name":{},"text":{"7":{},"8":{},"64":{},"69":{}},"component":{}}],["tax",{"_index":712,"title":{},"name":{},"text":{"4":{}},"component":{}}],["tcontractst",{"_index":2802,"title":{},"name":{},"text":{"58":{},"72":{},"76":{}},"component":{}}],["team",{"_index":524,"title":{},"name":{},"text":{"4":{},"7":{},"29":{},"43":{},"54":{},"69":{},"83":{}},"component":{}}],["technic",{"_index":631,"title":{},"name":{},"text":{"4":{},"18":{},"29":{},"41":{}},"component":{}}],["technolog",{"_index":467,"title":{},"name":{},"text":{"4":{},"7":{},"64":{}},"component":{}}],["telegram",{"_index":3701,"title":{},"name":{},"text":{"86":{},"88":{}},"component":{}}],["temporari",{"_index":485,"title":{},"name":{},"text":{"4":{},"9":{},"37":{}},"component":{}}],["temporarili",{"_index":2191,"title":{},"name":{},"text":{"39":{}},"component":{}}],["tempvar",{"_index":3355,"title":{},"name":{},"text":{"68":{}},"component":{}}],["ten",{"_index":510,"title":{},"name":{},"text":{"4":{}},"component":{}}],["term",{"_index":344,"title":{},"name":{},"text":{"3":{},"4":{},"26":{},"35":{},"41":{},"59":{},"61":{},"80":{}},"component":{}}],["termin",{"_index":1203,"title":{},"name":{},"text":{"10":{},"13":{},"14":{}},"component":{}}],["test",{"_index":540,"title":{},"name":{},"text":{"4":{},"9":{},"11":{},"13":{},"38":{},"41":{},"83":{},"88":{},"89":{}},"component":{}}],["test_component::ev",{"_index":3455,"title":{},"name":{},"text":{"72":{}},"component":{}}],["testcounterdecreas",{"_index":3457,"title":{},"name":{},"text":{"72":{}},"component":{}}],["testcounterincreas",{"_index":3456,"title":{},"name":{},"text":{"72":{}},"component":{}}],["testenum",{"_index":3458,"title":{},"name":{},"text":{"72":{}},"component":{}}],["testnet",{"_index":1102,"title":{"13-11":{},"13-12":{},"46-2":{}},"name":{},"text":{"9":{},"12":{},"13":{},"16":{},"32":{},"35":{},"36":{},"37":{},"39":{},"41":{},"44":{},"46":{},"47":{},"58":{},"67":{},"77":{},"88":{}},"component":{}}],["testnet/mainnet",{"_index":3672,"title":{},"name":{},"text":{"83":{}},"component":{}}],["testnet2",{"_index":2213,"title":{},"name":{},"text":{"39":{}},"component":{}}],["tether",{"_index":1723,"title":{},"name":{},"text":{"29":{}},"component":{}}],["text",{"_index":335,"title":{},"name":{},"text":{"3":{},"16":{},"39":{},"65":{}},"component":{}}],["text{\"starknet_state_diff0",{"_index":2877,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{account}_1",{"_index":2873,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{account}_k",{"_index":2875,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{cairoresourcefeeweights}_k",{"_index":3042,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{contract_update_discount",{"_index":3004,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{contract_update_discount}\\cdot",{"_index":2997,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{current_block",{"_index":3253,"title":{},"name":{},"text":{"65":{}},"component":{}}],["text{da_calldata_cost",{"_index":3000,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{da_calldata_cost}\\left",{"_index":2995,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{data",{"_index":2901,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{declared_class_hash}_1",{"_index":2865,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{declared_class_hash}_d",{"_index":2867,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{declared_compiled_class_hash}_1",{"_index":2866,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{declared_compiled_class_hash}_d",{"_index":2868,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{deployed_address}_1",{"_index":2861,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{deployed_address}_\\el",{"_index":2863,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{deployed_class_hash}_1",{"_index":2862,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{deployed_class_hash}_\\el",{"_index":2864,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{emitter_address",{"_index":2904,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{felt_size_in_byt",{"_index":2993,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{first_v0_12_0_block",{"_index":3252,"title":{},"name":{},"text":{"65":{}},"component":{}}],["text{from}_1",{"_index":2891,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{from}_n",{"_index":2895,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{had",{"_index":2704,"title":{},"name":{},"text":{"50":{}},"component":{}}],["text{hades}:\\mathbb{f}_p^3\\rightarrow\\mathbb{f}_p^3",{"_index":2691,"title":{},"name":{},"text":{"50":{}},"component":{}}],["text{if",{"_index":2702,"title":{},"name":{},"text":{"50":{},"65":{}},"component":{}}],["text{index}_1",{"_index":3400,"title":{},"name":{},"text":{"70":{}},"component":{}}],["text{index}_n",{"_index":3402,"title":{},"name":{},"text":{"70":{}},"component":{}}],["text{key",{"_index":2900,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{l1_log_data_cost",{"_index":2972,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{l1_log_data_cost}\\cdot\\text{payload_s",{"_index":3072,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{l1_storage_write_cost",{"_index":2989,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{l1_storage_write_cost}+\\text{log_message_to_l1_cost}\\right",{"_index":2976,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{l2_payload_cost",{"_index":2992,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{l2_payload_costs}\\bigg",{"_index":2977,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{log_message_to_l1_cost",{"_index":2990,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{max_amount",{"_index":3258,"title":{},"name":{},"text":{"66":{}},"component":{}}],["text{max_price_per_unit",{"_index":3259,"title":{},"name":{},"text":{"66":{}},"component":{}}],["text{message_calldata_cost",{"_index":2971,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{message_calldata_cost}\\cdot",{"_index":2969,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{message_calldata_cost}\\cdot\\left",{"_index":3070,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{message_cost",{"_index":3069,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{new_class_hash}_1",{"_index":2870,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{new_class_hash}_r",{"_index":2872,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{new_nonce}_1",{"_index":2874,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{new_nonce}_k",{"_index":2876,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{new_nonce}_k\\big",{"_index":2882,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{otherwis",{"_index":3230,"title":{},"name":{},"text":{"65":{}},"component":{}}],["text{payload}_1",{"_index":2893,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{payload}_n",{"_index":2897,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{pedersen",{"_index":2644,"title":{},"name":{},"text":{"50":{}},"component":{}}],["text{poseidon",{"_index":2646,"title":{},"name":{},"text":{"50":{}},"component":{}}],["text{poseidon_1",{"_index":2679,"title":{},"name":{},"text":{"50":{}},"component":{}}],["text{poseidon_2",{"_index":2682,"title":{},"name":{},"text":{"50":{}},"component":{}}],["text{replaced_contract_address}_1",{"_index":2869,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{replaced_contract_address}_r",{"_index":2871,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{rewards_const",{"_index":1654,"title":{},"name":{},"text":{"26":{}},"component":{}}],["text{selector}_1",{"_index":3399,"title":{},"name":{},"text":{"70":{}},"component":{}}],["text{selector}_n",{"_index":3401,"title":{},"name":{},"text":{"70":{}},"component":{}}],["text{signatur",{"_index":2837,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{sn_keccak",{"_index":2642,"title":{},"name":{},"text":{"50":{},"79":{}},"component":{}}],["text{stak",{"_index":1656,"title":{},"name":{},"text":{"26":{}},"component":{}}],["text{stake_deleg",{"_index":1657,"title":{},"name":{},"text":{"26":{}},"component":{}}],["text{string_in_math_not",{"_index":360,"title":{},"name":{},"text":{"3":{}},"component":{}}],["text{time_interv",{"_index":1655,"title":{},"name":{},"text":{"26":{}},"component":{}}],["text{total_stake_deleg",{"_index":1652,"title":{},"name":{},"text":{"26":{}},"component":{}}],["text{to}_1",{"_index":2892,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{to}_n",{"_index":2896,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{tracecells}[tx]/l",{"_index":3025,"title":{},"name":{},"text":{"61":{}},"component":{}}],["text{transaction_hash",{"_index":2836,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{tx_hash",{"_index":2905,"title":{},"name":{},"text":{"59":{}},"component":{}}],["text{valid",{"_index":1650,"title":{},"name":{},"text":{"26":{}},"component":{}}],["th",{"_index":2685,"title":{},"name":{},"text":{"50":{}},"component":{}}],["thank",{"_index":2251,"title":{},"name":{},"text":{"39":{},"53":{},"68":{}},"component":{}}],["that’",{"_index":3190,"title":{},"name":{},"text":{"64":{}},"component":{}}],["the`validate_deploy",{"_index":2479,"title":{},"name":{},"text":{"41":{}},"component":{}}],["themselv",{"_index":1580,"title":{},"name":{},"text":{"18":{},"39":{},"72":{}},"component":{}}],["theoret",{"_index":1663,"title":{},"name":{},"text":{"26":{}},"component":{}}],["theori",{"_index":666,"title":{},"name":{},"text":{"4":{}},"component":{}}],["therebi",{"_index":1469,"title":{},"name":{},"text":{"14":{},"56":{},"64":{}},"component":{}}],["therefor",{"_index":615,"title":{},"name":{},"text":{"4":{},"29":{},"39":{},"47":{},"58":{},"60":{},"61":{},"80":{}},"component":{}}],["they’r",{"_index":1302,"title":{},"name":{},"text":{"12":{}},"component":{}}],["thing",{"_index":3328,"title":{},"name":{},"text":{"68":{}},"component":{}}],["think",{"_index":1232,"title":{},"name":{},"text":{"11":{},"12":{},"53":{},"58":{},"79":{},"88":{}},"component":{}}],["third",{"_index":623,"title":{},"name":{},"text":{"4":{},"16":{}},"component":{}}],["those",{"_index":546,"title":{},"name":{},"text":{"4":{},"7":{},"30":{},"34":{},"41":{},"54":{},"56":{},"58":{},"60":{},"67":{},"71":{},"79":{}},"component":{}}],["though",{"_index":1301,"title":{},"name":{},"text":{"12":{},"35":{},"68":{}},"component":{}}],["three",{"_index":2350,"title":{},"name":{},"text":{"41":{},"50":{},"61":{},"64":{},"65":{},"69":{},"78":{},"79":{},"80":{}},"component":{}}],["threshold",{"_index":495,"title":{},"name":{},"text":{"4":{},"26":{}},"component":{}}],["through",{"_index":422,"title":{},"name":{},"text":{"4":{},"7":{},"8":{},"9":{},"13":{},"21":{},"23":{},"34":{},"39":{},"56":{},"58":{},"63":{},"64":{},"67":{},"68":{},"70":{},"75":{},"76":{}},"component":{}}],["throughout",{"_index":2641,"title":{},"name":{},"text":{"50":{},"53":{},"61":{},"79":{}},"component":{}}],["throughput",{"_index":806,"title":{},"name":{},"text":{"6":{},"38":{}},"component":{}}],["thu",{"_index":2734,"title":{},"name":{},"text":{"53":{},"60":{}},"component":{}}],["thwart",{"_index":3496,"title":{},"name":{},"text":{"73":{}},"component":{}}],["time",{"_index":370,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"11":{},"19":{},"22":{},"26":{},"31":{},"34":{},"35":{},"38":{},"39":{},"41":{},"45":{},"47":{},"53":{},"59":{},"61":{},"62":{},"63":{},"64":{},"77":{},"78":{},"80":{}},"component":{}}],["timelin",{"_index":2294,"title":{},"name":{},"text":{"39":{}},"component":{}}],["timestamp",{"_index":2142,"title":{},"name":{},"text":{"39":{},"41":{},"59":{},"63":{},"77":{},"88":{}},"component":{}}],["tip",{"_index":3288,"title":{},"name":{},"text":{"67":{},"77":{}},"component":{}}],["titl",{"_index":345,"title":{},"name":{},"text":{"3":{}},"component":{}}],["tlsv1.2",{"_index":1280,"title":{},"name":{},"text":{"11":{},"14":{}},"component":{}}],["to_address",{"_index":1168,"title":{},"name":{},"text":{"9":{},"62":{},"66":{},"80":{}},"component":{}}],["to_address.into",{"_index":3090,"title":{},"name":{},"text":{"62":{}},"component":{}}],["to_pool",{"_index":1685,"title":{},"name":{},"text":{"27":{}},"component":{}}],["to_stak",{"_index":1684,"title":{},"name":{},"text":{"27":{}},"component":{}}],["toaddress",{"_index":3098,"title":{},"name":{},"text":{"62":{},"63":{}},"component":{}}],["today",{"_index":454,"title":{},"name":{},"text":{"4":{},"9":{},"41":{},"56":{},"61":{}},"component":{}}],["todo",{"_index":1625,"title":{},"name":{},"text":{"22":{}},"component":{}}],["togeth",{"_index":201,"title":{},"name":{},"text":{"1":{},"7":{},"41":{},"64":{}},"component":{}}],["toggl",{"_index":3733,"title":{},"name":{},"text":{"89":{}},"component":{}}],["token",{"_index":392,"title":{"4":{},"28":{},"44":{},"4-2":{},"35-2":{},"46-3":{},"46-4":{}},"name":{"28":{},"44":{},"45":{}},"text":{"4":{},"9":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"26":{},"27":{},"28":{},"29":{},"32":{},"34":{},"35":{},"36":{},"44":{},"45":{},"46":{},"56":{},"61":{},"62":{}},"component":{}}],["token_bridge.cairo",{"_index":1693,"title":{},"name":{},"text":{"29":{},"34":{}},"component":{}}],["token_bridge_interface.cairo",{"_index":1817,"title":{},"name":{},"text":{"34":{}},"component":{}}],["tokenenrollmentiniti",{"_index":1830,"title":{},"name":{},"text":{"34":{}},"component":{}}],["tokenom",{"_index":397,"title":{},"name":{},"text":{"4":{}},"component":{}}],["tokenstatu",{"_index":1833,"title":{},"name":{},"text":{"34":{}},"component":{}}],["token’",{"_index":1873,"title":{},"name":{},"text":{"35":{}},"component":{}}],["toluwalopeayo",{"_index":1984,"title":{},"name":{},"text":{"38":{}},"component":{}}],["tool",{"_index":297,"title":{"81":{},"85":{},"87":{},"2-5":{}},"name":{"88":{}},"text":{"2":{},"6":{},"10":{},"13":{},"14":{},"21":{},"22":{},"37":{},"41":{},"49":{},"81":{},"85":{},"88":{},"89":{}},"component":{}}],["toolchain",{"_index":1460,"title":{},"name":{},"text":{"14":{},"88":{}},"component":{}}],["toolkit",{"_index":3667,"title":{},"name":{},"text":{"82":{},"87":{}},"component":{}}],["top",{"_index":160,"title":{},"name":{},"text":{"1":{},"4":{},"38":{},"56":{},"68":{}},"component":{}}],["topic",{"_index":346,"title":{},"name":{},"text":{"3":{},"6":{},"7":{},"8":{},"13":{},"61":{},"67":{},"80":{}},"component":{}}],["total",{"_index":575,"title":{},"name":{},"text":{"4":{},"18":{},"24":{},"26":{},"29":{},"35":{},"61":{},"66":{}},"component":{}}],["total_gas_consum",{"_index":2349,"title":{},"name":{},"text":{"41":{}},"component":{}}],["total_suppli",{"_index":3519,"title":{},"name":{},"text":{"75":{}},"component":{}}],["touch",{"_index":3522,"title":{},"name":{},"text":{"76":{}},"component":{}}],["toward",{"_index":3147,"title":{},"name":{},"text":{"64":{}},"component":{}}],["trace",{"_index":32,"title":{"1-27":{}},"name":{},"text":{"1":{},"7":{},"38":{},"39":{},"41":{},"61":{},"64":{},"69":{},"89":{}},"component":{}}],["track",{"_index":758,"title":{},"name":{},"text":{"6":{},"13":{},"18":{},"39":{},"60":{},"61":{},"64":{}},"component":{}}],["tradeoff",{"_index":3192,"title":{},"name":{},"text":{"64":{},"80":{}},"component":{}}],["tradit",{"_index":3250,"title":{},"name":{},"text":{"65":{},"74":{}},"component":{}}],["trail",{"_index":2578,"title":{},"name":{},"text":{"43":{}},"component":{}}],["train",{"_index":884,"title":{},"name":{},"text":{"7":{}},"component":{}}],["trait",{"_index":1355,"title":{},"name":{},"text":{"13":{},"58":{},"72":{},"76":{}},"component":{}}],["transact",{"_index":30,"title":{"57":{},"61":{},"66":{},"67":{},"1-25":{},"35-9":{},"53-4":{},"53-5":{},"61-1":{},"61-2":{},"61-3":{},"61-5":{},"61-6":{},"61-7":{},"62-9":{},"64-1":{},"64-7":{},"66-1":{},"66-2":{},"66-3":{},"66-4":{},"67-1":{},"67-2":{},"67-3":{},"67-5":{},"67-8":{},"67-9":{},"67-11":{},"67-13":{},"67-16":{},"67-17":{},"67-19":{},"67-21":{},"67-23":{},"68-3":{},"77-3":{}},"name":{"57":{},"66":{},"67":{}},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"8":{},"9":{},"12":{},"13":{},"15":{},"16":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"27":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"47":{},"48":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"70":{},"71":{},"73":{},"74":{},"77":{},"78":{},"79":{},"80":{},"86":{},"87":{}},"component":{}}],["transaction.commit",{"_index":1940,"title":{},"name":{},"text":{"38":{}},"component":{}}],["transaction_count",{"_index":2828,"title":{},"name":{},"text":{"59":{}},"component":{}}],["transaction_hash",{"_index":1175,"title":{},"name":{},"text":{"9":{},"13":{},"59":{},"66":{},"77":{}},"component":{}}],["transactions_commit",{"_index":2833,"title":{},"name":{},"text":{"59":{}},"component":{}}],["transactionstorag",{"_index":2056,"title":{},"name":{},"text":{"38":{}},"component":{}}],["transaction’",{"_index":2740,"title":{},"name":{},"text":{"53":{},"61":{},"62":{},"66":{},"67":{},"77":{}},"component":{}}],["transfer",{"_index":607,"title":{"13-10":{},"35-3":{},"35-6":{},"35-7":{},"35-10":{}},"name":{},"text":{"4":{},"13":{},"15":{},"18":{},"19":{},"21":{},"22":{},"24":{},"27":{},"30":{},"32":{},"34":{},"35":{},"36":{},"41":{},"61":{},"62":{},"66":{},"72":{},"79":{}},"component":{}}],["transfer_from",{"_index":3446,"title":{},"name":{},"text":{"72":{}},"component":{}}],["transfer_ownership",{"_index":1358,"title":{},"name":{},"text":{"13":{},"15":{}},"component":{}}],["transform",{"_index":2915,"title":{},"name":{},"text":{"60":{}},"component":{}}],["transit",{"_index":265,"title":{"65-1":{}},"name":{},"text":{"1":{},"15":{},"39":{},"41":{},"45":{},"65":{},"72":{}},"component":{}}],["translat",{"_index":286,"title":{},"name":{},"text":{"1":{},"68":{}},"component":{}}],["transmit",{"_index":1078,"title":{},"name":{},"text":{"8":{},"66":{}},"component":{}}],["transport",{"_index":817,"title":{},"name":{},"text":{"7":{},"39":{}},"component":{}}],["travers",{"_index":3223,"title":{},"name":{},"text":{"65":{}},"component":{}}],["treasuri",{"_index":562,"title":{},"name":{},"text":{"4":{}},"component":{}}],["treat",{"_index":2936,"title":{},"name":{},"text":{"60":{},"70":{}},"component":{}}],["tree",{"_index":2342,"title":{},"name":{},"text":{"41":{},"64":{},"65":{}},"component":{}}],["tri",{"_index":3207,"title":{},"name":{},"text":{"65":{}},"component":{}}],["trie",{"_index":2088,"title":{"65-3":{},"65-4":{},"65-5":{},"65-7":{},"65-8":{},"65-9":{}},"name":{},"text":{"38":{},"59":{},"65":{}},"component":{}}],["trie’",{"_index":3213,"title":{},"name":{},"text":{"65":{}},"component":{}}],["trigger",{"_index":309,"title":{"35-5":{}},"name":{"47":{}},"text":{"2":{},"7":{},"30":{},"34":{},"35":{},"62":{}},"component":{}}],["triplet",{"_index":3218,"title":{},"name":{},"text":{"65":{}},"component":{}}],["trivial",{"_index":3554,"title":{},"name":{},"text":{"78":{}},"component":{}}],["true",{"_index":130,"title":{},"name":{},"text":{"1":{},"10":{},"11":{},"21":{},"30":{},"34":{},"58":{},"68":{},"70":{},"74":{},"80":{}},"component":{}}],["truncat",{"_index":2131,"title":{},"name":{},"text":{"39":{}},"component":{}}],["trust",{"_index":2258,"title":{},"name":{},"text":{"39":{},"49":{},"64":{}},"component":{}}],["truth",{"_index":925,"title":{},"name":{},"text":{"8":{}},"component":{}}],["tupl",{"_index":2495,"title":{},"name":{},"text":{"41":{},"50":{},"75":{},"78":{},"80":{}},"component":{}}],["ture",{"_index":3327,"title":{},"name":{},"text":{"68":{},"85":{}},"component":{}}],["turn",{"_index":662,"title":{},"name":{},"text":{"4":{},"8":{},"39":{}},"component":{}}],["tutori",{"_index":1343,"title":{},"name":{},"text":{"13":{}},"component":{}}],["tvl",{"_index":1745,"title":{},"name":{},"text":{"29":{}},"component":{}}],["twice",{"_index":3074,"title":{},"name":{},"text":{"61":{},"69":{}},"component":{}}],["two",{"_index":282,"title":{},"name":{},"text":{"1":{},"6":{},"7":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"26":{},"29":{},"34":{},"41":{},"45":{},"53":{},"54":{},"56":{},"58":{},"60":{},"61":{},"63":{},"64":{},"65":{},"66":{},"69":{},"72":{},"78":{},"79":{},"80":{}},"component":{}}],["tx",{"_index":3023,"title":{},"name":{},"text":{"61":{},"65":{},"77":{}},"component":{}}],["tx_hash",{"_index":2903,"title":{},"name":{},"text":{"59":{}},"component":{}}],["tx_info",{"_index":3535,"title":{},"name":{},"text":{"77":{}},"component":{}}],["tx_statu",{"_index":1096,"title":{"9-16":{}},"name":{},"text":{"9":{}},"component":{}}],["txinfo",{"_index":3531,"title":{"77-3":{}},"name":{},"text":{"77":{}},"component":{}}],["txn",{"_index":1971,"title":{},"name":{},"text":{"38":{}},"component":{}}],["txn_hash_not_found",{"_index":2193,"title":{},"name":{},"text":{"39":{}},"component":{}}],["type",{"_index":275,"title":{"67":{},"78":{},"58-4":{},"72-5":{},"78-1":{},"78-2":{}},"name":{"78":{}},"text":{"1":{},"3":{},"6":{},"16":{},"34":{},"38":{},"39":{},"41":{},"51":{},"53":{},"54":{},"55":{},"58":{},"59":{},"61":{},"62":{},"64":{},"66":{},"67":{},"69":{},"71":{},"72":{},"76":{},"78":{},"79":{},"80":{}},"component":{}}],["typefac",{"_index":364,"title":{},"name":{},"text":{"3":{}},"component":{}}],["typescript",{"_index":3665,"title":{},"name":{},"text":{"82":{}},"component":{}}],["typic",{"_index":99,"title":{},"name":{},"text":{"1":{},"8":{},"13":{},"56":{},"64":{}},"component":{}}],["u128",{"_index":2841,"title":{},"name":{},"text":{"59":{},"72":{},"76":{},"77":{},"78":{}},"component":{}}],["u16",{"_index":3545,"title":{},"name":{},"text":{"78":{}},"component":{}}],["u256",{"_index":1854,"title":{"78-4":{}},"name":{},"text":{"34":{},"75":{},"78":{},"79":{}},"component":{}}],["u32",{"_index":2374,"title":{},"name":{},"text":{"41":{},"59":{},"77":{},"78":{},"80":{}},"component":{}}],["u512",{"_index":3542,"title":{"78-5":{}},"name":{},"text":{"78":{}},"component":{}}],["u64",{"_index":2823,"title":{},"name":{},"text":{"59":{},"77":{},"78":{},"80":{}},"component":{}}],["u8",{"_index":3518,"title":{},"name":{},"text":{"75":{},"78":{}},"component":{}}],["udc",{"_index":1521,"title":{"58":{},"58-1":{},"58-3":{},"58-7":{}},"name":{},"text":{"17":{},"55":{},"58":{}},"component":{}}],["udc.deploycontract",{"_index":2818,"title":{},"name":{},"text":{"58":{}},"component":{}}],["udc_address",{"_index":2804,"title":{},"name":{},"text":{"58":{}},"component":{}}],["udc_address.try_into",{"_index":2806,"title":{},"name":{},"text":{"58":{}},"component":{}}],["udc’",{"_index":2814,"title":{},"name":{},"text":{"58":{}},"component":{}}],["ui",{"_index":2593,"title":{},"name":{},"text":{"45":{},"72":{},"84":{}},"component":{}}],["uint256",{"_index":1793,"title":{},"name":{},"text":{"32":{},"34":{},"36":{},"60":{},"62":{},"63":{}},"component":{}}],["uint256.cairo",{"_index":2482,"title":{},"name":{},"text":{"41":{}},"component":{}}],["uint256_mul_div_mod",{"_index":2481,"title":{},"name":{},"text":{"41":{}},"component":{}}],["uint8",{"_index":2083,"title":{},"name":{},"text":{"38":{}},"component":{}}],["ultim",{"_index":832,"title":{},"name":{},"text":{"7":{},"58":{},"67":{},"78":{}},"component":{}}],["umbrella",{"_index":929,"title":{},"name":{},"text":{"8":{}},"component":{}}],["unaffect",{"_index":2460,"title":{},"name":{},"text":{"41":{}},"component":{}}],["unaffili",{"_index":442,"title":{},"name":{},"text":{"4":{}},"component":{}}],["unanticip",{"_index":695,"title":{},"name":{},"text":{"4":{}},"component":{}}],["unavail",{"_index":1322,"title":{},"name":{},"text":{"12":{}},"component":{}}],["unbox",{"_index":2737,"title":{},"name":{},"text":{"53":{},"80":{}},"component":{}}],["unclaim",{"_index":1567,"title":{},"name":{},"text":{"18":{},"22":{},"27":{}},"component":{}}],["uncoupl",{"_index":2784,"title":{},"name":{},"text":{"56":{}},"component":{}}],["undeleg",{"_index":1619,"title":{"22-2":{}},"name":{},"text":{"22":{},"27":{}},"component":{}}],["under",{"_index":457,"title":{},"name":{},"text":{"4":{},"8":{},"13":{},"26":{},"41":{},"45":{},"49":{},"58":{},"60":{},"62":{},"72":{},"76":{},"89":{}},"component":{}}],["underbrace{0",{"_index":3572,"title":{},"name":{},"text":{"78":{}},"component":{}}],["underbrace{0\\cdots011}_{\\text{128",{"_index":3561,"title":{},"name":{},"text":{"78":{}},"component":{}}],["underbrace{0\\cdots01}_{\\text{128",{"_index":3559,"title":{},"name":{},"text":{"78":{}},"component":{}}],["underbrace{0\\cdots0}_{\\text{127",{"_index":2922,"title":{},"name":{},"text":{"60":{}},"component":{}}],["underbrace{0\\cdots0}_{\\text{128",{"_index":2941,"title":{},"name":{},"text":{"60":{},"78":{}},"component":{}}],["underbrace{0\\cdots0}_{\\text{188",{"_index":3297,"title":{},"name":{},"text":{"67":{}},"component":{}}],["underbrace{0\\cdots10100}_{\\text{128",{"_index":3562,"title":{},"name":{},"text":{"78":{}},"component":{}}],["underbrace{0\\cdots10}_{\\text{128",{"_index":3558,"title":{},"name":{},"text":{"78":{}},"component":{}}],["underbrace{10",{"_index":3568,"title":{},"name":{},"text":{"78":{}},"component":{}}],["underbrace{20",{"_index":3570,"title":{},"name":{},"text":{"78":{}},"component":{}}],["underbrace{3}_{\\textit{number_of_array_memb",{"_index":3567,"title":{},"name":{},"text":{"78":{}},"component":{}}],["underbrace{\\text",{"_index":2927,"title":{},"name":{},"text":{"60":{}},"component":{}}],["underbrace{\\textit{gas_pric",{"_index":3054,"title":{},"name":{},"text":{"61":{}},"component":{}}],["underbrace{\\textit{gas_price}\\left",{"_index":3052,"title":{},"name":{},"text":{"61":{}},"component":{}}],["underbrace{\\text{class",{"_index":2923,"title":{},"name":{},"text":{"60":{}},"component":{}}],["underbrace{\\text{fee_data_availability_mode}}_{\\text{32",{"_index":3299,"title":{},"name":{},"text":{"67":{}},"component":{}}],["underbrace{\\text{l1_gas}}_{\\text{60",{"_index":3293,"title":{},"name":{},"text":{"67":{}},"component":{}}],["underbrace{\\text{l2_gas}}_{\\text{60",{"_index":3296,"title":{},"name":{},"text":{"67":{}},"component":{}}],["underbrace{\\text{max_amount}}_{\\text{64",{"_index":3294,"title":{},"name":{},"text":{"67":{}},"component":{}}],["underbrace{\\text{max_price_per_unit}}_{\\text{128",{"_index":3295,"title":{},"name":{},"text":{"67":{}},"component":{}}],["underbrace{\\text{new",{"_index":2925,"title":{},"name":{},"text":{"60":{}},"component":{}}],["underbrace{\\text{nonce_data_availability_mode}}_{\\text{32",{"_index":3298,"title":{},"name":{},"text":{"67":{}},"component":{}}],["underdocu",{"_index":2188,"title":{},"name":{},"text":{"39":{}},"component":{}}],["undergo",{"_index":3275,"title":{},"name":{},"text":{"67":{},"71":{}},"component":{}}],["underli",{"_index":153,"title":{},"name":{},"text":{"1":{},"4":{},"64":{},"70":{}},"component":{}}],["understand",{"_index":416,"title":{},"name":{},"text":{"4":{},"49":{},"68":{},"71":{},"78":{}},"component":{}}],["underw",{"_index":3476,"title":{},"name":{},"text":{"72":{}},"component":{}}],["unexpectedli",{"_index":2284,"title":{},"name":{},"text":{"39":{}},"component":{}}],["unfortun",{"_index":2279,"title":{},"name":{},"text":{"39":{}},"component":{}}],["unhappi",{"_index":3364,"title":{},"name":{},"text":{"68":{}},"component":{}}],["uni",{"_index":1738,"title":{},"name":{},"text":{"29":{}},"component":{}}],["unifi",{"_index":3525,"title":{},"name":{},"text":{"76":{}},"component":{}}],["uniform",{"_index":771,"title":{},"name":{},"text":{"6":{}},"component":{}}],["unilater",{"_index":451,"title":{},"name":{},"text":{"4":{}},"component":{}}],["uniniti",{"_index":3574,"title":{},"name":{},"text":{"78":{}},"component":{}}],["uninterrupt",{"_index":671,"title":{},"name":{},"text":{"4":{}},"component":{}}],["uniqu",{"_index":72,"title":{},"name":{},"text":{"1":{},"8":{},"11":{},"12":{},"13":{},"29":{},"49":{},"53":{},"54":{},"58":{},"61":{},"65":{},"71":{},"73":{},"74":{}},"component":{}}],["uniswap",{"_index":1737,"title":{},"name":{},"text":{"29":{}},"component":{}}],["unit",{"_index":82,"title":{"61-9":{}},"name":{},"text":{"1":{},"34":{},"67":{},"69":{},"77":{},"78":{}},"component":{}}],["univers",{"_index":568,"title":{"58":{},"89-1":{}},"name":{"58":{}},"text":{"4":{},"17":{},"55":{},"58":{},"89":{}},"component":{}}],["unix",{"_index":2827,"title":{},"name":{},"text":{"59":{},"77":{}},"component":{}}],["unknown",{"_index":726,"title":{},"name":{},"text":{"4":{},"34":{}},"component":{}}],["unless",{"_index":603,"title":{},"name":{},"text":{"4":{},"41":{},"64":{}},"component":{}}],["unlik",{"_index":1482,"title":{},"name":{},"text":{"15":{},"37":{},"62":{},"65":{}},"component":{}}],["unlimit",{"_index":2201,"title":{},"name":{},"text":{"39":{}},"component":{}}],["unlock",{"_index":579,"title":{},"name":{},"text":{"4":{},"88":{}},"component":{}}],["unnecessari",{"_index":2518,"title":{},"name":{},"text":{"41":{}},"component":{}}],["unprefix",{"_index":2189,"title":{},"name":{},"text":{"39":{}},"component":{}}],["unprocess",{"_index":784,"title":{},"name":{},"text":{"6":{}},"component":{}}],["unprov",{"_index":3338,"title":{},"name":{},"text":{"68":{}},"component":{}}],["unproven",{"_index":668,"title":{},"name":{},"text":{"4":{}},"component":{}}],["unrecover",{"_index":688,"title":{},"name":{},"text":{"4":{}},"component":{}}],["unregist",{"_index":2190,"title":{},"name":{},"text":{"39":{}},"component":{}}],["unrel",{"_index":3464,"title":{},"name":{},"text":{"72":{}},"component":{}}],["unsatisfi",{"_index":3322,"title":{"68-3":{}},"name":{},"text":{},"component":{}}],["unsign",{"_index":3541,"title":{"78-3":{}},"name":{},"text":{"78":{}},"component":{}}],["unstak",{"_index":1563,"title":{"22-1":{}},"name":{},"text":{"18":{},"22":{},"26":{}},"component":{}}],["unstake/undeleg",{"_index":1631,"title":{},"name":{},"text":{"24":{}},"component":{}}],["unstake_act",{"_index":1577,"title":{},"name":{},"text":{"18":{},"22":{}},"component":{}}],["unstake_int",{"_index":1575,"title":{},"name":{},"text":{"18":{},"22":{}},"component":{}}],["unstaking/undeleg",{"_index":1633,"title":{},"name":{},"text":{"24":{}},"component":{}}],["unsupport",{"_index":1879,"title":{"37":{},"37-2":{},"67-15":{},"67-21":{}},"name":{},"text":{"37":{},"62":{},"67":{}},"component":{}}],["until",{"_index":836,"title":{},"name":{},"text":{"7":{},"39":{},"62":{},"66":{},"74":{}},"component":{}}],["untouch",{"_index":2982,"title":{},"name":{},"text":{"61":{}},"component":{}}],["unus",{"_index":1225,"title":{},"name":{},"text":{"10":{}},"component":{}}],["unwrap",{"_index":2807,"title":{},"name":{},"text":{"58":{},"62":{}},"component":{}}],["unwrap_syscal",{"_index":3608,"title":{},"name":{},"text":{"79":{},"80":{}},"component":{}}],["up",{"_index":302,"title":{"14":{},"16":{},"13-1":{},"13-12":{}},"name":{"16":{}},"text":{"2":{},"4":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"17":{},"29":{},"34":{},"35":{},"50":{},"53":{},"61":{},"64":{},"66":{},"68":{},"77":{},"82":{}},"component":{}}],["upcom",{"_index":803,"title":{"40":{}},"name":{"40":{}},"text":{"6":{},"13":{},"38":{},"39":{},"41":{}},"component":{}}],["updat",{"_index":247,"title":{"25-3":{},"38-15":{},"40-1":{},"41-13":{},"41-22":{},"61-16":{}},"name":{},"text":{"1":{},"4":{},"6":{},"8":{},"18":{},"23":{},"24":{},"25":{},"29":{},"34":{},"35":{},"36":{},"38":{},"39":{},"40":{},"41":{},"47":{},"53":{},"59":{},"60":{},"61":{},"62":{},"64":{},"65":{},"66":{},"71":{},"80":{},"85":{},"86":{}},"component":{}}],["update_commiss",{"_index":1635,"title":{},"name":{},"text":{"25":{}},"component":{}}],["update_total_suppli",{"_index":1596,"title":{},"name":{},"text":{"18":{}},"component":{}}],["updatest",{"_index":1086,"title":{},"name":{},"text":{"8":{}},"component":{}}],["updates}}_{\\text{64",{"_index":2928,"title":{},"name":{},"text":{"60":{}},"component":{}}],["upgrad",{"_index":1022,"title":{"18-6":{}},"name":{},"text":{"8":{},"14":{},"18":{},"38":{},"39":{},"41":{},"45":{}},"component":{}}],["upload",{"_index":3716,"title":{},"name":{},"text":{"88":{}},"component":{}}],["upon",{"_index":264,"title":{},"name":{},"text":{"1":{},"4":{},"6":{},"17":{},"20":{},"27":{},"30":{},"34":{},"55":{},"58":{},"62":{}},"component":{}}],["url",{"_index":389,"title":{},"name":{},"text":{"3":{},"9":{},"39":{},"43":{},"46":{},"48":{}},"component":{}}],["us",{"_index":53,"title":{"17":{},"17-2":{},"17-3":{}},"name":{},"text":{"1":{},"2":{},"4":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"29":{},"30":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"42":{},"44":{},"45":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"58":{},"59":{},"60":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"88":{},"89":{},"90":{}},"component":{}}],["usabl",{"_index":2484,"title":{},"name":{},"text":{"41":{},"49":{},"56":{}},"component":{}}],["usag",{"_index":413,"title":{"10-1":{},"71-2":{}},"name":{},"text":{"4":{},"14":{},"38":{},"41":{},"61":{},"67":{},"77":{}},"component":{}}],["usc",{"_index":3731,"title":{},"name":{},"text":{"89":{}},"component":{}}],["usd",{"_index":1721,"title":{},"name":{},"text":{"29":{}},"component":{}}],["usdc",{"_index":1690,"title":{"29-3":{}},"name":{},"text":{"29":{},"35":{},"36":{}},"component":{}}],["usdt",{"_index":1724,"title":{},"name":{},"text":{"29":{}},"component":{}}],["user",{"_index":38,"title":{"7-4":{}},"name":{},"text":{"1":{},"3":{},"4":{},"6":{},"7":{},"12":{},"16":{},"18":{},"26":{},"29":{},"30":{},"32":{},"34":{},"35":{},"38":{},"39":{},"44":{},"54":{},"56":{},"58":{},"61":{},"62":{},"64":{},"66":{},"67":{},"68":{},"70":{},"77":{}},"component":{}}],["user’",{"_index":1787,"title":{},"name":{},"text":{"32":{},"35":{},"56":{},"68":{}},"component":{}}],["usher",{"_index":3155,"title":{},"name":{},"text":{"64":{}},"component":{}}],["using_devnet",{"_index":1512,"title":{},"name":{"17":{}},"text":{},"component":{}}],["usiz",{"_index":3546,"title":{},"name":{},"text":{"78":{}},"component":{}}],["usual",{"_index":1080,"title":{},"name":{},"text":{"8":{},"50":{},"61":{},"78":{}},"component":{}}],["utc",{"_index":1853,"title":{},"name":{},"text":{"34":{},"53":{},"77":{}},"component":{}}],["utf",{"_index":3389,"title":{},"name":{},"text":{"70":{}},"component":{}}],["util",{"_index":663,"title":{"89":{}},"name":{"89":{}},"text":{"4":{},"7":{},"38":{},"39":{},"49":{},"81":{}},"component":{}}],["v",{"_index":650,"title":{"10-12":{}},"name":{},"text":{"4":{},"10":{},"11":{},"38":{},"41":{},"61":{}},"component":{}}],["v.0.13.0",{"_index":475,"title":{},"name":{},"text":{"4":{}},"component":{}}],["v.0.3.0",{"_index":2077,"title":{},"name":{},"text":{"38":{}},"component":{}}],["v0",{"_index":1727,"title":{"45":{},"67-7":{},"67-15":{}},"name":{},"text":{"29":{},"37":{},"39":{},"45":{},"53":{},"62":{},"67":{},"72":{},"76":{}},"component":{}}],["v0.1",{"_index":2236,"title":{},"name":{},"text":{"39":{}},"component":{}}],["v0.1.0",{"_index":1912,"title":{"38-46":{}},"name":{},"text":{},"component":{}}],["v0.1.0…​v0.2.0",{"_index":2086,"title":{},"name":{},"text":{"38":{}},"component":{}}],["v0.10.0",{"_index":2324,"title":{"41-36":{}},"name":{},"text":{},"component":{}}],["v0.10.1",{"_index":2322,"title":{"41-35":{}},"name":{},"text":{"67":{}},"component":{}}],["v0.10.2",{"_index":2122,"title":{"39-72":{},"41-34":{}},"name":{},"text":{"39":{}},"component":{}}],["v0.10.3",{"_index":1897,"title":{"41-33":{}},"name":{},"text":{"37":{},"38":{},"39":{}},"component":{}}],["v0.11",{"_index":2220,"title":{},"name":{},"text":{"39":{}},"component":{}}],["v0.11.0",{"_index":1882,"title":{"41-32":{},"60-3":{},"60-4":{},"60-5":{},"60-6":{},"60-7":{},"60-8":{}},"name":{},"text":{"37":{},"38":{},"39":{},"41":{},"68":{}},"component":{}}],["v0.11.1",{"_index":2184,"title":{"41-31":{}},"name":{},"text":{"39":{},"41":{}},"component":{}}],["v0.11.2",{"_index":2046,"title":{"41-30":{}},"name":{},"text":{"38":{},"39":{},"41":{}},"component":{}}],["v0.12",{"_index":2133,"title":{},"name":{},"text":{"39":{}},"component":{}}],["v0.12.0",{"_index":2038,"title":{"41-29":{}},"name":{},"text":{"38":{},"39":{},"41":{},"80":{}},"component":{}}],["v0.12.1",{"_index":2012,"title":{"41-28":{}},"name":{},"text":{"38":{},"41":{}},"component":{}}],["v0.12.2",{"_index":2011,"title":{"41-27":{}},"name":{},"text":{"38":{},"41":{}},"component":{}}],["v0.12.3",{"_index":1914,"title":{"41-25":{}},"name":{},"text":{"38":{},"41":{}},"component":{}}],["v0.13.0",{"_index":1881,"title":{"41-24":{}},"name":{},"text":{"37":{},"41":{},"47":{}},"component":{}}],["v0.13.1",{"_index":2305,"title":{"41-11":{}},"name":{},"text":{"41":{},"61":{}},"component":{}}],["v0.13.1.1",{"_index":2304,"title":{"41-10":{}},"name":{},"text":{},"component":{}}],["v0.13.2",{"_index":2301,"title":{"41-2":{}},"name":{},"text":{"41":{}},"component":{}}],["v0.13.3",{"_index":2359,"title":{},"name":{},"text":{"41":{}},"component":{}}],["v0.2",{"_index":2161,"title":{},"name":{},"text":{"39":{}},"component":{}}],["v0.2.0",{"_index":1911,"title":{"38-41":{}},"name":{},"text":{},"component":{}}],["v0.2.0…​v0.2.1",{"_index":2069,"title":{},"name":{},"text":{"38":{}},"component":{}}],["v0.2.1",{"_index":1910,"title":{"38-40":{}},"name":{},"text":{},"component":{}}],["v0.2.1…​v0.2.2",{"_index":2064,"title":{},"name":{},"text":{"38":{}},"component":{}}],["v0.2.2",{"_index":1909,"title":{"38-38":{}},"name":{},"text":{},"component":{}}],["v0.3",{"_index":2162,"title":{},"name":{},"text":{"39":{}},"component":{}}],["v0.3.0",{"_index":1908,"title":{"38-34":{}},"name":{},"text":{},"component":{}}],["v0.3.0…​v0.3.1",{"_index":2045,"title":{},"name":{},"text":{"38":{}},"component":{}}],["v0.3.1",{"_index":1907,"title":{"38-30":{}},"name":{},"text":{"39":{}},"component":{}}],["v0.4",{"_index":2153,"title":{},"name":{},"text":{"39":{}},"component":{}}],["v0.4.0",{"_index":1906,"title":{"38-27":{},"39-70":{}},"name":{},"text":{"38":{}},"component":{}}],["v0.4.1",{"_index":1905,"title":{"38-23":{},"39-61":{}},"name":{},"text":{"39":{}},"component":{}}],["v0.4.2",{"_index":2121,"title":{"39-58":{}},"name":{},"text":{},"component":{}}],["v0.4.3",{"_index":2120,"title":{"39-55":{}},"name":{},"text":{},"component":{}}],["v0.4.4",{"_index":2119,"title":{"39-50":{}},"name":{},"text":{"39":{}},"component":{}}],["v0.4.5",{"_index":2118,"title":{"39-46":{}},"name":{},"text":{},"component":{}}],["v0.5.0",{"_index":1904,"title":{"38-19":{},"39-37":{}},"name":{},"text":{"38":{}},"component":{}}],["v0.5.1",{"_index":1903,"title":{"38-17":{},"39-35":{}},"name":{},"text":{},"component":{}}],["v0.5.2",{"_index":2116,"title":{"39-32":{}},"name":{},"text":{"39":{}},"component":{}}],["v0.5.3",{"_index":2115,"title":{"39-29":{}},"name":{},"text":{},"component":{}}],["v0.5.4",{"_index":2114,"title":{"39-26":{}},"name":{},"text":{},"component":{}}],["v0.6.0",{"_index":1902,"title":{"38-12":{}},"name":{},"text":{"41":{}},"component":{}}],["v0.7.0",{"_index":1900,"title":{"38-6":{}},"name":{},"text":{"67":{}},"component":{}}],["v0.7.3",{"_index":1898,"title":{"38-1":{}},"name":{},"text":{},"component":{}}],["v0.8.0",{"_index":2358,"title":{},"name":{},"text":{"41":{}},"component":{}}],["v0.9.0",{"_index":2327,"title":{"41-38":{}},"name":{},"text":{},"component":{}}],["v0.9.1",{"_index":2326,"title":{"41-37":{}},"name":{},"text":{},"component":{}}],["v0_4",{"_index":1962,"title":{},"name":{},"text":{"38":{}},"component":{}}],["v0_5",{"_index":1961,"title":{},"name":{},"text":{"38":{}},"component":{}}],["v1",{"_index":2427,"title":{"76":{},"67-5":{},"67-6":{},"67-13":{},"67-14":{},"67-19":{},"67-20":{}},"name":{},"text":{"41":{},"55":{},"67":{},"72":{},"76":{}},"component":{}}],["v1.0.0",{"_index":2457,"title":{},"name":{},"text":{"41":{}},"component":{}}],["v1.1.0",{"_index":2164,"title":{},"name":{},"text":{"39":{}},"component":{}}],["v1.4.0",{"_index":2436,"title":{},"name":{},"text":{"41":{}},"component":{}}],["v1.6.0",{"_index":2361,"title":{},"name":{},"text":{"41":{}},"component":{}}],["v2",{"_index":2937,"title":{"76":{},"67-11":{},"67-12":{}},"name":{},"text":{"60":{},"67":{},"72":{},"76":{}},"component":{}}],["v2.0.0",{"_index":1892,"title":{"72-8":{}},"name":{},"text":{"37":{},"39":{},"72":{},"76":{}},"component":{}}],["v2.2.0",{"_index":3452,"title":{},"name":{},"text":{"72":{}},"component":{}}],["v2.3.0",{"_index":3413,"title":{"72-3":{}},"name":{},"text":{"72":{}},"component":{}}],["v2.4.0",{"_index":2438,"title":{},"name":{},"text":{"41":{}},"component":{}}],["v2.7.0",{"_index":2360,"title":{},"name":{},"text":{"41":{}},"component":{}}],["v3",{"_index":2432,"title":{"61-6":{},"67-3":{},"67-4":{},"67-9":{},"67-10":{},"67-17":{},"67-18":{},"67-23":{}},"name":{},"text":{"41":{},"55":{},"61":{},"66":{},"67":{},"84":{}},"component":{}}],["v^1_1",{"_index":2854,"title":{},"name":{},"text":{"59":{}},"component":{}}],["v^1_{m_1",{"_index":2856,"title":{},"name":{},"text":{"59":{}},"component":{}}],["v^n_1",{"_index":2858,"title":{},"name":{},"text":{"59":{}},"component":{}}],["v^n_{m_n",{"_index":2860,"title":{},"name":{},"text":{"59":{}},"component":{}}],["v_k",{"_index":2967,"title":{},"name":{},"text":{"61":{}},"component":{}}],["v_l",{"_index":3234,"title":{},"name":{},"text":{"65":{}},"component":{}}],["v_r",{"_index":3237,"title":{},"name":{},"text":{"65":{}},"component":{}}],["valid",{"_index":118,"title":{"21":{},"22-1":{},"25-1":{},"53-3":{},"64-9":{}},"name":{},"text":{"1":{},"2":{},"6":{},"7":{},"8":{},"10":{},"13":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"35":{},"39":{},"41":{},"47":{},"53":{},"54":{},"55":{},"56":{},"57":{},"60":{},"64":{},"66":{},"67":{},"68":{},"69":{}},"component":{}}],["validate/execut",{"_index":2483,"title":{},"name":{},"text":{"41":{}},"component":{}}],["validate_declar",{"_index":2487,"title":{},"name":{},"text":{"41":{}},"component":{}}],["validate’",{"_index":2743,"title":{},"name":{},"text":{"53":{}},"component":{}}],["validator/deleg",{"_index":1599,"title":{},"name":{},"text":{"19":{},"24":{}},"component":{}}],["validator’",{"_index":1571,"title":{},"name":{},"text":{"18":{},"19":{},"20":{},"21":{},"22":{},"25":{},"27":{}},"component":{}}],["validator’s/delegator’",{"_index":1632,"title":{},"name":{},"text":{"24":{}},"component":{}}],["validli",{"_index":426,"title":{},"name":{},"text":{"4":{}},"component":{}}],["valu",{"_index":162,"title":{"78-4":{},"78-5":{},"80-5":{},"80-12":{},"80-19":{},"80-25":{},"80-31":{},"80-38":{},"80-44":{},"80-51":{},"80-57":{},"80-64":{}},"name":{"51":{}},"text":{"1":{},"3":{},"4":{},"9":{},"11":{},"12":{},"17":{},"26":{},"29":{},"34":{},"35":{},"38":{},"39":{},"41":{},"50":{},"53":{},"55":{},"59":{},"60":{},"61":{},"62":{},"63":{},"65":{},"66":{},"67":{},"68":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"80":{}},"component":{}}],["valuabl",{"_index":322,"title":{},"name":{},"text":{"2":{},"4":{},"7":{},"39":{}},"component":{}}],["var.address",{"_index":3512,"title":{},"name":{},"text":{"75":{}},"component":{}}],["var.read",{"_index":3509,"title":{},"name":{},"text":{"75":{},"80":{}},"component":{}}],["var.writ",{"_index":3511,"title":{},"name":{},"text":{"75":{},"80":{}},"component":{}}],["var/lib/juno",{"_index":2003,"title":{},"name":{},"text":{"38":{}},"component":{}}],["var1",{"_index":3460,"title":{},"name":{},"text":{"72":{}},"component":{}}],["var2",{"_index":3470,"title":{},"name":{},"text":{"72":{}},"component":{}}],["vari",{"_index":1043,"title":{},"name":{},"text":{"8":{},"79":{}},"component":{}}],["variabl",{"_index":348,"title":{"14-2":{},"75-3":{}},"name":{},"text":{"3":{},"9":{},"10":{},"13":{},"14":{},"16":{},"38":{},"39":{},"41":{},"75":{},"78":{},"80":{}},"component":{}}],["variable_nam",{"_index":3513,"title":{},"name":{},"text":{"75":{}},"component":{}}],["variable’",{"_index":3505,"title":{},"name":{},"text":{"75":{}},"component":{}}],["variant",{"_index":1499,"title":{"72-5":{},"72-6":{},"72-7":{}},"name":{},"text":{"16":{},"72":{},"76":{},"78":{}},"component":{}}],["variant’",{"_index":3582,"title":{},"name":{},"text":{"78":{}},"component":{}}],["varieti",{"_index":749,"title":{},"name":{},"text":{"6":{}},"component":{}}],["variou",{"_index":720,"title":{},"name":{},"text":{"4":{},"7":{},"8":{},"13":{},"25":{},"34":{},"35":{},"38":{},"49":{},"69":{},"71":{},"80":{},"86":{},"88":{},"89":{}},"component":{}}],["vast",{"_index":1035,"title":{},"name":{},"text":{"8":{}},"component":{}}],["vastli",{"_index":2788,"title":{},"name":{},"text":{"56":{}},"component":{}}],["vdot",{"_index":2880,"title":{},"name":{},"text":{"59":{}},"component":{}}],["vector",{"_index":2980,"title":{},"name":{},"text":{"61":{}},"component":{}}],["ver",{"_index":2061,"title":{},"name":{},"text":{"38":{}},"component":{}}],["verbos",{"_index":2082,"title":{},"name":{},"text":{"38":{}},"component":{}}],["veri",{"_index":2159,"title":{},"name":{},"text":{"39":{},"50":{},"68":{}},"component":{}}],["verif",{"_index":231,"title":{"8-7":{}},"name":{},"text":{"1":{},"7":{},"8":{},"38":{},"41":{},"53":{},"54":{},"61":{},"64":{},"66":{},"69":{},"71":{},"86":{}},"component":{}}],["verifi",{"_index":34,"title":{"8":{},"1-28":{},"8-2":{},"12-6":{}},"name":{"8":{}},"text":{"1":{},"4":{},"7":{},"8":{},"11":{},"12":{},"13":{},"14":{},"35":{},"38":{},"39":{},"41":{},"46":{},"61":{},"62":{},"64":{},"66":{},"67":{},"68":{},"69":{},"71":{}},"component":{}}],["verifyproofandregist",{"_index":928,"title":{},"name":{},"text":{"8":{}},"component":{}}],["version",{"_index":240,"title":{"40":{},"10-12":{},"39-71":{},"40-1":{},"46-2":{},"61-7":{},"67-1":{}},"name":{"38":{},"39":{},"40":{},"41":{}},"text":{"1":{},"2":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"26":{},"29":{},"34":{},"35":{},"38":{},"39":{},"40":{},"41":{},"42":{},"47":{},"50":{},"53":{},"58":{},"59":{},"60":{},"61":{},"62":{},"65":{},"67":{},"70":{},"71":{},"72":{},"76":{},"77":{},"84":{},"89":{}},"component":{}}],["version.into",{"_index":2738,"title":{},"name":{},"text":{"53":{}},"component":{}}],["version=2.1.0",{"_index":1264,"title":{},"name":{},"text":{"11":{}},"component":{}}],["version=2.6.0",{"_index":1289,"title":{},"name":{},"text":{"11":{}},"component":{}}],["versioned_const",{"_index":2613,"title":{},"name":{},"text":{"47":{}},"component":{}}],["vertic",{"_index":380,"title":{},"name":{},"text":{"3":{}},"component":{}}],["vi",{"_index":655,"title":{},"name":{},"text":{"4":{}},"component":{}}],["via",{"_index":496,"title":{},"name":{},"text":{"4":{},"9":{},"15":{},"35":{},"38":{},"39":{},"53":{},"56":{},"65":{},"68":{},"70":{},"71":{},"72":{},"73":{},"76":{},"80":{},"90":{}},"component":{}}],["view",{"_index":757,"title":{},"name":{},"text":{"6":{},"10":{},"13":{},"32":{},"34":{},"36":{},"39":{},"41":{},"63":{},"72":{},"76":{}},"component":{}}],["viewblock",{"_index":1444,"title":{},"name":{},"text":{"13":{},"48":{}},"component":{}}],["virtual",{"_index":108,"title":{},"name":{},"text":{"1":{},"64":{},"85":{}},"component":{}}],["visibl",{"_index":1449,"title":{"34-4":{},"34-12":{},"34-20":{},"34-29":{},"34-37":{},"34-46":{},"34-55":{},"34-63":{},"34-72":{},"34-81":{},"34-89":{},"34-97":{},"34-105":{},"34-113":{},"34-121":{}},"name":{},"text":{"13":{}},"component":{}}],["visit",{"_index":1294,"title":{},"name":{},"text":{"12":{},"18":{}},"component":{}}],["visual",{"_index":1052,"title":{"90":{}},"name":{},"text":{"8":{},"90":{}},"component":{}}],["vital",{"_index":740,"title":{},"name":{},"text":{"6":{},"7":{},"14":{}},"component":{}}],["vm",{"_index":8,"title":{"1-7":{}},"name":{},"text":{"1":{},"13":{},"38":{},"39":{},"41":{},"51":{},"64":{},"69":{},"78":{},"89":{}},"component":{}}],["voic",{"_index":326,"title":{},"name":{},"text":{"2":{}},"component":{}}],["volit",{"_index":2434,"title":{},"name":{},"text":{"41":{}},"component":{}}],["volum",{"_index":3166,"title":{},"name":{},"text":{"64":{}},"component":{}}],["voluntarili",{"_index":428,"title":{},"name":{},"text":{"4":{}},"component":{}}],["vote",{"_index":469,"title":{"46-4":{}},"name":{},"text":{"4":{},"26":{},"29":{},"46":{}},"component":{}}],["voyag",{"_index":1443,"title":{},"name":{},"text":{"13":{},"21":{},"36":{},"48":{}},"component":{}}],["vscode",{"_index":3742,"title":{},"name":{"90":{}},"text":{"90":{}},"component":{}}],["vstrk",{"_index":1717,"title":{},"name":{},"text":{"29":{},"46":{}},"component":{}}],["vulner",{"_index":675,"title":{},"name":{},"text":{"4":{},"29":{},"88":{}},"component":{}}],["w",{"_index":2507,"title":{},"name":{},"text":{"41":{},"61":{}},"component":{}}],["w_k",{"_index":2968,"title":{},"name":{},"text":{"61":{}},"component":{}}],["wagmi",{"_index":3686,"title":{},"name":{},"text":{"84":{}},"component":{}}],["wait",{"_index":1622,"title":{},"name":{},"text":{"22":{},"26":{},"35":{},"39":{},"56":{},"62":{}},"component":{}}],["wallet",{"_index":605,"title":{"13-12":{},"16-5":{}},"name":{},"text":{"4":{},"6":{},"9":{},"13":{},"15":{},"16":{},"21":{},"24":{},"35":{},"38":{},"41":{},"54":{},"55":{},"56":{},"67":{},"84":{}},"component":{}}],["wallet<>dapp",{"_index":3689,"title":{},"name":{},"text":{"84":{}},"component":{}}],["wallet_nam",{"_index":1133,"title":{},"name":{},"text":{"9":{}},"component":{}}],["wallet_provid",{"_index":1151,"title":{},"name":{},"text":{"9":{}},"component":{}}],["wallets/deploy",{"_index":1490,"title":{},"name":{},"text":{"16":{}},"component":{}}],["wallets/deployer/account.json",{"_index":1478,"title":{},"name":{},"text":{"14":{},"16":{}},"component":{}}],["wallets/deployer/keystore.json",{"_index":1480,"title":{},"name":{},"text":{"14":{},"16":{}},"component":{}}],["wallets/devnet/account.json",{"_index":1532,"title":{},"name":{},"text":{"17":{}},"component":{}}],["wallets/devnet/keystore.json",{"_index":1534,"title":{},"name":{},"text":{"17":{}},"component":{}}],["wallet’",{"_index":1487,"title":{},"name":{},"text":{"16":{}},"component":{}}],["want",{"_index":312,"title":{},"name":{},"text":{"2":{},"11":{},"20":{},"21":{},"24":{},"27":{},"28":{},"32":{},"34":{},"36":{},"43":{},"53":{},"62":{},"65":{},"72":{},"80":{},"89":{}},"component":{}}],["warn",{"_index":2178,"title":{},"name":{},"text":{"39":{}},"component":{}}],["warranti",{"_index":669,"title":{},"name":{},"text":{"4":{}},"component":{}}],["wasn’t",{"_index":1875,"title":{},"name":{},"text":{"35":{}},"component":{}}],["way",{"_index":315,"title":{},"name":{},"text":{"2":{},"9":{},"16":{},"41":{},"55":{},"56":{},"58":{},"64":{},"68":{},"72":{},"75":{},"88":{},"89":{}},"component":{}}],["wbtc",{"_index":1720,"title":{},"name":{},"text":{"29":{},"35":{}},"component":{}}],["weak",{"_index":674,"title":{},"name":{},"text":{"4":{}},"component":{}}],["web",{"_index":1863,"title":{},"name":{},"text":{"35":{}},"component":{}}],["web3.j",{"_index":1829,"title":{},"name":{},"text":{"34":{}},"component":{}}],["websit",{"_index":1337,"title":{},"name":{},"text":{"13":{},"82":{},"84":{}},"component":{}}],["websocket",{"_index":1956,"title":{},"name":{},"text":{"38":{},"39":{}},"component":{}}],["week",{"_index":3575,"title":{},"name":{},"text":{"78":{}},"component":{}}],["week::monday",{"_index":3583,"title":{},"name":{},"text":{"78":{}},"component":{}}],["week::sunday",{"_index":3581,"title":{},"name":{},"text":{"78":{}},"component":{}}],["wei",{"_index":1831,"title":{},"name":{},"text":{"34":{},"59":{},"61":{},"63":{}},"component":{}}],["weight",{"_index":3038,"title":{},"name":{},"text":{"61":{}},"component":{}}],["well",{"_index":476,"title":{},"name":{},"text":{"4":{},"13":{},"29":{},"37":{},"39":{},"64":{},"83":{}},"component":{}}],["we’ll",{"_index":1483,"title":{},"name":{},"text":{"15":{}},"component":{}}],["we’r",{"_index":3118,"title":{},"name":{},"text":{"62":{}},"component":{}}],["we’v",{"_index":1917,"title":{},"name":{},"text":{"38":{}},"component":{}}],["whatsoev",{"_index":707,"title":{},"name":{},"text":{"4":{}},"component":{}}],["what’",{"_index":1922,"title":{},"name":{},"text":{"38":{},"39":{},"68":{}},"component":{}}],["whenev",{"_index":3051,"title":{},"name":{},"text":{"61":{},"62":{},"77":{}},"component":{}}],["wherea",{"_index":2200,"title":{},"name":{},"text":{"39":{},"58":{}},"component":{}}],["wherebi",{"_index":2783,"title":{},"name":{},"text":{"56":{}},"component":{}}],["whether",{"_index":221,"title":{},"name":{},"text":{"1":{},"34":{},"39":{},"41":{},"49":{},"54":{},"55":{},"60":{},"61":{},"62":{},"69":{},"71":{},"80":{}},"component":{}}],["whitelist",{"_index":3372,"title":{},"name":{},"text":{"68":{}},"component":{}}],["whole",{"_index":626,"title":{},"name":{},"text":{"4":{},"58":{}},"component":{}}],["whose",{"_index":283,"title":{},"name":{},"text":{"1":{},"24":{},"27":{},"41":{},"53":{},"59":{},"60":{},"61":{},"65":{},"72":{},"78":{},"80":{}},"component":{}}],["width",{"_index":355,"title":{},"name":{},"text":{"3":{}},"component":{}}],["will",{"_index":1792,"title":{},"name":{},"text":{"32":{},"61":{},"64":{},"66":{},"67":{},"77":{}},"component":{}}],["window",{"_index":1455,"title":{"14-5":{}},"name":{},"text":{"14":{}},"component":{}}],["wip",{"_index":1558,"title":{"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{}},"name":{},"text":{},"component":{}}],["wish",{"_index":1605,"title":{},"name":{},"text":{"20":{},"21":{},"27":{},"79":{}},"component":{}}],["with_attr",{"_index":1214,"title":{},"name":{},"text":{"10":{}},"component":{}}],["withdraw",{"_index":1669,"title":{"36":{},"29-5":{},"34-127":{},"35-7":{},"35-8":{},"35-9":{}},"name":{"36":{}},"text":{"26":{},"29":{},"34":{},"35":{},"36":{},"45":{}},"component":{}}],["withdrawallimit.sol",{"_index":1747,"title":{},"name":{},"text":{"29":{}},"component":{}}],["withdrawal’",{"_index":1856,"title":{},"name":{},"text":{"34":{},"35":{},"36":{}},"component":{}}],["withdrawn",{"_index":1586,"title":{},"name":{},"text":{"18":{},"34":{}},"component":{}}],["within",{"_index":98,"title":{},"name":{},"text":{"1":{},"4":{},"7":{},"8":{},"11":{},"13":{},"16":{},"18":{},"29":{},"31":{},"34":{},"41":{},"45":{},"47":{},"53":{},"56":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"71":{},"80":{}},"component":{}}],["without",{"_index":167,"title":{"61-12":{}},"name":{},"text":{"1":{},"2":{},"4":{},"6":{},"7":{},"8":{},"9":{},"11":{},"13":{},"15":{},"17":{},"18":{},"26":{},"37":{},"39":{},"41":{},"45":{},"61":{},"64":{},"68":{},"69":{},"70":{},"74":{},"88":{},"89":{}},"component":{}}],["wizard",{"_index":3728,"title":{"89-5":{}},"name":{},"text":{"89":{}},"component":{}}],["wojciecho",{"_index":1983,"title":{},"name":{},"text":{"38":{}},"component":{}}],["won’t",{"_index":898,"title":{},"name":{},"text":{"7":{}},"component":{}}],["word",{"_index":835,"title":{},"name":{},"text":{"7":{},"60":{},"61":{},"78":{}},"component":{}}],["work",{"_index":188,"title":{"74-3":{}},"name":{},"text":{"1":{},"4":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"15":{},"16":{},"25":{},"27":{},"34":{},"38":{},"39":{},"49":{},"53":{},"57":{},"61":{},"62":{},"64":{},"65":{},"68":{},"71":{},"90":{}},"component":{}}],["worker",{"_index":2016,"title":{},"name":{},"text":{"38":{}},"component":{}}],["workload",{"_index":3171,"title":{},"name":{},"text":{"64":{}},"component":{}}],["world",{"_index":3022,"title":{},"name":{},"text":{"61":{}},"component":{}}],["worth",{"_index":3187,"title":{},"name":{},"text":{"64":{}},"component":{}}],["wrap",{"_index":1718,"title":{},"name":{},"text":{"29":{},"58":{},"80":{},"89":{}},"component":{}}],["wrapper",{"_index":1828,"title":{},"name":{},"text":{"34":{}},"component":{}}],["write",{"_index":318,"title":{},"name":{},"text":{"2":{},"7":{},"9":{},"11":{},"13":{},"15":{},"32":{},"36":{},"38":{},"41":{},"47":{},"53":{},"61":{},"68":{},"69":{},"72":{},"75":{},"80":{},"85":{},"89":{},"90":{}},"component":{}}],["writer",{"_index":893,"title":{},"name":{},"text":{"7":{}},"component":{}}],["written",{"_index":59,"title":{},"name":{},"text":{"1":{},"2":{},"6":{},"7":{},"42":{},"45":{},"62":{},"67":{},"68":{},"70":{},"72":{},"76":{}},"component":{}}],["wrong",{"_index":2261,"title":{},"name":{},"text":{"39":{}},"component":{}}],["wsteth",{"_index":1729,"title":{},"name":{},"text":{"29":{}},"component":{}}],["www.abdk.consult",{"_index":2562,"title":{},"name":{},"text":{"43":{}},"component":{}}],["www.openzeppelin.com",{"_index":2573,"title":{},"name":{},"text":{"43":{}},"component":{}}],["www.trailofbits.com",{"_index":2579,"title":{},"name":{},"text":{"43":{}},"component":{}}],["www.zellic.io",{"_index":2581,"title":{},"name":{},"text":{"43":{}},"component":{}}],["x",{"_index":1030,"title":{"16-6":{}},"name":{},"text":{"8":{},"16":{},"41":{},"50":{},"52":{},"78":{},"79":{}},"component":{}}],["x^3",{"_index":2717,"title":{},"name":{},"text":{"52":{}},"component":{}}],["xor",{"_index":3385,"title":{},"name":{},"text":{"69":{}},"component":{}}],["y",{"_index":1031,"title":{},"name":{},"text":{"8":{},"41":{},"50":{},"79":{}},"component":{}}],["y^2",{"_index":2715,"title":{},"name":{},"text":{"52":{}},"component":{}}],["y^2=x^3+\\alpha",{"_index":2652,"title":{},"name":{},"text":{"50":{}},"component":{}}],["yearli",{"_index":1676,"title":{},"name":{},"text":{"26":{}},"component":{}}],["yearly_mint",{"_index":1593,"title":{},"name":{},"text":{"18":{}},"component":{}}],["yield",{"_index":3011,"title":{},"name":{},"text":{"61":{},"68":{},"71":{}},"component":{}}],["yourself",{"_index":1773,"title":{},"name":{},"text":{"31":{}},"component":{}}],["youv",{"_index":1510,"title":{},"name":{},"text":{"16":{}},"component":{}}],["you’ll",{"_index":3489,"title":{},"name":{},"text":{"72":{}},"component":{}}],["you’r",{"_index":1163,"title":{},"name":{},"text":{"9":{},"12":{},"13":{},"32":{},"49":{}},"component":{}}],["z",{"_index":2506,"title":{},"name":{},"text":{"41":{}},"component":{}}],["zan",{"_index":2551,"title":{},"name":{},"text":{"42":{}},"component":{}}],["zellic",{"_index":2580,"title":{},"name":{},"text":{"43":{}},"component":{}}],["zeppelin",{"_index":2572,"title":{"89-5":{}},"name":{},"text":{"43":{},"89":{}},"component":{}}],["zero",{"_index":253,"title":{},"name":{},"text":{"1":{},"2":{},"9":{},"38":{},"41":{},"53":{},"54":{},"55":{},"59":{},"61":{},"65":{},"67":{}},"component":{}}],["zk",{"_index":255,"title":{},"name":{},"text":{"1":{},"2":{},"50":{},"64":{}},"component":{}}]],"pipeline":["stemmer"]},"store":{"documents":{"1":{"id":1,"text":"Refers to the capability of users to define their own account logic instead of it being dictated by the protocol. An L2 smart contract, with programmable logic, that implements a user account on Starknet. An account contract implements special methods that enable initiating transactions. See also account abstraction The Starknet Node API uses the Remote Procedure Call (RPC) architectural style, written in JSON format. For complete information on the Starknet Node API in JSON RPC format, see starknet_api_openrpc.json on Github. See also RPC An ordered set of Starknet transactions. Blocks are built by the sequencer. A block has the following identifiers: block hash A unique identifier that can be used to query and refer to the block. block number A number representing the location of the block in the sequence of accepted blocks in Starknet. An optimized low-level execution unit that is added to the Cairo CPU board to perform predefined computations that are expensive to perform in standard Cairo, including range-checks, Pedersen hash calculations, and ECDSA. The smallest unit of execution within the Cairo VM, typically involving mathematical, logical, or control-flow operations that collectively define the behavior of a program. The Cairo Virtual Machine (VM) is software that knows how to execute compiled Cairo byte-code. The result of this execution is the program trace that can then be sent to a STARK prover in order to prove the validity of the instruction expressed in the Cairo code. The definition of a contract. It includes Cairo byte code, entry point names, and everything that defines its semantics. A deployed contract that corresponds to a class. Only contract instances act as true contracts, in that they have their own storage and can be called by transactions or other contracts. The smallest denomination of STRK. 1 fri = 10-18 STRK. A machine that runs the Starknet execution protocol. A full node stays synchronized with the latest state of the network, stores past blocks and transactions, and enables users to interact with the network, such as by querying its state or by broadcasting new transactions. The base layer of a blockchain network, such as Ethereum, where transactions are directly recorded and validated. It includes the underlying protocol and consensus mechanism that establish the foundational rules for the blockchain. Exists on top of an L1 blockchain, such as Ethereum, in order to add value to the L1, by providing features such as massive computation scale without compromising on Ethereum’s composability and security. A single transaction that executes multiple bundled transactions, which are signed once on Starknet. If one call fails, the entire operation is aborted. The entity that receives the output of Cairo programs and generates proofs to be verified. In the context of Starknet, the prover generates proofs of the computational integrity of the work performed by the sequencer. It then submits the proof to the verifier on L1, which registers the fact. See also SHARP verifier The Starknet RPC API provides clients an interface to retrieve information on the state of the chain and to interact with it, such as by posting transactions or estimating the fee of a transaction before it is sent. See also API A set of services that together receive transactions from the network, put them in order, check their validity, and build blocks. The Shared Prover (SHARP) is a mechanism used in Starknet that aggregates multiple Cairo programs from different users, each containing different logic. These Cairo programs are then executed together, generating a single proof common to all the programs. An intermediate representation between Cairo and Casm. Sierra code is then compiled into a Casm program with the property that, for any input, the program’s execution is provable. In particular, it ensures that the execution of a transaction is provable regardless of whether the execution succeeded or was reverted due to an error. Additional resources Cairo and Sierra A proof system that uses cryptography to provide polylogarithmic verification resources and proof size, with minimal and post-quantum-secure assumptions. A smart contract deployed on Ethereum. Its address is 0xc662c410c0ecf747543f5ba90660f6abebd9c8c4. It defines the state of Starknet by storing: The commitment to the L2 state. The Starknet OS program hash – effectively defines the version of Starknet the network is running. The committed state on the L1 Core Contract acts as the consensus mechanism of Starknet, that is, the system is secured by the L1 Ethereum consensus. In addition to maintaining the state, the Starknet L1 Core Contract is the main hub of operations for Starknet on L1. Specifically: It stores the list of allowed verifier contracts that can verify state update transactions It deals with cross-layer interaction between L1 and L2. A permissionless Validity-Rollup, also known as a zero-knowledge rollup (ZK rollup) for Ethereum. Starknet is a Layer 2 (L2) blockchain, enabling any dApp to achieve massive computation scale without compromising Ethereum’s composability and security. Starknet aims to achieve secure, low-cost transactions and high performance by using the STARK cryptographic proof system. Starknet contracts and the Starknet OS are written in Cairo, a custom-built and specialized programming language. The Cairo program that, upon receiving a set of transaction as input, executes the state transition. For more information, see Starknet state. The integrity of this computation is what is actually proven and verified. The set of all the contracts' code and all the memory slots and their values, in every contract’s storage. See also Starknet state A transaction can be seen as a message containing a set of instructions that describe a state transition. The Starknet protocol has the following types of transactions, which affect different parts of the state: DECLARE INVOKE DEPLOY_ACCOUNT See also Transaction types Starknet state The data describing the difference between two states. It contains information on every contract whose storage was updated and additional information on contract deployments. A unit of measurement of proving complexity. In the STARK protocol, a computation is translated into an execution trace that must satisfy a collection of constraints. Every Cairo step translates to ~50 trace cells. A set of L1 smart contracts whose purpose is to verify STARK proofs submitted by the Shared Prover (SHARP).","title":"Glossary","component":"ROOT","version":"","name":"glossary","url":"/glossary/","titles":[{"text":"account abstraction","hash":"account-abstraction","id":1},{"text":"account contract","hash":"account_contract","id":2},{"text":"API","hash":"api","id":3},{"text":"block","hash":"block","id":4},{"text":"builtin","hash":"builtin","id":5},{"text":"Cairo step","hash":"cairo-step","id":6},{"text":"Cairo VM","hash":"cairovm","id":7},{"text":"contract class","hash":"contract_class","id":8},{"text":"contract instance","hash":"contract_instance","id":9},{"text":"fri","hash":"fri","id":10},{"text":"full node","hash":"full-node","id":11},{"text":"Layer 1, L1","hash":"l1","id":12},{"text":"Layer 2, L2","hash":"l2","id":13},{"text":"multicall","hash":"multicall","id":14},{"text":"prover","hash":"prover","id":15},{"text":"RPC","hash":"rpc","id":16},{"text":"sequencer","hash":"sequencer","id":17},{"text":"SHARP","hash":"SHARP","id":18},{"text":"Sierra","hash":"sierra","id":19},{"text":"STARK","hash":"stark","id":20},{"text":"Starknet L1 Core Contract","hash":"starknet-l1-core-contract","id":21},{"text":"Starknet","hash":"starknet","id":22},{"text":"Starknet OS","hash":"starknet-os","id":23},{"text":"Starknet state","hash":"starknet-state","id":24},{"text":"transaction","hash":"transaction","id":25},{"text":"state diff","hash":"statediff","id":26},{"text":"trace cell","hash":"trace-cells","id":27},{"text":"verifier","hash":"verifier","id":28}]},"2":{"id":2,"text":"Starknet is a permissionless Validity-Rollup, also known as a zero-knowledge rollup (ZK rollup) for Ethereum. As a Layer 2 (L2) blockchain, Starknet enables any dApp to achieve massive computation scale without compromising on Ethereum’s composability and security. Starknet aims to achieve secure, low-cost transactions and high performance by using the STARK cryptographic proof system. Starknet contracts and the Starknet OS are written in Cairo, a custom-built and specialized programming language. Set up your environment and get started with Starknet. Explore > Learn about Starknet's architecture including contracts and accounts. Explore > Learn more about the current version of Starknet. Explore > The Starknet Book The Cairo docs Starknet development tools Full nodes and API services Limits and triggers Cairo 0 tools Block explorers Audit providers Want to contribute to Starknet documentation? Get started here: See the different ways to contribute. Review these basic writing guidelines to help you write better and be a more valuable contributor. Use the Starknet documentation supplementary style guide to help you write with the Starknet voice.","title":"Overview","component":"ROOT","version":"","name":"index","url":"/","titles":[{"text":"Explore Starknet","hash":"explore_starknet","id":1},{"text":"Quick start","id":2},{"text":"Architecture","id":3},{"text":"Releases","id":4},{"text":"Developer tools and resources","hash":"developer_tools_and_resources","id":5},{"text":"Contribute to the Starknet docs","hash":"contribute_to_the_starknet_docs","id":6}]},"3":{"id":3,"text":"Notation Explanation bold Indicates GUI elements, such as button text or menu names. Highlights text for added importance or to draw attention to it. italics Indicates the first occurrence of a new term, titles of documents or topics, and user-supplied or variable values. monospace Indicates code, commands, file paths, or other text that should be displayed in a fixed-width font to differentiate it from the surrounding text. Indicates user-supplied or variable values in code, commands, file paths, or other text that should be displayed in a monospace font. Can also refer to generic types. For example: List \\(\\text{string_in_math_notation}\\) A normal (non-italics) serif typeface indicates a fixed element or constant specified in mathematical notation. …​ An ellipsis indicates that the preceding element can repeat multiple times. [item, …​] Square brackets indicate that the enclosed items are optional. Also can indicate a range of numbers, where the enclosed items are included. For example, in [0,100], 0 and 100 are part of the specified range. (item1, item2) Parentheses indicate a range of numbers, where the enclosed items are not included. For example, in (0,100), 0 and 100 are not part of the specified range. item1 | item2 A vertical bar (|) indicates a choice between item1 and item2. {item1, item2} Curly brackets indicates a list or set of possible values. / A forward slash indicates a division operator or a path separator in URLs and file paths.","title":"Notational conventions","component":"ROOT","version":"","name":"notational-conventions","url":"/notational-conventions/","titles":[]},"4":{"id":4,"text":"Starknet is a developing decentralized protocol and the economic mechanisms described here, also known as tokenomics, are subject to change based on governance decisions made by the larger community of Starknet. For more details on Starknet’s governance processes see the Starknet Governance Hub. This document describes certain economic fundamentals of the Starknet token. This document is intended for informational purposes only and is meant to outline the usage and functionalities of the asset within Starknet. It is important to understand that the primary purpose of the Starknet token, STRK, is to facilitate operations and activities on Starknet and it is not intended to serve as an investment. Blockchains work through a combination of cryptography and economic incentives. Cryptography limits what actors in the system can do, for example, transactions must be validly signed to be included in the chain. Economic incentives encourage actors to voluntarily perform actions that maintain the network’s capabilities when spending their own resources, for example, miners or stakers actively publish new blocks to the chain because they can receive fees and new tokens as a reward. Blockchains are valuable because they are data structures maintained by diverse and, ideally, large groups of otherwise unaffiliated persons. This gives them resilience: Any one participant can disappear, but the data structure is preserved. This also gives them censorship resistance: No single person can unilaterally decide to forbid certain persons from using the network. Starknet operates as a Layer 2 (L2) network on top of Ethereum. Today, Starknet achieves secure low-cost transactions by using the STARK cryptographic proof system to reduce the size of transaction data while preserving and verifying the integrity of that data. Still under development, Starknet will achieve resilience and censorship resistance by using a token, the Starknet token (STRK), to incentivize network participants to sequence transactions for users of the network and to ensure that there is a provably fair mechanism, a proof-of-stake mechanism, to determine who should sequence and submit a proof for the network blocks. A proof-of-stake mechanism might also be used to facilitate data availability solutions and other significant services required for network operations. STRK is the mechanism for paying fees to enable operation of the network, maintaining and securing the network by enabling staking for consensus, and deciding on Starknet’s values and technology goals by voting for governance proposals. Transaction fees: Originally, fees in Starknet were paid only in Ether (ETH). As of v.0.13.0, fees for transactions on the network can be paid using STRK, as well as ETH. A portion of the fees paid in STRK are converted to ETH by the receiving sequencer, in order to cover Ethereum L1 gas costs, which, due to the specifications of the Ethereum protocol, must be paid in ETH. Staking: Certain services that are critical to the liveness and security of Starknet may require the staking of Starknet tokens. These services might be offered by multiple providers, and could include sequencing, reaching temporary L2 consensus before L1 finality is reached, STARK-proving services, and data availability provisioning, to name a few examples. These protocol changes are still under discussion within the larger governance community and are targeted for 2024 -2025. Governance: Proposals for improving Starknet might require a minimal token support threshold. Voting, either directly or via delegation, will be required for changes to the protocol that are essential to Starknet’s liveness, security, and maintenance. Today, for example, major updates to the Starknet Operating System require the approval of token holders. For more information about Governance see the Starknet Governance Hub As discussed above, the Starknet tokens are digital assets intended to support the operation and usage of Starknet and are not offered as an investment. As such, the Starknet tokens do not represent any equity in StarkWare or the Starknet Foundation, nor do they provide any participation right in StarkWare or grant any right of claim from StarkWare or the Starknet Foundation. Ten billion Starknet tokens were initially created by StarkWare in May 2022 and minted onchain on November 30, 2022. The existing ten billion tokens have been or are planned to be distributed according to the following: 20.04%: Early Contributors Tokens allocated for StarkWare’s team members and early contributors. These tokens are subject to a lock-up schedule, as further detailed below. 18.17%: Investors Tokens allocated for StarkWare’s investors. These tokens are subject to a lock-up schedule, as further detailed below. 10.76%: StarkWare Tokens allocated for StarkWare for operation services such as to pay fees, provide other services on Starknet, and engage other service providers. 12.93%: Grants including Development Partners (aka DPs) Tokens allocated for grants for research or work done to develop, test, deploy and maintain the Starknet protocol. The process for applications and allocations related to Starknet Foundation Grants will be outlined in a post at a later date. 9.00%: Community Provisions Tokens distributed to those who contributed to Starknet and powered or developed its underlying technology. 9.00%: Community Rebates Tokens allocated for rebates in Starknet tokens to partially cover the costs of onboarding to Starknet from Ethereum. Community rebates are not yet available and will be announced in 2024 in a subsequent post. 10.00%: Foundation Strategic Reserves Tokens allocated for the Starknet Foundation to fund ecosystem activities that are aligned with the Foundation’s mission. 8.10%: Foundation Treasury Token allocated for the Starknet Foundation’s treasury available for operations and other future initiatives by the Starknet Foundation. 2.00%: Donations Tokens reserved for donations to institutions and organizations, such as universities, NGOs, etc, as decided by the Starknet Foundation. To align long-term incentives of the Investors and Early Contributors with the interests of the Starknet community, and following common practice in decentralized ecosystems, all tokens allocated to Investors and Early Contributors is subject to the following lock-up schedule, where percentages are based on the total token supply: Up to 0.64% (64 million tokens) will be unlocked on the 15th of each month, starting April 15, 2024, and going through March 15, 2025, for a total of 7.68% (768 million tokens) unlocked by March 15, 2025. Up to 1.27% (127 million tokens) will be unlocked on the 15th of each month, starting April 15, 2025, and going through March 15, 2027, for a total of 30.48% (3.048 billion tokens) unlocked by March 15, 2027. Figure 1. Estimated supply of STRK in circulation The graph, Estimated supply of STRK in circulation, excludes newly circulating tokens resulting from inflation or staking (see below). Token allotments currently retained by the Starknet Foundation, while contractually unlocked, are not considered circulating unless granted, donated, or otherwise allocated out of originating wallets through future grants, provisions, donations, developer initiatives, or other programs. Through this lock-up period, token holders cannot transfer, sell, or pledge their STRK tokens. Delegation of voting is permitted with locked tokens and, when available, staking might also be permitted. The total circulating supply of tokens is planned to increase over time with the minting of new tokens by the protocol, as staking rewards, block rewards, or other rewards associated with the staking process. Such minting will be made pursuant to a schedule that will be determined with the community at a later point, not before Starknet services are more decentralized. The supply in circulation might not, therefore, remain fixed. However, as long as StarkWare is the sole operator of the Starknet sequencer, there will be no issuance of new tokens for the purpose of block rewards. For more information, see A token-minting proposal to manage inflation. Starknet is a developing decentralized protocol and the economic mechanisms described herein are subject to change based on decisions made by the larger community of Starknet builders and users. Starknet relies upon third parties to adopt and implement software and protocols as users and contributors of Starknet. It also relies, in whole or partly, on third parties to develop, supply and otherwise support it. There is no assurance or guarantee that such third parties will continue to participate in the network or that the network will continue to function as intended. The technical documents provided herein describe certain planned and specified economic fundamentals of a digital asset, STRK. These materials are intended for informational purposes only and are meant to outline the usage and functionalities of the asset within Starknet. It is important to understand that the primary purpose of STRK is to pay for fees, provide a mechanism for securing consensus, and allow for decentralized governance on Starknet; it is not intended to serve as an investment. Starknet relies upon third parties to adopt and implement the software and protocols as users of Starknet. It also relies, in whole or partly, on third parties to develop, supply and otherwise support it. As a Layer 2 network over Ethereum, Starknet also relies upon third parties maintaining and operating the Ethereum network. There is no assurance or guarantee that those third parties will complete their work, properly carry out their obligations, and/or otherwise meet anyone’s needs. STRK, as the native token of Starknet, may be subject to the risks of the Starknet network, including, without limitation, the following: (i) the technology associated with Starknet may not function as intended; (ii) the details of the Starknet token economics including the total supply and distribution schedule may be changed due to decisions made by the consensus of participants of the Starknet network; (iii) Starknet may fail to attract sufficient interest from key stakeholders or users; (iv) Starknet may not progress satisfactorily and Starknet tokens may not be useful or valuable; (v) Starknet may suffer from attacks by hackers or other individuals; and (vi) Starknet is comprised of open-source technologies that depend on a network of computers to run certain software programs to process transactions, and because of this model StarkWare and the Starknet Foundation have limited control over Starknet. Risks related to blockchain technology in general and Starknet in particular may impact the usefulness of Starknet, and, in turn, the utility or value of STRK. The software and hardware, technology and technical concepts and theories applicable to Starknet and STRK are still in an early development stage and unproven, there is no warranty that Starknet will achieve any specific level of functionality or success, nor that the underlying technology will be uninterrupted or error-free, and there is an inherent risk that the technology could contain weaknesses, vulnerabilities or bugs causing, potentially, the complete loss of any Starknet tokens held by Starknet users. As with most commonly used public blockchains, STRK is accessed using a private key that corresponds to the address at which they are stored. If the private key, or the \"seed\" used to create the address and corresponding private key are lost or stolen, the tokens associated with that address might be unrecoverable and will be permanently lost. Public blockchain-based systems, including Starknet and the underlying Ethereum network, depend on independent verifiers, and therefore may be vulnerable to consensus attacks including, but not limited to, double-spend attacks, majority voting power attacks, race condition attacks, and censorship attacks. These attacks, if successful, could result in the permanent loss of STRK. Starknet, STRK, and blockchain technology are nascent, and there may be additional risks not described above or that may be new or unanticipated. We recommend only using Starknet or holding STRK if you are familiar with the technology and aware of the risks. This document and its contents are not, and should not be construed as, an offer to sell, or the solicitation of an offer to buy, any tokens, nor should it or any part of it form the basis or be relied on in connection with any contract or commitment whatsoever. This document is not advice of any kind, including legal, investment, financial, tax, or any other professional advice. Nothing in this document should be read or interpreted as a guarantee or promise of how the Starknet network or its STRK will develop, be utilized, or accrue value. All information in this document is provided on an “as is” basis without any representation or warranty of any kind. This document only outlines current plans, which could change at the discretion of various parties, and the success of which will depend on many factors outside of Starknet Foundation’s control. Such future statements necessarily involve known and unknown risks, which may cause actual performance and results in future periods to differ materially from what we have described or implied in this document. StarkWare and the Starknet Foundation disclaim all warranties, express or implied, to the fullest extent permitted by law with respect to the functionality of Starknet and STRK.","title":"The token economics of Starknet","component":"ROOT","version":"","name":"economics-of-starknet","url":"/architecture-and-concepts/economics-of-starknet/","titles":[{"text":"Why are economics relevant?","hash":"why_are_economics_relevant","id":1},{"text":"The purpose of the STRK token","hash":"purpose_of_the_token","id":2},{"text":"Supply and distribution","hash":"supply_and_distribution","id":3},{"text":"Risks and disclaimers","hash":"risks_and_disclaimers","id":4}]},"5":{"id":5,"text":"","title":"Architecture","component":"ROOT","version":"","name":"index","url":"/architecture-and-concepts/","titles":[]},"6":{"id":6,"text":"This topic previously appeared in the Starknet Book. This topic explores the role and functionality of nodes in the Starknet ecosystem, their interactions with sequencers, and their overall importance. A node in the Starknet ecosystem is a computer equipped with Starknet software, contributing significantly to the network’s operation. Nodes are vital for the Starknet ecosystem’s functionality, security, and overall health. Without nodes, the Starknet network would not be able to function effectively. Nodes in Starknet are categorized into two types: Full nodes: Store the entire Starknet state and validate all transactions, crucial for the network’s integrity. Light nodes: Do not store the entire Starknet state but rely on full nodes for information. Light nodes are faster and more efficient but offer less security than full nodes. Nodes are fundamental to the Starknet network, performing a variety of critical functions: Transaction validation: Nodes ensure transactions comply with Starknet’s rules, helping prevent fraud and malicious activities. Block Creation and Propagation: Nodes create and circulate blocks to maintain a consistent blockchain view across the network. State maintenance: Nodes track the Starknet network’s current state, including user balances and smart contract code, essential for transaction processing and smart contract execution. API endpoint provision: Nodes provide API endpoints, aiding developers in creating applications, wallets, and tools for network interaction. Transaction relay: Nodes relay user transactions to other nodes, improving network performance and reducing congestion. Nodes and sequencers are interdependent: Nodes and block production: Nodes depend on sequencers to create blocks and update the network state. Sequencers integrate the transactions validated by nodes into blocks, maintaining a consistent and current Starknet state. Sequencers and transaction validation: Sequencers rely on nodes for transaction validation and network consensus. Prior to executing transactions, sequencers work with nodes to confirm transaction legitimacy, deterring fraudulent activities. Nodes also contribute to the consensus mechanism, ensuring uniformity in the blockchain state. The relationship between nodes and clients in the Starknet ecosystem is characterized by a client-server model: Client requests and node responses: Clients send requests, like transaction submissions or state queries. Nodes process these requests, validating transactions, updating the network state, and providing clients with the requested data. Client experience: Clients receive node responses, updating their local view with the latest network information. This loop enables user interaction with Starknet DApps, with nodes maintaining network integrity, while clients provide a user-friendly interface. The mempool acts as a holding area for unprocessed transactions: Transaction validation and mempool storage: Upon receiving a transaction, a node validates it. Valid transactions are added to the mempool and broadcast to other network nodes. Transaction selection and block inclusion: Nodes select transactions from the mempool for processing, incorporating them into blocks that are added to the blockchain. Each Starknet node implementation has its own strengths: Pathfinder, by Equilibrium: Pathfinder is a full node written in Rust. Pathfinder excels in high performance, scalability, and aligns with the Starknet Cairo specification. Juno, by Nethermind: Juno, is a full node written in Golang. Juno is known for user-friendliness, ease of deployment, and compatibility with Ethereum tools. Papyrus, by StarkWare: Papyrus is also a full node written in Rust. Papyrus focuses on security and robustness. It’s integral to the upcoming Starknet Sequencer, expected to boost network throughput. These implementations are continuously being improved, with new features and enhancements. The choice of implementation depends on user or developer preferences and requirements. Key characteristics of each node implementation are summarized below: Node Implementation Language Strengths Pathfinder Rust High performance, scalability, Cairo specification adherence Papyrus Rust Security, robustness, Starknet Sequencer foundation Juno Golang User-friendliness, ease of deployment, Ethereum compatibility","title":"Nodes","component":"ROOT","version":"","name":"nodes","url":"/architecture-and-concepts/nodes/","titles":[{"text":"Overview of nodes in the Starknet ecosystem","hash":"overview-of-nodes-in-the-starknet-ecosystem","id":1},{"text":"Core functions of nodes","hash":"core-functions-of-nodes","id":2},{"text":"Interplay of nodes, sequencers, clients, and the mempool in Starknet","hash":"interplay-of-nodes-sequencers-clients-and-mempool-in-the-starknet-network","id":3},{"text":"Nodes and sequencers","hash":"nodes-and-sequencers","id":4},{"text":"Nodes and clients","hash":"nodes-and-clients","id":5},{"text":"Nodes and the mempool","hash":"nodes-and-the-mempool","id":6},{"text":"Node implementations in Starknet","hash":"node-implementations-in-starknet","id":7}]},"7":{"id":7,"text":"This topic previously appeared in the Starknet Book. The only Prover in use on Starknet as of this writing is SHARP. SHARP is like public transportation for proofs on Starknet, aggregating multiple Cairo programs to save costs and boost efficiency. It uses recursive proofs, enabling parallelization and optimization, making it more affordable for all users. Critical services like the gateway, validator, and Prover work together with a stateless design for flexibility. SHARP’s adoption by StarkEx and Starknet highlights its significance and potential for future optimization. This topic discusses SHARP, how it has evolved to incorporate recursive proofs, and its role in reducing costs and improving efficiency within the Starknet network. SHARP, which stands for Shared Prover, is a mechanism that aggregates multiple Cairo programs from different users, each containing different logic. These Cairo programs are then executed together, generating a single proof common to all the programs. Rather than sending the proof directly to the Solidity Verifier in Ethereum, it is initially sent to a STARK Verifier program written in Cairo. The STARK Verifier generates a new proof to confirm that the initial proofs were verified, which can be sent back into SHARP and the STARK Verifier. Details for this recursive proof process appear below. Ultimately, the last proof in the series is sent to the Solidity Verifier on Ethereum. In other words, there are many proofs generated until we reach Ethereum and the Solidity Verifier. The primary benefit of SHARP lies in its ability to decrease costs and enhance efficiency within the Starknet network. It achieves this by aggregating multiple Cairo jobs, which are individual sets of computation. This aggregation enables the protocol to leverage the exponential amortization offered by STARK proofs. Exponential amortization means that as the computational load of the proofs increases, the cost of verifying those proofs rises at a slower logarithmic rate than the computation increase. As a result, the cost of each transaction within the aggregated set is significantly reduced, making the overall process more cost-effective and accessible for users. In the context of SHARP and Cairo context, a jobs refer to the individual Cairo programs or tasks submitted by different users. These jobs contain specific logic or computations that must be executed on the Starknet network. Additionally, SHARP enables smaller users with limited computation to benefit from joining other jobs and share the cost of generating the proofs. This collaborative approach is similar to using public transportation instead of a private car, where the cost is distributed among all participants, making it more affordable for everyone. One of the most powerful features of SHARP is its use of recursive proofs. Rather than directly sending the generated proofs to the Solidity Verifier, they are first sent to a STARK Verifier program written in Cairo. This Verifier, which is also a Cairo program, receives the proof and creates a new Cairo job that is sent to the Prover. The Prover then generates a new proof to confirm that the initial proofs were verified. These new proofs can be sent back into SHARP and the STARK Verifier, restarting the process. This process continues recursively, with each new proof being sent to the Cairo Verifier until a trigger is reached. At this point, the last proof in the series is sent to the Solidity Verifier on Ethereum. This approach enables greater parallelization of the computation and reduces the time and cost associated with generating and verifying proofs. Generated Proofs ↓ STARK Verifier program (in Cairo) ↓ Cairo Job ↓ Prover ↓ New Proof Generated ↓ Repeat Process ↓ Trigger Reached (last proof) ↓ Solidity Verifier At first glance, recursive proofs may seem more complex and time-consuming. However, there are several benefits to this approach: Parallelization: Recursive proofs enable work parallelization, reducing user latency and improving SHARP efficiency. Cheaper onchain costs: Parallelization enables SHARP to create larger proofs, which were previously dependent on the limited availability of large cloud machines. As a result, onchain costs are reduced. Lower cloud costs: Since each job is shorter, the required memory for processing is reduced, resulting in lower cloud costs. Optimization: Recursive proofs enable SHARP to optimize for various factors, including latency, onchain costs, and time to proof. Cairo support: Recursive proofs only require support in Cairo, without the need to add support in the Solidity Verifier. Latency in Starknet encompasses the time taken for processing, confirming, and including transactions in a block. Latency is affected by factors like network congestion, transaction fees, and system efficiency. Minimizing latency ensures faster transaction processing and user feedback. Time to proof, however, specifically pertains to the amount of time required to generate and verify cryptographic proofs for transactions or operations. SHARP’s backend architecture consists of several services that work together to process Cairo jobs and generate proofs. These services include: Gateway: Cairo jobs enter SHARP through the gateway. Job Creator: This service prevents job duplication and ensures that the system operates consistently, regardless of multiple identical requests. Validator: The validator service runs validation checks on each job, ensuring they meet the requirements and can fit within the Prover machines. Invalid jobs are tagged as such and do not proceed to the Prover. Scheduler: The scheduler service creates trains that aggregate jobs and send them to the Prover. Recursive jobs are paired and sent to the Prover together. Cairo Runner: This service runs Cairo for the Prover’s needs. The Cairo Runner service runs Cairo programs, executing the necessary computations and generating the execution trace as an intermediate result. The Prover then uses this execution trace. Prover: The Prover computes the proofs for each train. Dispatcher: The Dispatcher serves two functions in the SHARP system. In the case of a recursive proof, the Dispatcher runs the Cairo Verifier program on the proof it has received from the Prover, resulting in a new Cairo job that goes back to the Validator. In the case of a proof that is to be published onchain, the Dispatcher creates packages from the proof, which can then be sent to the Blockchain Writer. Blockchain Writer: Once the packages have been created by the Dispatcher, they are sent to the Blockchain Writer. The Blockchain Writer is responsible for sending the packages to the appropriate blockchain, such as Ethereum, for verification. This step in the SHARP system ensures that the proofs are properly verified and that the transactions are securely recorded on the blockchain. Catcher: The Catcher monitors onchain transactions to ensure that they have been accepted. While the Catcher is relevant for internal monitoring purposes, be aware that if a transaction fails, the fact won’t be registered onchain in the Fact Registry. As a result, the soundness of the system is still preserved even without the Catcher. SHARP is designed to be stateless. That is, each Cairo job is executed in its own context and has no dependency on other jobs, enabling greater flexibility in processing jobs. Currently, the primary users of SHARP include: StarkEx Starknet Optimizing the Prover involves the numerous challenges and potential projects on which the Starkware team and the community are currently working, including: Exploring more efficient hash functions for Cairo, the Prover, and Solidity. Investigating smaller fields for recursive proof steps could lead to more efficient computations. Adjusting various parameters of the STARK protocol, such as FRI parameters and block factors. Optimizing the Cairo code to make it faster, resulting in a faster recursive Prover. Developing dynamic layouts, which should enable Cairo programs to scale resources as needed. Improving scheduling algorithm. This optimization path is external to the Prover. Dynamic layouts enable SHARP to determine and scale the required resources for a specific job and adjust the layout accordingly, instead of relying on predefined layouts with fixed resources. Scaling resources can lead to more efficient computation and better resource utilization. This approach can provide tailored solutions for each job, improving overall efficiency. In conclusion, SHARP is a critical component of Starknet’s architecture, providing a more efficient and cost-effective solution for processing Cairo programs and verifying their proofs. By leveraging the power of STARK technology and incorporating recursive proofs, SHARP plays a vital role in improving the overall performance and scalability of the Starknet network. The stateless nature of SHARP and the reliance on the cryptographic soundness of the STARK proving system make it an innovative and valuable addition to the blockchain ecosystem.","title":"Provers","component":"ROOT","version":"","name":"provers-overview","url":"/architecture-and-concepts/provers-overview/","titles":[{"text":"What is SHARP?","hash":"what-is-sharp","id":1},{"text":"Recursive proofs in SHARP","hash":"recursive-proofs-in-sharp","id":2},{"text":"SHARP backend architecture and data pipeline","hash":"sharp-backend-architecture-and-data-pipeline","id":3},{"text":"Current SHARP users","hash":"current-sharp-users","id":4},{"text":"Challenges and optimization","hash":"challenges-and-optimization","id":5},{"text":"Conclusion","hash":"conclusion","id":6}]},"8":{"id":8,"text":"This topic previously appeared in the Starknet Book. Starknet’s Solidity verifier ensures the truth of transactions and smart contracts. The Solidity verifier is an L1 Solidity smart contract, designed to validate STARK proofs from SHARP. The current Verifier is a set of multiple smart contracts, rather than being a singular, monolithic structure. Some key smart contracts associated with the Verifier are: GpsStatementVerifier: This is the primary contract of the SHARP verifier. It verifies a proof and then registers the related facts using verifyProofAndRegister. It acts as an umbrella for various layouts, each named CpuFrilessVerifier. Every layout has a unique combination of built-in resources. Figure 1. Verifier layouts The system routes each proof to its relevant layout. MemoryPageFactRegistry: This registry maintains facts for memory pages, primarily used to register outputs for data availability in rollup mode. The Fact Registry is a separate smart contract ensuring the verification and validity of attestations or facts. The verifier function is separated from the main contract to ensure each segment works optimally within its limits. The main proof segment relies on other parts, but these parts operate independently. MerkleStatementContract: This contract verifies Merkle paths. FriStatementContract: It focuses on verifying the FRI layers. The SHARP Verifier Contract Map contains roughly 40 contracts, detailing various components of the Solidity verifier. The images below display the contracts and their Ethereum Mainnet addresses. SHARP verifier contract map These are currently the entire stack of contracts that comprise the SHARP verifier, with their Ethereum Mainnet addresses. Proxy 0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60 CallProxy 0xD4C4044ACa68ebBcB81B13cC2699e1Bca2d3F458 GpsStatementVerifier 0x6cB3EE90C50a38A0e4662bB7e7E6e40B91361BF6 MemoryPageFactRegistry 0xFD14567eaf9ba941cB8c8a94eEC14831ca7fD1b4 MerkleStatementContract 0x5899Efea757E0Dbd6d114b3375C23D7540f65fa4 FriStatementContract 0x3E6118DA317f7A433031F03bB71ab870d87dd2dd CairoBootloaderProgram 0x5d07afFAfc8721Ef3dEe4D11A2D1484CBf6A9dDf PedersenHashPointsXColumn 0xc4f21318937017B8aBe5fDc0D48f58dBc1d18940 PedersenHashPointsYColumn 0x519DA5F74503dA351EbBED889111377d33096002 EcdsaHashPointsXColumn 0x593a71DC43e9B67FE009d7C76B6EfA925FB329B1 EcdsaHashPointsYColumn 0xcA59f6FD499ffF50c78Ffb420a9bcd0d273abf29 CpuFrilessVerifier0 0x217750c27bE9147f9e358D9FF26a8224F8aCC214 CpuOods0 0x3405F644F9390C3478f42Fd205CE6920CcAF3280 CpuConstraintPoly0 0x943248dA0FFd5834Da56c5AD5308E2E2991378EB CpuFrilessVerifier1 0x630A97901Ac29590DF83f4A64B8D490D54caf239 CpuOods1 0x8518F459A698038B4CCED66C042c48C6bB5B17fe CpuConstraintPoly1 0x4CF5c11321d54b83bDAE84bBbd018c26621d2950 CpuFrilessVerifier2 0x8488e8f4e26eBa40faE229AB653d98E341cbE57B CpuOods2 0x52314e0b25b024c34480Ac3c75cfE98c2Ed6aa4a CpuConstraintPoly2 0xBE8bd7a41ba7DC7b995a53368e7fFE30Fd2BC447 CpuFrilessVerifier3 0x9E614a417f8309575fC11b175A51599661f2Bd21 CpuOods3 0xED219933b58e9c00E66682356588d42C7932EE8E CpuConstraintPoly3 0x297951a67D1BF7795500C3802d21a8C846D9C962 CpuFrilessVerifier4 0xC879aF7D5eD80e4676C203FD300E640C297F31e3 CpuOods4 0x4bf82e627D57cB3F455E740bcDA25848cDbd2FF7 CpuConstraintPoly4 0x0C099caf7a87e4eB28bcd8D0608063f8a69bb434 CpuFrilessVerifier5 0x78Af2BFB12Db15d35f7dE8DD77f29C299C78c590 CpuOods5 0x43A1C0bBa540e1C98d4b413F876250bdCFd0b9e0 CpuConstraintPoly5 0x691ca565B7416B681e4f9Fb56A1283Ae8b34E55e CpuFrilessVerifier6 0xe9664D230490d5A515ef7Ef30033d8075a8D0E24 CpuOods6 0x68293272FEA2D6e74572BC18ffaD11F21344e090 CpuConstraintPoly6 0xd0aAdECA2d25AEFde0da214d27b04b6ea20D7418 PoseidonPoseidonFullRoundKey0Column6 0x37070Fd8051f63E5A6D7E87026e086Cc19db1aBe PoseidonPoseidonFullRoundKey1Column6 0xb4711a4614368516529d6118C97905aB4B28e267 PoseidonPoseidonFullRoundKey 2Column6 0x4FB05b7CC348C5a72C59a3f307baf66e3CA1F835 PoseidonPoseidonPartialRoundKey0Column6 0x812c2AD2161D099724A99C8114c539b9e5b449cd PoseidonPoseidonPartialRoundKey1Column6 0x4d0E80AB34ee2B19295F2CaC3101d03452D874b8 CpuFrilessVerifier7 0x03Fa911dfCa026D9C8Edb508851b390accF912e8 CpuOods7 0xc9E067AF5d00eb4aA2E73843ac36AfF83C5CeeD3 CpuConstraintPoly7 0x89B7a7276cBc8Cb35Ec11fAE9da83b20Db3edf20 These contracts function as follows: Proxy: This contract facilitates upgradability. It interacts with the GpsStatementVerifier contract using the delegate_call method. Notably, the state resides in the GpsStatementVerifier contract, not in the proxy. CallProxy: Positioned between the Proxy and the GpsStatementVerifier contracts, it functions like a typical proxy. However, it avoids the delegate_call method and calls the function in the implementation contract directly. CairoBootloaderProgram: Comprising numerical Cairo programs, it validates the Cairo program of a statement. The bootloader manages the logic executing Cairo programs to generate proof and program hash. PedersenHashPoints (X & Y Columns): These lookup tables store vast amounts of data. Validation functions consult them to compute the Pedersen hash. EcdsaPoints (X & Y Column): Similar to the Pedersen hash, these tables assist in calculating the elliptic curve. CpuFrilessVerifier/CpuOods/CpuConstantPoly (0 - 7): These Verifier contracts vary in layout as shown in the GpsStatementVerifier layout image. Each layout encompasses resources, built-ins, constraints, and more, designed for a specific task. Each has unique parameters for its constructor. PoseidonPoseidon: These contracts back the new Poseidon built-in and contain Poseidon-specific lookup tables. When constructing the primary Verifier contracts, specific parameters are employed to facilitate functionality. These parameters reference other auxiliary contracts, decentralizing the logic and ensuring the main contract remains under the 24kb deployment limit. Below is a visual representation of these parameters in relation to key contracts CpuFrilessVerifiers and GpsStatementVerifier: CpuFrilessVerifiers is designed to handle a diverse range of tasks. Its parameters encompass: Auxiliary Polynomial Contracts: These include CpuConstraintPoly, PedersenHashPointsxColumn, PedersenHashPointsYColumn, EcdsaPointsXColumn, and EcdsaPointsYColumn. Poseidon-Related Contracts: Several PoseidonPoseidonFullRoundKey and PoseidonPoseidonPartialRoundKey contracts. Sampling and Memory: The contract uses CpuOods for out-of-domain sampling and MemoryPageFactRegistry for memory-related tasks. Verification: It integrates with MerkleStatementContract for Merkle verification and FriStatementContract for Fri-related tasks. Security: The num_security_bits and min_proof_of_work_bits contracts ensure secure operation. For instances like CpuFrilessVerifier0, specific contracts (e.g., CpuConstraintPoly0, PoseidonPoseidonFullRoundKeyColumn0, CpuOods0) become particularly relevant. The GpsStatementVerifier functions as the hub of verifier operations, necessitating various parameters for effective functioning: Bootloader: It references the CairoBootloaderProgram to initiate the system. Memory Operations: This is facilitated by the MemoryPageFactRegistry contract. Sub-Verifiers: It integrates a series of sub-verifiers (CpuFrilessVerifier0 through CpuFrilessVerifier7) to decentralize tasks. Verification: The hashes, hashed_supported_cairo_verifiers and simple_bootloader_program_hash, are essential for validation processes. The GpsStatementVerifier serves as the primary verifier contract, optimized for minimal logic to fit within deployment size constraints. To function effectively: It relies on smaller verifier contracts, which are already deployed and contain varied verification logic. These smaller contracts, in turn, depend on other contracts, established during their construction. In essence, while the diverse functionalities reside in separate contracts for clarity and size efficiency, they are all interlinked within the GpsStatementVerifier. For future enhancements or adjustments, the proxy and callproxy contracts facilitate upgradability, allowing seamless updates to the GpsStatementVerifier without compromising its foundational logic. The SHARP dispatcher transmits all essential transactions for verification, including: MemoryPages (usually many). MerkleStatements (typically between 3 and 5). FriStatements (generally ranging from 5 to 15). The SHARP dispatcher then forwards the proof using verifyProofAndRegister. Applications, such as the Starknet monitor, validate the status. Once verification completes, they send an updateState transaction.","title":"Solidity verifier","component":"ROOT","version":"","name":"solidity-verifier","url":"/architecture-and-concepts/solidity-verifier/","titles":[{"text":"Current architecture: Multiple smart contracts","hash":"current_architecture_multiple_smart_contracts","id":1},{"text":"SHARP Verifier contract map","hash":"sharp_verifier_contract_map","id":2},{"text":"Constructor parameters of key contracts","hash":"constructor_parameters_of_key_contracts","id":3},{"text":"CpuFrilessVerifier constructor parameters","hash":"cpufrilessverifier_constructor_parameters","id":4},{"text":"GpsStatementVerifier constructor parameters","hash":"gpsstatementverifier_constructor_parameters","id":5},{"text":"Interconnection of contracts","hash":"interconnection_of_contracts","id":6},{"text":"SHARP verification flow","hash":"sharp_verification_flow","id":7}]},"9":{"id":9,"text":"The Starknet CLI is deprecated. Instead, use StarkLi CLI. To enter a Starknet command, use the following syntax: $ starknet Where: represents a single command that executes an operation on Starknet. represents zero or more command line options, each of which modifies the operation of the command. You need to set your Starknet network environment to use either testnet or Mainnet. You can set the environment using either a command-line option or an environment variable. Possible values are: sepolia Sets the Starknet network to testnet mainnet Sets the Starknet network to Mainnet Setting the network environment using a command-line option When you enter any command, include the --network option. For example to use Mainnet, enter a command as follows: $ starknet --network alpha-mainnet You can place the --network option before or after any other option. Setting the network environment using an environment variable Set the STARKNET_NETWORK environment variable as follows: $ export STARKNET_NETWORK= For example, to use testnet, enter the following command: $ export STARKNET_NETWORK=sepolia When working with the CLI, you can manually set the endpoints for the gateways that enable you to interact with Starknet, by including the following options: --feeder_gateway_url Sets the custom endpoint for read commands. --gateway_url Sets the custom endpoint for write commands. The following are the endpoints for Starknet testnet and Mainnet: Testnet feeder gateway URL: https://alpha4.starknet.io/feeder_gateway/ Mainnet feeder gateway URL: https://alpha-mainnet.starknet.io/feeder_gateway/ Testnet gateway URL: https://alpha4.starknet.io/gateway/ Mainnet gateway URL: https://alpha-mainnet.starknet.io/gateway/ Example: Setting a custom read endpoint The following command returns the ABI using the Mainnet feeder gateway. $ starknet get_code --feeder_gateway_url https://alpha-mainnet.starknet.io/feeder_gateway/ Example: Setting a custom write endpoint The following command sends a transaction to the Starknet sequencer using the Mainnet gateway. $ starknet invoke --gateway_url https://alpha-mainnet.starknet.io/gateway/ starknet call --address --abi --function --inputs --block_hash --block_number --signature --wallet --nonce Calls a Starknet contract without affecting the state, accepts the following arguments: contract_address* - address of the contract being called contract_abi* - a path to a JSON file that contains the abi of the contract being called function_name* - name of the function which is called arguments* - inputs to the function being called, represented by a list of space-delimited values block_hash - the hash of the block used as the context for the call operation. If this argument is omitted, the latest block is used block_number - same as block_hash, but specifies the context block by number or tag signature_information - list of field elements as described here wallet_name - the name of the desired wallet, use deploy_account to set-up new accounts in the CLI nonce - account nonce, only relevant if the call is going through an account Block Tag A block context can be specified via the latest or pending tags, where the former refers to the latest accepted on L2 block and the latter refers to the pending block. starknet declare --contract Declares a new contract class on Starknet, accepts the following argument: contract_class - path to a JSON file containing the contract’s compiled code starknet deploy --salt --contract --inputs --token Deploys a new contract, accepts the following arguments: salt - a seed that is used in the computation of the contract’s address (if not specified, the sequencer will choose a random string) contract_definition* - path to a JSON file containing the contract’s bytecode and abi (can be obtained by executing starknet-compile) constructor_inputs* - the arguments given to the contract’s constructor, represented by a list of space-delimited values token - a token allowing contract deployment (can be obtained by applying here). Only used in the Alpha stages and will be deprecated in the future The deploy token is a temporary measure which will be deprecated when fees are incorporated in the system. Only relevant for Mainnet. starknet deploy_account --wallet --account Deploys an account contract, accepts the following arguments: account_name - the name given to the account, used for managing multiple accounts from the CLI (if not specified, the name __default__ is used. wallet_provider* - the path to module which manages the account (responsible for key generation, signing, etc.) Today, the Starknet CLI only works with the OpenZeppelin account contract. The CLI uses this specific wallet provider. To use this provider, either set up the following environment variable or pass the same value directly to the wallet_provider parameter: $ export STARKNET_WALLET=starkware.starknet.wallets.open_zeppelin.OpenZeppelinAccount Using the built-in wallet providers that are part of the cairo-lang package (starkware.starknet.wallets…​) is not secure (for example, the private key may be kept not encrypted and without backup in your home directory). You should only use them if you’re not overly concerned with losing access to your accounts (for example, for testing purposes). starknet estimate_fee --address --abi --function --inputs Returns the fee estimation for a given contract call. Accepts the following arguments: address* - the address of the contract being called contract_abi* - a path to a JSON file that contains the abi of the contract being called function_name*- the name of the function being called arguments* - inputs to the function being called, represented by a list of space-delimited values` starknet estimate_message_fee --from_address --to_address --function --inputs Returns the fee estimation for a given L1 handler application. Accepts the following arguments: from_address* - the L1 address of the sender to_address* - the L2 address of the recipient contract_abi* - a path to a JSON file containing the abi of the receiving contract on L2 function_name*- the name of the desired L1 handler arguments* - inputs to the called handler, represented by a list of space-delimited values starknet get_block --hash --number Returns the requested block, exactly one of the following arguments must be given: block_hash - hash of the requested block block_number - number or tag of the requested block starknet get_code --contract_address --block_hash --block_number Returns the ABI and the byte code of the requested contract, accepts the following arguments: contact_address* - address of the requested contract block_hash - the hash of the block used as the context for the operation. If this argument is omitted, the latest block is used block_number - same as block_hash, but specifies the context block by number or tag starknet get_storage_at --contract_address --key --block_hash --block_number Queries a contract’s storage at a specific key, accepts the following arguments: contract_address *- address of the requested contract key* - the requested key from the given contract’s storage block_hash - the hash of the block relative to which the storage will be provided. In case this argument is not given, the latest block is used block_number - same as block_hash, but specifies the context block by number or tag starknet get_transaction --hash Returns the requested transaction, expects the following argument: transaction_hash* - hash of the requested transaction starknet get_transaction_receipt --hash Returns the receipt associated with the transaction, expects the following argument: transaction_hash* - hash of the requested transaction starknet invoke starknet tx_status starknet invoke --address --abi --function --inputs --signature --wallet --nonce Sends a transaction to the Starknet sequencer, accepts the following arguments: address* - the address of the contract being called contract_abi* - a path to a JSON file that contains the abi of the contract being called function_name*- the name of the function being called arguments* - inputs to the function being called, represented by a list of space-delimited values signature_information - list of field elements as described here wallet_name - the name of the desired wallet, use deploy_account to set-up new accounts in the CLI. nonce - account nonce, only relevant if the call is going through an account Today, interaction with Starknet may be done either via account or by a direct call. The signature argument can only be provided in the case of a direct call, since otherwise providing the signature is the responsibility of the account module. To use an account you must specify wallet_name, otherwise a direct call will be used (you may also explicitly perform a direct call by adding --no_wallet to the command). Note that in the future direct calls will be deprecated and the only way to interact with the system would be through accounts. starknet tx_status --hash --contract --error_message Returns the transaction status, accepts the following arguments: transaction_hash* - hash of the requested transaction contract_definition - path to a JSON file containing the compiled contract to which the transaction was addressed. If supplied, the debug information from the compiled contract will be used to add error locations. error_message - if specified, only the error message will be returned (or empty response in case the transaction was successful) The possible statuses of a transaction are: NOT_RECEIVED RECEIVED PENDING REJECTED ACCEPTED_ON_L2 ACCEPTED_ON_L1 For more information, see Transaction lifecycle.","title":"Legacy Starknet CLI reference","component":"ROOT","version":"","name":"starkli","url":"/cli/starkli/","titles":[{"text":"Basic command line syntax","hash":"basic_command_line_syntax","id":1},{"text":"Setting the Starknet network environment","hash":"setting_the_starknet_network_environment","id":2},{"text":"Setting custom endpoints","hash":"setting_custom_endpoints","id":3},{"text":"starknet call","hash":"starknet_call","id":4},{"text":"starknet declare","hash":"starknet_declare","id":5},{"text":"starknet deploy","hash":"starknet_deploy","id":6},{"text":"starknet deploy_account","hash":"starknet_deploy_account","id":7},{"text":"starknet estimate_fee","hash":"starknet-estimate_fee","id":8},{"text":"starknet estimate_message_fee","hash":"starknet_estimate_message_fee","id":9},{"text":"starknet get_block","hash":"starknet_get_block","id":10},{"text":"starknet get_code","hash":"starknet_get_code","id":11},{"text":"starknet get_storage_at","hash":"starknet_get_storage_at","id":12},{"text":"starknet get_transaction","hash":"starknet_get_transaction","id":13},{"text":"starknet get_transaction_receipt","hash":"starknet_get_transaction_receipt","id":14},{"text":"starknet invoke","hash":"starknet_invoke","id":15},{"text":"starknet tx_status","hash":"starknet_tx_status","id":16}]},"10":{"id":10,"text":"When the Starknet compiler is installed, you can view this command-line help in a terminal by entering the following command: starknet-compile --help starknet-compile [-h] [--abi ABI] [--disable_hint_validation] [--account_contract] [--dont_filter_identifiers] [-v] [--prime PRIME] [--cairo_path CAIRO_PATH] [--preprocess] [--output OUTPUT] [--no_debug_info] [--debug_info_with_source] [--cairo_dependencies CAIRO_DEPENDENCIES] [--no_opt_unused_functions] file [file ...] The following example compiles the file contract.cairo. It generates two files: contract_compiled.json The contract class. This file contains the bytecode and all other information necessary to execute a contract. For information on contract classes, see Contract classes and instances. contract_abi.json The contract’s ABI. starknet-compile contract.cairo \\ --output contract_compiled.json \\ --abi contract_abi.json A tool to compile Starknet contracts. File names. Show this help message and exit. Output the contract’s ABI. Disable the hint validation. Compile as account contract. Disable the filter-identifiers-optimization.If True, all the identifiers will be kept, instead of just the ones mentioned in hints or 'with_attr' statements. show program’s version number and exit The size of the finite field. A list of directories, separated by \":\" to resolve import paths. The full list will consist of directories defined by this argument, followed by the environment variable CAIRO_PATH, the working directory and the standard library path. Stop after the preprocessor step and output the preprocessed program. The output file name (default: stdout). Don’t include debug information in the compiled file. Include debug information with a copy of the source code. Output a list of the Cairo source files used during the compilation as a CMake file. Disables unused function optimization.","title":"Legacy compiler CLI reference","component":"ROOT","version":"","name":"starknet-compiler-options","url":"/cli/starknet-compiler-options/","titles":[{"text":"Usage","hash":"usage","id":1},{"text":"Example","hash":"example","id":2},{"text":"Description","hash":"description","id":3},{"text":"Positional arguments","hash":"positional_arguments","id":4},{"text":"file","hash":"file","id":5},{"text":"Optional arguments","hash":"optional_arguments","id":6},{"text":"-h, --help","hash":"h_help","id":7},{"text":"--abi ABI","hash":"abi_abi","id":8},{"text":"--disable_hint_validation","hash":"disable_hint_validation","id":9},{"text":"--account_contract","hash":"account_contract","id":10},{"text":"--dont_filter_identifiers","hash":"dont_filter_identifiers","id":11},{"text":"-v, --version","hash":"v_version","id":12},{"text":"--prime PRIME","hash":"prime_prime","id":13},{"text":"--cairo_path CAIRO_PATH","hash":"cairo_path_cairo_path","id":14},{"text":"--preprocess","hash":"preprocess","id":15},{"text":"--output OUTPUT","hash":"output_output","id":16},{"text":"--no_debug_info","hash":"no_debug_info","id":17},{"text":"--debug_info_with_source","hash":"debug_info_with_source","id":18},{"text":"--cairo_dependencies CAIRO_DEPENDENCIES","hash":"cairo_dependencies_cairo_dependencies","id":19},{"text":"--no_opt_unused_functions","hash":"no_opt_unused_functions","id":20}]},"11":{"id":11,"text":"Ensure that the below commands are working properly on your system. starkli --version scarb --version If either of the above commands fails, see Setting up your environment. Deploying a smart contract in Starknet requires two steps: Declaring the class of your contract, i.e. sending your contract’s code to the network. Deploying a contract, i.e. creating an instance of the code you previously declared. If you require a smart contract for testing, you can use this sample contract, lib.cairo, from the Starknet Book. Declaration is the process of submitting your contract’s code to the Starknet network, making it available for future deployments. It’s a one-time process for each unique contract code. Think of declaration as registering a blueprint for your contract with the network. We can draw a parallel with C++ programming: Writing the contract code is similar to defining a class in C++. Declaring the contract is analogous to compiling that class into object code. Deploying an instance of the contract is like creating an object of that class. Another parallel with Java: Writing the contract is like writing a Java class. Declaring is similar to compiling the Java class into bytecode. Deploying is like instantiating an object of that class in the JVM. Just as you can create multiple objects from a single class in C++, you can deploy multiple instances of a declared contract in Starknet. Separating declaration from deployment offers several advantages: Gas Optimization: The contract code is stored on the network only once, reducing gas costs for subsequent deployments. Reusability: Multiple instances of the same contract can be deployed without repeatedly sending the full code. Version Control: It allows for better management of contract versions across different deployments. You can compile a smart contract using the Scarb compiler. To compile a smart contract, create a directory containing a Scarb.toml file and a subdirectory named src containing your contract source code. Add the following code to the Scarb.toml file: [package] name = \"contracts\" version = \"0.1.0\" [dependencies] starknet = \">=2.2.0\" [[target.starknet-contract]] sierra = true Navigate into the newly created directory: cd Run the following command: scarb build The compiled contract will be saved in the target/dev/ directory. The contract is now compiled and ready to be deployed. Next you will need to declare an RPC provider within your contract. To interact with the Starknet network, you need to set an RPC endpoint within Starkli. The following are the RPC providers available for Starknet: Provider name Description Infura or Alchemy Use a provider like Infura or Alchemy. Custom configuration Set up your own node and use the RPC provider of your node. More information on this can be found within the Starknet Book. For demonstration purposes, the Starknet Sequencer’s Gateway is used in the below steps. A contract can be declared on Starknet using the following command: starkli declare target/dev/.json --network=sepolia --compiler-version=2.1.0 The --network flag is used to specify the network you want to use, it could also be mainnet for example. The --compiler-version flag is used to specify the version of the compiler you want to use. Starkli is currently running on version 2.6.x of the compiler. You can find the compiler version supported by Starkli by running: starkli declare --help In the --compiler-version flag you will see possible versions of the compiler: --compiler-version Statically-linked Sierra compiler version [possible values: 2.0.1, 2.1.0] However, the Scarb compiler version may be 2.2.0, you can find this out by running: scarb --version This is because Starkli and Scarb are not always in sync. In this case you would need to use the compiler version that Starkli is using by installing a previous version of Scarb. See the Scarb github repo for more detail. You can do this by running the following command for installing Scarb version 0.6.1: curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh -s -- -v 0.6.1 If you were using a provider like Infura or Alchemy, the declaration command would look like this: starkli declare target/dev/contracts_Ownable.sierra.json \\ --rpc=https://starknet-sepolia.infura.io/v3/ \\ --compiler-version=2.6.0 The result of the declaration command is a contract class hash: Class hash declared: This hash is the identifier of the contract class in Starknet. You can think of it as the address of the contract class. You can use a block explorer like StarkScan to see the contract class hash in the blockchain. Using Starkli: You can use the following command to retrieve the contract class by its hash: starkli class-by-hash --network=sepolia If the contract is successfully declared, this command will return the contract class details. If the contract you are declaring has previously been declared by someone else, you will get an output like this: Not declaring class as its already declared. Class hash: In this case, you can still use the methods above to verify the existing declaration.","title":"Declaring a smart contract","component":"ROOT","version":"","name":"declare-a-smart-contract","url":"/quick-start/declare-a-smart-contract/","titles":[{"text":"Prerequisites","hash":"prerequisites","id":1},{"text":"Ensure Starkli and Scarb are installed correctly","hash":"ensure_starkli_and_scarb_are_installed_correctly","id":2},{"text":"Introduction","hash":"introduction","id":3},{"text":"What is Declaration?","hash":"what_is_declaration","id":4},{"text":"Why Separate Declaration and Deployment?","hash":"why_separate_declaration_and_deployment","id":5},{"text":"Compiling a smart contract","hash":"compiling_a_smart_contract","id":6},{"text":"Setting an RPC provider","hash":"setting_an_rpc_provider","id":7},{"text":"Declaring a smart contract","hash":"declaring_a_smart_contract","id":8},{"text":"Expected result","hash":"expected_result","id":9}]},"12":{"id":12,"text":"Ensure that the below commands are working properly on your system. starkli --version scarb --version If either of the above commands fail, please visit Setting up your environment. Deploying a smart contract in Starknet requires two steps: Declaring the class of your contract, i.e. sending your contract’s code to the network. Deploying a contract, i.e. creating an instance of the code you previously declared. Deployment is the process of creating a live, functional instance of your declared smart contract on the Starknet network. It’s like bringing a blueprint to life by constructing an actual building. Let’s use a factory production analogy: Declaration is like creating a product blueprint and registering it with the factory. Deployment is like using that blueprint to manufacture an actual product on the assembly line. Each deployed contract is a unique product instance, even though they’re all based on the same blueprint. Deploying a smart contract involves instantiating it on Starknet. The deployment command requires the class hash of the smart contract and any arguments expected by the constructor. For our example, the constructor expects an address to assign as the owner: starkli deploy \\ \\ \\ --network=sepolia With the class hash and constructor inputs, the command looks like this: starkli deploy \\ 0x00e68b4b07aeecc72f768b1c086d9b0aadce131a40a1067ffb92d0b480cf325d \\ 0x02cdAb749380950e7a7c0deFf5ea8eDD716fEb3a2952aDd4E5659655077B8510 \\ --network=sepolia Think of as the product code in our factory analogy, and as the specific settings for this product instance. After running the command and adding your password, you will see an output similar to this: Deploying class 0x00e68b4b07aeecc72f768b1c086d9b0aadce131a40a1067ffb92d0b480cf325d with salt 0x04bc3fc2284c8e41fb3d2a37bb0354fd0506131cc77a8c91e4e67ce3aed1d19e... The contract will be deployed at address 0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e Contract deployment transaction: 0x0086972e7463d5673d8b553ae521ec2df974a97c2ce6aafc1d1c20d22c6b96c6 Contract deployed: 0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e The smart contract has now been deployed to Starknet. To verify your contract deployment: Using Starkli: You can use the following command to retrieve the class hash of your deployed contract: starkli class-hash-at --network=sepolia Using a Block Explorer: You can use block explorers like https://voyager.online/ or https://starkscan.co/ to search for the contract address. Remember to select the Sepolia testnet in these block explorers when searching for your deployed contract. Your smart contract is now live on the Starknet network, ready to interact with users and other contracts. When using Starknet SDKs like starknet.js, starknet.py, or starknet-rs, you might encounter the following error during deployment: Requested ContractAddress(PatriciaKey()) is unavailable for deployment. This error means that a contract is already deployed at the computed address. The address is a function of the class_hash, deployer_address (if specified), salt, and constructor_calldata_hash. To resolve this issue, make sure to provide a different salt value. This ensures you’re not attempting to override an already deployed contract.","title":"Deploying a smart contract","component":"ROOT","version":"","name":"deploy-a-smart-contract","url":"/quick-start/deploy-a-smart-contract/","titles":[{"text":"Prerequisites","hash":"prerequisites","id":1},{"text":"Ensure Starkli and Scarb are installed correctly","hash":"ensure_starkli_and_scarb_are_installed_correctly","id":2},{"text":"Introduction","hash":"introduction","id":3},{"text":"Deploying a smart contract","hash":"deploying_a_smart_contract","id":4},{"text":"Expected result","hash":"expected_result","id":5},{"text":"Verifying the Deployment","hash":"verifying_the_deployment","id":6},{"text":"Potential deployment errors","hash":"potential_deployment_errors","id":7}]},"13":{"id":13,"text":"This topic previously appeared in the Starknet Book. To compile, deploy, and interact with our smart contract, use the Starknet Remix plugin. This tool enables you to start to develop for Starknet without the need for any local installations on your machine. Go to the Remix IDE website with the Starknet plugin activated. Click the File Explorer tab to review the details of the example project. Click the Starknet tab, and click the Settings. Select the latest version of Cairo available in Remix. In the File explorer, open the Scarb.toml file to verify the version of your project. Ensure it matches the version specified originally, and correct any discrepancies, if necessary. For this tutorial, a default example project is provided. Modify or remove certain files and directories as needed. Rename the root directory to ownable. In your Scarb.toml, under the [package] section, set the name to ownable. Under src/, delete the balance.cairo and forty_two.cairo files, if they exist. Open lib.cairo and delete all its contents. Explore the Example Ownable contract, crafted in Cairo for Starknet. It includes: An ownership system. A method to transfer ownership. A method to check the current owner. An event notification for ownership changes. use starknet::ContractAddress; (1) #[starknet::interface] trait OwnableTrait { (1) fn transfer_ownership(ref self: T, new_owner: ContractAddress); (2) fn get_owner(self: @T) -> ContractAddress; (2) } #[starknet::contract] mod Ownable { use super::ContractAddress; use starknet::get_caller_address; #[event] #[derive(Drop, starknet::Event)] enum Event { OwnershipTransferred: OwnershipTransferred, (3) } #[derive(Drop, starknet::Event)] struct OwnershipTransferred { (3) #[key] prev_owner: ContractAddress, #[key] new_owner: ContractAddress, } #[storage] struct Storage { (4) owner: ContractAddress, } #[constructor] fn constructor(ref self: ContractState, init_owner: ContractAddress) { (5) self.owner.write(init_owner); } #[abi(embed_v0)] impl OwnableImpl of super::OwnableTrait { fn transfer_ownership(ref self: ContractState, new_owner: ContractAddress) { self.only_owner(); let prev_owner = self.owner.read(); self.owner.write(new_owner); self.emit(Event::OwnershipTransferred(OwnershipTransferred { prev_owner: prev_owner, new_owner: new_owner, })); } fn get_owner(self: @ContractState) -> ContractAddress { self.owner.read() } } #[generate_trait] impl PrivateMethods of PrivateMethodsTrait { fn only_owner(self: @ContractState) { (6) let caller = get_caller_address(); assert(caller == self.owner.read(), 'Caller is not the owner'); } } } 1 Dependencies and Interface: starknet::ContractAddress: Represents a Starknet contract address. OwnableTrait: Defines essential functions for transferring and retrieving ownership. 2 External Functions: Contains functions for transferring ownership and fetching information about the current owner. 3 Events: OwnershipTransferred indicates changes in ownership, providing details about the previous and new owners. 4 Storage: Stores the contract’s state, including the address of the current owner. 5 Constructor: Sets up the contract by assigning an initial owner. 6 Private Methods: only_owner validates if the caller is the current owner. To compile using Remix: Click the File Explorer tab, open the lib.cairo file and insert the code from Example: ownable Cairo contract. Click the Starknet tab, then click Home. Under (1) Compile, click Compile lib.cairo. Grant the necessary permissions when prompted. Select Remember my choice for a smoother compilation process in the future. The compilation process creates an artifacts directory containing the compiled contract in two formats: a Sierra file, in JSON format, and a Casm file. For Starknet deployment, Remix uses the Sierra file. Deploying a smart contract in Starknet requires two high-level steps: Declare the class of your contract, that is, send your contract’s code to the network. When you declare the contract class, you establish an initial owner by calling the class’s constructor function. Deploy an instance of the contract class. This tutorial uses a development network (devnet) to deploy your smart contract. A devnet is a Starknet instance that you run as a local node. A devnet enables much quicker development than is possible using testnet, as well as providing privacy prior to launching on testnet. Declaring the contract class Select the network by clicking the Starknet tab, and then clicking the Remote Devnet menu. Under Devnet account selection, open the menu to view a list of accounts specific to the designated devnet. Select a devnet account from the list and note its address for later use. Click the Declare lib.cairo button. Remix’s terminal provides various logs with important details such as: transaction_hash: This unique hash identifies the transaction and can be used to track its status. class_hash: Similar to an identifier, the class hash contains the definition of the smart contract. Remix terminal output after declaring the ownable contract ------------------------ Declaring contract: lib.cairo ------------------------ { \"transaction_hash\": \"0x36dabf43f4962c97cf67ba132fb520091f268e7e33477d77d01747eeb0d7b43\", \"class_hash\": \"0x540779cd109ad20f46cb36d8de1ce30c75469862b4dc75f2f29d1b4d1454f60\" } ---------------------- End Declaring contract: lib.cairo ---------------------- After Remix declares the contract class, the Declare button says Declared lib.cairo. Now you’re ready to deploy an instance of the contract class. Deploying a contract instance Paste the Devnet account address you used into the init_owner variable. Click Deploy. After deployment, Remix’s terminal displays various logs, including a transaction receipt, containing important details, such as: transaction_hash: This unique hash identifies the transaction and can be used to track its status. contract_address: The address of the deployed contract. You can use this address to interact with your contract. data: Contains the init_owner address provided to the constructor. Remix terminal output after deploying an instance of the Ownable class in lib.cairo ------------------------ Deploying contract: lib.cairo ------------------------ { \"transaction_hash\": \"0x624f5b9f57e53f6b5b62e588f0f949442172b3ad5d04f0827928b4d12c2fa58\", \"contract_address\": [ \"0x699952dc736661d0ed573cd2b0956c80a1602169e034fdaa3515bfbc36d6410\" ] ... \"data\": [ \"0x6b0ee6f418e47408cf56c6f98261c1c5693276943be12db9597b933d363df\", ... ] ... } ---------------------- End Deploying contract: lib.cairo ---------------------- Now that the contract is operational on the development network, you can start interacting with it on the Starknet tab, under (3) Interact. Under Read you should see the get_owner() function. Click the Call button. The function doesn’t require any arguments so the calldata field remains empty. This function reads data, so its invocation is referred to as a call. The terminal displays the output, showing the owner’s address, which you provided during the contract’s deployment within the calldata for the constructor: ------------------- Calling get_owner ------------------------ { \"resp\": { \"result\": [ \"0x6b0ee6f418e47408cf56c6f98261c1c5693276943be12db9597b933d363df\" ] }, \"contract\": \"lib.cairo\", \"function\": \"get_owner\" } ------------------- End calling get_owner -------------------- This call doesn’t consume gas because the function doesn’t modify the contract’s state. Under (3) Interact, select Write, where functions that alter the contract’s state are listed. Select the transfer_ownership() function, which requires providing the new owner address as input. Fill in the new_owner field with any Devnet address other than the one you used to deploy the contract. Under Devnet account selection, open the menu, select a Devnet account from the list, and copy its address. Click the Call button. The terminal displays the transaction hash indicating the change in the contract’s state. Because this interaction is an INVOKE transaction, and it modifies the contract’s state. An INVOKE transaction requires the signature of the account executing the function. For INVOKE transactions, the terminal logs include a finality_status parameter indicating the outcome. A status of ACCEPTED_ON_L2 indicates approval by the Sequencer, the entity responsible for receiving and processing transactions, indicating inclusion in an upcoming block. Conversely, a REJECTED status indicates that the Sequencer did not approve the transaction, preventing its inclusion in the next block. Typically, transactions of this nature are approved, resulting in a modification of the contract’s state. ---------- Invoke transfer_ownership transaction receipt ---------------- { \"resp\": { \"transaction_hash\": \"0x5495d56633745aa3b97bdb89c255d522e98fd2cb481974efe898560839aa472\" }, \"contract\": \"lib.cairo\", \"function\": \"get_owner\" } ----------End Invoke transfer_ownership transaction receipt ------------- After testing your smart contract on a development network, the next step is deploying it onto the Starknet testnet. The Starknet testnet is a public platform accessible to all, providing an excellent environment for testing smart contracts and encouraging collaboration among developers. Before deploying your smart contract on Starknet, it’s crucial to address transaction costs. While deploying on the Starknet testnet is free, having an operational smart wallet account is essential. You can set up a smart wallet and a Starknet account using either of the following platforms: Argent Braavos Both options offer robust Starknet wallets with advanced security measures and enhanced accessibility features enabled by the capabilities of the Cairo VM. Here’s how to set up your smart wallet: Install the recommended browser extension corresponding to your chosen wallet. Follow the instructions provided by your wallet provider to deploy your account on testnet. Use the Starknet Faucet to fund your account. Execute the deployment of your account onto the network, typically completed within approximately 10 seconds. Once the setup is complete, you are primed to deploy your smart contracts onto the Starknet testnet. Proceed as per the aforementioned deployment steps. Within the Environment selection tab, Select Wallet. Select your Starknet account and proceed with the deployment and interaction processes for your contract. You can monitor transaction hashes and addresses by using various Starknet block explorers such as: Starkscan Voyager ViewBlock Oklink These block explorers offer a graphical depiction of transactions and modifications to the contract state. Noteworthy is the visibility provided when altering contract ownership through the transfer_ownership() function, as the emitted event by the contract becomes observable within the block explorer. This mechanism serves as a potent means to monitor contractual events.","title":"Deploying and interacting with a Starknet smart contract with Remix","component":"ROOT","version":"","name":"deploy-interact-with-a-smart-contract-remix","url":"/quick-start/deploy-interact-with-a-smart-contract-remix/","titles":[{"text":"Setting up your environment in Remix","hash":"setting_up_your_environment_in_remix","id":1},{"text":"Customizing your environment for the Ownable contract","hash":"customizing_your_environment_for_the_ownable_contract","id":2},{"text":"Exploring the ownable Starknet smart contract","hash":"exploring_the_ownable_starknet_smart_contract","id":3},{"text":"Example: ownable Cairo contract","hash":"example-cairo-contract","id":4},{"text":"Contract component breakdown","hash":"contract_component_breakdown","id":5},{"text":"Compiling the contract","hash":"compiling_the_contract","id":6},{"text":"Deploying your contract on the development network (devnet)","hash":"deploying_your_contract_on_the_development_network_devnet","id":7},{"text":"Interacting with the contract","hash":"interacting_with_the_contract","id":8},{"text":"Identifying the owner of the contract instance","hash":"identifying_the_owner_of_the_contract_instance","id":9},{"text":"Transferring ownership of the contract instance","hash":"transferring_ownership_of_the_contract_instance","id":10},{"text":"Deployment on Starknet testnet","hash":"deployment_on_starknet_testnet","id":11},{"text":"Setting up a smart wallet and a Starknet account on testnet","hash":"setting_up_a_smart_wallet_and_a_starknet_account_on_testnet","id":12},{"text":"Deployment and Interaction","hash":"deployment_and_interaction","id":13}]},"14":{"id":14,"text":"In order to interact with Starknet and compile Cairo code, you need to install several tools. The following tools are recommended to begin developing on Starknet: Tool name Description Documentation Code Repository Starkli A command-line interface that allows you to interact with Starknet. book.starkli.rs github.com/xJonathanLEI/starkli Scarb A build toolchain and package manager for Cairo and Starknet ecosystems. docs.swmansion.com/scarb github.com/software-mansion/scarb The steps for installing Starkli and upgrading Starkli are identical. Procedure Install Starkliup, the installer for the Starkli environment: curl https://get.starkli.sh | sh Starkliup should now be installed. Restart the terminal. Install Starkli: starkliup Starkli should now be installed. Restart the terminal and run the following command to verify the installation: starkli --version Starkli prints the current version. For the majority of flags available on Starkli you can set environment variables to make the commands shorter and easier to manage. Setting environment variables for Starkli significantly simplifies command execution and management, thereby enhancing efficiency, readability, and control when using Starkli. The two primary environment variables that are vital for effective usage of Starkli’s CLI are: STARKNET_ACCOUNT The location of the Account Descriptor file. STARKNET_KEYSTORE The location of the keystore file for the Signer. Set these environment variables as follows: export STARKNET_ACCOUNT=~/.starkli-wallets/deployer/account.json export STARKNET_KEYSTORE=~/.starkli-wallets/deployer/keystore.json Scarb is compatible with macOS, Linux, and Windows operating systems. The steps for installing Scarb and upgrading Scarb are identical. Procedure Open a terminal and execute the following command: curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh Restart the terminal and run the following command to verify the installation: scarb --version Scarb should now be installed. Scarb’s installation on Windows requires manual setup. Procedure Follow the steps in the Scarb documentation. Restart the terminal and run the following command to verify the installation: scarb --version Scarb should now be installed.","title":"Setting up your environment","component":"ROOT","version":"","name":"environment-setup","url":"/quick-start/environment-setup/","titles":[{"text":"Installing Starkli","hash":"installing_starkli","id":1},{"text":"Setting environment variables for Starkli","hash":"setting_environment_variables_for_starkli","id":2},{"text":"Installing Scarb","hash":"installing_scarb","id":3},{"text":"MacOS and Linux installation","hash":"macos_and_linux_installation","id":4},{"text":"Windows installation","hash":"windows_installation","id":5}]},"15":{"id":15,"text":"Ensure that the below commands are working properly on your system. starkli --version scarb --version If either of the above commands fail, see Setting up your environment. Starkli enables interaction with smart contracts via two primary methods: call for read-only functions. invoke for write functions that modify the state. The call command allows querying a smart contract function without sending a transaction. As an example you can use the get_owner function which doesn’t expect any arguments and returns the address of the current owner: starkli call \\ 0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e \\ get_owner --network=sepolia This will return the address that we passed to the constructor during deployment: [ \"0x02cdab749380950e7a7c0deff5ea8edd716feb3a2952add4e5659655077b8510\" ] To modify the state of the smart contract, use the invoke command. Unlike the call command, invoke submits a transaction to the network. In this example, we’ll invoke the transfer_ownership function to transfer the ownership from our deployer address to a different smart wallet address: starkli invoke \\ 0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e \\ transfer_ownership \\ 0x011088d3cbe4289bc6750ee3a9cf35e52f4fa4e0ac9f42fb0b62e983139e135a \\ --network=sepolia After the transaction is accepted on L2, you can confirm the state transition by calling the get_owner function again: starkli call \\ 0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e \\ get_owner \\ --network=sepolia The get_owner function now returns the new owner address, confirming the successful ownership transfer.","title":"Interacting with a smart contract with Starkli","component":"ROOT","version":"","name":"interact-with-a-smart-contract","url":"/quick-start/interact-with-a-smart-contract/","titles":[{"text":"Prerequisites","hash":"prerequisites","id":1},{"text":"Ensure Starkli and Scarb are installed correctly","hash":"ensure_starkli_and_scarb_are_installed_correctly","id":2},{"text":"Introduction","hash":"introduction","id":3},{"text":"Calling a function","hash":"calling_a_function","id":4},{"text":"Invoking a function","hash":"invoking_a_function","id":5}]},"16":{"id":16,"text":"This guide shows you how to set up a Starknet account and wallet in the context of a smart contract deployment. For information on creating a Starknet wallet as an end user, see Getting Started Using Starknet: Setting Up a Starknet Wallet. Starkli is installed correctly. Ensure that the following command shows the version information for Starkli: starkli --version If this command fails, see Setting up your environment. A Starknet wallet is installed, either Argent X or Braavos. For information on a specific wallet, including installation instructions, see that wallet’s site. A smart wallet is composed of two parts: A Signer: A smart contract that can sign transactions. An Account Descriptor: A json file that contains information about the smart wallet, such as its address and public key. After creating and funding your smart wallet with ETH you can deploy it to Starknet. For demonstration purposes, this page uses Starknet’s testnet. For testnet transactions you can fund your wallet using one of the Starknet Sepolia faucets. A Signer is a smart contract that can sign transactions. It’s a crucial component of accounts in Starknet. To create a Signer you will need the private key of your smart wallet (the public key can be derived from it). Starkli has the ability to create a keystore file that securely stores the private key of smart wallets each with a password. The accounts in the keystore file can be used to sign transactions using Starkli. The main advantage of this approach is that it prevents storing the private key as plain text on your computer. Instead, a password is used to create an encrypted file in a location of choice. Normally, the keystore file is stored in the default location of the Starkli CLI. The following command creates a keystore file for a smart wallet in the default location in ~/.starkli-wallets/deployer: Create a new directory: mkdir -p ~/.starkli-wallets/deployer Create a keystore file within the directory: starkli signer keystore from-key ~/.starkli-wallets/deployer/keystore.json Enter private key: Enter password: Created new encrypted keystore file: /home/parallels/.starkli-wallets/deployer/keystore.json Public key: 0x0550… In the private key prompt, paste the private key of your smart wallet. In the password prompt, enter a password of your choice. You will need this password to sign transactions using Starkli. Next export the private key from your Argent X or Braavos wallet: Navigate to: Settings section → Select your Account → Export Private Key. Navigate to: Settings section → Privacy and Security → Export Private Key. While knowing the private key of a smart wallet is necessary to sign transactions, it’s not sufficient. We also need to inform Starkli about the signing mechanism employed by our smart wallet created by Argent X or Braavos. Starkli offers a command to collect all the required information from a smart wallet by providing its onchain address. Using this data, the CLI generates a json file that can be used to sign transactions: starkli account fetch --help Fetch account config from an already deployed account contract The fetch command supports both Argent X and Braavos smart wallets. Make sure your wallet address is already deployed and enter the following command to create and save the account descriptor file: starkli account fetch --output ~/.starkli-wallets/deployer/account.json --rpc You can obtain access to a JSON-RPC endpoint in one of the following ways: Host your own node with Pathfinder, Juno, Deoxys, or Papyrus. Use a third-party JSON-RPC API provider. For information on providers, see Full nodes and API services. The following command shows the details of the account descriptor: cat ~/.starkli-wallets/deployer/account.json The account descriptor should have the following structure: { \"version\": 1, \"variant\": { \"type\": \"argent\", \"version\": 1, \"implementation\": \"\", \"signer\": \"\", \"guardian\": \"0x0\" }, \"deployment\": { \"status\": \"deployed\", \"class_hash\": \"\", \"address\": \"\" } } If you are working with Braavos wallet, the type is defined as braavos and the account descriptor structure might be slightly different. Once you have an account file, you can deploy the account contract with the starkli account deploy command. This command sends a DEPLOY_ACCOUNT transaction, which requires the account to contain enough ETH to pay for the transaction fee. To deploy your account, run the following command: starkli account deploy ~/.starkli-wallets/deployer/account.json This command requires a signer. If you receive an error after running this command, ensure you have the STARKNET_KEYSTORE environment variable set as per these instructions. When run, the command shows: The address where the contract will be deployed. Instructions for the user to fund the account before proceeding. Here’s an example command output: The estimated account deployment fee is 0.000011483579723913 ETH. However, to avoid failure, fund at least: 0.000017225369585869 ETH to the following address: 0x01cf4d57ba01109f018dec3ea079a38fc08b789e03de4df937ddb9e8a0ff853a Press [ENTER] once youve funded the address. You have now successfully deployed a new account to Starknet.","title":"Setting up an account","component":"ROOT","version":"","name":"set-up-an-account","url":"/quick-start/set-up-an-account/","titles":[{"text":"Prerequisites","hash":"prerequisites","id":1},{"text":"Creating an account","hash":"creating_an_account","id":2},{"text":"Creating a Signer","hash":"creating_a_signer","id":3},{"text":"Creating a keystore file","hash":"creating_a_keystore_file","id":4},{"text":"Export the private key from your wallet","hash":"export_the_private_key_from_your_wallet","id":5},{"text":"Argent X","hash":"argent_x","id":6},{"text":"Braavos","hash":"braavos","id":7},{"text":"Creating an Account Descriptor","hash":"creating_an_account_descriptor","id":8},{"text":"Deploying an account","hash":"deploying_an_account","id":9}]},"17":{"id":17,"text":"For a faster and more private development process, it is often preferable to use a local version of Starknet – also known as a development network (devnet) – which can be easily set up by either Starknet Devnet or Katana. Starkli is installed correctly. Ensure that the following command shows the version information for Starkli: starkli --version If this command fails, see Setting up your environment. Install Devnet: cargo install starknet-devnet and start it using: starknet-devnet --seed 42 Upon initialization, Devnet predeploys a fee token, universal deployer, and a set of funded accounts. By default, the set of predeployed accounts changes on each initialization, but specifying the same --seed value ensures consistent account addresses between executions. The result should be similar to the following: Predeployed FeeToken ETH Address: 0x49D36570D4E46F48E99674BD3FCC84644DDD6B96F7C741B1562B82F9E004DC7 STRK Address: 0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d Class Hash: 0x046ded64ae2dead6448e247234bab192a9c483644395b66f2155f2614e5804b0 Predeployed UDC Address: 0x41A78E741E5AF2FEC34B695679BC6891742439F7AFB8484ECD7766661AD02BF Class Hash: 0x7B3E05F48F0C69E4A65CE5E076A66271A527AFF2C34CE1083EC6E1526997A69 Chain ID: SN_SEPOLIA (0x534e5f5345504f4c4941) | Account address | 0x34ba56f92265f0868c57d3fe72ecab144fc96f97954bbbc4252cef8e8a979ba | Private key | 0xb137668388dbe9acdfa3bc734cc2c469 | Public key | 0x5a5e37c60e77a0318643b111f88413a76af6233c891a0cfb2804106372006d4 ... As previously described, import Devnet’s first predeployed accounts to an account file (notice that the address of the fetched account is the same as the one printed out by Devnet): starkli account fetch --rpc http://127.0.0.1:5050 0x34ba56f92265f0868c57d3fe72ecab144fc96f97954bbbc4252cef8e8a979ba --output ~/.starkli-wallets/devnet/account.json http://127.0.0.1:5050 are Devnet’s default host and port, which can be configured upon initialization using the --host and --port options and create the corresponding keystore file by executing: starkli signer keystore from-key ~/.starkli-wallets/devnet/keystore.json and entring 0xb137668388dbe9acdfa3bc734cc2c469 as private key (the same one as the one printed out by Devnet) Now that you have an account set up, you can use Starkli to freely interact with Devnet. For example, you can redeploy Devnet’s predeployed universal deployer using the following command: starkli deploy --rpc http://127.0.0.1:5050 --account ~/.starkli-wallets/devnet/account.json --keystore ~/.starkli-wallets/devnet/keystore.json 0x7B3E05F48F0C69E4A65CE5E076A66271A527AFF2C34CE1083EC6E1526997A69 Install Katana: git clone https://github.com/dojoengine/dojo cd dojo cargo install --path ./bin/katana --locked --force and start it using: katana Upon initialization, Katana predeploys a fee token, universal deployer contract (UDC), and a set of funded accounts. By default, Katana predeploys the same set of accounts. The result should be similar to the following: PREDEPLOYED CONTRACTS ================== | Contract | Fee Token | Address | 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 | Class Hash | 0x02a8846878b6ad1f54f6ba46f5f40e11cee755c677f130b2c4b60566c9003f1f | Contract | Universal Deployer | Address | 0x41a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf | Class Hash | 0x07b3e05f48f0c69e4a65ce5e076a66271a527aff2c34ce1083ec6e1526997a69 | Contract | Account Contract | Class Hash | 0x05400e90f7e0ae78bd02c77cd75527280470e2fe19c54970dd79dc37a9d3645c PREFUNDED ACCOUNTS ================== | Account address | 0xb3ff441a68610b30fd5e2abbf3a1548eb6ba6f3559f2862bf2dc757e5828ca | Private key | 0x2bbf4f9fd0bbb2e60b0316c1fe0b76cf7a4d0198bd493ced9b8df2a3a24d68a | Public key | 0x640466ebd2ce505209d3e5c4494b4276ed8f1cde764d757eb48831961f7cdea ... Starkli comes with several built-in accounts for Katana’s default initialization, which can be used to freely interact with Katana without any setup (for the full list of account addresses, see BUILTIN_ACCOUNT in Starkli’s accounts.rs file). For example, you can redeploy Katana’s predeployed universal deployer using the following command: starkli deploy --rpc http://0.0.0.0:5050 --account katana 0x07b3e05f48f0c69e4a65ce5e076a66271a527aff2c34ce1083ec6e1526997a69 http://0.0.0.0:5050 are Katana’s default host and port, which can be configured upon initialization using the --host and --port options","title":"Using a development network","component":"ROOT","version":"","name":"using_devnet","url":"/quick-start/using_devnet/","titles":[{"text":"Prerequisites","hash":"prerequisites","id":1},{"text":"Using Starknet Devnet (Devnet)","hash":"using_starknet_devnet_devnet","id":2},{"text":"Using Katana","hash":"using_katana","id":3}]},"18":{"id":18,"text":"Staking on Starknet is designed to enhance network security and decentralization by allowing users to stake their STRK tokens directly or delegate them to other validators. The architecture is modular, with different contracts handling specific responsibilities to ensure flexibility, security, and ease of upgrades. For more details on the staking architecture, visit the following link: Starknet Staking Repository. Staking is divided into several key components, each responsible for different aspects of the staking process. The following contracts handle the core functionalities of the staking system: Table 1. Contracts of the Staking Architecture Contract Description Staking Contract The central contract that manages the staking process. It handles direct staking, rewards distribution, and interactions with delegation pools. Validators interact with this contract to stake their tokens, claim rewards, and initiate unstaking. Delegation Pooling Contract This contract manages the delegation process, allowing delegators to assign their tokens to a validator for staking. The contract is responsible for tracking each delegator’s share, calculating their rewards, and managing the delegation and unstaking processes. Reward Supplier Contract A dedicated contract that calculates and supplies the rewards for validators and delegators. It interfaces with the staking contract to distribute rewards based on the defined minting curve. Minting Curve Contract A contract responsible for implementing the minting curve logic that governs the reward distribution mechanism. It adjusts rewards dynamically based on the total staked amount and the overall supply of STRK tokens. The following data structures are stored within the contracts and play a crucial role in managing validators' and delegators' information within the staking protocol: Table 2. Key Structures in the Staking Architecture Structure Description StakerInfo Structure A data structure stored within the staking contract that holds detailed information about each validator, including their staked amount, unclaimed rewards, delegation details, and operational parameters. This structure ensures that validators' information is accurately tracked and updated. PoolMemberInfo Structure A data structure stored within the delegation pooling contract that holds information about each delegator’s contributions, rewards, and status within the pool. This structure helps manage and calculate the delegation and reward distribution processes for pool members. For more technical details, you can refer to the full staking specification document available in: Staking Repository Spec. The staking contract is the core of the staking system. It manages the lifecycle of validators, from the initial stake to claiming rewards and unstaking. The contract ensures that the validator’s tokens are securely locked and that rewards are distributed according to the minting curve. Key Functions and Responsibilities: stake: Allows users to stake their STRK tokens directly into the contract. The function initializes the validator’s information, locks the tokens, and optionally deploys a delegation pool if pooling is enabled. increase_stake: Lets existing validators add more tokens to their stake. The contract recalculates rewards and updates the validator’s information accordingly. unstake_intent: Initiates the unstaking process by locking the validator’s tokens for a specified exit period. No rewards are earned during this period. unstake_action: Finalizes the unstaking process after the exit period has passed, releasing the staked tokens back to the validator. claim_rewards: Calculates and transfers the validator’s accumulated rewards to their designated reward address. The delegation pooling contract enables users to delegate their tokens to a validator without having to manage the staking process themselves. This contract tracks each delegator’s contribution, calculates their rewards, and manages the delegation lifecycle. Key Functions and Responsibilities: enter_delegation_pool: Allows users to delegate their tokens to the pool associated with a validator. This function transfers the tokens, updates the delegator’s record, and integrates them into the validator’s pool. add_to_delegation_pool: Enables existing delegators to increase their delegation amount. The contract updates the pool’s total and recalculates the member’s rewards. exit_delegation_pool_intent: Initiates the process for a delegator to exit the pool. Similar to validators, the delegator’s funds are locked for a period before they can be withdrawn. exit_delegation_pool_action: Finalizes the exit process for a delegator, returning their tokens and any unclaimed rewards. switch_delegation_pool: Allows a delegator to transfer their delegated stake from one validator’s pool to another, facilitating dynamic delegation strategies. claim_rewards: Transfers the delegator’s earned rewards to their specified reward address. The reward supplier contract is responsible for calculating and supplying the staking rewards based on the minting curve. It ensures that the rewards are distributed fairly and in accordance with the protocol’s economic parameters. Key Functions and Responsibilities: calculate_staking_rewards: Computes the rewards based on the current staking rate and the minting curve, updating the staking contract with the amount to be distributed. claim_rewards: Handles the transfer of rewards to the staking contract, ensuring that the correct amount is distributed to validators and delegators. The minting curve contract defines the economic model that governs reward distribution. It ensures that the network’s inflation is managed while incentivizing participation in staking. Key Functions and Responsibilities: yearly_mint: Returns the amount of STRK tokens to be minted annually based on the current staking rate. This function uses a square root formula to balance rewards and inflation. update_total_supply: Updates the total supply of STRK tokens, ensuring that the minting calculations remain accurate. The staking architecture on Starknet is designed with security and upgradability in mind. Each contract is modular, allowing for targeted upgrades and improvements without affecting the entire system. Access control mechanisms are in place to ensure that only authorized parties can make critical changes, further enhancing the security of the staking process.","title":"Staking Architecture (WIP) 🚧","component":"ROOT","version":"","name":"architecture","url":"/staking/architecture/","titles":[{"text":"Components of the Staking Architecture","hash":"components_of_the_staking_architecture","id":1},{"text":"Staking Contract","hash":"staking_contract","id":2},{"text":"Delegation Pooling Contract","hash":"delegation_pooling_contract","id":3},{"text":"Reward Supplier Contract","hash":"reward_supplier_contract","id":4},{"text":"Minting Curve Contract","hash":"minting_curve_contract","id":5},{"text":"Security and Upgradability","hash":"security_and_upgradability","id":6}]},"19":{"id":19,"text":"Staking rewards on Starknet accumulate over time as your staked STRK tokens contribute to network security. To claim these rewards, you need to interact with the staking contract (if you are a validator) or the specific delegation pooling contract associated with the validator you have staked with (if you are a delegator) and execute the appropriate functions. Prerequisites The validator or delegator address must have an existing stake in the respective contract. The caller must be either the validator/delegator or their respective reward address. Procedure Using a Starknet block explorer, navigate to the appropriate contract: For validators: Navigate to the staking contract. For delegators: Navigate to the delegation pooling contract associated with the validator you have staked with. In the contract interface, locate and select the claim_rewards function. Enter the following parameters: In staker_address or pool_member, enter the address of the validator or delegator for whom you are claiming the rewards. Submit the transaction to initiate the rewards claim. Ensure that the address entered is either the validator’s or delegator’s main address or their respective reward address. If the address is not authorized, the function will fail. Once the transaction is successful, the rewards will be transferred to the designated reward address associated with the staked tokens.","title":"Claiming Rewards (WIP) 🚧","component":"ROOT","version":"","name":"claiming-rewards","url":"/staking/claiming-rewards/","titles":[]},"20":{"id":20,"text":"Delegating your stake on Starknet involves adding your stake to a validator’s delegation pool managed by the staking contract. This approach offers the advantage of lower capital requirements and relieves you of the need to manage the operational aspects of staking, as the validator handles these responsibilities. The delegation process includes joining a validator’s delegation pool by interacting with the enter_delegation_pool function. Procedure Using a Starknet block explorer, navigate to the delegation pooling contract associated with the validator you want to delegate to. In the contract interface, locate and select the enter_delegation_pool function. Enter the following parameters: In amount, enter the number of STRK tokens you want to delegate to the validator. In reward_address, enter the address where you wish to receive your staking rewards. Submit the transaction to join the delegation pool. Upon successful execution, your STRK tokens will be added to the validator’s delegation pool, and you will begin earning rewards as part of the pooled staking process.","title":"Delegating Stake (WIP) 🚧","component":"ROOT","version":"","name":"delegating-stake","url":"/staking/delegating-stake/","titles":[]},"21":{"id":21,"text":"Using the Starknet staking contract to stake STRK tokens requires interacting with the stake function. The stake function does the following: Locks the specified amount of STRK tokens from the validator’s account into the staking contract. Records the validator’s details, including reward and operational addresses, in the staking contract. If pooling is enabled, deploys a new delegation pool contract associated with the validator. Subsequently, the validator’s tokens will be locked in the staking contract, and the validator will begin earning rewards based on their stake. For more information on what happens during the staking process, see Staking Contract Architecture. Prerequisites Validators are expected to run full nodes in preparation for the following stages of the protocol. You can use any full node implementation you choose: Juno by Nethermind - Spec. Pathfinder by EQLabs - Spec. A Starknet-compatible block explorer or CLI tool. Sufficient STRK token balance in your wallet. Pre-approval of the STRK ERC20 contract (Starkscan, Voyager) on Starknet for the transfer of tokens from your address to the staking contract. Procedure Using a Starknet block explorer, navigate to the staking contract. In the contract interface, locate and select the stake function. Enter the following parameters: In reward_address, enter the address where the rewards will be sent. In operational_address, enter the operational address associated with this stake. In amount, enter the number of STRK tokens you want to stake. In pooling_enabled, enter true if you wish to enable delegation pooling, otherwise enter false. In commission, enter the commission rate for any delegated staking. The rate should be entered as a percentage with precision, where 10000 represents 100%. For example, to set a 5% commission, you would enter 500. Submit the transaction to execute the staking operation. Secured hardware wallets: Ledger hardware wallet is supported through: * Braavos wallet * Argent wallet","title":"Becoming a Validator (WIP) 🚧","component":"ROOT","version":"","name":"entering-staking","url":"/staking/entering-staking/","titles":[]},"22":{"id":22,"text":"Exiting the staking protocol involves either unstaking your STRK tokens as a validator or undelegating your stake as a delegator. Both processes require you to first signal your intent to exit, followed by an action to finalize the process after a waiting period. Validators can unstake their STRK tokens, which involves pausing rewards and exiting the staking contract. Prerequisites The validator must not currently be in the unstake process. Procedure Signal Unstake Intent: Using a Starknet block explorer, navigate to the staking contract. In the contract interface, locate and select the unstake_intent function. Submit the transaction to initiate the unstake process. This will record the unstake intent, pause rewards collection, and set a waiting period. Finalize Unstake: After the waiting period has passed, return to the staking contract. In the contract interface, locate and select the unstake_action function. Enter the following parameters: In staker_address, enter the validator’s address. Submit the transaction to finalize the unstaking process and transfer the staked STRK tokens back to the validator’s account. Any address can initiate the unstake_action function once the waiting period has passed. Ensure that enough time has passed since signaling your unstake intent. If the waiting period has not expired, the unstake_action function will fail. Delegators can undelegate their stake from a validator’s delegation pool by following a similar process. Prerequisites A Starknet-compatible block explorer or CLI tool. The delegator must not currently be in the undelegation process. The contract address of the delegation pooling contract. (TODO: Check if this really needs to be mentioned.) Procedure Signal Undelegation Intent: Using a Starknet block explorer, navigate to the delegation pooling contract. In the contract interface, locate and select the exit_delegation_pool_intent function. Submit the transaction to initiate the undelegation process. This will record the undelegation intent, pause rewards collection, and set a waiting period. Finalize Undelegation: After the waiting period has passed, return to the delegation pooling contract. In the contract interface, locate and select the exit_delegation_pool_action function. Enter the following parameters: In pool_member, enter the delegator’s address. Submit the transaction to finalize the undelegation process and transfer the undelegated STRK tokens back to the delegator’s account. Any address can initiate the exit_delegation_pool_action function once the waiting period has passed. Ensure that enough time has passed since signaling your undelegation intent. If the waiting period has not expired, the exit_delegation_pool_action function will fail. When a validator unstakes, any unclaimed rewards are automatically transferred to the reward address before the stake is returned. Similarly, when a delegator undelegates, any unclaimed rewards are automatically transferred to the delegator’s reward address. For more details on the staking and delegation processes, see Staking Contract Architecture.","title":"Exiting the Staking Protocol (WIP) 🚧","component":"ROOT","version":"","name":"exiting-staking","url":"/staking/exiting-staking/","titles":[{"text":"Unstaking as a Validator","hash":"unstaking_as_a_validator","id":1},{"text":"Undelegating as a Delegator","hash":"undelegating_as_a_delegator","id":2},{"text":"Additional Notes","hash":"additional_notes","id":3}]},"23":{"id":23,"text":"Staking events in Starknet provide critical information about changes in the staking process, such as balance updates, delegation pool creation, and exit intents. This section guides you through the process of handling these events and responding to them.","title":"Handling Staking Events (WIP) 🚧","component":"ROOT","version":"","name":"handling_staking_events","url":"/staking/handling_staking_events/","titles":[]},"24":{"id":24,"text":"The staking and pooling contracts allow validators and delegators to increase their existing stake. Validators use the increase_stake function, which is called from the staking contract, while delegators use the add_to_delegation_pool function, which is called from the delegation pooling contract. These functions add the specified amount of STRK tokens to the current stake, recalculate rewards before the staked amount is updated, and update the total staked amount. Prerequisites Sufficient STRK token balance in your Starknet wallet. The validator/delegator must have pre-approved the relevant contract (staking contract for validators, delegation pooling contract for delegators) to transfer the specified STRK amount from their account. The validator/delegator must not be in an unstake/undelegate process. The caller must be either the validator/delegator or their respective reward address. Procedure Using a Starknet block explorer, navigate to the relevant contract (staking contract for validators, delegation pooling contract for delegators). In the contract interface, locate and select the increase_stake function (for validators) or the add_to_delegation_pool function (for delegators). Enter the following parameters: In address, enter the address of the validator (for increase_stake) or the delegator (for add_to_delegation_pool) whose stake you want to increase. This can be either the validator’s/delegator’s address or their respective reward address. In amount, enter the number of STRK tokens you want to add to the existing stake. Submit the transaction to execute the stake increase. Ensure that the validator/delegator is not in an unstake/undelegate process before attempting to increase the stake. If they are currently unstaking/undelegating, this function will fail.","title":"Increasing Stake (WIP) 🚧","component":"ROOT","version":"","name":"increasing-staking","url":"/staking/increasing-staking/","titles":[]},"25":{"id":25,"text":"This guide outlines how both validators and delegators can manage various aspects of their staking and delegation activities on Starknet. Validators can perform operations such as opening delegation pools, updating commission rates, and changing operational and reward addresses. Delegators can manage their participation by changing their reward addresses associated with delegation pools. Validators have several functions available to effectively manage their staking and delegation settings. Prerequisites An existing stake in the staking contract. An existing delegation pool if updating pool-specific settings. If a validator does not yet have a delegation pool, they can open one by calling the set_open_for_delegation function. Procedure Using a Starknet block explorer, navigate to the staking contract. In the contract interface, locate and select the set_open_for_delegation function. Enter the following parameter: commission: Enter the commission rate for the delegation pool, expressed as a percentage with precision (where 10000 represents 100%). For example, to set a 5% commission, enter 500. Submit the transaction to create the delegation pool. Once created, the delegation pool will be associated with the validator’s staking contract, allowing delegators to delegate their stake to the validator. Validators can update the commission rate of their delegation pool using the update_commission function. Note: The commission rate can only be decreased or kept the same; it cannot be increased. Procedure Using a Starknet block explorer, navigate to the staking contract. In the contract interface, locate and select the update_commission function. Enter the following parameter: commission: Enter the new commission rate, which must be equal to or less than the current rate, expressed as a percentage with precision (where 10000 represents 100%). For example, to set a 5% commission, enter 500. Submit the transaction to update the commission rate. Validators can change their operational address by interacting with the change_operational_address function. Procedure Using a Starknet block explorer, navigate to the staking contract. In the contract interface, locate and select the change_operational_address function. Enter the following parameter: operational_address: Enter the new operational address. Submit the transaction to update the operational address. Validators can update the reward address associated with their staking contract using the change_reward_address function. Procedure Using a Starknet block explorer, navigate to the staking contract. In the contract interface, locate and select the change_reward_address function. Enter the following parameter: reward_address: Enter the new reward address. Submit the transaction to change the reward address. Delegators can change their reward address by interacting with the change_reward_address function in the delegation pooling contract. Procedure Using a Starknet block explorer, navigate to the delegation pooling contract associated with your delegation. In the contract interface, locate and select the change_reward_address function. Enter the following parameter: reward_address: Enter the new reward address. Submit the transaction to update the reward address. For more information on how the staking and delegation pooling systems work, refer to the Staking Contract Architecture.","title":"Managing Staking and Delegation Operations (WIP) 🚧","component":"ROOT","version":"","name":"managing-staking-and-delegation-operations","url":"/staking/managing-staking-and-delegation-operations/","titles":[{"text":"Managing Staking Operations as a Validator","hash":"managing_staking_operations_as_a_validator","id":1},{"text":"Opening a Delegation Pool","hash":"opening_a_delegation_pool","id":2},{"text":"Updating Commission Rate","hash":"updating_commission_rate","id":3},{"text":"Changing the Operational Address","hash":"changing_the_operational_address","id":4},{"text":"Changing the Reward Address","hash":"changing_the_reward_address","id":5},{"text":"Managing Delegation Settings as a Delegator","hash":"managing_delegation_settings_as_a_delegator","id":6},{"text":"Changing the Reward Address","hash":"changing_the_reward_address_2","id":7},{"text":"Additional Information","hash":"additional_information","id":8}]},"26":{"id":26,"text":"Staking on Starknet involves locking STRK tokens in the staking protocol, contributing to network security and performance. Users can either stake directly or delegate their tokens to others, with rewards based on their level of participation and contribution. The key terms used in this document are: Stake: Locking STRK tokens into the staking protocol. Delegate: Assigning STRK tokens to a validator to participate indirectly. Reward: Earnings from participating in staking. STRK tokens never leave the Starknet protocol during these operations. Starknet Staking repository. For Staking contract addresses, see Staking Contract Architecture. The staking protocol features two main options: Staking: Users can stake any amount of STRK, with a minimum threshold set at 20,000 STRK. Validators are expected to run full nodes and eventually handle additional responsibilities as the protocol evolves. Stake Delegation: Users can delegate their STRK to validators without running their own nodes. Delegators share in the rewards earned by the validators they choose. Validators and delegators can both unstake their funds, subject to network-defined latencies for security. Rewards are distributed based on the amount staked and the commission policy constant \\(CP\\) set by the validator. The rewards are calculated using the following formulas: \\[\\begin{align} \\text{Validators: } & \\; \\left[\\text{self_stake} + \\text{total_stake_delegated} \\times CP\\right] \\times \\text{rewards_constant} \\times \\text{time_interval} \\\\ \\text{Stake Delegators: } & \\; \\text{stake_delegated} \\times (1 - CP) \\times \\text{rewards_constant} \\times \\text{time_interval} \\end{align}\\] Here, \\(\\text{rewards_constant}\\) is determined by the minting curve, which adjusts rewards based on the total staked amount. The minting curve balances participation and inflation by adjusting rewards based on the total STRK locked in the protocol. It is defined by the formula: \\[M = \\frac{C}{10} \\times \\sqrt{S}\\] Where: \\(S\\) is the staking rate as a percentage of the total token supply. \\(M\\) is the annual minting rate as a percentage of the total token supply. \\(C\\) is the maximum theoretical inflation percentage. For the first stage, \\(C\\) is proposed to be 1.6%. Current Version: Immediate entry and exit from the staking protocol. However, funds are subject to a 21-day security lockup after withdrawal. Future Versions: Introduction of epochs to determine entry/exit latencies and continued 21-day lockup after withdrawal. Stake delegators can switch between validators without waiting for the full lockup period, promoting a competitive delegation market. The proposed economic parameters are: Minimum STRK for Staking: 20,000 STRK Withdrawal Security Lockup: 21 days Minting Curve Yearly Inflation Cap (\\(C\\)): 1.6% (see here for the relevant voting proposal) Commission Policy Parameter (\\(CP\\)): Set by the validator (0 - 1) These values are our proposed starting points for this version of the protocol. As part of the rationale behind this version, they are subject to change and may be adjusted to better suit the protocol’s needs under the proper governance procedures.","title":"Staking Overview (WIP) 🚧","component":"ROOT","version":"","name":"overview","url":"/staking/overview/","titles":[{"text":"Staking Protocol Details","hash":"staking_protocol_details","id":1},{"text":"Important addresses and links","hash":"important_addresses_and_links","id":2},{"text":"Overview","hash":"overview","id":3},{"text":"Staking Rewards","hash":"staking_rewards","id":4},{"text":"Minting Curve","hash":"minting_curve","id":5},{"text":"Latencies","hash":"latencies","id":6},{"text":"Economic Parameters","hash":"economic_parameters","id":7}]},"27":{"id":27,"text":"Switching your delegated stake from one validator’s delegation pool to another allows you to optimize your staking strategy by moving your funds to a different validator. This process involves interacting with the switch_delegation_pool function in the delegation pooling contract, which coordinates with the staking contract to move your stake. Prerequisites An existing delegation in a validator’s pool with a STRK token balance equal to or greater than the amount you wish to switch. The delegator must have initiated an undelegation process before attempting to switch pools. The target validator must have an active delegation pool associated with their staking contract. Procedure Using a Starknet block explorer, navigate to the delegation pooling contract associated with the validator from whose pool you wish to switch. In the contract interface, locate and select the switch_delegation_pool function. Enter the following parameters: In to_staker, enter the address of the validator whose pool you want to switch to. In to_pool, enter the address of the target delegation pooling contract associated with the new validator. In amount, enter the number of STRK tokens you want to move to the new delegation pool. Submit the transaction to execute the delegation pool switch. Ensure that you have initiated the undelegation process before attempting to switch pools. If the undelegation intent has not been set, this function will fail. Upon successfully switching pools, any unclaimed rewards from your previous delegation pool will be transferred to your designated reward address. Your subsequent rewards will be based on the performance of the new validator’s delegation pool. For more details on the staking architecture and how delegation pools work, see Staking Contract Architecture.","title":"Switching Delegation Pools (WIP) 🚧","component":"ROOT","version":"","name":"switching-delegation-pools","url":"/staking/switching-delegation-pools/","titles":[]},"28":{"id":28,"text":"StarkGate supports permissionless bridging. Want to learn how to enroll a token bridge on StarkGate? Check out this Community Guide. enrollTokenBridge in the StarkGate function reference StarkGate architecture","title":"Adding a token to StarkGate","component":"ROOT","version":"","name":"adding-a-token","url":"/starkgate/adding-a-token/","titles":[{"text":"Additional resources","hash":"additional_resources","id":1}]},"29":{"id":29,"text":"While StarkGate is referred to as a bridge, technically, each supported token has its own bridge, each of which is defined in a corresponding pair of L1 and L2 contracts, as described in Components of a bridge for an individual token. Table 1. Components of a bridge for an individual token L1 ERC-20 contract that defines the token on Ethereum. This contract must exist before you can bridge it. Bridge functionality for ERC-20 tokens is supported in StarknetTokenBridge.sol. L2 StarkGate Cairo bridge contract instance of the token_bridge.cairo contract class. ERC-20 Cairo token contract instance of a standard ERC-20 Cairo token contract class. Each new contract uses the hash of this class to define its inheritance. StarkGate creates this contract automatically when creating the bridge in StarkGate. StarkGate 2.0 provides a contract that enables seamless backward compatibility with the previous version of StarkGate. When you update the code in your contract, make sure that you use the most up-to-date versions of all StarkGate contracts. You can check if a token is currently supported with the L1 function getBridge. You can permissionlessly add support for ERC-20 tokens to the multi-token bridge using the enrollTokenBridge function. StarkGate includes the following administration components: The StarkGate Manager is responsible for adding bridges The StarkGate Registry contains the addresses to all supported bridges enables a bridge developer to stop servicing an existing bridge All token bridges that existed prior to StarkGate 2.0 (Mainnet: January 2024) besides supporting all StarkGate 2.0 functionality, are backward compatible. Each token was bridged with a unique, custom pair of L1 and L2 bridge contracts. The L1 bridge is an instance of LegacyBridge.sol, and the L2 bridge is an instance of legacy_bridge_eic.cairo. L1 ERC-20 contract address: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 L2 ERC-20 contract address: 0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8 L1 bridge contract address: 0xF6080D9fbEEbcd44D89aFfBFd42F098cbFf92816 L2 bridge contract address: 0x05cd48fccbfd8aa2773fe22c217e808319ffcc1c5a6a463f7d8fa2da48218196 Consider the deposit functions for the L1 bridge contract for USDC on Etherscan: 0xf6080d9fbeebcd44d89affbfd42f098cbff92816#writeProxyContract This contract has the following two deposit functions: deposit (0x0efe6a8b) and deposit (0xe2bbb158), which shows that the bridge includes support for the legacy functionality as well as the modern functionality: deposit (0x0efe6a8b) The StarkGate 2.0 contract, which includes support for all tokens within a single contract, requiring that you enter the address of the token in the deposit function. deposit (0xe2bbb158) The legacy contract, which is labeled Support Legacy ABI. This function does not include the token (address) parameter, because the contract that contains this function only supports USDC. Therefore, the address of the token is superfluous. The following tokens have legacy contracts as well as StarkGate 2.0 contracts: Starknet Token (STRK) Starknet Voting Token (vSTRK) Wrapped BTC (WBTC) USD Coin (USDC) Tether USD (USDT) Ether (ETH) Dai Stablecoin (DAI) Dai Stablecoin (DAI) (Dai v0) Wrapped liquid staked Ether 2.0 (wstETH) Rocket Pool ETH (rETH) R Stablecoin (R) Frax (FRAX) Frax Share (FXS) Staked Frax Ether (sfrxETH) LUSD Stablecoin (LUSD) Uniswap (UNI) For complete details, see the bridged_tokens directory on GitHub. By default, StarkGate imposes no limit on withdrawals. However, in order to mitigate risks associated with critical vulnerabilities that could result in the loss of user funds, StarkGate can enable a withdrawal limit. If a serious security issue arises, the security agent in the StarkGate contract can limit withdrawals to 5% of the Total Value Locked (TVL) per day for any affected token by calling the setWithdrawLimitPCT() function in the WithdrawalLimit.sol contract. A dedicated team can then investigate and resolve the issue. Only a security admin quorum can disable the withdrawal limit. The quorum will consist of Starknet Foundation members, Starknet ecosystem contributors, and StarkWare representatives. This diverse group will ensure that decisions reflect the Starknet community’s broad interests. This approach, blending manual oversight with automated detection, aims to minimize potential losses. Adding a token to StarkGate The StarkGate function reference. Lists functions exposed by the Registry, Manager, and the bridge itself, including: getBridge enrollTokenBridge L1 contracts on GitHub L2 contracts on GitHub","title":"StarkGate architecture","component":"ROOT","version":"","name":"architecture","url":"/starkgate/architecture/","titles":[{"text":"The StarkGate Manager and Registry","hash":"StarkGate_manager_and_registry","id":1},{"text":"Legacy bridges","hash":"legacy_bridge","id":2},{"text":"Example: USDC contracts","hash":"example","id":3},{"text":"List of legacy bridges","hash":"legacy_bridges","id":4},{"text":"Withdrawal limit","hash":"stark_gate_withdrawal_limit","id":5},{"text":"Additional resources","hash":"additional_resources","id":6}]},"30":{"id":30,"text":"A Smart Deposit is a deposit that moves funds from L1 to L2 and then triggers subsequent actions. For example, a user can deposit funds and transfer those funds to another recipient, such as an exchange. The depositWithMessage function enables a Smart Deposit. depositWithMessage is similar to the deposit function, with an additional 256-bit message, which can contain instructions for executing additional actions. Upon completion, the depositWithMessage function triggers a call to a callback function, named on_receive, on the L2 contract that receives the deposit. The on_receive function receives the deposit message as input. on_receive must return true for the deposit to succeed. If on_receive returns false, or if the recipient contract does not include the on_receive function, the depositWithMessage function’s L1 handler fails. The user can recover their funds using the depositWithMessageCancelRequest function. To enable Smart Deposits in your application: Implement the on_receive function in the L2 contract that should receive deposits. Use the depositWithMessage function to transfer funds from L1 to L2. depositWithMessageCancelRequest depositWithMessage depositWithMessageReclaim L1 handler","title":"Performing a Smart Deposit","component":"ROOT","version":"","name":"automated-actions-with-bridging","url":"/starkgate/automated-actions-with-bridging/","titles":[{"text":"Additional resources","hash":"additional_resources","id":1}]},"31":{"id":31,"text":"To ensure self-custody, StarkGate enables you to cancel a deposit if, after depositing funds with the deposit function on L1, you don’t see your funds appear on L2 within a reasonable amount of time. You can only cancel a deposit that you yourself deposited. In order to guard against an attack, it takes approximately five days to cancel a deposit. From the moment StarkGate receives the cancellation request, a counter begins. When exactly five days have passed, and the funds still do not appear on L2, you can reclaim the deposit. Procedure To cancel a deposit, call the depositCancelRequest request function. When StarkGate receives the cancellation request, a counter begins to count five days. When exactly five days have passed, and the funds still do not appear on L2, you can reclaim the deposit by calling depositReclaim. As long as the depositReclaim was not performed, the deposit may be processed, even if the cancellation delay time has already passed. Only the depositor is allowed to cancel a deposit, and only before depositReclaim was performed. depositCancelRequest in the StarkGate function reference. depositReclaim in the StarkGate function reference.","title":"Cancelling a deposit","component":"ROOT","version":"","name":"cancelling-a-deposit","url":"/starkgate/cancelling-a-deposit/","titles":[{"text":"Additional resources","hash":"additional_resources","id":1}]},"32":{"id":32,"text":"Using StarkGate to deposit L1 funds into the L2 Starknet requires StarkGate’s deposit function. The deposit function does the following: Transfers the funds from the user’s Ethereum account to the StarkGate L1 contract. Emits a Deposit event that includes the L1 and L2 addresses of the user, and the amount deposited. Sends a message to the corresponding L2 bridge with the amount deposited, and the recipient’s address. Subsequently, the funds should be transferred to Starknet so that you can begin using them. For more information on what happens during the transfer process, see L1→L2 transfer (deposit). Prerequisites An Ethereum block explorer, such as Etherscan. Funds to transfer from L1 to L2, including enough to pay the fees required for the transfer. The L1 address of the StarkGate bridge for the token you want to deposit. To view the token addresses for tokens on Mainnet or Sepolia testnet, see Bridged tokens and addresses. Procedure Using an Ethereum block explorer, go to the StarkGate contract and click Write as Proxy. For example, using Etherscan, go to 0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419 Click the StarkGate 2.0 deposit function (0x0efe6a8b). Enter the following: In payableAmount, enter the maximum amount of ETH that you’re willing to pay for the deposit transaction fee. In token (address), enter the address of the L1 contract for the token that you want to deposit to L2. In amount (uint256), enter an integer for the amount of the token that you want to deposit to L2. In l2Recipient (uint256), enter the address of the recipient on L2. Click Write. The deposit function initiates a deposit.","title":"Depositing funds with StarkGate","component":"ROOT","version":"","name":"depositing","url":"/starkgate/depositing/","titles":[]},"33":{"id":33,"text":"StarkGate enforces a minimum fee for all transactions to account for the L1 → L2 message costs. For more information, see L1 → L2 message fees. You can estimate the fee using the following L1 functions: estimateDepositFeeWei Estimates the fee for a deposit transaction. estimateEnrollmentFeeWei Estimates the fee for an enrollment transaction. Additional resources estimateDepositFeeWei estimateEnrollmentFeeWei","title":"Estimating StarkGate fees","component":"ROOT","version":"","name":"estimating-fees","url":"/starkgate/estimating-fees/","titles":[]},"34":{"id":34,"text":"The StarkGate smart contracts include functions that you use to implement various flows in a dApp. For information on the movement of funds between Ethereum and Starknet, see StarkGate bridge overview. StarkGate 2.0 provides a contract that enables seamless backward compatibility with the previous version of StarkGate. When you update the code in your contract, make sure that you use the most up-to-date versions of all StarkGate contracts. The L1 functions and their interfaces, where available, are defined in the following smart contracts: Contract Name Functions StarkgateManager.sol The StarkGate Manager. Use the Manager to enroll a new token. An interface is available through IStarkgateManager.sol. enrollTokenBridge StarkgateRegistry.sol The StarkGate Registry. Use the Registry to view the addresses of existing bridges and to stop servicing a specific token. An interface is available through IStarkgateRegistry.sol. getBridge getWithdrawalBridges StarknetTokenBridge.sol The primary StarkGate bridge contract. The functions and events in this reference that provide the main user bridge functionality are defined in this contract. deposit depositCancelRequest depositReclaim depositWithMessage depositWithMessageCancelRequest depositWithMessageReclaim getStatus withdraw IStarkgateService.sol An interface to check if a contract is servicing a token. isServicingToken The L2 functions and their interfaces, where available, are defined in the following smart contracts: Contract Description Functions token_bridge.cairo The StarkGate bridge implementation on L2. This contract includes the standard functions for a token bridge. An interface is available through token_bridge_interface.cairo. get_erc20_class_hash get_identity get_l1_token get_l2_token get_remaining_withdrawal_quota get_version initiate_token_withdraw on_receive Functions are listed in alphabetical order. Deposits the specified amount of an ERC-20 token to the L1 StarkGate bridge contract. The deposit function does the following: Transfers the funds from the caller’s account to the Starknet bridge contract Emits the Deposit event with the sender’s address on L1, the recipient’s address on L2, and the amount external payable address token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 l2Recipient The L2 address of the recipient. None. Deposit Event attributes address indexed sender The L1 address of the account that sent the deposit. address indexed token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 indexed l2Recipient The L2 address of the recipient. The L2 address of the recipient. uint256 nonce The nonce for the L1 transaction. uint256 fee The Starknet fee sent with the transaction. Contract: StarknetTokenBridge.sol Function: deposit Event: Deposit Sends a request to StarkGate to cancel a deposit. You can send a cancellation request if the funds you transfer from L1 to L2 do not appear on L2 within a reasonable amount of time. In order to guard against an attack on Starknet, it takes approximately five days to cancel a deposit. When StarkGate receives the cancellation request, a counter begins. When exactly five days have passed, and the funds still do not appear on L2, you can reclaim the deposit using the depositReclaim function. The depositReclaim function can only be used once for any deposit cancellation request. external nonpayable address token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 l2Recipient The L2 address of the recipient. uint256 nonce The nonce of the deposit. None. DepositCancelRequest Event attributes address indexed sender The L1 address of the account that sent the deposit. address indexed token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 indexed l2Recipient The L2 address of the recipient. The L2 address of the recipient. uint256 nonce The nonce of the deposit. Contract: StarknetTokenBridge.sol Function: depositCancelRequest Event: DepositCancelRequest Reclaims a deposit after a five day period has passed from the time that StarkGate received a deposit cancellation request from the depositCancelRequest function. external nonpayable address token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 l2Recipient The L2 address of the recipient. uint256 nonce The nonce of the deposit. None. event DepositReclaimed Event attributes address indexed sender The L1 address of the account that sent the deposit. address indexed token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 indexed l2Recipient The L2 address of the recipient. The L2 address of the recipient. uint256 nonce The nonce of the deposit. Contract: StarknetTokenBridge.sol Function: depositReclaim Event: DepositReclaimed depositCancelRequest Similar to deposit, with a message attached. With this function, a deposit transaction can trigger subsequent actions. For example, you can deposit funds and include a message to transfer those funds to another address. depositWithMessage lets you execute these two separate transactions with a single user action. After depositing to another recipient, the L1 handler in token_bridge.cairo calls the on_receive function in the contract of the recipient. If on_receive returns true, then the on_receive function succeeded. If it returns false, or if it doesn’t return any value because the on_receive function is not implemented in the recipient contract, the operation fails and the transaction is reverted. external payable address token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 l2Recipient The L2 address of the recipient. uint256[] calldata message The message attached to the deposit. None. DepositWithMessage Event attributes address indexed sender The L1 address of the account that sent the deposit. address indexed token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 indexed l2Recipient The L2 address of the recipient. The L2 address of the recipient. uint256[] message The message attached to the deposit. uint256 nonce The nonce for the L1 transaction. uint256 fee The Starknet fee sent with the transaction. Contract: StarknetTokenBridge.sol Function: depositWithMessage Event: DepositWithMessage Sends a request to StarkGate to cancel a deposit sent with depositWithMessage. Similar to depositCancelRequest. external nonpayable address token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 l2Recipient The L2 address of the recipient. uint256[] calldata message The message attached to the deposit. uint256 nonce The nonce of the deposit. None. DepositWithMessageCancelRequest Event attributes address indexed sender The L1 address of the account that sent the deposit. address indexed token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 indexed l2Recipient The L2 address of the recipient. The L2 address of the recipient. uint256[] message The message attached to the deposit. uint256 nonce The nonce for the L1 transaction. Contract: StarknetTokenBridge.sol Function: depositWithMessageCancelRequest Event: DepositWithMessageCancelRequest depositWithMessage depositCancelRequest Sends a request to StarkGate to cancel a deposit sent with depositWithMessage. Similar to depositCancelRequest. Reclaims a deposit sent with a message after a five day period has passed from the time that StarkGate received a deposit cancellation request from the depositWithMessageCancelRequest function. external nonpayable address token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 l2Recipient The L2 address of the recipient. uint256 nonce The nonce of the deposit. None. DepositWithMessageCancelRequest Event attributes address indexed sender The L1 address of the account that sent the deposit. address indexed token The address of the contract for the desired token. uint256 amount The amount of the deposit. uint256 indexed l2Recipient The L2 address of the recipient. The L2 address of the recipient. uint256[] message The message attached to the deposit. uint256 nonce The nonce for the L1 transaction. Contract: StarknetTokenBridge.sol Function: depositWithMessageReclaim Event: DepositWithMessageReclaimed depositCancelRequest depositReclaim depositWithMessageCancelRequest Creates a Starknet bridge for the specified ERC-20 token contract address in the multi-token bridge contracts and adds the token to the StarkGate Registry. Does not work for any ERC-20 token bridge’s contract address that is already in the registry. Enrolling a new bridge creates a new ERC-20 contract on L2. You can see the class hash for this contract using get_erc20_class_hash. Enrolling a new bridge does not add it to the StarkGate GUI. You can use a block explorer to use the newly created bridge. external payable The message payload needs to include funds to cover the Starknet (L2) fee for executing this transaction. You can include this payload using a standard wrapper such as web3.js. address token The address of the contract for the desired ERC-20 token. None. TokenEnrollmentInitiated Function: enrollTokenBridge in StarkgateManager.sol Event: TokenEnrollmentInitiated in StarknetTokenBridge.sol Returns an estimate of the fee, in Wei, for depositing funds to the L1 StarkGate bridge contract. external view None. uint256 An estimate of the fee, in Wei, for depositing funds to the L1 StarkGate bridge contract. None. estimateDepositFeeWei in StarknetTokenBridge.sol deposit depositWithMessage Returns an estimate of the fee, in Wei, for creating and registering a new bridge using the enrollTokenBridge function. external view None. uint256 An estimate of the fee, in Wei, for creating and registering a new bridge. None. estimateEnrollmentFeeWei in StarknetTokenBridge.sol enrollTokenBridge Returns the address of the bridge for the specified token, or a value indicating if the bridge does not exist, is blocked, or is deactivated. external view address token The address of the contract for the desired ERC-20 token. address address The address of the bridge for the specified token. Address(0) The bridge does not exist. Address(1) The bridge is blocked or deactivated. None. getBridge in IStarkgateRegistry.sol Returns the address of the StarkGate Registry contract. Only the Manager uses this function. external view None address The address of the Registry contract. None. getRegistry in StarkgateManager.sol Returns the status of a token in StarkGate. deploy transaction triggered by the enrollTokenBridge API. external view address token The address of the contract for the desired ERC-20 token. TokenStatus One of the following values: 0 Unknown. The bridge does not recognize the token. 1 Pending. The token has been enrolled to StarkGate, but the deploy transaction has not yet successfully completed. You can deposit funds. 2 Active. The deploy transaction for this token has completed successfully and StarkGate recognizes the token. 3 Deactivated. The token has been removed from StarkGate. You cannot deposit funds. None. getStatus in StarknetTokenBridge.sol Retrieves a list of all bridge addresses that have ever facilitated withdrawals for the specified token. In a case where an inactive bridge for a specific token might still have funds locked, you can use this function to identify all bridges that ever serviced that token. If you used a bridge for a given token that subsequently was replaced with a new or updated bridge, but you still have funds locked on the first bridge, you might not know the address of the old bridge. This function returns external view address token The address of the contract for the desired token. address[] memory bridges An array of addresses of all bridges that ever serviced token. None. getWithdrawalBridges in StarkgateRegistry.sol. Returns the name and version of the StarknetTokenBridge.sol contract. external pure None. string memory The name and version of the StarknetTokenBridge.sol contract. None. identify in StarknetTokenBridge.sol Checks whether the calling contract is currently providing a service for the specified token. external view address token The address of the contract for the desired token. true The calling contract is currently providing a service for the token. false The calling contract is not currently providing a service for the token. None. isServicingToken in IStarkgateService.sol. Transfers the specified amount of the specified token to the address of the recipient specified in the l1_recipient parameter of the initiate_token_withdraw function on L2. Anyone can call this function, but only after the withdraw message has been recorded on the Starknet Core Contract. address token The address of the contract for the desired token. uint256 amount The amount of the withdrawal. address recipient (Optional) The recipient. If you don’t specify this parameter, the withdraw function uses the sender’s address. nonpayable None. Withdrawal Event attributes address indexed recipient The recipient. address indexed token The address of the contract for the desired token. uint256 amount The amount of the withdrawal. Contract: StarknetTokenBridge.sol Function: withdraw Event: Withdrawal Functions are listed in alphabetical order. Returns the current class hash of the implementation used by the ERC-20 contract. Use the class hash as the type when deploying the ERC-20 contract on L2. If StarkWare changes the class hash such that it is no longer the class hash that you used when deploying your bridge contract, this function returns the new class hash. If you want to refer to the class hash that you used when deploying your contract, see your deployed contract on Starknet. None. ClassHash The class hash of the ERC-20 token contract. get_erc20_class_hash in token_bridge.cairo. Returns a string in a felt252 type with the identity of StarkGate. None. felt252 The identity of StarkGate. get_identity in token_bridge_interface.cairo. Returns the L1 address that corresponds to the matching L2 address of an ERC-20 token contract. l2_token_address: ContractAddress The L2 address of the ERC-20 token contract. EthAddress The L1 address of the ERC-20 token contract. EthAddressZeroable::zero() The token is not found in the bridge. get_l1_token in token_bridge_interface.cairo. Returns the L2 address that corresponds to the matching L1 address of an ERC-20 token contract. If the token is not found in the bridge, this function returns 0. l1_token_address The L1 address of the ERC-20 token contract. ContractAddress address The L2 address of the ERC-20 token contract. ContractAddressZeroable::zero() The token is not found in the bridge. get_l2_token in token_bridge_interface.cairo. Returns the amount that the user can withdraw within the current 24-hour time period. The time period begins at 00:00 UTC. l1_token_address The L1 address of the ERC-20 token contract. u256 The amount that can currently be withdrawn from the bridge, in units defined by the ERC-20 token contract. get_remaining_withdrawal_quota in token_bridge_interface.cairo Returns the current version of StarkGate. None. felt252 The current version of StarkGate. get_version in token_bridge_interface.cairo. Initiates a withdrawal from L2. After initiating the withdrawal, the function does the following: Burns the transferred amount of tokens from the balance of the withdrawal’s initiator. Sends a message to the relevant L1 bridge with the amount to be transferred, and the recipient’s address. l1_token: EthAddress The L1 address of the ERC-20 token contract. l1_recipient: EthAddress The L1 address of the recipient. amount uint256 The amount to transfer. None. initiate_token_withdraw in token_bridge_interface.cairo. An interface to an implementation of the on_receive function that you must provide in your L2 contract in order to enable the depositWithMessage function to succeed. The L2 contract that receives the message that is sent with the depositWithMessage function must implement a callback function named on_receive. Upon completion, the depositWithMessage function triggers a call to the on_receive callback function on the receiving L2 contract. The on_receive function receives the deposit message as input, and it must return true for the deposit to succeed. If on_receive returns false, or if the receiving contract does not implement on_receive, the depositWithMessage L1 handler fails, and the user can only recover their funds using the depositWithMessageCancelRequest function. l2_token: ContractAddress The L2 address of the ERC-20 token contract. amount: uint256 The amount deposited. depositor: EthAddress L1 address of the deposit sender. message: Span The message that was sent with the depositWithMessage function. true The on_receive function completed successfully. false The on_receive function did not complete successfully. The transaction is reverted. No value If the recipients’s smart contract does not implement the on_receive function, the call fails to execute, and the transaction is reverted. on_receive in receiver_interface.cairo.","title":"StarkGate function and event reference","component":"ROOT","version":"","name":"function-reference","url":"/starkgate/function-reference/","titles":[{"text":"L1 function reference","hash":"l1_function_reference","id":1},{"text":"deposit","hash":"deposit","id":2},{"text":"Description","hash":"description","id":3},{"text":"Visibility","hash":"visibility","id":4},{"text":"State Mutability","hash":"state_mutability","id":5},{"text":"Parameters","hash":"parameters","id":6},{"text":"Returns","hash":"returns","id":7},{"text":"Emitted event","hash":"emitted_event","id":8},{"text":"Function and event definitions","hash":"function_and_event_definitions","id":9},{"text":"depositCancelRequest","hash":"depositCancelRequest","id":10},{"text":"Description","hash":"description_2","id":11},{"text":"Visibility","hash":"visibility_2","id":12},{"text":"State Mutability","hash":"state_mutability_2","id":13},{"text":"Parameters","hash":"parameters_2","id":14},{"text":"Returns","hash":"returns_2","id":15},{"text":"Emitted event","hash":"emitted_event_2","id":16},{"text":"Function and event definitions","hash":"function_and_event_definitions_2","id":17},{"text":"depositReclaim","hash":"depositReclaim","id":18},{"text":"Description","hash":"description_3","id":19},{"text":"Visibility","hash":"visibility_3","id":20},{"text":"State Mutability","hash":"state_mutability_3","id":21},{"text":"Parameters","hash":"parameters_3","id":22},{"text":"Returns","hash":"returns_3","id":23},{"text":"Emitted event","hash":"emitted_event_3","id":24},{"text":"Function and event definitions","hash":"function_and_event_definitions_3","id":25},{"text":"See also","hash":"see_also","id":26},{"text":"depositWithMessage","hash":"depositWithMessage","id":27},{"text":"Description","hash":"description_4","id":28},{"text":"Visibility","hash":"visibility_4","id":29},{"text":"State Mutability","hash":"state_mutability_4","id":30},{"text":"Parameters","hash":"parameters_4","id":31},{"text":"Returns","hash":"returns_4","id":32},{"text":"Emitted event","hash":"emitted_event_4","id":33},{"text":"Function and event definitions","hash":"function_and_event_definitions_4","id":34},{"text":"depositWithMessageCancelRequest","hash":"depositWithMessageCancelRequest","id":35},{"text":"Description","hash":"description_5","id":36},{"text":"Visibility","hash":"visibility_5","id":37},{"text":"State Mutability","hash":"state_mutability_5","id":38},{"text":"Parameters","hash":"parameters_5","id":39},{"text":"Returns","hash":"returns_5","id":40},{"text":"Emitted event","hash":"emitted_event_5","id":41},{"text":"Function and event definitions","hash":"function_and_event_definitions_5","id":42},{"text":"See also","hash":"see_also_2","id":43},{"text":"depositWithMessageReclaim","hash":"depositWithMessageReclaim","id":44},{"text":"Description","hash":"description_6","id":45},{"text":"Visibility","hash":"visibility_6","id":46},{"text":"State Mutability","hash":"state_mutability_6","id":47},{"text":"Parameters","hash":"parameters_6","id":48},{"text":"Returns","hash":"returns_6","id":49},{"text":"Emitted event","hash":"emitted_event_6","id":50},{"text":"Function and event definitions","hash":"function_and_event_definitions_6","id":51},{"text":"See also","hash":"see_also_3","id":52},{"text":"enrollTokenBridge","hash":"enrollTokenBridge","id":53},{"text":"Description","hash":"description_7","id":54},{"text":"Visibility","hash":"visibility_7","id":55},{"text":"State Mutability","hash":"state_mutability_7","id":56},{"text":"Parameters","hash":"parameters_7","id":57},{"text":"Returns","hash":"returns_7","id":58},{"text":"Emitted event","hash":"emitted_event_7","id":59},{"text":"Function and event definition","hash":"function_and_event_definition","id":60},{"text":"estimateDepositFeeWei","hash":"estimateDepositFeeWei","id":61},{"text":"Description","hash":"description_8","id":62},{"text":"Visibility","hash":"visibility_8","id":63},{"text":"State Mutability","hash":"state_mutability_8","id":64},{"text":"Parameters","hash":"parameters_8","id":65},{"text":"Returns","hash":"returns_8","id":66},{"text":"Emitted event","hash":"emitted_event_8","id":67},{"text":"Function definition","hash":"function_definition","id":68},{"text":"Additional resources","hash":"additional_resources","id":69},{"text":"estimateEnrollmentFeeWei","hash":"estimateEnrollmentFeeWei","id":70},{"text":"Description","hash":"description_9","id":71},{"text":"Visibility","hash":"visibility_9","id":72},{"text":"State Mutability","hash":"state_mutability_9","id":73},{"text":"Parameters","hash":"parameters_9","id":74},{"text":"Returns","hash":"returns_9","id":75},{"text":"Emitted event","hash":"emitted_event_9","id":76},{"text":"Function definition","hash":"function_definition_2","id":77},{"text":"Additional resource","hash":"additional_resource","id":78},{"text":"getBridge","hash":"getBridge","id":79},{"text":"Description","hash":"description_10","id":80},{"text":"Visibility","hash":"visibility_10","id":81},{"text":"State Mutability","hash":"state_mutability_10","id":82},{"text":"Parameters","hash":"parameters_10","id":83},{"text":"Returns","hash":"returns_10","id":84},{"text":"Emitted event","hash":"emitted_event_10","id":85},{"text":"Function definition","hash":"function_definition_3","id":86},{"text":"getRegistry","hash":"getRegistry","id":87},{"text":"Description","hash":"description_11","id":88},{"text":"Visibility","hash":"visibility_11","id":89},{"text":"State Mutability","hash":"state_mutability_11","id":90},{"text":"Parameters","hash":"parameters_11","id":91},{"text":"Returns","hash":"returns_11","id":92},{"text":"Emitted event","hash":"emitted_event_11","id":93},{"text":"Function definition","hash":"function_definition_4","id":94},{"text":"getStatus","hash":"getStatus","id":95},{"text":"Description","hash":"description_12","id":96},{"text":"Visibility","hash":"visibility_12","id":97},{"text":"State Mutability","hash":"state_mutability_12","id":98},{"text":"Parameters","hash":"parameters_12","id":99},{"text":"Returns","hash":"returns_12","id":100},{"text":"Emitted event","hash":"emitted_event_12","id":101},{"text":"Function definition","hash":"function_definition_5","id":102},{"text":"getWithdrawalBridges","hash":"getWithdrawalBridges","id":103},{"text":"Description","hash":"description_13","id":104},{"text":"Visibility","hash":"visibility_13","id":105},{"text":"State Mutability","hash":"state_mutability_13","id":106},{"text":"Parameters","hash":"parameters_13","id":107},{"text":"Returns","hash":"returns_13","id":108},{"text":"Emitted event","hash":"emitted_event_13","id":109},{"text":"Function definition","hash":"function_definition_6","id":110},{"text":"identify","hash":"identify","id":111},{"text":"Description","hash":"description_14","id":112},{"text":"Visibility","hash":"visibility_14","id":113},{"text":"State Mutability","hash":"state_mutability_14","id":114},{"text":"Parameters","hash":"parameters_14","id":115},{"text":"Returns","hash":"returns_14","id":116},{"text":"Emitted event","hash":"emitted_event_14","id":117},{"text":"Function definition","hash":"function_definition_7","id":118},{"text":"isServicingToken","hash":"isServicingToken","id":119},{"text":"Description","hash":"description_15","id":120},{"text":"Visibility","hash":"visibility_15","id":121},{"text":"State Mutability","hash":"state_mutability_15","id":122},{"text":"Parameters","hash":"parameters_15","id":123},{"text":"Returns","hash":"returns_15","id":124},{"text":"Emitted event","hash":"emitted_event_15","id":125},{"text":"Function definition","hash":"function_definition_8","id":126},{"text":"withdraw","hash":"withdraw","id":127},{"text":"Description","hash":"description_16","id":128},{"text":"Parameters","hash":"parameters_16","id":129},{"text":"State mutability","hash":"state_mutability_16","id":130},{"text":"Returns","hash":"returns_16","id":131},{"text":"Emitted event","hash":"emitted_event_16","id":132},{"text":"Function and event definition","hash":"function_and_event_definition_2","id":133},{"text":"L2 function reference","hash":"l2_function_reference","id":134},{"text":"get_erc20_class_hash","hash":"get_erc20_class_hash","id":135},{"text":"Description","hash":"description_17","id":136},{"text":"Parameters","hash":"parameters_17","id":137},{"text":"Returns","hash":"returns_17","id":138},{"text":"Function definition","hash":"function_definition_9","id":139},{"text":"get_identity","hash":"get_identity","id":140},{"text":"Description","hash":"description_18","id":141},{"text":"Parameters","hash":"parameters_18","id":142},{"text":"Returns","hash":"returns_18","id":143},{"text":"Function definition","hash":"function_definition_10","id":144},{"text":"get_l1_token","hash":"get_l1_token","id":145},{"text":"Description","hash":"description_19","id":146},{"text":"Parameters","hash":"parameters_19","id":147},{"text":"Returns","hash":"returns_19","id":148},{"text":"Function definition","hash":"function_definition_11","id":149},{"text":"get_l2_token","hash":"get_l2_token","id":150},{"text":"Description","hash":"description_20","id":151},{"text":"Parameters","hash":"parameters_20","id":152},{"text":"Returns","hash":"returns_20","id":153},{"text":"Function definition","hash":"function_definition_12","id":154},{"text":"get_remaining_withdrawal_quota","hash":"get_remaining_withdrawal_quota","id":155},{"text":"Description","hash":"description_21","id":156},{"text":"Parameters","hash":"parameters_21","id":157},{"text":"Returns","hash":"returns_21","id":158},{"text":"Function definition","hash":"function_definition_13","id":159},{"text":"get_version","hash":"get_version","id":160},{"text":"Description","hash":"description_22","id":161},{"text":"Parameters","hash":"parameters_22","id":162},{"text":"Returns","hash":"returns_22","id":163},{"text":"Function definition","hash":"function_definition_14","id":164},{"text":"initiate_token_withdraw","hash":"initiate_token_withdraw","id":165},{"text":"Description","hash":"description_23","id":166},{"text":"Parameters","hash":"parameters_23","id":167},{"text":"Returns","hash":"returns_23","id":168},{"text":"Function definition","hash":"function_definition_15","id":169},{"text":"on_receive","hash":"on_receive","id":170},{"text":"Description","hash":"description_24","id":171},{"text":"Parameters","hash":"parameters_24","id":172},{"text":"Returns","hash":"returns_24","id":173},{"text":"Function definition","hash":"function_definition_16","id":174}]},"35":{"id":35,"text":"StarkGate, developed by StarkWare, bridges ETH and ERC-20 tokens between Ethereum and Starknet. Each supported token is associated with an L1 and L2 bridge contract that communicates via Starknet’s messaging mechanism. To use the StarkGate web app, go to https://starkgate.starknet.io. A bridge enables you to fund your L2 wallet with ETH and ERC-20 tokens that reside on L1. The terms deposit, transact, and transfer refer to various operations involving a bridge, even though ETH and ERC-20 tokens never actually leave Ethereum. StarkGate 2.0 provides a contract that enables seamless backward compatibility with the previous version of StarkGate. When you update the code in your contract, make sure that you use the most up-to-date versions of all StarkGate contracts. L1 and L2 addresses for StarkGate bridges and supported tokens are listed in the JSON files in the Starknet GitHub repository shown in the table StarkGate bridged tokens and their addresses. Table 1. StarkGate bridged tokens and their addresses Network StarkGate bridged tokens JSON file Mainnet mainnet.json Sepolia testnet sepolia.json StarkGate supports many tokens, including ETH, WBTC, USDC, DAI, and many more. For a comprehensive list of tokens that StarkGate supports, including their L1 and L2 addresses, see the JSON files in the Starknet GitHub repository shown in the table StarkGate bridged tokens and their addresses. Previously, StarkGate placed limitations for each supported token on the amount that could be deposited and the total value locked in the L1 bridge contract on Mainnet. These limits have been removed. A call to the L1 deposit function initiates a deposit. The function does the following: Transfers the funds from the user’s account to the Starknet bridge. Emits a Deposit event that includes the L1 and L2 addresses of the user, and the amount deposited. Sends a message to the corresponding L2 bridge with the amount deposited, and the recipient’s address. Starknet’s sequencer is now aware of the deposit transaction. The sequencer waits for enough L1 block confirmations to fill its quota to run before the corresponding deposit transaction is initiated on L2. During this period of time, the status of the L2 deposit transaction is NOT_RECEIVED. The sequencers refer to the deposit request by triggering the L1 handler using the handle_deposit function on the L2 bridge. The handle_deposit function verifies that the deposit indeed came from the corresponding L1 bridge. It then calls the relevant token’s contract on Starknet and mints the specified amount of the token on L2 for the user. The sequencers complete constructing the block. The status of the deposit request is now ACCEPTED_ON_L2. Starknet’s provers prove the validity of the block and submit a state update to L1. The message confirming transfer of the funds is cleared from the Starknet Core Contract, and the fact that the user has transferred their funds is part of the now finalized state of Starknet. If the message wasn’t on L1 to begin with, that is, if the deposit request was fraudulently created on Starknet, the state update fails. A call to the L2 initiate_token_withdraw function initiates a withdrawal. The function does the following: Burns the transferred amount of tokens from the balance of the withdrawal’s initiator. Sends a message to the relevant L1 bridge with the amount to be transferred and the recipient’s address. The sequencer completes the block construction Starknet’s provers prove the validity of the block and submit a state update to L1. The message from the previous step is stored in the Starknet Core Contract. After the withdrawal message has been recorded on the Starknet Core Contract, anyone can finalize the transfer on L1 from the bridge back to the user, by calling the withdraw function. This step is permissionless, anyone can do it. The recipient’s address is part of the recorded message on L1, so they receive the funds regardless of who calls the withdraw function on L1. L1-L2 messaging The StarkGate developer’s reference: deposit function, Deposit event withdraw initiate_token_withdraw handle_deposit function on the L2 bridge","title":"StarkGate bridge overview","component":"ROOT","version":"","name":"overview","url":"/starkgate/overview/","titles":[{"text":"StarkGate addresses","hash":"starkgate_addresses","id":1},{"text":"Supported tokens in StarkGate","hash":"starkgate_supported_tokens","id":2},{"text":"L1→L2 transfer (deposit)","hash":"l1l2_transfer_deposit","id":3},{"text":"Step 1: Call the deposit function on L1","hash":"step_1_call_the_deposit_function_on_l1","id":4},{"text":"Step 2: Deposit triggered on Starknet","hash":"step_2_deposit_triggered_on_starknet","id":5},{"text":"Step 3: The block that includes the transfer is proved","hash":"step_3_the_block_that_includes_the_transfer_is_proved","id":6},{"text":"L2→L1 transfer (withdrawal)","hash":"l2l1_transfer_withdraw","id":7},{"text":"Step 1: Initiate a withdrawal from L2","hash":"step_1_call_the_withdraw_function_on_l2","id":8},{"text":"Step 2: Proving the block that includes the withdrawal transaction","hash":"proving_the_block_that_includes_the_withdrawal_transaction","id":9},{"text":"Step 3: Transferring the funds on L1","hash":"step_3_transferring_the_funds_on_l1","id":10},{"text":"Additional resources","hash":"additional_resources","id":11}]},"36":{"id":36,"text":"Using StarkGate to withdraw funds from Starknet requires StarkGate’s initiate_token_withdraw function to initiate a withdrawal. The function does the following: Burns the transferred amount of tokens from the L2 balance of the withdrawal’s initiator. Sends a message to the relevant L1 bridge with the amount to be transferred and the recipient’s Ethereum address. Subsequently, the funds should be transferred to the recipient’s Ethereum address. For more information on what happens during the transfer process, see L2→L1 transfer (withdrawal). Prerequisites A Starknet block explorer. For a list of Starknet block explorers, see Block explorers, indexers & Enhanced API on the Starknet site. An Ethereum block explorer, such as Etherscan. Funds to transfer from L2 to L1, including enough to pay the fees required for the transfer. The L2 address of the StarkGate bridge for the token you want to withdraw. To view the token addresses for tokens on Mainnet or Sepolia testnet, see Bridged tokens and addresses. Procedure Using a Starknet block explorer, go to the StarkGate contract for the token you want to withdraw. For example, to withdraw USDC: If using Voyager, go to the USDC StarkGate bridge and click Write Contract. If using StarkScan, go to the USDC StarkGate bridge and click Read/Write Contract Write. Click the initiate_token_withdraw function and enter the following: In l1_token, enter the L1 address of the ERC-20 contract for the token you want to withdraw, in this case, USDC. In l1_recipient, enter the L1 address of the recipient. In amount, enter the amount to transfer. Click Transact for Voyager, or Write for StarkScan. The function initiates a withdrawal. Using an Ethereum block explorer, go to the StarkGate contract and click Write as Proxy. For example, using Etherscan, go to 0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419 Click the StarkGate 2.0 withdraw (0x69328dec) function. Enter the following: recipient (address) The recipient. token (address) The address of the contract for the desired token. amount (uint256) The amount of the withdrawal. Click Write. The withdraw function withdraws the funds to the recipient’s L1 address. The funds should be available after the next L1 state update.","title":"Withdrawing funds with StarkGate","component":"ROOT","version":"","name":"withdrawing","url":"/starkgate/withdrawing/","titles":[]},"37":{"id":37,"text":"The features on this page are deprecated, unsupported, or removed from Starknet. Deprecated Refers to a feature or capability that is still supported, but support will be removed in a future release of Starknet. Future fixes or enhancements are unlikely. If necessary, an alternative is available. Unsupported Refers to a feature or capability that is no longer supported. Removed Refers to a feature or capability that has been entirely removed. Name Description Starknet CLI Support for the Starknet CLI has been removed. Instead use Starkli. Support for Starknet CLI is removed in Starknet v0.13.0. Cairo 0 Starknet v0.11.0 introduces Cairo 1.0 smart contracts. Name Description Goerli testnet Goerli testnet support was removed April 2, 2024. Sepolia testnet replaces Goerli testnet. Starknet started migrating to Sepolia testnet on November 15th, 2023. For more information on the Goerli deprecation, see the deprecation announcement on Ethereum’s site. Full nodes, API services, SDKs, and other Starknet developer tools have migrated to Sepolia as well. Sepolia’s state and history are relatively small. Sepolia supports declaring classes of CairoZero and Cairo v2.0.0 and higher. Starknet feeder gateway The Starknet feeder gateway, a temporary solution for querying the sequencer’s state, is being replaced by Starknet full nodes (Pathfinder, Juno, Deoxys, Papyrus) and RPC services. For more information, see Full nodes and API services. Support for the feeder gateway queries that are not required for full nodes to synchronize on the state of Starknet will stop according to the following schedule: Environment Date Integration 1 November 2023 Testnet 15 November 2023 Mainnet 19 December 2023 Queries that are required for full nodes to synchronize on the state of Starknet are still supported. For more information, see the Community Forum post Feeder Gateway Deprecation. Free L1→ L2 messaging Previously, sending a message from L1 to L2 had an optional fee associated. From Starknet v0.11.0, the fee mechanism is enforced and the ability to send L1→L2 messages without the corresponding L2 fee has been removed. See here for more details. invoke transaction v0 invoke transaction v0 has been removed since Starknet v0.11.0. declare transaction v0 declare transaction v0 has been removed since Starknet v0.11.0. deploy transaction The deploy transaction has been removed since Starknet v0.10.3. To deploy new contract instances, you can use the deploy system call.","title":"Deprecated, unsupported, and removed features","component":"ROOT","version":"","name":"deprecated","url":"/starknet-versions/deprecated/","titles":[{"text":"Deprecated features","hash":"deprecated_features","id":1},{"text":"Unsupported and removed features","hash":"unsupported_and_removed_features","id":2}]},"38":{"id":38,"text":"Juno is a golang Starknet node implementation by Nethermind with the aim of decentralizing Starknet. See the official Juno GitHub repository for more details. Support for upcoming Starknet v0.12.3, improved RPC performance with a new global class cache, allowing for higher request throughput and optimized resource usage. We’ve updated blockifier, which includes an important wallet integration fix. On top of that, expect new metrics and ongoing enhancements to the P2P layer, among other improvements. Here’s what’s new: Support for Starknet v0.12.3 A global class cache to the VM that enhances overall RPC throughput. PR by @omerfirmak in 1401 A new flag, max-vms, to control the maximum number of VM instances for concurrent RPC calls, optimizing resource usage PR by @omerfirmak in #1378. The blockifier library has been updated, now supporting the query bit in the version field for transactions. PR by @joshklop in #1401. Subscription handling has been moved to the synchronizer for improved efficiency. PR by @joshklop in #1373. Ongoing enhancements to the P2P layer, including the implementation of a Receipt Handler and Adapter and a new GetBlockBodies feature. PRs by @IronGauntlets in #1352 and by @kirugan in #1359. Prometheus metrics have been expanded to include version information, latency on Transaction.Commit(), and read metrics on blockchain operations. PRs by @omerfirmak in #1394, #1396, and #1395. Kubernetes pods now have a correctly set GOMAXPROCS setting, aligning performance with CPU resources. PR by @omerfirmak in #1397. Fallback to feeder traces for blocks ⇐ 0.12.2. PR by @omerfirmak in #1405. Resolved an issue with event emission on sync step failure for more reliable synchronization. PR by @aminsato in #1387. Refactored websocket error conditions for improved stability and error handling. PR by @joshklop in #1400. You can pull the Docker image for this release with the following command: docker pull nethermind/juno:v0.7.3 The primary goal of this release is to introduce support for Starknet JSON-RPC v0.5.0. Juno now supports multiple versions via /v0_5 and /v0_4 endpoints. The default version at the root / endpoint has been updated from 0.4.0 to 0.5.0. Starknet v0.5.0 Compatibility: Implemented starknet_specVersion @omerfirmak Renamed juno_getTransactionStatus to starknet_getTransactionStatus. @omerfirmak Removed pendingTransactions endpoint for cleanup. @omerfirmak Added new fields like execution resources and message hash to RPC receipt. @omerfirmak Building and calculating state diffs. @omerfirmak Make starknet_traceBlockTransactions get a block id @kirugan Add txn type to traces Add message_hash field for L1_HANDLER_TXN_RECEIPT Add starknet_getTransactionStatus and remove starknet_pendingTransactions Support multiple RPC versions: v0.4.0 and v0.5.0 @omerfirmak Performance Metrics: Moved metric counting out of various components for cleaner code. @omerfirmak Websocket Enhancements: Full-duplex comms and fixes related to over-reading websocket requests. @joshklop RPC Optimization: Reduced allocations in RPC requests for better performance. @joshklop Refactored Error Handling: Improved global error usage and better error handling in various components. @omerfirmak Websocket Reading: Fixed over-reading issues in Websocket requests.@joshklop Error Handling: Resolved potential nil pointer dereferences and panic issues. @omerfirmak Various CI/CD pipeline improvements for better automation. @wojciechos and @ToluwalopeAyo You can pull the Docker image for this release with: docker pull nethermind/juno:v0.7.0 New Trace RPC Methods: starknet_traceTransaction starknet_traceBlockTransactions starknet_simulateTransactions Juno RPC Schema: A dedicated schema to streamline RPC interactions for Juno’s method. Juno Console Enhancement: Pretty printing of Juno console logs for an enriched user experience. Comprehensive Documentation: Official documentation now hosted on GitHub Pages. RPC Schema Consistency: Revised to ensure our RPC schema is consistent with the Starknet specification. Command-line switches have been restructured to provide clearer access control: docker run -d --name juno -p $httpPort:$httpPort -p $metricsPort:$metricsPort -v /root/juno:/var/lib/juno nethermind/juno:v0.6.0 --db-path /var/lib/juno --http --http-port $httpPort --metrics --metrics-port $metricsPort --eth-node (Note: Ensure to adjust the variables like $httpPort, $metricsPort and others as per your configuration.) Database Migration: This version introduces database changes due to our work focus on peer-to-peer (p2p) communication. These changes may result in extended migration times. For faster sync, we recommend users to utilize snapshots. This release adds support for the Starknet v0.12.2. Support for Starknet v0.12.2 This release adds support for the upcoming Starknet v0.12.1 upgrade and includes compatibility with v0.4.0 of the RPC specification. Support for Starknet v0.12.1 Compatibility with v0.4.0 of the RPC specification New RPC method: starknet_estimateMessageFee Health Check Endpoint: A GET request to the / endpoint will now return a 200 status code for a healthy Juno node Added Prometheus metrics support: Use --metrics and --metrics-port to enable this feature Adjusted worker number for sync process, improving performance Updated blockifier for starknet v0.12.1 Resolved issues causing context canceled errors in writing RPC methods Mapped gateway errors to write API RPC errors, improving error handling Log the incoming RPC requests in Pull Request #907 Update types for 0.12.1 in Pull Request #895 Parallelize per-contract storage updates in Pull Request #900 Add missing From field to rpc.MsgToL1 in Pull Request #908 This release has breaking changes and database is not compatible with the previous version. New RPC Methods: starknet_call starknet_estimateFee starknet_addDeclareTransaction starknet_addDeployAccountTransaction starknet_addInvokeTransaction juno_getTransactionStatus juno_version L1 Verifier: Verification of state from Layer 1 has been implemented. Block Reorg Detection and Handling: A feature to detect and handle block reorganizations has been implemented. gRPC Service: To accommodate users requiring direct access to the database, a gRPC service has been exposed. Database Migration: The system has been improved to handle database changes more gracefully. It’s no longer necessary to sync from the start when some database changes occur. Starknet v0.12.0 support: includes integration with the Rust VM. Performance Enhancements: Several adjustments and improvements have been made to increase the performance. These changes have resulted in ~30% reduction in sync time. Fetch and store compiled classes for each Sierra class. Updated the behavior of synced nodes, which will now return false to starknet_syncing. Resolved issue with NumAsHex(0) being omitted in RPC. Fixed a Goerli sync issue by relaxing decoder max array elements limit. Full Changelog: [v0.3.0…​v0.3.1] Starknet v0.11.2 support History for contracts, nonce, and class hash. Implemented StateSnapshot. New RPC endpoints: starknet_syncing starknet_getNonce starknet_getStorageAt starknet_getClassHashAt starknet_getClass starknet_getClassAt starknet_getEvents For new RPC endpoints to fully work with data before the new version, the node needs to be resynced. Optimized TransactionStorage encoding and refactored memStorage. Refactored RPC implementation for better organization and maintainability. Parallelized and refactored sync tests for faster execution, improved readability, and maintainability. Updated handling of non-existent keys to return a zero value. Full Changelog: v0.3.0…​v0.3.1 This patch release fixes handling of block versioning and ensures compatibility with non-sem-ver compliant Starknet. Ignore or add digits to block version string as necessary. Full Changelog: v0.2.1…​v0.2.2 This minor release introduces an important optimization that enhances sync performance. Update gnark-crypto version: Implement precomputed point multiplication results for Pedersen hash operations. Full Changelog: v0.2.0…​v0.2.1 This release adds support for Staknet v0.11.0. This release has breaking changes and database is not compatible with the previous version. Starknet v0.11.0 support: Add Poseidon hash for new state commitment. Add DeclareTransaction version 2. Add and Store Cairo 1/Sierra class definition and hash calculations. pprof option is added for profiling and monitoring. Verify Class Hashes. Starknet v0.11.0 support: Update InvokeTransaction version 1’s contract address to sender address. Update current JSON RPC endpoints to [v.0.3.0-rc1](https://github.com/starkware-libs/starknet-specs/tree/v0.3.0-rc1). Rename the verbosity option to log-level and log-level accepts string instead of uint8. See help for details. network option accepts string instead of uint8. See help for details. Database table is updated to account for Starknet v0.11.0 changes. Remove metrics and eth-node options since they are not used. Graceful shutdown: ensure all services have returned before exiting. Full Changelog: v0.1.0…​v0.2.0 This is Juno’s first release (compatible with Starknet v0.10.3) with the following features: Starknet state construction and storage using a path-based Merkle Patricia trie. Pedersen and starknet_keccak hash implementation over starknet field. Feeder gateway synchronization of Blocks, Transactions, Receipts, State Updates and Classes. Block and Transaction hash verification. JSON-RPC Endpoints: starknet_chainId starknet_blockNumber starknet_blockHashAndNumber starknet_getBlockWithTxHashes starknet_getBlockWithTxs starknet_getTransactionByHash starknet_getTransactionReceipt starknet_getBlockTransactionCount starknet_getTransactionByBlockIdAndIndex starknet_getStateUpdate","title":"Juno release notes","component":"ROOT","version":"","name":"juno-versions","url":"/starknet-versions/juno-versions/","titles":[{"text":"v0.7.3","hash":"v0_7_3","id":1},{"text":"Added","hash":"added","id":2},{"text":"Changed","hash":"changed","id":3},{"text":"Fixed","hash":"fixed","id":4},{"text":"Docker Image","hash":"docker_image","id":5},{"text":"v0.7.0","hash":"v0_7_0","id":6},{"text":"🌟 Added","hash":"added_2","id":7},{"text":"🔄 Changed","hash":"changed_2","id":8},{"text":"🛠 Fixed","hash":"fixed_2","id":9},{"text":"🚀 Deployment and CI/CD","hash":"deployment_and_cicd","id":10},{"text":"⚙️ Docker Image","hash":"docker_image_2","id":11},{"text":"v0.6.0","hash":"v0_6_0","id":12},{"text":"🌟 Added","hash":"added_3","id":13},{"text":"🛠 Fixed","hash":"fixed_3","id":14},{"text":"⚙️ Command-line Switches Update","hash":"command_line_switches_update","id":15},{"text":"🔍 Migration Notes","hash":"migration_notes","id":16},{"text":"v0.5.1","hash":"v0_5_1","id":17},{"text":"Added","hash":"added_4","id":18},{"text":"v0.5.0","hash":"v0_5_0","id":19},{"text":"Added","hash":"added_5","id":20},{"text":"Changed","hash":"changed_3","id":21},{"text":"Fixed","hash":"fixed_4","id":22},{"text":"v0.4.1","hash":"v0_4_1","id":23},{"text":"Added","hash":"added_6","id":24},{"text":"Changed","hash":"changed_4","id":25},{"text":"Fixed","hash":"fixed_5","id":26},{"text":"v0.4.0","hash":"v0_4_0","id":27},{"text":"Added","hash":"added_7","id":28},{"text":"Changed","hash":"changed_5","id":29},{"text":"v0.3.1","hash":"v0_3_1","id":30},{"text":"Added","hash":"added_8","id":31},{"text":"Changed","hash":"changed_6","id":32},{"text":"Fixed","hash":"fixed_6","id":33},{"text":"v0.3.0","hash":"v0_3_0","id":34},{"text":"Added","hash":"added_9","id":35},{"text":"Changed","hash":"changed_7","id":36},{"text":"Fixed","hash":"fixed_7","id":37},{"text":"v0.2.2","hash":"v0_2_2","id":38},{"text":"Fixed","hash":"fixed_8","id":39},{"text":"v0.2.1","hash":"v0_2_1","id":40},{"text":"v0.2.0","hash":"v0_2_0","id":41},{"text":"Added","hash":"added_10","id":42},{"text":"Changed","hash":"changed_8","id":43},{"text":"Removed","hash":"removed","id":44},{"text":"Fixed","hash":"fixed_9","id":45},{"text":"v0.1.0","hash":"v0_1_0","id":46}]},"39":{"id":39,"text":"Pathfinder is a Starknet full node giving you a safe view into Starknet. It provides the following features: Access the full Starknet state history Verifies state using Ethereum Implements the Starknet JSON-RPC API Run Starknet functions without requiring a Starknet transaction Ability to do fee estimation for transactions See the official Pathfinder GitHub repository for more details. stack overflow while compiling Sierra to CASM pending data from the gateway is inconsistent this could exhibit as RPC data changing status between pending | L2 accepted | not found, especially noticeable for transactions. substantially increase the character limit of execution errors previously, the RPC would return a highly truncated error message from the execution vm Pending data is not polled for starknet v0.12 due to an HTTP error code change from the gateway. Transaction receipts missing from_address in MSG_TO_L1. Sierra class hash not in declared classes sync bug use all libfunc list instead of experimental for sierra compilation starknet_estimateMessageFee for JSON-RPC v0.3.1 to estimate message fee from L1 handler. sync-related metrics current_block: the currently sync’d block height of the node highest_block: the height of the blockchain block_time: timestamp difference between the current block and its parent block_latency: delay between current block being published and sync’d locally block_download: time taken to download current block’s data excluding classes block_processing: time taken to process and store the current block configuration for new block polling interval: --sync.poll-interval Starknet v0.12.0 support sierra v2.0.0 support cairo-lang upgraded to 0.12.0a0 reorgs fail if a class declaration is included in the reorg sync can fail if db connection pool is held saturated by rpc queries uses finalized (reorg-safe) L1 state instead of latest starknet_getEvents times out for queries involving a large block range dropped upgrade support for pathfinder v0.4 and earlier separate db connection pools rpc, sync and storage increased the number of rpc db connections class hash mismatch for cairo 0 classes with non-ascii text starknet_simulateTransaction requires transactions instead of transaction as input field. gateway’s error message is hidden when submitting a failed transaction starknet_getEvents is very slow for certain filter combinations default RPC API version changed from v0.2 to v0.3 disallow JSON-RPC notification-style requests Starknet v0.11.2 support Sierra compiler v1.1.0-rc0 cairo-lang upgraded to 0.11.2a0 Subscription to newHead events via websocket using the method pathfinder_subscribe_newHeads, which can be managed by the following command line options rpc.websocket, which enables websocket transport rpc.websocket.capacity, which sets the maximum number of websocket subscriptions per subscription type Authors: [Shramee Srivastav](https://github.com/shramee) and [Matthieu Auger](https://github.com/matthieuauger) cairo-lang upgraded to 0.11.1.1 RPC emits connection logs and warnings Fee estimate mismatch between gateway and pathfinder Gateway uses a new gas price sampling algorithm which was incompatible with pathfinders. Fee estimate returns error when submitting Cairo 1.0.0-rc0 classes. Historic L1 handler transactions are served as Invoke V0 Older databases contain L1 handler transactions from before L1 handler was a specific transaction type. These were stored as Invoke V0. These are now correctly identified as being L1 Handler transactions. RPC emits connection logs and warnings Fee estimate mismatch between gateway and pathfinder Gateway uses a new gas price sampling algorithm which was incompatible with pathfinders. Historic L1 handler transactions are served as Invoke V0 Older databases contain L1 handler transactions from before L1 handler was a specific transaction type. These were stored as Invoke V0. These are now correctly identified as being L1 Handler transactions. The primary focus of this release is to provide support for Starknet v0.11.1, and will continue to work for v0.11.0. Since this release is required for v0.11.1, you should update your node before the network is updated. Starknet v0.11.1 support CORS support via the rpc.cors-domains configuration option Transaction hashes are now verified as part of the sync process. Previously, these were not verified as the exact algorithm was underdocumented and the transaction format was still evolving. RPC server panic for unprefixed unregistered method names Data can temporarily appear to go missing when transitioning from PENDING to ACCEPTED ON L2 This was commonly seen when rapidly monitoring a new transaction, which would go from PENDING to TXN_HASH_NOT_FOUND to ACCEPTED_ON_L2 as pathfinder moved the ephemeral pending data to latest data on disk. Fixes for minor issues and inconsistencies. max-rpc-connections command-line argument. This sets the maximum number incoming RPC connections the pathfinder node will accept. This defaults to 1024 if not specified. cairo-lang upgraded to 0.11.0.2 starknet_simulateTransaction data model inconsistency poll-pending default value restored to false incoming RPC connections limited to 100. This limit was accidentally introduced in v0.5.2 as part of a dependency upgrade, whereas before it was unlimited. The default is now 1024 and can be configured using --max-rpc-connections. handling of invalid JSON-RPC requests This release fixes a few RPC bugs and adds support for bulk fee estimation and transaction simulation (traces) as part of v0.3 RPC specification. In addition it also adds a pathfinder_getTransactionStatus endpoint which lets you track a transactions status — including REJECTED and RECEIVED — in the same fashion as the gateway. support starknet_estimateFee in the JSON-RPC v0.3 API supports estimating multiple transactions this includes declaring and immediately using a class (not currently possible via the gateway) support starknet_simulateTransaction for JSON-RPC v0.3 supports simulating multiple transactions this includes declaring and immediately using a class (not currently possible via the gateway) support pathfinder_getTransactionStatus which is exposed on all RPC routes this enables querying a transactions current status, including whether the gateway has received or rejected it RPC returns int for entrypoint offsets instead of hex RPC rejects Fee values with more than 32 digits RPC does not expose pathfinder_getProof on v0.3 route This is a minor bugfix release, primarily to fix an issue with syncing on testnet2. pathfinder sometimes spams nethermind L1 nodes pathfinder stops syncing testnet2 at block 95220 due to a Sierra class compilation issue starknet v0.11.0 support RPC API v0.3 partial support removed several deprecated config options requires python 3.9 or 3.10 (no longer 3.8) support for state commitment and class commitment in pathfinder_getProof support for starknet v0.11 partial support for RPC specification v0.3 exposed on /rpc/v0.3/ route missing support for starknet_estimateFee and starknet_simulate starknet_call and starknet_estimateFee JSON-RPC methods return more detailed error messages python version requirement has changed to 3.9 or 3.10 (was 3.8 or 3.9 previously) RPC accepts hex inputs for Felt without '0x' prefix. This led to confusion especially when passing in a decimal string which would get silently interpreted as hex. using a Nethermind Ethereum endpoint occasionally causes errors such as could not be found to be logged. sync can miss new block events by getting stuck waiting for pending data. --config configuration option (deprecated in [v0.4.1](https://github.com/eqlabs/pathfinder/releases/tag/v0.4.1)) --integration configuration option (deprecated in [v0.4.1](https://github.com/eqlabs/pathfinder/releases/tag/v0.4.1)) --sequencer-url configuration option (deprecated in [v0.4.1](https://github.com/eqlabs/pathfinder/releases/tag/v0.4.1)) --testnet2 configuration option (deprecated in [v0.4.1](https://github.com/eqlabs/pathfinder/releases/tag/v0.4.1)) starknet_addDeployTransaction as this is no longer an allowed transaction since starknet v0.10.3 RPC api version 0.1, which used to be served on path /rpc/v0.1 We added support for v0.3 and removed v0.1. We still support v0.2 at both /rpc/v0.2 and /rpc (default) routes. In summary: / # serves v0.2 /rpc/v0.2/ # serves v0.2 /rpc/v0.3/ # serves v0.3 We are missing starknet_estimateFee and starknet_simulate support for v0.3, which will be added in an upcoming release. Note: this only applies if you are building from source. This does not impact docker users. Pathfinder requires python to support the starknet VM used to simulate starknet transactions and function calls. Previous versions of the VM only worked with python 3.8 or 3.9 which was a hassle because most operating systems no longer directly support it. The new version of the VM bundled with starknet v0.11 now requires python version 3.9 or 3.10. Several configuration options are now removed, after they were deprecated in pathfinder v0.4.1. Here is a migration guide: --testnet2: use --network testnet2 instead --integration: use --network integration instead --sequencer-url: use --network custom in combination with --feeder-gateway-url and gateway-url --config: use environment variables or env files as an alternative Hotfix for a bug introduced in the previous version v0.4.4, which prevented a new node from syncing on blocks near genesis. Added Newton FAQ links to readme Node fails to sync old blocks @SecurityQQ made their first contribution in #799 This minor release contains some nice performance improvements for starknet_call and starknet_estimateFee as well as some minor bug fixes. Also included is a major new feature: storage proofs - big thanks @pscott for his hard work on this feature! This is available via the pathfinder_getProof method which is served from both the pathfinder and Starknet endpoints for convenience: /rpc/pathfinder/v0.1/pathfinder_getProof /rpc/v0.2/pathfinder_getProof The method is specified here. Its results can be used to formally verify what a contract’s storage values are without trusting the pathfinder node. This is achieved by validating the merkle-proof that pathfinder returns and confirming that it correctly matches the known Starknet state root. storage proofs via pathfinder_getProof by @pscott starknet_getEvents returns all events when from_block=\"latest\" v0.1 starknet_getStateUpdate does not contain nonces Improved performance for starknet_call and starknet_estimateFee by caching classes Improved performance for starknet_call and starknet_estimateFee by using Rust for hashing @pscott made their first contribution in #726 The primary purpose of this release is to properly support testnet2 after the Starknet v0.10.3 update. The v0.10.3 update changed the testnet2 chain ID which impacts transaction signatures which in turn meant that starknet_estimateFee would fail for any signed transaction. This release updates pathfinder to use the correct chain ID. Testnet2 and integration flags are ignored starknet_estimateFee uses wrong chain ID for testnet2 Updated to cairo-lang 0.10.3 Contains several bug fixes, mostly hotfixes for bugs introduced in v0.4.1. Document that --chain-id expects text as input Testnet2 and integration L1 addresses are swapped (bug introduced in v0.4.1) Proxy network setups can’t sync historical blocks (bug introduced in v0.4.1) ABI serialization for starknet_estimateFee for declare transactions Soft deprecation of some configuration options Support custom Starknet gateways Pathfinder RPC extensions at /rpc/pathfinder/ with pathfinder_version method starknet_events optimisations fix block timestamp in pending calls Custom Starknet gateway support This release introduces support for custom Starknets. You can select this network by setting --network custom and specifying the --gateway-url and --feeder-gateway-url options. Several configuration options have been soft deprecated. This means using them will continue to work as before (no breaking change), but they will emit a warning when used. They will be removed in a future version, so please migrate to the newer options. To re-emphasize: your current configuration setup will continue to work as is. --testnet2 and --integration have been deprecated in favor of --network testnet2 and --network integration. --sequencer-url has been deprecated in favor of --network custom along with --gateway-url, --feeder-gateway-url and --chain-id. In addition, you will need to rename your existing database file to custom.sqlite as this will be the expected filename for custom networks. --config has been deprecated and will not be supported in the future. The utility this provided was valuable. Unfortunately it is starting to severely hinder how fast we can implement configuration changes and we decided to remove it. We suggest using environment variables along with environment files to configure pathfinder in a similar fashion. The following configuration options are now marked as deprecated: --testnet2, --integration, --config, --sequencer-url Optimized starknet_events for queries with both a block range and a from address Block timestamps for pending in starknet_call and starknet_estimateFee were using the latest timestamp instead of the pending one. This meant contracts relying on accurate timestamps could sometimes fail unexpectedly. Custom Starknet support Pathfinder specific RPC extensions hosted at /rpc/pathfinder/v0.1. Currently, this only contains pathfinder_version which returns the pathfinder version of the node. This release contains a breaking change, and also adds support for Starknet v0.10.2. The changes themselves are quite simple, but please read through each section as there are some caveats which might impact you when you apply this update. This release changes the version of the RPC that is served at the root route, from v0.1 to v0.2 of the RPC specification. Version v0.1 is still available at the /rpc/v0.1/ endpoint. This is the only breaking change in this release. Here is a summary of what routes are currently available, and what’s changed: / serves v0.2 (changed from v0.1) /rpc/v0.1 serves v0.1 (no change) /rpc/v0.2 serves v0.2 (no change) If possible, we recommend that you use the version specific routes as this will prevent such breaking changes from impacting you. This release includes an update to the cairo-vm embedded in pathfinder in order to support the upcoming v0.10.2 Starknet release. This bundled vm is a pre-release and may therefore contain differences to the final version used once Starknet updates testnet and mainnet. We will of course issue a new release if / when there is a new vm. Since these changes are not yet live on testnet nor mainnet, this means upgrading to this release will cause deviations between what pathfinder outputs and what can be expected on the network. More specifically, starknet_estimateFee will compute different fees until the network has upgraded to Starknet v0.10.2. If you don’t need the RPC route changes, it may be pertinent to delay updating until closer to the v0.10.2 release dates on testnet and mainnet. The expected timeline for these upgrades is ~17/11 for testnets and ~24/11 for mainnet.","title":"Pathfinder release notes","component":"ROOT","version":"","name":"pathfinder-versions","url":"/starknet-versions/pathfinder-versions/","titles":[{"text":"[0.6.6] - 2023-07-10 (latest)","hash":"0_6_6_2023_07_10_latest","id":1},{"text":"Fixed","hash":"fixed","id":2},{"text":"[0.6.5] - 2023-07-07","hash":"0_6_5_2023_07_07","id":3},{"text":"Fixed","hash":"fixed_2","id":4},{"text":"Changed","hash":"changed","id":5},{"text":"[0.6.4] - 2023-07-05","hash":"0_6_4_2023_07_05","id":6},{"text":"Fixed","hash":"fixed_3","id":7},{"text":"[0.6.3] - 2023-06-29","hash":"0_6_3_2023_06_29","id":8},{"text":"Fixed","hash":"fixed_4","id":9},{"text":"Changed","hash":"changed_2","id":10},{"text":"[0.6.2] - 2023-06-29","hash":"0_6_2_2023_06_29","id":11},{"text":"Added","hash":"added","id":12},{"text":"Fixed","hash":"fixed_5","id":13},{"text":"Changed","hash":"changed_3","id":14},{"text":"[0.6.1] - 2023-06-18","hash":"0_6_1_2023_06_18","id":15},{"text":"Fixed","hash":"fixed_6","id":16},{"text":"[0.6.0] - 2023-06-14","hash":"0_6_0_2023_06_14","id":17},{"text":"Fixed","hash":"fixed_7","id":18},{"text":"Changed","hash":"changed_4","id":19},{"text":"[0.5.6] - 2023-05-25","hash":"0_5_6_2023_05_25","id":20},{"text":"Added","hash":"added_2","id":21},{"text":"[0.5.5] - 2023-05-18","hash":"0_5_5_2023_05_18","id":22},{"text":"Added","hash":"added_3","id":23},{"text":"Fixed","hash":"fixed_8","id":24},{"text":"Fixed","hash":"fixed_9","id":25},{"text":"v0.5.4","hash":"v0_5_4","id":26},{"text":"Added","hash":"added_4","id":27},{"text":"Fixed","hash":"fixed_10","id":28},{"text":"v0.5.3","hash":"v0_5_3","id":29},{"text":"Added","hash":"added_5","id":30},{"text":"Fixed","hash":"fixed_11","id":31},{"text":"v0.5.2","hash":"v0_5_2","id":32},{"text":"Added","hash":"added_6","id":33},{"text":"Fixed","hash":"fixed_12","id":34},{"text":"v0.5.1","hash":"v0_5_1","id":35},{"text":"Fixed","hash":"fixed_13","id":36},{"text":"v0.5.0","hash":"v0_5_0","id":37},{"text":"Highlights","hash":"highlights","id":38},{"text":"Added","hash":"added_7","id":39},{"text":"Changed","hash":"changed_5","id":40},{"text":"Fixed","hash":"fixed_14","id":41},{"text":"Removed","hash":"removed","id":42},{"text":"RPC API","hash":"rpc_api","id":43},{"text":"Python requirement","hash":"python_requirement","id":44},{"text":"Configuration changes","hash":"configuration_changes","id":45},{"text":"v0.4.5","hash":"v0_4_5","id":46},{"text":"Added","hash":"added_8","id":47},{"text":"Fixed","hash":"fixed_15","id":48},{"text":"New contributors","hash":"new_contributors","id":49},{"text":"v0.4.4","hash":"v0_4_4","id":50},{"text":"Added","hash":"added_9","id":51},{"text":"Fixed","hash":"fixed_16","id":52},{"text":"Changed","hash":"changed_6","id":53},{"text":"New contributors","hash":"new_contributors_2","id":54},{"text":"v0.4.3","hash":"v0_4_3","id":55},{"text":"Fixed","hash":"fixed_17","id":56},{"text":"Changed","hash":"changed_7","id":57},{"text":"v0.4.2","hash":"v0_4_2","id":58},{"text":"Added","hash":"added_10","id":59},{"text":"Fixed","hash":"fixed_18","id":60},{"text":"v0.4.1","hash":"v0_4_1","id":61},{"text":"Highlights","hash":"highlights_2","id":62},{"text":"Configuration option deprecation","hash":"configuration_option_deprecation","id":63},{"text":"Network selection","hash":"network_selection","id":64},{"text":"Gateway proxy","hash":"gateway_proxy","id":65},{"text":"Configuration file","hash":"configuration_file","id":66},{"text":"Changed","hash":"changed_8","id":67},{"text":"Fixed","hash":"fixed_19","id":68},{"text":"Added","hash":"added_11","id":69},{"text":"v0.4.0- (breaking release)","hash":"v0_4_0_breaking_release","id":70},{"text":"Default RPC version change","hash":"default_rpc_version_change","id":71},{"text":"Starknet v0.10.2 support","hash":"starknet_v0_10_2_support","id":72}]},"40":{"id":40,"text":"You can subscribe to get the latest version updates delivered to your inbox at Starknet Roadmap & version updates. For information on the current version of Starknet, see the Starknet release notes.","title":"Upcoming Starknet versions","component":"ROOT","version":"","name":"upcoming-versions","url":"/starknet-versions/upcoming-versions/","titles":[{"text":"Roadmap and version updates","hash":"what_to_expect","id":1}]},"41":{"id":41,"text":"The following release notes cover the ongoing version changes to Starknet. You can subscribe to get the latest version updates delivered to your inbox at Starknet Roadmap & version updates. Within Starknet’s deployment pipeline, there are separate and distinct networks that operate independently of each other for testing before deployment. Sepolia testnet replaces Goerli testnet. Goerli testnet support is now removed. For more information, including bridge support for Sepolia, see Starknet Goerli Deprecation in the Starknet Dev News newsletter. Table 1. Current versions supported in each environment Environment Starknet version Sierra version Cairo version Mainnet 0.13.2 1.6.0 2.0.0 - 2.8.2 Sepolia Testnet 0.13.2 1.6.0 2.0.0 - 2.8.2 Optimistic parallelization in the sequencer. Applicative recursion (\"blockpacking\"): pack a contiguous sequence of blocks into a single L1 state update, instead of just one block. This change also affects the Starknet core contract on L1 and the structure of data availability: The contract will store also the hash of the \"aggregator\" program, alongside the hash of the Starknet OS. The LogStateUpdate event will be emitted once for every sequence of blocks in an applicative tree, rather than for every block. The data posted on L1 is now the output of the aggregator, instead of the OS. The OsOutputHeader struct will contain four new fields: prev_block_number, prev_block_hash, os_program_hash, full_output. New block hash definition: see the reference implementation here. All objects containing the block hash will use the new block hash computation. Receipts will contain a new property total_gas_consumed, only for transactions after v0.13.2. Three new builtins can appear in the builtin_instance_counter property of execution_resources in the transaction receipts: add_mod, mul_mod and range_check96. End support for the endpoints get_block_traces and get_transaction_trace. No changes in v0.13.2. The new JSON RPC version v0.8.0 will be released alongside Starknet v0.13.3. A new compiler version will be released for v0.13.2, Cairo v2.7.0. This includes a Sierra upgrade to v1.6.0, i.e. contracts compiled with the new compiler will only be accepted on Starknet v0.13.2 onwards. The Starknet-related features that will be added in this Cairo version include: sha256 syscall - syscall for computing sha256 on an arbitrary length input: High level code for using sha256/ Syscall cost - the dominant part of the syscall is ~1.1k bitwise builtin applications which today costs ~180 L1 gas (the 2k steps are negligible in comparison). The syscall is applied once for ~14 u32. Circuit builtin - the new compiler version will introduce a way to define ad-hoc algebraic circuits in Cairo. Circuits use the new mul_mod and add_mod builtins under the hood. Example usage can be found in circuit_test.cairo. Errors prettifying: execution errors are becoming more structured, which will be the basis for better error handling in the next JSON RPC version, resulting in nice error displays by wallets. Community Forum Posts: Starknet v0.13.2 pre-release notes Optimistic parallelization revived Upcoming Feature: Starknet Applicative Recursion Cairo v2.7.0 is coming! In response to community feedback, Starknet 0.13.1.1 reduces class declaration fees and increases the calldata limit: Resource Gas cost (0.13.1) Gas cost (0.13.1.1) CASM bytecode 28 gas/felt 1 gas/felt Sierra bytecode 28 gas/felt 1 gas/felt ABI 0.875 gas/character 0.032 gas/character Entity Limit (0.13.1) Limit (0.13.1.1) Calldata length (felts) 4,000 5,000 Cheaper data availability (DA): Starknet uses EIP-4844. State diffs are now blobs, rather than calldata, requiring the addition of data_gas to the Starknet block header. Time-related syscalls when called from an account contract’s __validate__, __validate_deploy__, __validate_declare__, or constructor function: block_timestamp returns the hour, rounded down. block_number returns the block number, rounded down to the nearest multiple of 100. Optimization: Load into memory only the functions in a contract that are actually used when generating the proof. The block header includes the following new fields: l1_da_mode: A string enum that takes the value CALLDATA or BLOB, and indicates whether EIP-4844 is the data availability solution that is used for the block. Also appears in pending block. l1_data_gas_price: Contains price_in_wei and price_in_fri, where 1 fri is 10-18 STRK. Also appears in pending block. l1_gas_price: Replaces eth_l1_gas_price and strk_l1_gas_price. Contains the data gas price (EIP-4844) in addition to the regular gas price. Starknet 0.13.1 is backward compatible with starknet_api_openrpc.json v0.6.0. Responses from 0.13.1 can be mapped naturally into v0.6.0 objects. A new version of starknet_api_openrpc.json, 0.7.0, accommodates the changes introduced by Starknet using EIP-4844. BLOCK_HEADER includes two new fields to support EIP-4844: l1_data_gas_price: contains price_in_wei and price_in_fri (10-18 denominations, similar to v0.6.0). l1_da_mode: An enum that indicates whether this block will use calldata or blobdata and can take the following values: CALLDATA BLOB FEE_ESTIMATE Includes two new fields: data_gas_consumed data_gas_price overall_fee is now: gas_consumed × gas_price + data_gas_consumed × data_gas_price Fee estimates will change depending on the data availability solution used by current Starknet blocks. For example, if you estimate the fee against the pending block, and it’s currently using CALLDATA, then nodes are expected to return data_gas_consumed=0 and compute the fee similarly to today, that is, get higher estimates. Receipts and traces now include data availability resources COMMON_RECEIPT_PROPERTIES, the main receipt object, now includes a new entry: execution_resources. The EXECUTION_RESOURCES object now includes the field data_availability. Note that the resources of internal calls will remain the same/ For more information, see the PR for the API JSON RPC specs EXECUTION_RESOURCES Computation resources are separated from data availability resources. This is done by introducing the data_availability property, which includes l1_gas and l1_data_gas, which were consumed due to DA requirements. One of these will always be zero, depending on whether or not the block uses calldata or blobs, as specified by the l1_da_mode field in the block header. Syscall costs are now included in the execution resources of traces and receipts. These are costs that are already being paid for but were not reported so far. A Cairo step now costs 0.0025 gas/step, a 50% reduction. All builtins costs are accordingly reduced by 50%. Each felt in the calldata and signature arrays of all transaction types now costs 0.128 gas/felt. Each felt of a sierra_program in the contract class and of bytecode in the compiled contract class now costs 28 gas/felt. v1 DECLARE transactions only include bytecode. Each character in the ABI costs 0.875 gas. An additional felt to the data array of an event now costs 0.128 gas/felt, similar to calldata. An additional felt to the keys array now costs 0.256 gas/felt. Starknet now supports multiple L1 providers. Community Forum Posts: Starknet v0.13.1: EIP4844 Support, More Fee Reductions, Stability, Quality of Life Starknet v0.13.1: Fee Reduction Data availability with EIP4844 Starknet v0.13.1 pre-release notes Starknet v0.13.0 is live on Mainnet. Starknet 0.13.0 includes the following changes: v3 transactions, including: Fee payment in STRK Reserved fields for future features, such as Volition and payment master get_block API: The gas_price field is replaced by the eth_l1_gas_price and strk_l1_gas_price fields. This change applies also to existing blocks. For more information on the new fields, see the JSON RPC API Spec on GitHub Sierra v1.4.0. This new version of Sierra is part of Crate v2.4.0, in the Cairo 2.4.0 package. For more information, see Cairo v2.4.0 is out! on the Community forum. Improved performance of secp256k1_mul and secp256r1_mul syscalls Computation cost is reduced by approximately 50% as a result of reduced Cairo steps and increased use of builtins. L1 data availability cost is reduced by approximately 10%-25%. For an ERC-20 transfer, the DA fee reduction is 25%. Starknet v0.12.3 is live on Mainnet. This release partially removes support for the Starknet feeder gateway. For details, see Feeder Gateway Deprecation in Development Proposals on the Starknet community forum. Additionally, this version includes the following changes: Performance optimizations in the gateway, the computation of the Patricia storage root, and block hash Support for secp256r1 syscalls in the Starknet OS. Restriction for __validate__ and the constructor of DeployAccount transactions: Restrict access to sequencer_address in the get_execution_info syscall by returning 0's for the address. Restrict access to the following syscalls: Cairo contracts: get_block_hash Cairo 0 contracts: get_sequencer_address This version is available on both Goerli and Sepolia testnets. Move structs that are common to secp256k1 and secp256r1 to a separate file. Starknet v0.12.2 is live on Mainnet. This version includes the following changes: Enabling P2P Authentication: An additional endpoint in the sequencer gateway to provide a signature on the state diff commitment and block hash. Resolving Mismatches in Queries: An extension to the get_state_update endpoint in the sequencer gateway that returns both the pending state diff and the pending block together. Increased maximum Cairo steps per transaction from 1 million to 3 million. Starknet v0.12.1 is live on Mainnet. This version includes the following changes: Mempool Validation. Inclusion of Failed Transactions. Keccak builtin. Starknet v0.12.0 is live on Mainnet. This version contains the following changes: Use the rust blockifier and LambdaClass’s Cairo VM to accelerate the sequencer’s time to handle transactions. Support version 2.0.0 of the Cairo compiler. Replace the PENDING status of transactions to ACCEPTED_ON_L2 - once a transaction is in that status it means that it will be included in a block, this applies to transactions - blocks still have the PENDING status. Add an experimental get_block_hash syscall. Change HTTP error code from 500 to 400 on API errors. Starknet v0.11.2 is live on Mainnet. This version contains the following changes: Upgrade Cairo 1.0 version to v1.0.0-rc0 (Cairo 1.0 activated on Starknet!) Starknet v0.11.1 is live on Mainnet. This version contains the following changes: Upgrade Cairo 1.0 version to v1.0.0-rc0. Charged transaction fee is now based on an average Ethereum gas price instead of a single sample (estimation API is unaffected). API changes: Remove the state root in get_state_update for pending blocks to allow faster responses in future versions. Testing framework: Allow declaring (and interacting with) Cairo 1.0 contracts. Currently, the Cairo 1.0 ABI is not supported yet, so a Cairo 0 ABI should be supplied to declare() manually. Split deploy() to two phases declare and deploy: deprecated_declare() (for Cairo 0 contract) or declare() (for Cairo 1.0 contracts) and deploy() (for both). Add current block hash to the Starknet Core Contract (currently not verified by the Starknet OS): Breaking change: The LogStateUpdate event’s data is changed to include blockHash. Starknet v0.11.0 is live on Mainnet. invoke and declare transactions of version 0 are no longer supported on this version. In Starknet v0.11.0, you can declare, deploy and run Cairo 1.0 smart contracts. We also introduce a new system call that allows a smooth transitioning of existing contracts to a Cairo 1.0 implementation. Historically, contract classes have been defined in terms of Cairo assembly, or Casm for short (the class definition also included more information needed for execution, e.g., hint data). The novelty of Cairo 1.0 is the introduction of Sierra (Safe Intermediate Representation), an intermediate layer between Cairo 1.0 and Casm. The introduction of Cairo 1.0 and Sierra has several effects on the system. Below we list the effects on each component; of particular note are: A new version of the declare transaction, which allows sending the new class structure The state commitment will now include contract classes Changes to the onchain data format New system call - replace_class The deploy transaction is no longer supported on this version. This version contains the following changes: Starknet Performance - Separate the state commitment computation from the execution of the transactions Add starknet-class-hash command to compute the class hash of a compiled Starknet contract Cairo: Autoformatter: Automatically break lines inside expressions This version introduces sequencer parallelization! This is the first step in our roadmap of performance upgrades. Details about the specific mechanism of parallelization and the roadmap in general are described in this medium post. A new endpoint, estimate_fee_bulk, is added to the feeder gateway. This will allow estimating the fee of several transactions at once, where each transaction is executed relative to the resulting state from applying the previous one. Sequencing performance improvements Builtin ratio changes, which affects builtin costs Add estimate_fee_bulk API that computes the fee of multiple transactions that will be executed consecutively As part of this version, we will also increase the finality of transactions in the pending block, by fixing the timestamp at the time of the block creation. This will solve the issue of transactions moving from pending to rejected on account of too old timestamp This version contains the following changes: Starknet: Add DeployAccount transaction (which will replace the Deploy transaction for deploying account contracts). To use it, you should first add enough funds to your account address to pay the transaction fee, and then you can invoke DeployAccount Split the starknet deploy_account CLI command into starknet new_account and starknet deploy_account Account contracts that are expected to be deployed this way should implement the`validate_deploy()` entry point, which should check the signature of the DeployAccount transaction Improve L1 fee computation: the fee is computed according to the diff of the storage state API: Remove entry_point_type field from transaction information Cairo: Add uint256_mul_div_mod to uint256.cairo This version introduces the next step in Starknet’s account abstraction design, specifically the validate/execute separation. See here for more information. This version contains the following changes: Starknet: Contract (breaking changes): @external and @view functions should be imported directly by the main compiled file. Otherwise, they will not be usable as external functions Forbid using the same storage variable name in two modules New transaction version (version 1) for invoke and declare transactions: Transactions of version 0 are deprecated and will not be supported in Starknet from the next version (v0.11.0). Please update your systems to use the new version In order to use transactions of version 1 you will need to upgrade your account contracts Add nonce field to the transactions. Nonce validation is now part of the Starknet protocol and is enforced to be executed sequentially Invoke: Split execute to two functions:` validate` (only validates the transaction) and execute (only executes the transaction) Remove the selector (which is now always execute) field, following the above change. Declare: declare transaction should now be sent from an account (and is validated using validate_declare in the account contract) Support fee for sending L1 messages. At this point, it’s not mandatory and messages with no fee will still be handled. Starting from the next version it will become mandatory. Cairo: Syntax changes in Cairo (to make it more similar to rust and C++): You can use the cairo-migrate script to convert old code to the new syntax. Use the -i flag to apply the changes to the files End statements with ; New lines are still part of the language at this point, and you cannot put more than one instruction per line. This will change in Cairo1.0. Use { … } for code blocks (instead of : and end) Add () around the condition of if statements Remove the member keyword in structs Change comment to use // instead of # Use …​, ap` instead of `...; ap in low level Cairo code Support return types that are not tuples. For example, func foo() → felt (instead of func foo() → (r: felt)) As a result, it’s now mandatory to specify return types. func foo() → (res) should be replaced by func foo() → (res: felt). The cairo-migrate tool does that automatically. Return statement accepts expressions, rather than only tuples. For example, you can write let x = (5,); return x; A few standard library functions were changed to return felt. The cairo-migrate script also fixes calls to those functions Support using functions as expressions This only applies to functions with → felt signature`, whose ap change is known at compile-time (e.g., recursive functions cannot be used this way) Fix a bug in the secp signature verification code that allowed a malicious prover to ignore the value of v (this does not let the prover fake a signature, but allows it to claim that a valid signature is invalid). Add Cairo code for the recursive STARK verifier Technical changes: * Move from python3.7 to python3.9 This version contains the following changes: Starknet: API changes: Add get_block_traces API - returns all the transaction traces of a given block Add a list of declared contracts in get_state_update Add a 0x prefix for class hash in the API Add starknet_version field for blocks (only applies to new blocks) Starknet CLI: Change the default block number to pending Using a wallet is the default, --no_wallet must be specified explicitly to override this Deploying contracts: Add deploy_contract function to the account contract created by starknet deploy_account Use this function to deploy contract (unless using --no_wallet). In particular, deploy should be used after declaring the contract (it expects the contract class hash) Support --dry_run to get the transaction information without signing or sending it Support deploy_from_zero in the deploy syscall to deploy a contract to an address that does not depend on the deployer Cairo: * Support and in if statements (if x == y and z == w). At the moment other boolean combinations are not supported This version introduces the contract class/instance paradigm into Starknet. See here for more information. This version contains the following changes: Starknet: Enforce fees - max_fee must not be set to zero, and selector must be execute Split the concepts of contract class and contract instance. Add declare transaction type New API and CLI commands: declare - Declares a contract class get_class_by_hash - Returns the contract class given its hash get_class_hash_at - Returns the class hash for a given contract instance address Rename delegate_call to library_call, and change the contract address argument to class hash. Add a deploy system call. Rename ContractDefinition to ContractClass Reduce the compiled contract file’s size by removing unnecessary identifiers (this optimization can be disabled using --dont_filter_identifiers) Cairo: Initial support for the EC-op builtin (scalar multiplication over the STARK curve). Not supported in Starknet yet. Add additional helper methods to blake2s.cairo, including big-endian support Technical changes: * Change function’s return type from a struct to a named tuple. In particular, foo.Return.SIZE is no longer supported.","title":"Starknet release notes","component":"ROOT","version":"","name":"version-notes","url":"/starknet-versions/version-notes/","titles":[{"text":"Starknet environments","hash":"starknet_environments","id":1},{"text":"Starknet v0.13.2 (August 28, 24)","hash":"version0.13.2","id":2},{"text":"New features and enhancements","hash":"new_features_and_enhancements","id":3},{"text":"API changes","hash":"api_changes","id":4},{"text":"Feeder gateway","hash":"feeder_gateway","id":5},{"text":"JSON RPC","hash":"json_rpc","id":6},{"text":"Cairo","hash":"cairo","id":7},{"text":"Others","hash":"others","id":8},{"text":"Additional resources","hash":"additional_resources","id":9},{"text":"Starknet v0.13.1.1 (April 15, 24)","hash":"version0.13.1.1","id":10},{"text":"Starknet v0.13.1 (March 13, 24)","hash":"version0.13.1","id":11},{"text":"New features and enhancements","hash":"new_features_and_enhancements_2","id":12},{"text":"Block header updates","hash":"block_header_updates","id":13},{"text":"API: JSON RPC","hash":"api_json_rpc","id":14},{"text":"Starknet API JSON RPC 0.6.0","hash":"starknet_api_json_rpc_0_6_0","id":15},{"text":"Starknet API JSON RPC 0.7.0","hash":"starknet_api_json_rpc_0_7_0","id":16},{"text":"Pricing changes","hash":"pricing_changes","id":17},{"text":"Computation","hash":"computation","id":18},{"text":"Calldata and signatures","hash":"calldata_and_signatures","id":19},{"text":"Class declaration","hash":"class_declaration","id":20},{"text":"Events","hash":"events","id":21},{"text":"Infrastructure updates","hash":"infrastructure_updates","id":22},{"text":"Additional resources","hash":"additional_resources_2","id":23},{"text":"Starknet v0.13.0 (Jan 10, 24)","hash":"version0.13.0","id":24},{"text":"Starknet v0.12.3 (Nov 19, 23)","hash":"version0.12.3","id":25},{"text":"Cairo 0","hash":"cairo_0","id":26},{"text":"Starknet v0.12.2 (Sep 04, 23)","hash":"version0.12.2","id":27},{"text":"Starknet v0.12.1 (Aug 21, 23)","hash":"version0.12.1","id":28},{"text":"Starknet v0.12.0 (July 12, 23)","hash":"version0.12.0","id":29},{"text":"Starknet v0.11.2 (May 31, 23)","hash":"version0.11.2","id":30},{"text":"Starknet v0.11.1 (May 23, 23)","hash":"version0.11.1","id":31},{"text":"Starknet v0.11.0 (Mar 29, 23)","hash":"version0.11.0","id":32},{"text":"Starknet v0.10.3 (Dec 12, 22)","hash":"version0.10.3","id":33},{"text":"Starknet v0.10.2 (Nov 29, 22)","hash":"version0.10.2","id":34},{"text":"Starknet v0.10.1 (Oct 25, 22)","hash":"version0.10.1","id":35},{"text":"Starknet v0.10.0 (Sept 05, 22)","hash":"version0.10.0","id":36},{"text":"Starknet v0.9.1 (July 20, 22)","hash":"version0.9.1","id":37},{"text":"Starknet v0.9.0 (June 06, 22)","hash":"version0.9.0","id":38}]},"42":{"id":42,"text":"A list of recommended full-nodes, open API endpoints, and API providers. For complete information on the Starknet Node API in JSON RPC format, see starknet_api_openrpc.json on GitHub. Table 1. API providers Provider Open API endpoint, where relevant Version support, where relevant Alchemy Starknet API FAQ All That Node Blast API https://blastapi.io/public-api/starknet Starknet Public API - Blast API BlockPI https://starknet.blockpi.network/v1/rpc/public Chainbase Chainstack Getting started > Starknet JSON-RPC version endpoints DRPC https://drpc.org/public-endpoints/starknet Dwellir https://www.dwellir.com/networks/starknet GetBlock Use the /rpc/vX_Y suffix, as explained in JSON-RPC API in Pathfinder’s README. Infura Lava Protocol https://www.lavanet.xyz/get-started/starknet Use the /rpc/vX_Y suffix, as explained in JSON-RPC API in Pathfinder’s README. Nethermind https://data.voyager.online RPC spec versions NOWNodes OMNIA QuickNode Supporting Multiple Versions Reddio Zan Table 2. Node providers Provider name Description More information Deoxys A Starknet full-node written in Rust and powered by Substrate by Kasar github.com/kasarlabs/deoxys Juno A Starknet full-node written in go-lang by Nethermind. You can use the Juno Node runner on AWS. github.com/NethermindEth/juno Papyrus A Starknet full-node written in Rust by StarkWare github.com/starkware-libs/papyrus Pathfinder A Starknet full-node written in Rust by Equilibrium github.com/eqlabs/pathfinder","title":"Full nodes and API services","component":"ROOT","version":"","name":"api-services","url":"/tools/api-services/","titles":[]},"43":{"id":43,"text":"Building a Starknet project and want your contract to be audited? The companies listed below have designated teams that provide auditing services to Starknet contracts. Table 1. A list of companies providing contract audits for Starknet Company name URL ABDK www.abdk.consulting Beosin beosin.com Chain Security chainsecurity.com Consensys Diligence consensys.net/diligence Extropy security.extropy.io Nethermind nethermind.io Open Zeppelin www.openzeppelin.com OtterSec osec.io PeckShield peckshield.com Trail of Bits www.trailofbits.com Zellic www.zellic.io Ginger Security gingersec.xyz","title":"Audit providers","component":"ROOT","version":"","name":"audit","url":"/tools/audit/","titles":[]},"44":{"id":44,"text":"The tokens that are currently bridged to Starknet, including their L1 and L2 addresses, are listed in the following .json files: mainnet.json The addresses of the tokens currently bridged to Starknet Mainnet. sepolia.json The addresses of the tokens currently bridged to Starknet Sepolia testnet. Each token has the following parameters: name Token name. symbol Token symbol. decimals Number of decimal places used to get the user representation. l1_token_address Address of the L1 ERC-20 contract. l2_token_address Address of the L2 ERC-20 contract. l1_bridge_address Address of the L1 bridge contract. l2_bridge_address Address of the L2 bridge contract.","title":"Bridged tokens and addresses","component":"ROOT","version":"","name":"bridged-tokens","url":"/tools/bridged-tokens/","titles":[]},"45":{"id":45,"text":"Following Maker DAO’s announcement on Jan 25th, StarkWare launched a new DAI contract and bridge on Starknet. The new DAI token and bridge are a part of StarkGate and compatible with StarkGate 2.0 features. You can withdraw old DAI tokens (DAI v0) without any limitation. Depositing using the DAI v0 bridge are disabled. You are encouraged to migrate to the new DAI token. You can use swap services on Starknet to swap DAI v0 for DAI. Maker DAO’s DAI token on Starknet is written in Cairo0 and is not upgradeable. Without upgradability, it cannot support StarkGate’s latest features, such as Smart Deposits and Withdrawal Limits, and over time it will stop being compatible with Starknet altogether (Regenesis). This means that a transition plan is necessary. On January 25th, StarkWare launched a new set of DAI bridge and token contracts under StarkGate, written in Cairo. This new DAI token will retain the same contract ’symbol’ and ’name’ as the existing one. To differentiate between the two on Apps and other UIs, we refer to the old DAI as “DAI v0” and the new DAI simply as “DAI.” Procedure Use one of the following methods: Swap your DAI v0 for DAI using an L2 swap app or aggregator within the Starknet ecosystem, such as the following: LayerSwap Ekubo AVNU Fibrous JediSwap Haiko Nostra StarkDeFi Use StarkGate: Withdraw your current DAI (DAI v0) to L1 using StarkGate Re-deposit your L1 DAI using StarkGate. StarkGate automatically issues the new DAI.","title":"Migrating DAI v0 to DAI","component":"ROOT","version":"","name":"dai-token-migration","url":"/tools/dai-token-migration/","titles":[]},"46":{"id":46,"text":"Sepolia testnet replaces Goerli testnet. Goerli testnet support is now removed. For more information, including bridge support for Sepolia, see Starknet Goerli Deprecation in the Starknet Dev News newsletter. The Starknet Core Contract 0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4 Verifier address 0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60 Sequencer base URL for API routing https://alpha-mainnet.starknet.io The Starknet Core Contract 0xE2Bb56ee936fd6433DC0F6e7e3b8365C906AA057 Verifier address 0x07ec0D28e50322Eb0C159B9090ecF3aeA8346DFe Sequencer base URL for API routing https://alpha-sepolia.starknet.io The Starknet fee tokens are STRK and ETH. L2 STRK address (Mainnet and testnet) 0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d L2 ETH address (Mainnet and testnet) 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 The Starknet voting token is vSTRK. For information on vSTRK, see vSTRK overview on the Starknet Governance Hub. Mainnet address 0x0782f0ddca11d9950bc3220e35ac82cf868778edb67a5e58b39838544bc4cd0f Sepolia testnet address 0x035c332b8de00874e702b4831c84b22281fb3246f714475496d74e644f35d492","title":"Starknet contract and sequencer addresses","component":"ROOT","version":"","name":"important-addresses","url":"/tools/important-addresses/","titles":[{"text":"Starknet on Mainnet","hash":"starknet_on_mainnet","id":1},{"text":"Starknet version on Sepolia testnet","hash":"starknet_version_on_sepolia_testnet","id":2},{"text":"Starknet fee tokens","hash":"starknet_fee_tokens","id":3},{"text":"Starknet voting token","hash":"starknet_voting_token","id":4}]},"47":{"id":47,"text":"Starknet currently has a number of limits in place in order to keep the network stable and optimized for the best performance. Blockifier-related constants and limits are defined, for each Starknet version starting from v0.13.0, in a JSON file called versioned_constants in this directory. These are subject to revisions and change on a regular basis Sepolia testnet replaces Goerli testnet. Goerli testnet support is now removed. For more information, including bridge support for Sepolia, see Starknet Goerli Deprecation in the Starknet Dev News newsletter. Table 1. Starknet’s current limits Entity Description Sepolia Mainnet Block time The maximum amount of time within which a pending block is closed, if no other limit is met. 30 seconds 30 seconds Block limit (Cairo steps) The maximum number of Cairo steps that can be completed within each block to ensure block production times remain consistent and predictable. 40,000,000 40,000,000 Block limit (gas) Certain Starknet operations, such as sending messages between L1 and L2, consume Ethereum gas. The current L1 state update mechanism involves an Ethereum transaction for each Starknet block. The gas limit for Starknet blocks is therefore inherited from the gas limit for Ethereum blocks. 5,000,000 5,000,000 Max transaction size (Cairo steps) The maximum number of computational steps, measured in Cairo steps, that a transaction can contain when processed on the Starknet network. This limit is important for ensuring the efficient execution of transactions and preventing potential congestion. 10,000,000 10,000,000 Max number of events per transaction The maximum number of events that a transaction can emit during its execution. 1,000 1,000 Max number of data felts per event The maximum number of felts that an event can contain in its data array. 300 300 Max number of key felts per event The maximum number of felts that an event can contain in its keys array. 50 50 Max Cairo steps for validate The maximum number of computational steps, measured in Cairo steps, for a validate function. 1,000,000 1,000,000 Max contract bytecode size (Number of felts in the program) The maximum size of the bytecode or program that a smart contract can have on Starknet. Bytecode is the low-level code that comprises smart contracts. Limiting this size helps manage the complexity of contracts and the overall efficiency of the network. 81,290 81,290 Max contract class size The maximum size for a contract class within Starknet. Contract classes are a fundamental building block for smart contracts, and limiting their size can have implications for the network’s scalability and security. 4,089,446 bytes 4,089,446 bytes IP address limits (read/write) In order to reduce network spam, Starknet limits the amount of contract reads and writes that a single IP address can make. 200 per min per IP address 200 per min per IP address Signature length (felts) 4,000 4,000 Calldata length (felts) 4,000 4,000","title":"Current limits","component":"ROOT","version":"","name":"limits-and-triggers","url":"/tools/limits-and-triggers/","titles":[]},"48":{"id":48,"text":"A block explorer, or blockchain explorer, enables you to see transactions, blockchain metrics and other information. The following block explorers provide information on Starknet. Table 1. Starknet block explorers, in alphabetical order Block explorer name URL Starkscan https://starkscan.co ViewBlock https://viewblock.io/starknet Voyager https://voyager.online oklink https://www.oklink.com/starknet NFTScan (NFT explorer) https://starknet.nftscan.com/","title":"Block explorers","component":"ROOT","version":"","name":"ref-block-explorers","url":"/tools/ref-block-explorers/","titles":[]},"49":{"id":49,"text":"The Starknet Book serves as a comprehensive guide to understanding Starknet, Cairo, and introduces you to the Starknet ecosystem. The Starknet Book caters to various objectives and interests. Mix and match these chapters to customize your learning experience based on your unique interests and requirements. Whether you’re exploring smart contract development, frontend integration, or learning about the core architecture, The Starknet Book is your trusted companion on the journey of deepening your understanding of Starknet. Chapter Description Chapter 1 Introduction to Starknet and Cairo How to quickly get started with Starknet and Cairo development. Chapter 2 Starknet tooling An overview of the available tooling for Starknet. Chapter 3 Starknet architecture Learn how Starknet works under the hood. Learn how sequencer, prover and nodes interact. chapter 4 Account abstraction Account abstraction is one of the main usability features of Starknet. Learn how this works and how you can utilize it.","title":"About the Starknet Book","component":"ROOT","version":"","name":"starknet-book","url":"/tools/starknet-book/","titles":[{"text":"Table of Contents","hash":"table_of_contents","id":1}]},"50":{"id":50,"text":"All hashes outputs are eventually mapped to elements in \\(\\mathbb{F}_P\\), where \\(P=2^{251}+17\\cdot 2^{192}+1\\). There are three hash functions used throughout Starknet’s specifications: \\(\\text{sn_keccak}: \\{0,1\\}^* \\rightarrow \\mathbb{F}_P\\) \\(\\text{pedersen}: \\mathbb{F}_P^2\\rightarrow\\mathbb{F}_P\\) \\(\\text{poseidon}: \\mathbb{F}_P^*\\rightarrow \\mathbb{F}_P\\) Starknet Keccak, usually denoted by \\(\\text{sn_keccak}\\), is defined as the first 250 bits of the Keccak256 hash. For Starknet Keccak, Keccak256 is augmented in order to fit into a field element. Pedersen hash makes use of the following STARK friendly elliptic curve over \\(\\mathbb{F}_P\\): \\[y^2=x^3+\\alpha x +\\beta\\] where \\(\\alpha=1\\) \\(\\beta = 3141592653589793238462643383279502884197169399375105820974944592307816406665\\) Given an input \\((a,b)\\in\\mathbb{F}_P^2\\), we begin by breaking it into \\(a_{low}, a_{high}, b_{low}, b_{high}\\), where the low part consists of the low 248 bits of the element and the high part consists of the high 4 bits of the element. Our Pedersen hash is then defined by: \\[h(a,b) = \\left[\\text{shift_point} + a_{low} \\cdot P_0 + a_{high} \\cdot P1 + b_{low} \\cdot P2 + b_{high} \\cdot P3\\right]_x\\] where the values of the constants \\(shift\\_point, P_0, P_1, P_2, P_3\\) can be found in fast_pedersen_hash.py, and \\([P]_x\\) denotes the \\(x\\) coordinate of the point \\(P\\). For more information, see STARK curve. Poseidon is a family of hash functions designed to be very efficient as algebraic circuits. As such, they can be very useful in ZK-proving systems such as STARKs. Poseidon is a sponge construction based on the Hades permutation. Starknet’s version of Poseidon is based on a three-element state permutation. A Poseidon hash of up to 2 elements is defined as follows. \\[\\text{poseidon_1}(x) := \\left[\\text{hades_permutation}(x,0,1)\\right]_0\\] \\[\\text{poseidon_2}(x,y) := \\left[\\text{hades_permutation}(x,y,2)\\right]_0\\] Where \\([\\cdot]_j\\) denotes taking the \\(j\\)'th coordinate of a tuple. Additional resources Poseidon hash with an arbitrary number of inputs Parameters for defining the Poseidon permutation used in Starknet Reference implementation in C and assembly of the above by CryptoExperts Let \\(h\\) denote the pedersen hash function, then given an array \\(a_1,...,a_n\\) of \\(n\\) field elements we define \\(h(a_1,...,a_n)\\) to be: \\[h(...h(h(0, a_1),a_2),...,a_n),n)\\] Let \\(\\text{hades}:\\mathbb{F}_P^3\\rightarrow\\mathbb{F}_P^3\\) denote the Hades permutation, with Starknet’s parameters, then given an array \\(a_1,...,a_n\\) of \\(n\\) field elements we define \\(\\text{poseidon}(a_1,...,a_n)\\) to be the first coordinate of \\(H(a_1,...,a_n;0,0,0)\\), where: \\[H(a_1,...,a_n;s_1,s_2,s_3)=\\begin{cases} H\\big(a_3,...,a_n;\\text{hades}(s_1+a_1, s_2+a_2, s_3)\\big), & \\text{if } n\\ge 2 \\\\ \\text{hades}(s_1+a_1,s_2+1,s_3), & \\text{if } n=1 \\\\ \\text{hades}(s_1+1,s_2,s_3), & \\text{if } n=0 \\\\ \\end{cases}\\] For an implementation of the above in Python, see poseidon_hash.py, and for an equivalent Cairo implementation, see poseidon.cairo in the cairo-lang GitHub repository.","title":"Hash functions","component":"ROOT","version":"","name":"hash-functions","url":"/architecture-and-concepts/cryptography/hash-functions/","titles":[{"text":"Domain and range","hash":"domain_and_range","id":1},{"text":"Starknet Keccak","hash":"starknet_keccak","id":2},{"text":"Pedersen hash","hash":"pedersen_hash","id":3},{"text":"Definition","hash":"definition","id":4},{"text":"Poseidon hash","hash":"poseidon_hash","id":5},{"text":"Array hashing","hash":"array_hashing","id":6},{"text":"Pedersen","hash":"pedersen_array_hash","id":7},{"text":"Poseidon","hash":"poseidon_array_hash","id":8}]},"51":{"id":51,"text":"The STARK field is the finite field \\(\\mathbb{F}_P\\), where \\(P\\) is a prime number, calculated as follows: \\[P = 2^{251} + 17*2^{192} + 1\\] The Cairo VM uses the STARK field, referred to as a field element, or felt. The felt252 type in Cairo refers to elements of this field.","title":"The STARK field","component":"ROOT","version":"","name":"p-value","url":"/architecture-and-concepts/cryptography/p-value/","titles":[]},"52":{"id":52,"text":"The STARK curve is an elliptic curve defined as follows: \\[y^2 \\equiv x^3 + \\alpha \\cdot x + \\beta \\pmod{p}\\] where: \\[\\begin{align*} \\alpha &= 1 \\\\ \\beta &= 3141592653589793238462643383279502884197169399375105820974944592307816406665 \\\\ p &= 3618502788666131213697322783095070105623107215331596699973092056135872020481\\\\ &= 2^{251} + 17 \\cdot 2^{192} + 1 \\end{align*}\\] The Generator point used in the ECDSA scheme is: \\[\\begin{split}G = (874739451078007766457464989774322083649278607533249481151382481072868806602, \\\\ 152666792071518830868575557812948353041420400780739481342941381225525861407)\\end{split}\\] The STARK curve is commonly used in smart contracts but not distinguished by the Starknet protocol.","title":"The STARK curve","component":"ROOT","version":"","name":"stark-curve","url":"/architecture-and-concepts/cryptography/stark-curve/","titles":[]},"53":{"id":53,"text":"The functions in the table Starknet account interface functions are part of account contracts. Where required, you must include these functions within your account contract. The logic of these functions can be mostly arbitrary, with a few limitations. For information on these limitations, see Limitations on validation. Table 1. Starknet account interface functions Function name When required __validate__ Always required __execute__ Always required. The signatures of __validate__ and __execute__ must be identical. At the moment of writing (Starknet 0.13.2), two critical validations must happen in __execute__, and their absence can lead to draining of the account’s funds: (1) assert!(get_caller_address().is_zero()) This asserts that the account’s __execute__ is not called from another contract, thus skipping validations (in later versions we may disallow calling execute from another contract at the protocol level) (2) assert!(get_tx_info().unbox().version.into() >= 1_u32) This asserts that the transaction’s version is at least 1, preventing the account from accepting INVOKE v0 transactions. It is critical to explicitly disallow the deprecated v0 transaction type, as v0 transactions assume that the signature verification happens in __execute__, and are thus skipping __validate__ entirely. __validate_declare__ Required for the account to be able to send a DECLARE transaction. This function must receive exactly one argument, which is the class hash of the declared class. __validate_deploy__ Required to allow deploying an instance of the account contract with a DEPLOY_ACCOUNT transaction. The arguments of __validate_deploy__ must be the class hash of the account to be deployed, the salt used for computing the account’s contract address, followed by the constructor arguments. You can only use the __validate_deploy__ function in an account contract to validate the DEPLOY_ACCOUNT transaction for that same contract. That is, this function runs at most once throughout the lifecycle of the account. constructor All contracts have a constructor function. It can be explicitly defined in the contract, or if not explicitly defined, the sequencer uses a default constructor function, which is empty. When the sequencer receives a transaction, it calls the corresponding validation function with the appropriate input from the transaction’s data, as follows: For an INVOKE transaction, the sequencer calls the __validate__ function with the transaction’s calldata as input. The transaction’s calldata will be deserialized to the arguments in the __validate__ function’s signature, it is up to the sender to make sure that the calldata is encoded appropriately according to validate’s signature. After successfully completing validation, the sequencer calls the __execute__ function with the same arguments. For a DEPLOY_ACCOUNT transaction, the sequencer calls the constructor function with the transaction’s constructor_calldata as input (as above, it is expected that the constructor’s calldata successfully desieralizes to the arguments in the constructor signature). After the successful execution of the constructor, the sequencer validates the transaction by calling the __validate_deploy__ function. For a DECLARE transaction, the sequencer validates the transaction by calling the __validate_declare__ function. For more information on the available transaction types and their fields, see Transaction types. For more information on the validation and execution stages, see Transaction lifecycle. Separating the validation and execution stages guarantees payment to sequencers for work completed and protects them from Denial of Service (DoS) attacks. The validation functions have limitations, described below, that are designed to prevent the following DoS attacks on the sequencer: An attacker could cause the sequencer to perform a large amount of work before a transaction fails validation. Two examples of such attacks are: Spamming INVOKE transactions whose __validate__ requires many steps, but eventually fails Spamming DEPLOY_ACCOUNT transactions that are invalid as a result of the constructor or __validate_deploy__ failing. The above attacks are solved by making sure that the validation step is not resource-intensive, e.g. by keeping the maximal number of steps low. However, even if the validation is simple, the following \"mempool pollution\" attack could still be possible: An attacker fills the mempool with transactions that are valid at the time they are sent. The sequencer is ready to execute them, thinking that by the time it includes them in a block, they will still be valid. Shortly after the transactions are sent, the attacker sends one transaction that somehow invalidates all the previous ones and makes sure it’s included in a block, e.g. by offering higher fees for this one transaction. An example of such an attack is having the implementation of __validate__ checks that the value of a storage slot is 1, and the attacker’s transaction later sets it to 0. Restricting validation functions from calling external contracts prevents this attack. The limitations listed here apply to the following validation functions: __validate__, __validate_deploy__, and __validate_declare__. A constructor, when run in a DEPLOY_ACCOUNT transaction. That is, if an account is deployed from an existing class via the deploy syscall, these limitations do not apply. The validation functions have the following limitations: You cannot call functions in external contracts, only in your account contract. This restriction enforces a single storage update being able to invalidate only transactions from a single account. However, be aware that an account can always invalidate its own past transactions by e.g. changing its public key. This limitation implies that the fees you need to pay to invalidate transactions in the mempool are directly proportional to the number of unique accounts whose transactions you want to invalidate. The maximum number of computational steps, measured in Cairo steps, for a validation function is 1,000,000. A builtin can be applied a limited number of times. For specific limits for each builtin, see Current limits. The get_execution_info syscall behaves differently When raised from one of the validate functions: sequencer_address is set to zero block_timestamp returns the time (in UTC), rounded to the most recent hour. block_number returns the block number, rounded down to the nearest multiple of 100. The following syscalls cannot be called: get_block_hash get_sequencer_address (this syscall is only supported for Cairo 0 contracts). When the __validate__, __validate_deploy__, or __validate_declare__, function fails, the account in question does not pay any fee, and the transaction’s status is REJECTED. A transaction has the status REVERTED when the __execute__ function fails. A reverted transaction is included in a block, and the sequencer is eligible to charge a fee for the work done up to the point of failure, similar to Ethereum. Thanks to account abstraction, the logic of __execute__ and the different validation functions is up to the party implementing the account. To see a concrete implementation, see OpenZeppelin’s account component. This implementation adheres to SNIP6, which defines a standard for account interfaces.","title":"Account interface function reference","component":"ROOT","version":"","name":"account-functions","url":"/architecture-and-concepts/accounts/account-functions/","titles":[{"text":"Overview","hash":"overview","id":1},{"text":"Potential DoS","hash":"attacks_that_validation_limitations_prevent","id":2},{"text":"Limitations on validation","hash":"limitations_of_validation","id":3},{"text":"Invalid transactions","hash":"invalid_transactions","id":4},{"text":"Reverted transactions","hash":"reverted_transactions","id":5},{"text":"Implementation reference","hash":"implementation_reference","id":6}]},"54":{"id":54,"text":"Starknet’s account structure is inspired by Ethereum’s EIP-4337, where instead of EOAs, you use smart contract accounts with arbitrary verification logic. While not mandatory at the protocol level, you can use a richer standard interface for accounts, defined in Starknet Improvement Proposal #6 (SNIP-6). SNIP-6 was developed by community members at OpenZeppelin, in close collaboration with wallet teams and other Core Starknet developers. A valid account contract includes specific functions, depending on the type of the contract. For more information, see Account interface function reference. In Starknet, similar to Ethereum, every contract has a nonce, including an account contract. This nonce is sequential. The nonce of a transaction sent from an account must match the nonce of that account. After the transaction is executed, whether or not it is reverted, the nonce is incremented by one. In Starknet, only the nonce of account contracts, that is, those adhering to the above structure, can be non-zero. In contrast, in Ethereum, regular smart contracts, known as Contract Accounts, as opposed to Externally Owned Accounts can increment their nonce by deploying smart contracts, that is, executing the CREATE and CREATE2 opcodes. For more information on accounts in Ethereum, see Ethereum Accounts in the Ethereum documentation. A nonce serves two important roles: It guarantees transaction hash uniqueness, which is important for a good user experience. It provides replay protection to the account: Because the signature is bound to a particular nonce, a malicious party cannot replay the transaction. Starknet currently determines the nonce structure at the protocol level to be sequential. In the future, Starknet will consider a more flexible design, extending account abstraction to nonce management, previously referred to as nonce abstraction.","title":"Starknet’s account interface","component":"ROOT","version":"","name":"approach","url":"/architecture-and-concepts/accounts/approach/","titles":[{"text":"Account functions","hash":"account_functions","id":1},{"text":"Replay protection","hash":"replay_protection","id":2}]},"55":{"id":55,"text":"You can deploy a new account in the following ways: Send a DEPLOY_ACCOUNT transaction. This method does not require a preexisting account. Using the Universal Deployer Contract (UDC). This method requires an existing account to send the INVOKE transaction. Upon receiving one of these transactions, the sequencer performs the following steps: Runs the respective validation function in the contract, as follows: When deploying with the DEPLOY_ACCOUNT transaction type, the sequencer executes the __validate_deploy__ function in the deployed contract. When deploying using the UDC, the sequencer executes the __validate__ function in the contract of the sender’s address. Executes the constructor with the given arguments. Charges fees from the new account address. If you use a DEPLOY_ACCOUNT transaction, the fees are paid from the address of the deployed account. If you use the UDC, which requires an INVOKE transaction, the fees are paid from the sender’s account. For information on the differences between V1 and V3 INVOKE transactions, see INVOKE transaction in Transaction types. Sets the account’s nonce as follows: 1, when deployed with a DEPLOY_ACCOUNT transaction 0, when deployed with the UDC Starkli simplifies account creation, whether you create an account as a Starknet wallet account, or using the UDC. To create and deploy a new account, use Starkli’s starkli account command. For more information on creating a new account as a Starknet wallet account with a DEPLOY_ACCOUNT transaction, or by using the UDC with an INVOKE transaction , see Accounts in the Starkli Book. The constructor of the DEPLOY_ACCOUNT transaction has the following limitations: Restricted access to sequencer_address in the get_execution_info syscall. The syscall returns zero values for sequencer_address Restricted access to the following syscalls: get_block_hash for Cairo contracts get_sequencer_address for Cairo 0 contracts Accounts in the Starkli Book Universal Deployer Contract (UDC) Transaction types","title":"Deploying a new account","component":"ROOT","version":"","name":"deploying-new-accounts","url":"/architecture-and-concepts/accounts/deploying-new-accounts/","titles":[{"text":"Deploying a new account with Starkli","hash":"deploying_a_new_account_with_starkli","id":1},{"text":"DEPLOY_ACCOUNT constructor restrictions","hash":"DEPLOY_ACCOUNT_restrictions","id":2},{"text":"Additional resources","hash":"additional_resources","id":3}]},"56":{"id":56,"text":"An account represents a user onchain, and enables that user to interact with the blockchain. Through an account, you can send transactions and interact with other contracts. In order for you to own an onchain asset, such as an ERC-20 token or an NFT, that asset must be associated with your account address. Within Ethereum individual user accounts are known as Externally Owned Accounts (EOAs). EOAs differ from smart contracts in that EOAs are not controlled by code, but rather by a pair of private and public keys. The account’s address is derived from those keys and only by possessing the private key can you initiate transactions from an account. While Ethereum contracts are passive, that is, they can only change if they were called inside a transaction, EOAs can initiate transactions. While simple, because the signature scheme is fixed, EOAs have some drawbacks, including the following: Control over the private key gives complete control over the account, so you must keep your seed phrase secure yet accessible. Limited flexibility surrounding wallet functionality EIP-4337 is a design proposal for Ethereum that outlines account abstraction, whereby all accounts are managed via a dedicated smart contract on the Ethereum network, as a way to increase flexibility and usability. You can add custom logic on top of the basic EOA functionality, thereby bringing account abstraction into Ethereum. Account abstraction enables more flexible account management. Rather than the protocol determining an account’s behavior, an account contract, which is a smart contract with programmable logic, defines a user’s account. Using account abstraction you can now program how your account functions. For example, you can: Determine what it means for a signature to be valid, or what contracts your account is allowed to interact with. This is known as signature abstraction. Pay transaction fees in different tokens. This is known as fee abstraction. Design your own replay protection mechanism and allow sending multiple uncoupled transactions in parallel. In Ethereum, you cannot send two transactions in parallel, you must wait for confirmation of the first before sending the second. Otherwise, the second transaction can be rejected due to an invalid nonce. With account abstraction, a sequential nonce is not required. This is known as nonce abstraction. Today, Starknet offers signature abstraction. In the future, we will enrich the current account abstraction design. For example, see the paymaster proposal for fee abstraction in the Starknet Community Forum. Two examples of how you might program an account to function using account abstraction are: Social recovery A process where if you lose your wallet, you are able to retrieve it via a selected social network, vastly improving the typical experience of wallet recovery. Operating your account via facial recognition With signature abstraction, you can use your phone’s native hardware to sign transactions, making it practically impossible to take control of another user’s account, even if your phone is stolen.","title":"What is an account?","component":"ROOT","version":"","name":"introduction","url":"/architecture-and-concepts/accounts/introduction/","titles":[{"text":"Ethereum account structure","hash":"ethereum_account_structure","id":1},{"text":"What is Account Abstraction?","hash":"account_abstraction","id":2},{"text":"Examples of customizing account functionality","hash":"examples","id":3}]},"57":{"id":57,"text":"The key stages of transaction lifetime are: The sequencer selects a transaction from the mempool and calls the __validate__ function. If the transaction is valid, the sequencer calls the __execute__ function. If __execute__ runs successfully, the sequencer includes the transaction in the block, charges the fee, and proceeds to work on the next transaction. After completing the block, the sequencer sends the block to the prover. The sequencer receives fees in ETH in return for including transactions in a block. For more details on how the transaction fee is computed, see Gas and transaction fees.","title":"Simplified transaction flow","component":"ROOT","version":"","name":"simplified-transaction-flow","url":"/architecture-and-concepts/accounts/simplified-transaction-flow/","titles":[{"text":"The payment mechanism","hash":"a_payment_mechanism","id":1}]},"58":{"id":58,"text":"The Universal Deployer Contract (UDC) is a singleton smart contract that wraps the deploy syscall to expose it to any contract that doesn’t implement it, such as account contracts. You can think of it as a standardized generic factory for Starknet contracts. And since Starknet has no deployment transaction type, it offers a standardized way to deploy smart contracts by following the standard deployer interface and emitting a ContractDeployed event. For more information see the proposal for the standard deployer interface. For details on the motivation and the decision making process, see the Universal Deployer Contract proposal. The UDC address is 0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf in Mainnet, Sepolia testnet, and starknet-devnet. This address might change in the future when it is migrated to a modern version of Cairo. trait IUniversalDeployer { fn deployContract( class_hash: ClassHash, salt: felt252, unique: bool, calldata: Span ) -> ContractAddress; } Procedure Declare the contract with a DECLARE transaction, or ensure that the contract has been declared. For more information, see the DECLARE transaction. Call the deployContract function in the UDC. Example implementation in Cairo: #[starknet::interface] trait IUniversalDeployer { fn deployContract( ref self: TContractState, class_hash: ClassHash, salt: felt252, unique: bool, calldata: Span ) -> ContractAddress; } const UDC_ADDRESS: felt252 = 0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf; fn deploy() -> ContractAddress { let dispatcher = IUniversalDeployerDispatcher { contract_address: UDC_ADDRESS.try_into().unwrap() }; // deployment parameters let class_hash = class_hash_const::(); let salt = 1234567879; let unique = false; let mut calldata = array![]; // the UDC returns the deployed contract address dispatcher.deployContract(class_hash, salt, unique, calldata.span()) } The Universal Deployer Contract offers two types of addresses to deploy: origin-dependent and origin-independent. As the names suggest, the origin-dependent type includes the deployer’s address in the address calculation, whereas, the origin-independent type does not. The unique boolean parameter ultimately determines the type of deployment. When deploying a contract that uses get_caller_address in the constructor calldata, remember that the UDC, not the account, deploys that contract. Therefore, querying get_caller_address in a contract’s constructor returns the UDC’s address, not the account’s address. By making deployments dependent upon the origin address, users can reserve a whole address space to prevent someone else from taking ownership of the address. Only the owner of the origin address can deploy to those addresses. Achieving this type of deployment necessitates that the origin sets unique to true in the deployContract call. Under the hood, the function call leverages the origin’s address and creates a hashchain by hashing the origin’s address with the given salt. To deploy a unique contract address pass: let deployed_addr = udc.deployContract(class_hash, salt, true, calldata.span()); Origin-independent contract deployments create contract addresses independent of the deployer and the UDC instance. Instead, only the class hash, salt, and constructor arguments determine the address. This type of deployment enables redeployments of accounts and known systems across multiple networks. To deploy a reproducible deployment, set unique to false. let deployed_addr = udc.deployContract(class_hash, salt, false, calldata.span()); The UDC has already been deployed on most networks and development environments. The standard requires the UDC to be deployed passing deploy_from_zero=true and salt=0 as arguments to the deploy syscall. This results in a deterministic and predictable address across all instances of Starknet, facilitating SDK integration and reproducibility of deployments. Deploy a contract through the Universal Deployer Contract. fn deployContract( classHash: ClassHash, salt: felt252, unique: bool, calldata: Span ) -> ContractAddress Emitted when deployer deploys a contract through the Universal Deployer Contract. #[derive(Drop, starknet::Event)] struct ContractDeployed { address: ContractAddress, deployer: ContractAddress, unique: bool, classHash: ClassHash, calldata: Span, salt: felt252, }","title":"Universal Deployer Contract (UDC)","component":"ROOT","version":"","name":"universal-deployer","url":"/architecture-and-concepts/accounts/universal-deployer/","titles":[{"text":"UDC address","hash":"udc_address","id":1},{"text":"Interface","hash":"interface","id":2},{"text":"Deploying a contract with the UDC","hash":"deploying_a_contract_with_the_udc","id":3},{"text":"Deployment types","hash":"deployment_types","id":4},{"text":"Origin-dependent","hash":"origin_dependent","id":5},{"text":"Origin-independent","hash":"origin_independent","id":6},{"text":"Deploying the UDC","hash":"deploying_the_udc","id":7},{"text":"API specification","hash":"api_specification","id":8},{"text":"deployContract method","hash":"deploycontract_method","id":9},{"text":"ContractDeployed event","hash":"contractdeployed_event","id":10}]},"59":{"id":59,"text":"A Starknet block is a list of transactions and a block header that contains the following fields: Name Type Description block_number u64 The number, that is, the height, of this block. parent_block_hash felt252 The hash of the block’s parent. global_state_root felt252 The state commitment after the block. sequencer_address ContractAddress The Starknet address of the sequencer that created the block. block_timestamp Timestamp The time at which the sequencer began building the block, in seconds since the Unix epoch. transaction_count u32 The number of transactions in the block. events_count u32 The number of events in the block. state_diff_length u32 The sum of number of storage diffs, nonce updates, deployed contracts and declared classes. state_diff_commitment felt252 The poseidon hash of the state diff of the block, see below for more details. transactions_commitment felt252 A commitment to the transactions included in the block. The root of a height-64 binary Merkle Patricia trie. The leaf at index \\(i\\) corresponds to \\({h(\\text{transaction_hash}, \\text{signature})}\\). events_commitment felt252 The root of a height-64 binary Merkle Patricia trie. The leaf at index \\(i\\) corresponds to the hash of the \\(i'th\\) event emitted in the block. See below for a description on how event hashes are computed. receipts_commitment felt252 The root of a height-64 Merkle-Patricia trie. The leaf at index \\(i\\) corresponds to the hash of the \\(i'th\\) transaction receipt. See below for a description on how receipt hashes are computed. l1_gas_price (u128, u128) The price of L1 gas that was used while constructing the block. L1 gas prices apply to storage updates and L1→L2 messages. As of March 2023, computation is also priced in terms of L1 gas, but this will change in the future. The first u128 value is the price in wei. The second is the price in fri. l1_data_gas_price (u128, u128) The price of L1 blob gas that was used while constructing the block. If the l1_da_mode of the block is set to BLOB, L1 blob gas prices determines the storage update cost. The first u128 value is the price in wei. The second is the price in fri. l1_da_mode String CALLDATA or BLOB, depending on how Starknet state diffs are sent to L1. protocol_version String The version of the Starknet protocol used when creating the block. A block hash is defined as the Poseidon hash of the header’s fields, as follows: h(𝐵) = h( \"STARKNET_BLOCK_HASH0\", block_number, global_state_root, sequencer_address, block_timestamp, transaction_count || event_count || state_diff_length || l1_da_mode, state_diff_commitment, transactions_commitment events_commitment, l1_gas_price_in_wei, l1_gas_price_in_fri, l1_data_gas_price_in_wei, l1_data_gas_price_in_fri receipts_commitment 0, parent_block_hash ) Where: h is the Poseidon hash. || denotes concatenation, transaction_count, event_count and state_diff_length are given 64 bits each, and l1_da_mode is one bit where 0 denotes CALLDATA and 1 denotes BLOB. For a reference implementation, see the sequencer repository. The state diff commitment is obtained by the chain-hash of the following: updates to contract addresses \\(c_1,...,c_n\\), with diffs \\((k^1_1, v^1_1),...,(k^1_{m_1}, v^1_{m_1}),...,(k^n_1, v^n_1),...,(k^n_{m_n},v^n_{m_n})\\) deployed contracts \\((\\text{deployed_address}_1, \\text{deployed_class_hash}_1),...,(\\text{deployed_address}_\\ell,\\text{deployed_class_hash}_\\ell)\\) declared classes \\((\\text{declared_class_hash}_1, \\text{declared_compiled_class_hash}_1), ..., (\\text{declared_class_hash}_d, \\text{declared_compiled_class_hash}_d)\\) replaced classes \\((\\text{replaced_contract_address}_1, \\text{new_class_hash}_1),...,(\\text{replaced_contract_address}_r, \\text{new_class_hash}_r)\\) updated nonces \\((\\text{account}_1, \\text{new_nonce}_1),...,(\\text{account}_k, \\text{new_nonce}_k)\\) More formally, the state-diff hash is given by: \\[\\begin{align} h\\big( & \\text{\"STARKNET_STATE_DIFF0\"}, \\\\ & \\quad \\ell + r, \\\\ & \\quad \\text{deployed_address}_1, \\text{deployed_class_hash}_1,...,\\text{deployed_address}_\\ell,\\text{deployed_class_hash}_\\ell, \\\\ & \\quad \\text{replaced_contract_address}_1, \\text{new_class_hash}_1,...,\\text{replaced_contract_address}_r, \\text{new_class_hash}_r \\\\ & \\quad d, \\\\ & \\quad \\text{declared_class_hash}_1, \\text{declared_compiled_class_hash}_1, ..., \\text{declared_class_hash}_d, \\text{declared_compiled_class_hash}_d, \\\\ & \\quad 1, \\\\ & \\quad 0, \\\\ & \\quad n, \\\\ & \\quad c_1 \\\\ & \\quad k^1_1, v^1_1,...,k^1_{m_1}, v^1_{m_1} \\\\ & \\quad \\vdots \\\\ & \\quad c_n \\\\ & \\quad k^n_1, v^n_1,...,k^n_{m_n},v^n_{m_n} \\\\ & \\quad k \\\\ & \\quad \\text{account}_1, \\text{new_nonce}_1,...,\\text{account}_k, \\text{new_nonce}_k\\big) \\end{align}\\] Where: \\(h\\) is the Poseidon hash function \\(1, 0\\) in the hash computation are placeholders that may be used in the future A transaction receipt consists of the following fields: Name Type Description transaction_hash felt252 the hash of the transaction actual_fee u128 the fee paid on-chain events List ordered list of the events emitted by the transaction messages List ordered list of the l2→l1 messages sent by the transaction revert_reason String The revert reason, in case the transaction was reverted l1_gas_consumed u128 The amount of l1 gas that was consumed l1_data_gas_consumed u128 The amount of l1 data (blob) gas that was consumed l2_gas_consumed u128 The amount of l2 gas that was consumed The hash of the transaction receipt is given by: h(receipt) = h( transaction_hash, actual_fee, h(messages), sn_keccak(revert_reason), h(l2_gas_consumed, l1_gas_consumed, l1_data_gas_consumed) ) Where: h is the Poseidon hash function given messages \\(m_1=(\\text{from}_1, \\text{to}_1, \\text{payload}_1)...m_n=(\\text{from}_n, \\text{to}_n, \\text{payload}_n)\\), their hash is given by: \\[h(n, \\text{from}_1, \\text{to}_1, h(\\text{payload}_1), ..., \\text{from}_n, \\text{to}_n, h(\\text{payload}_n))\\] where each message’s payload is length-prefixed. events are omitted from the receipt’s hash since they are committed separately in the block. The hash of an event \\((\\text{keys}, \\text{data})\\) emitted by a contract whose address is emitter_address and a transaction whose hash is tx_hash is given by: \\[h\\big(\\text{emitter_address}, \\text{tx_hash}, h(\\text{keys}), h(\\text{data}) \\big)\\] Where \\(h\\) is the Poseidon hash function. Zeros inside the hash computation of an object are used as placeholders, to be replaced in the future by meaningful fields.","title":"Block structure","component":"ROOT","version":"","name":"block-structure","url":"/architecture-and-concepts/network-architecture/block-structure/","titles":[{"text":"Block hash","hash":"block_hash","id":1},{"text":"State diff commitment","hash":"state_diff_hash","id":2},{"text":"Receipt hash","hash":"receipt_hash","id":3},{"text":"Event hash","hash":"event_hash","id":4}]},"60":{"id":60,"text":"Starknet is a Validity Rollup, which means that after consolidating and proving a set of Layer 2 changes, it updates, on L1, the latest proven L2 state. Alongside the proof, it publishes the state diff on L1. The state diff is the difference between the previous and new states. Anyone monitoring Ethereum can use this data to reconstruct the current state of Starknet. To update the Starknet state on L1, you only need to send a valid proof along with the state difference, and there is no need to include additional details, such as transactions and events. Therefore, depending on the use case, you might need more information to track Starknet’s state. Starting with Starknet version 0.13.1, the sequencer determines whether to publish the state difference on Ethereum as calldata or blobdata. In extreme situations where blob prices significantly exceed those of calldata, the Starknet sequencer can switch to publish the state diff as calldata. Under normal conditions, blobs are the default method for publishing Starknet’s state differences. The format for state diffs remains the same as in version 0.11.0, but the data sent to Ethereum is a Fast Fourier Transform (FFT) of the original data. To recover Starknet’s state diff based on blobs published onchain, you must first perform an Inverse Fast Fourier Transform (IFFT) on the raw blob, and then proceed with decoding according to the format described below. Additional resources Data availability with EIP-4844 on the Starknet Community Forum An example blob published on Ethereum by the Starknet sequencer in a state update transaction The state diffs contain information on every contract whose storage was updated and additional information on contract deployments. For each affected contract, the following information is sent as calldata on L1: The contract address A single 32-byte word that includes the nonce and the following meta information about the update: class information flag, whose value is one of the following: 0 Storage updates only. 1 The contract was deployed or replaced in this state update. When this flag is set to 1, the new class hash occupies an additional word before the storage updates section. number of storage updates The expected format of this 32-byte word is as follows: \\[\\underbrace{0\\cdots0}_{\\text{127 bits}}| \\underbrace{\\text{class information flag}}_{\\text{1 bit}}| \\underbrace{\\text{new nonce}}_{\\text{64 bits}}|{ \\underbrace{\\text{# of storage updates}}_{\\text{64 bits}}}_{\\text{LSB}}\\] Each storage update includes the following: key - the address inside the contract’s storage where the value is updated value - the new value Newly declared classes include the following: The number of Cairo classes that were declared in the block Each class includes the following: The class hash The compiled class hash Consider the following onchain data that was extracted from L1: [ 1, (1) 2019172390095051323869047481075102003731246132997057518965927979101413600827, (2) 18446744073709551617, (3) 100, (4) 200, (4) 1, (5) 1351148242645005540004162531550805076995747746087542030095186557536641755046, (6) 558404273560404778508455254030458021013656352466216690688595011803280448032 (7) ] 1 The number of contracts whose state was updated. 2 The address of the first, and only, contract whose state changed. 3 18446744073709551617, which is 264+1, encodes the following: The class information flag is 0, that is, the contract was not deployed or replaced just now, so you shouldn’t treat the next word as the class hash. The new nonce is 1. One storage cell was updated. 4 These two elements, 100 and 200, encode the storage update, where the value of key 100 is set to 200. 5 The new declare section: 1 includes a single declare v2 transaction in this state update. 6 Encoding of the class hash. 7 Encoding of the compiled class hash of the declared class. The state diffs contain information on every contract whose storage was updated and additional information on contract deployments. Those differences are sent as uint256[] array as part of the calldata, and are encoded as follows: Number of cells that encode contract deployments Each deployed contract has the following: contract_address - the address of the deployed contract. See also Data availability. contract_hash - the hash of the class Number of contracts whose storage is updated. Each such contract has the following: contract_address - the address of the contract num_of_storage_updates - number of storage updates nonce, num of storage updates - a uint256 value that encodes both the number of storage updates for that contract and the updated nonce: \\[\\underbrace{0\\cdots0}_{\\text{128 bits}} | \\underbrace{\\text{new nonce}}_{\\text{64 bits}} | {\\underbrace{\\text{# of storage updates}}_{\\text{64 bits}}}_{\\text{LSB}}\\] For each storage update: key - the address inside the contract’s storage where the value is updated value - the new value The example below shows onchain data that was extracted from L1. An explanation follows, according to the above format. [ 2, 2472939307328371039455977650994226407024607754063562993856224077254594995194, 1336043477925910602175429627555369551262229712266217887481529642650907574765, 5, 2019172390095051323869047481075102003731246132997057518965927979101413600827, 18446744073709551617, 5, 102, 2111158214429736260101797453815341265658516118421387314850625535905115418634, 2, 619473939880410191267127038055308002651079521370507951329266275707625062498, 1471584055184889701471507129567376607666785522455476394130774434754411633091, 619473939880410191267127038055308002651079521370507951329266275707625062499, 541081937647750334353499719661793404023294520617957763260656728924567461866, 2472939307328371039455977650994226407024607754063562993856224077254594995194, 1, 955723665991825982403667749532843665052270105995360175183368988948217233556, 2439272289032330041885427773916021390926903450917097317807468082958581062272, 3429319713503054399243751728532349500489096444181867640228809233993992987070, 1, 5, 1110, 3476138891838001128614704553731964710634238587541803499001822322602421164873, 6, 59664015286291125586727181187045849528930298741728639958614076589374875456, 600, 221246409693049874911156614478125967098431447433028390043893900771521609973, 400, 558404273560404778508455254030458021013656352466216690688595011803280448030, 100, 558404273560404778508455254030458021013656352466216690688595011803280448031, 200, 558404273560404778508455254030458021013656352466216690688595011803280448032, 300, 1351148242645005540004162531550805076995747746087542030095186557536641755046, 500 ] The first element, 2, is the number of cells that encode contracts deployment. The next two elements describe a single contract deployment with the following parameters: contract_address: 2472939307328371039455977650994226407024607754063562993856224077254594995194 contract_hash: 1336043477925910602175429627555369551262229712266217887481529642650907574765 The next element, 5 (index 3 in the array), is the number of contracts whose storage was updated. We will take only the first contract as an example. contract_address: 2019172390095051323869047481075102003731246132997057518965927979101413600827 Following the above contract address, we have 18446744073709551617 (index 8 in the array), which is \\(2^{64}+1\\), thus: The new contract nonce is 1 One storage key is updated The value at key 5 was changed to 102 The next 4 contract storage updates are interpreted in the same manner. The data described above is sent across several Ethereum transactions, each holding a part of this array as calldata. Each new Starknet block has its associated state diff transactions. You can find the code for extracting this data from Ethereum in Pathfinder’s repo. Pathfinder is the first Starknet full node implementation. You may also take a look at the Python script which extracts the same information.","title":"Data availability","component":"ROOT","version":"","name":"data-availability","url":"/architecture-and-concepts/network-architecture/data-availability/","titles":[{"text":"Introduction","hash":"introduction","id":1},{"text":"Data availability: EIP-4844, Starknet 0.13.1 and forward","hash":"data_availability_eip_4844_starknet_0_13_1_and_forward","id":2},{"text":"Data availability: v0.11.0 and forward","hash":"data_availability_v0_11_0_and_forward","id":3},{"text":"v0.11.0 format","hash":"v0.11.0_format","id":4},{"text":"v0.11.0 example of onchain data","hash":"v0.11.0_example","id":5},{"text":"Data availability: pre v0.11.0","hash":"data_availability_pre_v0_11_0","id":6},{"text":"Pre v0.11.0 format","hash":"pre_v0.11.0_format","id":7},{"text":"Pre v0.11.0 example","hash":"pre_v0.11.0_example","id":8},{"text":"Extract from Ethereum","hash":"extract_from_ethereum","id":9}]},"61":{"id":61,"text":"This section describes fees that are paid on L2 starting in Starknet 0.13.0. For information about messaging fees that are paid on L1, see L1 → L2 message fees. Starting with Starknet v0.13.1, Starknet distinguishes between blocks whose state diffs are sent to L1 as calldata and blocks whose state diffs are sent to L1 as blobs. The l1_da_mode property in the Starknet block header contains this information. The cost of computation remains the same on both options, but the cost related to data availability differs. This section shows the formula for determining a transaction’s fee. The following sections describe how this formula was derived. The following formula describes the overall fee, \\(F\\), for a transaction: \\[\\begin{align} F = \\; & gas\\_price \\cdot \\Bigg(\\max_k v_k w_k + \\\\ & \\quad + \\; \\text{message_calldata_cost}\\cdot 3t + (\\text{message_calldata_cost} + \\text{l1_log_data_cost})\\cdot \\sum\\limits_{i=1}^t q_i \\; + \\\\ & \\quad + \\; \\left(\\text{l1_storage_write_cost}+\\text{log_message_to_l1_cost}\\right)\\cdot t + \\; \\\\ & \\quad + \\; \\text{l2_payload_costs}\\Bigg) + \\\\ & data\\_gas\\_price\\cdot\\text{felt_size_in_bytes}\\cdot\\bigg(2(n-1)+2(m-1) + \\ell +2D \\bigg) \\end{align}\\] where: \\(v\\) is a vector that represents resource usage, where each of its entries, \\(v_k\\), corresponds to different resource types: Cairo steps and number of applications of each builtin. For more information see Calculation of computation costs. \\(w\\) is the CairoResourceFeeWeights vector. \\(n\\) is the number of unique contracts updated, which also includes changes to classes of existing contracts and contract deployments, even if the storage of the newly deployed contract is untouched. In other words, \\(n\\ge\\ell\\). Notice that \\(n\\ge 1\\) always holds, because the fee token contract is always updated, which does not incur any fee. \\(m\\) is the number of values updated, not counting multiple updates for the same key. Notice that \\(m\\ge 1\\) always holds, because the sequencer’s balance is always updated, which does not incur any fee. \\(t\\) is the number of L2→L1 messages sent, where the corresponding payload sizes are denoted by \\(q_1,...,q_t\\). \\(\\ell\\) is the number of contracts whose class was changed, which happens on contract deployment and when applying the replace_class syscall. \\(D\\) is 1 if the transaction is of type DECLARE and 0 otherwise. Declare transactions need to post on L1 the new class hash and compiled class hash which are added to the state. L2→L1 messaging constants: \\(\\text{message_calldata_cost}\\) is 1124 gas per 32-byte word. \\(\\text{l1_log_data_cost}\\) is 256 gas. \\(\\text{l1_storage_write_cost}\\) is the cost of writing to a new storage slot on Ethereum, which is 20,000 gas. \\(\\text{log_message_to_l1_cost}\\) is 1637 gas. For more information, see Onchain data: L2→L1 messages. \\(\\text{l2_payload_costs}\\) is the gas cost of data sent over L2. This includes calldata, code, and event emission. For more details see L2 payloads: calldata, events, and code. \\(\\text{felt_size_in_bytes}\\) is 32, which is the number of bytes required to encode a single STARK field element. This section shows the formula for determining a transaction’s fee. The following sections describe how this formula was derived. The following formula describes the overall fee, \\(F\\), for a transaction: \\[\\begin{align} F = gas\\_price\\cdot&\\Bigg(\\max_k v_k w_k + \\\\ & + \\; \\text{da_calldata_cost}\\left(2(n-1)+2(m-1) + \\ell + 2D + 3t + \\sum\\limits_{i=1}^t q_i\\right)\\\\ & - \\; \\text{contract_update_discount}\\cdot (n-1) - 240 \\\\ & + \\; \\text{message_calldata_cost}\\cdot 3t + (\\text{message_calldata_cost} + \\text{l1_log_data_cost})\\cdot\\sum\\limits_{i=1}^t q_i \\\\ & + \\; \\left(\\text{l1_storage_write_cost}+\\text{log_message_to_l1_cost}\\right)\\cdot t \\\\ & + \\; \\text{l2_payload_costs}\\Bigg) \\end{align}\\] where: The following constants are defined in the same manner as in the blob-based formula: \\(v, w, n, m, t, \\ell, D\\) \\(\\text{message_calldata_cost}, \\; \\text{l1_log_data_cost}, \\; \\text{log_message_to_l1_cost}, \\; \\text{l1_storage_write_cost}\\) \\(\\text{l2_payload_costs}\\) \\(\\text{da_calldata_cost}\\) is 551 gas per 32-byte word. This cost is derived as follows: 512 gas per 32-byte word for calldata. ~100 gas for onchain hashing that happens for every sent word. a 10% discount, because the sequencer does not incur additional costs for repeated updates to the same storage slot within a single block. \\(240\\) is the gas discount for updating the sender’s balance, for the derivation of this number see Onchain data: Storage updates. \\(\\text{contract_update_discount}\\) is 312 gas, for the derivation of this discount see Onchain data: Storage updates. The fee is charged atomically with the transaction execution on L2. The Starknet OS injects a transfer of the fee-related ERC-20, with an amount equal to the fee paid, the sender equal to the transaction submitter, and the sequencer as a receiver. With v3 transactions, users specify the max amount and max price for each resource. At the time of writing, the only available resource is L1 gas. In the future, we will introduce L2 gas which will be used to price L2 work (as opposed to only charging for the proof verification in L1 gas, which is what happens today). With older transaction versions, users specify the maximum fee that they are willing to pay for a transaction. The only limitation on the sequencer, which is enforced by the Starknet OS, is that the actual fee charged is bounded by max_fee. While not enforced in the proof, the Starknet sequencer usually charges less than max_fee, as it charges in accordance with the above fee formula. At the time of writing, the following components are contributing to the transaction fee: Computational complexity: The marginal cost of verifying the transaction on L1, measured in L1 gas. Onchain data: The cost of posting the state diffs induced by the transaction to L1 (for more details, see data availability). This is measured in L1 gas or L1 data gas, depending on whether or not the L2 block in which the transaction was included uses calldata or blobs. L2→L1 messages: Messages sent to L1 are eventually sent to the Starknet core contract as L1 calldata by the sequencer; therefore L2 transaction that send L2→L1 messages incur an additional L1 gas cost. L2 calldata, events and code: From Starknet 0.13.1 onwards, there is a per-byte (or per felt) price for L2 payloads. For more details, see L2 payloads: calldata, events, and code. Each transaction is associated with an estimate of the amount of gas used. Combining this estimate with the price of gas yields the estimated fee. For transactions prior to v3, the fee is denominated in WEI. For transactions v3 and later, the fee is denominated in STRK. Every 60 seconds, Starknet samples the base price of gas and data gas on L1. The price of gas on Starknet is set to the average of the last 60 gas price samples, plus 1 gwei. The price of data gas on Starknet is set to the average of the last 60 data gas price samples. The data gas price on Ethereum is derived from the value of excess_blob_gas. For more information, see EIP-4844. Let’s analyze the correct metric for measuring transaction complexity. For simplicity, we will ignore Cairo’s builtins, and address them later. A Cairo program execution yields an execution trace. When proving a Starknet block, we aggregate all the transactions appearing in that block to the execution trace. Starknet’s prover generates proofs for execution traces, up to some maximal length \\(L\\), derived from the specs of the proving machine and the desired proof latency. Tracking the execution trace length associated with each transaction is simple. Each assertion over field elements, such as verifying addition/multiplication over the field, requires the same, constant number of trace cells, which is where our \"no-builtins\" assumption kicks in: Pedersen occupies more trace cells than addition. Therefore, in a world without builtins, the fee of the transaction \\(tx\\) is correlated with \\(\\text{TraceCells}[tx]/L\\). In the Cairo execution trace each builtin has its own slot, which is important to consider when determining the fee. For example, consider that the prover can process a trace with the following limits: up to 500,000,000 Cairo Steps up to 20,000,000 Pedersen hashes up to 4,000,000 signature verifications up to 10,000,000 range checks The proof is closed and sent to L1 when any of these slots is filled. Suppose that a transaction uses 10,000 Cairo steps and 500 Pedersen hashes. At most 40,000 such transactions can fit into the hypothetical trace (20,000,000/500). Therefore, its gas price correlates with 1/40,000 of the cost of submitting proof. Notice that this estimate ignores the number of Cairo steps, as it is not the limiting factor, since 500,000,000/10,000 > 20,000,000/500. With this example in mind, it is possible to formulate the exact fee associated with L2 computation. The allocation of resources among builtin operations must be predetermined; it is not possible to decide, post-execution, to include only 20,000,001 Pedersen hashes without additional components. This safeguards fairness and prevents manipulation, ensuring integrity in proof generation and fee determination. For each transaction, the sequencer calculates a vector, CairoResourceUsage, that contains the following: The number of Cairo steps. The number of applications of each Cairo builtin. For example, five range checks and two Pedersen hashes. The sequencer crosses this information with the CairoResourceFeeWeights vector. For each resource type, either a Cairo step or a specific builtin application, CairoResourceFeeWeights has an entry that specifies the relative gas cost of that component in the proof. Going back to the above example, if the cost of submitting a proof with 20,000,000 Pedersen hashes is roughly 5m gas, then the weight of the Pedersen builtin is 0.25 gas per application (5,000,000/20,000,000). The sequencer has a predefined weights vector, in accordance with the proof parameters. The sequencer charges only according to the limiting factor. Therefore the fee is correlated with: \\[\\max_k[\\text{CairoResourceUsage}_k \\cdot \\text{CairoResourceFeeWeights}_k]\\] where \\(k\\) enumerates the Cairo resource components, that is the number of Cairo steps and builtins used. The weights are listed in the table Amount of gas used per Cairo step or per each time a Cairo builtin is applied. Table 1. Amount of gas used per Cairo step or per each time a Cairo builtin is applied Step or builtin Gas cost Cairo step 0.0025 gas/step Pedersen 0.08 gas/application Poseidon 0.08 gas/application Range check 0.04 gas/application ECDSA 5.12 gas/application Keccak 5.12 gas/application Bitwise 0.16 gas/application EC_OP 2.56 gas/application The onchain data associated with a transaction is composed of three parts Storage updates L2→L1 messages Deployed contracts Declared classes (only relevant for DECLARE transactions, and adds two additional words) Whenever a transaction updates some value in the storage of some contract, the following data is sent to L1: two 32-byte words per contract two 32-byte words for every updated storage value For information on the exact data and its construction, see Data availability. Only the most recent value reaches L1. So the transaction’s fee only depends on the number of unique storage updates. If the same storage cell is updated multiple times within the transaction, the fee remains that of a single update. The following formula describes the storage update fee for a transaction: \\[\\underbrace{\\textit{gas_price}\\left(\\text{da_calldata_cost} \\cdot 2(n-1) - \\text{contract_update_discount}\\cdot (n-1)\\right)}_{\\text{contract addresses + new nonce and number of storage updates }} \\\\ + \\\\ \\underbrace{\\textit{gas_price} \\cdot \\left(\\text{da_calldata_cost}(2(m-1))-240\\right)}_{\\text{storage updates}}\\] where: \\(n\\) is the number of unique contracts updated, which also includes changes to classes of existing contracts and contract deployments, even if the storage of the newly deployed contract is untouched. In other words, \\(n\\ge\\ell\\). Notice that \\(n\\ge 1\\) always holds, because the fee token contract is always updated at the end of each transaction, in order to update the sequencer’s and the sender’s balances. The fee token contract update is not taken into account when computing the fee. \\(m\\) is the number of values updated, not counting multiple updates for the same key. Notice that \\(m\\ge 1\\) always holds, because the sequencer’s balance is updated at the end of each transaction. The sequencer’s balance update is not taken into account when computing the fee. \\(\\text{contract_update_discount}\\) is 312 gas, which is discounted for every updated contract. This discount is a result of the fact that out of the \\(2n\\) words caused by updating contracts, \\(n\\) words are short, including at most 6 non-zero bytes: three bytes for the nonce two bytes for the number of storage updates one byte for the class information flag Taking into account that zero bytes only cost 4 gas, the cost difference between a full 32-byte word, which does not contain zeros, and a word with only six non-zero bytes is \\(32\\cdot16-(6\\cdot16+26\\cdot4)=312\\). \\(240\\) is the gas discount for updating the sender’s balance, and is derived by assuming the balance requires at most 12 non-zero bytes, which is enough for 1.2B ETH or STRK, resulting in the following discount: \\(512-(20\\cdot4+12\\cdot16)=240\\). Improvements to the above pessimistic estimation might be gradually implemented in future versions of Starknet. For example, if different transactions within the same block update the same storage cell, there is no need to charge for both transactions, because only the last value reaches L1. In the future, Starknet might include a refund mechanism for such cases. When a transaction that raises the send_message_to_l1 syscall is included in a state update, the following data reaches L1: L2 sender address L1 destination address Payload size Payload (list of field elements) Consequently, the gas cost associated with a single L2→L1 message is: \\[\\begin{align} \\text{MESSAGE_COST} = & \\; \\text{message_calldata_cost}\\cdot\\left(3+\\text{payload_size}\\right) \\; + \\\\ & + \\text{l1_log_data_cost}\\cdot\\text{payload_size} \\; + \\\\ & + \\text{log_message_to_l1_cost} \\; + \\\\ & + \\text{l1_storage_write_cost} \\end{align}\\] Where: \\(\\text{message_calldata_cost}\\) is 1124 gas. This is the sum of the 512 gas paid to the core contract on submitting the state update, and 612 gas paid for the submitting of the same word to the verifier contract (which incurs ~100 additional gas for hashing). That is, messages are sent to Ethereum twice. \\(\\text{log_message_to_l1_cost}\\) is 1637 gas. This is the fixed cost involved in emitting a LogMessageToL1 event. This event has two topics and a data array, which adds two data words to the event, resulting in a total of \\(375+2\\cdot 375+2\\cdot 256\\) gas (log opcode cost, topic cost, and two data words cost). \\(\\text{l1_log_data_cost}\\) is 256 gas, which is paid for every payload element during the emission of the LogMessageToL1 event. \\(\\text{l1_storage_write_cost}\\) is 20,000 gas per message which is paid in order to store the message hash on the Starknet core contract. This recording of the message is what later enables the intended L1 contract to consume the message. When a transaction that raises the deploy syscall is included in a state update, the following data reaches L1: contract address number of storage updates and the new nonce class hash The first two elements are counted in the number of unique modified contracts, denoted by \\(n\\) throughout this page. So the only additional word comes from publishing the class hash, which adds 551 gas. For more information, see \\(\\text{da_calldata_cost}\\) in the final formula. As of Starknet v0.13.1 onwards, L2 data is taken into account during pricing. This includes: calldata: this includes transaction calldata (in the case of INVOKE transactions or L1_HANDLER), constructor calldata (in the case of DEPLOY_ACCOUNT transactions), and signatures events: data and keys of emitted events ABI: classes abi in DECLARE transactions (relevant only for DECLARE transactions of version ≥ 2) CASM bytecode (for all available DECLARE transactions, where in version ≥ 2 this refers to the compiled class) Sierra bytecode (relevant only for DECLARE transactions of version ≥ 2) The pricing of the above components in terms of L1 gas is given by the following table: Resource Gas cost Event key 0.256 gas/felt Event data 0.128 gas/felt Calldata 0.128 gas/felt CASM bytecode 1 gas/felt Sierra bytecode 1 gas/felt ABI 0.032 gas/character","title":"Gas and transaction fees","component":"ROOT","version":"","name":"fee-mechanism","url":"/architecture-and-concepts/network-architecture/fee-mechanism/","titles":[{"text":"Overall transaction fee","hash":"overall_fee","id":1},{"text":"Overall transaction fee with blobs","hash":"overall_fee_blob","id":2},{"text":"Overall transaction fee with calldata","hash":"overall_fee_calldata","id":3},{"text":"When is the fee charged?","hash":"when_is_the_fee_charged","id":4},{"text":"Transaction Fee limits","hash":"fee_limitations","id":5},{"text":"v3 transactions","hash":"v3_fee_limitations","id":6},{"text":"Deprecated transactions (version < 3)","hash":"deprecated_fee_limitations","id":7},{"text":"What do we price","hash":"what_do_we_pay_for","id":8},{"text":"Fee units","hash":"fee_units","id":9},{"text":"Fee calculation","hash":"fee_calculation","id":10},{"text":"Calculation of gas prices","hash":"calculation_of_gas_costs","id":11},{"text":"Computation without builtins","hash":"computation_without_builtins","id":12},{"text":"Computation with builtins","hash":"computation_with_builtins","id":13},{"text":"Calculation of computation costs","hash":"calculation_of_computation_costs","id":14},{"text":"Onchain data components","hash":"onchain_data_components","id":15},{"text":"Onchain data: Storage updates","hash":"storage_updates","id":16},{"text":"Onchain data: L2→L1 messages","hash":"l_2-l_1_messages","id":17},{"text":"Onchain data: Deployed contracts","hash":"deployed_contracts","id":18},{"text":"L2 payloads: calldata, events, and code","hash":"l2_calldata","id":19}]},"62":{"id":62,"text":"Starknet’s ability to interact with L1 is crucial. Messaging is the mechanism that enables this interaction. For example, you can perform computations on L2 and use the result on L1. Bridges on Starknet use the L1-L2 messaging mechanism. Consider that you want to bridge tokens from Ethereum to Starknet. You deposit your tokens in the L1 bridge contract, which automatically triggers the minting of the same token on L2. Another good use case for L1-L2 messaging is Defi pooling. For more information, see DeFi pooling on StarkWare’s site and dApps on https://www.starknet.io. Be aware that the messaging mechanism is asynchronous and asymmetric. Asynchronous: Your contract code, whether Cairo or Solidity, cannot await the result of the message being sent on the other layer within your contract code’s execution. Asymmetric: Sending a message from Ethereum to Starknet, L1→L2, is fully automated by the Starknet sequencer, so the message is automatically delivered to the target contract on L2. However, when sending a message from Starknet to Ethereum, L2→L1, the sequencer only sends the hash of the message. You must then consume the message manually using a transaction on L1. Contracts on L2 can interact asynchronously with contracts on L1 using the L2→L1 messaging protocol. The protocol consists of the following stages: During the execution of a transaction, a contract on Starknet sends a message from L2 to L1 by calling the send_message_to_L1 syscall. The sequencer attaches the message parameters to the block that includes the syscall invocation. The message parameters include the address of the sender on L2, the address of the recipient contract on L1, and the message data. For example: let mut payload: Array = ArrayTrait::new(); let to_address: EthAddress = 1_felt252.try_into().unwrap(); payload.append(1); // potentially add more elements to payload (payload[1], payload[2], etc.) send_message_to_l1_syscall(to_address: to_address.into(), payload: payload.span()); The prover proves the state update that includes this transaction. The sequencer updates the L1 state. The message is stored on L1 in the Starknet Core Contract and a counter on the Core Contract increases by one. The processMessage function, which is part of the Starknet Core Contract, emits the LogMessageToL1 event, which contains the message parameters. The message recipient on L1 can access and consume the message by calling the consumeMessageFromL2 function, which includes the message parameters within the transaction. This function, which is part of the Starknet Core Contract, verifies the following: The hashes of the L2 sent message parameters, now stored on the Core Contract, and the L1 received message parameters, are the same. The entity calling the function is indeed the recipient on L1. In such a case, the counter corresponding to the message hash in the Starknet Core Contract decreases by one. For more information, see the consumeMessageFromL2 function in StarknetMessaging.sol. L2→L1 Messaging mechanism illustrates this flow: Figure 1. L2→L1 Messaging mechanism The structure of an L2 → L1 message is described as follows under MSG_TO_L1 in the Starknet API JSON RPC specification: from_address (felt252) The address of the L2 contract sending the message. to_address (EthAddress) The target L1 address the message is sent to. payload (Array) The payload of the message. The hash of an L2 → L1 message is computed on L1 as follows: keccak256( abi.encodePacked( FromAddress, uint256(ToAddress), Payload.length, Payload ) ); Sending an L2 to L1 message always incurs a fixed cost of 20,000 gas, because the hash of the message being sent must be written to L1 storage in the Starknet Core Contract. Contracts on L1 can interact asynchronously with contracts on L2 using the L1→L2 messaging protocol. The protocol consists of the following stages: An L1 contract induces a message to an L2 contract on Starknet by calling the sendMessageToL2 function on the Starknet Core Contract with the message parameters. The Starknet Core Contract hashes the message parameters and updates the L1→L2 message mapping to indicate that a message with this hash was indeed sent. The L1 contract records the fee that the sender paid. For more information, see L1 → L2 message fees. The message is then decoded into a Starknet transaction that invokes a function annotated with the l1_handler decorator on the target contract. Transactions like this on L2 are called L1 handler transactions. The Starknet sequencer, upon receiving enough L1 confirmations for the transaction that sent the message, initiates the corresponding L2 transaction. The L2 transaction invokes the relevant l1_handler function. The L1 Handler transaction that was created in the previous step is added to a proof. The Core Contract receives the state update. The message is cleared from the Core Contract’s storage to consume the message. Clearing the Core Contract’s storage does the following: incurs a fixed cost of 5,000 gas emits an L1 event logging the message consumption At this point, the message is handled. An L1→L2 message consists of the following: L1 sender’s address L2 recipient’s contract address Function selector Calldata array Message nonce The message nonce is maintained on the Starknet Core Contract on L1, and is incremented whenever a message is sent to L2. The nonce is used to avoid a hash collision between different L1 handler transactions that is caused by the same message being sent on L1 multiple times. For more information, see L1→L2 structure. The flow described here should only be used in edge cases such as bugs on the Layer 2 contract preventing message consumption. Consider that Alice sends an L1 asset to a Starknet bridge to transfer it to L2, which generates the corresponding L1→L2 message. Now, consider that the L2 message consumption doesn’t function, which might happen due to a bug in the dApp’s Cairo contract. This bug could result in Alice losing custody of their asset forever. To mitigate this risk, the contract that initiated the L1→L2 message can cancel it by declaring the intent to cancel, waiting five days, and then completing the cancellation. This delay protects the sequencer from a DoS attack in the form of repeatedly sending and canceling a message before it is included in L1, rendering the L2 block which contains the activation of the corresponding L1 handler invalid. The steps in this flow are as follows: The user that initiated the L1→L2 message calls the startL1ToL2MessageCancellation function in the Starknet Core Contract. The user waits five days until she can finalize the cancellation. The user calls the cancelL1ToL2Message function. An L1 → L2 message induces a transaction on L2, which, unlike regular transactions, is not sent by an account. This calls for a different mechanism for paying the transaction’s fee, for otherwise the sequencer has no incentive of including L1 handler transactions inside a block. To avoid having to interact with both L1 and L2 when sending a message, L1 → L2 messages are payable on L1, by sending ETH with the call to the payable function sendMessageToL2 on the Starknet Core Contract. The sequencer takes this fee in exchange for handling the message. The sequencer charges the fee in full upon updating the L1 state with the consumption of this message. The fee itself is calculated in the same manner as \"regular\" L2 transactions. You can use the CLI to get an estimate of an L1 → L2 message fee. For completeness, L1 → L2 structure describes the precise structure of both the message as it appears on L1 and the induced transaction as it appears on L2. Table 1. L1 → L2 message structure FromAddress ToAddress Selector Payload Nonce EthereumAddress FieldElement FieldElement List FieldElement The hash of the message is computed on L1 as follows: keccak256( abi.encodePacked( uint256(FromAddress), ToAddress, Nonce, Selector, Payload.length, Payload ) ); Version ContractAddress Selector Calldata Nonce FieldElement FieldElement FieldElement List FieldElement The hash of the corresponding L1 handler transaction on L2 is computed as follows: l1_handler_tx_hash = _h_( \"l1_handler\", version, contract_address, entry_point_selector, _h_(calldata), 0, chain_id, nonce ) Where: l1_handler is a constant prefix, encoded in bytes (ASCII), as big-endian. version is the transaction version. Only version 0 is currently supported. chain_id is a constant value that specifies the network to which this transaction is sent. h is the Pedersen hash (note that since we’re hashing an array, the # of inputs needs to be appended to the hash). 0 indicates that L1 to L2 message fees are charged on L1. In an L1 handler transaction, the first element of the calldata is always the sender’s Ethereum address. Since L1 handler transactions are not initiated by an account, invoking get_caller_address() or similar account-related functions returns the address 0x0. Table 2. Supported versions of the L1HandlerTransaction transaction type Current version Deprecated versions Unsupported versions v0 N/A N/A send_message_to_L1 syscall sendMessageToL2 function on the Starknet Core Contract For more information on how messaging works within the Starknet Core Contract, including details on coding, see L1-L2 Messaging in The Cairo Book: The Cairo Programming Language","title":"L1-L2 messaging mechanism","component":"ROOT","version":"","name":"messaging-mechanism","url":"/architecture-and-concepts/network-architecture/messaging-mechanism/","titles":[{"text":"L2 → L1 messages","hash":"l2-l1_messages","id":1},{"text":"L2 → L1 message structure","hash":"l2_l1_message_structure","id":2},{"text":"L2 → L1 message hashing","hash":"hashing_l2-l1","id":3},{"text":"L1 → L2 messages","hash":"l1-l2-messages","id":4},{"text":"L1 → L2 message cancellation","hash":"l2-l1_message_cancellation","id":5},{"text":"L1 → L2 message fees","hash":"l1-l2-message-fees","id":6},{"text":"L1 → L2 structure","hash":"l1_l2_message_structure","id":7},{"text":"L1 → L2 hashing","hash":"hashing_l1-l2","id":8},{"text":"L1 handler transaction","hash":"l1_handler_transaction","id":9},{"text":"Additional resources","hash":"additional_resources","id":10}]},"63":{"id":63,"text":"The StarknetMessaging smart contracts include functions and events that are required when sending messages between L1 and L2. For information on the messaging mechanism, see Messaging mechanism. The L1 functions, where available, are defined in the following smart contract: Contract Description Functions StarknetMessaging.sol The contract that implements messaging functions. Interfaces are available through IStarknetMessaging.sol. cancelL1ToL2Message consumeMessageFromL2 getMaxL1MsgFee l1ToL2MessageCancellations l1ToL2MessageNonce l1ToL2Messages l2ToL1Messages messageCancellationDelay sendMessageToL2 startL1ToL2MessageCancellation The L1 events, where available, are defined in the following smart contract: Contract Description Events IStarknetMessagingEvents.sol The contract that defines messaging events. ConsumedMessageToL1 ConsumedMessageToL2 LogMessageToL1 LogMessageToL2 MessageToL2Canceled MessageToL2CancellationStarted Functions are listed in alphabetical order. Cancels an L1 to L2 message. Call this function after calling the startL1ToL2MessageCancellation function. The time between the calls to these two functions must be at least the number of seconds defined by the messageCancellationDelay function. Only a sender can cancel a message. If the message is missing, the call reverts. Be aware that the message fee is not refunded. None. uint256 toAddress The address of the L2 contract. uint256 selector The function, in the recipient L2 contract, that the message called. uint256[] calldata payload The payload of the message. uint256 nonce The nonce of the message. bytes32 msgHash The hash of the canceled message. MessageToL2Canceled Contract: StarknetMessaging.sol Function: cancelL1ToL2Message Consumes a message that was sent from an L2 contract. Returns the hash of the message. None. uint256 fromAddress The address of the L2 contract sending the message. uint256[] calldata payload The payload of the message. bytes32 msgHash The hash of the consumed message. ConsumedMessageToL1 Contract: StarknetMessaging.sol Function: consumeMessageFromL2 Returns the maximum fee, in Wei, that Starknet accepts for a single message. If the fee passed is higher than this value, the transaction is not accepted. pure None. uint256 MAX_L1_MSG_FEE The maximum fee, in Wei, that Starknet accepts for a single message. Contract: StarknetMessaging.sol Function: getMaxL1MsgFee Returns the timestamp of the cancellation request. view bytes32 msgHash The message hash. uint256 result The Ethereum block timestamp. Returns 0 if cancelL1ToL2Message was not called with the message hash msgHash. Contract: StarknetMessaging.sol Function: l1ToL2MessageCancellations Returns the nonce of the next message sent to the L2 contract. So if If n messages have been sent to Starknet, this function returns n + 1. view None. uint256 nonce The nonce of the next message sending to L2 contract. Contract: StarknetMessaging.sol Function: l1ToL2MessageNonce Indicates if a pending message is associated with a given message hash. view bytes32 msgHash The message hash. Returns uint256 result, where result is one of the following: message_fee + 1 A pending message is associated with the msgHash parameter. 0 No pending message is associated with the msgHash parameter. Contract: StarknetMessaging.sol Function: l1ToL2Messages Indicates if a pending message is associated with a given message hash. view bytes32 msgHash The message hash. Returns uint256 result, where result is one of the following: 1 A pending message is associated with the msgHash parameter. 0 No pending message is associated with the msgHash parameter. Contract: StarknetMessaging.sol Function: l2ToL1Messages Returns the time interval, in seconds, after which you can cancel a message starting from the moment of calling the startL1ToL2MessageCancellation function. You can get the real value by calling the messageCancellationDelay function on a block explorer, such as Etherscan. view None. uint256 result The time interval. Contract: StarknetMessaging.sol Function: messageCancellationDelay Sends a message to an L2 contract. The message fee is the cost of executing this function. payable uint256 toAddress The address of the L2 contract. uint256 selector The function, in the recipient L2 contract, that the message called. uint256[] calldata payload The payload of the message. bytes32 msgHash The hash of the message. uint256 nonce The nonce of the message. LogMessageToL2 Contract: StarknetMessaging.sol Function: sendMessageToL2 Starts the cancellation of a message from L1 to L2. You can cancel a message after a predefined about of time from the moment this function is called. The amount of time is set by the messageCancellationDelay function. You can only call this function for a message that is currently pending, and the caller must be the sender of that message. None. uint256 toAddress The address of the L2 contract. uint256 selector The function, in the recipient L2 contract, that the message called. uint256[] calldata payload The payload of the message. uint256 nonce The nonce of the message. bytes32 msgHash The hash of the cancellation message. MessageToL2CancellationStarted Contract: StarknetMessaging.sol Function: startL1ToL2MessageCancellation Events are listed in alphabetical order. This event is emitted when a message from L2 to L1 is consumed by the consumeMessageFromL2 function. uint256 indexed fromAddress The address of the sender on L2. address indexed toAddress The address of the receiver on L1. uint256[] payload The payload of the consumed message. Contract: IStarknetMessagingEvents Event: ConsumedMessageToL1 This event is emitted when a message is sent from L1 to L2 by the sendMessageToL2 function. address indexed fromAddress The address of the sender on L1. uint256 indexed toAddress The address of the receiver on L2. uint256 indexed selector The function, in the recipient L2 contract, that the message called. uint256[] payload The payload of the message. uint256 nonce The nonce of the message. uint256 fee The fee associated with the message. Contract: IStarknetMessagingEvents Event: LogMessageToL2 This event is emitted when an L1 to L2 message is canceled by the cancelL1ToL2Message function. address indexed fromAddress The address of the sender on L1. uint256 indexed toAddress The address of the receiver on L2. uint256 indexed selector The function, in the recipient L2 contract, that the message called. uint256[] payload The payload of the canceled message. uint256 nonce The nonce of the canceled message. Contract: IStarknetMessagingEvents Event: MessageToL2Canceled This event is emitted when the cancellation of an L1 to L2 message is started by the startL1ToL2MessageCancellation function. address indexed fromAddress The address of the sender on L1. uint256 indexed toAddress The address of the receiver on L2. uint256 indexed selector The function, in the recipient L2 contract, that the message called. uint256[] payload The payload of the message to be canceled. uint256 nonce The nonce of the message to be canceled. Contract: IStarknetMessagingEvents Event: MessageToL2CancellationStarted","title":"Messaging function and event reference","component":"ROOT","version":"","name":"messaging-reference","url":"/architecture-and-concepts/network-architecture/messaging-reference/","titles":[{"text":"L1 function reference","hash":"l1_function_reference","id":1},{"text":"cancelL1ToL2Message","hash":"cancelL1ToL2Message","id":2},{"text":"Description","hash":"description","id":3},{"text":"State Mutability","hash":"state_mutability","id":4},{"text":"Parameters","hash":"parameters","id":5},{"text":"Returns","hash":"returns","id":6},{"text":"Emitted event","hash":"emitted_event","id":7},{"text":"Function definition","hash":"function_definition","id":8},{"text":"consumeMessageFromL2","hash":"consumeMessageFromL2","id":9},{"text":"Description","hash":"description_2","id":10},{"text":"State Mutability","hash":"state_mutability_2","id":11},{"text":"Parameters","hash":"parameters_2","id":12},{"text":"Returns","hash":"returns_2","id":13},{"text":"Emitted event","hash":"emitted_event_2","id":14},{"text":"Function definition","hash":"function_definition_2","id":15},{"text":"getMaxL1MsgFee","hash":"getMaxL1MsgFee","id":16},{"text":"Description","hash":"description_3","id":17},{"text":"State Mutability","hash":"state_mutability_3","id":18},{"text":"Parameters","hash":"parameters_3","id":19},{"text":"Returns","hash":"returns_3","id":20},{"text":"Function definition","hash":"function_definition_3","id":21},{"text":"l1ToL2MessageCancellations","hash":"l1ToL2MessageCancellations","id":22},{"text":"Description","hash":"description_4","id":23},{"text":"State Mutability","hash":"state_mutability_4","id":24},{"text":"Parameters","hash":"parameters_4","id":25},{"text":"Returns","hash":"returns_4","id":26},{"text":"Function definition","hash":"function_definition_4","id":27},{"text":"l1ToL2MessageNonce","hash":"l1ToL2MessageNonce","id":28},{"text":"Description","hash":"description_5","id":29},{"text":"State Mutability","hash":"state_mutability_5","id":30},{"text":"Parameters","hash":"parameters_5","id":31},{"text":"Returns","hash":"returns_5","id":32},{"text":"Function definition","hash":"function_definition_5","id":33},{"text":"l1ToL2Messages","hash":"l1ToL2Messages","id":34},{"text":"Description","hash":"description_6","id":35},{"text":"State Mutability","hash":"state_mutability_6","id":36},{"text":"Parameters","hash":"parameters_6","id":37},{"text":"Returns","hash":"returns_6","id":38},{"text":"Function definition","hash":"function_definition_6","id":39},{"text":"l2ToL1Messages","hash":"l2ToL1Messages","id":40},{"text":"Description","hash":"description_7","id":41},{"text":"State Mutability","hash":"state_mutability_7","id":42},{"text":"Parameters","hash":"parameters_7","id":43},{"text":"Returns","hash":"returns_7","id":44},{"text":"Function definition","hash":"function_definition_7","id":45},{"text":"messageCancellationDelay","hash":"messageCancellationDelay","id":46},{"text":"Description","hash":"description_8","id":47},{"text":"State Mutability","hash":"state_mutability_8","id":48},{"text":"Parameters","hash":"parameters_8","id":49},{"text":"Returns","hash":"returns_8","id":50},{"text":"Function definition","hash":"function_definition_8","id":51},{"text":"sendMessageToL2","hash":"sendMessageToL2","id":52},{"text":"Description","hash":"description_9","id":53},{"text":"State Mutability","hash":"state_mutability_9","id":54},{"text":"Parameters","hash":"parameters_9","id":55},{"text":"Returns","hash":"returns_9","id":56},{"text":"Emitted event","hash":"emitted_event_3","id":57},{"text":"Function definition","hash":"function_definition_9","id":58},{"text":"startL1ToL2MessageCancellation","hash":"startL1ToL2MessageCancellation","id":59},{"text":"Description","hash":"description_10","id":60},{"text":"State Mutability","hash":"state_mutability_10","id":61},{"text":"Parameters","hash":"parameters_10","id":62},{"text":"Returns","hash":"returns_10","id":63},{"text":"Emitted event","hash":"emitted_event_4","id":64},{"text":"Function definition","hash":"function_definition_10","id":65},{"text":"L1 event reference","hash":"l1_event_reference","id":66},{"text":"ConsumedMessageToL1","hash":"ConsumedMessageToL1","id":67},{"text":"Description","hash":"description_11","id":68},{"text":"Event attributes","hash":"event_attributes","id":69},{"text":"Event definition","hash":"event_definition","id":70},{"text":"LogMessageToL2","hash":"LogMessageToL2","id":71},{"text":"Description","hash":"description_12","id":72},{"text":"Event attributes","hash":"event_attributes_2","id":73},{"text":"Event definition","hash":"event_definition_2","id":74},{"text":"MessageToL2Canceled","hash":"MessageToL2Canceled","id":75},{"text":"Description","hash":"description_13","id":76},{"text":"Event attributes","hash":"event_attributes_3","id":77},{"text":"Event definition","hash":"event_definition_3","id":78},{"text":"MessageToL2CancellationStarted","hash":"MessageToL2CancellationStarted","id":79},{"text":"Description","hash":"description_14","id":80},{"text":"Event attributes","hash":"event_attributes_4","id":81},{"text":"Event definition","hash":"event_definition_4","id":82}]},"64":{"id":64,"text":"Starknet is a coordinated system, with each component—sequencers, provers, and nodes—playing a specific yet interconnected role. Although Starknet is not yet fully decentralized, it’s actively moving toward that goal. This description of the system’s roles and how they interact should help you better grasp the intricacies of the Starknet ecosystem. Starknet’s operation begins when a transaction is received by a gateway, which serves as the Mempool. This stage could also be managed by the sequencer. The transaction is initially marked as RECEIVED. The sequencer then incorporates the transaction into the network state and tags it as ACCEPTED_ON_L2. The final step involves the prover, which executes the operating system on the new block, calculates its proof, and submits it to Layer 1 (L1) for verification. For more information on the transaction flow, see Transaction lifecycle. In essence, Starknet’s architecture involves multiple components: The sequencer receives transactions, orders them, and produces blocks. It operates similarly to validators in Ethereum or Bitcoin. The prover generates proofs for the created blocks and transactions. It uses the Cairo Virtual Machine (Cairo VM) to run provable programs, thereby creating execution traces necessary for generating STARK proofs. L1, in this case, Ethereum, hosts a smart contract capable of verifying these STARK proofs. If the proofs are valid, Starknet’s state root on L1 is updated. Starknet’s state is a comprehensive snapshot maintained through Merkle trees, much like in Ethereum. This establishes the architecture of the validity roll-up and the roles of each component. Sequencers are the backbone of the Starknet network, similar to Ethereum’s validators. They usher transactions into the system. Validity Rollups, also known as ZK-Rollups, excel at offloading some network chores, like bundling and processing transactions, to specialized players. This setup is similar to how Ethereum and Bitcoin delegate security to miners. Sequencing, like mining, demands hefty resources. Validity Rollups like Starknet outsource transaction processing to specialized entities and then verify their work. These specialized entities, in the context of Validity Rollups, are known as sequencers. Instead of providing security, as miners do, sequencers provide transaction capacity. They order, that is, sequence, multiple transactions into a single batch, execute them, and produce a block that is later proved by the prover and submitted to the Layer 1 network as a single, compact proof, known as a rollup. Just as validators in Ethereum and miners in Bitcoin are specialized actors securing the network, sequencers in Validity Rollup-based networks are specialized actors that provide transaction capacity. This mechanism enables Validity Rollups to handle a higher volume of transactions while maintaining the security of the underlying Ethereum network, enhancing scalability without compromising on security. Sequencers follow a systematic method for processing transactions: Sequencing: They collect transactions from users and order them. Executing: Sequencers then process these transactions. Batching: Transactions are grouped together in batches for efficiency. Block Production: Sequencers produce blocks that contain batches of processed transactions. Sequencers must be reliable and highly available, as their role is critical to the network’s smooth functioning. They need powerful and well-connected machines to perform their role effectively, as they must process transactions rapidly and continuously. The current roadmap for Starknet includes decentralizing the sequencer role. This shift towards decentralization will enable more participants to become sequencers, contributing to the robustness of the network. Provers serve as the second line of verification in the Starknet network. Their main task is to validate the work of the sequencers, when they receive the block produced by the sequencer, and to generate proofs that these processes were correctly performed. A prover does the following: Receives blocks: Provers receive blocks of processed transactions from sequencers. Processes blocks: Provers process these blocks a second time, ensuring that all transactions within the block have been correctly handled. Generates a proof: After processing, provers generate a proof of correct transaction processing. Sends the proof to Ethereum: Finally, the proof is sent to the Ethereum network for validation. If the proof is correct, the Ethereum network accepts the block of transactions. Provers need even more computational power than sequencers because they have to calculate and generate proofs, a process that is computationally heavy. However, the work of provers can be split into multiple parts, allowing for parallelism and efficient proof generation. The proof generation process is asynchronous, meaning it doesn’t have to occur immediately or in real-time. This flexibility allows for the workload to be distributed among multiple provers. Each prover can work on a different block, allowing for parallelism and efficient proof generation. The design of Starknet relies on these two types of actors—sequencers and provers—working in tandem to ensure efficient processing and secure verification of transactions. The relationship between sequencers and provers in blockchain technology often sparks debate. A common misunderstanding suggests that either the prover or the sequencer is the main bottleneck. To set the record straight, let’s discuss the optimization of both components. Starknet, which uses the Cairo programming language, currently supports only sequential transactions. Plans are in place to introduce parallel transactions in the future. However, as of now, the sequencer operates one transaction at a time, making it the bottleneck in the system. In contrast, provers operate asynchronously and can execute multiple tasks in parallel. The use of proof recursion allows for task distribution across multiple machines, making scalability less of an issue for provers. When it comes to defining what nodes do in Bitcoin or Ethereum, people often misinterpret their role as keeping track of every transaction within the network. This, however, is not entirely accurate. Nodes serve as auditors of the network, maintaining the state of the network, such as how much Bitcoin each participant owns or the current state of a specific smart contract. They maintain network state by processing transactions and preserving a record of all transactions, but that is a means to an end, not the end itself. In Validity Rollups and specifically within Starknet, this concept is somewhat reversed. Nodes don’t necessarily have to process transactions to get the state. In contrast to Ethereum or Bitcoin, Starknet nodes aren’t required to process all transactions to maintain the state of the network. You can access network state data by using the Starknet API, which uses the JSON RPC protocol, to communicate with a node. Previously, Starknet’s Gateway and Feeder Gateway APIs enabled querying the sequencer, but as the network has matured, the JSON RPC has become the standard. Operating your own node is typically faster than using a shared architecture, like the gateway. It’s worth noting that more people running nodes increases the resilience of the network and prevents server flooding, which has been an issue in other L2 networks. Currently, there are primarily three methods for a node to keep track of the network’s state and nodes can implement any of these methods: Replaying Old Transactions: Like Ethereum or Bitcoin, a node can take all the transactions and re-execute them. Although this approach is accurate, it isn’t scalable unless you have a powerful machine that’s capable of handling the load. If you can replay all transactions, you can become a sequencer. Relying on L2 Consensus: Nodes can trust the sequencer to execute the network correctly. When the sequencer updates the state and adds a new block, nodes accept the update as accurate. Checking Proof Validation on L1: Nodes can monitor the state of the network by observing L1 and ensuring that every time a proof is sent, they receive the updated state. This way, they don’t have to trust anyone and only need to keep track of the latest valid transaction for Starknet. Each type of node setup comes with its own set of hardware requirements and trust assumptions. Nodes that replay transactions require powerful machines to track and execute all transactions. These nodes don’t have trust assumptions; they rely solely on the transactions they execute, guaranteeing that the state at any given point is valid. Nodes that rely on L2 consensus require less computational power. They need sufficient storage to keep the state but don’t need to process a lot of transactions. The tradeoff here is a trust assumption. Currently, Starknet revolves around one sequencer, so these nodes trust StarkWare not to disrupt the network. However, once a consensus mechanism and leader election amongst sequencers are in place, these nodes will only need to trust that a sequencer who staked their stake to produce a block is not willing to lose it. Nodes that only update their state based on proof validation on L1 require the least hardware. They have the same requirements as an Ethereum node, and once Ethereum light nodes become a reality, maintaining such a node could be as simple as using a smartphone. The only tradeoff is higher latency. Proofs are sent to Ethereum intermittently, not for every block, resulting in delayed state updates. Plans are in place to produce proofs more frequently, even if they are not sent to Ethereum immediately, lowering node latency.","title":"Starknet architecture: Overview","component":"ROOT","version":"","name":"starknet-architecture-overview","url":"/architecture-and-concepts/network-architecture/starknet-architecture-overview/","titles":[{"text":"Transaction flow","hash":"transaction_flow","id":1},{"text":"Starknet’s state","hash":"starknets_state","id":2},{"text":"Sequencers","hash":"sequencers","id":3},{"text":"Provers","hash":"provers","id":4},{"text":"Optimizing sequencers and provers: Debunking common misconceptions","hash":"optimizing_sequencers_and_provers_debunking_common_misconceptions","id":5},{"text":"Nodes","hash":"nodes","id":6},{"text":"Nodes that replay transactions","hash":"nodes_that_replay_transactions","id":7},{"text":"Nodes that rely on L2 consensus","hash":"nodes_that_rely_on_l2_consensus","id":8},{"text":"Nodes that check proof validation on L1","hash":"nodes_that_check_proof_validation_on_l1","id":9}]},"65":{"id":65,"text":"Starknet’s state consists of: Contract classes a mapping between the class hash and the class definition Contract instances a mapping between addresses (251-bit field elements) and the contract’s state A contract instance’s state consists of: Class hash defines the functionality of the contract Contract storage a key-value mapping where the key/values are field elements Contract nonce the number of transactions sent from this contract A transaction \\(tx\\) transitions the system from state \\(S\\) to state \\(S'\\) if: \\(tx\\) is an Invoke transaction, and the storage of \\(S'\\) is the result of executing the target contract code with respect to the previous state \\(S\\). The arguments, contract instance’s address, and the specific function entry point are part of the transaction. \\(tx\\) is a Deploy account transaction, and \\(S'\\) contains the new contract instance’s state at the contract instance’s address. Additionally, the storage of \\(S\\) is updated according to the execution of the contract instance’s constructor. \\(tx\\) is a Declare transaction, and \\(S'\\) contains the class hash and definition in the contract class’s mapping The state commitment is a digest that represents the state. In Starknet, the state commitment combines the roots of two binary Merkle-Patricia tries of height 251 in the following manner: state_commitment = hPos( \"STARKNET_STATE_V0\", contract_trie_root, class_trie_root ) Where: hPos is the Poseidon hash function. STARKNET_STATE_V0 is a constant prefix string encoded in ASCII (and represented as a field element). contract_trie_root is the root of the contract trie, a Merkle-Patricia trie whose leaves are the contracts' states. class_trie_root is the root of the class trie, a Merkle-Patricia trie whose leaves are the compiled class hashes. As with Ethereum, this trie is a two-level structure, whose leaves correspond to distinct contracts. The address of each contract determines the path from the trie’s root to its corresponding leaf, whose content encodes the contract’s state. The information stored in the leaf is as follows: hPed( hPed( hPed( class_hash, storage_root ), nonce ), 0 ) Where: hPed is the Pedersen hash function. class_hash is the hash of the contract’s definition. storage_root is the root of another Merkle-Patricia trie of height 251 that is constructed from the contract’s storage. nonce is the current nonce of the contract. The class trie encodes the information about all existing classes in Starknet’s state. This trie maps class hashes to their compiled class hashes. The information stored in a leaf at a path corresponding to some class hash is as follows: hPos( CONTRACT_CLASS_LEAF_V0, compiled_class_hash ) Where: hPos is the Poseidon hash function CONTRACT_CLASS_LEAF_V0 is a constant prefix string encoded in ASCII (and represented as a field element). compiled_class_hash is the hash of the Cairo assembly resulting from compiling the given class via the Sierra-to-Casm compiler. Compiled class hash The compiled class hash identifies the output of a specific Casm compilation as unique. Cairo classes that are part of the state commitment are defined with Sierra, an intermediate representation between Cairo and Cairo assembly (Casm). However, the prover only works with Casm. So in order to prevent needing to compile from Sierra to Casm in every block in which the class is used, the state commitment must have some information about the corresponding Cairo assembly. The compiled class hash provides this information. For more information, see Cairo and Sierra. The party that declares the contract signs the compiled class hash, which they obtain using an SDK, as part of the DECLARE transaction. If the transaction is included in a block, then the compiled class hash becomes part of the state commitment. In the future, when Sierra-to-Casm compilation becomes part of the Starknet OS, this value might be updated via a proof of the Sierra-to-Casm compiler execution, showing that compiling the same class with a newer compiler version results in some new compiled class hash. The state commitment scheme uses a binary Merkle-Patricia trie with the Pedersen hash function. Each node in the trie is represented by a triplet \\((length, path, value)\\), where: \\(length\\) is the length of the path, measured in nodes. \\(path\\) is the path from the current node to its unique non-empty subtrie. \\(path\\) is an integer in the set \\(\\{0,\\ldots,2^{length}-1\\}\\), and the binary expansion of \\(path\\) indicates how to proceed along the trie, as follows: Expand \\(path\\) to its binary representation. Starting with the most significant bit, representing the root of the trie, traverse the tree node by node, where the bit values \\(0\\) and \\(1\\) indicate left and right, respectively. \\(value\\) is the value of the node, which can be either data, or the hash of two non-empty child nodes. An empty node is one whose triplet values are \\((0,0,0)\\). Leaf nodes and internal nodes can be empty. A subtrie rooted at a node \\((length, path, value)\\) has a single non-empty subtrie, rooted at the node obtained by following the path specified by \\(path\\). Length is specified, and cannot be deduced from \\(path\\), because the numbers in the triplet \\((length, path, value)\\) are field elements of fixed size, 251 bits each. For a node where \\(length>0\\), \\(path\\) leads to the highest node whose left and right children are not empty. The following rules specify how the trie is constructed from a given set of leaves: The hash of a node \\(N =(length, path, value)\\), denoted by \\(H(N)\\), is: \\[H(N)=\\begin{cases} value, & \\text{if } length = 0 \\\\ h_{Ped}(value, path) + length, & \\text{otherwise} \\end{cases}\\] All arithmetic operations in the above description of \\(H\\) are done in the STARK field, as described in The STARK field. The triplet representing the parent of the nodes \\(left=(\\ell_L, p_L, v_L)\\), \\(right=(\\ell_R, p_R, v_R)\\) is defined as follows: \\[parent= \\begin{cases} (0,0,0), & \\text{if } left=right=(0,0,0)\\\\ (\\ell_L + 1, p_L, v_L), & \\text{if } right=(0,0,0) \\text{ and } left \\neq (0,0,0)\\\\ (\\ell_R + 1, p_R + 2^{\\ell_R}, v_R), & \\text{if } right\\neq (0,0,0) \\text{ and } left = (0,0,0)\\\\ (0, 0, h_{Ped}(H(left), H(right))), & \\text{otherwise} \\end{cases}\\] The diagram A three-level Merkle-Patricia trie illustrates the construction of a three-level-high Merkle-Patricia trie from the leaves whose values are \\((0,0,1,0,0,1,0,0)\\): Figure 1. A three-level Merkle-Patricia trie Where \\(r=h_{Ped}(H(2,2,1),H((2,1,1))\\). Notice that the example does not skip from the root, whose length is zero, so the final state commitment to the trie is \\(H((0,0,r))=r\\). Suppose that you want to prove, with respect to the state commitment just computed, that the value of the leaf whose path is given by \\(101\\) is \\(1\\). In a standard Merkle trie, the proof would consist of data from three nodes, which are siblings along the path to the root. In a Merkle-Patricia trie, because the trie is sparse, you only need to send the two children of the root, which are \\((2,2,1)\\) and \\((2,1,1)\\). These two children are enough to reproduce the state commitment \\(r\\), and because you know that the height of the trie is three, and that it is fixed, you know that the path \\(01\\) of length \\(2\\) specified by the right-hand child, \\((2,1,1)\\), leads to the desired leaf. Starknet uses special contract addresses to provide distinct capabilities beyond regular contract deployment. Two such addresses are 0x0 and 0x1. These addresses are reserved for specific purposes and are characterized by their unique behavior in comparison to traditional contract addresses. Address 0x0 functions as the default caller_address for external calls, including interactions with the L1 handler or deprecated Deploy transactions. Unlike regular contracts, address 0x0 does not possess a storage structure and does not accommodate storage mapping. Address 0x1 is another special contract address within Starknet’s architecture. It functions as a storage space for mapping block numbers to their corresponding block hashes. The storage structure at this address is organized as follows: Keys Block numbers between \\(\\text{first_v0_12_0_block}\\) and \\(\\text{current_block - 10}\\). Values Corresponding block hashes for the specified blocks. Default Values For all other block numbers, the values are set to 0. The storage organization of address 0x1 supports the efficient retrieval of block hashes based on block numbers within a defined range and is also used by the get_block_hash system call.","title":"Starknet state","component":"ROOT","version":"","name":"starknet-state","url":"/architecture-and-concepts/network-architecture/starknet-state/","titles":[{"text":"Transitioning to a new state","hash":"transitioning_to_a_new_state","id":1},{"text":"State commitment","hash":"state_commitment","id":2},{"text":"The contract trie","hash":"contracts_trie","id":3},{"text":"The class trie","hash":"classes_trie","id":4},{"text":"Merkle-Patricia trie","hash":"merkle_patricia_trie","id":5},{"text":"About nodes","hash":"about_nodes","id":6},{"text":"Trie construction","hash":"trie_construction","id":7},{"text":"Mathematical definition of the nodes in the trie","hash":"mathematical_definition_of_the_nodes_in_the_trie","id":8},{"text":"Example trie","hash":"example_trie","id":9},{"text":"Special addresses","hash":"special_addresses","id":10},{"text":"Address 0x0","hash":"address_0x0","id":11},{"text":"Address 0x1","hash":"address_0x1","id":12}]},"66":{"id":66,"text":"The high-level steps in the Starknet transaction lifecycle are as follows: Transaction submission: A transaction is submitted to one of the gateways, which functions as the mempool, and marks the transaction status as RECEIVED. Mempool validation: The mempool performs a preliminary validation on the transaction, such as ensuring that the current account balance exceeds the value of max_fee (prior to v3 transactions) or assuring the transaction’s calldata length is within the legal limit. If the transaction is invalid, it does not proceed. Mempool validation in this context is analogous to Ethereum’s signature checking, including running the account’s __validate__ function on an INVOKE transaction, __validate_declare__ on a DECLARE transaction, or __validate_deploy__ on a DEPLOY_ACCOUNT transaction, ensuring that the current account balance exceeds the value of max_fee (prior to v3 transactions), and more. Sequencer validation: The sequencer performs preliminary validation on the transaction before executing it to ensure that the transaction is still valid. If the transaction is invalid, it does not proceed. This validation stage repeats the same validation run during the mempool validation. Execution: The sequencer operation sequentially applies all transactions that passed the preliminary validation to the state. If a transaction fails during execution, it is included in the block with the status REVERTED. Proof generation and verification: The Prover executes the operating system on the new block, computes the proof, and transmits it to the L1 verifier, which verifies the proof. At this point, the L1 state is updated to include the transaction. The diagram below illustrates how each transaction status fits into the overall transaction flow: The following are the possible statuses of a transaction from the moment a user sends it until the moment it passes the L1 verifier: Status type Status Explanation Finality NOT_RECEIVED The transaction is not yet known to the sequencer. RECEIVED The transaction was received by the mempool. The transaction now either executes successfully, is rejected, or reverted. The transaction has no execution status. REJECTED The transaction was received by the mempool but failed validation in the sequencer. Such transactions are not included in a block. The transaction has no execution status. A rejected transaction is stored in the mempool. You cannot send another transaction with the same transaction hash. ACCEPTED_ON_L2 The transaction was executed and entered an actual created block on L2. ACCEPTED_ON_L1 The transaction was accepted on Ethereum. Execution REVERTED The transaction passed validation but failed during execution in the sequencer. It is included in the block with the status REVERTED. Since only INVOKE transactions have an execution phase, DEPLOY_ACCOUNT and DECLARE transactions cannot be reverted. If either the __VALIDATE_DEPLOY__ or the __VALIDATE_DECLARE__ function fails when run in the sequencer, then the transaction is rejected. SUCCEEDED The transaction was successfully executed by the sequencer. It is included in the block. When a transaction is marked as REVERTED, the following state implications occur: Nonce increases The nonce value for the account of the failed transaction iterates despite the failure. Fee charge The sequencer charges a fee for the execution of the transaction up to the point of failure. A Transfer event is emitted. Partial reversion All changes that occurred during the validation stage are not reverted. However, all changes that occurred during the execution stage are reverted, including all messages to L1 or any events that were emitted during this stage. Events might still be emitted from the validation stage or the fee charge stage. Fee calculation The fee charged for REVERTED transactions is the smaller of the following two values: The maximum fee that the user is willing to pay, either max_fee (pre-v3 transactions) or \\(\\text{max_amount} \\cdot \\text{max_price_per_unit}\\) (v3 transactions). The total consumed resources. Consumed Resources The resources used for the execution of the transaction up to the point of failure. This includes Cairo steps, builtins, syscalls, L1 messages, events, and state diffs during the validation and execution stages. To get a receipt, use the JSON RPC method starknet_getTransactionReceipt. The transaction receipt contains the following fields: transaction_hash The hash of the transaction. actual_fee The actual fee paid for the transaction. finality_status The finality status of the transaction. execution_status The execution status of the transaction. block_hash The hash of the block that includes the transaction block_number The sequential number of the block that includes the transaction messages_sent A list of messages sent to L1. events The events emitted. execution_resource A summary of the execution resources used by the transaction. type The type of the transaction. The following is an example of a receipt: { \"jsonrpc\": \"2.0\", \"result\": { \"actual_fee\": \"0x221db5dbf6db\", \"block_hash\": \"0x301fc0d09c5810600af7bb9610be10596ad6f4e6d28a60d397dd148f0962a88\", \"block_number\": 906096, \"events\": [ { \"data\": [ \"0x181de8b0cd32999a5cc962c5f724bc0f6a322f02957b80e1d5fef49a87588b7\", \"0x0\", \"0x9184e72a000\", \"0x0\" ], \"from_address\": \"0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\", \"keys\": [ \"0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9\" ] }, { \"data\": [ \"0x764da020183e28a48ee38a9474f84e7e5ff13194\", \"0x9184e72a000\", \"0x0\", \"0x181de8b0cd32999a5cc962c5f724bc0f6a322f02957b80e1d5fef49a87588b7\" ], \"from_address\": \"0x73314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82\", \"keys\": [ \"0x194fc63c49b0f07c8e7a78476844837255213824bd6cb81e0ccfb949921aad1\" ] }, { \"data\": [ \"0x181de8b0cd32999a5cc962c5f724bc0f6a322f02957b80e1d5fef49a87588b7\", \"0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8\", \"0x221db5dbf6db\", \"0x0\" ], \"from_address\": \"0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\", \"keys\": [ \"0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9\" ] } ], \"execution_status\": \"SUCCEEDED\", \"finality_status\": \"ACCEPTED_ON_L2\", \"messages_sent\": [ { \"from_address\": \"0x73314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82\", \"payload\": [ \"0x0\", \"0x764da020183e28a48ee38a9474f84e7e5ff13194\", \"0x9184e72a000\", \"0x0\" ], \"to_address\": \"0xc3511006c04ef1d78af4c8e0e74ec18a6e64ff9e\" } ], \"transaction_hash\": \"0xdeadbeef\", \"type\": \"INVOKE\" }, \"id\": 1 }","title":"Transaction lifecycle","component":"ROOT","version":"","name":"transaction-life-cycle","url":"/architecture-and-concepts/network-architecture/transaction-life-cycle/","titles":[{"text":"Transaction flow","hash":"transaction_flow","id":1},{"text":"Transaction status","hash":"transaction_status","id":2},{"text":"State implications of a reverted transaction","hash":"transaction-state-implications","id":3},{"text":"Transaction receipt","hash":"transaction_receipt","id":4}]},"67":{"id":67,"text":"Starknet supports the following types of transactions, as defined in the Starknet API: DECLARE Declares new contract classes, enabling new contract instances. INVOKE Invokes an existing function in a contract. DEPLOY_ACCOUNT Deploys new account contracts in smart wallets. To see how these transaction types appear in the Starknet API, see starknet_api_openrpc.json. This topic describes the available fields for these transaction types and how each transaction’s hash is calculated. When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases. Deprecated transaction versions are still supported, but support will be removed in a future release of Starknet. Table 1. Supported versions of Starknet transaction types Transaction name Current version Deprecated versions Unsupported versions INVOKE v3 v1, v0 N/A DECLARE v3 v2, v1 v0 DEPLOY_ACCOUNT v3 v0 N/A DEPLOY N/A N/A v0 Additionally, see information on the L1 handler transaction type. Do not submit a transaction that uses an unsupported transaction type, because it cannot be included in a proof, and so cannot become part of a Starknet block. While the L1HandlerTransaction type is a valid transaction type within Starknet, be aware that it cannot be broadcast through the Starknet API like the other transaction types listed in the table above. This transaction type is specifically designed for internal Starknet operations, particularly for handling messages from L1 to L2. For more details, refer to the L1 handler transaction page. The INVOKE transaction type invokes a function in an existing contract instance. The contract code of the account that sends the INVOKE transaction determines how to process the transaction. Because an account’s __validate__ and __execute__ functions can contain any logic, the account ultimately determines how to handle the INVOKE transaction. Every INVOKE transaction in Starknet undergoes the validation and execution stages, initiated by the __validate__ and __execute__ functions. The validation stage verifies that the account that sent the transaction approves it. Field name Type Description account_deployment_data List For future use. Currently this value is always empty. For more information, see SNIP 8: Transaction V3 Structure calldata List The arguments that are passed to the validate and execute functions. chain_id FieldElement The id of the chain to which the transaction is sent. fee_data_availability_mode FieldElement For future use. Currently this value is always 0. For more information, see SNIP 8: Transaction V3 Structure nonce FieldElement The transaction nonce. nonce_data_availability_mode FieldElement For future use. Currently this value is always 0. For more information, see SNIP 8: Transaction V3 Structure paymaster_data List For future use. Currently this value is always empty. For more information, see SNIP 8: Transaction V3 Structure resource_bounds Dict[Resource, ResourceBounds] Used for enabling the fee market. A dictionary that maps resource type to resource bounds. The resource is the amount of L1 or L2 gas used to pay for the transaction. Resource A felt. Possible values are the felt representation of the strings L1_GAS or L2_GAS. ResourceBounds A struct containing the following felts: max_amount: The maximum amount of the resource allowed for usage during the execution. max_price_per_unit: The maximum price the user is willing to pay for the resource. L1_GAS and L2_GAS are specified in units of fri, where 1 fri = 10-18 STRK. sender_address FieldElement The address of the account initiating the transaction. signature List` Additional information given by the sender, used to validate the transaction. tip FieldElement For future use. Currently this value is always 0. version FieldElement The transaction’s version. When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases. Transaction version, where n specifies version n transaction. For example: 3 version 3 transaction The INVOKE v3 transaction hash is calculated as a Poseidon hash over the given transaction elements, specifically: invoke_v3_tx_hash = h( \"invoke\", version, nonce, sender_address, h(tip, l1_gas_bounds, l2_gas_bounds), h(paymaster_data), chain_id, data_availability_modes, h(account_deployment_data), h(calldata) ) Where: invoke is a constant prefix string, encoded in ASCII. chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. l1_gas_bounds is constructed as follows: \\[\\underbrace{\\text{L1_GAS}}_{\\text{60 bits}} | \\underbrace{\\text{max_amount}}_{\\text{64 bits}} | \\underbrace{\\text{max_price_per_unit}}_{\\text{128 bits}}\\] l2_gas_bounds is constructed as follows: \\[\\underbrace{\\text{L2_GAS}}_{\\text{60 bits}} | \\underbrace{\\text{max_amount}}_{\\text{64 bits}} | \\underbrace{\\text{max_price_per_unit}}_{\\text{128 bits}}\\] data_availability_modes is a concatenation of fee_data_availability_mode and nonce_data_availability_mode, as follows: \\[\\underbrace{0\\cdots0}_{\\text{188 bits}} | \\underbrace{\\text{nonce_data_availability_mode}}_{\\text{32 bits}} | \\underbrace{\\text{fee_data_availability_mode}}_{\\text{32 bits}}\\] h is the Poseidon hash. Table 2. INVOKE v1 transaction fields Name Type Description sender_address FieldElement The address of the sender of this transaction. calldata List The arguments that are passed to the validate and execute functions. signature List Additional information given by the sender, used to validate the transaction. max_fee FieldElement The maximum fee that the sender is willing to pay for the transaction nonce FieldElement The transaction nonce. version FieldElement The transaction’s version. The value is 1. When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases. The INVOKE v1 transaction hash is calculated as a hash over the given transaction elements, specifically: invoke_v1_tx_hash = h( \"invoke\", version, sender_address, 0, h(calldata), max_fee, chain_id, nonce ) Where: invoke is a constant prefix string, encoded in ASCII. The placeholder zero is used to align the hash computation for the different types of transactions. chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. h is the Pedersen hash The hash of a v0 INVOKE transaction is computed as follows: invoke_v0_tx_hash = h( \"invoke\", version, contract_address, entry_point_selector, h(calldata), max_fee, chain_id ) Where: invoke is a constant prefix string, encoded in (ASCII). chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. v2 and v3 h is the Pedersen hash The DECLARE transaction introduces new contract classes into the state of Starknet, enabling other contracts to deploy instances of those classes or use them in a library call. For more information, see contract classes. Field name Type Description account_deployment_data List For future use. Currently this value is always empty. For more information, see SNIP 8: Transaction V3 Structure chain_id FieldElement The id of the chain to which the transaction is sent. compiled_class_hash FieldElement The hash of the compiled class. For more information, see Class hash. contract_class ContractClass The class definition. For more information, see Class hash. fee_data_availability_mode FieldElement For future use. Currently this value is always 0. For more information, see SNIP 8: Transaction V3 Structure nonce FieldElement The transaction nonce. nonce_data_availability_mode FieldElement For future use. Currently this value is always 0. For more information, see SNIP 8: Transaction V3 Structure paymaster_data List For future use. Currently this value is always empty. For more information, see SNIP 8: Transaction V3 Structure resource_bounds Dict[Resource, ResourceBounds] Used for enabling the fee market. A dictionary that maps resource type to resource bounds. The resource is the amount of L1 or L2 gas used to pay for the transaction. Resource A felt. Possible values are the felt representation of the strings L1_GAS or L2_GAS. ResourceBounds A struct containing the following felts: max_amount: The maximum amount of the resource allowed for usage during the execution. max_price_per_unit: The maximum price the user is willing to pay for the resource. L1_GAS and L2_GAS are specified in units of fri, where 1 fri = 10-18 STRK. sender_address FieldElement The address of the account initiating the transaction. signature List` Additional information given by the sender, used to validate the transaction. tip FieldElement For future use. Currently this value is always 0. version FieldElement The transaction’s version. When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases. Transaction version, where n specifies version n transaction. For example: 3 version 3 transaction The hash of a v3 DECLARE transaction is computed as follows: declare_v3_tx_hash = h( \"declare\", version, sender_address, h(tip, l1_gas_bounds, l2_gas_bounds), h(paymaster_data), chain_id, nonce, data_availability_modes, h(account_deployment_data), class_hash, compiled_class_hash ) Where: declare is a constant prefix string, encoded in ASCII. chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. l1_gas_bounds is constructed as follows: \\[\\underbrace{\\text{L1_GAS}}_{\\text{60 bits}} | \\underbrace{\\text{max_amount}}_{\\text{64 bits}} | \\underbrace{\\text{max_price_per_unit}}_{\\text{128 bits}}\\] l2_gas_bounds is constructed as follows: \\[\\underbrace{\\text{L2_GAS}}_{\\text{60 bits}} | \\underbrace{\\text{max_amount}}_{\\text{64 bits}} | \\underbrace{\\text{max_price_per_unit}}_{\\text{128 bits}}\\] data_availability_modes is a concatenation of fee_data_availability_mode and nonce_data_availability_mode, as follows: \\[\\underbrace{0\\cdots0}_{\\text{188 bits}} | \\underbrace{\\text{nonce_data_availability_mode}}_{\\text{32 bits}} | \\underbrace{\\text{fee_data_availability_mode}}_{\\text{32 bits}}\\] h is the Poseidon hash. class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed compiled_class_hash is the hash of the compiled class generated by the Sierra→Casm compiler that is used in Starknet Table 3. DECLARE v2 transaction fields Name Type Description chain_id FieldElement The id of the chain to which the transaction is sent. contract_class ContractClass The (Cairo 1.0) class. compiled_class_hash FieldElement The hash of the compiled class (see here for more information) sender_address FieldElement The address of the account initiating the transaction. signature List Additional information given by the sender, used to validate the transaction. max_fee FieldElement The maximum fee that the sender is willing to pay for the transaction. nonce FieldElement The transaction nonce. version FieldElement The transaction’s version. The value is 2. When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases. The hash of a v2 DECLARE transaction is computed as follows: declare_v2_tx_hash = h( \"declare\", version, sender_address, 0, h(class_hash), max_fee, chain_id, nonce, compiled_class_hash ) Where: h is the Poseidon hash function class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed compiled_class_hash is the hash of the compiled class generated by the Sierra→Casm compiler that is used in Starknet This transaction version was used to declare Cairo 0 classes. Table 4. DECLARE v1 transaction fields Name Type Description contract_class ContractClass The class object. sender_address FieldElement The address of the account initiating the transaction. max_fee FieldElement The maximum fee that the sender is willing to pay for the transaction. signature List Additional information given by the sender, used to validate the transaction. nonce FieldElement The transaction nonce. version FieldElement The transaction’s version. Possible values are 1 or 0. When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases. The hash of a v1 DECLARE transaction is computed as follows: declare_v1_tx_hash = h( \"declare\", version, sender_address, 0, h(class_hash), max_fee, chain_id, nonce ) Where: declare is a constant prefix string, encoded in ASCII. class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed. The placeholder zero is used to align the hash computation for the different types of transactions. chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. h is the Pedersen hash This transaction version was used to declare Cairo 0 classes. The hash of a v0 DECLARE transaction is computed as follows: declare_v0_tx_hash = h( \"declare\", version, sender_address, 0, h(), max_fee, chain_id, class_hash ) Where: declare is a constant prefix string, encoded in ASCII. The placeholder zeros are used to align the hash computation for the different types of transactions. h is the Pedersen hash chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed. Since StarkNet v0.10.1 the DEPLOY_ACCOUNT transaction replaces the DEPLOY transaction for deploying account contracts. To use it, you should first pre-fund your new account address so that you can pay the transaction fee. You can then send the DEPLOY_ACCOUNT transaction. For more information, see Deploying a new account. Field name Type Description chain_id FieldElement The id of the chain to which the transaction is sent. class_hash FieldElement The hash of the desired account class. For more information, see Class hash. constructor_calldata List The arguments to the account constructor. contract_address_salt FieldElement A random salt that determines the account address. fee_data_availability_mode FieldElement For future use. Currently this value is always 0. For more information, see SNIP 8: Transaction V3 Structure nonce FieldElement The transaction nonce. nonce_data_availability_mode FieldElement For future use. Currently this value is always 0. For more information, see SNIP 8: Transaction V3 Structure paymaster_data List For future use. Currently this value is always empty. For more information, see SNIP 8: Transaction V3 Structure resource_bounds Dict[Resource, ResourceBounds] Used for enabling the fee market. A dictionary that maps resource type to resource bounds. The resource is the amount of L1 or L2 gas used to pay for the transaction. Resource A felt. Possible values are the felt representation of the strings L1_GAS or L2_GAS. ResourceBounds A struct containing the following felts: max_amount: The maximum amount of the resource allowed for usage during the execution. max_price_per_unit: The maximum price the user is willing to pay for the resource. L1_GAS and L2_GAS are specified in units of fri, where 1 fri = 10-18 STRK. signature List` Additional information given by the sender, used to validate the transaction. tip FieldElement For future use. Currently this value is always 0. version FieldElement The transaction’s version. When the fields that comprise a transaction change, either with the addition of a new field or the removal of an existing field, then the transaction version increases. Transaction version, where n specifies version n transaction. For example: 3 version 3 transaction The hash of a DEPLOY_ACCOUNT transaction is computed as follows: deploy_account_v3_tx_hash = h( \"deploy_account\", version, contract_address, h(tip, l1_gas_bounds, l2_gas_bounds), h(paymaster_data), chain_id, nonce, data_availability_modes, h(constructor_calldata), class_hash, contract_address_salt ) Where: deploy_account is a constant prefix string, encoded in ASCII. chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. l1_gas_bounds is constructed as follows: \\[\\underbrace{\\text{L1_GAS}}_{\\text{60 bits}} | \\underbrace{\\text{max_amount}}_{\\text{64 bits}} | \\underbrace{\\text{max_price_per_unit}}_{\\text{128 bits}}\\] l2_gas_bounds is constructed as follows: \\[\\underbrace{\\text{L2_GAS}}_{\\text{60 bits}} | \\underbrace{\\text{max_amount}}_{\\text{64 bits}} | \\underbrace{\\text{max_price_per_unit}}_{\\text{128 bits}}\\] data_availability_modes is a concatenation of fee_data_availability_mode and nonce_data_availability_mode, as follows: \\[\\underbrace{0\\cdots0}_{\\text{188 bits}} | \\underbrace{\\text{nonce_data_availability_mode}}_{\\text{32 bits}} | \\underbrace{\\text{fee_data_availability_mode}}_{\\text{32 bits}}\\] h is the Poseidon hash. class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed. contract_address is the address of the newly deployed account. For information on how this address is calculated, see Contract address. Table 5. DEPLOY_ACCOUNT transaction fields Name Type Description class_hash FieldElement The hash of the desired account class. constructor_calldata List The arguments to the account constructor. contract_address_salt FieldElement A random salt that determines the account address. signature List Additional information given by the sender, used to validate the transaction. max_fee FieldElement The maximum fee that the sender is willing to pay for the transaction nonce FieldElement The transaction nonce. version FieldElement The transaction’s version. The value is 1. The hash of a DEPLOY_ACCOUNT transaction is computed as follows: deploy_account_v1_tx_hash = h( \"deploy_account\", version, contract_address, 0, h(class_hash, contract_address_salt, constructor_calldata), max_fee, chain_id, nonce ) Where: deploy_account is a constant prefix string, encoded in ASCII. The placeholder zero is used to align the hash computation for the different types of transactions. h is the Pedersen hash chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. class_hash is the hash of the contract class. See Class Hash for details about how the hash is computed. If you need to retrieve the hash of an existing DEPLOY transaction, you can use this information to calculate the hash of the transaction. Before you can calculate the transaction hash, get the deployed contract address. The DEPLOY transaction’s hash is calculated as shown in the following pseudo code: deploy_tx_hash = h( \"deploy\", version, contract_address, sn_keccak(\"constructor\"), h constructor_calldata), 0, chain_id ) Where: The placeholder zero is used to align the hash computation for the different types of transactions. deploy and constructor are constant strings encoded in ASCII. h is the Pedersen hash and sn_keccak is Starknet Keccak. chain_id is a constant value that specifies the network to which this transaction is sent. See Chain-Id. contract_address is calculated as described here. While Starknet does not have a specific signature scheme built into the protocol, the Cairo language, in which smart contracts are written, does have an efficient implementation for ECDSA signature with respect to a STARK-friendly curve. The generator used in the ECDSA algorithm is \\(G=\\left(g_x, g_y\\right)\\) where: \\(g_x=874739451078007766457464989774322083649278607533249481151382481072868806602\\) \\(g_y=152666792071518830868575557812948353041420400780739481342941381225525861407\\) Estimate the fees of transactions with the starknet_estimateFee API call, which is part of Starknet’s API v0.7.0 and above. For more information, see the Starknet JSON RPC specification. For more information on how to construct the appropriate resource_bounds based on the response of starknet_estimateFee, see How to use the new fee estimates? on the Starknet community forum. Chain IDs are given as numbers, representing the ASCII encoding of specific constant strings, as illustrated by the following Python snippet: chain_id = int.from_bytes(value, byteorder=\"big\", signed=False) The following constants are currently used. They correspond to the chain IDs that Starknet currently supports: SN_MAIN for Starknet’s main network. SN_SEPOLIA for Starknet’s public testnet on Sepolia. Sepolia testnet replaces Goerli testnet. Goerli testnet support is now removed. For more information, including bridge support for Sepolia, see Starknet Goerli Deprecation in the Starknet Dev News newsletter.","title":"Transaction types","component":"ROOT","version":"","name":"transactions","url":"/architecture-and-concepts/network-architecture/transactions/","titles":[{"text":"Transaction versions","hash":"transaction_versioning","id":1},{"text":"INVOKE transaction","hash":"invoke_transaction","id":2},{"text":"v3 transaction fields","hash":"v3_transaction_fields","id":3},{"text":"v3 hash calculation","hash":"v3_hash_calculation","id":4},{"text":"v1 (deprecated) transaction fields","hash":"v1_deprecated_transaction_fields","id":5},{"text":"v1 (deprecated) hash calculation","hash":"v1_deprecated_hash_calculation","id":6},{"text":"v0 (deprecated) hash calculation","hash":"v0_deprecated_hash_calculation","id":7},{"text":"DECLARE transaction","hash":"declare-transaction","id":8},{"text":"v3 transaction fields","hash":"v3_transaction_fields_2","id":9},{"text":"v3 hash calculation","hash":"v3_hash_calculation_2","id":10},{"text":"v2 (deprecated) transaction fields","hash":"declare_v2","id":11},{"text":"v2 (deprecated) hash calculation","hash":"v2_deprecated_hash_calculation","id":12},{"text":"v1 (deprecated) transaction fields","hash":"v1_deprecated_transaction_fields_2","id":13},{"text":"v1 (deprecated) hash calculation","hash":"v1_deprecated_hash_calculation_2","id":14},{"text":"v0 (unsupported) hash calculation","hash":"v0_unsupported_hash_calculation","id":15},{"text":"DEPLOY_ACCOUNT transaction","hash":"deploy_account_transaction","id":16},{"text":"v3 transaction fields","hash":"v3_transaction_fields_3","id":17},{"text":"v3 hash calculation","hash":"v3_hash_calculation_3","id":18},{"text":"v1 (deprecated) transaction fields","hash":"v1_deprecated_transaction_fields_3","id":19},{"text":"v1 (deprecated) hash calculation","hash":"v1_deprecated_hash_calculation_3","id":20},{"text":"DEPLOY (unsupported) transaction hash calculation","hash":"deploy_transaction","id":21},{"text":"Signature","hash":"signature","id":22},{"text":"v3 transaction fee estimation","hash":"v3-fee-estimation","id":23},{"text":"Chain ID","hash":"chain-id","id":24}]},"68":{"id":68,"text":"Before Starknet Alpha v0.11.0 a developer would write contracts in Cairo 0 and compile them locally to Cairo assembly (or Casm for short). Next, the developer would submit the compilation output, the contract class, to the Starknet sequencer via a DECLARE transaction. Starting with Cairo 1.0, the contract class resulting from compiling Cairo 1.0 does not include Casm. Instead of Casm, it includes instructions in an intermediate representation called Safe Intermediate Representation, Sierra for short. This new contract class is then compiled by the sequencer, via the Sierra → Casm compiler, to generate the Cairo assembly associated with this class. The Casm code is then executed by the Starknet OS. Starknet is a validity rollup, which means that the execution inside every block needs to be proven, and this is where STARKs come in handy. However, STARK proofs can address statements that are formulated in the language of polynomial constraints, and have no knowledge of smart contract execution. To overcome this gap, we developed Cairo. Cairo instructions, previously referred to as Casm, are translated to polynomial constraints that enforce the correct execution of a program according to the Cairo semantics defined in Cairo-a Turing-complete STARK-friendly CPU architecture. Thanks to Cairo, we can formulate the statement \"This Starknet block is valid\" in a way that we can prove. Be aware that we can only prove things about Casm. That is, regardless of what the user sends to the Starknet sequencer, what’s proven is the correct Casm execution. This means that we need a way to translate Sierra into Casm, and this is achieved with the Sierra → Casm compiler. To understand why we chose to add an additional layer between the code that the user writes (Cairo 1.0) and the code that is being proven (Casm), we need to consider more components in the system, and the limitations of Cairo. A crucial property of every decentralized L2 is that the sequencers are guaranteed to be compensated for the work they do. The notion of reverted transactions is a good example: even if the user’s transaction failed mid execution, the sequencer should be able to include it in a block and charge execution fees up to the point of failure. If the sequencer cannot charge for such transactions, then sending transactions that will eventually fail (after a lot of computation steps) is an obvious DoS attack on the sequencer. The sequencer cannot look at a transaction and conclude that it would fail without actually doing the work (this is equivalent to solving the halting problem). The obvious solution to the above predicament is to include such transactions in the block, similar to Ethereum. However, this may not be as simple to do in a validity rollup. With Cairo 0, there is no separating layer between user code and what is being proven. This means that users can write code which is unprovable in some cases. In fact, such code is very easy to write, e.g. assert 0=1 is a valid Cairo instruction that cannot be proven, as it translates to polynomial constraints that are not satisfiable. Any Casm execution that contains this instruction cannot be proven. Sierra is the layer between user code and the provable statement, that allows us to make sure all transactions are eventually provable. The method by which Sierra guarantees that user code is always provable is by compiling Sierra instructions to a subset of Casm, which we call \"safe Casm\". The important property that we require from safe Casm is being provable for all inputs. A canonical example for safe Casm is using if/else instructions instead of assert, that is, making sure all failures are graceful. To better understand the considerations that go into designing the Sierra → Casm compiler, consider the find_element function from the common library of Cairo 0: func find_element{range_check_ptr}(array_ptr: felt*, elm_size, n_elms, key) -> (elm_ptr: felt*) { alloc_locals; local index; %{ ... %} assert_nn_le(a=index, b=n_elms - 1); tempvar elm_ptr = array_ptr + elm_size * index; assert [elm_ptr] = key; return (elm_ptr=elm_ptr); } Below we abuse the \"Casm\" notation by not distinguishing Cairo 0 from Casm and referring to the above as Casm (while we actually refer to the compilation result of the above). For brevity, we have omitted the hint in the above snippet, but it’s clear that this function can only execute correctly if the requested element exists in the array (otherwise it would fail for every possible hint - there is nothing we can substitute index for, that makes the following lines run successfully). Such Casm cannot be generated by the Sierra→Casm compiler. Furthermore, simply replacing the assertion with an if/else statement doesn’t do, as this results in non-deterministic execution. That is, for the same input, different hint values can yield different results. A malicious prover can use this freedom to harm the user - in this example, they are able to make it seem as if an element isn’t part of the array, even though it actually is. The safe Casm for finding an element in an array behaves like the above snippet in the happy flow (element is there): an index is given in a hint, and we verify that the array at the hinted index contains the requested element. However, in the unhappy flow (element isn’t there), we must go over the entire array to verify this. This was not the case in Cairo 0, as we were fine with certain paths not being provable (in the above snippet, the unhappy flow in which the element isn’t in the array is never provable). Sierra’s gas metering adds further complications to the above example. Even looking through the array to verify that the element isn’t there may leave some flexibility to the prover. If we take gas limitations into consideration, the user may have enough gas for the happy flow, but not for the unhappy one, making the execution stop mid-search, and allowing the prover to get away with lying about the element not being present. The way we plan to handle this is by requiring the user to have enough gas for the unhappy flow before actually calling find_element. Smart contracts written with Cairo 1.0 cannot contain user defined hints. This is already true with Cairo 0 contracts (only whitelisted hints are accepted), but with Cairo 1.0 the hints in use are determined by the Sierra → Casm compiler. Since this compilation is there to ensure that only \"safe\" Casm is generated, there is no room for hints that are not generated by the compiler. In the future, native Cairo 1.0 may contain hint syntax similar to Cairo 0, but it will not be available in Starknet smart contracts (L3s on top of Starknet may make use of such functionality). Note that this is currently not part of Starknet’s roadmap.","title":"Cairo and Sierra","component":"ROOT","version":"","name":"cairo-and-sierra","url":"/architecture-and-concepts/smart-contracts/cairo-and-sierra/","titles":[{"text":"Why do we need Casm?","hash":"why_do_we_need_casm","id":1},{"text":"Why do we need Sierra?","hash":"why_do_we_need_sierra","id":2},{"text":"Reverted transactions, unsatisfiable AIRs, and DoS attacks","hash":"reverted_transactions_unsatisfiable_airs_and_dos_attacks","id":3},{"text":"Safe Casm","hash":"safe_casm","id":4},{"text":"Hints in Cairo 1.0","hash":"hints_in_cairo_1_0","id":5}]},"69":{"id":69,"text":"Builtins in Cairo are predefined optimized low-level execution units that the Cairo VM refers to in order to perform predefined computations that are expensive to perform in standard Cairo. Builtins enhance the functionality of the Cairo VM, enabling you to perform certain tasks, such as using the Poseidon hash, range-checks, or ECDSA signature verifications, more efficiently, using fewer trace cells. In contrast to CairoZero, where you needed to consciously write code to take advantage of builtin optimizations, in Cairo, you simply write code without doing anything special, and when the Cairo VM executes the code, certain operations use builtins internally to optimize your program. Table 1. List of Cairo builtins Name of builtin Description Pedersen Computes the Pedersen hash over two elements. Used internally in pedersen.cairo. For more information see Hash functions. Poseidon Computes the Hades permutation on three field elements. Used internally in poseidon.cairo. For more information, see Hash functions. The Cairo corelib functions use this builtin internally. The Cairo corelib functions are defined in info.cairo in the Cairo GitHub repository. Range check Checks whether a field element is in the range [0,2128-1]. Used when instantiating and comparing the various integer types. All arithmetic comparisons use the range check builtin. ECDSA Verifies the validity of an ECDSA signature over the STARK curve. This is used in CairoZero, but is not used in Cairo because it fails on invalid signatures. In Cairo ECDSA verification is performed with high-level code, applying the EC_OP builtin twice. Keccak Computes the keccak-f[1600] permutation. For more information see Keccak page on the Keccak Team site. For high level Cairo keccak functions that use this builtin internally, see keccak.cairo in the Cairo corelib. Bitwise Computes the bitwise operations OR, AND, and XOR of two felts. Used internally when performing bitwise operations using the ` , `& and ^ operators. EC_OP","title":"Cairo builtins","component":"ROOT","version":"","name":"cairo-builtins","url":"/architecture-and-concepts/smart-contracts/cairo-builtins/","titles":[]},"70":{"id":70,"text":"The class hash is a hash chain of the components that define the class. Classes written in Cairo are compiled into Sierra code. The Sierra code generated is an intermediate representation of the class. This new contract class is then compiled by the sequencer, via the Sierra → Casm compiler, to generate the Cairo assembly associated with this class. The resulting Casm code is then executed by the Starknet OS. For information on how the compiler converts code from Cairo to Sierra, see Cairo and Sierra. The components that define a class are: contract_class_version The version of the contract class object. Currently, the Starknet OS supports version 0.1.0 Array of external functions entry points An entry point is a pair (selector, function_idx), where function_idx is the index of the function inside the Sierra program. The selector is an identifier through which the function is callable in transactions or in other classes. The selector is the starknet_keccak hash of the function name, encoded in ASCII. Array of L1 handlers entry points - Array of constructors entry points Currently, the compiler allows only one constructor. ABI A string representing the ABI of the class. The ABI hash (which affects the class hash) is given by: starknet_keccak(bytes(ABI, \"UTF-8\")) This string is supplied by the user declaring the class (and is signed on as part of the DECLARE transaction), and is not enforced to be the true ABI of the associated class. Without seeing the underlying source code (i.e. the Cairo code generating the class’s Sierra), this ABI should be treated as the \"intended\" ABI by the declaring party, which may be incorrect (intentionally or otherwise). The \"honest\" string would be the json serialization of the contract’s ABI as produced by the Cairo compiler. Sierra program An array of field elements representing the Sierra instructions. The hash of the class is the chain hash of its components, computed as follows: class_hash = ℎ( contract_class_version, external_entry_points, l1_handler_entry_points, constructor_entry_points, abi_hash, sierra_program_hash ) Where \\(h\\) is the Poseidon hash function The hash of an entry point array \\((selector,index)_{i=1}^n\\) is given by \\(h(\\text{selector}_1,\\text{index}_1,...,\\text{selector}_n,\\text{index}_n)\\) The sierra_program_hash is the Poseidon hash of the bytecode array The Starknet OS currently supports contract class version 0.1.0, which is represented in the above hash computation as the ASCII encoding of the string CONTRACT_CLASS_V0.1.0 (hashing the version in this manner gives us domain separation between the hashes of classes and other objects). For more details, see the Cairo implementation.","title":"Class hash","component":"ROOT","version":"","name":"class-hash","url":"/architecture-and-concepts/smart-contracts/class-hash/","titles":[{"text":"Components of a Cairo class definition","hash":"cairo1_class","id":1},{"text":"Computing the Cairo class hash","hash":"computing_the_cairo_1_class_hash","id":2}]},"71":{"id":71,"text":"The compiled class hash is a cryptographic hash that results from the compilation process of a Cairo class from its intermediate representation (Sierra) to Cairo assembly (Casm). This process is managed by the Sierra→Casm compiler. The compiled class hash is crucial for ensuring the uniqueness and integrity of compiled classes within Starknet. Whether you are a developer deploying contracts or a party interested in the inner workings of Starknet’s state commitment, understanding the compiled class hash is essential. For developers, the hash is an important part of the contract declaration process, ensuring that each compiled class is uniquely identifiable and verifiable. For those involved in maintaining the network, it contributes to the efficiency and performance of Starknet by optimizing the state commitment process. The state commitment uses the Sierra code that results when compiling Cairo classes. Sierra acts as an intermediate representation between Cairo and Casm. Provers, however, operate solely with Casm. In order to avoid recompiling, from Sierra to Casm, each block in which the class is deployed, the state commitment gets the information it needs about the corresponding Casm from the the information contained in the compiled class hash. When declaring a contract, the party administering the contract endorses the compiled class hash, procured using an SDK, as an integral component of the DECLARE transaction. Following the inclusion of the transaction in a block, the compiled class hash integrates into the state commitment. Uniqueness: The compiled class hash ensures the uniqueness of each compiled class. It is essentially a fingerprint for the compiled output, allowing the network to verify the integrity and uniqueness of the class. State Commitment: In Starknet, state commitment includes various components, including the Cairo classes. These classes are initially defined using Sierra. However, for the prover to function efficiently, it requires Casm. Efficiency: By including the compiled class hash in the state commitment, Starknet avoids the need to recompile from Sierra to Casm in every block where the class is used. This optimization significantly enhances the network’s efficiency and performance. When a new contract is declared on Starknet, the compiled class hash plays a pivotal role. Here’s how: Declaration Process: The party declaring the contract computes the compiled class hash using an SDK provided by Starknet. DECLARE Transaction: This hash is then included as part of the DECLARE transaction is a specific type of transaction in Starknet used to register new contracts. Inclusion in State Commitment: Once the DECLARE transaction is included in a block, the compiled class hash becomes part of the state commitment. This inclusion ensures that the network recognizes and stores the unique compiled output of the contract. Prospectively, as Sierra-to-Casm compilation integrates into the Starknet OS, the value might undergo updates via proof of the Sierra-to-Casm compiler execution. Such verification demonstrates that compiling the same class with an updated compiler version yields a fresh compiled class hash. The compiled class hash is a basic element in Starknet’s architecture, enabling efficient state commitment and ensuring the integrity and uniqueness of compiled classes.","title":"Compiled class hash","component":"ROOT","version":"","name":"compiled-class-hash","url":"/architecture-and-concepts/smart-contracts/compiled-class-hash/","titles":[{"text":"Purpose and Significance","hash":"purpose_and_significance","id":1},{"text":"Usage","hash":"usage","id":2}]},"72":{"id":72,"text":"A contract ABI is a representation of a Starknet contract interface. It is formatted as JSON and describes the functions, structs and events which are defined in the contract. You can get the contract’s ABI by using starknet-compile: cargo run --bin starknet-compile -- --single-file The following is an example contract ABI: Cairo v2 Cairo v1 [ { \"type\": \"impl\", \"name\": \"CounterContract\", \"interface_name\": \"new_syntax_test_contract::new_syntax_test_contract::ICounterContract\" }, { \"type\": \"interface\", \"name\": \"new_syntax_test_contract::new_syntax_test_contract::ICounterContract\", \"items\": [ { \"type\": \"function\", \"name\": \"increase_counter\", \"inputs\": [ { \"name\": \"amount\", \"type\": \"core::integer::u128\" } ], \"outputs\": [], \"state_mutability\": \"external\" }, { \"type\": \"function\", \"name\": \"decrease_counter\", \"inputs\": [ { \"name\": \"amount\", \"type\": \"core::integer::u128\" } ], \"outputs\": [], \"state_mutability\": \"external\" }, { \"type\": \"function\", \"name\": \"get_counter\", \"inputs\": [], \"outputs\": [ { \"type\": \"core::integer::u128\" } ], \"state_mutability\": \"view\" } ] }, { \"type\": \"constructor\", \"name\": \"constructor\", \"inputs\": [ { \"name\": \"initial_counter\", \"type\": \"core::integer::u128\" }, { \"name\": \"other_contract_addr\", \"type\": \"core::starknet::contract_address::ContractAddress\" } ] }, { \"type\": \"event\", \"name\": \"new_syntax_test_contract::new_syntax_test_contract::counter_contract::CounterIncreased\", \"kind\": \"struct\", \"members\": [ { \"name\": \"amount\", \"type\": \"core::integer::u128\", \"kind\": \"data\" } ] }, { \"type\": \"event\", \"name\": \"new_syntax_test_contract::new_syntax_test_contract::counter_contract::CounterDecreased\", \"kind\": \"struct\", \"members\": [ { \"name\": \"amount\", \"type\": \"core::integer::u128\", \"kind\": \"data\" } ] }, { \"type\": \"event\", \"name\": \"new_syntax_test_contract::new_syntax_test_contract::counter_contract::Event\", \"kind\": \"enum\", \"variants\": [ { \"name\": \"CounterIncreased\", \"type\": \"new_syntax_test_contract::new_syntax_test_contract::counter_contract::CounterIncreased\", \"kind\": \"nested\" }, { \"name\": \"CounterDecreased\", \"type\": \"new_syntax_test_contract::new_syntax_test_contract::counter_contract::CounterDecreased\", \"kind\": \"nested\" } ] } ] [ { \"type\": \"function\", \"name\": \"constructor\", \"inputs\": [ { \"name\": \"name_\", \"type\": \"core::felt252\" }, { \"name\": \"symbol_\", \"type\": \"core::felt252\" }, { \"name\": \"decimals_\", \"type\": \"core::integer::u8\" }, { \"name\": \"initial_supply\", \"type\": \"core::integer::u256\" }, { \"name\": \"recipient\", \"type\": \"core::starknet::contract_address::ContractAddress\" } ], \"outputs\": [], \"state_mutability\": \"external\" }, { \"type\": \"function\", \"name\": \"get_name\", \"inputs\": [], \"outputs\": [ { \"type\": \"core::felt252\" } ], \"state_mutability\": \"view\" }, { \"type\": \"function\", \"name\": \"get_symbol\", \"inputs\": [], \"outputs\": [ { \"type\": \"core::felt252\" } ], \"state_mutability\": \"view\" }, { \"type\": \"function\", \"name\": \"get_decimals\", \"inputs\": [], \"outputs\": [ { \"type\": \"core::integer::u8\" } ], \"state_mutability\": \"view\" }, { \"type\": \"function\", \"name\": \"get_total_supply\", \"inputs\": [], \"outputs\": [ { \"type\": \"core::integer::u256\" } ], \"state_mutability\": \"view\" }, { \"type\": \"function\", \"name\": \"balance_of\", \"inputs\": [ { \"name\": \"account\", \"type\": \"core::starknet::contract_address::ContractAddress\" } ], \"outputs\": [ { \"type\": \"core::integer::u256\" } ], \"state_mutability\": \"view\" }, { \"type\": \"function\", \"name\": \"allowance\", \"inputs\": [ { \"name\": \"owner\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"spender\", \"type\": \"core::starknet::contract_address::ContractAddress\" } ], \"outputs\": [ { \"type\": \"core::integer::u256\" } ], \"state_mutability\": \"view\" }, { \"type\": \"function\", \"name\": \"transfer\", \"inputs\": [ { \"name\": \"recipient\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"amount\", \"type\": \"core::integer::u256\" } ], \"outputs\": [], \"state_mutability\": \"external\" }, { \"type\": \"function\", \"name\": \"transfer_from\", \"inputs\": [ { \"name\": \"sender\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"recipient\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"amount\", \"type\": \"core::integer::u256\" } ], \"outputs\": [], \"state_mutability\": \"external\" }, { \"type\": \"function\", \"name\": \"approve\", \"inputs\": [ { \"name\": \"spender\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"amount\", \"type\": \"core::integer::u256\" } ], \"outputs\": [], \"state_mutability\": \"external\" }, { \"type\": \"function\", \"name\": \"increase_allowance\", \"inputs\": [ { \"name\": \"spender\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"added_value\", \"type\": \"core::integer::u256\" } ], \"outputs\": [], \"state_mutability\": \"external\" }, { \"type\": \"function\", \"name\": \"decrease_allowance\", \"inputs\": [ { \"name\": \"spender\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"subtracted_value\", \"type\": \"core::integer::u256\" } ], \"outputs\": [], \"state_mutability\": \"external\" }, { \"type\": \"event\", \"name\": \"Transfer\", \"inputs\": [ { \"name\": \"from\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"to\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"value\", \"type\": \"core::integer::u256\" } ] }, { \"type\": \"event\", \"name\": \"Approval\", \"inputs\": [ { \"name\": \"owner\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"spender\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"value\", \"type\": \"core::integer::u256\" } ] } ] With Cairo v2.3.0 the limitations on the Event enum have been relaxed, allowing more flexibility on the events that can be emitted from a given contract. For example: It is no longer enforced that the Event enum variants are structs of the same name as the variant, they can now be a struct or an enum of any name. Enum variants inside event ABI entries (entries in the abi with \"type\": \"event\" and \"kind\": \"enum\") now have two possible kinds. Before v2.3.0 it was always \"kind\": \"nested\", now \"kind: \"flat\" is also possible. v2.3.0 is backward compatible with version ≥ 2.0.0 ABI, so the same structure of the ABI is kept, while allowing flexibility. Between versions v2.0.0 and v2.2.0, to identify all potential serializations of events (what raw keys, data arrays can be emitted given the ABI), it was sufficient to iterate over the abi entries with \"type\": \"event\" and \"kind\": \"struct\", skipping the encapsulating Event type which has \"kind\": \"enum\". With v2.3.0 onwards, doing so may result in losing information. To illustrate this, consider the following example: //high-level code defining the events #[event] #[derive(Drop, starknet::Event)] enum Event { ComponentEvent: test_component::Event, TestCounterIncreased: CounterIncreased, TestCounterDecreased: CounterDecreased, TestEnum: MyEnum } #[derive(Drop, starknet::Event)] struct CounterIncreased { amount: u128 } #[derive(Drop, starknet::Event)] struct CounterDecreased { amount: u128 } #[derive(Copy, Drop, starknet::Event)] enum MyEnum { Var1: MyStruct } #[derive(Copy, Drop, Serde, starknet::Event)] struct MyStruct { member: u128 } In v2.3.0 enum variant types can now have any name. As an example the TestCounterIncreased variant and the CounterIncreased type, as they appear in the ABI: { \"type\": \"event\", \"name\": \"::Event\", \"kind\": \"enum\", \"variants\": [ { \"name\": \"ComponentEvent\", \"type\": \"::test_component::Event\", \"kind\": \"nested\" }, { \"name\": \"TestCounterIncreased\", \"type\": \"::CounterIncreased\", \"kind\": \"nested\" }, { \"name\": \"TestCounterDecreased\", \"type\": \"::CounterDecreased\", \"kind\": \"nested\" }, { \"name\": \"TestEnum\", \"type\": \"::MyEnum\", \"kind\": \"nested\" } ] }, { \"type\": \"event\", \"name\": \"::CounterIncreased\", \"kind\": \"struct\", \"members\": [ { \"name\": \"amount\", \"type\": \"core::integer::u128\", \"kind\": \"data\" } ] } When the contract emits the TestCounterIncreased event, for example by writing self.emit(CounterIncreased { amount })), the event that is emitted has the following keys and data: One key based on the variant name: sn_keccak(TestCounterIncreased). This information only appears in the ::Event type entry in the ABI, as the name TestCounterIncreased does not appear in the \"kind\": \"struct\" ABI entry. This did not matter in previous versions when the variant name and type had to be equal. One data element based on the struct CounterIncreased which is associated with TestCounterIncreased via one of the Event type variants. The introduction of components allows variants of Event to be enums. In the following example, we have two such variants: TestEnum (unrelated to components) and ComponentEvent. The serialization to keys and data is the same in both cases, so this example will focus on TestEnum: This example shows the TestEnum variant entry inside Event: { \"name\": \"TestEnum\", \"type\": \"::MyEnum\", \"kind\": \"nested\" } This example shows the MyEnum event entry: { \"type\": \"event\", \"name\": \"::MyEnum\", \"kind\": \"enum\", \"variants\": [ { \"name\": \"Var1\", \"type\": \"::MyStruct\", \"kind\": \"nested\" } ] } This example shows the MyStruct event entry: { \"type\": \"event\", \"name\": \"::MyStruct\", \"kind\": \"struct\", \"members\": [ { \"name\": \"member\", \"type\": \"core::integer::u128\", \"kind\": \"data\" } ] } If a TestEnum event is being emitted via self.emit(Event::TestEnum(MyEnum::Var1(MyStruct {member: 5}))), you can implement the trait Into to avoid having to write it out in full. When the event is emitted, the serialization to keys and data happens as follows: Since the TestEnum variant has kind nested, add the first key: sn_keccak(TestEnum), and the rest of the serialization to keys and data is done recursively via the starknet::event trait implementation of MyEnum. Next, you can handle a \"kind\": \"nested\" variant (previously it was TestEnum, now it’s Var1), which means you can add another key depending on the sub-variant: sn_keccak(Var1), and proceed to serialize according to the starknet::event implementation of MyStruct. Finally, proceed to serialize MyStruct, which gives us a single data member. This results in keys = [sn_keccak(TestEnum), sn_keccak(Var1)] and data=[5] Allowing variants that are themselves enums (TestEnum is an enum variant here) means further nesting is possible. For example, if the high level code is changed to: #[event] #[derive(Drop, starknet::Event)] enum Event { ComponentEvent: test_component::Event, TestCounterIncreased: CounterIncreased, TestCounterDecreased: CounterDecreased, TestEnum: MyEnum } #[derive(Copy, Drop, starknet::Event)] enum MyEnum { Var1: AnotherEnum } #[derive(Copy, Drop, Serde, starknet::Event)] enum AnotherEnum { Var2: MyStruct } #[derive(Copy, Drop, Serde, starknet::Event)] struct MyStruct { member: u128, } then self.emit(Event::TestEnum(MyEnum::Var1(AnotherEnum::Var2(MyStruct { member: 5 })))) (as before, Into implementations can shorten this) will emit an event with keys = [sn_keccak(TestEnum), sn_keccak(Var1), sn_keccak(Var2)] and data=[5]. This will look as follows in the ABI (only the relevant parts are shown): { \"type\": \"event\", \"name\": \"::Event\", \"kind\": \"enum\", \"variants\": [ // ignoring all the other variants for brevity { \"name\": \"TestEnum\", \"type\": \"::MyEnum\", \"kind\": \"nested\" } ] }, { \"type\": \"event\", \"name\": \"::MyEnum\", \"kind\": \"enum\", \"variants\": [ { \"name\": \"Var1\", \"type\": \"::AnotherEnum\", \"kind\": \"nested\" } ] }, { \"type\": \"event\", \"name\": \"::AnotherEnum\", \"kind\": \"enum\", \"variants\": [ { \"name\": \"Var2\", \"type\": \"::MyStruct\", \"kind\": \"nested\" } ] } As TestEnum, Var1 and Var2 are of kind nested, a selector should be added to the list of keys, before continuing to recursively serialize. You might not want to nest enums when serializing the event. For example, if you write an ERC-20 as a component, not a contract, that is pluggable anywhere, you might not want the contract to modify the keys of known events such as Transfer. To avoid nesting, write the following high level code: #[event] #[derive(Drop, starknet::Event)] enum Event { ComponentEvent: test_component::Event, TestCounterIncreased: CounterIncreased, TestCounterDecreased: CounterDecreased, #[flat] TestEnum: MyEnum } By writing the above, the TestEnum variant entry in the ABI will change to: { \"name\": \"TestEnum\", \"type\": \"::MyEnum\", \"kind\": \"flat\" } This means that self.emit(Event::TestEnum(MyEnum::Var1(MyStruct {member: 5}))) will emit an event with keys=[sn_keccak(Var1)] and data=[5]. With the transition to v2.0.0, the contract ABI underwent some changes. Consider the following high level code that generates the ABI in the following example: #[starknet::interface] trait IOtherContract { fn decrease_allowed(self: @TContractState) -> bool; } #[starknet::interface] trait ICounterContract { fn increase_counter(ref self: TContractState, amount: u128); fn decrease_counter(ref self: TContractState, amount: u128); fn get_counter(self: @TContractState) -> u128; } #[starknet::contract] mod counter_contract { use starknet::ContractAddress; use super::{ IOtherContractDispatcher, IOtherContractDispatcherTrait, IOtherContractLibraryDispatcher }; #[storage] struct Storage { counter: u128, other_contract: IOtherContractDispatcher } #[event] #[derive(Drop, starknet::Event)] enum Event { CounterIncreased: CounterIncreased, CounterDecreased: CounterDecreased } #[derive(Drop, starknet::Event)] struct CounterIncreased { amount: u128 } #[derive(Drop, starknet::Event)] struct CounterDecreased { amount: u128 } #[constructor] fn constructor( ref self: ContractState, initial_counter: u128, other_contract_addr: ContractAddress ) { self.counter.write(initial_counter); self .other_contract .write(IOtherContractDispatcher { contract_address: other_contract_addr }); } #[external(v0)] impl CounterContract of super::ICounterContract { fn get_counter(self: @ContractState) -> u128 { self.counter.read() } fn increase_counter(ref self: ContractState, amount: u128) { let current = self.counter.read(); self.counter.write(current + amount); self.emit(CounterIncreased { amount }); } fn decrease_counter(ref self: ContractState, amount: u128) { let allowed = self.other_contract.read().decrease_allowed(); if allowed { let current = self.counter.read(); self.counter.write(current - amount); self.emit(CounterDecreased { amount }); } } } } Since the CounterContract impl is annotated with the #[external(v0)] attribute, you’ll find the following impl entry in the ABI: { \"type\": \"impl\", \"name\": \"CounterContract\", \"interface_name\": \"new_syntax_test_contract::new_syntax_test_contract::ICounterContract\" } ---- This means that every function appearing in the ICounterContract interface is a possible entry point of the contract. Standalone functions in the contract outside an external impl can also be annotated with #[external(v0)] (currently, this is the only way to add L1 handlers). In such cases, a corresponding function (or l1_handler) entry will be found in the ABI in the same hierarchy as impls and interfaces. In Cairo v2, a dedicated type for the contract’s events was introduced. Currently, the contract event type must be an enum named Event, whose variants are structs of the same name as the variant. Types that can be emitted via self.emit(_) must implement the Event trait, which defines how this type should be serialized into two felt252 arrays, keys and data. The Event enum variants appear in the ABI under \"type\" = \"event\" rather than regular structs. For such entries, each member has an additional kind field that specifies how the serialization into keys and data takes place: If the kind is key, then this member or variant are serialized into the event’s keys. If the kind is data, then this member or variant are serialized into the event’s data. If the kind is nested, then the member or variant are serialized according to the Event attribute, potentially adding to both keys and data. This feature is not yet supported, so no high level code written in Cairo v2.0.0 can generate such an ABI. You can find a JSON schema specification of the ABI in the starknet-specs repository. For a UI-friendly version, you can use the OPEN-RPC playground.","title":"Contract ABI","component":"ROOT","version":"","name":"contract-abi","url":"/architecture-and-concepts/smart-contracts/contract-abi/","titles":[{"text":"Introduction","hash":"introduction","id":1},{"text":"An example contract ABI","hash":"an_example_contract_abi","id":2},{"text":"Cairo v2.3.0 changes","hash":"cairo_v2_3_0_changes","id":3},{"text":"Nested events","hash":"nested_events","id":4},{"text":"Variant names different from types","hash":"variant_names_different_from_types","id":5},{"text":"Enum variants inside Event","hash":"enum_variants_inside_event","id":6},{"text":"Flattened enum variants","hash":"flattened_enum_variants","id":7},{"text":"Cairo v2.0.0 changes","hash":"cairo_v2_0_0_changes","id":8},{"text":"Interface and Impl ABI entries","hash":"interface_and_impl_abi_entries","id":9},{"text":"Events","hash":"events","id":10},{"text":"Specification","hash":"specification","id":11}]},"73":{"id":73,"text":"The contract address is a unique identifier of the contract on Starknet. It is a chain hash of the following information: prefix The ASCII encoding of the constant string STARKNET_CONTRACT_ADDRESS. deployer_address One of the following: When the contract is deployed via a DEPLOY_ACCOUNT transaction: 0 When the contract is deployed via a deploy system call from another contract, the value of the deploy_from_zero parameter determines this value. For information on the deploy_from_zero parameter, see the deploy system call salt The salt passed by the contract calling the syscall, provided by the transaction sender. class_hash See the class hash documentation. constructor_calldata_hash Array hash of the inputs to the constructor. The address is computed as follows: contract_address = pedersen( “STARKNET_CONTRACT_ADDRESS”, deployer_address, salt, class_hash, constructor_calldata_hash) A random salt ensures unique addresses for smart contract deployments, preventing conflicts when deploying identical contract classes. It also thwarts replay attacks by influencing the transaction hash with a unique sender address. Additional resources For more information on the address computation, see contract_address.cairo in the Cairo code repository. deploy system call","title":"Contract address","component":"ROOT","version":"","name":"contract-address","url":"/architecture-and-concepts/smart-contracts/contract-address/","titles":[]},"74":{"id":74,"text":"As in object-oriented programming, Starknet distinguishes between a contract and its implementation by separating contracts into classes and instances. A contract class is the definition of a contract. It includes Cairo byte code, hint information, entry point names, and everything that defines its semantics. Each class is uniquely identified by its class hash, comparable to a class name in traditional object-oriented programming languages. A contract instance is a deployed contract that corresponds to a class. Only contract instances act as true contracts, in that they have their own storage and can be called by transactions or other contracts. A contract class does not necessarily have a deployed instance in Starknet. A contract class does not necessarily require a deployed instance in Starknet. A contract instance has a nonce, the value of which is the number of transactions originating from this address plus 1. For example, when you deploy an account with a DEPLOY_ACCOUNT transaction, the nonce of the account contract in the transaction is 0. After the DEPLOY_ACCOUNT transaction, until the account contract sends its next transaction, the nonce is 1. Adding new classes To introduce new classes to Starknet’s state, use the DECLARE transaction. Deploying instances To deploy a new instance of a previously declared class, use the deploy system call. Using class functionality To use the functionality of a declared class without deploying an instance, use the library_call system call. Analogous to Ethereum’s delegatecall, it enables you to use code in an existing class without deploying a contract instance. Class hash DECLARE transaction deploy system call library_call system call","title":"Contract classes and instances","component":"ROOT","version":"","name":"contract-classes","url":"/architecture-and-concepts/smart-contracts/contract-classes/","titles":[{"text":"Contract classes","hash":"contract_classes_2","id":1},{"text":"Contract instances","hash":"contract_instances","id":2},{"text":"Working with classes","hash":"working_with_classes","id":3},{"text":"Additional resources","hash":"additional_resources","id":4}]},"75":{"id":75,"text":"The contract’s storage is a persistent storage space where you can read, write, modify, and persist data. The storage is a map with \\(2^{251}\\) slots, where each slot is a felt which is initialized to 0. The basic function for writing to storage writes, value to key is: storage_write_syscall(address_domain, address, value) storage_read is a basic function that is used for getting the storage address, this function is created by the compiler when defining a storage variable, as explained below. This function returns the address of the storage variable. Below we discuss how this address is determined from the variable’s name and keys. Both storage_read and storage_write are system calls that can be imported by adding the line: use starknet::syscalls::storage_read_syscall; use starknet::syscalls::storage_write_syscall; The most common way to interact with a contract’s storage is through storage variables. The #[storage] attribute above the Storage struct declares that the contents of this struct are part of the contract storage. The storage variables stored inside this struct can consist of a single felt, or it can be a mapping from multiple arguments to a tuple of felts or structs. To use this variable, the var.read(args), var.write(args, value) and var.address(args) functions are automatically created by the #[storage] attribute, for reading the storage value, writing the storage value and getting the storage address, respectively. The Starknet contract compiler generates the Cairo code that maps the storage variable’s name and argument values to an address — so that it can be part of the generated proof. The address of a storage variable is computed as follows: If it is a single value, then the address is sn_keccak(variable_name), where variable_name is the ASCII encoding of the variable’s name. If it is a (nested) mapping, then the address of the value at key k_1,...,k_n is h(...h(h(sn_keccak(variable_name),k_1),k_2),...,k_n) where \\(h\\) is the Pedersen hash and the final value is taken \\(\\bmod 2^{251}-256\\) If it is a mapping to complex values (e.g., tuples or structs), then this complex value lies in a continuous segment starting from the address calculated in the previous point. Note that 256 field elements is the current limitation on the maximal size of a complex storage value. Note that when calling var.address(args) for a storage variable with complex values, the returned value is the address of the first element in the storage. We can summarize the above as follows: storage variable address := pedersen(keccak(variable name), keys) The following example defines storage variables with complex values. #[storage] struct Storage { name: felt252, symbol: felt252, decimals: u8, total_supply: u256, balances: LegacyMap::, allowances: LegacyMap::, }","title":"Contract storage","component":"ROOT","version":"","name":"contract-storage","url":"/architecture-and-concepts/smart-contracts/contract-storage/","titles":[{"text":"Storage layout","hash":"storage_layout","id":1},{"text":"Storage low level functions","hash":"storage_low_level_functions","id":2},{"text":"Storage variables","hash":"storage_variables","id":3}]},"76":{"id":76,"text":"With the v2.0.0 release of the Cairo compiler, the Starknet contract syntax has evolved, affecting the organization of functions, storage, and events. For more information on the latest syntax changes, see the Community Forum post Cairo 1: Contract Syntax is Evolving. Prerequisites A contract written with the Cairo compiler v1 The most recent version of the Cairo compiler Procedure Change the contract annotation from #[contract] to #[starknet::contract]. For example:: Cairo v1 Cairo v2 #[contract] mod CounterContract { ... } #[starknet::contract] mod CounterContract { ... } Annotate the Storage struct with the #[storage] attribute. For example: Cairo v1 Cairo v2 struct Storage { counter: u128, other_contract: IOtherContractDispatcher } #[storage] struct Storage { counter: u128, other_contract: IOtherContractDispatcher } Gather your contract’s external and view function signatures under a trait annotated with #[starknet::interface] as follows: Add a generic parameter to the trait. In the following example, the name TContractState represents the state of your contract. For view functions, add the self: @TContractState argument. For external functions, add the ref self: TContractState argument. Static functions that do not touch storage or emit events do not require an additional argument. For example: Cairo v1 Cairo v2 #[contract] mod CounterContract { #[external] fn increase_counter(amount: u128) { ... } #[external] fn decrease_counter(amount: u128) { ... } #[view] fn get_counter() -> u128 { ... } } #[starknet::interface] trait ICounterContract { fn increase_counter(ref self: TContractState, amount: u128); fn decrease_counter(ref self: TContractState, amount: u128); fn get_counter(self: @TContractState) -> u128; } #[starknet::contract] mod CounterContract { ... } Add the external and view function bodies under an impl of the interface trait, and mark the impl with the [external(v0)] attribute, which generates the type of dispatcher that is used to call the contract. For example: Cairo v1 Cairo v2 #[contract] mod CounterContract { #[external] fn increase_counter(amount: u128) { ... } #[external] fn decrease_counter(amount: u128) { ... } #[view] fn get_counter() -> u128 { ... } } #[starknet::interface] trait ICounterContract { fn increase_counter(ref self: TContractState, amount: u128); fn decrease_counter(ref self: TContractState, amount: u128); fn get_counter(self: @TContractState) -> u128; } #[starknet::contract] mod CounterContract { #[external(v0)] impl CounterContract of super::ICounterContract { fn increase_counter(ref self: ContractState, amount: u128) { ... } fn decrease_counter(ref self: ContractState, amount: u128) { ... } fn get_counter(self: @ContractState) -> u128 { ... } } } Replace the #[abi] attribute with #[starknet::interface]. While it doesn’t affect the generated code, adding to the trait a generic parameter T representing the contract’s state, and adding the ref self: T argument to external functions and self: @T argument for view functions makes the implementation more complete. For example: Cairo v1 Cairo v2 #[abi] trait IOtherContract { fn decrease_allowed() -> bool; } #[starknet::interface] trait IOtherContract { fn decrease_allowed(self: @TContractState) -> bool; } Modify storage accesses to happen through ContractState or @ContractState. No external functions in the contract that access storage also need to get it as an argument. For example: Cairo v1 Cairo v2 let current = counter::read(); let current = self.counter.read(); Unify all the contract’s events under the Event enum, and add a corresponding struct for every variant. All the structs must derive the Event trait, and each member type must implement the Serde trait. For example: Cairo v1 Cairo v2 #[event] fn counter_increased(amount: u128) {} #[event] fn counter_decreased(amount: u128) {} #[event] #[derive(Drop, starknet::Event)] enum Event { CounterIncreased: CounterIncreased, CounterDecreased: CounterDecreased } #[derive(Drop, starknet::Event)] struct CounterIncreased { amount: u128 } #[derive(Drop, starknet::Event)] struct CounterDecreased { amount: u128 } Emit events via the ContractState type. For example: Cairo v1 Cairo v2 fn increase_counter(amount: u128) { ... counter_increased(amount); } fn increase_counter(ref self: ContractState, amount: u128) { ... self.emit(Event::CounterIncreased(CounterIncreased { amount })); }","title":"Migrating a contract from Cairo v1 to Cairo v2","component":"ROOT","version":"","name":"contract-syntax","url":"/architecture-and-concepts/smart-contracts/contract-syntax/","titles":[]},"77":{"id":77,"text":"For the most up-to-date information, see the info.cairo contract. The struct ExecutionInfo contains the following information about the currently executing block and the transactions in the block. block_info: Box Contains information about a block. For details, see The BlockInfo struct tx_info: Box Contains information about a transaction. For details, see Transaction information: The TxInfo struct caller_address: ContractAddress The address of the contract that invokes the get_execution_info syscall. contract_address: ContractAddress The address of the contract in which the get_execution_info syscall appears. entry_point_selector: felt252 The function that includes the get_execution_info syscall. block_number: u64 The number of the block that is currently being executed. When called from an account contract’s `__validate__`, `__validate_deploy__`, or `__validate_declare__` function, this value is rounded down to the nearest multiple of 100. block_timestamp: u64 The timestamp showing the creation time of the block, in seconds since the Unix epoch, based on UTC time, rounded down to the nearest second. When called from an account contract’s `__validate__`, `__validate_deploy__`, or `__validate_declare__` function, this value is rounded down to the nearest hour. sequencer_address: ContractAddress The address of the Starknet sequencer contract. version: felt252 The version of the transaction. It is fixed (currently, 3) in the OS, and should be signed by the account contract. This field allows invalidating old transactions, whenever the meaning of the other transaction fields is changed (in the OS). account_contract_address: ContractAddress The account contract from which this transaction originates. max_fee: u128 The max_fee field of the transaction. signature: Span The signature of the transaction. transaction_hash: felt252 The hash of the transaction. chain_id: felt252 The identifier of the chain. This field can be used to prevent replay of testnet transactions on mainnet. nonce: felt252 The transaction’s nonce. resource_bounds: Span A span of ResourceBounds structs. For details, see The ResourceBounds struct. tip: u128 The tip. paymaster_data: Span If specified, the paymaster should pay for the execution of the tx. The data includes the address of the paymaster sponsoring the transaction, followed by extra data to send to the paymaster. nonce_data_availability_mode: u32 The data availability mode for the nonce. fee_data_availability_mode: u32 The data availability mode for the account balance from which fee will be taken. account_deployment_data: Span If nonempty, will contain the required data for deploying and initializing an account contract: its class hash, address salt and constructor calldata. resource: felt252 The name of the resource. max_amount: u64 The maximum amount of the resource allowed for usage during the execution. max_price_per_unit: u128 The maximum price the user is willing to pay for the resource unit.","title":"Execution information","component":"ROOT","version":"","name":"execution-info","url":"/architecture-and-concepts/smart-contracts/execution-info/","titles":[{"text":"The ExecutionInfo struct","hash":"the_executioninfo_struct","id":1},{"text":"The BlockInfo struct","hash":"block_info","id":2},{"text":"Transaction information: The TxInfo struct","hash":"tx_info","id":3},{"text":"The ResourceBounds struct","hash":"resource_bounds","id":4}]},"78":{"id":78,"text":"When you interact with contracts, especially if you are a library or SDK developer that wants to construct transactions, you need to understand how Cairo handles types that are larger than 252 bits so you can correctly formulate the calldata in a transaction. The field element (felt252), which contains 252 bits, is the only actual type in the Cairo VM. So all high-level Cairo types that are larger than 252 bits, such as u256 or arrays, are ultimately represented by a list of felts. In order to interact with a contract, you need to know how to encode its arguments as a list of felts so you can correctly formulate the calldata in the transaction. SDKs, such as starknet.js, encode the calldata for you, so you can simply specify any type and the SDK properly formulates the calldata. For example, you don’t need to know that a u256 value is represented by two felt252 values. You can simply specify a single integer in your code, and the SDK takes care of the serialization and encoding. The following types are smaller than 252 bits. For these types, each value is serialized as a single-member list that contains one felt252 value. ContractAddress EthAddress StorageAddress ClassHash Unsigned integers smaller than 252 bits: u8, u16, u32, u64, u128, and usize bytes31 felt252 Signed integers smaller than 252 bits: i8, i16, i32, i64, and i128. A negative value, \\(-x\\), is serialized as \\(P-x\\), where: \\[P = 2^{251} + 17*2^{192} + 1\\] For example, -5 is serialized as \\(P-5\\). For more information on the value of \\(P\\), see The STARK field. The following Cairo data types have non-trivial serialization: u256 and u512 arrays enums structs ByteArray, which represents strings Among unsigned integers, only u256 and u512 have non-trivial serialization. A u256 value in Cairo is represented by two felt252 values, as follows: The first felt252 value contains the 128 least significant bits, usually referred to as the low part of the original u256 value. The second felt252 value contains the 128 most significant bits, usually referred to as the high part of the original u256 value. For example: A u256 variable whose decimal value is 2 is serialized as [2,0]. To understand why, examine the binary representation of 2 and split it into two 128-bit parts, as follows: \\[\\underbrace{0\\cdots0}_{\\text{128 high bits}} | \\underbrace{0\\cdots10}_{\\text{128 low bits}}\\] A u256 variable whose decimal value is 2128 is serialized as [0,1]. To understand why, examine the binary representation of 2128 and split it into two 128-bit parts, as follows: \\[\\underbrace{0\\cdots01}_{\\text{128 high bits}} | \\underbrace{0\\cdots0}_{\\text{128 low bits}}\\] A u256 variable whose decimal value is 2129+2128+20, is serialized as [20,3]. To understand why, examine the binary representation of the 2129+2128+20 and split it into two 128-bit parts, as follows: \\[\\underbrace{0\\cdots011}_{\\text{128 high bits}} | \\underbrace{0\\cdots10100}_{\\text{128 low bits}}\\] The u512 type in Cairo is a struct containing four felt252 members, each representing a 128-bit limb of the original integer, similar to the u256 type. Arrays are serialized as follows: , ,…​, For example, consider the following array of u256 values: let POW_2_128: u256 = 0x100000000000000000000000000000000 let array: Array = array![10, 20, POW_2_128] Each u256 value in the array is represented by two felt252 values. So the array above is serialized as follows: \\[\\underbrace{3}_{\\textit{number_of_array_members}} , \\underbrace{10,0}_{\\textit{serialized_member_0}} , \\underbrace{20,0}_{\\textit{serialized_member_1}} , \\underbrace{0,1}_{\\textit{serialized_member_2}}\\] Combining the above, the array is serialized as follows: [3,10,0,20,0,0,1] An enum is serialized as follows: , Note that enum variants indices are 0-based, not to confuse with their storage layout, which is 1-based, to distinguish the first variant from an uninitialized storage slot. Enum serialization example 1 Consider the following definition of an enum named Week: enum Week { Sunday: (), // Index=0. The variant type is the unit type (0-tuple). Monday: u256, // Index=1. The variant type is u256. } Now consider instantiations of the Week enum’s variants as shown in the table below: Table 1. Serialization of Week variants Instance Description Serialization Week::Sunday Index=0. The variant’s type is the unit type. [0] Week::Monday(5) Index=1. The variant’s type is u256, hence serialized to [5,0], as shown in Serialization of u256 values . [1,5,0] Enum serialization example 2 Consider the following definition of an enum named MessageType: enum MessageType { A, #[default] B: u128, C } Now consider instantiations of the MessageType enum’s variants as shown in the table below: Table 2. Serialization of MessageType variants Instance Description Serialization MessageType::A Index=1. The variant’s type is the unit type. [0] MessageType::B(6) Index=0. The variant’s type is u128. [1,6] MessageType::C Index=2. The variant’s type is the unit type. [2] As you can see about, the #[default] attribute does not affect serialization. It only affects the storage layout of MessageType, where the default variant B will be stored as 0. You serialize a struct by serializing its members one at a time. Its members are serialized in the order in which they appear in the definition of the struct. For example, consider the following definition of the struct MyStruct: struct MyStruct { a: u256, b: felt252, c: Array } The serialization is the same for both of the following instantiations of the struct’s members: let my_struct = MyStruct { a: 2, b: 5, c: [1,2,3] }; let my_struct = MyStruct { b: 5, c: [1,2,3], a: 2 }; The serialization of MyStruct is determined as shown in the table Serialization for a struct in Cairo. Table 3. Serialization for a struct in Cairo Member Description Serialization a: 2 For information on serializing u256 values, see Serialization of u256 values [2,0] b: 5 One felt252 value 5 c: [1,2,3] An array of three felt252 values [3,1,2,3] Combining the above, the struct is serialized as follows: [0,2,5,3,1,2,3] A string is represented in Cairo as a ByteArray type. A byte array is actually a struct with the following members: data: Array Contains 31-byte chunks of the byte array. Each felt252 value has exactly 31 bytes. If the number of bytes in the byte array is less than 31, then this array is empty. pending_word: felt252 The bytes that remain after filling the data array with full 31-byte chunks. The pending word consists of at most 30 bytes. pending_word_len: usize The number of bytes in pending_word. Example 1: A string shorter than 31 characters Consider the string hello, whose ASCII encoding is the 5-byte hex value 0x68656c6c6f. The resulting byte array is serialized as follows: 0, // Number of 31-byte words in the data array. 0x68656c6c6f, // Pending word 5 // Length of the pending word, in bytes Example 2: A string longer than 31 bytes Consider the string Long string, more than 31 characters., which is represented by the following hex values: 0x4c6f6e6720737472696e672c206d6f7265207468616e203331206368617261 (31-byte word) 0x63746572732e (6-byte pending word) The resulting byte array is serialized as follows: 1, // Number of 31-byte words in the array construct. 0x4c6f6e6720737472696e672c206d6f7265207468616e203331206368617261, // 31-byte word. 0x63746572732e, // Pending word 6 // Length of the pending word, in bytes Integer types in The Cairo Programming Language.","title":"Serialization of Cairo types","component":"ROOT","version":"","name":"serialization-of-cairo-types","url":"/architecture-and-concepts/smart-contracts/serialization-of-cairo-types/","titles":[{"text":"Data types of 252 bits or less","hash":"data_types_of_252_bits_or_less","id":1},{"text":"Data types greater than 252 bits","hash":"data_types_greater_than_252_bits","id":2},{"text":"Serialization of unsigned integers","hash":"serialization_of_unsigned_integers","id":3},{"text":"Serialization of u256 values","hash":"serialization_in_u256_values","id":4},{"text":"Serialization of u512 values","hash":"serialization_in_u512_values","id":5},{"text":"Serialization of arrays","hash":"serialization_of_arrays","id":6},{"text":"Serialization of enums","hash":"serialization_of_enums","id":7},{"text":"Serialization of structs","hash":"serialization_of_structs","id":8},{"text":"Serialization of byte arrays","hash":"serialization_of_byte_arrays","id":9},{"text":"Additional resources","hash":"additional_resources","id":10}]},"79":{"id":79,"text":"A contract may emit events throughout its execution. Each event contains the following fields: from_address: address of the contract emitting the events keys: a list of field elements data: a list of field elements The keys can be used for indexing the events, while the data may contain any information that we wish to log (note that we are dealing with two separate lists of possibly varying size, rather than a list of key-value pairs). Events can be defined in a contract using the @event decorator. Once an event E has been defined, the compiler automatically adds the function E.emit(). The following example illustrates how an event is defined and emitted: #[event] fn Transfer(from: ContractAddress, to: ContractAddress, value: u256) {} Transfer(12345, 12345, 1) The emit function emits an event with a single key, which is an identifier of the event, given by \\(\\text{sn_keccak}(event\\_name)\\), where \\(event\\_name\\) is the ASCII encoding of the event’s name and \\(\\text{sn_keccak}\\) is defined here. To emit custom keys, one should use the low level emit_event system call: use starknet::syscalls::emit_event_syscall; let keys = array!['key', 'deposit']; let values = array![1, 2, 3]; emit_event_syscall(keys, values).unwrap_syscall(); The above code emits an event with two keys, the strings key and deposit (think of those as identifiers of the event that can be used for indexing) and three data elements 1, 2, 3. When using the higher level emit syntax, the event’s data may be of complex types, for example: struct Point: member x : felt member y : felt end @event func message_received(arr_len : felt, arr: felt*, p: Point): end # ... let (data : felt*) = alloc() assert data[0] = 1 assert data[1] = 2 let p = Point(3,4) message_received.emit(2, data, p) The emitted events are part of the transaction receipt. For more information, see Transaction receipt. The event definition appears in the contract’s ABI. It contains the list of data fields, with the name and type for each, and the list of the custom keys, that is, all keys except the event identifier discussed above. Below is an example of an event inside the ABI: Example of an event in the ABI { \"type\": \"event\", \"name\": \"Transfer\", \"inputs\": [ { \"name\": \"from\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"to\", \"type\": \"core::starknet::contract_address::ContractAddress\" }, { \"name\": \"value\", \"type\": \"core::integer::u256\" } ] } The event hash is given by: \\[h(h(h(h(0,from\\_address),keys\\_hash),data\\_hash),3)\\] Where: \\(keys\\_hash\\) and \\(data\\_hash\\) are the hashes of the keys list and data list respectively. For more information, see Array hashing. \\(h\\) is the Pedersen hash function. The event hashes are included in the event_commitment field of a block. architecture-and-concepts:cryptography/hash-functions.adoc#array_hashing Pedersen hash function The event_commitment field in Block structure","title":"Events","component":"ROOT","version":"","name":"starknet-events","url":"/architecture-and-concepts/smart-contracts/starknet-events/","titles":[{"text":"Emitting events","hash":"emitting_events","id":1},{"text":"Event definition in the ABI","hash":"event_abi","id":2},{"text":"Event hash","hash":"event_hash","id":3},{"text":"Additional resources","hash":"additional_resources","id":4}]},"80":{"id":80,"text":"Writing smart contracts requires various associated operations, such as calling another contract or accessing the contract’s storage, that standalone programs do not require. The Starknet contract language supports these operations by using system calls. System calls enable a contract to require services from the Starknet OS. You can use system calls in a function to get information that depends on the broader state of Starknet, which would otherwise be inaccessible, rather than local variables that appear in the function’s scope. extern fn get_block_hash_syscall( block_number: u64 ) -> SyscallResult implicits(GasBuiltin, System) nopanic; Gets the hash of a specific Starknet block within the range of [first_v0_12_0_block, current_block - 10]. block_number: u64 The number of the block whose hash you want to get. The hash of the specified block. syscalls.cairo Block number out of range block_number is greater than current_block - 10. 0 block_number is less than the first block number of v0.12.0. extern fn get_execution_info_syscall() -> SyscallResult> implicits( GasBuiltin, System ) nopanic; Gets information about the currently executing block and the transactions in the block. For a complete description of this information, see Execution information This single system call contains all information for a block, transaction, and execution context. When an account’s __validate__, __validate_deploy__, or __validate_declare__ function calls get_execution_info, the return values for block_timestamp and block_number are modified as follows: block_timestamp returns the hour, rounded down to the nearest hour. block_number returns the block number, rounded down to the nearest multiple of 100. None. ExecutionInfo A struct that contains information about the currently executing function, transaction, and block. syscalls.cairo This example shows how to pull the block number from the ExecutionInfo struct. let execution_info = get_execution_info().unbox(); let block_info = execution_info.block_info.unbox(); let block number = block_info.block_number; extern fn call_contract_syscall( address: ContractAddress, entry_point_selector: felt252, calldata: Span ) -> SyscallResult> implicits(GasBuiltin, System) nopanic; Calls a given contract. This system call expects the address of the called contract, a selector for a function within that contract, and call arguments. An internal call can’t return Err(_) as this is not handled by the sequencer and the Starknet OS. If call_contract_syscall fails, this can’t be caught and will therefore result in the entire transaction being reverted. address: ContractAddress The address of the contract you want to call. entry_point_selector: felt252 A selector for a function within that contract. calldata: Span The calldata array. The call response, of type SyscallResult>. syscalls.cairo This is considered a lower-level syntax for calling contracts. If the interface of the called contract is available, then you can use a more straightforward syntax. extern fn deploy_syscall( class_hash: ClassHash, contract_address_salt: felt252, calldata: Span, deploy_from_zero: bool, ) -> SyscallResult)> implicits(GasBuiltin, System) nopanic; Deploys a new instance of a previously declared class. class_hash: ClassHash The class hash of the contract to be deployed. contract_address_salt: felt252 The salt, an arbitrary value provided by the sender, used in the computation of the contract’s address. calldata: Span The constructor’s calldata. An array of felts. deploy_from_zero: bool A flag that determines whether the deployer’s address affects the computation of the contract address. When not set, or when set to FALSE, the caller address is used as the new contract’s deployer address. When set to TRUE, 0 is used. A tuple wrapped with SyscallResult where: The first element is the address of the deployed contract, of type ContractAddress. The second element is the response array from the contract’s constructor, of type Span::. syscalls.cairo extern fn emit_event_syscall( keys: Span, data: Span ) -> SyscallResult implicits(GasBuiltin, System) nopanic; Emits an event with a given set of keys and data. For more information, and for a higher-level syntax for emitting events, see Starknet events. keys: Span The event’s keys. These are analogous to Ethereum’s event topics, you can use the starknet_getEvents method to filter by these keys. data: Span The event’s data. None. syscalls.cairo The following example emits an event with two keys, the strings key and deposit and three data elements: 1, 2, and 3. let keys = array!['key', 'deposit']; let values = array![1, 2, 3]; emit_event_syscall(keys, values).unwrap_syscall(); extern fn library_call_syscall( class_hash: ClassHash, function_selector: felt252, calldata: Span ) -> SyscallResult> implicits(GasBuiltin, System) nopanic; Calls the requested function in any previously declared class. The class is only used for its logic. This system call replaces the known delegate call functionality from Ethereum, with the important difference that there is only one contract involved. class_hash: ClassHash The hash of the class you want to use. function_selector: felt252 A selector for a function within that class. calldata: Span The calldata. The call response, of type SyscallResult>. syscalls.cairo extern fn send_message_to_l1_syscall( to_address: felt252, payload: Span ) -> SyscallResult implicits(GasBuiltin, System) nopanic; Sends a message to L1. This system call includes the message parameters as part of the proof’s output and exposes these parameters to the Starknet Core Contract on L1 once the state update, including the transaction, is received. For more information, see Starknet’s messaging mechanism. to_address: felt252 The recipient’s L1 address. payload: Span The array containing the message payload None. syscalls.cairo The following example sends a message whose content is (1,2) to the L1 contract whose address is 3423542542364363. let payload = ArrayTrait::new(); payload.append(1); payload.append(2); send_message_to_l1_syscall(payload).unwrap_syscall(); extern fn replace_class_syscall( class_hash: ClassHash ) -> SyscallResult implicits(GasBuiltin, System) nopanic; Once replace_class is called, the class of the calling contract (i.e. the contract whose address is returned by get_contract_address at the time the syscall is called) will be replaced by the class whose hash is given by the class_hash argument. After calling replace_class, the code currently executing from the old class will finish running. The new class will be used from the next transaction onwards or if the contract is called via the call_contract syscall in the same transaction (after the replacement). class_hash_: ClassHash The hash of the class you want to use as a replacement. None. syscalls.cairo extern fn storage_read_syscall( address_domain: u32, address: StorageAddress ) -> SyscallResult implicits(GasBuiltin, System) nopanic; Gets the value of a key in the storage of the calling contract. This system call provides direct access to any possible key in storage, in contrast with var.read(), which enables you to read storage variables that are defined explicitly in the contract. For information on accessing storage by using the storage variables, see storage variables. address_domain: u32 The domain of the key, used to separate between different data availability modes. This separation is used in Starknet to offer different data availability modes. Currently, only the onchain mode (where all updates go to L1), indicated by domain 0, is supported. Other address domains which will be introduced in the future will behave differently in terms of publication (in particular, they will not be posted on L1, creating a tradeoff between cost and security). address: StorageAddress The requested storage address. The value of the key, of type SyscallResult. syscalls.cairo use starknet::storage_access::storage_base_address_from_felt252; ... let storage_address = storage_base_address_from_felt252(3534535754756246375475423547453) storage_read_syscall(0, storage_address).unwrap_syscall() extern fn storage_write_syscall( address_domain: u32, address: StorageAddress, value: felt252 ) -> SyscallResult implicits(GasBuiltin, System) nopanic; Sets the value of a key in the storage of the calling contract. This system call provides direct access to any possible key in storage, in contrast with var.write(), which enables you to write to storage variables that are defined explicitly in the contract. For information on accessing storage by using the storage variables, see storage variables. address_domain: u32 The domain of the key, used to separate between different data availability modes. This separation is used in Starknet to offer different data availability modes. Currently, only the onchain mode (where all updates go to L1), indicated by domain 0, is supported. Other address domains which will be introduced in the future will behave differently in terms of publication (in particular, they will not be posted on L1, creating a tradeoff between cost and security). address: StorageAddress The requested storage address. value: felt252 The value to write to the key. None. Common library syscalls.cairo","title":"System Calls","component":"ROOT","version":"","name":"system-calls-cairo1","url":"/architecture-and-concepts/smart-contracts/system-calls-cairo1/","titles":[{"text":"get_block_hash","hash":"get_block_hash","id":1},{"text":"Function signature","hash":"function_signature","id":2},{"text":"Description","hash":"description","id":3},{"text":"Arguments","hash":"arguments","id":4},{"text":"Return values","hash":"return_values","id":5},{"text":"Common library","hash":"common_library","id":6},{"text":"Error messages","hash":"error_messages","id":7},{"text":"get_execution_info","hash":"get_execution_info","id":8},{"text":"Function signature","hash":"function_signature_2","id":9},{"text":"Description","hash":"description_2","id":10},{"text":"Arguments","hash":"arguments_2","id":11},{"text":"Return values","hash":"return_values_2","id":12},{"text":"Common library","hash":"common_library_2","id":13},{"text":"Example","hash":"example","id":14},{"text":"call_contract","hash":"call_contract","id":15},{"text":"Function signature","hash":"function_signature_3","id":16},{"text":"Description","hash":"description_3","id":17},{"text":"Arguments","hash":"arguments_3","id":18},{"text":"Return values","hash":"return_values_3","id":19},{"text":"Common library","hash":"common_library_3","id":20},{"text":"deploy","hash":"deploy","id":21},{"text":"Function signature","hash":"function_signature_4","id":22},{"text":"Description","hash":"description_4","id":23},{"text":"Arguments","hash":"arguments_4","id":24},{"text":"Return values","hash":"return_values_4","id":25},{"text":"Common library","hash":"common_library_4","id":26},{"text":"emit_event","hash":"emit_event","id":27},{"text":"Function signature","hash":"function_signature_5","id":28},{"text":"Description","hash":"description_5","id":29},{"text":"Arguments","hash":"arguments_5","id":30},{"text":"Return values","hash":"return_values_5","id":31},{"text":"Common library","hash":"common_library_5","id":32},{"text":"Example","hash":"example_2","id":33},{"text":"library_call","hash":"library_call","id":34},{"text":"Function signature","hash":"function_signature_6","id":35},{"text":"Description","hash":"description_6","id":36},{"text":"Arguments","hash":"arguments_6","id":37},{"text":"Return values","hash":"return_values_6","id":38},{"text":"Common library","hash":"common_library_6","id":39},{"text":"send_message_to_L1","hash":"send_message_to_L1","id":40},{"text":"Function signature","hash":"function_signature_7","id":41},{"text":"Description","hash":"description_7","id":42},{"text":"Arguments","hash":"arguments_7","id":43},{"text":"Return values","hash":"return_values_7","id":44},{"text":"Common library","hash":"common_library_7","id":45},{"text":"Example","hash":"example_3","id":46},{"text":"replace_class","hash":"replace_class","id":47},{"text":"Function signature","hash":"function_signature_8","id":48},{"text":"Description","hash":"description_8","id":49},{"text":"Arguments","hash":"arguments_8","id":50},{"text":"Return values","hash":"return_values_8","id":51},{"text":"Common library","hash":"common_library_8","id":52},{"text":"storage_read","hash":"storage_read","id":53},{"text":"Function signature","hash":"function_signature_9","id":54},{"text":"Description","hash":"description_9","id":55},{"text":"Arguments","hash":"arguments_9","id":56},{"text":"Return values","hash":"return_values_9","id":57},{"text":"Common library","hash":"common_library_9","id":58},{"text":"Example","hash":"example_4","id":59},{"text":"storage_write","hash":"storage_write","id":60},{"text":"Function signature","hash":"function_signature_10","id":61},{"text":"Description","hash":"description_10","id":62},{"text":"Arguments","hash":"arguments_10","id":63},{"text":"Return values","hash":"return_values_10","id":64}]},"81":{"id":81,"text":"Starkli is a fast command-line interface for interacting with the Starknet network. It supports fetching data from the Starknet network, deploying accounts, and interacting with contracts. Developed by Jonathan Lei. Starkli also includes useful utilities for developers, such as: Compute class hashes from the Cairo file that defines the class. Compute a function’s selector. Encode messages. Deploying new accounts or fetching existing accounts Submitting multi-calls to your account GitHub: starkli on GitHub Documentation: Starkli Book Starkli: The New Starknet CLI, on Medium, includes information on getting started, including installation instructions. Starknet Cast, part of the Starknet Foundry suite, is a command line tool for interacting with the Starknet network, with deep integration with Starknet Foundry projects. Starknet Cast Docs","title":"Command-line tools","component":"ROOT","version":"","name":"clis","url":"/tools/devtools/clis/","titles":[{"text":"starkli","hash":"starkli","id":1},{"text":"Relevant links","hash":"relevant_links","id":2},{"text":"sncast","hash":"sncast","id":3}]},"82":{"id":82,"text":"Built using NextJS, Starknet.js, Scarb, Starknet-React, Starknet Foundry and Typescript. Designed to make it easier for developers to create, deploy and interact with smart contracts. Website: Scaffold-Stark website Docs: Scaffold-Stark Docs GitHub: starknetkit on GitHub An open-source, up-to-date toolkit for building decentralized applications (dapps) on Starknet. Move from prototyping to production-grade apps seamlessly. Website: Starknet-Scaffold website Docs: Starknet-Scaffold Docs GitHub: Starknet-Scaffold on GitHub","title":"Dapp Frameworks","component":"ROOT","version":"","name":"dapp-frameworks","url":"/tools/devtools/dapp-frameworks/","titles":[{"text":"Scaffold-Stark","hash":"scaffold-stark","id":1},{"text":"Relevant links","hash":"relevant_links","id":2},{"text":"Starknet Scaffold","hash":"starknet-scaffold","id":3},{"text":"Relevant links","hash":"relevant_links_2","id":4}]},"83":{"id":83,"text":"A Starknet devnet is a local Starknet node implementations, aimed for testing and development. A devnet behaves just like a real Starknet node, but everything is executed locally. This enables much faster and more private development of Starknet applications. starknet-devnet-rs can is a Rust implementation of a local Starknet node. Developed by SpaceShard. With starknet-devnet-rs includes many featured tailored for testing and development, which are not present on testnet/mainnet. Some of the features include: Pre-deployed and pre-funded accounts Forking the chain at a specific block. Dumping current state (and loading in future runs) Impersonating account Mock L1<>L2 communication GitHub: starknet-devnet-rs on GitHub Crates: starknet-devnet-rs on Crates Documentation: starknet-devnet-rs Docs Support: devnet channel on Starknet Discord Katana, developed by the Dojo team, is an extremely fast devnet designed to support local development with Dojo, which is a gaming engine for Starknet. You can use Katana as a general purpose devnet as well. GitHub: Dojo Engine on GitHub Documentation: Katana Docs","title":"Local Development nodes","component":"ROOT","version":"","name":"devnets","url":"/tools/devtools/devnets/","titles":[{"text":"starknet-devnet-rs","hash":"starknet-devnet-rs","id":1},{"text":"Relevant links","hash":"relevant_links","id":2},{"text":"Katana","hash":"katana","id":3},{"text":"Relevant links","hash":"relevant_links_2","id":4}]},"84":{"id":84,"text":"Decentralized applications are at the heart of Starknet. These libraries help developers build Dapps on Starknet, and connect to prominent Starknet wallets. Starknet React is a collection of React hooks for Starknet. It is inspired by wagmi, powered by starknet.js. Developed by Apibara. GitHub: starknet-react on GitHub Package: starknet-react on NPM Documentation: Starknet-React Docs Beta Version Documentation: Starknet-React V3 Docs Starknet wallet<>Dapp connection bridge. Easy discovery and UI for Starknet wallets. Supporting popular Starknet browser wallets ArgentX Braavos Metamask Snaps OKx GitHub: get-starknet on GitHub Package: get-starknet on NPM A Starknet wallet connection kit, built by Argent. Built using Starknet.js and starknet-react. Website: strknetkit website Docs: starknetkit Docs GitHub: starknetkit on GitHub","title":"Libraries for Dapps","component":"ROOT","version":"","name":"libs-for-dapps","url":"/tools/devtools/libs-for-dapps/","titles":[{"text":"Starknet React","hash":"starknet-react","id":1},{"text":"Relevant links","hash":"relevant_links","id":2},{"text":"Get Starknet","hash":"get-starknet","id":3},{"text":"Relevant links","hash":"relevant_links_2","id":4},{"text":"Starknetkit","hash":"starknetkit","id":5},{"text":"Relevant links","hash":"relevant_links_3","id":6}]},"85":{"id":85,"text":"Cairo is a turing complete language for writing provable programs. It is also the language used for writing smart contracts for Starknet. Starknet uses a different model than the Ethereum Virtual Machine (EVM), and as such, requires specialized tools for development. This list of tools is dynamic and is being updated as more tools are added. If a tool you are using is missing, please consider editing this page and creating a Pull Request.","title":"Starknet developer tools","component":"ROOT","version":"","name":"overview","url":"/tools/devtools/overview/","titles":[]},"86":{"id":86,"text":"A Software Development Kit (SDK) is a library that abstracts the complexities of Starknet when building transactions and interacting with the blockchain, including the following: Read the chain state. Account creation and management. Cryptography: signature verification and signing, computing hashes used by Starknet. Contract declaration and deployment. Contract interactions: ABI import, constructing transactions. SDKs implement the Starknet JSON RPC specification, and are updated to support the latest API changes. There are SDKs for various languages, so you can choose the SDK according to your needs. SDK name Github Package Docs Support Maintainer Starknet.js starknet.js on GitHub starknet.js on NPM starknet.js Book starknet.js channel on Starknet Discord SpaceShard Starknet.py starknet.js on GitHub starknet.py on PyPi starknet.py Docs starknet.py on Telegram Software Mansion Starknet-rs starknet-rs on GitHub starknet-rs on Crates starknet-rs Docs starknet-rs on Telegram Jonathan Lei Starknet.go starknet.go on GitHub starknet.go Docs starknet.go on Telegram Nethermind starknet-jvm starknet-jvm on GitHub starknet-jvm Docs Software Mansion starknet.swift starknet.swift on GitHub starknet.swift Docs Software Mansion starknet.dart starknet.dart on GitHub starknet.dart on Pub starknet.dart Docs starknet.dart on Telegram Focustree","title":"Starknet SDKs","component":"ROOT","version":"","name":"sdks","url":"/tools/devtools/sdks/","titles":[]},"87":{"id":87,"text":"Sierra-Analyzer is a security toolkit for analyzing Sierra files, developed by FuzzingLabs. Supported featrued include: Decompile a Sierra file Print the contracts Control Flow Graph Run Static Analysis detectors Links: sierra-analyzer on GitHub Analyze and Decode Starknet Transactions and events. Features: * Get contract class history * Decode contract ABI * Decode transaction data * Backfill data for faster analysis Links: Entro on GitHub","title":"Security and Analysis tools","component":"ROOT","version":"","name":"security","url":"/tools/devtools/security/","titles":[{"text":"Sierra Analyzer","hash":"sierra-analyzer","id":1},{"text":"Entro","hash":"entro","id":2}]},"88":{"id":88,"text":"The following tools are the recommended tools for developing Starknet smart contracts. These cover compilation, package management, testing and deployment. Scarb is a package manager for Cairo, but it is much more than that. It is the easiest and recommended way to build and maintain Cairo code. Think Cargo for Rust. Scarb is developed by Software Mansion. Scarb includes the following features: Initiating a new Cairo project. Compiling Cairo projects. Adding and removing Cairo dependencies. Generating Cairo documentation. Fetching and uploading packages Scarbs.xyz, the Cairo Registry. Integration with the Cairo Language Server It integrates with other tools in the Cairo ecosystem, such as Starknet Foundry and the Dojo gaming engine. GitHub: Scarb on GitHub Documentation: Scarb Docs Support: Scarb on Telegram Cairo Registry: scarbs.xyz Starknet Foundry is the go-to toolchain for developing Starknet smart contracts. Similarly to its EVM counterpart, Starknet Foundry supports a plethora of features focused on testing Cairo smart contracts for Starknet. Starknet Forge, and snforge_std allow the use of \"cheatcodes\" to test various aspects of the contracts. For example: Setting caller address Manipulating the timestamp and block number Forking the chain at a specific block and testing with that state Fuzz testing Getting accurate gas and resource reports Profiling Starknet Cast is a command line tool for interacting with the Starknet network, with deep integration with Starknet Foundry projects. With sncast it is possible to: Declare and deploy contracts Read from Starknet contracts Deploy accounts Interact with contracts GitHub: starknet-foundry on GitHub Documentation: starknet-foundry Docs Support: Starknet Foundry Support on Telegram Remix is a browser-based integrated development environment (IDE) for Ethereum that you can use for learning, experimenting and finding vulnerabilities in smart contracts, without installing anything. The Starknet Remix plugin lets you use Remix for testing Starknet smart contracts, so you can focus on learning Cairo and Starknet in the comfort of your browser. Remix and the Starknet Remix plugin include the following features: Integrated compiling. You can deploy contracts to testnet, mainnet and the plugin’s own integrated devnet. You can call functions of contracts that you have already deployed, to facilitate testing and interaction. The Starknet Remix Plugin is integrated with Starknet By Example, a rich repository of practical learning content. Remix Project: Remix Project site. Blogpost: Unlocking Onboarding to Starknet: An Overview of the Starknet Remix Plugin. GitHub Starknet Remix on GitHub.","title":"Smart Contract Development","component":"ROOT","version":"","name":"smart-contract-tools","url":"/tools/devtools/smart-contract-tools/","titles":[{"text":"Scarb: The Cairo package manager","hash":"scarb","id":1},{"text":"Relevant links","hash":"relevant_links","id":2},{"text":"Starknet Foundry","hash":"starknet_foundry","id":3},{"text":"Relevant links","hash":"relevant_links_2","id":4},{"text":"The Starknet Remix plugin","hash":"starknet_remix_plugin","id":5},{"text":"Relevant links","hash":"relevant_links_3","id":6}]},"89":{"id":89,"text":"While not under any specific category, these tools can be helpful in various stages of development. While Scarb compiles full projects, and produces both Sierra and CASM files, it is often needed to only compile a single Sierra file to CASM (for example, when getting a class from Starknet mainnet). The Universal Sierra Compiler supports all sierra versions, and can compile the the a CASM file. The USC comes bundled with Starknet Foundry and does not need to be installed separately if Starknet Foundry is installed. Universal Sierra Compiler on GitHub The Starknet RPC Request Builder is a useful tool to generate RPC queries for Starknet, with support for basic example for JavaScript, Go and Rust. RPC Request Builder The Open Zeppelin Contract Wizard is a tool that helps you create smart contracts with Open Zeppelin libraries. Easily toggle on and off features for popular smart contract patterns, and the wizard will generate the code for you. Open Zeppelin Contract Wizard Cairo-profiler can be used to create profiles of Cairo executions from execution traces. These can be analyzed and displayed to show Flame Graphs, and other useful information. Cairo-profiler is currently integrated into Starknet Foundry, but can be used as a standalone tool. Cairo Profiler on GitHub If want to dive deep into the Cairo VM, and experiment writing Cairo online, and don’t want to deploy a smart contract on Starknet, the Cairo Playground is a great way to do so. Cairo Playground A JavaScript package, abstracting the Starknet Devnet API, making it easier to interact with starknet-devnet-rs. This simplifies writing end-to-end tests using Devnet, including tests for L1<>L2 communications. Notable features: Spawn a new Devnet instance without installing it Wrapping RPC calls to Devnet Abstracting complex L1<>L2 communication setup with a local L1 node (e.g. Anvil) starknet-devnet-js on GitHub","title":"Utilities","component":"ROOT","version":"","name":"utilities","url":"/tools/devtools/utilities/","titles":[{"text":"Universal Sierra Compiler","hash":"usc","id":1},{"text":"Relevant links","hash":"relevant_links","id":2},{"text":"RPC Request Builder","hash":"rpc-request-builder","id":3},{"text":"Relevant links","hash":"relevant_links_2","id":4},{"text":"Open Zeppelin Contract Wizard","hash":"open-zeppelin-contract-wizard","id":5},{"text":"Relevant links","hash":"relevant_links_3","id":6},{"text":"Cairo Profiler","hash":"cairo-profiler","id":7},{"text":"Relevant links","hash":"relevant_links_4","id":8},{"text":"Cairo Playground","hash":"cairo-playground","id":9},{"text":"Relevant links","hash":"relevant_links_5","id":10},{"text":"Starknet Devnet JS","hash":"starknet-devnet-js","id":11},{"text":"Relevant links","hash":"relevant_links_6","id":12}]},"90":{"id":90,"text":"An extension for the Microsoft VSCode IDE that provides assistance when writing Cairo smart contracts, by using the Cairo Language Server. It integrates with Scarb, and works best when Scarb is installed via asdf. Features include: Live diagnostic highlighting for compile errors Quick fixes with suggestions Go to definition Code formatting Code completion for imports Cairo 1.0 - Visual Studio Marketplace vscode-cairo on GitHub","title":"The Visual Studio Code Cairo extension","component":"ROOT","version":"","name":"vscode","url":"/tools/devtools/vscode/","titles":[{"text":"Relevant links","hash":"relevant_links","id":1}]}},"components":{},"componentVersions":{"ROOT/":{"displayVersion":"default","title":"Starknet","version":"","name":"ROOT","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Starknet documentation","site-url":"https://docs.starknet.io/","idprefix":"","stem":"latexmath","page-pagination":"","experimental":"","starknet_mainnet_version":"Mainnet: 0.13.1.1","starknet_testnet_version":"Sepolia: 0.13.1.1","page-starknet_version":"Mainnet: 0.13.1.1 | Sepolia: 0.13.1.1"},"sourcemap":false,"extensions":[{}]},"url":"/","navigation":[{"items":[{"content":"Overview","url":"/","urlType":"internal"}],"root":true,"order":0},{"items":[{"content":"Quick start","items":[{"content":"Setting up your environment","url":"/quick-start/environment-setup/","urlType":"internal"},{"content":"Setting up an account","url":"/quick-start/set-up-an-account/","urlType":"internal"},{"content":"Declaring a smart contract","url":"/quick-start/declare-a-smart-contract/","urlType":"internal"},{"content":"Deploying a smart contract","url":"/quick-start/deploy-a-smart-contract/","urlType":"internal"},{"content":"Interacting with a smart contract","url":"/quick-start/interact-with-a-smart-contract/","urlType":"internal"},{"content":"Using a development network","url":"/quick-start/using_devnet/","urlType":"internal"}]}],"root":true,"order":1},{"items":[{"content":"Release information","items":[{"content":"Release notes","url":"/starknet-versions/version-notes/","urlType":"internal"},{"content":"Deprecated, unsupported, and removed features","url":"/starknet-versions/deprecated/","urlType":"internal"}]}],"root":true,"order":2},{"items":[{"content":"Architecture","items":[{"content":"Overview","url":"/architecture-and-concepts/network-architecture/starknet-architecture-overview/","urlType":"internal"},{"content":"Provers","url":"/architecture-and-concepts/provers-overview/","urlType":"internal"},{"content":"Solidity verifier","url":"/architecture-and-concepts/solidity-verifier/","urlType":"internal"},{"content":"Nodes","url":"/architecture-and-concepts/nodes/","urlType":"internal"},{"content":"Block structure","url":"/architecture-and-concepts/network-architecture/block-structure/","urlType":"internal"},{"content":"Transaction lifecycle","url":"/architecture-and-concepts/network-architecture/transaction-life-cycle/","urlType":"internal"},{"content":"Transaction types","url":"/architecture-and-concepts/network-architecture/transactions/","urlType":"internal"},{"content":"Gas and transaction fees","url":"/architecture-and-concepts/network-architecture/fee-mechanism/","urlType":"internal"},{"content":"State","items":[{"content":"Starknet state","url":"/architecture-and-concepts/network-architecture/starknet-state/","urlType":"internal"},{"content":"Data availability","url":"/architecture-and-concepts/network-architecture/data-availability/","urlType":"internal"}]},{"content":"L1-L2 messaging","items":[{"content":"L1-L2 messaging mechanism","url":"/architecture-and-concepts/network-architecture/messaging-mechanism/","urlType":"internal"},{"content":"Messaging reference","url":"/architecture-and-concepts/network-architecture/messaging-reference/","urlType":"internal"}]},{"content":"Accounts","items":[{"content":"What is an account?","url":"/architecture-and-concepts/accounts/introduction/","urlType":"internal"},{"content":"Starknet’s account interface","url":"/architecture-and-concepts/accounts/approach/","urlType":"internal"},{"content":"Account interface function reference","url":"/architecture-and-concepts/accounts/account-functions/","urlType":"internal"},{"content":"Deploying new accounts","url":"/architecture-and-concepts/accounts/deploying-new-accounts/","urlType":"internal"},{"content":"Universal Deployer Contract","url":"/architecture-and-concepts/accounts/universal-deployer/","urlType":"internal"},{"content":"Simplified transaction flow","url":"/architecture-and-concepts/accounts/simplified-transaction-flow/","urlType":"internal"}]},{"content":"Contracts","items":[{"content":"Contract classes and instances","url":"/architecture-and-concepts/smart-contracts/contract-classes/","urlType":"internal"},{"content":"Class hash","url":"/architecture-and-concepts/smart-contracts/class-hash/","urlType":"internal"},{"content":"Compiled class hash","url":"/architecture-and-concepts/smart-contracts/compiled-class-hash/","urlType":"internal"},{"content":"Contract address","url":"/architecture-and-concepts/smart-contracts/contract-address/","urlType":"internal"},{"content":"Contract storage","url":"/architecture-and-concepts/smart-contracts/contract-storage/","urlType":"internal"},{"content":"Contract ABI","url":"/architecture-and-concepts/smart-contracts/contract-abi/","urlType":"internal"},{"content":"Events","url":"/architecture-and-concepts/smart-contracts/starknet-events/","urlType":"internal"},{"content":"Migrating a contract from Cairo v1 to Cairo v2","url":"/architecture-and-concepts/smart-contracts/contract-syntax/","urlType":"internal"},{"content":"Cairo and Sierra","url":"/architecture-and-concepts/smart-contracts/cairo-and-sierra/","urlType":"internal"},{"content":"Cairo builtins","url":"/architecture-and-concepts/smart-contracts/cairo-builtins/","urlType":"internal"},{"content":"Serialization of Cairo types","url":"/architecture-and-concepts/smart-contracts/serialization-of-cairo-types/","urlType":"internal"},{"content":"System calls","url":"/architecture-and-concepts/smart-contracts/system-calls-cairo1/","urlType":"internal"},{"content":"Execution information for the current block","url":"/architecture-and-concepts/smart-contracts/execution-info/","urlType":"internal"}]},{"content":"Cryptography","items":[{"content":"The STARK field","url":"/architecture-and-concepts/cryptography/p-value/","urlType":"internal"},{"content":"The STARK curve","url":"/architecture-and-concepts/cryptography/stark-curve/","urlType":"internal"},{"content":"Hash functions","url":"/architecture-and-concepts/cryptography/hash-functions/","urlType":"internal"}]}]},{"content":"The Economics of Starknet","url":"/architecture-and-concepts/economics-of-starknet/","urlType":"internal"}],"root":true,"order":3},{"items":[{"content":"Tools and resources","items":[{"content":"Developer Tools","items":[{"content":"Overview","url":"/tools/devtools/overview/","urlType":"internal"},{"content":"Command Line Tools","url":"/tools/devtools/clis/","urlType":"internal"},{"content":"Software Development Kits","url":"/tools/devtools/sdks/","urlType":"internal"},{"content":"Smart Contract Development","url":"/tools/devtools/smart-contract-tools/","urlType":"internal"},{"content":"Visual Studio Code Extension","url":"/tools/devtools/vscode/","urlType":"internal"},{"content":"Local Development Nodes","url":"/tools/devtools/devnets/","urlType":"internal"},{"content":"Libraries for Dapps","url":"/tools/devtools/libs-for-dapps/","urlType":"internal"},{"content":"Dapp Frameworks","url":"/tools/devtools/dapp-frameworks/","urlType":"internal"},{"content":"Utilities","url":"/tools/devtools/utilities/","urlType":"internal"},{"content":"Security Tools","url":"/tools/devtools/security/","urlType":"internal"}]},{"content":"Full nodes and API services","url":"/tools/api-services/","urlType":"internal"},{"content":"Block explorers","url":"/tools/ref-block-explorers/","urlType":"internal"},{"content":"Audit providers","url":"/tools/audit/","urlType":"internal"}]},{"content":"StarkGate bridge guide","items":[{"content":"Overview","url":"/starkgate/overview/","urlType":"internal"},{"content":"StarkGate architecture","url":"/starkgate/architecture/","urlType":"internal"},{"content":"Procedures","items":[{"content":"Depositing funds","url":"/starkgate/depositing/","urlType":"internal"},{"content":"Withdrawing funds","url":"/starkgate/withdrawing/","urlType":"internal"},{"content":"Performing a Smart Deposit","url":"/starkgate/automated-actions-with-bridging/","urlType":"internal"},{"content":"Adding a token","url":"/starkgate/adding-a-token/","urlType":"internal"},{"content":"Cancelling a deposit","url":"/starkgate/cancelling-a-deposit/","urlType":"internal"},{"content":"Estimating StarkGate fees","url":"/starkgate/estimating-fees/","urlType":"internal"},{"content":"Migrating DAI v0 to DAI","url":"/tools/dai-token-migration/","urlType":"internal"}]},{"content":"StarkGate function and event reference","url":"/starkgate/function-reference/","urlType":"internal"}]},{"content":"Staking (WIP) 🛠️","items":[{"content":"Overview (WIP) 🛠️","url":"/staking/overview/","urlType":"internal"},{"content":"Staking Architecture (WIP) 🛠️","url":"/staking/architecture/","urlType":"internal"},{"content":"Procedures (WIP) 🛠️","items":[{"content":"Becoming a Validator (WIP) 🛠️","url":"/staking/entering-staking/","urlType":"internal"},{"content":"Increasing Stake (WIP) 🛠️","url":"/staking/increasing-staking/","urlType":"internal"},{"content":"Claiming Rewards (WIP) 🛠️","url":"/staking/claiming-rewards/","urlType":"internal"},{"content":"Delegating Stake (WIP) 🛠️","url":"/staking/delegating-stake/","urlType":"internal"},{"content":"Switching Delegation Pools (WIP) 🛠️","url":"/staking/switching-delegation-pools/","urlType":"internal"},{"content":"Exiting the Staking Protocol (WIP) 🛠️","url":"/staking/exiting-staking/","urlType":"internal"},{"content":"Managing Delegation Pools (WIP) 🛠️","url":"/staking/managing-staking-and-delegation-operations/","urlType":"internal"},{"content":"Handling Staking Events (WIP) 🛠️","url":"/staking/handling_staking_events/","urlType":"internal"}]}]},{"content":"Important addresses","items":[{"content":"Starknet contracts and sequencer addresses","url":"/tools/important-addresses/","urlType":"internal"},{"content":"Bridged tokens","url":"/tools/bridged-tokens/","urlType":"internal"}]},{"content":"Current limits","url":"/tools/limits-and-triggers/","urlType":"internal"}],"root":true,"order":5},{"items":[{"content":"Glossary","url":"/glossary/","urlType":"internal"}],"root":true,"order":6}]},"docs-common-content/1.0.0":{"displayVersion":"1.0.0","title":"Common Starknet content","version":"1.0.0","name":"docs-common-content","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Starknet documentation","site-url":"https://docs.starknet.io/","idprefix":"","stem":"latexmath","page-pagination":"","experimental":"","starknet_mainnet_version":"Mainnet: 0.13.1.1","starknet_testnet_version":"Sepolia: 0.13.1.1","page-starknet_version":"Mainnet: 0.13.1.1 | Sepolia: 0.13.1.1"},"sourcemap":false,"extensions":[{}]},"url":"/docs-common-content/1.0.0/"}}}}) \ No newline at end of file diff --git a/pr-1359/sitemap.xml b/pr-1359/sitemap.xml new file mode 100644 index 0000000000..38cd5fef01 --- /dev/null +++ b/pr-1359/sitemap.xml @@ -0,0 +1,363 @@ + + + +https://docs.starknet.io/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/accounts/account-functions/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/accounts/approach/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/accounts/deploying-new-accounts/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/accounts/introduction/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/accounts/simplified-transaction-flow/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/accounts/universal-deployer/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/cryptography/hash-functions/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/cryptography/p-value/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/cryptography/stark-curve/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/economics-of-starknet/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/network-architecture/block-structure/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/network-architecture/data-availability/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/network-architecture/fee-mechanism/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/network-architecture/messaging-mechanism/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/network-architecture/messaging-reference/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/network-architecture/starknet-architecture-overview/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/network-architecture/starknet-state/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/network-architecture/transaction-life-cycle/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/network-architecture/transactions/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/nodes/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/provers-overview/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/cairo-and-sierra/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/cairo-builtins/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/class-hash/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/compiled-class-hash/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/contract-abi/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/contract-address/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/contract-classes/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/contract-storage/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/contract-syntax/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/execution-info/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/serialization-of-cairo-types/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/starknet-events/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/smart-contracts/system-calls-cairo1/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/architecture-and-concepts/solidity-verifier/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/cli/starkli/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/cli/starknet-compiler-options/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/glossary/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/notational-conventions/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/quick-start/declare-a-smart-contract/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/quick-start/deploy-a-smart-contract/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/quick-start/deploy-interact-with-a-smart-contract-remix/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/quick-start/environment-setup/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/quick-start/interact-with-a-smart-contract/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/quick-start/set-up-an-account/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/quick-start/using_devnet/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/architecture/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/claiming-rewards/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/delegating-stake/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/entering-staking/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/exiting-staking/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/handling_staking_events/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/increasing-staking/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/managing-staking-and-delegation-operations/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/overview/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/staking/switching-delegation-pools/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starkgate/adding-a-token/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starkgate/architecture/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starkgate/automated-actions-with-bridging/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starkgate/cancelling-a-deposit/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starkgate/depositing/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starkgate/estimating-fees/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starkgate/function-reference/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starkgate/overview/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starkgate/withdrawing/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starknet-versions/deprecated/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starknet-versions/juno-versions/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starknet-versions/pathfinder-versions/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starknet-versions/upcoming-versions/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/starknet-versions/version-notes/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/api-services/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/audit/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/bridged-tokens/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/dai-token-migration/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/clis/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/dapp-frameworks/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/devnets/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/libs-for-dapps/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/overview/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/sdks/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/security/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/smart-contract-tools/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/utilities/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/devtools/vscode/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/important-addresses/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/limits-and-triggers/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/ref-block-explorers/ +2024-09-20T01:10:45.688Z + + +https://docs.starknet.io/tools/starknet-book/ +2024-09-20T01:10:45.688Z + + diff --git a/pr-1359/staking/architecture/index.html b/pr-1359/staking/architecture/index.html new file mode 100644 index 0000000000..6c313eb5af --- /dev/null +++ b/pr-1359/staking/architecture/index.html @@ -0,0 +1,1142 @@ + + + + + + Staking Architecture (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Staking Architecture (WIP) 🚧

+
+
+
+

Staking on Starknet is designed to enhance network security and decentralization by allowing users to stake their STRK tokens directly or delegate them to other validators. The architecture is modular, with different contracts handling specific responsibilities to ensure flexibility, security, and ease of upgrades. For more details on the staking architecture, visit the following link: Starknet Staking Repository.

+
+
+
+
+

Components of the Staking Architecture

+
+
+

Staking is divided into several key components, each responsible for different aspects of the staking process.

+
+
+

The following contracts handle the core functionalities of the staking system:

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Contracts of the Staking Architecture

Contract

Description

Staking Contract

The central contract that manages the staking process. It handles direct staking, rewards distribution, and interactions with delegation pools. Validators interact with this contract to stake their tokens, claim rewards, and initiate unstaking.

Delegation Pooling Contract

This contract manages the delegation process, allowing delegators to assign their tokens to a validator for staking. The contract is responsible for tracking each delegator’s share, calculating their rewards, and managing the delegation and unstaking processes.

Reward Supplier Contract

A dedicated contract that calculates and supplies the rewards for validators and delegators. It interfaces with the staking contract to distribute rewards based on the defined minting curve.

Minting Curve Contract

A contract responsible for implementing the minting curve logic that governs the reward distribution mechanism. It adjusts rewards dynamically based on the total staked amount and the overall supply of STRK tokens.

+
+

The following data structures are stored within the contracts and play a crucial role in managing validators' and delegators' information within the staking protocol:

+
+ + ++++ + + + + + + + + + + + + + + +
Table 2. Key Structures in the Staking Architecture

Structure

Description

StakerInfo Structure

A data structure stored within the staking contract that holds detailed information about each validator, including their staked amount, unclaimed rewards, delegation details, and operational parameters. This structure ensures that validators' information is accurately tracked and updated.

PoolMemberInfo Structure

A data structure stored within the delegation pooling contract that holds information about each delegator’s contributions, rewards, and status within the pool. This structure helps manage and calculate the delegation and reward distribution processes for pool members.

+
+

For more technical details, you can refer to the full staking specification document available in: Staking Repository Spec.

+
+
+
+
+

Staking Contract

+
+
+

The staking contract is the core of the staking system. It manages the lifecycle of validators, from the initial stake to claiming rewards and unstaking. The contract ensures that the validator’s tokens are securely locked and that rewards are distributed according to the minting curve.

+
+
+

Key Functions and Responsibilities:
+stake: Allows users to stake their STRK tokens directly into the contract. The function initializes the validator’s information, locks the tokens, and optionally deploys a delegation pool if pooling is enabled.
+increase_stake: Lets existing validators add more tokens to their stake. The contract recalculates rewards and updates the validator’s information accordingly.
+unstake_intent: Initiates the unstaking process by locking the validator’s tokens for a specified exit period. No rewards are earned during this period.
+unstake_action: Finalizes the unstaking process after the exit period has passed, releasing the staked tokens back to the validator.
+claim_rewards: Calculates and transfers the validator’s accumulated rewards to their designated reward address.

+
+
+
+
+

Delegation Pooling Contract

+
+
+

The delegation pooling contract enables users to delegate their tokens to a validator without having to manage the staking process themselves. This contract tracks each delegator’s contribution, calculates their rewards, and manages the delegation lifecycle.

+
+
+

Key Functions and Responsibilities:
+enter_delegation_pool: Allows users to delegate their tokens to the pool associated with a validator. This function transfers the tokens, updates the delegator’s record, and integrates them into the validator’s pool.
+add_to_delegation_pool: Enables existing delegators to increase their delegation amount. The contract updates the pool’s total and recalculates the member’s rewards.
+exit_delegation_pool_intent: Initiates the process for a delegator to exit the pool. Similar to validators, the delegator’s funds are locked for a period before they can be withdrawn.
+exit_delegation_pool_action: Finalizes the exit process for a delegator, returning their tokens and any unclaimed rewards.
+switch_delegation_pool: Allows a delegator to transfer their delegated stake from one validator’s pool to another, facilitating dynamic delegation strategies.
+claim_rewards: Transfers the delegator’s earned rewards to their specified reward address.

+
+
+
+
+

Reward Supplier Contract

+
+
+

The reward supplier contract is responsible for calculating and supplying the staking rewards based on the minting curve. It ensures that the rewards are distributed fairly and in accordance with the protocol’s economic parameters.

+
+
+

Key Functions and Responsibilities:
+calculate_staking_rewards: Computes the rewards based on the current staking rate and the minting curve, updating the staking contract with the amount to be distributed.
+claim_rewards: Handles the transfer of rewards to the staking contract, ensuring that the correct amount is distributed to validators and delegators.

+
+
+
+
+

Minting Curve Contract

+
+
+

The minting curve contract defines the economic model that governs reward distribution. It ensures that the network’s inflation is managed while incentivizing participation in staking.

+
+
+

Key Functions and Responsibilities:
+yearly_mint: Returns the amount of STRK tokens to be minted annually based on the current staking rate. This function uses a square root formula to balance rewards and inflation.
+update_total_supply: Updates the total supply of STRK tokens, ensuring that the minting calculations remain accurate.

+
+
+
+
+

Security and Upgradability

+
+
+

The staking architecture on Starknet is designed with security and upgradability in mind. Each contract is modular, allowing for targeted upgrades and improvements without affecting the entire system. Access control mechanisms are in place to ensure that only authorized parties can make critical changes, further enhancing the security of the staking process.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/staking/claiming-rewards/index.html b/pr-1359/staking/claiming-rewards/index.html new file mode 100644 index 0000000000..f1a408d5c2 --- /dev/null +++ b/pr-1359/staking/claiming-rewards/index.html @@ -0,0 +1,1067 @@ + + + + + + Claiming Rewards (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Claiming Rewards (WIP) 🚧

+
+

Staking rewards on Starknet accumulate over time as your staked STRK tokens contribute to network security. To claim these rewards, you need to interact with the staking contract (if you are a validator) or the specific delegation pooling contract associated with the validator you have staked with (if you are a delegator) and execute the appropriate functions.

+
+
+
Prerequisites
+
    +
  • +

    The validator or delegator address must have an existing stake in the respective contract.

    +
  • +
  • +

    The caller must be either the validator/delegator or their respective reward address.

    +
  • +
+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the appropriate contract:

    +
    +
      +
    • +

      For validators: Navigate to the staking contract.

      +
    • +
    • +

      For delegators: Navigate to the delegation pooling contract associated with the validator you have staked with.

      +
    • +
    +
    +
  2. +
  3. +

    In the contract interface, locate and select the claim_rewards function.

    +
  4. +
  5. +

    Enter the following parameters:

    +
    +
      +
    • +

      In staker_address or pool_member, enter the address of the validator or delegator for whom you are claiming the rewards.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to initiate the rewards claim.

    +
  8. +
+
+
+ + + + + +
+ + +
+

Ensure that the address entered is either the validator’s or delegator’s main address or their respective reward address. If the address is not authorized, the function will fail.

+
+
+
+
+

Once the transaction is successful, the rewards will be transferred to the designated reward address associated with the staked tokens.

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/staking/delegating-stake/index.html b/pr-1359/staking/delegating-stake/index.html new file mode 100644 index 0000000000..a4e64a1bbb --- /dev/null +++ b/pr-1359/staking/delegating-stake/index.html @@ -0,0 +1,1038 @@ + + + + + + Delegating Stake (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Delegating Stake (WIP) 🚧

+
+

Delegating your stake on Starknet involves adding your stake to a validator’s delegation pool managed by the staking contract. This approach offers the advantage of lower capital requirements and relieves you of the need to manage the operational aspects of staking, as the validator handles these responsibilities.

+
+
+

The delegation process includes joining a validator’s delegation pool by interacting with the enter_delegation_pool function.

+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the delegation pooling contract associated with the validator you want to delegate to.

    +
  2. +
  3. +

    In the contract interface, locate and select the enter_delegation_pool function.

    +
  4. +
  5. +

    Enter the following parameters:

    +
    +
      +
    • +

      In amount, enter the number of STRK tokens you want to delegate to the validator.

      +
    • +
    • +

      In reward_address, enter the address where you wish to receive your staking rewards.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to join the delegation pool.

    +
  8. +
+
+
+

Upon successful execution, your STRK tokens will be added to the validator’s delegation pool, and you will begin earning rewards as part of the pooled staking process.

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/staking/entering-staking/index.html b/pr-1359/staking/entering-staking/index.html new file mode 100644 index 0000000000..9a3d1a77f0 --- /dev/null +++ b/pr-1359/staking/entering-staking/index.html @@ -0,0 +1,1094 @@ + + + + + + Becoming a Validator (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Becoming a Validator (WIP) 🚧

+
+

Using the Starknet staking contract to stake STRK tokens requires interacting with the stake function. The stake function does the following:

+
+
+
    +
  1. +

    Locks the specified amount of STRK tokens from the validator’s account into the staking contract.

    +
  2. +
  3. +

    Records the validator’s details, including reward and operational addresses, in the staking contract.

    +
  4. +
  5. +

    If pooling is enabled, deploys a new delegation pool contract associated with the validator.

    +
  6. +
+
+
+

Subsequently, the validator’s tokens will be locked in the staking contract, and the validator will begin earning rewards based on their stake.

+
+
+

For more information on what happens during the staking process, see Staking Contract Architecture.

+
+
+
Prerequisites
+
    +
  • +

    Validators are expected to run full nodes in preparation for the following stages of the protocol. You can use any full node implementation you choose:

    +
    + +
    +
  • +
  • +

    A Starknet-compatible block explorer or CLI tool.

    +
  • +
  • +

    Sufficient STRK token balance in your wallet.

    +
  • +
  • +

    Pre-approval of the STRK ERC20 contract (Starkscan, Voyager) +on Starknet for the transfer of tokens from your address to the staking contract.

    +
  • +
+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the staking contract.

    +
  2. +
  3. +

    In the contract interface, locate and select the stake function.

    +
  4. +
  5. +

    Enter the following parameters:

    +
    +
      +
    • +

      In reward_address, enter the address where the rewards will be sent.

      +
    • +
    • +

      In operational_address, enter the operational address associated with this stake.

      +
    • +
    • +

      In amount, enter the number of STRK tokens you want to stake.

      +
    • +
    • +

      In pooling_enabled, enter true if you wish to enable delegation pooling, otherwise enter false.

      +
    • +
    • +

      In commission, enter the commission rate for any delegated staking. The rate should be entered as a percentage with precision, where 10000 represents 100%. For example, to set a 5% commission, you would enter 500.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to execute the staking operation.

    +
  8. +
+
+
+
Secured hardware wallets:
+

Ledger hardware wallet is supported through: +* Braavos wallet +* Argent wallet

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/staking/exiting-staking/index.html b/pr-1359/staking/exiting-staking/index.html new file mode 100644 index 0000000000..d61dce264a --- /dev/null +++ b/pr-1359/staking/exiting-staking/index.html @@ -0,0 +1,1215 @@ + + + + + + Exiting the Staking Protocol (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Exiting the Staking Protocol (WIP) 🚧

+
+
+
+

Exiting the staking protocol involves either unstaking your STRK tokens as a validator or undelegating your stake as a delegator. Both processes require you to first signal your intent to exit, followed by an action to finalize the process after a waiting period.

+
+
+
+
+

Unstaking as a Validator

+
+
+

Validators can unstake their STRK tokens, which involves pausing rewards and exiting the staking contract.

+
+
+
Prerequisites
+
    +
  • +

    The validator must not currently be in the unstake process.

    +
  • +
+
+
+
Procedure
+
    +
  1. +

    Signal Unstake Intent:

    +
    +
      +
    1. +

      Using a Starknet block explorer, navigate to the staking contract.

      +
    2. +
    3. +

      In the contract interface, locate and select the unstake_intent function.

      +
    4. +
    5. +

      Submit the transaction to initiate the unstake process. This will record the unstake intent, pause rewards collection, and set a waiting period.

      +
    6. +
    +
    +
  2. +
  3. +

    Finalize Unstake:

    +
    +
      +
    1. +

      After the waiting period has passed, return to the staking contract.

      +
    2. +
    3. +

      In the contract interface, locate and select the unstake_action function.

      +
    4. +
    5. +

      Enter the following parameters:

      +
      +
        +
      • +

        In staker_address, enter the validator’s address.

        +
      • +
      +
      +
    6. +
    7. +

      Submit the transaction to finalize the unstaking process and transfer the staked STRK tokens back to the validator’s account.

      +
    8. +
    +
    +
  4. +
+
+
+ + + + + +
+ + +
+

Any address can initiate the unstake_action function once the waiting period has passed.

+
+
+
+
+ + + + + +
+ + +
+

Ensure that enough time has passed since signaling your unstake intent. If the waiting period has not expired, the unstake_action function will fail.

+
+
+
+
+
+
+

Undelegating as a Delegator

+
+
+

Delegators can undelegate their stake from a validator’s delegation pool by following a similar process.

+
+
+
Prerequisites
+
    +
  • +

    A Starknet-compatible block explorer or CLI tool.

    +
  • +
  • +

    The delegator must not currently be in the undelegation process.

    +
  • +
  • +

    The contract address of the delegation pooling contract. (TODO: Check if this really needs to be mentioned.)

    +
  • +
+
+
+
Procedure
+
    +
  1. +

    Signal Undelegation Intent:

    +
    +
      +
    1. +

      Using a Starknet block explorer, navigate to the delegation pooling contract.

      +
    2. +
    3. +

      In the contract interface, locate and select the exit_delegation_pool_intent function.

      +
    4. +
    5. +

      Submit the transaction to initiate the undelegation process. This will record the undelegation intent, pause rewards collection, and set a waiting period.

      +
    6. +
    +
    +
  2. +
  3. +

    Finalize Undelegation:

    +
    +
      +
    1. +

      After the waiting period has passed, return to the delegation pooling contract.

      +
    2. +
    3. +

      In the contract interface, locate and select the exit_delegation_pool_action function.

      +
    4. +
    5. +

      Enter the following parameters:

      +
      +
        +
      • +

        In pool_member, enter the delegator’s address.

        +
      • +
      +
      +
    6. +
    7. +

      Submit the transaction to finalize the undelegation process and transfer the undelegated STRK tokens back to the delegator’s account.

      +
    8. +
    +
    +
  4. +
+
+
+ + + + + +
+ + +
+

Any address can initiate the exit_delegation_pool_action function once the waiting period has passed.

+
+
+
+
+ + + + + +
+ + +
+

Ensure that enough time has passed since signaling your undelegation intent. If the waiting period has not expired, the exit_delegation_pool_action function will fail.

+
+
+
+
+
+
+

Additional Notes

+
+
+
    +
  • +

    When a validator unstakes, any unclaimed rewards are automatically transferred to the reward address before the stake is returned.

    +
  • +
  • +

    Similarly, when a delegator undelegates, any unclaimed rewards are automatically transferred to the delegator’s reward address.

    +
  • +
+
+
+

For more details on the staking and delegation processes, see Staking Contract Architecture.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/staking/handling_staking_events/index.html b/pr-1359/staking/handling_staking_events/index.html new file mode 100644 index 0000000000..a57493964d --- /dev/null +++ b/pr-1359/staking/handling_staking_events/index.html @@ -0,0 +1,1005 @@ + + + + + + Handling Staking Events (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/staking/increasing-staking/index.html b/pr-1359/staking/increasing-staking/index.html new file mode 100644 index 0000000000..78ac98cefb --- /dev/null +++ b/pr-1359/staking/increasing-staking/index.html @@ -0,0 +1,1063 @@ + + + + + + Increasing Stake (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Increasing Stake (WIP) 🚧

+
+

The staking and pooling contracts allow validators and delegators to increase their existing stake. Validators use the increase_stake function, which is called from the staking contract, while delegators use the add_to_delegation_pool function, which is called from the delegation pooling contract. These functions add the specified amount of STRK tokens to the current stake, recalculate rewards before the staked amount is updated, and update the total staked amount.

+
+
+
Prerequisites
+
    +
  • +

    Sufficient STRK token balance in your Starknet wallet.

    +
  • +
  • +

    The validator/delegator must have pre-approved the relevant contract (staking contract for validators, delegation pooling contract for delegators) to transfer the specified STRK amount from their account.

    +
  • +
  • +

    The validator/delegator must not be in an unstake/undelegate process.

    +
  • +
  • +

    The caller must be either the validator/delegator or their respective reward address.

    +
  • +
+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the relevant contract (staking contract for validators, delegation pooling contract for delegators).

    +
  2. +
  3. +

    In the contract interface, locate and select the increase_stake function (for validators) or the add_to_delegation_pool function (for delegators).

    +
  4. +
  5. +

    Enter the following parameters:

    +
    +
      +
    • +

      In address, enter the address of the validator (for increase_stake) or the delegator (for add_to_delegation_pool) whose stake you want to increase. This can be either the validator’s/delegator’s address or their respective reward address.

      +
    • +
    • +

      In amount, enter the number of STRK tokens you want to add to the existing stake.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to execute the stake increase.

    +
  8. +
+
+
+ + + + + +
+ + +
+

Ensure that the validator/delegator is not in an unstake/undelegate process before attempting to increase the stake. If they are currently unstaking/undelegating, this function will fail.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/staking/managing-staking-and-delegation-operations/index.html b/pr-1359/staking/managing-staking-and-delegation-operations/index.html new file mode 100644 index 0000000000..a141e9a8e3 --- /dev/null +++ b/pr-1359/staking/managing-staking-and-delegation-operations/index.html @@ -0,0 +1,1194 @@ + + + + + + Managing Staking and Delegation Operations (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Managing Staking and Delegation Operations (WIP) 🚧

+
+
+
+

This guide outlines how both validators and delegators can manage various aspects of their staking and delegation activities on Starknet. Validators can perform operations such as opening delegation pools, updating commission rates, and changing operational and reward addresses. Delegators can manage their participation by changing their reward addresses associated with delegation pools.

+
+
+
+
+

Managing Staking Operations as a Validator

+
+
+

Validators have several functions available to effectively manage their staking and delegation settings.

+
+
+
Prerequisites
+
    +
  • +

    An existing stake in the staking contract.

    +
  • +
  • +

    An existing delegation pool if updating pool-specific settings.

    +
  • +
+
+
+

Opening a Delegation Pool

+
+

If a validator does not yet have a delegation pool, they can open one by calling the set_open_for_delegation function.

+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the staking contract.

    +
  2. +
  3. +

    In the contract interface, locate and select the set_open_for_delegation function.

    +
  4. +
  5. +

    Enter the following parameter:

    +
    +
      +
    • +

      commission: Enter the commission rate for the delegation pool, expressed as a percentage with precision (where 10000 represents 100%). For example, to set a 5% commission, enter 500.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to create the delegation pool.

    +
  8. +
+
+
+

Once created, the delegation pool will be associated with the validator’s staking contract, allowing delegators to delegate their stake to the validator.

+
+
+
+

Updating Commission Rate

+
+

Validators can update the commission rate of their delegation pool using the update_commission function. Note: The commission rate can only be decreased or kept the same; it cannot be increased.

+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the staking contract.

    +
  2. +
  3. +

    In the contract interface, locate and select the update_commission function.

    +
  4. +
  5. +

    Enter the following parameter:

    +
    +
      +
    • +

      commission: Enter the new commission rate, which must be equal to or less than the current rate, expressed as a percentage with precision (where 10000 represents 100%). For example, to set a 5% commission, enter 500.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to update the commission rate.

    +
  8. +
+
+
+
+

Changing the Operational Address

+
+

Validators can change their operational address by interacting with the change_operational_address function.

+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the staking contract.

    +
  2. +
  3. +

    In the contract interface, locate and select the change_operational_address function.

    +
  4. +
  5. +

    Enter the following parameter:

    +
    +
      +
    • +

      operational_address: Enter the new operational address.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to update the operational address.

    +
  8. +
+
+
+
+

Changing the Reward Address

+
+

Validators can update the reward address associated with their staking contract using the change_reward_address function.

+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the staking contract.

    +
  2. +
  3. +

    In the contract interface, locate and select the change_reward_address function.

    +
  4. +
  5. +

    Enter the following parameter:

    +
    +
      +
    • +

      reward_address: Enter the new reward address.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to change the reward address.

    +
  8. +
+
+
+
+
+
+

Managing Delegation Settings as a Delegator

+
+
+

Changing the Reward Address

+
+

Delegators can change their reward address by interacting with the change_reward_address function in the delegation pooling contract.

+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the delegation pooling contract associated with your delegation.

    +
  2. +
  3. +

    In the contract interface, locate and select the change_reward_address function.

    +
  4. +
  5. +

    Enter the following parameter:

    +
    +
      +
    • +

      reward_address: Enter the new reward address.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to update the reward address.

    +
  8. +
+
+
+
+
+
+

Additional Information

+
+
+

For more information on how the staking and delegation pooling systems work, refer to the Staking Contract Architecture.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/staking/overview/index.html b/pr-1359/staking/overview/index.html new file mode 100644 index 0000000000..bd42069ee0 --- /dev/null +++ b/pr-1359/staking/overview/index.html @@ -0,0 +1,1174 @@ + + + + + + Staking Overview (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Staking Overview (WIP) 🚧

+
+
+
+

Staking on Starknet involves locking STRK tokens in the staking protocol, contributing to network security and performance. Users can either stake directly or delegate their tokens to others, with rewards based on their level of participation and contribution.

+
+
+

The key terms used in this document are:

+
+
+
    +
  • +

    Stake: Locking STRK tokens into the staking protocol.

    +
  • +
  • +

    Delegate: Assigning STRK tokens to a validator to participate indirectly.

    +
  • +
  • +

    Reward: Earnings from participating in staking.

    +
  • +
+
+
+ + + + + +
+ + +
+

STRK tokens never leave the Starknet protocol during these operations.

+
+
+
+
+
+
+

Staking Protocol Details

+
+
+ +
+ +
+
+
+

Overview

+
+

The staking protocol features two main options:

+
+
+
    +
  • +

    Staking: Users can stake any amount of STRK, with a minimum threshold set at 20,000 STRK. Validators are expected to run full nodes and eventually handle additional responsibilities as the protocol evolves.

    +
  • +
  • +

    Stake Delegation: Users can delegate their STRK to validators without running their own nodes. Delegators share in the rewards earned by the validators they choose.

    +
  • +
+
+
+

Validators and delegators can both unstake their funds, subject to network-defined latencies for security.

+
+
+
+

Staking Rewards

+
+

Rewards are distributed based on the amount staked and the commission policy constant \(CP\) set by the validator. The rewards are calculated using the following formulas:

+
+
+
+\[\begin{align} +\text{Validators: } & \; \left[\text{self_stake} + \text{total_stake_delegated} \times CP\right] \times \text{rewards_constant} \times \text{time_interval} \\ +\text{Stake Delegators: } & \; \text{stake_delegated} \times (1 - CP) \times \text{rewards_constant} \times \text{time_interval} +\end{align}\] +
+
+
+

Here, \(\text{rewards_constant}\) is determined by the minting curve, which adjusts rewards based on the total staked amount.

+
+
+
+

Minting Curve

+
+

The minting curve balances participation and inflation by adjusting rewards based on the total STRK locked in the protocol. It is defined by the formula:

+
+
+
+\[M = \frac{C}{10} \times \sqrt{S}\] +
+
+
+

Where:

+
+
+
    +
  • +

    \(S\) is the staking rate as a percentage of the total token supply.

    +
  • +
  • +

    \(M\) is the annual minting rate as a percentage of the total token supply.

    +
  • +
  • +

    \(C\) is the maximum theoretical inflation percentage.

    +
  • +
+
+
+

For the first stage, \(C\) is proposed to be 1.6%.

+
+
+
+

Latencies

+
+
    +
  • +

    Current Version: Immediate entry and exit from the staking protocol. However, funds are subject to a 21-day security lockup after withdrawal.

    +
  • +
  • +

    Future Versions: Introduction of epochs to determine entry/exit latencies and continued 21-day lockup after withdrawal.

    +
  • +
+
+
+ + + + + +
+ + +
+

Stake delegators can switch between validators without waiting for the full lockup period, promoting a competitive delegation market.

+
+
+
+
+
+

Economic Parameters

+
+

The proposed economic parameters are:

+
+
+
    +
  • +

    Minimum STRK for Staking: 20,000 STRK

    +
  • +
  • +

    Withdrawal Security Lockup: 21 days

    +
  • +
  • +

    Minting Curve Yearly Inflation Cap (\(C\)): 1.6% (see here for the relevant voting proposal)

    +
  • +
  • +

    Commission Policy Parameter (\(CP\)): Set by the validator (0 - 1)

    +
  • +
+
+
+

These values are our proposed starting points for this version of the protocol. As part of the rationale behind this version, they are subject to change and may be adjusted to better suit the protocol’s needs under the proper governance procedures.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/staking/switching-delegation-pools/index.html b/pr-1359/staking/switching-delegation-pools/index.html new file mode 100644 index 0000000000..2d6a2a0ddc --- /dev/null +++ b/pr-1359/staking/switching-delegation-pools/index.html @@ -0,0 +1,1069 @@ + + + + + + Switching Delegation Pools (WIP) 🚧 :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Switching Delegation Pools (WIP) 🚧

+
+

Switching your delegated stake from one validator’s delegation pool to another allows you to optimize your staking strategy by moving your funds to a different validator. This process involves interacting with the switch_delegation_pool function in the delegation pooling contract, which coordinates with the staking contract to move your stake.

+
+
+
Prerequisites
+
    +
  • +

    An existing delegation in a validator’s pool with a STRK token balance equal to or greater than the amount you wish to switch.

    +
  • +
  • +

    The delegator must have initiated an undelegation process before attempting to switch pools.

    +
  • +
  • +

    The target validator must have an active delegation pool associated with their staking contract.

    +
  • +
+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, navigate to the delegation pooling contract associated with the validator from whose pool you wish to switch.

    +
  2. +
  3. +

    In the contract interface, locate and select the switch_delegation_pool function.

    +
  4. +
  5. +

    Enter the following parameters:

    +
    +
      +
    • +

      In to_staker, enter the address of the validator whose pool you want to switch to.

      +
    • +
    • +

      In to_pool, enter the address of the target delegation pooling contract associated with the new validator.

      +
    • +
    • +

      In amount, enter the number of STRK tokens you want to move to the new delegation pool.

      +
    • +
    +
    +
  6. +
  7. +

    Submit the transaction to execute the delegation pool switch.

    +
  8. +
+
+
+ + + + + +
+ + +
+

Ensure that you have initiated the undelegation process before attempting to switch pools. If the undelegation intent has not been set, this function will fail.

+
+
+
+
+

Upon successfully switching pools, any unclaimed rewards from your previous delegation pool will be transferred to your designated reward address. Your subsequent rewards will be based on the performance of the new validator’s delegation pool.

+
+
+

For more details on the staking architecture and how delegation pools work, see Staking Contract Architecture.

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starkgate/adding-a-token/index.html b/pr-1359/starkgate/adding-a-token/index.html new file mode 100644 index 0000000000..cf1645ab22 --- /dev/null +++ b/pr-1359/starkgate/adding-a-token/index.html @@ -0,0 +1,1027 @@ + + + + + + Adding a token to StarkGate :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starkgate/architecture/index.html b/pr-1359/starkgate/architecture/index.html new file mode 100644 index 0000000000..995154b848 --- /dev/null +++ b/pr-1359/starkgate/architecture/index.html @@ -0,0 +1,1261 @@ + + + + + + StarkGate architecture :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

StarkGate architecture

+
+
+
+

While StarkGate is referred to as a bridge, technically, each supported token has its own bridge, each of which is defined in a corresponding pair of L1 and L2 contracts, as described in Components of a bridge for an individual token.

+
+ + ++++ + + + + + + + + + + +
Table 1. Components of a bridge for an individual token

L1

+
    +
  • +

    ERC-20 contract that defines the token on Ethereum. This contract must exist before you can bridge it.

    +
  • +
  • +

    Bridge functionality for ERC-20 tokens is supported in StarknetTokenBridge.sol.

    +
  • +
+

L2

+
    +
  • +

    StarkGate Cairo bridge contract instance of the token_bridge.cairo contract class.

    +
  • +
  • +

    ERC-20 Cairo token contract instance of a standard ERC-20 Cairo token contract class. Each new contract uses the hash of this class to define its inheritance. StarkGate creates this contract automatically when creating the bridge in StarkGate.

    +
  • +
+
+
+ + + + + +
+ + +
+

StarkGate 2.0 provides a contract that enables seamless backward compatibility with the previous version of StarkGate.

+
+
+

When you update the code in your contract, make sure that you use the most up-to-date versions of all StarkGate contracts.

+
+
+
+
+

You can check if a token is currently supported with the L1 function getBridge.

+
+
+

You can permissionlessly add support for ERC-20 tokens to the multi-token bridge using the enrollTokenBridge function.

+
+
+
+
+

The StarkGate Manager and Registry

+
+
+

StarkGate includes the following administration components:

+
+
+
+
The StarkGate Manager
+
+

is responsible for adding bridges

+
+
The StarkGate Registry
+
+
+
    +
  • +

    contains the addresses to all supported bridges

    +
  • +
  • +

    enables a bridge developer to stop servicing an existing bridge

    +
  • +
+
+
+
+
+
+
+
+

Legacy bridges

+
+
+

All token bridges that existed prior to StarkGate 2.0 (Mainnet: January 2024) besides supporting all StarkGate 2.0 functionality, are backward compatible. Each token was bridged with a unique, custom pair of L1 and L2 bridge contracts. The L1 bridge is an instance of LegacyBridge.sol, and the L2 bridge is an instance of legacy_bridge_eic.cairo.

+
+
+

Example: USDC contracts

+
+
    +
  • +

    L1 ERC-20 contract address: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

    +
  • +
  • +

    L2 ERC-20 contract address: 0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8

    +
  • +
  • +

    L1 bridge contract address: 0xF6080D9fbEEbcd44D89aFfBFd42F098cbFf92816

    +
  • +
  • +

    L2 bridge contract address: 0x05cd48fccbfd8aa2773fe22c217e808319ffcc1c5a6a463f7d8fa2da48218196

    +
  • +
+
+
+

Consider the deposit functions for the L1 bridge contract for USDC on Etherscan: 0xf6080d9fbeebcd44d89affbfd42f098cbff92816#writeProxyContract

+
+
+

This contract has the following two deposit functions: deposit (0x0efe6a8b) and deposit (0xe2bbb158), which shows that the bridge includes support for the legacy functionality as well as the modern functionality:

+
+
+ ++++ + + + + + + + + +
+deposit (0x0efe6a8b) + +

The StarkGate 2.0 contract, which includes support for all tokens within a single contract, requiring that you enter the address of the token in the deposit function.

+
+deposit (0xe2bbb158) + +

The legacy contract, which is labeled Support Legacy ABI. This function does not include the token (address) parameter, because the contract that contains this function only supports USDC. Therefore, the address of the token is superfluous.

+
+
+
+
+

List of legacy bridges

+
+

The following tokens have legacy contracts as well as StarkGate 2.0 contracts:

+
+
+
    +
  • +

    Starknet Token (STRK)

    +
  • +
  • +

    Starknet Voting Token (vSTRK)

    +
  • +
  • +

    Wrapped BTC (WBTC)

    +
  • +
  • +

    USD Coin (USDC)

    +
  • +
  • +

    Tether USD (USDT)

    +
  • +
  • +

    Ether (ETH)

    +
  • +
  • +

    Dai Stablecoin (DAI)

    +
  • +
  • +

    Dai Stablecoin (DAI) (Dai v0)

    +
  • +
  • +

    Wrapped liquid staked Ether 2.0 (wstETH)

    +
  • +
  • +

    Rocket Pool ETH (rETH)

    +
  • +
  • +

    R Stablecoin (R)

    +
  • +
  • +

    Frax (FRAX)

    +
  • +
  • +

    Frax Share (FXS)

    +
  • +
  • +

    Staked Frax Ether (sfrxETH)

    +
  • +
  • +

    LUSD Stablecoin (LUSD)

    +
  • +
  • +

    Uniswap (UNI)

    +
  • +
+
+
+

For complete details, see the bridged_tokens directory on GitHub.

+
+
+
+
+
+

Withdrawal limit

+
+
+

By default, StarkGate imposes no limit on withdrawals. However, in order to mitigate risks associated with critical vulnerabilities that could result in the loss of user funds, StarkGate can enable a withdrawal limit.

+
+
+

If a serious security issue arises, the security agent in the StarkGate contract can limit withdrawals to 5% of the Total Value Locked (TVL) per day for any affected token by calling the setWithdrawLimitPCT() function in the WithdrawalLimit.sol contract. A dedicated team can then investigate and resolve the issue.

+
+
+

Only a security admin quorum can disable the withdrawal limit. The quorum will consist of Starknet Foundation members, Starknet ecosystem contributors, and StarkWare representatives. This diverse group will ensure that decisions reflect the Starknet community’s broad interests.

+
+
+

This approach, blending manual oversight with automated detection, aims to minimize potential losses.

+
+
+
+
+

Additional resources

+
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starkgate/automated-actions-with-bridging/index.html b/pr-1359/starkgate/automated-actions-with-bridging/index.html new file mode 100644 index 0000000000..c999619035 --- /dev/null +++ b/pr-1359/starkgate/automated-actions-with-bridging/index.html @@ -0,0 +1,1042 @@ + + + + + + Performing a Smart Deposit :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Performing a Smart Deposit

+
+

A Smart Deposit is a deposit that moves funds from L1 to L2 and then triggers subsequent actions. For example, a user can deposit funds and transfer those funds to another recipient, such as an exchange.

+
+
+

The depositWithMessage function enables a Smart Deposit. depositWithMessage is similar to the deposit function, with an additional 256-bit message, which can contain instructions for executing additional actions.

+
+
+

Upon completion, the depositWithMessage function triggers a call to a callback function, named on_receive, on the L2 contract that receives the deposit. The on_receive function receives the deposit message as input.

+
+
+

on_receive must return true for the deposit to succeed. If on_receive returns false, or if the recipient contract does not include the on_receive function, the depositWithMessage function’s L1 handler fails. The user can recover their funds using the depositWithMessageCancelRequest function.

+
+
+
To enable Smart Deposits in your application:
+
    +
  1. +

    Implement the on_receive function in the L2 contract that should receive deposits.

    +
  2. +
  3. +

    Use the depositWithMessage function to transfer funds from L1 to L2.

    +
  4. +
+
+

Additional resources

+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starkgate/cancelling-a-deposit/index.html b/pr-1359/starkgate/cancelling-a-deposit/index.html new file mode 100644 index 0000000000..fcc710a0e0 --- /dev/null +++ b/pr-1359/starkgate/cancelling-a-deposit/index.html @@ -0,0 +1,1063 @@ + + + + + + Cancelling a deposit :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Cancelling a deposit

+
+
+
+

To ensure self-custody, StarkGate enables you to cancel a deposit if, after depositing funds with the deposit function on L1, you don’t see your funds appear on L2 within a reasonable amount of time.

+
+
+

You can only cancel a deposit that you yourself deposited.

+
+
+

In order to guard against an attack, it takes approximately five days to cancel a deposit. From the moment StarkGate receives the cancellation request, a counter begins. When exactly five days have passed, and the funds still do not appear on L2, you can reclaim the deposit.

+
+
+
Procedure
+
    +
  1. +

    To cancel a deposit, call the depositCancelRequest request function.

    +
    +

    When StarkGate receives the cancellation request, a counter begins to count five days.

    +
    +
  2. +
  3. +

    When exactly five days have passed, and the funds still do not appear on L2, you can reclaim the deposit by calling depositReclaim.

    +
  4. +
+
+
+ + + + + +
+ + +
+

As long as the depositReclaim was not performed, the deposit may be processed, even if +the cancellation delay time has already passed.

+
+
+

Only the depositor is allowed to cancel +a deposit, and only before depositReclaim was performed.

+
+
+
+
+
+
+

Additional resources

+
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starkgate/depositing/index.html b/pr-1359/starkgate/depositing/index.html new file mode 100644 index 0000000000..347e9852f3 --- /dev/null +++ b/pr-1359/starkgate/depositing/index.html @@ -0,0 +1,1071 @@ + + + + + + Depositing funds with StarkGate :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Depositing funds with StarkGate

+
+

Using StarkGate to deposit L1 funds into the L2 Starknet requires StarkGate’s deposit function. The deposit function does the following:

+
+
+
    +
  1. +

    Transfers the funds from the user’s Ethereum account to the StarkGate L1 contract.

    +
  2. +
  3. +

    Emits a Deposit event that includes the L1 and L2 addresses of the user, and the amount deposited.

    +
  4. +
  5. +

    Sends a message to the corresponding L2 bridge with the amount deposited, and the recipient’s address.

    +
  6. +
+
+
+

Subsequently, the funds should be transferred to Starknet so that you can begin using them.

+
+
+

For more information on what happens during the transfer process, see L1→L2 transfer (deposit).

+
+
+
Prerequisites
+
    +
  • +

    An Ethereum block explorer, such as Etherscan.

    +
  • +
  • +

    Funds to transfer from L1 to L2, including enough to pay the fees required for the transfer.

    +
  • +
  • +

    The L1 address of the StarkGate bridge for the token you want to deposit. To view the token addresses for tokens on Mainnet or Sepolia testnet, see Bridged tokens and addresses.

    +
  • +
+
+
+
Procedure
+
    +
  1. +

    Using an Ethereum block explorer, go to the StarkGate contract and click Write as Proxy. For example, using Etherscan, go to 0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419

    +
  2. +
  3. +

    Click the StarkGate 2.0 deposit function (0x0efe6a8b).

    +
  4. +
  5. +

    Enter the following:

    +
    +
      +
    • +

      In payableAmount, enter the maximum amount of ETH that you’re willing to pay for the deposit transaction fee.

      +
    • +
    • +

      In token (address), enter the address of the L1 contract for the token that you want to deposit to L2.

      +
    • +
    • +

      In amount (uint256), enter an integer for the amount of the token that you want to deposit to L2.

      +
    • +
    • +

      In l2Recipient (uint256), enter the address of the recipient on L2.

      +
    • +
    +
    +
  6. +
  7. +

    Click Write. The deposit function initiates a deposit.

    +
  8. +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starkgate/estimating-fees/index.html b/pr-1359/starkgate/estimating-fees/index.html new file mode 100644 index 0000000000..98dad0a3b2 --- /dev/null +++ b/pr-1359/starkgate/estimating-fees/index.html @@ -0,0 +1,1043 @@ + + + + + + Estimating StarkGate fees :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Estimating StarkGate fees

+
+

StarkGate enforces a minimum fee for all transactions to account for the L1 → L2 message costs. For more information, see L1 → L2 message fees.

+
+
+

You can estimate the fee using the following L1 functions:

+
+
+ ++++ + + + + + + + + +
+estimateDepositFeeWei + +

Estimates the fee for a deposit transaction.

+
+estimateEnrollmentFeeWei + +

Estimates the fee for an enrollment transaction.

+
+
+
+
Additional resources
+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starkgate/function-reference/index.html b/pr-1359/starkgate/function-reference/index.html new file mode 100644 index 0000000000..91c195782c --- /dev/null +++ b/pr-1359/starkgate/function-reference/index.html @@ -0,0 +1,3172 @@ + + + + + + StarkGate function and event reference :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

StarkGate function and event reference

+
+
+
+

The StarkGate smart contracts include functions that you use to implement various flows in a dApp.

+
+
+

For information on the movement of funds between Ethereum and Starknet, see StarkGate bridge overview.

+
+
+ + + + + +
+ + +
+

StarkGate 2.0 provides a contract that enables seamless backward compatibility with the previous version of StarkGate.

+
+
+

When you update the code in your contract, make sure that you use the most up-to-date versions of all StarkGate contracts.

+
+
+
+
+

The L1 functions and their interfaces, where available, are defined in the following smart contracts:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ContractNameFunctions

StarkgateManager.sol

The StarkGate Manager.

+

Use the Manager to enroll a new token.

+

An interface is available through IStarkgateManager.sol.

+ +

StarkgateRegistry.sol

+

The StarkGate Registry.

+
+
+

Use the Registry to view the addresses of existing bridges and to stop servicing a specific token.

+
+
+

An interface is available through IStarkgateRegistry.sol.

+

StarknetTokenBridge.sol

The primary StarkGate bridge contract. The functions and events in this reference that provide the main user bridge functionality are defined in this contract.

IStarkgateService.sol

An interface to check if a contract is servicing a token.

+ +
+
+

The L2 functions and their interfaces, where available, are defined in the following smart contracts:

+
+ +++++ + + + + + + + + + + + + + + +
ContractDescriptionFunctions

token_bridge.cairo

The StarkGate bridge implementation on L2. This contract includes the standard functions for a token bridge.

+

An interface is available through token_bridge_interface.cairo.

+
+
+
+

L1 function reference

+
+
+

Functions are listed in alphabetical order.

+
+
+
+

deposit

+

Description

+
+

Deposits the specified amount of an ERC-20 token to the L1 StarkGate bridge contract.

+
+
+

The deposit function does the following:

+
+
+
    +
  • +

    Transfers the funds from the caller’s account to the Starknet bridge contract

    +
  • +
  • +

    Emits the Deposit event with the sender’s address on L1, the recipient’s address on L2, and the amount

    +
  • +
+
+

Visibility

+
+

external

+
+

State Mutability

+
+

payable

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + +
+address token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 l2Recipient + +

The L2 address of the recipient.

+
+
+

Returns

+
+

None.

+
+

Emitted event

+
+

Deposit

+
+
+
Event attributes
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
+address indexed sender + +

The L1 address of the account that sent the deposit.

+
+address indexed token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 indexed l2Recipient + +

The L2 address of the recipient. +The L2 address of the recipient.

+
+uint256 nonce + +

The nonce for the L1 transaction.

+
+uint256 fee + +

The Starknet fee sent with the transaction.

+
+
+

Function and event definitions

+ +
+ +
+
+
+
+

depositCancelRequest

+

Description

+
+

Sends a request to StarkGate to cancel a deposit.

+
+
+

You can send a cancellation request if the funds you transfer from L1 to L2 do not appear on L2 within a reasonable amount of time.

+
+
+

In order to guard against an attack on Starknet, it takes approximately five days to cancel a deposit. When StarkGate receives the cancellation request, a counter begins. When exactly five days have passed, and the funds still do not appear on L2, you can reclaim the deposit using the depositReclaim function.

+
+
+

The depositReclaim function can only be used once for any deposit cancellation request.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

nonpayable

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + + + + + +
+address token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 l2Recipient + +

The L2 address of the recipient.

+
+uint256 nonce + +

The nonce of the deposit.

+
+
+

Returns

+
+

None.

+
+

Emitted event

+
+

DepositCancelRequest

+
+
+
Event attributes
+ ++++ + + + + + + + + + + + + + + + + + + + + +
+address indexed sender + +

The L1 address of the account that sent the deposit.

+
+address indexed token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 indexed l2Recipient + +

The L2 address of the recipient. +The L2 address of the recipient.

+
+uint256 nonce + +

The nonce of the deposit.

+
+
+

Function and event definitions

+ +
+ +
+
+
+
+

depositReclaim

+

Description

+
+

Reclaims a deposit after a five day period has passed from the time that StarkGate received a deposit cancellation request from the depositCancelRequest function.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

nonpayable

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + + + + + +
+address token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 l2Recipient + +

The L2 address of the recipient.

+
+uint256 nonce + +

The nonce of the deposit.

+
+
+

Returns

+
+

None.

+
+

Emitted event

+
+

event DepositReclaimed

+
+
+
Event attributes
+ ++++ + + + + + + + + + + + + + + + + + + + + +
+address indexed sender + +

The L1 address of the account that sent the deposit.

+
+address indexed token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 indexed l2Recipient + +

The L2 address of the recipient. +The L2 address of the recipient.

+
+uint256 nonce + +

The nonce of the deposit.

+
+
+

Function and event definitions

+
+

Contract: StarknetTokenBridge.sol

+
+
+ +
+

See also

+ +
+
+
+

depositWithMessage

+

Description

+
+

Similar to deposit, with a message attached.

+
+
+

With this function, a deposit transaction can trigger subsequent actions. For example, you can deposit funds and include a message to transfer those funds to another address. depositWithMessage lets you execute these two separate transactions with a single user action.

+
+
+

After depositing to another recipient, the L1 handler in token_bridge.cairo calls the on_receive function in the contract of the recipient.

+
+
+

If on_receive returns true, then the on_receive function succeeded. If it returns false, or if it doesn’t return any value because the on_receive function is not implemented in the recipient contract, the operation fails and the transaction is reverted.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

payable

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + + + + + +
+address token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 l2Recipient + +

The L2 address of the recipient.

+
+uint256[] calldata message + +

The message attached to the deposit.

+
+
+

Returns

+
+

None.

+
+

Emitted event

+
+

DepositWithMessage

+
+
+
Event attributes
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+address indexed sender + +

The L1 address of the account that sent the deposit.

+
+address indexed token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 indexed l2Recipient + +

The L2 address of the recipient. +The L2 address of the recipient.

+
+uint256[] message + +

The message attached to the deposit.

+
+uint256 nonce + +

The nonce for the L1 transaction.

+
+uint256 fee + +

The Starknet fee sent with the transaction.

+
+
+

Function and event definitions

+ +
+ +
+
+
+
+

depositWithMessageCancelRequest

+

Description

+
+

Sends a request to StarkGate to cancel a deposit sent with depositWithMessage.

+
+
+

Similar to depositCancelRequest.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

nonpayable

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
+address token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 l2Recipient + +

The L2 address of the recipient.

+
+uint256[] calldata message + +

The message attached to the deposit.

+
+uint256 nonce + +

The nonce of the deposit.

+
+
+

Returns

+
+

None.

+
+

Emitted event

+
+

DepositWithMessageCancelRequest

+
+
+
Event attributes
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+address indexed sender + +

The L1 address of the account that sent the deposit.

+
+address indexed token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 indexed l2Recipient + +

The L2 address of the recipient. +The L2 address of the recipient.

+
+uint256[] message + +

The message attached to the deposit.

+
+uint256 nonce + +

The nonce for the L1 transaction.

+
+
+

Function and event definitions

+ + +

See also

+ +
+
+
+

depositWithMessageReclaim

+

Description

+
+

Sends a request to StarkGate to cancel a deposit sent with depositWithMessage.

+
+
+

Similar to depositCancelRequest.

+
+
+

Reclaims a deposit sent with a message after a five day period has passed from the time that StarkGate received a deposit cancellation request from the depositWithMessageCancelRequest function.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

nonpayable

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + + + + + +
+address token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 l2Recipient + +

The L2 address of the recipient.

+
+uint256 nonce + +

The nonce of the deposit.

+
+
+

Returns

+
+

None.

+
+

Emitted event

+
+

DepositWithMessageCancelRequest

+
+
+
Event attributes
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+address indexed sender + +

The L1 address of the account that sent the deposit.

+
+address indexed token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the deposit.

+
+uint256 indexed l2Recipient + +

The L2 address of the recipient. +The L2 address of the recipient.

+
+uint256[] message + +

The message attached to the deposit.

+
+uint256 nonce + +

The nonce for the L1 transaction.

+
+
+

Function and event definitions

+ +
+ +
+

See also

+ +
+
+
+

enrollTokenBridge

+

Description

+
+

Creates a Starknet bridge for the specified ERC-20 token contract address in the multi-token bridge contracts and adds the token to the StarkGate Registry.

+
+
+

Does not work for any ERC-20 token bridge’s contract address that is already in the registry.

+
+
+

Enrolling a new bridge creates a new ERC-20 contract on L2. You can see the class hash for this contract using get_erc20_class_hash.

+
+
+ + + + + +
+ + +
+

Enrolling a new bridge does not add it to the StarkGate GUI. You can use a block explorer to use the newly created bridge.

+
+
+
+

Visibility

+
+

external

+
+

State Mutability

+
+

payable

+
+
+

The message payload needs to include funds to cover the Starknet (L2) fee for executing this transaction. You can include this payload using a standard wrapper such as web3.js.

+
+

Parameters

+
+ ++++ + + + + +
+address token + +

The address of the contract for the desired ERC-20 token.

+
+
+

Returns

+
+

None.

+
+

Emitted event

+
+

TokenEnrollmentInitiated

+
+

Function and event definition

+
+ +
+
+
+
+

estimateDepositFeeWei

+

Description

+
+

Returns an estimate of the fee, in Wei, for depositing funds to the L1 StarkGate bridge contract.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

view

+
+

Parameters

+
+

None.

+
+

Returns

+
+ ++++ + + + + +
+uint256 + +

An estimate of the fee, in Wei, for depositing funds to the L1 StarkGate bridge contract.

+
+
+

Emitted event

+
+

None.

+
+

Function definition

+
+

estimateDepositFeeWei in StarknetTokenBridge.sol

+
+

Additional resources

+
+ +
+
+
+
+

estimateEnrollmentFeeWei

+

Description

+
+

Returns an estimate of the fee, in Wei, for creating and registering a new bridge using the enrollTokenBridge function.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

view

+
+

Parameters

+
+

None.

+
+

Returns

+
+ ++++ + + + + +
+uint256 + +

An estimate of the fee, in Wei, for creating and registering a new bridge.

+
+
+

Emitted event

+
+

None.

+
+

Function definition

+
+

estimateEnrollmentFeeWei in StarknetTokenBridge.sol

+
+

Additional resource

+
+ +
+
+
+
+

getBridge

+

Description

+
+

Returns the address of the bridge for the specified token, or a value indicating if the bridge does not exist, is blocked, or is deactivated.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

view

+
+

Parameters

+
+ ++++ + + + + +
+address token + +

The address of the contract for the desired ERC-20 token.

+
+
+

Returns

+
+ ++++ + + + + + + + + + + + + +
+address address + +

The address of the bridge for the specified token.

+
+Address(0) + +

The bridge does not exist.

+
+Address(1) + +

The bridge is blocked or deactivated.

+
+
+

Emitted event

+
+

None.

+
+

Function definition

+
+

getBridge in IStarkgateRegistry.sol

+
+
+
+
+

getRegistry

+

Description

+
+

Returns the address of the StarkGate Registry contract.

+
+
+

Only the Manager uses this function.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

view

+
+

Parameters

+
+

None

+
+

Returns

+
+ ++++ + + + + +
+address + +

The address of the Registry contract.

+
+
+

Emitted event

+
+

None.

+
+

Function definition

+
+

getRegistry in StarkgateManager.sol

+
+
+
+
+

getStatus

+

Description

+
+

Returns the status of a token in StarkGate.

+
+
+

deploy transaction triggered by the enrollTokenBridge API.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

view

+
+

Parameters

+
+ ++++ + + + + +
+address token + +

The address of the contract for the desired ERC-20 token.

+
+
+

Returns

+
+ ++++ + + + + +
+TokenStatus + +

One of the following values:

+
+ + + + + + + + + + + + + + + + + +
+0 + +

Unknown. The bridge does not recognize the token.

+
+1 + +

Pending. The token has been enrolled to StarkGate, but the deploy transaction has not yet successfully completed. You can deposit funds.

+
+2 + +

Active. The deploy transaction for this token has completed successfully and StarkGate recognizes the token.

+
+3 + +

Deactivated. The token has been removed from StarkGate. You cannot deposit funds.

+
+
+
+
+

Emitted event

+
+

None.

+
+

Function definition

+
+

getStatus in StarknetTokenBridge.sol

+
+
+
+
+

getWithdrawalBridges

+

Description

+
+

Retrieves a list of all bridge addresses that have ever facilitated withdrawals for the specified token.

+
+
+

In a case where an inactive bridge for a specific token might still have funds locked, you can use this function to identify all bridges that ever serviced that token.

+
+
+

If you used a bridge for a given token that subsequently was replaced with a new or updated bridge, but you still have funds locked on the first bridge, you might not know the address of the old bridge. This function returns

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

view

+
+

Parameters

+
+ ++++ + + + + +
+address token + +

The address of the contract for the desired token.

+
+
+

Returns

+
+ ++++ + + + + +
+address[] memory bridges + +

An array of addresses of all bridges that ever serviced token.

+
+
+

Emitted event

+
+

None.

+
+

Function definition

+
+

getWithdrawalBridges in StarkgateRegistry.sol.

+
+
+
+
+

identify

+

Description

+
+

Returns the name and version of the StarknetTokenBridge.sol contract.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

pure

+
+

Parameters

+
+

None.

+
+

Returns

+
+ ++++ + + + + +
+string memory + +

The name and version of the StarknetTokenBridge.sol contract.

+
+
+

Emitted event

+
+

None.

+
+

Function definition

+
+

identify in StarknetTokenBridge.sol

+
+
+
+
+

isServicingToken

+

Description

+
+

Checks whether the calling contract is currently providing a service for the specified token.

+
+

Visibility

+
+

external

+
+

State Mutability

+
+

view

+
+

Parameters

+
+ ++++ + + + + +
+address token + +

The address of the contract for the desired token.

+
+
+

Returns

+
+ ++++ + + + + + + + + +
+true + +

The calling contract is currently providing a service for the token.

+
+false + +

The calling contract is not currently providing a service for the token.

+
+
+

Emitted event

+
+

None.

+
+

Function definition

+
+

isServicingToken in IStarkgateService.sol.

+
+
+
+
+

withdraw

+

Description

+
+

Transfers the specified amount of the specified token to the address of the recipient specified in the l1_recipient parameter of the initiate_token_withdraw function on L2.

+
+
+

Anyone can call this function, but only after the withdraw message has been recorded on the Starknet Core Contract.

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + +
+address token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the withdrawal.

+
+address recipient + +

(Optional) +The recipient. +If you don’t specify this parameter, the withdraw function uses the sender’s address.

+
+
+

State mutability

+
+

nonpayable

+
+

Returns

+
+

None.

+
+

Emitted event

+
+

Withdrawal

+
+
+
Event attributes
+ + + + + + + + + + + + + +
+address indexed recipient + +

The recipient.

+
+address indexed token + +

The address of the contract for the desired token.

+
+uint256 amount + +

The amount of the withdrawal.

+
+
+

Function and event definition

+ +
+ +
+
+
+
+
+

L2 function reference

+
+
+

Functions are listed in alphabetical order.

+
+
+
+

get_erc20_class_hash

+

Description

+
+

Returns the current class hash of the implementation used by the ERC-20 contract. Use the class hash as the type when deploying the ERC-20 contract on L2.

+
+
+ + + + + +
+ + +
+

If StarkWare changes the class hash such that it is no longer the class hash that you used when deploying your bridge contract, this function returns the new class hash. If you want to refer to the class hash that you used when deploying your contract, see your deployed contract on Starknet.

+
+
+
+

Parameters

+
+

None.

+
+

Returns

+
+ ++++ + + + + +
+ClassHash + +

The class hash of the ERC-20 token contract.

+
+
+

Function definition

+
+

get_erc20_class_hash in token_bridge.cairo.

+
+
+
+
+

get_identity

+

Description

+
+

Returns a string in a felt252 type with the identity of StarkGate.

+
+

Parameters

+
+

None.

+
+

Returns

+
+ ++++ + + + + +
+felt252 + +

The identity of StarkGate.

+
+
+

Function definition

+
+

get_identity in token_bridge_interface.cairo.

+
+
+
+
+

get_l1_token

+

Description

+
+

Returns the L1 address that corresponds to the matching L2 address of an ERC-20 token contract.

+
+

Parameters

+
+ ++++ + + + + +
+l2_token_address: ContractAddress + +

The L2 address of the ERC-20 token contract.

+
+
+

Returns

+
+ ++++ + + + + + + + + +
+EthAddress + +

The L1 address of the ERC-20 token contract.

+
+EthAddressZeroable::zero() + +

The token is not found in the bridge.

+
+
+

Function definition

+
+

get_l1_token in token_bridge_interface.cairo.

+
+
+
+
+

get_l2_token

+

Description

+
+

Returns the L2 address that corresponds to the matching L1 address of an ERC-20 token contract.

+
+
+

If the token is not found in the bridge, this function returns 0.

+
+

Parameters

+
+ ++++ + + + + +
+l1_token_address + +

The L1 address of the ERC-20 token contract.

+
+
+

Returns

+
+ ++++ + + + + + + + + +
+ContractAddress address + +

The L2 address of the ERC-20 token contract.

+
+ContractAddressZeroable::zero() + +

The token is not found in the bridge.

+
+
+

Function definition

+
+

get_l2_token in token_bridge_interface.cairo.

+
+
+
+
+

get_remaining_withdrawal_quota

+

Description

+
+

Returns the amount that the user can withdraw within the current 24-hour time period. The time period begins at 00:00 UTC.

+
+

Parameters

+
+ ++++ + + + + +
+l1_token_address + +

The L1 address of the ERC-20 token contract.

+
+
+

Returns

+
+ ++++ + + + + +
+u256 + +

The amount that can currently be withdrawn from the bridge, in units defined by the ERC-20 token contract.

+
+
+

Function definition

+
+

get_remaining_withdrawal_quota in token_bridge_interface.cairo

+
+
+
+
+

get_version

+

Description

+
+

Returns the current version of StarkGate.

+
+

Parameters

+
+

None.

+
+

Returns

+
+ ++++ + + + + +
+felt252 + +

The current version of StarkGate.

+
+
+

Function definition

+
+

get_version in token_bridge_interface.cairo.

+
+
+
+
+

initiate_token_withdraw

+

Description

+
+

Initiates a withdrawal from L2. After initiating the withdrawal, the function does the following:

+
+
+
    +
  1. +

    Burns the transferred amount of tokens from the balance of the withdrawal’s initiator.

    +
  2. +
  3. +

    Sends a message to the relevant L1 bridge with the amount to be transferred, and the recipient’s address.

    +
  4. +
+
+

Parameters

+
+ ++++ + + + + + + + + + + + + +
+l1_token: EthAddress + +

The L1 address of the ERC-20 token contract.

+
+l1_recipient: EthAddress + +

The L1 address of the recipient.

+
+amount uint256 + +

The amount to transfer.

+
+
+

Returns

+
+

None.

+
+

Function definition

+
+

initiate_token_withdraw in token_bridge_interface.cairo.

+
+
+
+
+

on_receive

+

Description

+
+

An interface to an implementation of the on_receive function that you must provide in your L2 contract in order to enable the depositWithMessage function to succeed.

+
+
+

The L2 contract that receives the message that is sent with the depositWithMessage function must implement a callback function named on_receive.

+
+
+

Upon completion, the depositWithMessage function triggers a call to the on_receive callback function on the receiving L2 contract. The on_receive function receives the deposit message as input, and it must return true for the deposit to succeed.

+
+
+

If on_receive returns false, or if the receiving contract does not implement on_receive, the depositWithMessage L1 handler fails, and the user can only recover their funds using the depositWithMessageCancelRequest function.

+
+

Parameters

+
+ ++++ + + + + + + + + + + + + + + + + +
+l2_token: ContractAddress + +

The L2 address of the ERC-20 token contract.

+
+amount: uint256 + +

The amount deposited.

+
+depositor: EthAddress + +

L1 address of the deposit sender.

+
+message: Span<felt252> + +

The message that was sent with the depositWithMessage function.

+
+
+

Returns

+
+ ++++ + + + + + + + + + + + + +
+true + +

The on_receive function completed successfully.

+
+false + +

The on_receive function did not complete successfully. The transaction is reverted.

+
+No value + +

If the recipients’s smart contract does not implement the on_receive function, the call fails to execute, and the transaction is reverted.

+
+
+

Function definition

+
+

on_receive in receiver_interface.cairo.

+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starkgate/overview/index.html b/pr-1359/starkgate/overview/index.html new file mode 100644 index 0000000000..70868c2af3 --- /dev/null +++ b/pr-1359/starkgate/overview/index.html @@ -0,0 +1,1274 @@ + + + + + + StarkGate bridge overview :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

StarkGate bridge overview

+
+
+
+

StarkGate, developed by StarkWare, bridges ETH and ERC-20 tokens between Ethereum and Starknet. Each supported token is associated with an L1 and L2 bridge contract that communicates via Starknet’s messaging mechanism.

+
+
+

To use the StarkGate web app, go to https://starkgate.starknet.io.

+
+
+

A bridge enables you to fund your L2 wallet with ETH and ERC-20 tokens that reside on L1.

+
+
+

The terms deposit, transact, and transfer refer to various operations involving a bridge, even though ETH and ERC-20 tokens never actually leave Ethereum.

+
+
+ + + + + +
+ + +
+

StarkGate 2.0 provides a contract that enables seamless backward compatibility with the previous version of StarkGate.

+
+
+

When you update the code in your contract, make sure that you use the most up-to-date versions of all StarkGate contracts.

+
+
+
+
+
+
+

StarkGate addresses

+
+
+

L1 and L2 addresses for StarkGate bridges and supported tokens are listed in the JSON files in the Starknet GitHub repository shown in the table StarkGate bridged tokens and their addresses.

+
+ + ++++ + + + + + + + + + + + + + + + + +
Table 1. StarkGate bridged tokens and their addresses
NetworkStarkGate bridged tokens JSON file

Mainnet

mainnet.json

Sepolia testnet

sepolia.json

+
+
+
+

Supported tokens in StarkGate

+
+
+

StarkGate supports many tokens, including ETH, WBTC, USDC, DAI, and many more.

+
+
+

For a comprehensive list of tokens that StarkGate supports, including their L1 and L2 addresses, see the JSON files in the Starknet GitHub repository shown in the table StarkGate bridged tokens and their addresses.

+
+
+ + + + + +
+ + +
+

Previously, StarkGate placed limitations for each supported token on the amount that could be deposited and the total value locked in the L1 bridge contract on Mainnet. These limits have been removed.

+
+
+
+
+
+
+

L1→L2 transfer (deposit)

+
+
+

Step 1: Call the deposit function on L1

+
+
    +
  1. +

    A call to the L1 deposit function initiates a deposit.

    +
  2. +
  3. +

    The function does the following:

    +
    +
    +
    +
      +
    • +

      Transfers the funds from the user’s account to the Starknet bridge.

      +
    • +
    • +

      Emits a Deposit event that includes the L1 and L2 addresses of the user, and the amount deposited.

      +
    • +
    • +

      Sends a message to the corresponding L2 bridge with the amount deposited, and the recipient’s address.

      +
    • +
    +
    +
    +
    +
    +

    Starknet’s sequencer is now aware of the deposit transaction.

    +
    +
  4. +
  5. +

    The sequencer waits for enough L1 block confirmations to fill its quota to run before the corresponding deposit transaction is initiated on L2. During this period of time, the status of the L2 deposit transaction is NOT_RECEIVED.

    +
  6. +
+
+
+
+

Step 2: Deposit triggered on Starknet

+
+
    +
  1. +

    The sequencers refer to the deposit +request by triggering the L1 handler using the +handle_deposit function on the L2 bridge.

    +
  2. +
  3. +

    The handle_deposit function verifies that the deposit indeed came from the corresponding L1 bridge. It then calls the relevant token’s contract on Starknet and mints the specified amount of the token on L2 for the user.

    +
  4. +
  5. +

    The sequencers complete constructing the block.

    +
  6. +
+
+
+

The status of the deposit request is now ACCEPTED_ON_L2.

+
+
+
+

Step 3: The block that includes the transfer is proved

+
+
    +
  1. +

    Starknet’s provers prove the validity of the block and submit a state update to L1.

    +
  2. +
  3. +

    The message confirming transfer of the funds is cleared from the Starknet Core Contract, and the fact that the user has transferred their funds is part of the now finalized state of Starknet.

    +
  4. +
+
+
+ + + + + +
+ + +
+

If the message wasn’t on L1 to begin with, that is, if the deposit request was fraudulently created on Starknet, the state update fails.

+
+
+
+
+
+
+
+

L2→L1 transfer (withdrawal)

+
+
+

Step 1: Initiate a withdrawal from L2

+
+
    +
  1. +

    A call to the L2 initiate_token_withdraw function initiates a withdrawal.

    +
  2. +
  3. +

    The function does the following:

    +
    +
      +
    • +

      Burns the transferred amount of tokens from the balance of the withdrawal’s initiator.

      +
    • +
    • +

      Sends a message to the relevant L1 bridge with the amount to be transferred and the recipient’s address.

      +
    • +
    +
    +
  4. +
+
+
+
+

Step 2: Proving the block that includes the withdrawal transaction

+
+
    +
  1. +

    The sequencer completes the block construction

    +
  2. +
  3. +

    Starknet’s provers prove the validity of the block and submit a state update to L1.

    +
  4. +
  5. +

    The message from the previous step is stored in the Starknet Core Contract.

    +
  6. +
+
+
+
+

Step 3: Transferring the funds on L1

+
+

After the withdrawal message has been recorded on the Starknet Core Contract, anyone can finalize the transfer on L1 from the bridge back to the user, by calling the withdraw function.

+
+
+ + + + + +
+ + +
+

This step is permissionless, anyone can do it. The recipient’s address is part of the recorded message on L1, so they receive the funds regardless of who calls the withdraw function on L1.

+
+
+
+
+
+
+
+

Additional resources

+
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starkgate/withdrawing/index.html b/pr-1359/starkgate/withdrawing/index.html new file mode 100644 index 0000000000..a286af874e --- /dev/null +++ b/pr-1359/starkgate/withdrawing/index.html @@ -0,0 +1,1118 @@ + + + + + + Withdrawing funds with StarkGate :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Withdrawing funds with StarkGate

+
+

Using StarkGate to withdraw funds from Starknet requires StarkGate’s initiate_token_withdraw function to initiate a withdrawal. The function does the following:

+
+
+
    +
  • +

    Burns the transferred amount of tokens from the L2 balance of the withdrawal’s initiator.

    +
  • +
  • +

    Sends a message to the relevant L1 bridge with the amount to be transferred and the recipient’s Ethereum address.

    +
  • +
+
+
+

Subsequently, the funds should be transferred to the recipient’s Ethereum address.

+
+
+

For more information on what happens during the transfer process, see L2→L1 transfer (withdrawal).

+
+
+
Prerequisites
+
    +
  • +

    A Starknet block explorer. For a list of Starknet block explorers, see Block explorers, indexers & Enhanced API on the Starknet site.

    +
  • +
  • +

    An Ethereum block explorer, such as Etherscan.

    +
  • +
  • +

    Funds to transfer from L2 to L1, including enough to pay the fees required for the transfer.

    +
  • +
  • +

    The L2 address of the StarkGate bridge for the token you want to withdraw. To view the token addresses for tokens on Mainnet or Sepolia testnet, see Bridged tokens and addresses.

    +
  • +
+
+
+
Procedure
+
    +
  1. +

    Using a Starknet block explorer, go to the StarkGate contract for the token you want to withdraw. For example, to withdraw USDC:

    +
    + +
    +
  2. +
  3. +

    Click the initiate_token_withdraw function and enter the following:

    +
    +
      +
    • +

      In l1_token, enter the L1 address of the ERC-20 contract for the token you want to withdraw, in this case, USDC.

      +
    • +
    • +

      In l1_recipient, enter the L1 address of the recipient.

      +
    • +
    • +

      In amount, enter the amount to transfer.

      +
    • +
    +
    +
  4. +
  5. +

    Click Transact for Voyager, or Write for StarkScan. The function initiates a withdrawal.

    +
  6. +
  7. +

    Using an Ethereum block explorer, go to the StarkGate contract and click Write as Proxy. For example, using Etherscan, go to 0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419

    +
  8. +
  9. +

    Click the StarkGate 2.0 withdraw (0x69328dec) function.

    +
  10. +
  11. +

    Enter the following:

    +
    + + + + + + + + + + + + + +
    +recipient (address) + +

    The recipient.

    +
    +token (address) + +

    The address of the contract for the desired token.

    +
    +amount (uint256) + +

    The amount of the withdrawal.

    +
    +
    +
  12. +
  13. +

    Click Write.

    +
  14. +
+
+
+

The withdraw function withdraws the funds to the recipient’s L1 address. The funds should be available after the next L1 state update.

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starknet-versions/_images/juno_banner.png b/pr-1359/starknet-versions/_images/juno_banner.png new file mode 100644 index 0000000000..c23ee77995 Binary files /dev/null and b/pr-1359/starknet-versions/_images/juno_banner.png differ diff --git a/pr-1359/starknet-versions/deprecated/index.html b/pr-1359/starknet-versions/deprecated/index.html new file mode 100644 index 0000000000..541f13d9df --- /dev/null +++ b/pr-1359/starknet-versions/deprecated/index.html @@ -0,0 +1,1174 @@ + + + + + + Deprecated, unsupported, and removed features :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Deprecated, unsupported, and removed features

+
+
+
+

The features on this page are deprecated, unsupported, or removed from Starknet.

+
+
+ ++++ + + + + + + + + + + + + +
+Deprecated + +

Refers to a feature or capability that is still supported, but support will be removed in a future release of Starknet. +Future fixes or enhancements are unlikely. If necessary, an alternative is available.

+
+Unsupported + +

Refers to a feature or capability that is no longer supported.

+
+Removed + +

Refers to a feature or capability that has been entirely removed.

+
+
+
+
+
+

Deprecated features

+
+ ++++ + + + + + + + + + + + + + + + + +
NameDescription

Starknet CLI

Support for the Starknet CLI has been removed. Instead use Starkli.

+

Support for Starknet CLI is removed in Starknet v0.13.0.

Cairo 0

Starknet v0.11.0 introduces Cairo 1.0 smart contracts.

+
+
+
+

Unsupported and removed features

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription

Goerli testnet

+

Goerli testnet support was removed April 2, 2024. Sepolia testnet replaces Goerli testnet.

+
+
+

Starknet started migrating to Sepolia testnet on November 15th, 2023. For more information on the Goerli deprecation, see the deprecation announcement on Ethereum’s site.

+
+
+

Full nodes, API services, SDKs, and other Starknet developer tools have migrated to Sepolia as well.

+
+
+ + + + + +
+ + +
+

Sepolia’s state and history are relatively small. Sepolia supports declaring classes of CairoZero and Cairo v2.0.0 and higher.

+
+
+

Starknet feeder gateway

+

The Starknet feeder gateway, a temporary solution for querying the sequencer’s state, is being replaced by Starknet full nodes (Pathfinder, Juno, Deoxys, Papyrus) and RPC services. For more information, see Full nodes and API services.

+
+
+

Support for the feeder gateway queries that are not required for full nodes to synchronize on the state of Starknet will stop according to the following schedule:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
EnvironmentDate

Integration

1 November 2023

Testnet

15 November 2023

Mainnet

19 December 2023

+
+

Queries that are required for full nodes to synchronize on the state of Starknet are still supported.

+
+
+

For more information, see the Community Forum post Feeder Gateway Deprecation.

+

Free L1→ L2 messaging

Previously, sending a message from L1 to L2 had an optional fee associated.

+

From Starknet v0.11.0, the fee mechanism is enforced and the ability to send L1→L2 messages without the corresponding L2 fee has been removed.

+

See here for more details.

invoke transaction v0

invoke transaction v0 has been removed since Starknet v0.11.0.

declare transaction v0

declare transaction v0 has been removed since Starknet v0.11.0.

deploy transaction

The deploy transaction has been removed since Starknet v0.10.3.

+

To deploy new contract instances, you can use the deploy system call.

+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starknet-versions/juno-versions/index.html b/pr-1359/starknet-versions/juno-versions/index.html new file mode 100644 index 0000000000..557fcfedc2 --- /dev/null +++ b/pr-1359/starknet-versions/juno-versions/index.html @@ -0,0 +1,1822 @@ + + + + + + Juno release notes :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Juno release notes

+
+
+
+
+juno banner +
+
+
+

Juno is a golang Starknet node implementation by Nethermind with the aim of decentralizing Starknet.

+
+
+

See the official Juno GitHub repository for more details.

+
+
+
+
+

v0.7.3

+
+
+

Support for upcoming Starknet v0.12.3, improved RPC performance with a new global class cache, allowing for higher request throughput and optimized resource usage. We’ve updated blockifier, which includes an important wallet integration fix. On top of that, expect new metrics and ongoing enhancements to the P2P layer, among other improvements. Here’s what’s new:

+
+
+
+
+

Added

+
+
+
    +
  • +

    Support for Starknet v0.12.3

    +
  • +
  • +

    A global class cache to the VM that enhances overall RPC throughput.
    +PR by @omerfirmak in 1401

    +
  • +
  • +

    A new flag, max-vms, to control the maximum number of VM instances for concurrent RPC calls, optimizing resource usage
    +PR by @omerfirmak in #1378.

    +
  • +
+
+
+
+
+

Changed

+
+
+
    +
  • +

    The blockifier library has been updated, now supporting the query bit in the version field for transactions.
    +PR by @joshklop in #1401.

    +
  • +
  • +

    Subscription handling has been moved to the synchronizer for improved efficiency.
    +PR by @joshklop in #1373.

    +
  • +
  • +

    Ongoing enhancements to the P2P layer, including the implementation of a Receipt Handler and Adapter and a new GetBlockBodies feature.
    +PRs by @IronGauntlets in #1352 and by @kirugan in #1359.

    +
  • +
  • +

    Prometheus metrics have been expanded to include version information, latency on Transaction.Commit(), and read metrics on blockchain operations.
    +PRs by @omerfirmak in #1394, #1396, and #1395.

    +
  • +
  • +

    Kubernetes pods now have a correctly set GOMAXPROCS setting, aligning performance with CPU resources.
    +PR by @omerfirmak in #1397.

    +
  • +
  • +

    Fallback to feeder traces for blocks ⇐ 0.12.2.
    +PR by @omerfirmak in #1405.

    +
  • +
+
+
+
+
+

Fixed

+
+
+
    +
  • +

    Resolved an issue with event emission on sync step failure for more reliable synchronization.
    +PR by @aminsato in #1387.

    +
  • +
  • +

    Refactored websocket error conditions for improved stability and error handling.
    +PR by @joshklop in #1400.

    +
  • +
+
+
+
+
+

Docker Image

+
+
+

You can pull the Docker image for this release with the following command:

+
+
+
+
docker pull nethermind/juno:v0.7.3
+
+
+
+
+
+

v0.7.0

+
+
+

The primary goal of this release is to introduce support for Starknet JSON-RPC v0.5.0. Juno now supports multiple versions via /v0_5 and /v0_4 endpoints. The default version at the root / endpoint has been updated from 0.4.0 to 0.5.0.

+
+
+

🌟 Added

+
+
    +
  • +

    Starknet v0.5.0 Compatibility:

    +
    +
      +
    • +

      Implemented starknet_specVersion @omerfirmak

      +
    • +
    • +

      Renamed juno_getTransactionStatus to starknet_getTransactionStatus. @omerfirmak

      +
    • +
    • +

      Removed pendingTransactions endpoint for cleanup. @omerfirmak

      +
    • +
    • +

      Added new fields like execution resources and message hash to RPC receipt. @omerfirmak

      +
    • +
    • +

      Building and calculating state diffs. @omerfirmak

      +
    • +
    • +

      Make starknet_traceBlockTransactions get a block id @kirugan

      +
    • +
    • +

      Add txn type to traces

      +
    • +
    • +

      Add message_hash field for L1_HANDLER_TXN_RECEIPT

      +
    • +
    • +

      Add starknet_getTransactionStatus and remove starknet_pendingTransactions

      +
    • +
    +
    +
  • +
  • +

    Support multiple RPC versions: v0.4.0 and v0.5.0 @omerfirmak

    +
  • +
  • +

    Performance Metrics: Moved metric counting out of various components for cleaner code. @omerfirmak

    +
  • +
  • +

    Websocket Enhancements: Full-duplex comms and fixes related to over-reading websocket requests. @joshklop

    +
  • +
+
+
+
+

🔄 Changed

+
+
    +
  • +

    RPC Optimization: Reduced allocations in RPC requests for better performance. @joshklop

    +
  • +
  • +

    Refactored Error Handling: Improved global error usage and better error handling in various components. @omerfirmak

    +
  • +
+
+
+
+

🛠 Fixed

+
+
    +
  • +

    Websocket Reading: Fixed over-reading issues in Websocket requests.@joshklop

    +
  • +
  • +

    Error Handling: Resolved potential nil pointer dereferences and panic issues. @omerfirmak

    +
  • +
+
+
+
+

🚀 Deployment and CI/CD

+
+
    +
  • +

    Various CI/CD pipeline improvements for better automation. @wojciechos and @ToluwalopeAyo

    +
  • +
+
+
+
+

⚙️ Docker Image

+
+

You can pull the Docker image for this release with:

+
+
+
+
docker pull nethermind/juno:v0.7.0
+
+
+
+
+
+
+

v0.6.0

+
+
+

🌟 Added

+
+
    +
  • +

    New Trace RPC Methods:

    +
    +
      +
    • +

      starknet_traceTransaction

      +
    • +
    • +

      starknet_traceBlockTransactions

      +
    • +
    • +

      starknet_simulateTransactions

      +
    • +
    +
    +
  • +
  • +

    Juno RPC Schema: A dedicated schema to streamline RPC interactions for Juno’s method.

    +
  • +
  • +

    Juno Console Enhancement: Pretty printing of Juno console logs for an enriched user experience.

    +
  • +
  • +

    Comprehensive Documentation: Official documentation now hosted on GitHub Pages.

    +
  • +
+
+
+
+

🛠 Fixed

+
+
    +
  • +

    RPC Schema Consistency: Revised to ensure our RPC schema is consistent with the Starknet specification.

    +
  • +
+
+
+
+

⚙️ Command-line Switches Update

+
+

Command-line switches have been restructured to provide clearer access control:

+
+
+
+
docker run -d
+--name juno
+-p $httpPort:$httpPort
+-p $metricsPort:$metricsPort
+-v /root/juno:/var/lib/juno
+nethermind/juno:v0.6.0
+--db-path /var/lib/juno
+--http
+--http-port $httpPort
+--metrics
+--metrics-port $metricsPort
+--eth-node <YOUR-ETH-NODE>
+
+
+
+

(Note: Ensure to adjust the variables like $httpPort, $metricsPort and others as per your configuration.)

+
+
+
+

🔍 Migration Notes

+
+
    +
  • +

    Database Migration: This version introduces database changes due to our work focus on peer-to-peer (p2p) communication. These changes may result in extended migration times. For faster sync, we recommend users to utilize snapshots.

    +
  • +
+
+
+
+
+
+

v0.5.1

+
+
+

This release adds support for the Starknet v0.12.2.

+
+
+

Added

+
+
    +
  • +

    Support for Starknet v0.12.2

    +
  • +
+
+
+
+
+
+

v0.5.0

+
+
+

This release adds support for the upcoming Starknet v0.12.1 upgrade and includes compatibility with v0.4.0 of the RPC specification.

+
+
+

Added

+
+
    +
  • +

    Support for Starknet v0.12.1

    +
  • +
  • +

    Compatibility with v0.4.0 of the RPC specification

    +
  • +
  • +

    New RPC method: starknet_estimateMessageFee

    +
  • +
  • +

    Health Check Endpoint: A GET request to the / endpoint will now return a 200 status code for a healthy Juno node

    +
  • +
  • +

    Added Prometheus metrics support: Use --metrics and --metrics-port to enable this feature

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    Adjusted worker number for sync process, improving performance

    +
  • +
  • +

    Updated blockifier for starknet v0.12.1

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    Resolved issues causing context canceled errors in writing RPC methods

    +
  • +
  • +

    Mapped gateway errors to write API RPC errors, improving error handling

    +
  • +
+
+
+
+
+
+

v0.4.1

+
+ +
+
+
+

Added

+
+
+ +
+
+
+
+

Changed

+
+
+ +
+
+
+
+

Fixed

+
+
+ +
+
+
+
+

v0.4.0

+
+
+ + + + + +
+ + +This release has breaking changes and database is not compatible with the previous version. +
+
+
+

Added

+
+
    +
  • +

    New RPC Methods:

    +
    +
      +
    • +

      starknet_call

      +
    • +
    • +

      starknet_estimateFee

      +
    • +
    • +

      starknet_addDeclareTransaction

      +
    • +
    • +

      starknet_addDeployAccountTransaction

      +
    • +
    • +

      starknet_addInvokeTransaction

      +
    • +
    • +

      juno_getTransactionStatus

      +
    • +
    • +

      juno_version

      +
    • +
    +
    +
  • +
  • +

    L1 Verifier: Verification of state from Layer 1 has been implemented.

    +
  • +
  • +

    Block Reorg Detection and Handling: A feature to detect and handle block reorganizations has been implemented.

    +
  • +
  • +

    gRPC Service: To accommodate users requiring direct access to the database, a gRPC service has been exposed.

    +
  • +
  • +

    Database Migration: The system has been improved to handle database changes more gracefully. It’s no longer necessary to sync from the start when some database changes occur.

    +
  • +
  • +

    Starknet v0.12.0 support: includes integration with the Rust VM.

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    Performance Enhancements: Several adjustments and improvements have been made to increase the performance. These changes have resulted in ~30% reduction in sync time.

    +
  • +
+
+
+
+
+
+

v0.3.1

+
+
+

Added

+
+
    +
  • +

    Fetch and store compiled classes for each Sierra class.

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    Updated the behavior of synced nodes, which will now return false to starknet_syncing.

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    Resolved issue with NumAsHex(0) being omitted in RPC.

    +
  • +
  • +

    Fixed a Goerli sync issue by relaxing decoder max array elements limit.

    +
  • +
+
+
+

Full Changelog: [v0.3.0…​v0.3.1]

+
+
+
+
+
+

v0.3.0

+
+
+

Added

+
+
    +
  • +

    Starknet v0.11.2 support

    +
  • +
  • +

    History for contracts, nonce, and class hash.

    +
  • +
  • +

    Implemented StateSnapshot.

    +
  • +
  • +

    New RPC endpoints:

    +
    +
      +
    • +

      starknet_syncing

      +
    • +
    • +

      starknet_getNonce

      +
    • +
    • +

      starknet_getStorageAt

      +
    • +
    • +

      starknet_getClassHashAt

      +
    • +
    • +

      starknet_getClass

      +
    • +
    • +

      starknet_getClassAt

      +
    • +
    • +

      starknet_getEvents

      +
    • +
    +
    +
  • +
+
+
+ + + + + +
+ + +For new RPC endpoints to fully work with data before the new version, the node needs to be resynced. +
+
+
+
+

Changed

+
+
    +
  • +

    Optimized TransactionStorage encoding and refactored memStorage.

    +
  • +
  • +

    Refactored RPC implementation for better organization and maintainability.

    +
  • +
  • +

    Parallelized and refactored sync tests for faster execution, improved readability, and maintainability.

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    Updated handling of non-existent keys to return a zero value.

    +
  • +
+
+
+

Full Changelog: v0.3.0…​v0.3.1

+
+
+
+
+
+

v0.2.2

+
+
+

This patch release fixes handling of block versioning and ensures compatibility with non-sem-ver compliant Starknet.

+
+
+

Fixed

+
+
    +
  • +

    Ignore or add digits to block version string as necessary.

    +
  • +
+
+
+

Full Changelog: v0.2.1…​v0.2.2

+
+
+
+
+
+

v0.2.1

+
+
+

This minor release introduces an important optimization that enhances sync performance.

+
+
+
    +
  • +

    Update gnark-crypto version:

    +
    +
      +
    • +

      Implement precomputed point multiplication results for Pedersen hash operations.

      +
    • +
    +
    +
  • +
+
+
+

Full Changelog: v0.2.0…​v0.2.1

+
+
+
+
+

v0.2.0

+
+
+

This release adds support for Staknet v0.11.0.

+
+
+ + + + + +
+ + +This release has breaking changes and database is not compatible with the previous version. +
+
+
+

Added

+
+
    +
  • +

    Starknet v0.11.0 support:

    +
    +
      +
    • +

      Add Poseidon hash for new state commitment.

      +
    • +
    • +

      Add DeclareTransaction version 2.

      +
    • +
    • +

      Add and Store Cairo 1/Sierra class definition and hash calculations.

      +
    • +
    +
    +
  • +
  • +

    pprof option is added for profiling and monitoring.

    +
  • +
  • +

    Verify Class Hashes.

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    Starknet v0.11.0 support:

    +
    + +
    +
  • +
  • +

    Rename the verbosity option to log-level and log-level accepts string instead of uint8. See help for details.

    +
  • +
  • +

    network option accepts string instead of uint8. See help for details.

    +
  • +
  • +

    Database table is updated to account for Starknet v0.11.0 changes.

    +
  • +
+
+
+
+

Removed

+
+
    +
  • +

    Remove metrics and eth-node options since they are not used.

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    Graceful shutdown: ensure all services have returned before exiting.

    +
  • +
+
+
+

Full Changelog: v0.1.0…​v0.2.0

+
+
+
+
+
+

v0.1.0

+
+
+

This is Juno’s first release (compatible with Starknet v0.10.3) with the following features:

+
+
+
    +
  • +

    Starknet state construction and storage using a path-based Merkle Patricia trie.

    +
  • +
  • +

    Pedersen and starknet_keccak hash implementation over starknet field.

    +
  • +
  • +

    Feeder gateway synchronization of Blocks, Transactions, Receipts, State Updates and Classes.

    +
  • +
  • +

    Block and Transaction hash verification.

    +
  • +
  • +

    JSON-RPC Endpoints:

    +
    +
      +
    • +

      starknet_chainId

      +
    • +
    • +

      starknet_blockNumber

      +
    • +
    • +

      starknet_blockHashAndNumber

      +
    • +
    • +

      starknet_getBlockWithTxHashes

      +
    • +
    • +

      starknet_getBlockWithTxs

      +
    • +
    • +

      starknet_getTransactionByHash

      +
    • +
    • +

      starknet_getTransactionReceipt

      +
    • +
    • +

      starknet_getBlockTransactionCount

      +
    • +
    • +

      starknet_getTransactionByBlockIdAndIndex

      +
    • +
    • +

      starknet_getStateUpdate

      +
    • +
    +
    +
  • +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starknet-versions/pathfinder-versions/index.html b/pr-1359/starknet-versions/pathfinder-versions/index.html new file mode 100644 index 0000000000..700f2c40b8 --- /dev/null +++ b/pr-1359/starknet-versions/pathfinder-versions/index.html @@ -0,0 +1,1954 @@ + + + + + + Pathfinder release notes :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Pathfinder release notes

+
+
+
+

Pathfinder is a Starknet full node giving you a safe view into Starknet.

+
+
+

It provides the following features:

+
+
+
    +
  • +

    Access the full Starknet state history

    +
  • +
  • +

    Verifies state using Ethereum

    +
  • +
  • +

    Implements the Starknet JSON-RPC API

    +
  • +
  • +

    Run Starknet functions without requiring a Starknet transaction

    +
  • +
  • +

    Ability to do fee estimation for transactions

    +
  • +
+
+
+

See the official Pathfinder GitHub repository for more details.

+
+
+
+
+

[0.6.6] - 2023-07-10 (latest)

+
+
+

Fixed

+
+
    +
  • +

    stack overflow while compiling Sierra to CASM

    +
  • +
+
+
+
+
+
+

[0.6.5] - 2023-07-07

+
+
+

Fixed

+
+
    +
  • +

    pending data from the gateway is inconsistent

    +
  • +
  • +

    this could exhibit as RPC data changing status between pending | L2 accepted | not found, especially noticeable for transactions.

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    substantially increase the character limit of execution errors

    +
  • +
  • +

    previously, the RPC would return a highly truncated error message from the execution vm

    +
  • +
+
+
+
+
+
+

[0.6.4] - 2023-07-05

+
+
+

Fixed

+
+
    +
  • +

    Pending data is not polled for starknet v0.12 due to an HTTP error code change from the gateway.

    +
  • +
  • +

    Transaction receipts missing from_address in MSG_TO_L1.

    +
  • +
+
+
+
+
+
+

[0.6.3] - 2023-06-29

+
+
+

Fixed

+
+
    +
  • +

    Sierra class hash not in declared classes sync bug

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    use all libfunc list instead of experimental for sierra compilation

    +
  • +
+
+
+
+
+
+

[0.6.2] - 2023-06-29

+
+
+

Added

+
+
    +
  • +

    starknet_estimateMessageFee for JSON-RPC v0.3.1 to estimate message fee from L1 handler.

    +
  • +
  • +

    sync-related metrics

    +
  • +
  • +

    current_block: the currently sync’d block height of the node

    +
  • +
  • +

    highest_block: the height of the blockchain

    +
  • +
  • +

    block_time: timestamp difference between the current block and its parent

    +
  • +
  • +

    block_latency: delay between current block being published and sync’d locally

    +
  • +
  • +

    block_download: time taken to download current block’s data excluding classes

    +
  • +
  • +

    block_processing: time taken to process and store the current block

    +
  • +
  • +

    configuration for new block polling interval: --sync.poll-interval <seconds>

    +
  • +
  • +

    Starknet v0.12.0 support

    +
  • +
  • +

    sierra v2.0.0 support

    +
  • +
  • +

    cairo-lang upgraded to 0.12.0a0

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    reorgs fail if a class declaration is included in the reorg

    +
  • +
  • +

    sync can fail if db connection pool is held saturated by rpc queries

    +
  • +
  • +

    uses finalized (reorg-safe) L1 state instead of latest

    +
  • +
  • +

    starknet_getEvents times out for queries involving a large block range

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    dropped upgrade support for pathfinder v0.4 and earlier

    +
  • +
  • +

    separate db connection pools rpc, sync and storage

    +
  • +
  • +

    increased the number of rpc db connections

    +
  • +
+
+
+
+
+
+

[0.6.1] - 2023-06-18

+
+
+

Fixed

+
+
    +
  • +

    class hash mismatch for cairo 0 classes with non-ascii text

    +
  • +
+
+
+
+
+
+

[0.6.0] - 2023-06-14

+
+
+

Fixed

+
+
    +
  • +

    starknet_simulateTransaction requires transactions instead of transaction as input field.

    +
  • +
  • +

    gateway’s error message is hidden when submitting a failed transaction

    +
  • +
  • +

    starknet_getEvents is very slow for certain filter combinations

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    default RPC API version changed from v0.2 to v0.3

    +
  • +
  • +

    disallow JSON-RPC notification-style requests

    +
  • +
+
+
+
+
+
+

[0.5.6] - 2023-05-25

+
+
+

Added

+
+
    +
  • +

    Starknet v0.11.2 support

    +
  • +
  • +

    Sierra compiler v1.1.0-rc0

    +
  • +
  • +

    cairo-lang upgraded to 0.11.2a0

    +
  • +
  • +

    Subscription to newHead events via websocket using the method pathfinder_subscribe_newHeads, which can +be managed by the following command line options

    +
  • +
  • +

    rpc.websocket, which enables websocket transport

    +
  • +
  • +

    rpc.websocket.capacity, which sets the maximum number of websocket subscriptions per subscription type

    +
    +
    +
    Authors: [Shramee Srivastav](https://github.com/shramee) and [Matthieu Auger](https://github.com/matthieuauger)
    +
    +
    +
  • +
+
+
+
+
+
+

[0.5.5] - 2023-05-18

+
+
+

Added

+
+
    +
  • +

    cairo-lang upgraded to 0.11.1.1

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    RPC emits connection logs and warnings

    +
  • +
  • +

    Fee estimate mismatch between gateway and pathfinder

    +
  • +
  • +

    Gateway uses a new gas price sampling algorithm which was incompatible with pathfinders.

    +
  • +
  • +

    Fee estimate returns error when submitting Cairo 1.0.0-rc0 classes.

    +
  • +
  • +

    Historic L1 handler transactions are served as Invoke V0

    +
  • +
  • +

    Older databases contain L1 handler transactions from before L1 handler was a specific transaction type. These were +stored as Invoke V0. These are now correctly identified as being L1 Handler transactions.

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    RPC emits connection logs and warnings

    +
  • +
  • +

    Fee estimate mismatch between gateway and pathfinder

    +
  • +
  • +

    Gateway uses a new gas price sampling algorithm which was incompatible with pathfinders.

    +
  • +
  • +

    Historic L1 handler transactions are served as Invoke V0

    +
  • +
  • +

    Older databases contain L1 handler transactions from before L1 handler was a specific transaction type. These were +stored as Invoke V0. These are now correctly identified as being L1 Handler transactions.

    +
  • +
+
+
+
+
+
+

v0.5.4

+
+
+

The primary focus of this release is to provide support for Starknet v0.11.1, and will continue to work for v0.11.0. Since this release is required for v0.11.1, you should update your node before the network is updated.

+
+
+

Added

+
+
    +
  • +

    Starknet v0.11.1 support

    +
  • +
  • +

    CORS support via the rpc.cors-domains configuration option

    +
  • +
  • +

    Transaction hashes are now verified as part of the sync process. Previously, these were not verified as the exact algorithm was underdocumented and the transaction format was still evolving.

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    RPC server panic for unprefixed unregistered method names

    +
  • +
  • +

    Data can temporarily appear to go missing when transitioning from PENDING to ACCEPTED ON L2

    +
  • +
  • +

    This was commonly seen when rapidly monitoring a new transaction, which would go from PENDING to TXN_HASH_NOT_FOUND to ACCEPTED_ON_L2 as pathfinder moved the ephemeral pending data to latest data on disk.

    +
  • +
+
+
+
+
+
+

v0.5.3

+
+
+

Fixes for minor issues and inconsistencies.

+
+
+

Added

+
+
    +
  • +

    max-rpc-connections command-line argument. This sets the maximum number incoming RPC connections the pathfinder node will accept. This defaults to 1024 if not specified.

    +
  • +
  • +

    cairo-lang upgraded to 0.11.0.2

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    starknet_simulateTransaction data model inconsistency

    +
  • +
  • +

    poll-pending default value restored to false

    +
  • +
  • +

    incoming RPC connections limited to 100. This limit was accidentally introduced in v0.5.2 as part of a dependency upgrade, whereas before it was unlimited. The default is now 1024 and can be configured using --max-rpc-connections.

    +
  • +
  • +

    handling of invalid JSON-RPC requests

    +
  • +
+
+
+
+
+
+

v0.5.2

+
+
+

This release fixes a few RPC bugs and adds support for bulk fee estimation and transaction simulation (traces) as part of v0.3 RPC specification.

+
+
+

In addition it also adds a pathfinder_getTransactionStatus endpoint which lets you track a transactions status — including REJECTED and RECEIVED — in the same fashion as the gateway.

+
+
+

Added

+
+
    +
  • +

    support starknet_estimateFee in the JSON-RPC v0.3 API

    +
  • +
  • +

    supports estimating multiple transactions

    +
  • +
  • +

    this includes declaring and immediately using a class (not currently possible via the gateway)

    +
  • +
  • +

    support starknet_simulateTransaction for JSON-RPC v0.3

    +
  • +
  • +

    supports simulating multiple transactions

    +
  • +
  • +

    this includes declaring and immediately using a class (not currently possible via the gateway)

    +
  • +
  • +

    support pathfinder_getTransactionStatus which is exposed on all RPC routes

    +
  • +
  • +

    this enables querying a transactions current status, including whether the gateway has received or rejected it

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    RPC returns int for entrypoint offsets instead of hex

    +
  • +
  • +

    RPC rejects Fee values with more than 32 digits

    +
  • +
  • +

    RPC does not expose pathfinder_getProof on v0.3 route

    +
  • +
+
+
+
+
+
+

v0.5.1

+
+
+

This is a minor bugfix release, primarily to fix an issue with syncing on testnet2.

+
+
+

Fixed

+
+
    +
  • +

    pathfinder sometimes spams nethermind L1 nodes

    +
  • +
  • +

    pathfinder stops syncing testnet2 at block 95220 due to a Sierra class compilation issue

    +
  • +
+
+
+
+
+
+

v0.5.0

+
+
+

Highlights

+
+
    +
  • +

    starknet v0.11.0 support

    +
  • +
  • +

    RPC API v0.3 partial support

    +
  • +
  • +

    removed several deprecated config options

    +
  • +
  • +

    requires python 3.9 or 3.10 (no longer 3.8)

    +
  • +
+
+
+
+

Added

+
+
    +
  • +

    support for state commitment and class commitment in pathfinder_getProof

    +
  • +
  • +

    support for starknet v0.11

    +
  • +
  • +

    partial support for RPC specification v0.3

    +
  • +
  • +

    exposed on /rpc/v0.3/ route

    +
  • +
  • +

    missing support for starknet_estimateFee and starknet_simulate

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    starknet_call and starknet_estimateFee JSON-RPC methods return more detailed error messages

    +
  • +
  • +

    python version requirement has changed to 3.9 or 3.10 (was 3.8 or 3.9 previously)

    +
  • +
+
+
+
+

Fixed

+
+
    +
  • +

    RPC accepts hex inputs for Felt without '0x' prefix. This led to confusion especially when passing in a decimal string which would get silently interpreted as hex.

    +
  • +
  • +

    using a Nethermind Ethereum endpoint occasionally causes errors such as <block-number> could not be found to be logged.

    +
  • +
  • +

    sync can miss new block events by getting stuck waiting for pending data.

    +
  • +
+
+
+
+

Removed

+
+ +
+
+
+

RPC API

+
+

We added support for v0.3 and removed v0.1. We still support v0.2 at both /rpc/v0.2 and /rpc (default) routes. In summary:

+
+
+
+
/                     # serves v0.2
+/rpc/v0.2/            # serves v0.2
+/rpc/v0.3/            # serves v0.3
+
+
+
+

We are missing starknet_estimateFee and starknet_simulate support for v0.3, which will be added in an upcoming release.

+
+
+
+

Python requirement

+
+

Note: this only applies if you are building from source. This does not impact docker users.

+
+
+

Pathfinder requires python to support the starknet VM used to simulate starknet transactions and function calls. Previous versions of the VM only worked with python 3.8 or 3.9 which was a hassle because most operating systems no longer directly support it. The new version of the VM bundled with starknet v0.11 now requires python version 3.9 or 3.10.

+
+
+
+

Configuration changes

+
+

Several configuration options are now removed, after they were deprecated in pathfinder v0.4.1. Here is a migration guide:

+
+
+
    +
  • +

    --testnet2: use --network testnet2 instead

    +
  • +
  • +

    --integration: use --network integration instead

    +
  • +
  • +

    --sequencer-url: use --network custom in combination with --feeder-gateway-url and gateway-url

    +
  • +
  • +

    --config: use environment variables or env files as an alternative

    +
  • +
+
+
+
+
+
+

v0.4.5

+
+
+

Hotfix for a bug introduced in the previous version v0.4.4, which prevented a new node from syncing on blocks near genesis.

+
+
+

Added

+
+

Added Newton FAQ links to readme

+
+
+
+

Fixed

+
+

Node fails to sync old blocks

+
+
+
+

New contributors

+
+

@SecurityQQ made their first contribution in #799

+
+
+
+
+
+

v0.4.4

+
+
+

This minor release contains some nice performance improvements for starknet_call and starknet_estimateFee as well as some minor bug fixes.

+
+
+

Also included is a major new feature: storage proofs - big thanks @pscott for his hard work on this feature! This is available via the pathfinder_getProof method which is served from both the pathfinder and Starknet endpoints for convenience:

+
+
+
+
<node-url>/rpc/pathfinder/v0.1/pathfinder_getProof
+<node-url>/rpc/v0.2/pathfinder_getProof
+
+
+
+

The method is specified here.

+
+
+

Its results can be used to formally verify what a contract’s storage values are without trusting the pathfinder node.

+
+
+

This is achieved by validating the merkle-proof that pathfinder returns and confirming that it correctly matches the known Starknet state root.

+
+
+

Added

+
+

storage proofs via pathfinder_getProof by @pscott

+
+
+
+

Fixed

+
+
    +
  • +

    starknet_getEvents returns all events when from_block="latest"

    +
  • +
  • +

    v0.1 starknet_getStateUpdate does not contain nonces

    +
  • +
+
+
+
+

Changed

+
+
    +
  • +

    Improved performance for starknet_call and starknet_estimateFee by caching classes

    +
  • +
  • +

    Improved performance for starknet_call and starknet_estimateFee by using Rust for hashing

    +
  • +
+
+
+
+

New contributors

+
+

@pscott made their first contribution in #726

+
+
+
+
+
+

v0.4.3

+
+
+

The primary purpose of this release is to properly support testnet2 after the Starknet v0.10.3 update.

+
+
+

The v0.10.3 update changed the testnet2 chain ID which impacts transaction signatures which in turn meant that starknet_estimateFee would fail for any signed transaction.

+
+
+

This release updates pathfinder to use the correct chain ID.

+
+
+

Fixed

+
+
    +
  • +

    Testnet2 and integration flags are ignored

    +
  • +
  • +

    starknet_estimateFee uses wrong chain ID for testnet2

    +
  • +
+
+
+
+

Changed

+
+

Updated to cairo-lang 0.10.3

+
+
+
+
+
+

v0.4.2

+
+
+

Contains several bug fixes, mostly hotfixes for bugs introduced in v0.4.1.

+
+
+

Added

+
+

Document that --chain-id expects text as input

+
+
+
+

Fixed

+
+
    +
  • +

    Testnet2 and integration L1 addresses are swapped (bug introduced in v0.4.1)

    +
  • +
  • +

    Proxy network setups can’t sync historical blocks (bug introduced in v0.4.1)

    +
  • +
  • +

    ABI serialization for starknet_estimateFee for declare transactions

    +
  • +
+
+
+
+
+
+

v0.4.1

+
+
+

Highlights

+
+
    +
  • +

    Soft deprecation of some configuration options

    +
  • +
  • +

    Support custom Starknet gateways

    +
  • +
  • +

    Pathfinder RPC extensions at /rpc/pathfinder/ with pathfinder_version method

    +
  • +
  • +

    starknet_events optimisations

    +
  • +
  • +

    fix block timestamp in pending calls

    +
  • +
  • +

    Custom Starknet gateway support

    +
  • +
+
+
+

This release introduces support for custom Starknets. You can select this network by setting --network custom and specifying the --gateway-url and --feeder-gateway-url options.

+
+
+

Configuration option deprecation

+
+

Several configuration options have been soft deprecated. This means using them will continue to work as before (no breaking change), but they will emit a warning when used. They will be removed in a future version, so please migrate to the newer options.

+
+
+

To re-emphasize: your current configuration setup will continue to work as is.

+
+
+
+

Network selection

+
+

--testnet2 and --integration have been deprecated in favor of --network testnet2 and --network integration.

+
+
+
+

Gateway proxy

+
+

--sequencer-url has been deprecated in favor of --network custom along with --gateway-url, --feeder-gateway-url and --chain-id. In addition, you will need to rename your existing database file to custom.sqlite as this will be the expected filename for custom networks.

+
+
+
+

Configuration file

+
+

--config has been deprecated and will not be supported in the future. The utility this provided was valuable. Unfortunately it is starting to severely hinder how fast we can implement configuration changes and we decided to remove it.

+
+
+

We suggest using environment variables along with environment files to configure pathfinder in a similar fashion.

+
+
+
+
+

Changed

+
+

The following configuration options are now marked as deprecated: --testnet2, --integration, --config, --sequencer-url +Optimized starknet_events for queries with both a block range and a from address

+
+
+
+

Fixed

+
+

Block timestamps for pending in starknet_call and starknet_estimateFee were using the latest timestamp instead of the pending one. This meant contracts relying on accurate timestamps could sometimes fail unexpectedly.

+
+
+
+

Added

+
+
    +
  • +

    Custom Starknet support

    +
  • +
  • +

    Pathfinder specific RPC extensions hosted at <rpc-url>/rpc/pathfinder/v0.1. Currently, this only contains pathfinder_version which returns the pathfinder version of the node.

    +
  • +
+
+
+
+
+
+

v0.4.0- (breaking release)

+
+
+

This release contains a breaking change, and also adds support for Starknet v0.10.2.

+
+
+

The changes themselves are quite simple, but please read through each section as there are some caveats which might impact you when you apply this update.

+
+
+

Default RPC version change

+
+

This release changes the version of the RPC that is served at the root route, from v0.1 to v0.2 of the RPC specification. Version v0.1 is still available at the /rpc/v0.1/ endpoint. This is the only breaking change in this release.

+
+
+

Here is a summary of what routes are currently available, and what’s changed:

+
+
+
    +
  • +

    / serves v0.2 (changed from v0.1)

    +
  • +
  • +

    /rpc/v0.1 serves v0.1 (no change)

    +
  • +
  • +

    /rpc/v0.2 serves v0.2 (no change)

    +
  • +
+
+
+

If possible, we recommend that you use the version specific routes as this will prevent such breaking changes from impacting you.

+
+
+
+

Starknet v0.10.2 support

+
+

This release includes an update to the cairo-vm embedded in pathfinder in order to support the upcoming v0.10.2 Starknet release. This bundled vm is a pre-release and may therefore contain differences to the final version used once Starknet updates testnet and mainnet. We will of course issue a new release if / when there is a new vm.

+
+
+ + + + + +
+ + +
+

Since these changes are not yet live on testnet nor mainnet, this means upgrading to this release will cause deviations between what pathfinder outputs and what can be expected on the network. More specifically, starknet_estimateFee will compute different fees until the network has upgraded to Starknet v0.10.2.

+
+
+

If you don’t need the RPC route changes, it may be pertinent to delay updating until closer to the v0.10.2 release dates on testnet and mainnet. The expected timeline for these upgrades is ~17/11 for testnets and ~24/11 for mainnet.

+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starknet-versions/upcoming-versions/index.html b/pr-1359/starknet-versions/upcoming-versions/index.html new file mode 100644 index 0000000000..abbe365931 --- /dev/null +++ b/pr-1359/starknet-versions/upcoming-versions/index.html @@ -0,0 +1,1005 @@ + + + + + + Upcoming Starknet versions :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/starknet-versions/version-notes/index.html b/pr-1359/starknet-versions/version-notes/index.html new file mode 100644 index 0000000000..f02c1ff46f --- /dev/null +++ b/pr-1359/starknet-versions/version-notes/index.html @@ -0,0 +1,2178 @@ + + + + + + Starknet release notes :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Starknet release notes

+
+
+
+

The following release notes cover the ongoing version changes to Starknet. You can subscribe to get the latest version updates delivered to your inbox at Starknet Roadmap & version updates.

+
+
+
+
+

Starknet environments

+
+
+

Within Starknet’s deployment pipeline, there are separate and distinct networks that operate independently of each other for testing before deployment.

+
+
+ + + + + +
+ + +
+

Sepolia testnet replaces Goerli testnet.

+
+
+

Goerli testnet support is now removed.

+
+
+

For more information, including bridge support for Sepolia, see Starknet Goerli Deprecation in the Starknet Dev News newsletter.

+
+
+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Current versions supported in each environment
EnvironmentStarknet versionSierra versionCairo version

Mainnet

0.13.2

1.6.0

2.0.0 - 2.8.2

Sepolia Testnet

0.13.2

1.6.0

2.0.0 - 2.8.2

+
+
+
+

Starknet v0.13.2 (August 28, 24)

+
+

New features and enhancements

+
+
    +
  • +

    Optimistic parallelization in the sequencer.

    +
  • +
  • +

    Applicative recursion ("blockpacking"): pack a contiguous sequence of blocks into a single L1 state update, instead of just one block. This change also affects the Starknet core contract on L1 and the structure of data availability:

    +
    +
      +
    • +

      The contract will store also the hash of the "aggregator" program, alongside the hash of the Starknet OS.

      +
    • +
    • +

      The LogStateUpdate event will be emitted once for every sequence of blocks in an applicative tree, rather than for every block.

      +
    • +
    • +

      The data posted on L1 is now the output of the aggregator, instead of the OS. The OsOutputHeader struct will contain four new fields: prev_block_number, prev_block_hash, os_program_hash, full_output.

      +
    • +
    +
    +
  • +
  • +

    New block hash definition: see the reference implementation here.

    +
  • +
+
+

API changes

+
+

Feeder gateway

+
+
    +
  • +

    All objects containing the block hash will use the new block hash computation.

    +
  • +
  • +

    Receipts will contain a new property total_gas_consumed, only for transactions after v0.13.2.

    +
  • +
  • +

    Three new builtins can appear in the builtin_instance_counter property of execution_resources in the transaction receipts: add_mod, mul_mod and range_check96.

    +
  • +
  • +

    End support for the endpoints get_block_traces and get_transaction_trace.

    +
  • +
+
+
+
+

JSON RPC

+
+

No changes in v0.13.2. The new JSON RPC version v0.8.0 will be released alongside Starknet v0.13.3.

+
+

Cairo

+
+

A new compiler version will be released for v0.13.2, Cairo v2.7.0. This includes a Sierra upgrade to v1.6.0, i.e. contracts compiled with the new compiler will only be accepted on Starknet v0.13.2 onwards.

+
+
+

The Starknet-related features that will be added in this Cairo version include:

+
+
+
    +
  • +

    sha256 syscall - syscall for computing sha256 on an arbitrary length input:

    +
    +
      +
    • +

      High level code for using sha256/

      +
    • +
    • +

      Syscall cost - the dominant part of the syscall is ~1.1k bitwise builtin applications which today costs ~180 L1 gas (the 2k steps are negligible in comparison). The syscall is applied once for ~14 u32.

      +
    • +
    +
    +
  • +
  • +

    Circuit builtin - the new compiler version will introduce a way to define ad-hoc algebraic circuits in Cairo. Circuits use the new mul_mod and add_mod builtins under the hood.

    +
    + +
    +
  • +
+
+

Others

+
+

Errors prettifying: execution errors are becoming more structured, which will be the basis for better error handling in the next JSON RPC version, resulting in nice error displays by wallets.

+
+

Additional resources

+
+

Community Forum Posts:

+
+ +
+
+
+
+

Starknet v0.13.1.1 (April 15, 24)

+
+
+

In response to community feedback, Starknet 0.13.1.1 reduces class declaration fees and increases the calldata limit:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ResourceGas cost (0.13.1)Gas cost (0.13.1.1)

CASM bytecode

28 gas/felt

1 gas/felt

Sierra bytecode

28 gas/felt

1 gas/felt

ABI

0.875 gas/character

0.032 gas/character

+ +++++ + + + + + + + + + + + + + + +
EntityLimit (0.13.1)Limit (0.13.1.1)

Calldata length (felts)

4,000

5,000

+
+
+
+

Starknet v0.13.1 (March 13, 24)

+
+

New features and enhancements

+
+
    +
  • +

    Cheaper data availability (DA): Starknet uses EIP-4844. State diffs are now blobs, rather than calldata, requiring the addition of data_gas to the Starknet block header.

    +
  • +
  • +

    Time-related syscalls when called from an account contract’s __validate__, __validate_deploy__, __validate_declare__, or constructor function:

    +
    +
      +
    • +

      block_timestamp returns the hour, rounded down.

      +
    • +
    • +

      block_number returns the block number, rounded down to the nearest multiple of 100.

      +
    • +
    +
    +
  • +
  • +

    Optimization: Load into memory only the functions in a contract that are actually used when generating the proof.

    +
  • +
+
+

Block header updates

+
+

The block header includes the following new fields:

+
+
+
    +
  • +

    l1_da_mode: A string enum that takes the value CALLDATA or BLOB, and indicates whether EIP-4844 is the data availability solution that is used for the block. Also appears in pending block.

    +
  • +
  • +

    l1_data_gas_price: Contains price_in_wei and price_in_fri, where 1 fri is 10-18 STRK. Also appears in pending block.

    +
  • +
  • +

    l1_gas_price: Replaces eth_l1_gas_price and strk_l1_gas_price. Contains the data gas price (EIP-4844) in addition to the regular gas price.

    +
  • +
+
+

API: JSON RPC

+

Starknet API JSON RPC 0.6.0

+
+

Starknet 0.13.1 is backward compatible with starknet_api_openrpc.json v0.6.0. Responses from 0.13.1 can be mapped naturally into v0.6.0 objects.

+
+

Starknet API JSON RPC 0.7.0

+
+

A new version of starknet_api_openrpc.json, 0.7.0, accommodates the changes introduced by Starknet using EIP-4844.

+
+
+
BLOCK_HEADER includes two new fields to support EIP-4844:
+
    +
  • +

    l1_data_gas_price: contains price_in_wei and price_in_fri (10-18 denominations, similar to v0.6.0).

    +
  • +
  • +

    l1_da_mode: An enum that indicates whether this block will use calldata or blobdata and can take the following values:

    +
    +
      +
    • +

      CALLDATA

      +
    • +
    • +

      BLOB

      +
    • +
    +
    +
  • +
+
+
+
FEE_ESTIMATE
+
    +
  • +

    Includes two new fields:

    +
    +
      +
    • +

      data_gas_consumed

      +
    • +
    • +

      data_gas_price

      +
    • +
    +
    +
  • +
  • +

    overall_fee is now:
    +gas_consumed × gas_price + data_gas_consumed × data_gas_price

    +
  • +
  • +

    Fee estimates will change depending on the data availability solution used by current Starknet blocks. For example, if you estimate the fee against the pending block, and it’s currently using CALLDATA, then nodes are expected to return data_gas_consumed=0 and compute the fee similarly to today, that is, get higher estimates.

    +
  • +
+
+
+
Receipts and traces now include data availability resources
+
    +
  • +

    COMMON_RECEIPT_PROPERTIES, the main receipt object, now includes a new entry: execution_resources.

    +
  • +
  • +

    The EXECUTION_RESOURCES object now includes the field data_availability. Note that the resources of internal calls will remain the same/

    +
  • +
  • +

    For more information, see the PR for the API JSON RPC specs

    +
  • +
+
+
+
EXECUTION_RESOURCES
+
    +
  • +

    Computation resources are separated from data availability resources. This is done by introducing the data_availability property, which includes l1_gas and l1_data_gas, which were consumed due to DA requirements. One of these will always be zero, depending on whether or not the block uses calldata or blobs, as specified by the l1_da_mode field in the block header.

    +
  • +
  • +

    Syscall costs are now included in the execution resources of traces and receipts. These are costs that are already being paid for but were not reported so far.

    +
  • +
+
+

Pricing changes

+

Computation

+
+
    +
  • +

    A Cairo step now costs 0.0025 gas/step, a 50% reduction.

    +
  • +
  • +

    All builtins costs are accordingly reduced by 50%.

    +
  • +
+
+

Calldata and signatures

+
+

Each felt in the calldata and signature arrays of all transaction types now costs 0.128 gas/felt.

+
+

Class declaration

+
+
    +
  • +

    Each felt of a sierra_program in the contract class and of bytecode in the compiled contract class now costs 28 gas/felt.

    +
    + + + + + +
    + + +
    +

    v1 DECLARE transactions only include bytecode.

    +
    +
    +
    +
  • +
  • +

    Each character in the ABI costs 0.875 gas.

    +
  • +
+
+

Events

+
+
    +
  • +

    An additional felt to the data array of an event now costs 0.128 gas/felt, similar to calldata.

    +
  • +
  • +

    An additional felt to the keys array now costs 0.256 gas/felt.

    +
  • +
+
+

Infrastructure updates

+
+

Starknet now supports multiple L1 providers.

+
+

Additional resources

+
+

Community Forum Posts:

+
+ +
+
+
+

Starknet v0.13.0 (Jan 10, 24)

+
+
+

Starknet v0.13.0 is live on Mainnet.

+
+
+

Starknet 0.13.0 includes the following changes:

+
+
+
    +
  • +

    v3 transactions, including:

    +
    +
      +
    • +

      Fee payment in STRK

      +
    • +
    • +

      Reserved fields for future features, such as Volition and payment master

      +
    • +
    +
    +
  • +
  • +

    get_block API: The gas_price field is replaced by the eth_l1_gas_price and strk_l1_gas_price fields. This change applies also to existing blocks. For more information on the new fields, see the JSON RPC API Spec on GitHub

    +
  • +
  • +

    Sierra v1.4.0. This new version of Sierra is part of Crate v2.4.0, in the Cairo 2.4.0 package. For more information, see Cairo v2.4.0 is out! on the Community forum.

    +
  • +
  • +

    Improved performance of secp256k1_mul and secp256r1_mul syscalls

    +
  • +
  • +

    Computation cost is reduced by approximately 50% as a result of reduced Cairo steps and increased use of builtins. L1 data availability cost is reduced by approximately 10%-25%. For an ERC-20 transfer, the DA fee reduction is 25%.

    +
  • +
+
+
+
+
+

Starknet v0.12.3 (Nov 19, 23)

+
+
+

Starknet v0.12.3 is live on Mainnet.

+
+
+

This release partially removes support for the Starknet feeder gateway. For details, see Feeder Gateway Deprecation in Development Proposals on the Starknet community forum.

+
+
+

Additionally, this version includes the following changes:

+
+
+
    +
  • +

    Performance optimizations in the gateway, the computation of the Patricia storage root, and block hash

    +
  • +
  • +

    Support for secp256r1 syscalls in the Starknet OS.

    +
  • +
  • +

    Restriction for __validate__ and the constructor of DeployAccount transactions:

    +
    +
      +
    • +

      Restrict access to sequencer_address in the get_execution_info syscall by returning 0's for the address.

      +
    • +
    • +

      Restrict access to the following syscalls:

      +
      +
        +
      • +

        Cairo contracts: get_block_hash

        +
      • +
      • +

        Cairo 0 contracts: get_sequencer_address

        +
      • +
      +
      +
    • +
    +
    +
  • +
+
+
+

This version is available on both Goerli and Sepolia testnets.

+
+

Cairo 0

+
+

Move structs that are common to secp256k1 and secp256r1 to a separate file.

+
+
+
+
+

Starknet v0.12.2 (Sep 04, 23)

+
+
+

Starknet v0.12.2 is live on Mainnet.

+
+
+

This version includes the following changes:

+
+
+
    +
  • +

    Enabling P2P Authentication: An additional endpoint in the sequencer gateway to provide a signature on the state diff commitment and block hash.

    +
  • +
  • +

    Resolving Mismatches in Queries: An extension to the get_state_update endpoint in the sequencer gateway that returns both the pending state diff and the pending block together.

    +
  • +
  • +

    Increased maximum Cairo steps per transaction from 1 million to 3 million.

    +
  • +
+
+
+
+
+

Starknet v0.12.1 (Aug 21, 23)

+
+
+

Starknet v0.12.1 is live on Mainnet.

+
+
+

This version includes the following changes:

+
+
+
    +
  • +

    Mempool Validation.

    +
  • +
  • +

    Inclusion of Failed Transactions.

    +
  • +
  • +

    Keccak builtin.

    +
  • +
+
+
+
+
+

Starknet v0.12.0 (July 12, 23)

+
+
+

Starknet v0.12.0 is live on Mainnet.

+
+
+

This version contains the following changes:

+
+
+
    +
  • +

    Use the rust blockifier and LambdaClass’s Cairo VM to accelerate the sequencer’s time to handle transactions.

    +
  • +
  • +

    Support version 2.0.0 of the Cairo compiler.

    +
  • +
  • +

    Replace the PENDING status of transactions to ACCEPTED_ON_L2 - once a transaction is in that status it means that it will be included in a block, this applies to transactions - blocks still have the PENDING status.

    +
  • +
  • +

    Add an experimental get_block_hash syscall.

    +
  • +
  • +

    Change HTTP error code from 500 to 400 on API errors.

    +
  • +
+
+
+
+
+

Starknet v0.11.2 (May 31, 23)

+
+
+

Starknet v0.11.2 is live on Mainnet.

+
+
+

This version contains the following changes:

+
+
+
    +
  • +

    Upgrade Cairo 1.0 version to v1.0.0-rc0 (Cairo 1.0 activated on Starknet!)

    +
  • +
+
+
+
+
+

Starknet v0.11.1 (May 23, 23)

+
+
+

Starknet v0.11.1 is live on Mainnet.

+
+
+

This version contains the following changes:

+
+
+
    +
  • +

    Upgrade Cairo 1.0 version to v1.0.0-rc0.

    +
  • +
  • +

    Charged transaction fee is now based on an average Ethereum gas price instead of a single sample +(estimation API is unaffected).

    +
  • +
  • +

    API changes:

    +
    +
      +
    • +

      Remove the state root in get_state_update for pending blocks to allow faster responses +in future versions.

      +
    • +
    +
    +
  • +
  • +

    Testing framework:

    +
    +
      +
    • +

      Allow declaring (and interacting with) Cairo 1.0 contracts.

      +
      +
        +
      • +

        Currently, the Cairo 1.0 ABI is not supported yet, so a Cairo 0 ABI should be supplied to +declare() manually.

        +
      • +
      +
      +
    • +
    • +

      Split deploy() to two phases declare and deploy: deprecated_declare() (for Cairo 0 contract) or +declare() (for Cairo 1.0 contracts) and deploy() (for both).

      +
    • +
    +
    +
  • +
  • +

    Add current block hash to the Starknet Core Contract (currently not verified by the Starknet OS):

    +
    +
      +
    • +

      Breaking change: The LogStateUpdate event’s data is changed to include blockHash.

      +
    • +
    +
    +
  • +
+
+
+
+
+

Starknet v0.11.0 (Mar 29, 23)

+
+
+

Starknet v0.11.0 is live on Mainnet.

+
+
+ + + + + +
+ + +
+

invoke and declare transactions of version 0 are no longer supported on this version.

+
+
+
+
+

In Starknet v0.11.0, you can declare, deploy and run Cairo 1.0 smart contracts. We also introduce a new system call that allows a smooth transitioning of existing contracts to a Cairo 1.0 implementation.

+
+
+

Historically, contract classes have been defined in terms of Cairo assembly, or Casm for short (the class definition also included more information needed for execution, e.g., hint data). The novelty of Cairo 1.0 is the introduction of Sierra (Safe Intermediate Representation), an intermediate layer between Cairo 1.0 and Casm.

+
+
+

The introduction of Cairo 1.0 and Sierra has several effects on the system. Below we list the effects on each component; of particular note are:

+
+
+
    +
  • +

    A new version of the declare transaction, which allows sending the new class structure

    +
  • +
  • +

    The state commitment will now include contract classes

    +
  • +
  • +

    Changes to the onchain data format

    +
  • +
  • +

    New system call - replace_class

    +
  • +
+
+
+
+
+

Starknet v0.10.3 (Dec 12, 22)

+
+
+ + + + + +
+ + +
+

The deploy transaction is no longer supported on this version.

+
+
+
+
+

This version contains the following changes:

+
+
+

Starknet

+
+
+
    +
  • +

    Performance - Separate the state commitment computation from the execution of the transactions

    +
  • +
  • +

    Add starknet-class-hash command to compute the class hash of a compiled Starknet contract

    +
  • +
+
+
+

Cairo:

+
+
+
    +
  • +

    Autoformatter: Automatically break lines inside expressions

    +
  • +
+
+
+
+
+

Starknet v0.10.2 (Nov 29, 22)

+
+
+
    +
  • +

    This version introduces sequencer parallelization! This is the first step in our roadmap of performance upgrades. Details about the specific mechanism of parallelization and the roadmap in general are described in this medium post.

    +
  • +
  • +

    A new endpoint, estimate_fee_bulk, is added to the feeder gateway. This will allow estimating the fee of several transactions at once, where each transaction is executed relative to the resulting state from applying the previous one.

    +
    +
      +
    • +

      Sequencing performance improvements

      +
    • +
    • +

      Builtin ratio changes, which affects builtin costs

      +
    • +
    • +

      Add estimate_fee_bulk API that computes the fee of multiple transactions that will be executed consecutively

      +
    • +
    +
    +
  • +
+
+
+

As part of this version, we will also increase the finality of transactions in the pending block, by fixing the timestamp at the time of the block creation. This will solve the issue of transactions moving from pending to rejected on account of too old timestamp

+
+
+
+
+

Starknet v0.10.1 (Oct 25, 22)

+
+
+

This version contains the following changes:

+
+
+

Starknet:

+
+
+
    +
  • +

    Add DeployAccount transaction (which will replace the Deploy transaction for deploying account contracts). To use it, you should first add enough funds to your account address to pay the transaction fee, and then you can invoke DeployAccount

    +
  • +
  • +

    Split the starknet deploy_account CLI command into starknet new_account and starknet deploy_account

    +
  • +
  • +

    Account contracts that are expected to be deployed this way should implement the`validate_deploy()` entry point, which should check the signature of the DeployAccount transaction

    +
  • +
  • +

    Improve L1 fee computation: the fee is computed according to the diff of the storage state

    +
  • +
  • +

    API: Remove entry_point_type field from transaction information

    +
  • +
+
+
+

Cairo:

+
+
+
    +
  • +

    Add uint256_mul_div_mod to uint256.cairo

    +
  • +
+
+
+
+
+

Starknet v0.10.0 (Sept 05, 22)

+
+
+

This version introduces the next step in Starknet’s account abstraction design, specifically the validate/execute separation. See here for more information.

+
+
+

This version contains the following changes:

+
+
+

Starknet:

+
+
+
    +
  • +

    Contract (breaking changes):

    +
    +
      +
    • +

      @external and @view functions should be imported directly by the main compiled file. Otherwise, they will not be usable as external functions

      +
    • +
    • +

      Forbid using the same storage variable name in two modules

      +
    • +
    +
    +
  • +
  • +

    New transaction version (version 1) for invoke and declare transactions:

    +
    +
      +
    • +

      Transactions of version 0 are deprecated and will not be supported in Starknet from the next version (v0.11.0). Please update your systems to use the new version

      +
    • +
    +
    +
  • +
+
+
+ + + + + +
+ + +
+

In order to use transactions of version 1 you will need to upgrade your account contracts

+
+
+
+
+
    +
  • +

    Add nonce field to the transactions. Nonce validation is now part of the Starknet protocol and is enforced to be executed sequentially

    +
  • +
  • +

    Invoke:

    +
    +
      +
    • +

      Split execute to two functions:` validate` (only validates the transaction) and execute (only executes the transaction)

      +
    • +
    • +

      Remove the selector (which is now always execute) field, following the above change.

      +
    • +
    +
    +
  • +
  • +

    Declare:

    +
    +
      +
    • +

      declare transaction should now be sent from an account (and is validated using validate_declare in the account contract)

      +
      +
        +
      • +

        Support fee for sending L1 messages. At this point, it’s not mandatory and messages with no fee will still be handled. Starting from the next version it will become mandatory.

        +
      • +
      +
      +
    • +
    +
    +
  • +
+
+
+

Cairo:

+
+
+

Syntax changes in Cairo (to make it more similar to rust and C++):

+
+
+
    +
  • +

    You can use the cairo-migrate script to convert old code to the new syntax. Use the -i flag to apply the changes to the files

    +
  • +
  • +

    End statements with ;

    +
  • +
+
+
+ + + + + +
+ + +
+

New lines are still part of the language at this point, and you cannot put more than one instruction per line. This will change in Cairo1.0.

+
+
+
+
+
    +
  • +

    Use { … } for code blocks (instead of : and end)

    +
  • +
  • +

    Add () around the condition of if statements

    +
  • +
  • +

    Remove the member keyword in structs

    +
  • +
  • +

    Change comment to use // instead of #

    +
  • +
  • +

    Use …​, ap` instead of `...; ap in low level Cairo code

    +
  • +
  • +

    Support return types that are not tuples. For example, func foo() → felt (instead of func foo() → (r: felt)) +As a result, it’s now mandatory to specify return types. func foo() → (res) should be replaced by func foo() → (res: felt). The cairo-migrate tool does that automatically.

    +
  • +
  • +

    Return statement accepts expressions, rather than only tuples. For example, you can write let x = (5,); return x;

    +
  • +
  • +

    A few standard library functions were changed to return felt. The cairo-migrate script also fixes calls to those functions

    +
  • +
  • +

    Support using functions as expressions

    +
  • +
  • +

    This only applies to functions with → felt signature`, whose ap change is known at compile-time (e.g., recursive functions cannot be used this way)

    +
  • +
  • +

    Fix a bug in the secp signature verification code that allowed a malicious prover to ignore the value of v (this does not let the prover fake a signature, but allows it to claim that a valid signature is invalid).

    +
  • +
  • +

    Add Cairo code for the recursive STARK verifier

    +
  • +
+
+
+

Technical changes: +* Move from python3.7 to python3.9

+
+
+
+
+

Starknet v0.9.1 (July 20, 22)

+
+
+

This version contains the following changes:

+
+
+

Starknet:

+
+
+

API changes:

+
+
+
    +
  • +

    Add get_block_traces API - returns all the transaction traces of a given block

    +
  • +
  • +

    Add a list of declared contracts in get_state_update

    +
  • +
  • +

    Add a 0x prefix for class hash in the API

    +
  • +
  • +

    Add starknet_version field for blocks (only applies to new blocks)

    +
  • +
+
+
+

Starknet CLI:

+
+
+
    +
  • +

    Change the default block number to pending

    +
  • +
  • +

    Using a wallet is the default, --no_wallet must be specified explicitly to override this

    +
  • +
  • +

    Deploying contracts:

    +
    +
      +
    • +

      Add deploy_contract function to the account contract created by starknet deploy_account

      +
    • +
    • +

      Use this function to deploy contract (unless using --no_wallet). In particular, deploy should be used after declaring the contract (it expects the contract class hash)

      +
    • +
    +
    +
  • +
  • +

    Support --dry_run to get the transaction information without signing or sending it

    +
  • +
  • +

    Support deploy_from_zero in the deploy syscall to deploy a contract to an address that does not depend on the deployer

    +
  • +
+
+
+

Cairo: +* Support and in if statements (if x == y and z == w).

+
+
+ + + + + +
+ + +
+

At the moment other boolean combinations are not supported

+
+
+
+
+
+
+

Starknet v0.9.0 (June 06, 22)

+
+
+

This version introduces the contract class/instance paradigm into Starknet. See here for more information.

+
+
+

This version contains the following changes:

+
+
+

Starknet:

+
+
+
    +
  • +

    Enforce fees - max_fee must not be set to zero, and selector must be execute

    +
  • +
  • +

    Split the concepts of contract class and contract instance.

    +
  • +
  • +

    Add declare transaction type

    +
  • +
  • +

    New API and CLI commands:

    +
  • +
  • +

    declare - Declares a contract class

    +
  • +
  • +

    get_class_by_hash - Returns the contract class given its hash

    +
  • +
  • +

    get_class_hash_at - Returns the class hash for a given contract instance address

    +
  • +
  • +

    Rename delegate_call to library_call, and change the contract address argument to class hash.

    +
  • +
  • +

    Add a deploy system call.

    +
  • +
  • +

    Rename ContractDefinition to ContractClass

    +
  • +
  • +

    Reduce the compiled contract file’s size by removing unnecessary identifiers (this optimization can be disabled using --dont_filter_identifiers)

    +
  • +
+
+
+

Cairo:

+
+
+
    +
  • +

    Initial support for the EC-op builtin (scalar multiplication over the STARK curve). Not supported in Starknet yet.

    +
  • +
  • +

    Add additional helper methods to blake2s.cairo, including big-endian support

    +
  • +
+
+
+

Technical changes: +* Change function’s return type from a struct to a named tuple. In particular, foo.Return.SIZE is no longer supported.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/_images/devtools_flow.svg b/pr-1359/tools/_images/devtools_flow.svg new file mode 100644 index 0000000000..cfd18b3bec --- /dev/null +++ b/pr-1359/tools/_images/devtools_flow.svg @@ -0,0 +1,1513 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/_images/starknet-devtools.png b/pr-1359/tools/_images/starknet-devtools.png new file mode 100644 index 0000000000..c691f7c868 Binary files /dev/null and b/pr-1359/tools/_images/starknet-devtools.png differ diff --git a/pr-1359/tools/api-services/index.html b/pr-1359/tools/api-services/index.html new file mode 100644 index 0000000000..f609b77b95 --- /dev/null +++ b/pr-1359/tools/api-services/index.html @@ -0,0 +1,1153 @@ + + + + + + Full nodes and API services :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Full nodes and API services

+
+

A list of recommended full-nodes, open API endpoints, and API providers.

+
+
+

For complete information on the Starknet Node API in JSON RPC format, see starknet_api_openrpc.json on GitHub.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. API providers
ProviderOpen API endpoint, where relevantVersion support, where relevant

Alchemy

Starknet API FAQ

All That Node

Blast API

https://blastapi.io/public-api/starknet

BlockPI

https://starknet.blockpi.network/v1/rpc/public

Chainbase

Chainstack

DRPC

https://drpc.org/public-endpoints/starknet

Dwellir

https://www.dwellir.com/networks/starknet

GetBlock

Use the /rpc/vX_Y suffix, as explained in JSON-RPC API in Pathfinder’s README.

Infura

Lava Protocol

https://www.lavanet.xyz/get-started/starknet

Use the /rpc/vX_Y suffix, as explained in JSON-RPC API in Pathfinder’s README.

Nethermind

https://data.voyager.online

RPC spec versions

NOWNodes

OMNIA

QuickNode

Supporting Multiple Versions

Reddio

Zan

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2. Node providers
Provider nameDescriptionMore information

Deoxys

A Starknet full-node written in Rust and powered by Substrate by Kasar

github.com/kasarlabs/deoxys

Juno

A Starknet full-node written in go-lang by Nethermind.

+

You can use the Juno Node runner on AWS.

github.com/NethermindEth/juno

Papyrus

A Starknet full-node written in Rust by StarkWare

github.com/starkware-libs/papyrus

Pathfinder

A Starknet full-node written in Rust by Equilibrium

github.com/eqlabs/pathfinder

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/audit/index.html b/pr-1359/tools/audit/index.html new file mode 100644 index 0000000000..8fded953a1 --- /dev/null +++ b/pr-1359/tools/audit/index.html @@ -0,0 +1,1071 @@ + + + + + + Audit providers :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Audit providers

+
+

Building a Starknet project and want your contract to be audited?

+
+
+

The companies listed below have designated teams that provide auditing services to Starknet +contracts.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. A list of companies providing contract audits for Starknet
Company nameURL

ABDK

www.abdk.consulting

Beosin

beosin.com

Chain Security

chainsecurity.com

Consensys Diligence

consensys.net/diligence

Extropy

security.extropy.io

Nethermind

nethermind.io

Open Zeppelin

www.openzeppelin.com

OtterSec

osec.io

PeckShield

peckshield.com

Trail of Bits

www.trailofbits.com

Zellic

www.zellic.io

Ginger Security

gingersec.xyz

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/bridged-tokens/index.html b/pr-1359/tools/bridged-tokens/index.html new file mode 100644 index 0000000000..83319c60f9 --- /dev/null +++ b/pr-1359/tools/bridged-tokens/index.html @@ -0,0 +1,1095 @@ + + + + + + Bridged tokens and addresses :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Bridged tokens and addresses

+
+

The tokens that are currently bridged to Starknet, including their L1 and L2 addresses, are listed in the following .json files:

+
+
+ ++++ + + + + + + + + +
+mainnet.json + +

The addresses of the tokens currently bridged to Starknet Mainnet.

+
+sepolia.json + +

The addresses of the tokens currently bridged to Starknet Sepolia testnet.

+
+
+
+

Each token has the following parameters:

+
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+name + +

Token name.

+
+symbol + +

Token symbol.

+
+decimals + +

Number of decimal places used to get the user representation.

+
+l1_token_address + +

Address of the L1 ERC-20 contract.

+
+l2_token_address + +

Address of the L2 ERC-20 contract.

+
+l1_bridge_address + +

Address of the L1 bridge contract.

+
+l2_bridge_address + +

Address of the L2 bridge contract.

+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/dai-token-migration/index.html b/pr-1359/tools/dai-token-migration/index.html new file mode 100644 index 0000000000..b080b1d925 --- /dev/null +++ b/pr-1359/tools/dai-token-migration/index.html @@ -0,0 +1,1074 @@ + + + + + + Migrating DAI v0 to DAI :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Migrating DAI v0 to DAI

+
+

Following Maker DAO’s announcement on Jan 25th, StarkWare launched a new DAI contract and bridge on Starknet.

+
+
+

The new DAI token and bridge are a part of StarkGate and compatible with StarkGate 2.0 features.

+
+
+

You can withdraw old DAI tokens (DAI v0) without any limitation. Depositing using the DAI v0 bridge are disabled. You are encouraged to migrate to the new DAI token. You can use swap services on Starknet to swap DAI v0 for DAI.

+
+
+

Maker DAO’s DAI token on Starknet is written in Cairo0 and is not upgradeable. Without upgradability, it cannot support StarkGate’s latest features, such as Smart Deposits and Withdrawal Limits, and over time it will stop being compatible with Starknet altogether (Regenesis). This means that a transition plan is necessary.

+
+
+

On January 25th, StarkWare launched a new set of DAI bridge and token contracts under StarkGate, written in Cairo. This new DAI token will retain the same contract ’symbol’ and ’name’ as the existing one. To differentiate between the two on Apps and other UIs, we refer to the old DAI as “DAI v0” and the new DAI simply as “DAI.”

+
+
+
Procedure
+

Use one of the following methods:

+
+
+
    +
  • +

    Swap your DAI v0 for DAI using an L2 swap app or aggregator within the Starknet ecosystem, such as the following:

    +
    + +
    +
  • +
  • +

    Use StarkGate:

    +
    +
      +
    1. +

      Withdraw your current DAI (DAI v0) to L1 using StarkGate

      +
    2. +
    3. +

      Re-deposit your L1 DAI using StarkGate.

      +
      +

      StarkGate automatically issues the new DAI.

      +
      +
    4. +
    +
    +
  • +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/clis/index.html b/pr-1359/tools/devtools/clis/index.html new file mode 100644 index 0000000000..32e3fa6a11 --- /dev/null +++ b/pr-1359/tools/devtools/clis/index.html @@ -0,0 +1,1059 @@ + + + + + + Command-line tools :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Command-line tools

+
+

starkli

+
+
+

Starkli is a fast command-line interface for interacting with the Starknet network. It supports fetching data from the Starknet network, deploying accounts, and interacting with contracts. Developed by Jonathan Lei. +Starkli also includes useful utilities for developers, such as:

+
+
+
    +
  • +

    Compute class hashes from the Cairo file that defines the class.

    +
  • +
  • +

    Compute a function’s selector.

    +
  • +
  • +

    Encode messages.

    +
  • +
  • +

    Deploying new accounts or fetching existing accounts

    +
  • +
  • +

    Submitting multi-calls to your account

    +
  • +
+
+ +
+ +
+
+
+
+

sncast

+
+
+

Starknet Cast, part of the Starknet Foundry suite, is a command line tool for interacting with the Starknet network, with deep integration with Starknet Foundry projects.

+
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/dapp-frameworks/index.html b/pr-1359/tools/devtools/dapp-frameworks/index.html new file mode 100644 index 0000000000..a8e78952d4 --- /dev/null +++ b/pr-1359/tools/devtools/dapp-frameworks/index.html @@ -0,0 +1,1046 @@ + + + + + + Dapp Frameworks :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Dapp Frameworks

+
+

Scaffold-Stark

+
+
+

Built using NextJS, Starknet.js, Scarb, Starknet-React, Starknet Foundry and Typescript. Designed to make it easier for developers to create, deploy and interact with smart contracts.

+
+ +
+ +
+
+
+
+

Starknet Scaffold

+
+
+

An open-source, up-to-date toolkit for building decentralized applications (dapps) on Starknet. Move from prototyping to production-grade apps seamlessly.

+
+ + +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/devnets/index.html b/pr-1359/tools/devtools/devnets/index.html new file mode 100644 index 0000000000..6bcd0be78a --- /dev/null +++ b/pr-1359/tools/devtools/devnets/index.html @@ -0,0 +1,1076 @@ + + + + + + Local Development nodes :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Local Development nodes

+
+
+
+

A Starknet devnet is a local Starknet node implementations, aimed for testing and development. A devnet behaves just like a real Starknet node, but everything is executed locally. This enables much faster and more private development of Starknet applications.

+
+
+
+
+

starknet-devnet-rs

+
+
+

starknet-devnet-rs can is a Rust implementation of a local Starknet node. Developed by SpaceShard.

+
+
+

With starknet-devnet-rs includes many featured tailored for testing and development, which are not present on testnet/mainnet. +Some of the features include:

+
+
+
    +
  • +

    Pre-deployed and pre-funded accounts

    +
  • +
  • +

    Forking the chain at a specific block.

    +
  • +
  • +

    Dumping current state (and loading in future runs)

    +
  • +
  • +

    Impersonating account

    +
  • +
  • +

    Mock L1<>L2 communication

    +
  • +
+
+ +
+ +
+
+
+
+

Katana

+
+
+

Katana, developed by the Dojo team, is an extremely fast devnet designed to support local development with Dojo, which is a gaming engine for Starknet. You can use Katana as a general purpose devnet as well.

+
+ +
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/libs-for-dapps/index.html b/pr-1359/tools/devtools/libs-for-dapps/index.html new file mode 100644 index 0000000000..46c1090637 --- /dev/null +++ b/pr-1359/tools/devtools/libs-for-dapps/index.html @@ -0,0 +1,1094 @@ + + + + + + Libraries for Dapps :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Libraries for Dapps

+
+
+
+

Decentralized applications are at the heart of Starknet. These libraries help developers build Dapps on Starknet, and connect to prominent Starknet wallets.

+
+
+
+
+

Starknet React

+
+
+

Starknet React is a collection of React hooks for Starknet. It is inspired by wagmi, powered by starknet.js. Developed by Apibara.

+
+ +
+ +
+
+
+
+

Get Starknet

+
+
+

Starknet wallet<>Dapp connection bridge. Easy discovery and UI for Starknet wallets.

+
+
+

Supporting popular Starknet browser wallets

+
+
+
    +
  • +

    ArgentX

    +
  • +
  • +

    Braavos

    +
  • +
  • +

    Metamask Snaps

    +
  • +
  • +

    OKx

    +
  • +
+
+ +
+ +
+
+
+
+

Starknetkit

+
+
+

A Starknet wallet connection kit, built by Argent. Built using Starknet.js and starknet-react.

+
+ +
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/overview/index.html b/pr-1359/tools/devtools/overview/index.html new file mode 100644 index 0000000000..ff5fd023ab --- /dev/null +++ b/pr-1359/tools/devtools/overview/index.html @@ -0,0 +1,1024 @@ + + + + + + Starknet developer tools :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Starknet developer tools

+
+

Cairo is a turing complete language for writing provable programs. It is also the language used for writing smart contracts for Starknet. Starknet uses a different model than the Ethereum Virtual Machine (EVM), and as such, requires specialized tools for development.

+
+
+
+Devtools Flow +
+
+
+ + + + + +
+ + +
+

This list of tools is dynamic and is being updated as more tools are added. If a tool you are using is missing, please consider editing this page and creating a Pull Request.

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/sdks/index.html b/pr-1359/tools/devtools/sdks/index.html new file mode 100644 index 0000000000..3ba8908397 --- /dev/null +++ b/pr-1359/tools/devtools/sdks/index.html @@ -0,0 +1,1105 @@ + + + + + + Starknet SDKs :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Starknet SDKs

+
+

A Software Development Kit (SDK) is a library that abstracts the complexities of Starknet when building transactions and interacting with the blockchain, including the following:

+
+
+
    +
  • +

    Read the chain state.

    +
  • +
  • +

    Account creation and management.

    +
  • +
  • +

    Cryptography: signature verification and signing, computing hashes used by Starknet.

    +
  • +
  • +

    Contract declaration and deployment.

    +
  • +
  • +

    Contract interactions: ABI import, constructing transactions.

    +
  • +
+
+
+

SDKs implement the Starknet JSON RPC specification, and are updated to support the latest API changes. There are SDKs for various languages, so you can choose the SDK according to your needs.

+
+ ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SDK nameGithubPackageDocsSupportMaintainer

Starknet.js

starknet.js on GitHub

starknet.js on NPM

starknet.js Book

starknet.js channel on Starknet Discord

SpaceShard

Starknet.py

starknet.js on GitHub

starknet.py on PyPi

starknet.py Docs

starknet.py on Telegram

Software Mansion

Starknet-rs

starknet-rs on GitHub

starknet-rs on Crates

starknet-rs Docs

starknet-rs on Telegram

Jonathan Lei

Starknet.go

starknet.go on GitHub

starknet.go Docs

starknet.go on Telegram

Nethermind

starknet-jvm

starknet-jvm on GitHub

starknet-jvm Docs

Software Mansion

starknet.swift

starknet.swift on GitHub

starknet.swift Docs

Software Mansion

starknet.dart

starknet.dart on GitHub

starknet.dart on Pub

starknet.dart Docs

starknet.dart on Telegram

Focustree

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/security/index.html b/pr-1359/tools/devtools/security/index.html new file mode 100644 index 0000000000..12167502e3 --- /dev/null +++ b/pr-1359/tools/devtools/security/index.html @@ -0,0 +1,1061 @@ + + + + + + Security and Analysis tools :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Security and Analysis tools

+
+

Sierra Analyzer

+
+
+

Sierra-Analyzer is a security toolkit for analyzing Sierra files, developed by FuzzingLabs.

+
+
+

Supported featrued include:

+
+
+
    +
  • +

    Decompile a Sierra file

    +
  • +
  • +

    Print the contracts Control Flow Graph

    +
  • +
  • +

    Run Static Analysis detectors

    +
  • +
+
+
+

Links:

+
+ +
+
+
+

Entro

+
+
+

Analyze and Decode Starknet Transactions and events.

+
+
+

Features: +* Get contract class history +* Decode contract ABI +* Decode transaction data +* Backfill data for faster analysis

+
+
+

Links:

+
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/smart-contract-tools/index.html b/pr-1359/tools/devtools/smart-contract-tools/index.html new file mode 100644 index 0000000000..b39a6067a3 --- /dev/null +++ b/pr-1359/tools/devtools/smart-contract-tools/index.html @@ -0,0 +1,1174 @@ + + + + + + Smart Contract Development :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Smart Contract Development

+
+
+
+

The following tools are the recommended tools for developing Starknet smart contracts. These cover compilation, package management, testing and deployment.

+
+
+
+
+

Scarb: The Cairo package manager

+
+
+

Scarb is a package manager for Cairo, but it is much more than that. It is the easiest and recommended way to build and maintain Cairo code. Think Cargo for Rust. +Scarb is developed by Software Mansion.

+
+
+

Scarb includes the following features:

+
+
+
    +
  • +

    Initiating a new Cairo project.

    +
  • +
  • +

    Compiling Cairo projects.

    +
  • +
  • +

    Adding and removing Cairo dependencies.

    +
  • +
  • +

    Generating Cairo documentation.

    +
  • +
  • +

    Fetching and uploading packages Scarbs.xyz, the Cairo Registry.

    +
  • +
  • +

    Integration with the Cairo Language Server

    +
  • +
  • +

    It integrates with other tools in the Cairo ecosystem, such as Starknet Foundry and the Dojo gaming engine.

    +
  • +
+
+ +
+ +
+
+
+
+

Starknet Foundry

+
+
+

Starknet Foundry is the go-to toolchain for developing Starknet smart contracts. Similarly to its EVM counterpart, Starknet Foundry supports a plethora of features focused on testing Cairo smart contracts for Starknet.

+
+
+

Starknet Forge, and snforge_std allow the use of "cheatcodes" to test various aspects of the contracts.

+
+
+

For example:

+
+
+
    +
  • +

    Setting caller address

    +
  • +
  • +

    Manipulating the timestamp and block number

    +
  • +
  • +

    Forking the chain at a specific block and testing with that state

    +
  • +
  • +

    Fuzz testing

    +
  • +
  • +

    Getting accurate gas and resource reports

    +
  • +
  • +

    Profiling

    +
  • +
+
+
+

Starknet Cast is a command line tool for interacting with the Starknet network, with deep integration with Starknet Foundry projects. +With sncast it is possible to:

+
+
+
    +
  • +

    Declare and deploy contracts

    +
  • +
  • +

    Read from Starknet contracts

    +
  • +
  • +

    Deploy accounts

    +
  • +
  • +

    Interact with contracts

    +
  • +
+
+ +
+ +
+
+
+
+

The Starknet Remix plugin

+
+
+

Remix is a browser-based integrated development environment (IDE) for Ethereum that you can use for learning, experimenting and finding vulnerabilities in smart contracts, without installing anything. The Starknet Remix plugin lets you use Remix for testing Starknet smart contracts, so you can focus on learning Cairo and Starknet in the comfort of your browser.

+
+
+

Remix and the Starknet Remix plugin include the following features:

+
+
+
    +
  • +

    Integrated compiling.

    +
  • +
  • +

    You can deploy contracts to testnet, mainnet and the plugin’s own integrated devnet.

    +
  • +
  • +

    You can call functions of contracts that you have already deployed, to facilitate testing and interaction.

    +
  • +
  • +

    The Starknet Remix Plugin is integrated with Starknet By Example, a rich repository of practical learning content.

    +
  • +
+
+ +
+

Remix Project: Remix Project site.

+
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/utilities/index.html b/pr-1359/tools/devtools/utilities/index.html new file mode 100644 index 0000000000..feace855eb --- /dev/null +++ b/pr-1359/tools/devtools/utilities/index.html @@ -0,0 +1,1151 @@ + + + + + + Utilities :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Utilities

+
+
+
+

While not under any specific category, these tools can be helpful in various stages of development.

+
+
+
+
+

Universal Sierra Compiler

+
+
+

While Scarb compiles full projects, and produces both Sierra and CASM files, it is often needed to only compile a single Sierra file to CASM (for example, when getting a class from Starknet mainnet). The Universal Sierra Compiler supports all sierra versions, and can compile the the a CASM file.

+
+
+ + + + + +
+ + +
+

The USC comes bundled with Starknet Foundry and does not need to be installed separately if Starknet Foundry is installed.

+
+
+
+ + +
+
+
+

RPC Request Builder

+
+
+

The Starknet RPC Request Builder is a useful tool to generate RPC queries for Starknet, with support for basic example for JavaScript, Go and Rust.

+
+ + +
+
+
+

Open Zeppelin Contract Wizard

+
+
+

The Open Zeppelin Contract Wizard is a tool that helps you create smart contracts with Open Zeppelin libraries. Easily toggle on and off features for popular smart contract patterns, and the wizard will generate the code for you.

+
+ + +
+
+
+

Cairo Profiler

+
+
+

Cairo-profiler can be used to create profiles of Cairo executions from execution traces. +These can be analyzed and displayed to show Flame Graphs, and other useful information.

+
+
+ + + + + +
+ + +
+

Cairo-profiler is currently integrated into Starknet Foundry, but can be used as a standalone tool.

+
+
+
+ + +
+
+
+

Cairo Playground

+
+
+

If want to dive deep into the Cairo VM, and experiment writing Cairo online, and don’t want to deploy a smart contract on Starknet, the Cairo Playground is a great way to do so.

+
+ +
+ +
+
+
+
+

Starknet Devnet JS

+
+
+

A JavaScript package, abstracting the Starknet Devnet API, making it easier to interact with starknet-devnet-rs. +This simplifies writing end-to-end tests using Devnet, including tests for L1<>L2 communications.

+
+
+

Notable features:

+
+
+
    +
  • +

    Spawn a new Devnet instance without installing it

    +
  • +
  • +

    Wrapping RPC calls to Devnet

    +
  • +
  • +

    Abstracting complex L1<>L2 communication setup with a local L1 node (e.g. Anvil)

    +
  • +
+
+ + +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/devtools/vscode/index.html b/pr-1359/tools/devtools/vscode/index.html new file mode 100644 index 0000000000..ce5111815f --- /dev/null +++ b/pr-1359/tools/devtools/vscode/index.html @@ -0,0 +1,1038 @@ + + + + + + The Visual Studio Code Cairo extension :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

The Visual Studio Code Cairo extension

+
+

An extension for the Microsoft VSCode IDE that provides assistance when writing Cairo smart contracts, by using the Cairo Language Server. It integrates with Scarb, and works best when Scarb is installed via asdf.

+
+
+

Features include:

+
+
+
    +
  • +

    Live diagnostic highlighting for compile errors

    +
  • +
  • +

    Quick fixes with suggestions

    +
  • +
  • +

    Go to definition

    +
  • +
  • +

    Code formatting

    +
  • +
  • +

    Code completion for imports

    +
  • +
+
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/important-addresses/index.html b/pr-1359/tools/important-addresses/index.html new file mode 100644 index 0000000000..c88bb450c7 --- /dev/null +++ b/pr-1359/tools/important-addresses/index.html @@ -0,0 +1,1163 @@ + + + + + + Starknet contract and sequencer addresses :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Starknet contract and sequencer addresses

+
+
+
+ + + + + +
+ + +
+

Sepolia testnet replaces Goerli testnet.

+
+
+

Goerli testnet support is now removed.

+
+
+

For more information, including bridge support for Sepolia, see Starknet Goerli Deprecation in the Starknet Dev News newsletter.

+
+
+
+
+
+
+

Starknet on Mainnet

+
+
+ ++++ + + + + + + + + + + + + +
+The Starknet Core Contract + +

0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4

+
+Verifier address + +

0x47312450B3Ac8b5b8e247a6bB6d523e7605bDb60

+
+Sequencer base URL for API routing + +

https://alpha-mainnet.starknet.io

+
+
+
+
+
+

Starknet version on Sepolia testnet

+
+
+ ++++ + + + + + + + + + + + + +
+The Starknet Core Contract + +

0xE2Bb56ee936fd6433DC0F6e7e3b8365C906AA057

+
+Verifier address + +

0x07ec0D28e50322Eb0C159B9090ecF3aeA8346DFe

+
+Sequencer base URL for API routing + +

https://alpha-sepolia.starknet.io

+
+
+
+
+
+

Starknet fee tokens

+
+
+

The Starknet fee tokens are STRK and ETH.

+
+
+ ++++ + + + + + + + + +
+L2 STRK address (Mainnet and testnet) + +

0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d

+
+L2 ETH address (Mainnet and testnet) + +

0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7

+
+
+
+
+
+

Starknet voting token

+
+
+

The Starknet voting token is vSTRK. For information on vSTRK, see vSTRK overview on the Starknet Governance Hub.

+
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/limits-and-triggers/index.html b/pr-1359/tools/limits-and-triggers/index.html new file mode 100644 index 0000000000..3014ab376c --- /dev/null +++ b/pr-1359/tools/limits-and-triggers/index.html @@ -0,0 +1,1144 @@ + + + + + + Current limits :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Current limits

+
+

Starknet currently has a number of limits in place in order to keep the network stable and optimized for the best performance.

+
+
+

Blockifier-related constants and limits are defined, for each Starknet version starting from v0.13.0, in a JSON file called versioned_constants in this directory.

+
+
+ + + + + +
+ + +
+

These are subject to revisions and change on a regular basis

+
+
+
+
+ + + + + +
+ + +
+

Sepolia testnet replaces Goerli testnet.

+
+
+

Goerli testnet support is now removed.

+
+
+

For more information, including bridge support for Sepolia, see Starknet Goerli Deprecation in the Starknet Dev News newsletter.

+
+
+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Starknet’s current limits
EntityDescriptionSepoliaMainnet

Block time

The maximum amount of time within which a pending block is closed, if no other limit is met.

30 seconds

30 seconds

Block limit (Cairo steps)

The maximum number of Cairo steps that can be completed +within each block to ensure block production times remain consistent and predictable.

40,000,000

40,000,000

Block limit (gas)

Certain Starknet operations, such as sending messages between L1 and L2, consume Ethereum gas. The current L1 state update +mechanism involves an Ethereum transaction for each Starknet block.

+

The gas limit for Starknet blocks is therefore inherited from the gas limit for Ethereum blocks.

5,000,000

5,000,000

Max transaction size (Cairo steps)

The maximum number of computational steps, measured in Cairo steps, that a transaction can contain when processed on the Starknet network. +This limit is important for ensuring the efficient execution of transactions and preventing potential congestion.

10,000,000

10,000,000

Max number of events per transaction

The maximum number of events that a transaction can emit during its execution.

1,000

1,000

Max number of data felts per event

The maximum number of felts that an event can contain in its data array.

300

300

Max number of key felts per event

The maximum number of felts that an event can contain in its keys array.

50

50

Max Cairo steps for validate

The maximum number of computational steps, measured in Cairo steps, for a validate function.

1,000,000

1,000,000

Max contract bytecode size (Number of felts in the program)

The maximum size of the bytecode or program that a smart contract can have on Starknet.

+

Bytecode is the low-level code that comprises smart contracts. Limiting this size helps manage the complexity of contracts and the overall efficiency of the network.

81,290

81,290

Max contract class size

The maximum size for a contract class within Starknet.

+

Contract classes are a fundamental building block for smart contracts, and limiting their size can have implications for the network’s scalability and security.

4,089,446 bytes

4,089,446 bytes

IP address limits (read/write)

In order to reduce network spam, Starknet limits the amount of contract reads and writes that a single IP +address can make.

200 per min per IP address

200 per min per IP address

Signature length (felts)

4,000

4,000

Calldata length (felts)

4,000

4,000

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/ref-block-explorers/index.html b/pr-1359/tools/ref-block-explorers/index.html new file mode 100644 index 0000000000..1da5fe5c58 --- /dev/null +++ b/pr-1359/tools/ref-block-explorers/index.html @@ -0,0 +1,1042 @@ + + + + + + Block explorers :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

Block explorers

+
+

A block explorer, or blockchain explorer, enables you to see transactions, blockchain metrics and other information.

+
+
+

The following block explorers provide information on Starknet.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Starknet block explorers, in alphabetical order
Block explorer nameURL

Starkscan

https://starkscan.co

ViewBlock

https://viewblock.io/starknet

Voyager

https://voyager.online

oklink

https://www.oklink.com/starknet

NFTScan (NFT explorer)

https://starknet.nftscan.com/

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pr-1359/tools/starknet-book/index.html b/pr-1359/tools/starknet-book/index.html new file mode 100644 index 0000000000..2909c4725a --- /dev/null +++ b/pr-1359/tools/starknet-book/index.html @@ -0,0 +1,1043 @@ + + + + + + About the Starknet Book :: Starknet documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+

About the Starknet Book

+
+
+
+

The Starknet Book serves as a comprehensive guide to understanding Starknet, Cairo, and introduces you to the Starknet ecosystem.

+
+
+

The Starknet Book caters to various objectives and interests. Mix and match these chapters to customize your learning experience based on your unique interests and requirements. Whether you’re exploring smart contract development, frontend integration, or learning about the core architecture, The Starknet Book is your trusted companion on the journey of deepening your understanding of Starknet.

+
+
+
+
+

Table of Contents

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ChapterDescription

Chapter 1

Introduction to Starknet and Cairo

+

How to quickly get started with Starknet and Cairo development.

Chapter 2

Starknet tooling

+

An overview of the available tooling for Starknet.

Chapter 3

Starknet architecture

+

Learn how Starknet works under the hood. Learn how sequencer, prover and nodes interact.

chapter 4

Account abstraction

+

Account abstraction is one of the main usability features of Starknet. Learn how this works and how you can utilize it.

+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +