[{"data":1,"prerenderedAt":2143},["ShallowReactive",2],{"docs-nav":3,"doc-\u002Fdocs\u002Fconcepts":79,"content-query-FygW6FwCrD":1235},[4,10,15,19,23,28,34,38,43,47,52,57,61,66,70,74],{"_path":5,"title":6,"description":7,"order":8,"category":9},"\u002Fdocs\u002Fapi-reference","API Reference","Overview of the Vaultaris REST API — endpoints, authentication, response conventions, and rate limiting.",1,"Reference",{"_path":11,"title":12,"description":13,"order":14,"category":9},"\u002Fdocs\u002Farchitecture","Architecture","System design overview — components, request lifecycle, background workers, and data flow in Vaultaris.",4,{"_path":16,"title":17,"description":18,"order":8,"category":17},"\u002Fdocs\u002Fconcepts","Core Concepts","Understand the building blocks of Vaultaris — tenants, users, roles, groups, applications, sessions, and the security primitives that connect them.",{"_path":20,"title":21,"description":22,"order":8,"category":21},"\u002Fdocs\u002Fconfiguration","Configuration","Complete reference for all Vaultaris environment variables.",{"_path":24,"title":25,"description":26,"order":8,"category":27},"\u002Fdocs\u002Fdeployment","Deployment Guide","Deploy Vaultaris to production using Docker Compose, bare metal, or a managed container platform.","Deployment",{"_path":29,"title":30,"description":31,"order":32,"category":33},"\u002Fdocs\u002Finstallation","Installation","Install Vaultaris using Docker, a pre-built binary, or by compiling from source.",3,"Getting Started",{"_path":35,"title":36,"description":37,"order":8,"category":33},"\u002Fdocs\u002Fintroduction","Introduction","Vaultaris is an open-source, enterprise-grade Identity and Access Management platform written in Rust — a self-hostable alternative to Keycloak and Auth0.",{"_path":39,"title":40,"description":41,"order":42,"category":27},"\u002Fdocs\u002Fkubernetes","Kubernetes","Deploy Vaultaris on Kubernetes using the official Helm chart or plain manifests.",2,{"_path":44,"title":45,"description":46,"order":42,"category":17},"\u002Fdocs\u002Fmulti-tenancy","Multi-Tenancy","How Vaultaris isolates organizations, supports SaaS use cases, and manages license-driven resource freezing.",{"_path":48,"title":49,"description":50,"order":8,"category":51},"\u002Fdocs\u002Foauth-oidc","OAuth 2.0 & OpenID Connect","How to integrate Vaultaris as an authorization server — authorization code, client credentials, password flows, DPoP sender-constrained tokens, and hosted login.","Authentication & Authorization",{"_path":53,"title":54,"description":55,"order":8,"category":56},"\u002Fdocs\u002Fplugins","Plugin Development","Extend Vaultaris with type-safe native Rust plugins.","Plugins",{"_path":58,"title":59,"description":60,"order":42,"category":33},"\u002Fdocs\u002Fquickstart","Quickstart","Run Vaultaris locally in under five minutes using Docker Compose.",{"_path":62,"title":63,"description":64,"order":42,"category":65},"\u002Fdocs\u002Fsdk-nodejs","Node.js SDK","Use the vaultaris-sdk package to integrate Vaultaris into your Node.js or TypeScript applications. Includes transparent DPoP support.","SDKs",{"_path":67,"title":68,"description":69,"order":8,"category":65},"\u002Fdocs\u002Fsdk-rust","Rust SDK","Use the vaultaris-sdk crate to interact with Vaultaris from your Rust applications. Includes transparent DPoP support.",{"_path":71,"title":72,"description":73,"order":32,"category":9},"\u002Fdocs\u002Fsecurity","Security","Security architecture, cryptographic choices, and hardening recommendations for Vaultaris.",{"_path":75,"title":76,"description":77,"order":78,"category":51},"\u002Fdocs\u002Fwebauthn","WebAuthn \u002F Passkeys \u002F FIDO2","Complete guide to integrating WebAuthn passwordless authentication and passkeys with Vaultaris.",5,{"_path":16,"_dir":80,"_draft":81,"_partial":81,"_locale":82,"title":17,"description":18,"order":8,"category":17,"body":83,"_type":1229,"_id":1230,"_source":1231,"_file":1232,"_stem":1233,"_extension":1234},"docs",false,"",{"type":84,"children":85,"toc":1206},"root",[86,95,109,114,129,143,160,167,187,193,236,242,253,312,318,329,377,382,388,422,428,439,476,482,501,507,518,588,594,611,616,622,628,633,639,652,658,678,711,723,729,734,787,799,805,815,881,886,892,897,902,931,1025,1037,1043,1201],{"type":87,"tag":88,"props":89,"children":91},"element","h2",{"id":90},"tenants",[92],{"type":93,"value":94},"text","Tenants",{"type":87,"tag":96,"props":97,"children":98},"p",{},[99,101,107],{"type":93,"value":100},"A ",{"type":87,"tag":102,"props":103,"children":104},"strong",{},[105],{"type":93,"value":106},"tenant",{"type":93,"value":108}," is the top-level isolation unit. Every resource in Vaultaris — users, roles, groups, applications, sessions, audit logs — belongs to exactly one tenant and is never visible to another.",{"type":87,"tag":96,"props":110,"children":111},{},[112],{"type":93,"value":113},"Typical mapping:",{"type":87,"tag":115,"props":116,"children":117},"ul",{},[118,124],{"type":87,"tag":119,"props":120,"children":121},"li",{},[122],{"type":93,"value":123},"SaaS product → one tenant per paying customer organization",{"type":87,"tag":119,"props":125,"children":126},{},[127],{"type":93,"value":128},"Internal tooling → one tenant per business unit or environment",{"type":87,"tag":96,"props":130,"children":131},{},[132,134,141],{"type":93,"value":133},"Tenants are identified by a UUID returned at creation. All resource routes are scoped under ",{"type":87,"tag":135,"props":136,"children":138},"code",{"className":137},[],[139],{"type":93,"value":140},"\u002Fapi\u002Fv1\u002Ftenants\u002F{tenant_id}\u002F",{"type":93,"value":142},".",{"type":87,"tag":144,"props":145,"children":146},"blockquote",{},[147],{"type":87,"tag":96,"props":148,"children":149},{},[150,152,158],{"type":93,"value":151},"The master tenant (",{"type":87,"tag":135,"props":153,"children":155},{"className":154},[],[156],{"type":93,"value":157},"00000000-0000-0000-0000-000000000001",{"type":93,"value":159},") is reserved for instance-level administration.",{"type":87,"tag":161,"props":162,"children":164},"h3",{"id":163},"hosted-tenants",[165],{"type":93,"value":166},"Hosted tenants",{"type":87,"tag":96,"props":168,"children":169},{},[170,172,177,179,185],{"type":93,"value":171},"A tenant whose license includes the ",{"type":87,"tag":102,"props":173,"children":174},{},[175],{"type":93,"value":176},"hosting capability",{"type":93,"value":178}," (granted by the control plane) can act as a ",{"type":87,"tag":180,"props":181,"children":182},"em",{},[183],{"type":93,"value":184},"host",{"type":93,"value":186}," for other tenants on the same instance. Each hosted tenant is fully isolated — the host gets administrative and aggregate-stats access only, never read access to the hosted tenant's data.",{"type":87,"tag":161,"props":188,"children":190},{"id":189},"billing-shadow-tenants",[191],{"type":93,"value":192},"Billing shadow tenants",{"type":87,"tag":96,"props":194,"children":195},{},[196,198,204,206,212,214,220,221,227,228,234],{"type":93,"value":197},"A special tenant variant (",{"type":87,"tag":135,"props":199,"children":201},{"className":200},[],[202],{"type":93,"value":203},"is_billing_shadow = true",{"type":93,"value":205},") used by the cloud control plane to hold billing RBAC. Billing shadow tenants have four seeded roles (",{"type":87,"tag":135,"props":207,"children":209},{"className":208},[],[210],{"type":93,"value":211},"billing.owner",{"type":93,"value":213},", ",{"type":87,"tag":135,"props":215,"children":217},{"className":216},[],[218],{"type":93,"value":219},"billing.admin",{"type":93,"value":213},{"type":87,"tag":135,"props":222,"children":224},{"className":223},[],[225],{"type":93,"value":226},"billing.finance",{"type":93,"value":213},{"type":87,"tag":135,"props":229,"children":231},{"className":230},[],[232],{"type":93,"value":233},"billing.viewer",{"type":93,"value":235},") and are excluded from OpenAPI docs. They are provisioned automatically when a user signs up via the cloud portal.",{"type":87,"tag":88,"props":237,"children":239},{"id":238},"users",[240],{"type":93,"value":241},"Users",{"type":87,"tag":96,"props":243,"children":244},{},[245,246,251],{"type":93,"value":100},{"type":87,"tag":102,"props":247,"children":248},{},[249],{"type":93,"value":250},"user",{"type":93,"value":252}," is a person or service account that can authenticate within a tenant. Users carry:",{"type":87,"tag":115,"props":254,"children":255},{},[256,261,266,271,276,281,299],{"type":87,"tag":119,"props":257,"children":258},{},[259],{"type":93,"value":260},"Email address (unique within a tenant)",{"type":87,"tag":119,"props":262,"children":263},{},[264],{"type":93,"value":265},"Argon2id-hashed password",{"type":87,"tag":119,"props":267,"children":268},{},[269],{"type":93,"value":270},"Profile fields: first name, last name, display name, phone, locale, timezone, avatar URL",{"type":87,"tag":119,"props":272,"children":273},{},[274],{"type":93,"value":275},"Email verification status",{"type":87,"tag":119,"props":277,"children":278},{},[279],{"type":93,"value":280},"MFA enrollment (TOTP, WebAuthn \u002F passkeys)",{"type":87,"tag":119,"props":282,"children":283},{},[284,286,292,293],{"type":93,"value":285},"Lockout state: ",{"type":87,"tag":135,"props":287,"children":289},{"className":288},[],[290],{"type":93,"value":291},"failed_attempts",{"type":93,"value":213},{"type":87,"tag":135,"props":294,"children":296},{"className":295},[],[297],{"type":93,"value":298},"locked_until",{"type":87,"tag":119,"props":300,"children":301},{},[302,304,310],{"type":93,"value":303},"Freeze state: ",{"type":87,"tag":135,"props":305,"children":307},{"className":306},[],[308],{"type":93,"value":309},"freeze_reason",{"type":93,"value":311}," (LicenseDowngrade, Expiry, Suspension, AdminAction)",{"type":87,"tag":88,"props":313,"children":315},{"id":314},"roles",[316],{"type":93,"value":317},"Roles",{"type":87,"tag":96,"props":319,"children":320},{},[321,322,327],{"type":93,"value":100},{"type":87,"tag":102,"props":323,"children":324},{},[325],{"type":93,"value":326},"role",{"type":93,"value":328}," is a named permission set scoped to a tenant or application. Roles can be:",{"type":87,"tag":115,"props":330,"children":331},{},[332,342,360],{"type":87,"tag":119,"props":333,"children":334},{},[335,340],{"type":87,"tag":102,"props":336,"children":337},{},[338],{"type":93,"value":339},"Simple",{"type":93,"value":341}," — flat permission list",{"type":87,"tag":119,"props":343,"children":344},{},[345,350,352,358],{"type":87,"tag":102,"props":346,"children":347},{},[348],{"type":93,"value":349},"Composite",{"type":93,"value":351}," — inherit permissions from other roles (",{"type":87,"tag":135,"props":353,"children":355},{"className":354},[],[356],{"type":93,"value":357},"is_composite = true",{"type":93,"value":359},")",{"type":87,"tag":119,"props":361,"children":362},{},[363,368,370,376],{"type":87,"tag":102,"props":364,"children":365},{},[366],{"type":93,"value":367},"System",{"type":93,"value":369}," — built-in roles protected from modification (",{"type":87,"tag":135,"props":371,"children":373},{"className":372},[],[374],{"type":93,"value":375},"is_system = true",{"type":93,"value":359},{"type":87,"tag":96,"props":378,"children":379},{},[380],{"type":93,"value":381},"A user's effective permissions are the union of all permissions from direct roles and roles inherited through group membership.",{"type":87,"tag":88,"props":383,"children":385},{"id":384},"permissions",[386],{"type":93,"value":387},"Permissions",{"type":87,"tag":96,"props":389,"children":390},{},[391,392,397,399,405,407,413,414,420],{"type":93,"value":100},{"type":87,"tag":102,"props":393,"children":394},{},[395],{"type":93,"value":396},"permission",{"type":93,"value":398}," is the atomic authorization unit in the ",{"type":87,"tag":135,"props":400,"children":402},{"className":401},[],[403],{"type":93,"value":404},"resource:action",{"type":93,"value":406}," model (e.g. ",{"type":87,"tag":135,"props":408,"children":410},{"className":409},[],[411],{"type":93,"value":412},"users:read",{"type":93,"value":213},{"type":87,"tag":135,"props":415,"children":417},{"className":416},[],[418],{"type":93,"value":419},"tenants:write",{"type":93,"value":421},"). Permissions support ABAC conditions for attribute-based gating. They are assigned to roles.",{"type":87,"tag":88,"props":423,"children":425},{"id":424},"groups",[426],{"type":93,"value":427},"Groups",{"type":87,"tag":96,"props":429,"children":430},{},[431,432,437],{"type":93,"value":100},{"type":87,"tag":102,"props":433,"children":434},{},[435],{"type":93,"value":436},"group",{"type":93,"value":438}," is a collection of users that share role assignments. Groups support:",{"type":87,"tag":115,"props":440,"children":441},{},[442,455,460,465],{"type":87,"tag":119,"props":443,"children":444},{},[445,447,453],{"type":93,"value":446},"Hierarchical nesting via ",{"type":87,"tag":135,"props":448,"children":450},{"className":449},[],[451],{"type":93,"value":452},"parent_id",{"type":93,"value":454}," (path-based)",{"type":87,"tag":119,"props":456,"children":457},{},[458],{"type":93,"value":459},"Identity provider allowlists — restrict which IdPs members can use",{"type":87,"tag":119,"props":461,"children":462},{},[463],{"type":93,"value":464},"OAuth client allowlists",{"type":87,"tag":119,"props":466,"children":467},{},[468,474],{"type":87,"tag":135,"props":469,"children":471},{"className":470},[],[472],{"type":93,"value":473},"global_session_enabled",{"type":93,"value":475}," flag for cross-domain SSO access",{"type":87,"tag":88,"props":477,"children":479},{"id":478},"applications",[480],{"type":93,"value":481},"Applications",{"type":87,"tag":96,"props":483,"children":484},{},[485,487,492,494,499],{"type":93,"value":486},"An ",{"type":87,"tag":102,"props":488,"children":489},{},[490],{"type":93,"value":491},"application",{"type":93,"value":493}," represents a logical service within a tenant. Applications can own scoped copies of OAuth clients, IdPs, roles, groups, permissions, and ABAC policies — keeping each service's authorization surface self-contained. Applications are subject to license gating (the ",{"type":87,"tag":135,"props":495,"children":497},{"className":496},[],[498],{"type":93,"value":478},{"type":93,"value":500}," feature must be enabled for the tier).",{"type":87,"tag":88,"props":502,"children":504},{"id":503},"oauth-clients",[505],{"type":93,"value":506},"OAuth Clients",{"type":87,"tag":96,"props":508,"children":509},{},[510,511,516],{"type":93,"value":486},{"type":87,"tag":102,"props":512,"children":513},{},[514],{"type":93,"value":515},"OAuth client",{"type":93,"value":517}," is the OAuth 2.0 credential set for a specific application or integration:",{"type":87,"tag":115,"props":519,"children":520},{},[521,532,543,568,573,578,583],{"type":87,"tag":119,"props":522,"children":523},{},[524,530],{"type":87,"tag":135,"props":525,"children":527},{"className":526},[],[528],{"type":93,"value":529},"client_id",{"type":93,"value":531}," (public)",{"type":87,"tag":119,"props":533,"children":534},{},[535,541],{"type":87,"tag":135,"props":536,"children":538},{"className":537},[],[539],{"type":93,"value":540},"client_secret",{"type":93,"value":542}," (hashed — confidential clients only)",{"type":87,"tag":119,"props":544,"children":545},{},[546,552,554,560,562],{"type":87,"tag":135,"props":547,"children":549},{"className":548},[],[550],{"type":93,"value":551},"client_type",{"type":93,"value":553},": ",{"type":87,"tag":135,"props":555,"children":557},{"className":556},[],[558],{"type":93,"value":559},"public",{"type":93,"value":561}," or ",{"type":87,"tag":135,"props":563,"children":565},{"className":564},[],[566],{"type":93,"value":567},"confidential",{"type":87,"tag":119,"props":569,"children":570},{},[571],{"type":93,"value":572},"Allowed redirect URIs, grant types, scopes",{"type":87,"tag":119,"props":574,"children":575},{},[576],{"type":93,"value":577},"Token lifetime overrides",{"type":87,"tag":119,"props":579,"children":580},{},[581],{"type":93,"value":582},"PKCE requirement flag",{"type":87,"tag":119,"props":584,"children":585},{},[586],{"type":93,"value":587},"Consent requirement flag",{"type":87,"tag":88,"props":589,"children":591},{"id":590},"dpop-sender-constrained-tokens",[592],{"type":93,"value":593},"DPoP (Sender-Constrained Tokens)",{"type":87,"tag":96,"props":595,"children":596},{},[597,602,604,609],{"type":87,"tag":102,"props":598,"children":599},{},[600],{"type":93,"value":601},"DPoP",{"type":93,"value":603}," (RFC 9449) binds access and refresh tokens to the client's key pair. The client generates an ed25519 or P-256 key pair, proves possession on every request via a ",{"type":87,"tag":135,"props":605,"children":607},{"className":606},[],[608],{"type":93,"value":601},{"type":93,"value":610}," header JWT, and the server rejects any request that cannot prove ownership of the key the token was issued to.",{"type":87,"tag":96,"props":612,"children":613},{},[614],{"type":93,"value":615},"This prevents token replay: a stolen bearer token is useless without the client's private key.",{"type":87,"tag":88,"props":617,"children":619},{"id":618},"sessions",[620],{"type":93,"value":621},"Sessions",{"type":87,"tag":161,"props":623,"children":625},{"id":624},"regular-sessions",[626],{"type":93,"value":627},"Regular sessions",{"type":87,"tag":96,"props":629,"children":630},{},[631],{"type":93,"value":632},"Short-lived, created on authentication. Stored in PostgreSQL, tied to tenant, user, IP, and user-agent. Instantly revocable.",{"type":87,"tag":161,"props":634,"children":636},{"id":635},"global-sessions",[637],{"type":93,"value":638},"Global sessions",{"type":87,"tag":96,"props":640,"children":641},{},[642,644,650],{"type":93,"value":643},"Long-lived (up to 1 week), issued when a user is in a group with ",{"type":87,"tag":135,"props":645,"children":647},{"className":646},[],[648],{"type":93,"value":649},"global_session_enabled = true",{"type":93,"value":651},". Enables cross-domain SSO without third-party cookies. Domain transfer tokens (one-time, 60-second lifetime) carry the session across domains.",{"type":87,"tag":88,"props":653,"children":655},{"id":654},"device-registry",[656],{"type":93,"value":657},"Device Registry",{"type":87,"tag":96,"props":659,"children":660},{},[661,663,668,670,676],{"type":93,"value":662},"Every login tracks a ",{"type":87,"tag":102,"props":664,"children":665},{},[666],{"type":93,"value":667},"device",{"type":93,"value":669}," derived from the ",{"type":87,"tag":135,"props":671,"children":673},{"className":672},[],[674],{"type":93,"value":675},"User-Agent",{"type":93,"value":677}," string. Devices can be:",{"type":87,"tag":115,"props":679,"children":680},{},[681,691,701],{"type":87,"tag":119,"props":682,"children":683},{},[684,689],{"type":87,"tag":102,"props":685,"children":686},{},[687],{"type":93,"value":688},"Trusted",{"type":93,"value":690}," — marked explicitly by the user or admin",{"type":87,"tag":119,"props":692,"children":693},{},[694,699],{"type":87,"tag":102,"props":695,"children":696},{},[697],{"type":93,"value":698},"Revoked",{"type":93,"value":700}," — blocked from further sessions",{"type":87,"tag":119,"props":702,"children":703},{},[704,709],{"type":87,"tag":102,"props":705,"children":706},{},[707],{"type":93,"value":708},"New device login",{"type":93,"value":710}," — triggers email alert and plugin hook",{"type":87,"tag":96,"props":712,"children":713},{},[714,716,722],{"type":93,"value":715},"Each device has a full session history. Device management is at ",{"type":87,"tag":135,"props":717,"children":719},{"className":718},[],[720],{"type":93,"value":721},"\u002Fapi\u002Fv1\u002Ftenants\u002F{tenant_id}\u002Fusers\u002F{user_id}\u002Fdevices",{"type":93,"value":142},{"type":87,"tag":88,"props":724,"children":726},{"id":725},"freeze-unfreeze-system",[727],{"type":93,"value":728},"Freeze \u002F Unfreeze System",{"type":87,"tag":96,"props":730,"children":731},{},[732],{"type":93,"value":733},"When a license downgrades or expires, Vaultaris freezes resources to bring the instance within the new limits:",{"type":87,"tag":115,"props":735,"children":736},{},[737,747,757,767,777],{"type":87,"tag":119,"props":738,"children":739},{},[740,745],{"type":87,"tag":102,"props":741,"children":742},{},[743],{"type":93,"value":744},"LIFO freeze",{"type":93,"value":746}," — newest resources frozen first",{"type":87,"tag":119,"props":748,"children":749},{},[750,755],{"type":87,"tag":102,"props":751,"children":752},{},[753],{"type":93,"value":754},"FIFO unfreeze",{"type":93,"value":756}," — oldest resources restored first on upgrade",{"type":87,"tag":119,"props":758,"children":759},{},[760,765],{"type":87,"tag":102,"props":761,"children":762},{},[763],{"type":93,"value":764},"Skips",{"type":93,"value":766}," — system admin users are never frozen",{"type":87,"tag":119,"props":768,"children":769},{},[770,775],{"type":87,"tag":102,"props":771,"children":772},{},[773],{"type":93,"value":774},"Admin freeze",{"type":93,"value":776}," — manual freeze via admin action; never auto-unfrozen on upgrade",{"type":87,"tag":119,"props":778,"children":779},{},[780,785],{"type":87,"tag":102,"props":781,"children":782},{},[783],{"type":93,"value":784},"Scope",{"type":93,"value":786}," — Users, OAuthClients, Applications, IdPs, Groups",{"type":87,"tag":96,"props":788,"children":789},{},[790,792,798],{"type":93,"value":791},"Frozen resources are listed at ",{"type":87,"tag":135,"props":793,"children":795},{"className":794},[],[796],{"type":93,"value":797},"GET \u002Fapi\u002Fv1\u002Ftenants\u002F{tenant_id}\u002Ffrozen",{"type":93,"value":142},{"type":87,"tag":88,"props":800,"children":802},{"id":801},"abac-policies",[803],{"type":93,"value":804},"ABAC Policies",{"type":87,"tag":96,"props":806,"children":807},{},[808,813],{"type":87,"tag":102,"props":809,"children":810},{},[811],{"type":93,"value":812},"Attribute-based access control",{"type":93,"value":814}," policies layer on top of RBAC. Each policy has:",{"type":87,"tag":115,"props":816,"children":817},{},[818,837,848,859,870],{"type":87,"tag":119,"props":819,"children":820},{},[821,827,829,835],{"type":87,"tag":135,"props":822,"children":824},{"className":823},[],[825],{"type":93,"value":826},"resource_type",{"type":93,"value":828}," + ",{"type":87,"tag":135,"props":830,"children":832},{"className":831},[],[833],{"type":93,"value":834},"action",{"type":93,"value":836}," pattern",{"type":87,"tag":119,"props":838,"children":839},{},[840,846],{"type":87,"tag":135,"props":841,"children":843},{"className":842},[],[844],{"type":93,"value":845},"effect",{"type":93,"value":847},": Allow or Deny (deny-wins)",{"type":87,"tag":119,"props":849,"children":850},{},[851,857],{"type":87,"tag":135,"props":852,"children":854},{"className":853},[],[855],{"type":93,"value":856},"priority",{"type":93,"value":858}," ordering",{"type":87,"tag":119,"props":860,"children":861},{},[862,868],{"type":87,"tag":135,"props":863,"children":865},{"className":864},[],[866],{"type":93,"value":867},"conditions",{"type":93,"value":869},": 20+ operators (equals, in, gt, lte, regex, in_cidr, between, …)",{"type":87,"tag":119,"props":871,"children":872},{},[873,879],{"type":87,"tag":135,"props":874,"children":876},{"className":875},[],[877],{"type":93,"value":878},"status",{"type":93,"value":880},": Active, Inactive, or Testing",{"type":87,"tag":96,"props":882,"children":883},{},[884],{"type":93,"value":885},"The ABAC engine evaluates after RBAC. A Deny policy short-circuits all further evaluation.",{"type":87,"tag":88,"props":887,"children":889},{"id":888},"audit-log",[890],{"type":93,"value":891},"Audit Log",{"type":87,"tag":96,"props":893,"children":894},{},[895],{"type":93,"value":896},"Every significant action produces an append-only, tamper-evident audit record with: actor, action enum, target resource, timestamp, IP, user-agent, and JSON change metadata.",{"type":87,"tag":88,"props":898,"children":900},{"id":899},"plugins",[901],{"type":93,"value":56},{"type":87,"tag":96,"props":903,"children":904},{},[905,907,913,915,921,923,929],{"type":93,"value":906},"Plugins extend Vaultaris via native Rust dynamic libraries (",{"type":87,"tag":135,"props":908,"children":910},{"className":909},[],[911],{"type":93,"value":912},".so",{"type":93,"value":914}," \u002F ",{"type":87,"tag":135,"props":916,"children":918},{"className":917},[],[919],{"type":93,"value":920},".dylib",{"type":93,"value":922},"). They are compiled against the same ABI using ",{"type":87,"tag":135,"props":924,"children":926},{"className":925},[],[927],{"type":93,"value":928},"stabby",{"type":93,"value":930}," for stability guarantees.",{"type":87,"tag":96,"props":932,"children":933},{},[934,939,941,947,948,954,955,961,962,968,969,975,976,982,983,989,990,996,997,1003,1004,1010,1011,1017,1018,1024],{"type":87,"tag":102,"props":935,"children":936},{},[937],{"type":93,"value":938},"12 plugin categories:",{"type":93,"value":940}," ",{"type":87,"tag":135,"props":942,"children":944},{"className":943},[],[945],{"type":93,"value":946},"auth_provider",{"type":93,"value":213},{"type":87,"tag":135,"props":949,"children":951},{"className":950},[],[952],{"type":93,"value":953},"identity_provider",{"type":93,"value":213},{"type":87,"tag":135,"props":956,"children":958},{"className":957},[],[959],{"type":93,"value":960},"storage_backend",{"type":93,"value":213},{"type":87,"tag":135,"props":963,"children":965},{"className":964},[],[966],{"type":93,"value":967},"notification_channel",{"type":93,"value":213},{"type":87,"tag":135,"props":970,"children":972},{"className":971},[],[973],{"type":93,"value":974},"encryption_provider",{"type":93,"value":213},{"type":87,"tag":135,"props":977,"children":979},{"className":978},[],[980],{"type":93,"value":981},"policy_engine",{"type":93,"value":213},{"type":87,"tag":135,"props":984,"children":986},{"className":985},[],[987],{"type":93,"value":988},"audit_sink",{"type":93,"value":213},{"type":87,"tag":135,"props":991,"children":993},{"className":992},[],[994],{"type":93,"value":995},"jwt_customizer",{"type":93,"value":213},{"type":87,"tag":135,"props":998,"children":1000},{"className":999},[],[1001],{"type":93,"value":1002},"rate_limiter",{"type":93,"value":213},{"type":87,"tag":135,"props":1005,"children":1007},{"className":1006},[],[1008],{"type":93,"value":1009},"metrics_collector",{"type":93,"value":213},{"type":87,"tag":135,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":93,"value":1016},"input_validator",{"type":93,"value":213},{"type":87,"tag":135,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":93,"value":1023},"lifecycle_hook",{"type":93,"value":142},{"type":87,"tag":96,"props":1026,"children":1027},{},[1028,1030,1035],{"type":93,"value":1029},"Plugins are installed globally and activated per-tenant. Each tenant gets its own config chain and plugin instance — two tenants sharing a plugin never share state. See ",{"type":87,"tag":1031,"props":1032,"children":1033},"a",{"href":53},[1034],{"type":93,"value":56},{"type":93,"value":1036}," for the full SDK reference.",{"type":87,"tag":88,"props":1038,"children":1040},{"id":1039},"token-types",[1041],{"type":93,"value":1042},"Token Types",{"type":87,"tag":1044,"props":1045,"children":1046},"table",{},[1047,1071],{"type":87,"tag":1048,"props":1049,"children":1050},"thead",{},[1051],{"type":87,"tag":1052,"props":1053,"children":1054},"tr",{},[1055,1061,1066],{"type":87,"tag":1056,"props":1057,"children":1058},"th",{},[1059],{"type":93,"value":1060},"Token",{"type":87,"tag":1056,"props":1062,"children":1063},{},[1064],{"type":93,"value":1065},"Default lifetime",{"type":87,"tag":1056,"props":1067,"children":1068},{},[1069],{"type":93,"value":1070},"Purpose",{"type":87,"tag":1072,"props":1073,"children":1074},"tbody",{},[1075,1094,1112,1129,1147,1165,1183],{"type":87,"tag":1052,"props":1076,"children":1077},{},[1078,1084,1089],{"type":87,"tag":1079,"props":1080,"children":1081},"td",{},[1082],{"type":93,"value":1083},"Access token",{"type":87,"tag":1079,"props":1085,"children":1086},{},[1087],{"type":93,"value":1088},"1 hour",{"type":87,"tag":1079,"props":1090,"children":1091},{},[1092],{"type":93,"value":1093},"Bearer credential for API calls",{"type":87,"tag":1052,"props":1095,"children":1096},{},[1097,1102,1107],{"type":87,"tag":1079,"props":1098,"children":1099},{},[1100],{"type":93,"value":1101},"Refresh token",{"type":87,"tag":1079,"props":1103,"children":1104},{},[1105],{"type":93,"value":1106},"24 hours",{"type":87,"tag":1079,"props":1108,"children":1109},{},[1110],{"type":93,"value":1111},"Exchange for new access token",{"type":87,"tag":1052,"props":1113,"children":1114},{},[1115,1120,1124],{"type":87,"tag":1079,"props":1116,"children":1117},{},[1118],{"type":93,"value":1119},"ID token",{"type":87,"tag":1079,"props":1121,"children":1122},{},[1123],{"type":93,"value":1088},{"type":87,"tag":1079,"props":1125,"children":1126},{},[1127],{"type":93,"value":1128},"OIDC identity assertion",{"type":87,"tag":1052,"props":1130,"children":1131},{},[1132,1137,1142],{"type":87,"tag":1079,"props":1133,"children":1134},{},[1135],{"type":93,"value":1136},"Global session token",{"type":87,"tag":1079,"props":1138,"children":1139},{},[1140],{"type":93,"value":1141},"168 hours (1 week)",{"type":87,"tag":1079,"props":1143,"children":1144},{},[1145],{"type":93,"value":1146},"Cross-domain SSO",{"type":87,"tag":1052,"props":1148,"children":1149},{},[1150,1155,1160],{"type":87,"tag":1079,"props":1151,"children":1152},{},[1153],{"type":93,"value":1154},"Authorization code",{"type":87,"tag":1079,"props":1156,"children":1157},{},[1158],{"type":93,"value":1159},"5 minutes",{"type":87,"tag":1079,"props":1161,"children":1162},{},[1163],{"type":93,"value":1164},"Intermediate code in auth code flow",{"type":87,"tag":1052,"props":1166,"children":1167},{},[1168,1173,1178],{"type":87,"tag":1079,"props":1169,"children":1170},{},[1171],{"type":93,"value":1172},"MFA token",{"type":87,"tag":1079,"props":1174,"children":1175},{},[1176],{"type":93,"value":1177},"10 minutes",{"type":87,"tag":1079,"props":1179,"children":1180},{},[1181],{"type":93,"value":1182},"Intermediate credential during MFA challenge",{"type":87,"tag":1052,"props":1184,"children":1185},{},[1186,1191,1196],{"type":87,"tag":1079,"props":1187,"children":1188},{},[1189],{"type":93,"value":1190},"DPoP-bound token",{"type":87,"tag":1079,"props":1192,"children":1193},{},[1194],{"type":93,"value":1195},"same as bearer",{"type":87,"tag":1079,"props":1197,"children":1198},{},[1199],{"type":93,"value":1200},"Access\u002Frefresh token bound to client key pair",{"type":87,"tag":96,"props":1202,"children":1203},{},[1204],{"type":93,"value":1205},"Lifetimes are configurable per tenant and per application.",{"title":82,"searchDepth":32,"depth":32,"links":1207},[1208,1212,1213,1214,1215,1216,1217,1218,1219,1223,1224,1225,1226,1227,1228],{"id":90,"depth":42,"text":94,"children":1209},[1210,1211],{"id":163,"depth":32,"text":166},{"id":189,"depth":32,"text":192},{"id":238,"depth":42,"text":241},{"id":314,"depth":42,"text":317},{"id":384,"depth":42,"text":387},{"id":424,"depth":42,"text":427},{"id":478,"depth":42,"text":481},{"id":503,"depth":42,"text":506},{"id":590,"depth":42,"text":593},{"id":618,"depth":42,"text":621,"children":1220},[1221,1222],{"id":624,"depth":32,"text":627},{"id":635,"depth":32,"text":638},{"id":654,"depth":42,"text":657},{"id":725,"depth":42,"text":728},{"id":801,"depth":42,"text":804},{"id":888,"depth":42,"text":891},{"id":899,"depth":42,"text":56},{"id":1039,"depth":42,"text":1042},"markdown","content:docs:concepts.md","content","docs\u002Fconcepts.md","docs\u002Fconcepts","md",{"_path":16,"_dir":80,"_draft":81,"_partial":81,"_locale":82,"title":17,"description":18,"order":8,"category":17,"body":1236,"_type":1229,"_id":1230,"_source":1231,"_file":1232,"_stem":1233,"_extension":1234},{"type":84,"children":1237,"toc":2120},[1238,1242,1251,1255,1266,1276,1289,1293,1307,1311,1345,1349,1358,1406,1410,1419,1458,1462,1466,1493,1497,1506,1536,1540,1555,1559,1568,1625,1629,1643,1647,1651,1655,1659,1663,1673,1677,1692,1719,1729,1733,1737,1780,1790,1794,1802,1856,1860,1864,1868,1872,1894,1974,1983,1987,2116],{"type":87,"tag":88,"props":1239,"children":1240},{"id":90},[1241],{"type":93,"value":94},{"type":87,"tag":96,"props":1243,"children":1244},{},[1245,1246,1250],{"type":93,"value":100},{"type":87,"tag":102,"props":1247,"children":1248},{},[1249],{"type":93,"value":106},{"type":93,"value":108},{"type":87,"tag":96,"props":1252,"children":1253},{},[1254],{"type":93,"value":113},{"type":87,"tag":115,"props":1256,"children":1257},{},[1258,1262],{"type":87,"tag":119,"props":1259,"children":1260},{},[1261],{"type":93,"value":123},{"type":87,"tag":119,"props":1263,"children":1264},{},[1265],{"type":93,"value":128},{"type":87,"tag":96,"props":1267,"children":1268},{},[1269,1270,1275],{"type":93,"value":133},{"type":87,"tag":135,"props":1271,"children":1273},{"className":1272},[],[1274],{"type":93,"value":140},{"type":93,"value":142},{"type":87,"tag":144,"props":1277,"children":1278},{},[1279],{"type":87,"tag":96,"props":1280,"children":1281},{},[1282,1283,1288],{"type":93,"value":151},{"type":87,"tag":135,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":93,"value":157},{"type":93,"value":159},{"type":87,"tag":161,"props":1290,"children":1291},{"id":163},[1292],{"type":93,"value":166},{"type":87,"tag":96,"props":1294,"children":1295},{},[1296,1297,1301,1302,1306],{"type":93,"value":171},{"type":87,"tag":102,"props":1298,"children":1299},{},[1300],{"type":93,"value":176},{"type":93,"value":178},{"type":87,"tag":180,"props":1303,"children":1304},{},[1305],{"type":93,"value":184},{"type":93,"value":186},{"type":87,"tag":161,"props":1308,"children":1309},{"id":189},[1310],{"type":93,"value":192},{"type":87,"tag":96,"props":1312,"children":1313},{},[1314,1315,1320,1321,1326,1327,1332,1333,1338,1339,1344],{"type":93,"value":197},{"type":87,"tag":135,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":93,"value":203},{"type":93,"value":205},{"type":87,"tag":135,"props":1322,"children":1324},{"className":1323},[],[1325],{"type":93,"value":211},{"type":93,"value":213},{"type":87,"tag":135,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":93,"value":219},{"type":93,"value":213},{"type":87,"tag":135,"props":1334,"children":1336},{"className":1335},[],[1337],{"type":93,"value":226},{"type":93,"value":213},{"type":87,"tag":135,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":93,"value":233},{"type":93,"value":235},{"type":87,"tag":88,"props":1346,"children":1347},{"id":238},[1348],{"type":93,"value":241},{"type":87,"tag":96,"props":1350,"children":1351},{},[1352,1353,1357],{"type":93,"value":100},{"type":87,"tag":102,"props":1354,"children":1355},{},[1356],{"type":93,"value":250},{"type":93,"value":252},{"type":87,"tag":115,"props":1359,"children":1360},{},[1361,1365,1369,1373,1377,1381,1396],{"type":87,"tag":119,"props":1362,"children":1363},{},[1364],{"type":93,"value":260},{"type":87,"tag":119,"props":1366,"children":1367},{},[1368],{"type":93,"value":265},{"type":87,"tag":119,"props":1370,"children":1371},{},[1372],{"type":93,"value":270},{"type":87,"tag":119,"props":1374,"children":1375},{},[1376],{"type":93,"value":275},{"type":87,"tag":119,"props":1378,"children":1379},{},[1380],{"type":93,"value":280},{"type":87,"tag":119,"props":1382,"children":1383},{},[1384,1385,1390,1391],{"type":93,"value":285},{"type":87,"tag":135,"props":1386,"children":1388},{"className":1387},[],[1389],{"type":93,"value":291},{"type":93,"value":213},{"type":87,"tag":135,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":93,"value":298},{"type":87,"tag":119,"props":1397,"children":1398},{},[1399,1400,1405],{"type":93,"value":303},{"type":87,"tag":135,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":93,"value":309},{"type":93,"value":311},{"type":87,"tag":88,"props":1407,"children":1408},{"id":314},[1409],{"type":93,"value":317},{"type":87,"tag":96,"props":1411,"children":1412},{},[1413,1414,1418],{"type":93,"value":100},{"type":87,"tag":102,"props":1415,"children":1416},{},[1417],{"type":93,"value":326},{"type":93,"value":328},{"type":87,"tag":115,"props":1420,"children":1421},{},[1422,1430,1444],{"type":87,"tag":119,"props":1423,"children":1424},{},[1425,1429],{"type":87,"tag":102,"props":1426,"children":1427},{},[1428],{"type":93,"value":339},{"type":93,"value":341},{"type":87,"tag":119,"props":1431,"children":1432},{},[1433,1437,1438,1443],{"type":87,"tag":102,"props":1434,"children":1435},{},[1436],{"type":93,"value":349},{"type":93,"value":351},{"type":87,"tag":135,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":93,"value":357},{"type":93,"value":359},{"type":87,"tag":119,"props":1445,"children":1446},{},[1447,1451,1452,1457],{"type":87,"tag":102,"props":1448,"children":1449},{},[1450],{"type":93,"value":367},{"type":93,"value":369},{"type":87,"tag":135,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":93,"value":375},{"type":93,"value":359},{"type":87,"tag":96,"props":1459,"children":1460},{},[1461],{"type":93,"value":381},{"type":87,"tag":88,"props":1463,"children":1464},{"id":384},[1465],{"type":93,"value":387},{"type":87,"tag":96,"props":1467,"children":1468},{},[1469,1470,1474,1475,1480,1481,1486,1487,1492],{"type":93,"value":100},{"type":87,"tag":102,"props":1471,"children":1472},{},[1473],{"type":93,"value":396},{"type":93,"value":398},{"type":87,"tag":135,"props":1476,"children":1478},{"className":1477},[],[1479],{"type":93,"value":404},{"type":93,"value":406},{"type":87,"tag":135,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":93,"value":412},{"type":93,"value":213},{"type":87,"tag":135,"props":1488,"children":1490},{"className":1489},[],[1491],{"type":93,"value":419},{"type":93,"value":421},{"type":87,"tag":88,"props":1494,"children":1495},{"id":424},[1496],{"type":93,"value":427},{"type":87,"tag":96,"props":1498,"children":1499},{},[1500,1501,1505],{"type":93,"value":100},{"type":87,"tag":102,"props":1502,"children":1503},{},[1504],{"type":93,"value":436},{"type":93,"value":438},{"type":87,"tag":115,"props":1507,"children":1508},{},[1509,1519,1523,1527],{"type":87,"tag":119,"props":1510,"children":1511},{},[1512,1513,1518],{"type":93,"value":446},{"type":87,"tag":135,"props":1514,"children":1516},{"className":1515},[],[1517],{"type":93,"value":452},{"type":93,"value":454},{"type":87,"tag":119,"props":1520,"children":1521},{},[1522],{"type":93,"value":459},{"type":87,"tag":119,"props":1524,"children":1525},{},[1526],{"type":93,"value":464},{"type":87,"tag":119,"props":1528,"children":1529},{},[1530,1535],{"type":87,"tag":135,"props":1531,"children":1533},{"className":1532},[],[1534],{"type":93,"value":473},{"type":93,"value":475},{"type":87,"tag":88,"props":1537,"children":1538},{"id":478},[1539],{"type":93,"value":481},{"type":87,"tag":96,"props":1541,"children":1542},{},[1543,1544,1548,1549,1554],{"type":93,"value":486},{"type":87,"tag":102,"props":1545,"children":1546},{},[1547],{"type":93,"value":491},{"type":93,"value":493},{"type":87,"tag":135,"props":1550,"children":1552},{"className":1551},[],[1553],{"type":93,"value":478},{"type":93,"value":500},{"type":87,"tag":88,"props":1556,"children":1557},{"id":503},[1558],{"type":93,"value":506},{"type":87,"tag":96,"props":1560,"children":1561},{},[1562,1563,1567],{"type":93,"value":486},{"type":87,"tag":102,"props":1564,"children":1565},{},[1566],{"type":93,"value":515},{"type":93,"value":517},{"type":87,"tag":115,"props":1569,"children":1570},{},[1571,1580,1589,1609,1613,1617,1621],{"type":87,"tag":119,"props":1572,"children":1573},{},[1574,1579],{"type":87,"tag":135,"props":1575,"children":1577},{"className":1576},[],[1578],{"type":93,"value":529},{"type":93,"value":531},{"type":87,"tag":119,"props":1581,"children":1582},{},[1583,1588],{"type":87,"tag":135,"props":1584,"children":1586},{"className":1585},[],[1587],{"type":93,"value":540},{"type":93,"value":542},{"type":87,"tag":119,"props":1590,"children":1591},{},[1592,1597,1598,1603,1604],{"type":87,"tag":135,"props":1593,"children":1595},{"className":1594},[],[1596],{"type":93,"value":551},{"type":93,"value":553},{"type":87,"tag":135,"props":1599,"children":1601},{"className":1600},[],[1602],{"type":93,"value":559},{"type":93,"value":561},{"type":87,"tag":135,"props":1605,"children":1607},{"className":1606},[],[1608],{"type":93,"value":567},{"type":87,"tag":119,"props":1610,"children":1611},{},[1612],{"type":93,"value":572},{"type":87,"tag":119,"props":1614,"children":1615},{},[1616],{"type":93,"value":577},{"type":87,"tag":119,"props":1618,"children":1619},{},[1620],{"type":93,"value":582},{"type":87,"tag":119,"props":1622,"children":1623},{},[1624],{"type":93,"value":587},{"type":87,"tag":88,"props":1626,"children":1627},{"id":590},[1628],{"type":93,"value":593},{"type":87,"tag":96,"props":1630,"children":1631},{},[1632,1636,1637,1642],{"type":87,"tag":102,"props":1633,"children":1634},{},[1635],{"type":93,"value":601},{"type":93,"value":603},{"type":87,"tag":135,"props":1638,"children":1640},{"className":1639},[],[1641],{"type":93,"value":601},{"type":93,"value":610},{"type":87,"tag":96,"props":1644,"children":1645},{},[1646],{"type":93,"value":615},{"type":87,"tag":88,"props":1648,"children":1649},{"id":618},[1650],{"type":93,"value":621},{"type":87,"tag":161,"props":1652,"children":1653},{"id":624},[1654],{"type":93,"value":627},{"type":87,"tag":96,"props":1656,"children":1657},{},[1658],{"type":93,"value":632},{"type":87,"tag":161,"props":1660,"children":1661},{"id":635},[1662],{"type":93,"value":638},{"type":87,"tag":96,"props":1664,"children":1665},{},[1666,1667,1672],{"type":93,"value":643},{"type":87,"tag":135,"props":1668,"children":1670},{"className":1669},[],[1671],{"type":93,"value":649},{"type":93,"value":651},{"type":87,"tag":88,"props":1674,"children":1675},{"id":654},[1676],{"type":93,"value":657},{"type":87,"tag":96,"props":1678,"children":1679},{},[1680,1681,1685,1686,1691],{"type":93,"value":662},{"type":87,"tag":102,"props":1682,"children":1683},{},[1684],{"type":93,"value":667},{"type":93,"value":669},{"type":87,"tag":135,"props":1687,"children":1689},{"className":1688},[],[1690],{"type":93,"value":675},{"type":93,"value":677},{"type":87,"tag":115,"props":1693,"children":1694},{},[1695,1703,1711],{"type":87,"tag":119,"props":1696,"children":1697},{},[1698,1702],{"type":87,"tag":102,"props":1699,"children":1700},{},[1701],{"type":93,"value":688},{"type":93,"value":690},{"type":87,"tag":119,"props":1704,"children":1705},{},[1706,1710],{"type":87,"tag":102,"props":1707,"children":1708},{},[1709],{"type":93,"value":698},{"type":93,"value":700},{"type":87,"tag":119,"props":1712,"children":1713},{},[1714,1718],{"type":87,"tag":102,"props":1715,"children":1716},{},[1717],{"type":93,"value":708},{"type":93,"value":710},{"type":87,"tag":96,"props":1720,"children":1721},{},[1722,1723,1728],{"type":93,"value":715},{"type":87,"tag":135,"props":1724,"children":1726},{"className":1725},[],[1727],{"type":93,"value":721},{"type":93,"value":142},{"type":87,"tag":88,"props":1730,"children":1731},{"id":725},[1732],{"type":93,"value":728},{"type":87,"tag":96,"props":1734,"children":1735},{},[1736],{"type":93,"value":733},{"type":87,"tag":115,"props":1738,"children":1739},{},[1740,1748,1756,1764,1772],{"type":87,"tag":119,"props":1741,"children":1742},{},[1743,1747],{"type":87,"tag":102,"props":1744,"children":1745},{},[1746],{"type":93,"value":744},{"type":93,"value":746},{"type":87,"tag":119,"props":1749,"children":1750},{},[1751,1755],{"type":87,"tag":102,"props":1752,"children":1753},{},[1754],{"type":93,"value":754},{"type":93,"value":756},{"type":87,"tag":119,"props":1757,"children":1758},{},[1759,1763],{"type":87,"tag":102,"props":1760,"children":1761},{},[1762],{"type":93,"value":764},{"type":93,"value":766},{"type":87,"tag":119,"props":1765,"children":1766},{},[1767,1771],{"type":87,"tag":102,"props":1768,"children":1769},{},[1770],{"type":93,"value":774},{"type":93,"value":776},{"type":87,"tag":119,"props":1773,"children":1774},{},[1775,1779],{"type":87,"tag":102,"props":1776,"children":1777},{},[1778],{"type":93,"value":784},{"type":93,"value":786},{"type":87,"tag":96,"props":1781,"children":1782},{},[1783,1784,1789],{"type":93,"value":791},{"type":87,"tag":135,"props":1785,"children":1787},{"className":1786},[],[1788],{"type":93,"value":797},{"type":93,"value":142},{"type":87,"tag":88,"props":1791,"children":1792},{"id":801},[1793],{"type":93,"value":804},{"type":87,"tag":96,"props":1795,"children":1796},{},[1797,1801],{"type":87,"tag":102,"props":1798,"children":1799},{},[1800],{"type":93,"value":812},{"type":93,"value":814},{"type":87,"tag":115,"props":1803,"children":1804},{},[1805,1820,1829,1838,1847],{"type":87,"tag":119,"props":1806,"children":1807},{},[1808,1813,1814,1819],{"type":87,"tag":135,"props":1809,"children":1811},{"className":1810},[],[1812],{"type":93,"value":826},{"type":93,"value":828},{"type":87,"tag":135,"props":1815,"children":1817},{"className":1816},[],[1818],{"type":93,"value":834},{"type":93,"value":836},{"type":87,"tag":119,"props":1821,"children":1822},{},[1823,1828],{"type":87,"tag":135,"props":1824,"children":1826},{"className":1825},[],[1827],{"type":93,"value":845},{"type":93,"value":847},{"type":87,"tag":119,"props":1830,"children":1831},{},[1832,1837],{"type":87,"tag":135,"props":1833,"children":1835},{"className":1834},[],[1836],{"type":93,"value":856},{"type":93,"value":858},{"type":87,"tag":119,"props":1839,"children":1840},{},[1841,1846],{"type":87,"tag":135,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":93,"value":867},{"type":93,"value":869},{"type":87,"tag":119,"props":1848,"children":1849},{},[1850,1855],{"type":87,"tag":135,"props":1851,"children":1853},{"className":1852},[],[1854],{"type":93,"value":878},{"type":93,"value":880},{"type":87,"tag":96,"props":1857,"children":1858},{},[1859],{"type":93,"value":885},{"type":87,"tag":88,"props":1861,"children":1862},{"id":888},[1863],{"type":93,"value":891},{"type":87,"tag":96,"props":1865,"children":1866},{},[1867],{"type":93,"value":896},{"type":87,"tag":88,"props":1869,"children":1870},{"id":899},[1871],{"type":93,"value":56},{"type":87,"tag":96,"props":1873,"children":1874},{},[1875,1876,1881,1882,1887,1888,1893],{"type":93,"value":906},{"type":87,"tag":135,"props":1877,"children":1879},{"className":1878},[],[1880],{"type":93,"value":912},{"type":93,"value":914},{"type":87,"tag":135,"props":1883,"children":1885},{"className":1884},[],[1886],{"type":93,"value":920},{"type":93,"value":922},{"type":87,"tag":135,"props":1889,"children":1891},{"className":1890},[],[1892],{"type":93,"value":928},{"type":93,"value":930},{"type":87,"tag":96,"props":1895,"children":1896},{},[1897,1901,1902,1907,1908,1913,1914,1919,1920,1925,1926,1931,1932,1937,1938,1943,1944,1949,1950,1955,1956,1961,1962,1967,1968,1973],{"type":87,"tag":102,"props":1898,"children":1899},{},[1900],{"type":93,"value":938},{"type":93,"value":940},{"type":87,"tag":135,"props":1903,"children":1905},{"className":1904},[],[1906],{"type":93,"value":946},{"type":93,"value":213},{"type":87,"tag":135,"props":1909,"children":1911},{"className":1910},[],[1912],{"type":93,"value":953},{"type":93,"value":213},{"type":87,"tag":135,"props":1915,"children":1917},{"className":1916},[],[1918],{"type":93,"value":960},{"type":93,"value":213},{"type":87,"tag":135,"props":1921,"children":1923},{"className":1922},[],[1924],{"type":93,"value":967},{"type":93,"value":213},{"type":87,"tag":135,"props":1927,"children":1929},{"className":1928},[],[1930],{"type":93,"value":974},{"type":93,"value":213},{"type":87,"tag":135,"props":1933,"children":1935},{"className":1934},[],[1936],{"type":93,"value":981},{"type":93,"value":213},{"type":87,"tag":135,"props":1939,"children":1941},{"className":1940},[],[1942],{"type":93,"value":988},{"type":93,"value":213},{"type":87,"tag":135,"props":1945,"children":1947},{"className":1946},[],[1948],{"type":93,"value":995},{"type":93,"value":213},{"type":87,"tag":135,"props":1951,"children":1953},{"className":1952},[],[1954],{"type":93,"value":1002},{"type":93,"value":213},{"type":87,"tag":135,"props":1957,"children":1959},{"className":1958},[],[1960],{"type":93,"value":1009},{"type":93,"value":213},{"type":87,"tag":135,"props":1963,"children":1965},{"className":1964},[],[1966],{"type":93,"value":1016},{"type":93,"value":213},{"type":87,"tag":135,"props":1969,"children":1971},{"className":1970},[],[1972],{"type":93,"value":1023},{"type":93,"value":142},{"type":87,"tag":96,"props":1975,"children":1976},{},[1977,1978,1982],{"type":93,"value":1029},{"type":87,"tag":1031,"props":1979,"children":1980},{"href":53},[1981],{"type":93,"value":56},{"type":93,"value":1036},{"type":87,"tag":88,"props":1984,"children":1985},{"id":1039},[1986],{"type":93,"value":1042},{"type":87,"tag":1044,"props":1988,"children":1989},{},[1990,2008],{"type":87,"tag":1048,"props":1991,"children":1992},{},[1993],{"type":87,"tag":1052,"props":1994,"children":1995},{},[1996,2000,2004],{"type":87,"tag":1056,"props":1997,"children":1998},{},[1999],{"type":93,"value":1060},{"type":87,"tag":1056,"props":2001,"children":2002},{},[2003],{"type":93,"value":1065},{"type":87,"tag":1056,"props":2005,"children":2006},{},[2007],{"type":93,"value":1070},{"type":87,"tag":1072,"props":2009,"children":2010},{},[2011,2026,2041,2056,2071,2086,2101],{"type":87,"tag":1052,"props":2012,"children":2013},{},[2014,2018,2022],{"type":87,"tag":1079,"props":2015,"children":2016},{},[2017],{"type":93,"value":1083},{"type":87,"tag":1079,"props":2019,"children":2020},{},[2021],{"type":93,"value":1088},{"type":87,"tag":1079,"props":2023,"children":2024},{},[2025],{"type":93,"value":1093},{"type":87,"tag":1052,"props":2027,"children":2028},{},[2029,2033,2037],{"type":87,"tag":1079,"props":2030,"children":2031},{},[2032],{"type":93,"value":1101},{"type":87,"tag":1079,"props":2034,"children":2035},{},[2036],{"type":93,"value":1106},{"type":87,"tag":1079,"props":2038,"children":2039},{},[2040],{"type":93,"value":1111},{"type":87,"tag":1052,"props":2042,"children":2043},{},[2044,2048,2052],{"type":87,"tag":1079,"props":2045,"children":2046},{},[2047],{"type":93,"value":1119},{"type":87,"tag":1079,"props":2049,"children":2050},{},[2051],{"type":93,"value":1088},{"type":87,"tag":1079,"props":2053,"children":2054},{},[2055],{"type":93,"value":1128},{"type":87,"tag":1052,"props":2057,"children":2058},{},[2059,2063,2067],{"type":87,"tag":1079,"props":2060,"children":2061},{},[2062],{"type":93,"value":1136},{"type":87,"tag":1079,"props":2064,"children":2065},{},[2066],{"type":93,"value":1141},{"type":87,"tag":1079,"props":2068,"children":2069},{},[2070],{"type":93,"value":1146},{"type":87,"tag":1052,"props":2072,"children":2073},{},[2074,2078,2082],{"type":87,"tag":1079,"props":2075,"children":2076},{},[2077],{"type":93,"value":1154},{"type":87,"tag":1079,"props":2079,"children":2080},{},[2081],{"type":93,"value":1159},{"type":87,"tag":1079,"props":2083,"children":2084},{},[2085],{"type":93,"value":1164},{"type":87,"tag":1052,"props":2087,"children":2088},{},[2089,2093,2097],{"type":87,"tag":1079,"props":2090,"children":2091},{},[2092],{"type":93,"value":1172},{"type":87,"tag":1079,"props":2094,"children":2095},{},[2096],{"type":93,"value":1177},{"type":87,"tag":1079,"props":2098,"children":2099},{},[2100],{"type":93,"value":1182},{"type":87,"tag":1052,"props":2102,"children":2103},{},[2104,2108,2112],{"type":87,"tag":1079,"props":2105,"children":2106},{},[2107],{"type":93,"value":1190},{"type":87,"tag":1079,"props":2109,"children":2110},{},[2111],{"type":93,"value":1195},{"type":87,"tag":1079,"props":2113,"children":2114},{},[2115],{"type":93,"value":1200},{"type":87,"tag":96,"props":2117,"children":2118},{},[2119],{"type":93,"value":1205},{"title":82,"searchDepth":32,"depth":32,"links":2121},[2122,2126,2127,2128,2129,2130,2131,2132,2133,2137,2138,2139,2140,2141,2142],{"id":90,"depth":42,"text":94,"children":2123},[2124,2125],{"id":163,"depth":32,"text":166},{"id":189,"depth":32,"text":192},{"id":238,"depth":42,"text":241},{"id":314,"depth":42,"text":317},{"id":384,"depth":42,"text":387},{"id":424,"depth":42,"text":427},{"id":478,"depth":42,"text":481},{"id":503,"depth":42,"text":506},{"id":590,"depth":42,"text":593},{"id":618,"depth":42,"text":621,"children":2134},[2135,2136],{"id":624,"depth":32,"text":627},{"id":635,"depth":32,"text":638},{"id":654,"depth":42,"text":657},{"id":725,"depth":42,"text":728},{"id":801,"depth":42,"text":804},{"id":888,"depth":42,"text":891},{"id":899,"depth":42,"text":56},{"id":1039,"depth":42,"text":1042},1780603561415]