@tinycloud/sdk-core 3.0.0-beta.1 → 3.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/policy/index.ts","../../src/policy/errors.ts","../../src/policy/jcs.ts","../../src/policy/capability.ts","../../src/policy/signed-object.ts","../../../../node_modules/multiformats/src/bases/base10.ts","../../../../node_modules/multiformats/src/bytes.ts","../../../../node_modules/multiformats/src/vendor/base-x.js","../../../../node_modules/multiformats/src/bases/base.ts","../../../../node_modules/multiformats/src/bases/base16.ts","../../../../node_modules/multiformats/src/bases/base2.ts","../../../../node_modules/multiformats/src/bases/base256emoji.ts","../../../../node_modules/multiformats/src/bases/base32.ts","../../../../node_modules/multiformats/src/bases/base36.ts","../../../../node_modules/multiformats/src/bases/base58.ts","../../../../node_modules/multiformats/src/bases/base64.ts","../../../../node_modules/multiformats/src/bases/base8.ts","../../../../node_modules/multiformats/src/bases/identity.ts","../../../../node_modules/multiformats/src/codecs/json.ts","../../../../node_modules/multiformats/src/hashes/identity.ts","../../../../node_modules/multiformats/src/vendor/varint.js","../../../../node_modules/multiformats/src/varint.ts","../../../../node_modules/multiformats/src/hashes/digest.ts","../../../../node_modules/multiformats/src/hashes/sha2-browser.ts","../../../../node_modules/multiformats/src/hashes/hasher.ts","../../../../node_modules/multiformats/src/cid.ts","../../../../node_modules/multiformats/src/basics.ts","../../src/identity.ts","../../src/policy/authoring.ts","../../src/policy/unified.ts","../../src/policy/credential-admission.ts","../../src/credentials/digest.ts","../../src/credentials/errors.ts","../../src/credentials/requirement.ts"],"sourcesContent":["export {\n SignatureMaterialError,\n SignatureVerificationError,\n SignedObjectCanonicalizationError,\n SignedObjectDigestError,\n SignedObjectIdError,\n SignedObjectProfileError,\n SignedObjectSchemaError,\n SigningKeyBindingError,\n UnsupportedSignatureSuiteError,\n toSignedObjectError,\n type SignedObjectErrorCode,\n} from \"./errors\";\n\nexport {\n jcsCanonicalize,\n normalizeJson,\n serialize as serializeJcsJson,\n type JsonValue,\n} from \"./jcs\";\n\nexport {\n PolicyCapabilityError,\n canonicalizePolicyCapability,\n normalizePolicyCapability,\n policyCapabilityContains,\n policyCapabilityDigestHex,\n type PolicyCapability,\n type PolicyCapabilityErrorCode,\n} from \"./capability\";\n\nexport {\n POLICY_VERSION_V0,\n OWNER_NODE_ENDPOINT_SCHEMA,\n PolicyAuthoringError,\n TRANSCRIPT_SHARE_BOOTSTRAP_SCHEMA,\n W3C_VC_CREDENTIAL_VERIFIER,\n composeTranscriptShareBootstrap,\n createAndSignRequesterPolicyEngineRecord,\n createAndSignTranscriptSharePolicy,\n createUnsignedPolicyEngineRecord,\n verifyPolicyEngineRecordForRequester,\n type ComposeTranscriptShareBootstrapInput,\n type CreatePolicyEngineRecordInput,\n type CreateTranscriptSharePolicyInput,\n type PolicyAuthoringErrorCode,\n type TranscriptShareBootstrap,\n type VerifyPolicyEngineRecordOptions,\n} from \"./authoring\";\n\nexport {\n ED25519_JCS_SIGNATURE_SUITE,\n EIP191_JCS_SIGNATURE_SUITE,\n POLICY_ENGINE_RECORD_SCHEMA,\n POLICY_SCHEMA,\n POLICY_STATUS_SCHEMA,\n canonicalizeSignedObjectUnsigned,\n createAndSignPolicy,\n createAndSignPolicyEngineRecord,\n createAndSignPolicyStatus,\n createAndSignSignedObject,\n deriveSignedObjectMaterial,\n signedObjectIdFor,\n validatePolicyEngineRecordSigned,\n validatePolicyEngineRecordSignedShape,\n validatePolicyEngineRecordUnsigned,\n validatePolicySigned,\n validatePolicySignedShape,\n validatePolicyStatusSigned,\n validatePolicyStatusSignedShape,\n validatePolicyStatusUnsigned,\n validatePolicyUnsigned,\n verifyPolicy,\n verifyPolicyEngineRecord,\n verifyPolicyStatus,\n verifySignedObject,\n type JsonObject,\n type Policy,\n type PolicyEngineRecord,\n type PolicyStatus,\n type SignatureSuite,\n type SignedObjectKind,\n type SignedObjectMaterial,\n type SignedObjectSignature,\n type SignedObjectSigner,\n type SignedObjectVerificationResult,\n type SignedPolicyObject,\n type UnsignedPolicy,\n type UnsignedPolicyEngineRecord,\n type UnsignedPolicyObject,\n type UnsignedPolicyStatus,\n} from \"./signed-object\";\n\nexport {\n ATTESTED_ENFORCER_BINDING_V2_SCHEMA,\n CONTENT_SOURCE_V1_DOMAIN,\n LAST_V2_CREATE_AT,\n LAST_V2_READ_AT,\n MAX_LEGACY_ENVELOPE_EXPIRES_AT,\n NATIVE_PROJECTION_V1_DOMAIN,\n POLICY_CAPABILITY_V1_DOMAIN,\n POLICY_CAPABILITY_V1_SCHEMA,\n POLICY_ENFORCEMENT_DELEGATION_V2_SCHEMA,\n POLICY_SESSION_UCAN_V1_PROFILE,\n POLICY_V1_DOMAIN,\n POLICY_V1_SCHEMA,\n ROOT_REVOCATION_V1_SCHEMA,\n ROOT_REVOCATION_V1_DOMAIN,\n ROOT_STATUS_RENEWAL_V1_DOMAIN,\n ROOT_STATUS_V1_DOMAIN,\n ROOT_STATUS_CHECKPOINT_V1_SCHEMA,\n canonicalizeUnifiedPolicyCapability,\n compactAttenuationContains,\n createCompactPolicyInvocation,\n createCompactPolicyDescendant,\n contentSourceDigestHex,\n normalizeUnifiedPolicyCapability,\n mintPolicySessionV3,\n getPolicyRootStatusV3,\n verifyPolicyRootStatusCheckpointV3,\n verifyPolicyRootRevocationV3,\n parseCompactUcanAuthorization,\n parsePolicySessionUcan,\n policyCidFromCanonicalBytes,\n policyDigestHex,\n policyIdForDigestHex,\n requestPolicyChallengeV3,\n renewPolicyRootStatusV3,\n revokePolicyRootV3,\n projectUnifiedPolicyCapabilities,\n projectUnifiedPolicyCapability,\n signCompactUcanAuthorization,\n signCompactUcanRootAuthorization,\n unifiedNativeProjectionHashHex,\n unifiedPolicyCapabilityContains,\n unifiedPolicyCapabilityDigestHex,\n unifiedPolicyCapabilityFromNative,\n type CompactUcanAuthorizationV1,\n type CompactPolicyInvocationInput,\n type PolicySessionUcanV1,\n type PolicyChallengeV3,\n type PolicyRootStatusV3,\n type SignCompactUcanAuthorizationInput,\n type SignCompactUcanRootAuthorizationInput,\n type UnifiedContentSource,\n type UnifiedEncryptionCapability,\n type UnifiedKvCapability,\n type UnifiedNativeCapability,\n type UnifiedPolicyCapability,\n type UnifiedPolicyV1,\n type UnifiedResourceSelector,\n} from \"./unified\";\nexport {\n POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE,\n POLICY_PRESENTATION_V3_DOMAIN,\n POLICY_PRESENTATION_V3_SCHEMA,\n POLICY_V2_DOMAIN,\n POLICY_V2_SCHEMA,\n admitPolicyCredentialV3,\n buildPolicyCredentialPresentationV3,\n policyV2DigestHex,\n validatePolicyCredentialRequirementV1,\n validateUnifiedPolicyV2,\n type AdmitPolicyCredentialV3Input,\n type BuildPolicyCredentialPresentationV3Input,\n type PolicyCredentialAdmissionV3,\n type PolicyCredentialPresentationV3,\n type PolicyCredentialRequirementV1,\n type UnsignedUnifiedPolicyV2,\n type UnifiedPolicyV2,\n} from \"./credential-admission\";\n","export type SignedObjectErrorCode =\n | \"schema-invalid\"\n | \"canonicalization-mismatch\"\n | \"digest-mismatch\"\n | \"id-mismatch\"\n | \"signing-key-binding\"\n | \"signature-material-invalid\"\n | \"signature-suite-unsupported\"\n | \"signature-invalid\";\n\nexport class SignedObjectProfileError extends Error {\n public readonly code: SignedObjectErrorCode;\n\n constructor(code: SignedObjectErrorCode, message: string) {\n super(message);\n this.name = \"SignedObjectProfileError\";\n this.code = code;\n }\n}\n\nexport class SignedObjectSchemaError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"schema-invalid\", message);\n this.name = \"SignedObjectSchemaError\";\n }\n}\n\nexport class SignedObjectCanonicalizationError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"canonicalization-mismatch\", message);\n this.name = \"SignedObjectCanonicalizationError\";\n }\n}\n\nexport class SignedObjectDigestError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"digest-mismatch\", message);\n this.name = \"SignedObjectDigestError\";\n }\n}\n\nexport class SignedObjectIdError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"id-mismatch\", message);\n this.name = \"SignedObjectIdError\";\n }\n}\n\nexport class SigningKeyBindingError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"signing-key-binding\", message);\n this.name = \"SigningKeyBindingError\";\n }\n}\n\nexport class SignatureMaterialError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"signature-material-invalid\", message);\n this.name = \"SignatureMaterialError\";\n }\n}\n\nexport class UnsupportedSignatureSuiteError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"signature-suite-unsupported\", message);\n this.name = \"UnsupportedSignatureSuiteError\";\n }\n}\n\nexport class SignatureVerificationError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"signature-invalid\", message);\n this.name = \"SignatureVerificationError\";\n }\n}\n\nexport function toSignedObjectError(error: unknown): SignedObjectProfileError {\n if (error instanceof SignedObjectProfileError) {\n return error;\n }\n return new SignedObjectProfileError(\n \"schema-invalid\",\n error instanceof Error ? error.message : String(error),\n );\n}\n","import { SignedObjectCanonicalizationError } from \"./errors\";\n\nexport type JsonValue =\n | null\n | boolean\n | number\n | string\n | JsonValue[]\n | { readonly [key: string]: JsonValue };\n\ntype MutableJsonObject = { [key: string]: JsonValue };\nconst objectHasOwn: (object: object, propertyKey: PropertyKey) => boolean =\n (Object as ObjectConstructor & {\n hasOwn?: (object: object, propertyKey: PropertyKey) => boolean;\n }).hasOwn ??\n (Object.prototype.hasOwnProperty.call.bind(\n Object.prototype.hasOwnProperty,\n ) as (object: object, propertyKey: PropertyKey) => boolean);\n\n/**\n * RFC 8785 JSON Canonicalization Scheme encoder for the signed-object profile.\n *\n * This local encoder is intentionally stricter than JSON.stringify:\n * it rejects non-plain JSON inputs, sparse arrays, undefined/functions/symbols,\n * non-finite numbers, BigInt, dangerous prototype keys, and lone surrogates.\n * Object keys are sorted lexicographically by their raw UTF-16 code units,\n * as required by RFC 8785 section 3.2.3, before serialization.\n */\nexport function jcsCanonicalize(input: unknown): string {\n return serialize(normalizeJson(input, \"$\"));\n}\n\nexport function normalizeJson(input: unknown, path = \"$\"): JsonValue {\n if (input === null) {\n return null;\n }\n\n switch (typeof input) {\n case \"boolean\":\n return input;\n case \"number\":\n if (!Number.isFinite(input)) {\n throw new SignedObjectCanonicalizationError(\n `${path} must be a finite JSON number`,\n );\n }\n return input;\n case \"string\":\n assertUnicodeScalarString(input, path);\n return input;\n case \"object\":\n return normalizeJsonObjectOrArray(input, path);\n case \"bigint\":\n case \"function\":\n case \"symbol\":\n case \"undefined\":\n default:\n throw new SignedObjectCanonicalizationError(\n `${path} is not a JSON value`,\n );\n }\n}\n\nexport function serialize(value: JsonValue): string {\n if (value === null) {\n return \"null\";\n }\n\n switch (typeof value) {\n case \"boolean\":\n return value ? \"true\" : \"false\";\n case \"number\": {\n const encoded = JSON.stringify(value);\n if (encoded === undefined) {\n throw new SignedObjectCanonicalizationError(\n \"number could not be serialized as JSON\",\n );\n }\n return encoded;\n }\n case \"string\":\n return JSON.stringify(value);\n case \"object\":\n if (Array.isArray(value)) {\n return `[${value.map((item) => serialize(item)).join(\",\")}]`;\n }\n return serializeObject(value);\n default:\n throw new SignedObjectCanonicalizationError(\n `unsupported JSON value type ${typeof value}`,\n );\n }\n}\n\nfunction normalizeJsonObjectOrArray(input: object, path: string): JsonValue {\n assertNoSymbolKeys(input, path);\n\n if (Array.isArray(input)) {\n for (const key of Object.getOwnPropertyNames(input)) {\n if (key === \"length\") {\n continue;\n }\n if (!isArrayIndexKey(key, input.length)) {\n throw new SignedObjectCanonicalizationError(\n `${path}.${key} is not allowed on a JSON array`,\n );\n }\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (descriptor?.enumerable !== true) {\n throw new SignedObjectCanonicalizationError(\n `${path}[${key}] must be an enumerable JSON array item`,\n );\n }\n if (!(\"value\" in descriptor)) {\n throw new SignedObjectCanonicalizationError(\n `${path}[${key}] must be a JSON data property`,\n );\n }\n }\n const output: JsonValue[] = [];\n for (let index = 0; index < input.length; index++) {\n if (!objectHasOwn(input, index)) {\n throw new SignedObjectCanonicalizationError(\n `${path}[${index}] must not be a sparse array hole`,\n );\n }\n output.push(normalizeJson(input[index], `${path}[${index}]`));\n }\n return output;\n }\n\n const proto = Object.getPrototypeOf(input);\n if (proto !== Object.prototype && proto !== null) {\n throw new SignedObjectCanonicalizationError(\n `${path} must be a plain JSON object`,\n );\n }\n\n const output = Object.create(null) as MutableJsonObject;\n for (const key of Object.getOwnPropertyNames(input)) {\n assertUnicodeScalarString(key, `${path} key`);\n if (key === \"__proto__\" || key === \"constructor\") {\n throw new SignedObjectCanonicalizationError(\n `${path}.${key} is not allowed`,\n );\n }\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (descriptor?.enumerable !== true) {\n throw new SignedObjectCanonicalizationError(\n `${path}.${key} must be an enumerable JSON object property`,\n );\n }\n if (!(\"value\" in descriptor)) {\n throw new SignedObjectCanonicalizationError(\n `${path}.${key} must be a JSON data property`,\n );\n }\n const value = descriptor.value;\n output[key] = normalizeJson(value, `${path}.${key}`);\n }\n return output;\n}\n\nfunction assertNoSymbolKeys(input: object, path: string): void {\n if (Object.getOwnPropertySymbols(input).length > 0) {\n throw new SignedObjectCanonicalizationError(\n `${path} must not have symbol properties`,\n );\n }\n}\n\nfunction isArrayIndexKey(key: string, length: number): boolean {\n if (!/^(0|[1-9]\\d*)$/.test(key)) {\n return false;\n }\n const index = Number(key);\n return Number.isSafeInteger(index) && index >= 0 && index < length;\n}\n\nfunction serializeObject(value: { readonly [key: string]: JsonValue }): string {\n const keys = Object.keys(value).sort(compareUtf16CodeUnits);\n const parts = keys.map((key) => `${JSON.stringify(key)}:${serialize(value[key])}`);\n return `{${parts.join(\",\")}}`;\n}\n\nfunction compareUtf16CodeUnits(a: string, b: string): number {\n const max = Math.min(a.length, b.length);\n for (let index = 0; index < max; index++) {\n const leftCodeUnit = a.charCodeAt(index);\n const rightCodeUnit = b.charCodeAt(index);\n if (leftCodeUnit !== rightCodeUnit) {\n return leftCodeUnit - rightCodeUnit;\n }\n }\n return a.length - b.length;\n}\n\nfunction assertUnicodeScalarString(value: string, path: string): void {\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (Number.isNaN(next) || next < 0xdc00 || next > 0xdfff) {\n throw new SignedObjectCanonicalizationError(\n `${path} contains a lone high surrogate`,\n );\n }\n index++;\n continue;\n }\n if (code >= 0xdc00 && code <= 0xdfff) {\n throw new SignedObjectCanonicalizationError(\n `${path} contains a lone low surrogate`,\n );\n }\n }\n}\n","import { CAPABILITY_REGISTRY } from \"@tinycloud/bootstrap\";\nimport { bytesToHex, sha256 } from \"viem\";\nimport { jcsCanonicalize, normalizeJson, type JsonValue } from \"./jcs\";\n\nconst POLICY_CAPABILITY_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v0\";\nconst textEncoder = new TextEncoder();\n\nexport type PolicyCapabilityErrorCode =\n | \"policy-capability-malformed\"\n | \"policy-capability-unknown-key\"\n | \"policy-capability-malformed-service\"\n | \"policy-capability-malformed-space\"\n | \"policy-capability-malformed-path\"\n | \"policy-capability-malformed-action\"\n | \"policy-capability-empty-actions\"\n | \"policy-capability-malformed-caveats\";\n\nexport class PolicyCapabilityError extends Error {\n public readonly code: PolicyCapabilityErrorCode;\n\n constructor(code: PolicyCapabilityErrorCode, message: string) {\n super(message);\n this.name = \"PolicyCapabilityError\";\n this.code = code;\n }\n}\n\nexport interface PolicyCapability {\n readonly service: \"tinycloud.kv\" | \"tinycloud.sql\" | \"tinycloud.vfs\";\n readonly space: string;\n readonly path: string;\n readonly actions: readonly string[];\n readonly caveats?: JsonObject;\n}\n\nexport type JsonObject = { readonly [key: string]: JsonValue };\n\ninterface NormalizeOptions {\n readonly allowPrefixPaths?: boolean;\n readonly requireCanonical?: boolean;\n}\n\nconst objectHasOwn: (object: object, propertyKey: PropertyKey) => boolean =\n (Object as ObjectConstructor & {\n hasOwn?: (object: object, propertyKey: PropertyKey) => boolean;\n }).hasOwn ??\n (Object.prototype.hasOwnProperty.call.bind(\n Object.prototype.hasOwnProperty,\n ) as (object: object, propertyKey: PropertyKey) => boolean);\n\nconst CEILING_SERVICES = new Set([\"tinycloud.kv\", \"tinycloud.sql\", \"tinycloud.vfs\"]);\nconst GRANTABLE_ACTIONS = new Map<string, ReadonlySet<string>>();\n\nfor (const entry of CAPABILITY_REGISTRY) {\n if (!CEILING_SERVICES.has(entry.service)) {\n continue;\n }\n if (entry.aliasOf !== undefined || entry.implies !== undefined || entry.urn.endsWith(\"/*\")) {\n continue;\n }\n const existing = GRANTABLE_ACTIONS.get(entry.service);\n if (existing === undefined) {\n GRANTABLE_ACTIONS.set(entry.service, new Set([entry.urn]));\n continue;\n }\n (existing as Set<string>).add(entry.urn);\n}\n\n/**\n * Strict authoring validator for resolved Listen-adapter PolicyCapability JSON.\n * It accepts only concrete service/space/path/action/caveat forms and rejects\n * manifest-shaped permission payloads before any Policy is signed.\n */\nexport function normalizePolicyCapability(input: unknown): PolicyCapability {\n return normalizePolicyCapabilityWithOptions(input, { requireCanonical: true });\n}\n\n/**\n * Frozen-vector canonicalizer for the m1-b-01a policy-capability vectors.\n * Prefix paths are allowed here only to preserve behavioral conformance with\n * the vendored engine vectors; authoring uses normalizePolicyCapability.\n */\nexport function canonicalizePolicyCapability(input: unknown): PolicyCapability {\n return normalizePolicyCapabilityWithOptions(input, { allowPrefixPaths: true });\n}\n\nexport function policyCapabilityDigestHex(input: unknown): string {\n const canonical = canonicalizePolicyCapability(input);\n const jcs = textEncoder.encode(jcsCanonicalize(canonical));\n const domain = textEncoder.encode(`${POLICY_CAPABILITY_DOMAIN}\\0`);\n const bytes = new Uint8Array(domain.length + jcs.length);\n bytes.set(domain, 0);\n bytes.set(jcs, domain.length);\n return bytesToHex(sha256(bytes, \"bytes\")).slice(2);\n}\n\nexport function policyCapabilityContains(authority: unknown, request: unknown): boolean {\n let auth: PolicyCapability;\n let req: PolicyCapability;\n try {\n auth = canonicalizePolicyCapability(authority);\n req = canonicalizePolicyCapability(request);\n } catch {\n return false;\n }\n if (auth.service !== req.service || auth.space !== req.space) {\n return false;\n }\n if (!pathContains(auth.path, req.path)) {\n return false;\n }\n const authActions = new Set(auth.actions);\n for (const action of req.actions) {\n if (!authActions.has(action)) {\n return false;\n }\n }\n return caveatsContain(auth.caveats, req.caveats);\n}\n\nfunction normalizePolicyCapabilityWithOptions(\n input: unknown,\n options: NormalizeOptions,\n): PolicyCapability {\n const object = expectObject(input, \"$\");\n assertExactKeys(object, [\"service\", \"space\", \"path\", \"actions\", \"caveats\"], \"$\");\n const service = requiredString(object, \"service\", \"$\", \"policy-capability-malformed-service\");\n if (!CEILING_SERVICES.has(service)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-service\",\n \"$.service is outside the frozen permissionsCeiling vocabulary\",\n );\n }\n const space = requiredString(object, \"space\", \"$\", \"policy-capability-malformed-space\");\n validateConcreteSpace(space);\n const canonicalSpace = space.normalize(\"NFC\");\n if (options.requireCanonical && canonicalSpace !== space) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-space\",\n \"$.space must already be canonical NFC\",\n );\n }\n const rawPath = requiredString(object, \"path\", \"$\", \"policy-capability-malformed-path\");\n validateRawPath(rawPath, options);\n const path = normalizePath(rawPath);\n if (options.requireCanonical && path !== rawPath) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-path\",\n \"$.path must already be canonical\",\n );\n }\n validateRawPath(path, options);\n const actions = normalizeActions(\n requiredArray(object, \"actions\", \"$\", \"policy-capability-malformed-action\"),\n service,\n options,\n );\n const output = Object.create(null) as {\n service: PolicyCapability[\"service\"];\n space: string;\n path: string;\n actions: string[];\n caveats?: JsonObject;\n };\n output.service = service as PolicyCapability[\"service\"];\n output.space = canonicalSpace;\n output.path = path;\n output.actions = actions;\n if (hasOwn(object, \"caveats\")) {\n output.caveats = validateCaveats(\n requiredValue(object, \"caveats\", \"$\", \"policy-capability-malformed-caveats\"),\n output.service,\n );\n }\n return output;\n}\n\nfunction expectObject(input: unknown, path: string): JsonObject {\n try {\n const normalized = normalizeJson(input);\n if (normalized === null || typeof normalized !== \"object\" || Array.isArray(normalized)) {\n throw new PolicyCapabilityError(\"policy-capability-malformed\", `${path} must be an object`);\n }\n return normalized as JsonObject;\n } catch (error) {\n if (error instanceof PolicyCapabilityError) {\n throw error;\n }\n throw new PolicyCapabilityError(\n \"policy-capability-malformed\",\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction assertExactKeys(object: JsonObject, allowed: readonly string[], path: string): void {\n const allowedSet = new Set(allowed);\n for (const key of Object.keys(object)) {\n if (!allowedSet.has(key)) {\n throw new PolicyCapabilityError(\n key === \"id\" || key === \"scope\" ? \"policy-capability-malformed\" : \"policy-capability-unknown-key\",\n `${path} has unknown field ${key}`,\n );\n }\n }\n}\n\nfunction requiredValue(\n object: JsonObject,\n key: string,\n path: string,\n code: PolicyCapabilityErrorCode,\n): JsonValue {\n if (!hasOwn(object, key)) {\n throw new PolicyCapabilityError(code, `${path}.${key} is required`);\n }\n return object[key];\n}\n\nfunction requiredString(\n object: JsonObject,\n key: string,\n path: string,\n code: PolicyCapabilityErrorCode,\n): string {\n const value = requiredValue(object, key, path, code);\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyCapabilityError(code, `${path}.${key} must be a non-empty string`);\n }\n return value;\n}\n\nfunction requiredArray(\n object: JsonObject,\n key: string,\n path: string,\n code: PolicyCapabilityErrorCode,\n): readonly JsonValue[] {\n const value = requiredValue(object, key, path, code);\n if (!Array.isArray(value)) {\n throw new PolicyCapabilityError(code, `${path}.${key} must be an array`);\n }\n return value;\n}\n\nfunction validateConcreteSpace(space: string): void {\n if (space === \"*\" || space.includes(\"*\") || space.includes(\"?\") || space.includes(\"/\")) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-space\",\n \"$.space must be concrete\",\n );\n }\n}\n\nfunction validateRawPath(path: string, options: NormalizeOptions): void {\n if (path.length === 0) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-path\", \"$.path is empty\");\n }\n if (!options.allowPrefixPaths && path.endsWith(\"/\")) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-path\",\n \"$.path must be an exact concrete path, not a prefix\",\n );\n }\n if (path.endsWith(\"/*\") || path.includes(\"**\")) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-path\", \"$.path is a prefix form\");\n }\n const segments = path.split(\"/\");\n for (let index = 0; index < segments.length; index++) {\n const segment = segments[index]!;\n const isTrailingPrefixSegment =\n options.allowPrefixPaths && index === segments.length - 1 && segment.length === 0;\n if (segment.length === 0 && !isTrailingPrefixSegment) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-path\", \"$.path has an empty segment\");\n }\n if (segment === \".\" || segment === \"..\") {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-path\",\n \"$.path has a traversal segment\",\n );\n }\n if (segment === \"*\" || segment === \"?\" || segment.includes(\"*\") || segment.includes(\"?\")) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-path\",\n \"$.path has a wildcard segment\",\n );\n }\n }\n}\n\nfunction normalizePath(path: string): string {\n return decodeUnreserved(path).normalize(\"NFC\");\n}\n\nfunction decodeUnreserved(path: string): string {\n return path.replace(/%[0-9A-Fa-f]{2}/g, (encoded) => {\n const char = String.fromCharCode(Number.parseInt(encoded.slice(1), 16));\n return /^[A-Za-z0-9._~-]$/.test(char) ? char : encoded.toUpperCase();\n });\n}\n\nfunction normalizeActions(\n actions: readonly JsonValue[],\n service: string,\n options: NormalizeOptions,\n): string[] {\n const accepted = GRANTABLE_ACTIONS.get(service);\n if (accepted === undefined) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-service\",\n \"$.service is unsupported\",\n );\n }\n const unique = new Set<string>();\n const rawActions: string[] = [];\n for (let index = 0; index < actions.length; index++) {\n const action = actions[index];\n if (typeof action !== \"string\" || action.length === 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-action\",\n `$.actions[${index}] must be a non-empty action URN`,\n );\n }\n if (!action.startsWith(`${service}/`) || action.includes(\"*\") || !accepted.has(action)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-action\",\n `$.actions[${index}] is not a grantable action URN`,\n );\n }\n rawActions.push(action);\n unique.add(action);\n }\n if (unique.size === 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-empty-actions\",\n \"$.actions must not be empty\",\n );\n }\n const normalizedActions = [...unique].sort();\n if (\n options.requireCanonical &&\n (rawActions.length !== normalizedActions.length ||\n rawActions.some((action, index) => action !== normalizedActions[index]))\n ) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-action\",\n \"$.actions must already be sorted, deduplicated canonical action URNs\",\n );\n }\n return normalizedActions;\n}\n\nfunction validateCaveats(input: JsonValue, service: PolicyCapability[\"service\"]): JsonObject {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats must be an object\",\n );\n }\n if (service === \"tinycloud.sql\") {\n return validateSqlCaveats(input as JsonObject);\n }\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats are not defined for this service\",\n );\n}\n\nfunction validateSqlCaveats(input: JsonObject): JsonObject {\n assertCaveatKeys(input, [\"mode\", \"readOnly\", \"statements\"], \"$.caveats\");\n const mode = caveatString(input, \"mode\", \"$.caveats\");\n if (mode !== \"constrained-statements\") {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats.mode is unsupported\",\n );\n }\n if (requiredCaveat(input, \"readOnly\", \"$.caveats\") !== true) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats.readOnly must be true\",\n );\n }\n const statements = requiredCaveat(input, \"statements\", \"$.caveats\");\n if (!Array.isArray(statements) || statements.length === 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats.statements must be a non-empty array\",\n );\n }\n for (let index = 0; index < statements.length; index++) {\n validateSqlStatement(statements[index], `$.caveats.statements[${index}]`);\n }\n return input;\n}\n\nfunction validateSqlStatement(input: JsonValue, path: string): void {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-caveats\", `${path} must be an object`);\n }\n const object = input as JsonObject;\n assertCaveatKeys(object, [\"name\", \"sql\", \"fixedParams\"], path);\n caveatString(object, \"name\", path);\n caveatString(object, \"sql\", path);\n const fixedParams = requiredCaveat(object, \"fixedParams\", path);\n if (!Array.isArray(fixedParams)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path}.fixedParams must be an array`,\n );\n }\n for (let index = 0; index < fixedParams.length; index++) {\n validateFixedParam(fixedParams[index], `${path}.fixedParams[${index}]`);\n }\n}\n\nfunction validateFixedParam(input: JsonValue, path: string): void {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-caveats\", `${path} must be an object`);\n }\n const object = input as JsonObject;\n assertCaveatKeys(object, [\"index\", \"value\"], path);\n const index = requiredCaveat(object, \"index\", path);\n if (typeof index !== \"number\" || !Number.isSafeInteger(index) || index < 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path}.index must be a non-negative integer`,\n );\n }\n requiredCaveat(object, \"value\", path);\n}\n\nfunction assertCaveatKeys(object: JsonObject, allowed: readonly string[], path: string): void {\n const allowedSet = new Set(allowed);\n for (const key of Object.keys(object)) {\n if (!allowedSet.has(key)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path} has unknown field ${key}`,\n );\n }\n }\n}\n\nfunction requiredCaveat(object: JsonObject, key: string, path: string): JsonValue {\n if (!hasOwn(object, key)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path}.${key} is required`,\n );\n }\n return object[key];\n}\n\nfunction caveatString(object: JsonObject, key: string, path: string): string {\n const value = requiredCaveat(object, key, path);\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path}.${key} must be a non-empty string`,\n );\n }\n return value;\n}\n\nfunction pathContains(authority: string, request: string): boolean {\n if (authority === request) {\n return true;\n }\n return authority.endsWith(\"/\") && request.startsWith(authority);\n}\n\nfunction caveatsContain(authority: JsonObject | undefined, request: JsonObject | undefined): boolean {\n if (authority === undefined) {\n return request === undefined;\n }\n if (request === undefined) {\n return Object.keys(authority).length === 0;\n }\n if (authority.mode !== \"constrained-statements\" || request.mode !== \"constrained-statements\") {\n return false;\n }\n const authorityStatements = Array.isArray(authority.statements) ? authority.statements : [];\n const requestStatements = Array.isArray(request.statements) ? request.statements : [];\n return requestStatements.every((statement) =>\n authorityStatements.some((candidate) => jcsCanonicalize(candidate) === jcsCanonicalize(statement)),\n );\n}\n\nfunction hasOwn(object: JsonObject, key: string): boolean {\n return objectHasOwn(object, key);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { bases } from \"multiformats/basics\";\nimport { bytesToHex, sha256, verifyMessage } from \"viem\";\nimport { parsePkhDid } from \"../identity\";\nimport { canonicalizePolicyCapability, normalizePolicyCapability } from \"./capability\";\nimport {\n SignatureMaterialError,\n SignatureVerificationError,\n SignedObjectDigestError,\n SignedObjectIdError,\n SignedObjectProfileError,\n SignedObjectSchemaError,\n SigningKeyBindingError,\n UnsupportedSignatureSuiteError,\n toSignedObjectError,\n} from \"./errors\";\nimport { type JsonValue, jcsCanonicalize, normalizeJson } from \"./jcs\";\n\nexport const POLICY_SCHEMA = \"xyz.tinycloud.policy/policy/v0\";\nexport const POLICY_STATUS_SCHEMA = \"xyz.tinycloud.policy/status/v0\";\nexport const POLICY_ENGINE_RECORD_SCHEMA =\n \"xyz.tinycloud.policy/engine-record/v0\";\n\nexport const ED25519_JCS_SIGNATURE_SUITE = \"eddsa-ed25519-sha256-jcs-v1\";\nexport const EIP191_JCS_SIGNATURE_SUITE =\n \"eip191-secp256k1-sha256-jcs-v1\";\n\nexport type SignedObjectKind = \"Policy\" | \"PolicyStatus\" | \"PolicyEngineRecord\";\n\nexport type SignatureSuite =\n | typeof ED25519_JCS_SIGNATURE_SUITE\n | typeof EIP191_JCS_SIGNATURE_SUITE;\n\nexport interface SignedObjectSignature {\n suite: SignatureSuite;\n signerDid: string;\n value: string;\n}\n\nexport type JsonObject = { readonly [key: string]: JsonValue };\n\nexport interface Policy {\n readonly schema: typeof POLICY_SCHEMA;\n readonly policyId: string;\n readonly ownerDid: string;\n readonly signingKeyDid: string;\n readonly createdAt: string;\n readonly expiresAt?: string;\n readonly resource: JsonObject;\n readonly when: JsonObject;\n readonly grant: JsonObject;\n readonly disclosure?: JsonObject;\n readonly audit?: JsonObject;\n readonly signature: SignedObjectSignature;\n}\n\nexport type UnsignedPolicy = Omit<Policy, \"policyId\" | \"signature\">;\n\nexport interface PolicyStatus {\n readonly schema: typeof POLICY_STATUS_SCHEMA;\n readonly statusId: string;\n readonly policyId: string;\n readonly ownerDid: string;\n readonly sequence: number;\n readonly disposition: \"active\" | \"suspended\" | \"revoked\";\n readonly effectiveAt: string;\n readonly reasonCode?: string;\n readonly signingKeyDid: string;\n readonly signature: SignedObjectSignature;\n}\n\nexport type UnsignedPolicyStatus = Omit<PolicyStatus, \"statusId\" | \"signature\">;\n\nexport interface PolicyEngineRecord {\n readonly schema: typeof POLICY_ENGINE_RECORD_SCHEMA;\n readonly engineRecordId: string;\n readonly ownerDid: string;\n readonly endpoint: string;\n readonly audience: string;\n readonly supportedPolicyVersions: string[];\n readonly supportedEvidenceVerifiers: string[];\n readonly grantIssuerDid: string;\n readonly expiresAt: string;\n readonly signature: SignedObjectSignature;\n}\n\nexport type UnsignedPolicyEngineRecord = Omit<\n PolicyEngineRecord,\n \"engineRecordId\" | \"signature\"\n>;\n\nexport type SignedPolicyObject =\n | Policy\n | PolicyStatus\n | PolicyEngineRecord;\n\nexport type UnsignedPolicyObject =\n | UnsignedPolicy\n | UnsignedPolicyStatus\n | UnsignedPolicyEngineRecord;\n\nexport interface SignedObjectSigner {\n readonly suite: SignatureSuite;\n readonly signerDid: string;\n signDigest(digest: Uint8Array): Promise<Uint8Array | string> | Uint8Array | string;\n}\n\nexport interface SignedObjectMaterial {\n readonly kind: SignedObjectKind;\n readonly idField: string;\n readonly id: string;\n readonly domain: string;\n readonly unsigned: JsonObject;\n readonly jcs: string;\n readonly jcsBytes: Uint8Array;\n readonly digest: Uint8Array;\n readonly digestHex: string;\n}\n\nexport type SignedObjectVerificationResult<T extends SignedPolicyObject> =\n | { readonly ok: true; readonly object: T; readonly material: SignedObjectMaterial }\n | { readonly ok: false; readonly error: SignedObjectProfileError };\n\ninterface ObjectDescriptor {\n readonly kind: SignedObjectKind;\n readonly schema: string;\n readonly idField: \"policyId\" | \"statusId\" | \"engineRecordId\";\n readonly idPrefix: string;\n readonly domain: string;\n}\n\nconst DESCRIPTORS: Record<SignedObjectKind, ObjectDescriptor> = {\n Policy: {\n kind: \"Policy\",\n schema: POLICY_SCHEMA,\n idField: \"policyId\",\n idPrefix: \"pol_\",\n domain: POLICY_SCHEMA,\n },\n PolicyStatus: {\n kind: \"PolicyStatus\",\n schema: POLICY_STATUS_SCHEMA,\n idField: \"statusId\",\n idPrefix: \"polst_\",\n domain: POLICY_STATUS_SCHEMA,\n },\n PolicyEngineRecord: {\n kind: \"PolicyEngineRecord\",\n schema: POLICY_ENGINE_RECORD_SCHEMA,\n idField: \"engineRecordId\",\n idPrefix: \"peng_\",\n domain: POLICY_ENGINE_RECORD_SCHEMA,\n },\n};\n\nconst textEncoder = new TextEncoder();\nconst BASE32_ALPHABET = \"abcdefghijklmnopqrstuvwxyz234567\";\nconst BASE64URL_RE = /^[A-Za-z0-9_-]+$/;\nconst objectHasOwn: (object: object, propertyKey: PropertyKey) => boolean =\n (Object as ObjectConstructor & {\n hasOwn?: (object: object, propertyKey: PropertyKey) => boolean;\n }).hasOwn ??\n (Object.prototype.hasOwnProperty.call.bind(\n Object.prototype.hasOwnProperty,\n ) as (object: object, propertyKey: PropertyKey) => boolean);\n\nexport function canonicalizeSignedObjectUnsigned(input: unknown): string {\n return jcsCanonicalize(input);\n}\n\nexport function deriveSignedObjectMaterial(input: unknown): SignedObjectMaterial {\n const descriptor = descriptorForUnsigned(input);\n const unsigned = validateUnsignedForDescriptor(input, descriptor);\n return materialForUnsigned(unsigned, descriptor);\n}\n\nexport function signedObjectIdFor(input: unknown): string {\n return deriveSignedObjectMaterial(input).id;\n}\n\nexport async function createAndSignSignedObject(\n input: unknown,\n signer: SignedObjectSigner,\n): Promise<SignedPolicyObject> {\n const normalized = expectJsonObject(normalizeJson(input), \"$\");\n const descriptor = descriptorForUnsigned(normalized);\n const stripped = stripOwnIdAndSignature(normalized, descriptor);\n const unsigned = validateUnsignedForDescriptor(stripped, descriptor);\n if (descriptor.kind === \"Policy\") {\n validatePolicyPermissionsCeilingForSigning(unsigned);\n }\n assertSupportedSignatureSuite(signer.suite);\n requireStringType(signer.signerDid, \"$.signer.signerDid\");\n assertSignerDidMatchesSuite(signer.signerDid, signer.suite);\n assertSigningKeyBindingForCreate(unsigned, signer.signerDid);\n const material = materialForUnsigned(unsigned, descriptor);\n const signatureValue = encodeSignatureValue(\n await signer.signDigest(material.digest),\n signer.suite,\n );\n const signature = validateSignature({\n suite: signer.suite,\n signerDid: signer.signerDid,\n value: signatureValue,\n });\n return {\n ...unsigned,\n [descriptor.idField]: material.id,\n signature,\n } as unknown as SignedPolicyObject;\n}\n\nexport function createAndSignPolicy(\n input: unknown,\n signer: SignedObjectSigner,\n): Promise<Policy> {\n return createAndSignSignedObject(input, signer).then((object) =>\n validatePolicySignedShape(object),\n );\n}\n\nexport function createAndSignPolicyStatus(\n input: unknown,\n signer: SignedObjectSigner,\n): Promise<PolicyStatus> {\n return createAndSignSignedObject(input, signer).then((object) =>\n validatePolicyStatusSignedShape(object),\n );\n}\n\nexport function createAndSignPolicyEngineRecord(\n input: unknown,\n signer: SignedObjectSigner,\n): Promise<PolicyEngineRecord> {\n return createAndSignSignedObject(input, signer).then((object) =>\n validatePolicyEngineRecordSignedShape(object),\n );\n}\n\nexport async function verifySignedObject(\n input: unknown,\n): Promise<{ object: SignedPolicyObject; material: SignedObjectMaterial }> {\n const signed = validateSignedObjectShape(input);\n const signedJson = signed as unknown as JsonObject;\n const descriptor = descriptorForSchema(signed.schema);\n const signature = validateSignature(signed.signature);\n assertSigningKeyBindingForVerify(signedJson, signature);\n const unsigned = stripOwnIdAndSignature(signedJson, descriptor);\n const material = materialForUnsigned(unsigned, descriptor);\n assertIdMatches(signedJson, material, descriptor);\n if (!(await verifySignature(signature, material.digest))) {\n throw new SignatureVerificationError(\"signature verification failed\");\n }\n return { object: signed, material };\n}\n\nexport async function verifyPolicy(\n input: unknown,\n): Promise<{ object: Policy; material: SignedObjectMaterial }> {\n const result = await verifySignedObject(input);\n return {\n object: validatePolicySignedShape(result.object),\n material: result.material,\n };\n}\n\nexport async function verifyPolicyStatus(\n input: unknown,\n): Promise<{ object: PolicyStatus; material: SignedObjectMaterial }> {\n const result = await verifySignedObject(input);\n return {\n object: validatePolicyStatusSignedShape(result.object),\n material: result.material,\n };\n}\n\nexport async function verifyPolicyEngineRecord(\n input: unknown,\n): Promise<{ object: PolicyEngineRecord; material: SignedObjectMaterial }> {\n const result = await verifySignedObject(input);\n return {\n object: validatePolicyEngineRecordSignedShape(result.object),\n material: result.material,\n };\n}\n\nexport async function validatePolicySigned(\n input: unknown,\n): Promise<SignedObjectVerificationResult<Policy>> {\n try {\n const result = await verifyPolicy(input);\n return { ok: true, object: result.object, material: result.material };\n } catch (error) {\n return { ok: false, error: toSignedObjectError(error) };\n }\n}\n\nexport async function validatePolicyStatusSigned(\n input: unknown,\n): Promise<SignedObjectVerificationResult<PolicyStatus>> {\n try {\n const result = await verifyPolicyStatus(input);\n return { ok: true, object: result.object, material: result.material };\n } catch (error) {\n return { ok: false, error: toSignedObjectError(error) };\n }\n}\n\nexport async function validatePolicyEngineRecordSigned(\n input: unknown,\n): Promise<SignedObjectVerificationResult<PolicyEngineRecord>> {\n try {\n const result = await verifyPolicyEngineRecord(input);\n return { ok: true, object: result.object, material: result.material };\n } catch (error) {\n return { ok: false, error: toSignedObjectError(error) };\n }\n}\n\nexport function validatePolicyUnsigned(input: unknown): UnsignedPolicy {\n return validatePolicyShape(input, false) as unknown as UnsignedPolicy;\n}\n\nexport function validatePolicyStatusUnsigned(input: unknown): UnsignedPolicyStatus {\n return validatePolicyStatusShape(input, false) as unknown as UnsignedPolicyStatus;\n}\n\nexport function validatePolicyEngineRecordUnsigned(\n input: unknown,\n): UnsignedPolicyEngineRecord {\n return validatePolicyEngineRecordShape(input, false) as unknown as UnsignedPolicyEngineRecord;\n}\n\nexport function validatePolicySignedShape(input: unknown): Policy {\n return validatePolicyShape(input, true) as unknown as Policy;\n}\n\nexport function validatePolicyStatusSignedShape(input: unknown): PolicyStatus {\n return validatePolicyStatusShape(input, true) as unknown as PolicyStatus;\n}\n\nexport function validatePolicyEngineRecordSignedShape(\n input: unknown,\n): PolicyEngineRecord {\n return validatePolicyEngineRecordShape(input, true) as unknown as PolicyEngineRecord;\n}\n\nfunction validateSignedObjectShape(input: unknown): SignedPolicyObject {\n const normalized = expectJsonObject(normalizeJson(input), \"$\");\n const schema = requiredString(normalized, \"schema\", \"$\");\n const descriptor = descriptorForSchema(schema);\n switch (descriptor.kind) {\n case \"Policy\":\n return validatePolicySignedShape(normalized);\n case \"PolicyStatus\":\n return validatePolicyStatusSignedShape(normalized);\n case \"PolicyEngineRecord\":\n return validatePolicyEngineRecordSignedShape(normalized);\n }\n}\n\nfunction validateUnsignedForDescriptor(\n input: unknown,\n descriptor: ObjectDescriptor,\n): JsonObject {\n switch (descriptor.kind) {\n case \"Policy\":\n return validatePolicyUnsigned(input) as unknown as JsonObject;\n case \"PolicyStatus\":\n return validatePolicyStatusUnsigned(input) as unknown as JsonObject;\n case \"PolicyEngineRecord\":\n return validatePolicyEngineRecordUnsigned(input) as unknown as JsonObject;\n }\n}\n\nfunction validatePolicyShape(input: unknown, signed: boolean): JsonObject {\n const object = expectJsonObject(normalizeJson(input), \"$\");\n assertExactKeys(\n object,\n signed\n ? [\n \"schema\",\n \"policyId\",\n \"ownerDid\",\n \"signingKeyDid\",\n \"createdAt\",\n \"expiresAt\",\n \"resource\",\n \"when\",\n \"grant\",\n \"disclosure\",\n \"audit\",\n \"signature\",\n ]\n : [\n \"schema\",\n \"ownerDid\",\n \"signingKeyDid\",\n \"createdAt\",\n \"expiresAt\",\n \"resource\",\n \"when\",\n \"grant\",\n \"disclosure\",\n \"audit\",\n ],\n \"$\",\n );\n expectConst(requiredString(object, \"schema\", \"$\"), POLICY_SCHEMA, \"$.schema\");\n if (signed) {\n requiredString(object, \"policyId\", \"$\");\n validateSignature(requiredValue(object, \"signature\", \"$\"));\n }\n requiredString(object, \"ownerDid\", \"$\");\n requiredString(object, \"signingKeyDid\", \"$\");\n requiredDateString(object, \"createdAt\", \"$\");\n optionalDateString(object, \"expiresAt\", \"$\");\n validatePolicyResource(requiredValue(object, \"resource\", \"$\"), \"$.resource\");\n validateExpression(requiredValue(object, \"when\", \"$\"), \"$.when\");\n validateGrant(requiredValue(object, \"grant\", \"$\"), \"$.grant\");\n if (hasOwn(object, \"disclosure\")) {\n validateDisclosure(requiredValue(object, \"disclosure\", \"$\"), \"$.disclosure\");\n }\n if (hasOwn(object, \"audit\")) {\n validateAudit(requiredValue(object, \"audit\", \"$\"), \"$.audit\");\n }\n return object;\n}\n\nfunction validatePolicyStatusShape(input: unknown, signed: boolean): JsonObject {\n const object = expectJsonObject(normalizeJson(input), \"$\");\n assertExactKeys(\n object,\n signed\n ? [\n \"schema\",\n \"statusId\",\n \"policyId\",\n \"ownerDid\",\n \"sequence\",\n \"disposition\",\n \"effectiveAt\",\n \"reasonCode\",\n \"signingKeyDid\",\n \"signature\",\n ]\n : [\n \"schema\",\n \"policyId\",\n \"ownerDid\",\n \"sequence\",\n \"disposition\",\n \"effectiveAt\",\n \"reasonCode\",\n \"signingKeyDid\",\n ],\n \"$\",\n );\n expectConst(requiredString(object, \"schema\", \"$\"), POLICY_STATUS_SCHEMA, \"$.schema\");\n if (signed) {\n requiredString(object, \"statusId\", \"$\");\n validateSignature(requiredValue(object, \"signature\", \"$\"));\n }\n requiredString(object, \"policyId\", \"$\");\n requiredString(object, \"ownerDid\", \"$\");\n requiredInteger(object, \"sequence\", \"$\", 0);\n expectOneOf(requiredString(object, \"disposition\", \"$\"), [\n \"active\",\n \"suspended\",\n \"revoked\",\n ], \"$.disposition\");\n requiredDateString(object, \"effectiveAt\", \"$\");\n optionalString(object, \"reasonCode\", \"$\");\n requiredString(object, \"signingKeyDid\", \"$\");\n return object;\n}\n\nfunction validatePolicyEngineRecordShape(\n input: unknown,\n signed: boolean,\n): JsonObject {\n const object = expectJsonObject(normalizeJson(input), \"$\");\n assertExactKeys(\n object,\n signed\n ? [\n \"schema\",\n \"engineRecordId\",\n \"ownerDid\",\n \"endpoint\",\n \"audience\",\n \"supportedPolicyVersions\",\n \"supportedEvidenceVerifiers\",\n \"grantIssuerDid\",\n \"expiresAt\",\n \"signature\",\n ]\n : [\n \"schema\",\n \"ownerDid\",\n \"endpoint\",\n \"audience\",\n \"supportedPolicyVersions\",\n \"supportedEvidenceVerifiers\",\n \"grantIssuerDid\",\n \"expiresAt\",\n ],\n \"$\",\n );\n expectConst(\n requiredString(object, \"schema\", \"$\"),\n POLICY_ENGINE_RECORD_SCHEMA,\n \"$.schema\",\n );\n if (signed) {\n requiredString(object, \"engineRecordId\", \"$\");\n validateSignature(requiredValue(object, \"signature\", \"$\"));\n }\n requiredString(object, \"ownerDid\", \"$\");\n requiredString(object, \"endpoint\", \"$\");\n requiredString(object, \"audience\", \"$\");\n requiredStringArray(object, \"supportedPolicyVersions\", \"$\", (value, path) =>\n expectConst(value, \"v0\", path),\n );\n requiredStringArray(object, \"supportedEvidenceVerifiers\", \"$\");\n requiredString(object, \"grantIssuerDid\", \"$\");\n requiredDateString(object, \"expiresAt\", \"$\");\n return object;\n}\n\nfunction validateSignature(input: unknown): SignedObjectSignature {\n const object = expectJsonObject(input, \"$.signature\");\n assertExactKeys(object, [\"suite\", \"signerDid\", \"value\"], \"$.signature\");\n const suite = requiredString(object, \"suite\", \"$.signature\");\n assertSupportedSignatureSuite(suite);\n const signerDid = requiredString(object, \"signerDid\", \"$.signature\");\n const value = requiredString(object, \"value\", \"$.signature\");\n decodeSignatureValue(value, suite);\n return { suite, signerDid, value };\n}\n\nfunction validatePolicyResource(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(object, [\"resourceType\", \"resourceId\", \"permissionsCeiling\"], path);\n requiredString(object, \"resourceType\", path);\n requiredString(object, \"resourceId\", path);\n const ceiling = requiredArray(object, \"permissionsCeiling\", path, 1);\n for (let index = 0; index < ceiling.length; index++) {\n validatePolicyCapability(ceiling[index], `${path}.permissionsCeiling[${index}]`);\n }\n}\n\nfunction validatePolicyPermissionsCeilingForSigning(input: JsonObject): void {\n const resource = expectJsonObject(requiredValue(input, \"resource\", \"$\"), \"$.resource\");\n const ceiling = requiredArray(resource, \"permissionsCeiling\", \"$.resource\", 1);\n for (let index = 0; index < ceiling.length; index++) {\n validatePolicyCapabilityForSigning(\n ceiling[index],\n `$.resource.permissionsCeiling[${index}]`,\n );\n }\n}\n\nfunction validatePolicyCapability(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n try {\n const canonical = canonicalizePolicyCapability(object);\n if (jcsCanonicalize(object) !== jcsCanonicalize(canonical)) {\n throw new SignedObjectSchemaError(`${path} must be canonical PolicyCapability JSON`);\n }\n } catch (error) {\n if (error instanceof SignedObjectSchemaError) {\n throw error;\n }\n throw new SignedObjectSchemaError(\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction validatePolicyCapabilityForSigning(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n try {\n const canonical = normalizePolicyCapability(object);\n if (jcsCanonicalize(object) !== jcsCanonicalize(canonical)) {\n throw new SignedObjectSchemaError(`${path} must be strict canonical PolicyCapability JSON`);\n }\n } catch (error) {\n if (error instanceof SignedObjectSchemaError) {\n throw error;\n }\n throw new SignedObjectSchemaError(\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction validateExpression(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n const keys = Object.keys(object);\n if (keys.length !== 1) {\n throw new SignedObjectSchemaError(`${path} must have exactly one expression key`);\n }\n const key = keys[0];\n if (key === \"allOf\" || key === \"anyOf\") {\n const values = requiredArray(object, key, path, 1);\n for (let index = 0; index < values.length; index++) {\n validateExpression(values[index], `${path}.${key}[${index}]`);\n }\n return;\n }\n if (key === \"subject\") {\n const subject = expectJsonObject(requiredValue(object, \"subject\", path), `${path}.subject`);\n assertExactKeys(subject, [\"did\"], `${path}.subject`);\n requiredString(subject, \"did\", `${path}.subject`);\n return;\n }\n if (key === \"evidence\") {\n validateEvidenceRequirement(requiredValue(object, \"evidence\", path), `${path}.evidence`);\n return;\n }\n throw new SignedObjectSchemaError(`${path} has unknown expression key ${key}`);\n}\n\nfunction validateEvidenceRequirement(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(\n object,\n [\"requirementId\", \"verifier\", \"requirements\", \"authority\", \"freshness\"],\n path,\n );\n requiredString(object, \"requirementId\", path);\n requiredString(object, \"verifier\", path);\n requiredValue(object, \"requirements\", path);\n if (hasOwn(object, \"authority\")) {\n const authority = expectJsonObject(requiredValue(object, \"authority\", path), `${path}.authority`);\n assertExactKeys(\n authority,\n [\"profile\", \"acceptedIssuers\", \"allowOwnerAuthorizedIssuer\"],\n `${path}.authority`,\n );\n optionalString(authority, \"profile\", `${path}.authority`);\n if (hasOwn(authority, \"acceptedIssuers\")) {\n requiredStringArray(authority, \"acceptedIssuers\", `${path}.authority`);\n }\n optionalBoolean(authority, \"allowOwnerAuthorizedIssuer\", `${path}.authority`);\n }\n if (hasOwn(object, \"freshness\")) {\n const freshness = expectJsonObject(requiredValue(object, \"freshness\", path), `${path}.freshness`);\n assertExactKeys(freshness, [\"maxStatusAgeSeconds\"], `${path}.freshness`);\n requiredInteger(freshness, \"maxStatusAgeSeconds\", `${path}.freshness`, 0);\n }\n}\n\nfunction validateGrant(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(object, [\"output\", \"maxTtlSeconds\", \"delegationMode\", \"revocation\"], path);\n expectConst(requiredString(object, \"output\", path), \"portable-delegation\", `${path}.output`);\n requiredInteger(object, \"maxTtlSeconds\", path, 1);\n expectOneOf(requiredString(object, \"delegationMode\", path), [\n \"terminal\",\n \"attenuable\",\n ], `${path}.delegationMode`);\n expectOneOf(requiredString(object, \"revocation\", path), [\n \"refresh_only\",\n \"active_cutoff\",\n ], `${path}.revocation`);\n}\n\nfunction validateDisclosure(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(object, [\"denial\"], path);\n expectOneOf(requiredString(object, \"denial\", path), [\"none\", \"code\", \"debug\"], `${path}.denial`);\n}\n\nfunction validateAudit(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(object, [\"issuance\"], path);\n expectOneOf(requiredString(object, \"issuance\", path), [\"off\", \"security\", \"full\"], `${path}.issuance`);\n}\n\nfunction materialForUnsigned(\n unsigned: JsonObject,\n descriptor: ObjectDescriptor,\n): SignedObjectMaterial {\n const jcs = jcsCanonicalize(unsigned);\n const jcsBytes = textEncoder.encode(jcs);\n const digest = sha256Bytes(concatBytes(textEncoder.encode(`${descriptor.domain}\\0`), jcsBytes));\n const id = `${descriptor.idPrefix}${base32LowerNoPad(digest)}`;\n return {\n kind: descriptor.kind,\n idField: descriptor.idField,\n id,\n domain: descriptor.domain,\n unsigned,\n jcs,\n jcsBytes,\n digest,\n digestHex: bytesToHex(digest).slice(2),\n };\n}\n\nfunction assertIdMatches(\n signed: JsonObject,\n material: SignedObjectMaterial,\n descriptor: ObjectDescriptor,\n): void {\n const actual = requiredString(signed, descriptor.idField, \"$\");\n if (actual === material.id) {\n return;\n }\n if (new RegExp(`^${descriptor.idPrefix}[a-z2-7]{52}$`).test(actual)) {\n throw new SignedObjectDigestError(\n `${descriptor.idField} was not derived from the signed object digest`,\n );\n }\n throw new SignedObjectIdError(`${descriptor.idField} does not match ${descriptor.idPrefix}`);\n}\n\nfunction assertSigningKeyBindingForCreate(\n unsigned: JsonObject,\n signerDid: string,\n): void {\n if (!hasOwn(unsigned, \"signingKeyDid\")) {\n return;\n }\n const signingKeyDid = requiredString(unsigned, \"signingKeyDid\", \"$\");\n if (signingKeyDid !== signerDid) {\n throw new SigningKeyBindingError(\n `signer DID ${signerDid} does not match signingKeyDid ${signingKeyDid}`,\n );\n }\n}\n\nfunction assertSigningKeyBindingForVerify(\n signed: JsonObject,\n signature: SignedObjectSignature,\n): void {\n if (!hasOwn(signed, \"signingKeyDid\")) {\n return;\n }\n const signingKeyDid = requiredString(signed, \"signingKeyDid\", \"$\");\n if (signature.signerDid !== signingKeyDid) {\n throw new SigningKeyBindingError(\n `signature signerDid ${signature.signerDid} does not match signingKeyDid ${signingKeyDid}`,\n );\n }\n}\n\nfunction assertSignerDidMatchesSuite(\n signerDid: string,\n suite: SignatureSuite,\n): void {\n if (suite === ED25519_JCS_SIGNATURE_SUITE) {\n ed25519PublicKeyFromDidKey(signerDid);\n return;\n }\n if (suite === EIP191_JCS_SIGNATURE_SUITE) {\n parseDidPkh(signerDid);\n return;\n }\n throw new UnsupportedSignatureSuiteError(`unsupported signature suite: ${suite}`);\n}\n\nasync function verifySignature(\n signature: SignedObjectSignature,\n digest: Uint8Array,\n): Promise<boolean> {\n if (signature.suite === ED25519_JCS_SIGNATURE_SUITE) {\n const publicKey = ed25519PublicKeyFromDidKey(signature.signerDid);\n const signatureBytes = decodeSignatureValue(signature.value, signature.suite);\n try {\n return ed25519.verify(signatureBytes, digest, publicKey);\n } catch {\n throw new SignatureVerificationError(\"Ed25519 signature verification failed\");\n }\n }\n\n if (signature.suite === EIP191_JCS_SIGNATURE_SUITE) {\n const pkh = parseDidPkh(signature.signerDid);\n const signatureBytes = decodeSignatureValue(signature.value, signature.suite);\n try {\n return verifyMessage({\n address: pkh.address,\n message: { raw: digest },\n signature: bytesToHex(signatureBytes),\n });\n } catch {\n throw new SignatureVerificationError(\"EIP-191 signature verification failed\");\n }\n }\n\n throw new UnsupportedSignatureSuiteError(`unsupported signature suite: ${signature.suite}`);\n}\n\nfunction ed25519PublicKeyFromDidKey(did: string): Uint8Array {\n if (!did.startsWith(\"did:key:\")) {\n throw new SignatureMaterialError(\"Ed25519 signerDid must be did:key\");\n }\n const identifier = did.slice(\"did:key:\".length);\n if (!identifier.startsWith(\"z\")) {\n throw new SignatureMaterialError(\"did:key must use base58btc multibase\");\n }\n let bytes: Uint8Array;\n try {\n bytes = bases.base58btc.decode(identifier);\n } catch {\n throw new SignatureMaterialError(\"did:key signerDid is undecodable\");\n }\n if (bytes.length === 34 && bytes[0] === 0xed && bytes[1] === 0x01) {\n return bytes.slice(2);\n }\n throw new SignatureMaterialError(\"did:key signerDid is not an Ed25519 key\");\n}\n\nfunction parseDidPkh(did: string): { address: `0x${string}` } {\n let parsed: ReturnType<typeof parsePkhDid>;\n try {\n parsed = parsePkhDid(did);\n } catch {\n throw new SignatureMaterialError(\"did:pkh signerDid is undecodable\");\n }\n if (!parsed) {\n throw new SignatureMaterialError(\"EIP-191 signerDid must be did:pkh\");\n }\n return { address: parsed.address };\n}\n\nfunction decodeSignatureValue(value: string, suite: SignatureSuite): Uint8Array {\n if (value.length === 0 || !BASE64URL_RE.test(value) || value.includes(\"=\")) {\n throw new SignatureMaterialError(\"signature value must be base64url without padding\");\n }\n const bytes = base64UrlDecode(value);\n if (suite === ED25519_JCS_SIGNATURE_SUITE && bytes.length !== 64) {\n throw new SignatureMaterialError(\"Ed25519 signature must be 64 bytes\");\n }\n if (suite === EIP191_JCS_SIGNATURE_SUITE) {\n if (bytes.length !== 65) {\n throw new SignatureMaterialError(\"EIP-191 signature must be 65 bytes\");\n }\n const v = bytes[64];\n if (v !== 27 && v !== 28) {\n throw new SignatureMaterialError(\"EIP-191 signature recovery id must be 27 or 28\");\n }\n }\n return bytes;\n}\n\nfunction encodeSignatureValue(\n value: Uint8Array | string,\n suite: SignatureSuite,\n): string {\n if (typeof value === \"string\") {\n const encoded = value.startsWith(\"0x\")\n ? base64UrlEncode(hexToBytes(value))\n : value;\n decodeSignatureValue(encoded, suite);\n return encoded;\n }\n const encoded = base64UrlEncode(value);\n decodeSignatureValue(encoded, suite);\n return encoded;\n}\n\nfunction stripOwnIdAndSignature(\n object: JsonObject,\n descriptor: ObjectDescriptor,\n): JsonObject {\n const output = Object.create(null) as { [key: string]: JsonValue };\n for (const [key, value] of Object.entries(object)) {\n if (key === descriptor.idField || key === \"signature\") {\n continue;\n }\n output[key] = value;\n }\n return output;\n}\n\nfunction descriptorForUnsigned(input: unknown): ObjectDescriptor {\n const object = expectJsonObject(normalizeJson(input), \"$\");\n return descriptorForSchema(requiredString(object, \"schema\", \"$\"));\n}\n\nfunction descriptorForSchema(schema: string): ObjectDescriptor {\n if (schema === POLICY_SCHEMA) return DESCRIPTORS.Policy;\n if (schema === POLICY_STATUS_SCHEMA) return DESCRIPTORS.PolicyStatus;\n if (schema === POLICY_ENGINE_RECORD_SCHEMA) return DESCRIPTORS.PolicyEngineRecord;\n throw new SignedObjectSchemaError(`unsupported signed-object schema: ${schema}`);\n}\n\nfunction expectJsonObject(input: unknown, path: string): JsonObject {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new SignedObjectSchemaError(`${path} must be an object`);\n }\n return input as JsonObject;\n}\n\nfunction assertExactKeys(object: JsonObject, allowed: readonly string[], path: string): void {\n const allowedSet = new Set(allowed);\n for (const key of Object.keys(object)) {\n if (!allowedSet.has(key)) {\n throw new SignedObjectSchemaError(`${path} has unknown field ${key}`);\n }\n }\n}\n\nfunction requiredValue(object: JsonObject, key: string, path: string): JsonValue {\n if (!hasOwn(object, key)) {\n throw new SignedObjectSchemaError(`${path}.${key} is required`);\n }\n return object[key];\n}\n\nfunction requiredString(object: JsonObject, key: string, path: string): string {\n return requireStringType(requiredValue(object, key, path), `${path}.${key}`);\n}\n\nfunction optionalString(object: JsonObject, key: string, path: string): void {\n if (!hasOwn(object, key)) {\n return;\n }\n requireStringType(requiredValue(object, key, path), `${path}.${key}`);\n}\n\nfunction requireStringType(value: JsonValue, path: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new SignedObjectSchemaError(`${path} must be a non-empty string`);\n }\n return value;\n}\n\nfunction optionalBoolean(object: JsonObject, key: string, path: string): void {\n if (!hasOwn(object, key)) {\n return;\n }\n if (typeof requiredValue(object, key, path) !== \"boolean\") {\n throw new SignedObjectSchemaError(`${path}.${key} must be a boolean`);\n }\n}\n\nfunction requiredInteger(\n object: JsonObject,\n key: string,\n path: string,\n minimum: number,\n): number {\n const value = requiredValue(object, key, path);\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < minimum) {\n throw new SignedObjectSchemaError(\n `${path}.${key} must be an integer >= ${minimum}`,\n );\n }\n return value;\n}\n\nfunction requiredArray(\n object: JsonObject,\n key: string,\n path: string,\n minimum: number,\n): readonly JsonValue[] {\n const value = requiredValue(object, key, path);\n if (!Array.isArray(value) || value.length < minimum) {\n throw new SignedObjectSchemaError(\n `${path}.${key} must be an array with at least ${minimum} item(s)`,\n );\n }\n return value;\n}\n\nfunction requiredStringArray(\n object: JsonObject,\n key: string,\n path: string,\n check?: (value: string, path: string) => void,\n): void {\n const values = requiredArray(object, key, path, 0);\n for (let index = 0; index < values.length; index++) {\n const itemPath = `${path}.${key}[${index}]`;\n const value = requireStringType(values[index], itemPath);\n check?.(value, itemPath);\n }\n}\n\nfunction requiredDateString(object: JsonObject, key: string, path: string): void {\n assertRfc3339(requiredString(object, key, path), `${path}.${key}`);\n}\n\nfunction optionalDateString(object: JsonObject, key: string, path: string): void {\n if (!hasOwn(object, key)) {\n return;\n }\n assertRfc3339(requiredString(object, key, path), `${path}.${key}`);\n}\n\nfunction assertRfc3339(value: string, path: string): void {\n const match = value.match(\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/,\n );\n if (!match) {\n throw new SignedObjectSchemaError(`${path} must be strict RFC 3339`);\n }\n const parsed = Date.parse(value);\n if (Number.isNaN(parsed)) {\n throw new SignedObjectSchemaError(`${path} must be a parseable RFC 3339 timestamp`);\n }\n const canonical = new Date(parsed).toISOString().replace(\".000Z\", \"Z\");\n if (canonical !== value) {\n throw new SignedObjectSchemaError(`${path} must be a normalizable RFC 3339 timestamp`);\n }\n}\n\nfunction expectConst<T extends string>(actual: string, expected: T, path: string): T {\n if (actual !== expected) {\n throw new SignedObjectSchemaError(`${path} must be ${expected}`);\n }\n return expected;\n}\n\nfunction expectOneOf<T extends string>(\n actual: string,\n allowed: readonly T[],\n path: string,\n): T {\n for (const value of allowed) {\n if (actual === value) {\n return value;\n }\n }\n throw new SignedObjectSchemaError(`${path} has unsupported value ${actual}`);\n}\n\nfunction hasOwn(object: JsonObject, key: string): boolean {\n return objectHasOwn(object, key);\n}\n\nfunction assertSupportedSignatureSuite(suite: string): asserts suite is SignatureSuite {\n if (suite !== ED25519_JCS_SIGNATURE_SUITE && suite !== EIP191_JCS_SIGNATURE_SUITE) {\n throw new UnsupportedSignatureSuiteError(`unsupported signature suite: ${suite}`);\n }\n}\n\nfunction sha256Bytes(bytes: Uint8Array): Uint8Array {\n return sha256(bytes, \"bytes\");\n}\n\nfunction concatBytes(left: Uint8Array, right: Uint8Array): Uint8Array {\n const output = new Uint8Array(left.length + right.length);\n output.set(left, 0);\n output.set(right, left.length);\n return output;\n}\n\nfunction base32LowerNoPad(bytes: Uint8Array): string {\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n bits -= 5;\n output += BASE32_ALPHABET[(buffer >> bits) & 31];\n }\n }\n if (bits > 0) {\n output += BASE32_ALPHABET[(buffer << (5 - bits)) & 31];\n }\n return output;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n const alphabet =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n let output = \"\";\n for (let index = 0; index < bytes.length; index += 3) {\n const a = bytes[index];\n const b = bytes[index + 1];\n const c = bytes[index + 2];\n const triplet = (a << 16) | ((b ?? 0) << 8) | (c ?? 0);\n output += alphabet[(triplet >> 18) & 63];\n output += alphabet[(triplet >> 12) & 63];\n if (index + 1 < bytes.length) {\n output += alphabet[(triplet >> 6) & 63];\n }\n if (index + 2 < bytes.length) {\n output += alphabet[triplet & 63];\n }\n }\n return output;\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n if (value.length % 4 === 1) {\n throw new SignatureMaterialError(\"signature value is not canonical base64url\");\n }\n const alphabet =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n const bytes: number[] = [];\n let buffer = 0;\n let bits = 0;\n for (const char of value) {\n const index = alphabet.indexOf(char);\n if (index < 0) {\n throw new SignatureMaterialError(\"signature value is not base64url\");\n }\n buffer = (buffer << 6) | index;\n bits += 6;\n if (bits >= 8) {\n bits -= 8;\n bytes.push((buffer >> bits) & 0xff);\n }\n }\n const decoded = Uint8Array.from(bytes);\n if (base64UrlEncode(decoded) !== value) {\n throw new SignatureMaterialError(\"signature value is not canonical base64url\");\n }\n return decoded;\n}\n\nfunction hexToBytes(value: string): Uint8Array {\n const hex = value.slice(2);\n if (hex.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(hex)) {\n throw new SignatureMaterialError(\"hex signature must have even length\");\n }\n const output = new Uint8Array(hex.length / 2);\n for (let index = 0; index < output.length; index++) {\n output[index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);\n }\n return output;\n}\n","import { baseX } from './base.js'\n\nexport const base10 = baseX({\n prefix: '9',\n name: 'base10',\n alphabet: '0123456789'\n})\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') { return o }\n if (o instanceof ArrayBuffer) { return new Uint8Array(o) }\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n prefix: 'f',\n name: 'base16',\n alphabet: '0123456789abcdef',\n bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n prefix: 'F',\n name: 'base16upper',\n alphabet: '0123456789ABCDEF',\n bitsPerChar: 4\n})\n","import { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n prefix: '0',\n name: 'base2',\n alphabet: '01',\n bitsPerChar: 1\n})\n","import { from } from './base.js'\n\nconst alphabet = Array.from('🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂')\nconst alphabetBytesToChars: string[] = (alphabet.reduce<string[]>((p, c, i) => { p[i] = c; return p }, ([])))\nconst alphabetCharsToBytes: number[] = (alphabet.reduce<number[]>((p, c, i) => {\n const codePoint = c.codePointAt(0)\n if (codePoint == null) {\n throw new Error(`Invalid character: ${c}`)\n }\n p[codePoint] = i\n return p\n}, ([])))\n\nfunction encode (data: Uint8Array): string {\n return data.reduce((p, c) => {\n p += alphabetBytesToChars[c]\n return p\n }, '')\n}\n\nfunction decode (str: string): Uint8Array {\n const byts = []\n for (const char of str) {\n const codePoint = char.codePointAt(0)\n if (codePoint == null) {\n throw new Error(`Invalid character: ${char}`)\n }\n const byt = alphabetCharsToBytes[codePoint]\n if (byt == null) {\n throw new Error(`Non-base256emoji character: ${char}`)\n }\n byts.push(byt)\n }\n return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n prefix: '🚀',\n name: 'base256emoji',\n encode,\n decode\n})\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n","import { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n prefix: '7',\n name: 'base8',\n alphabet: '01234567',\n bitsPerChar: 3\n})\n","import { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n prefix: '\\x00',\n name: 'identity',\n encode: (buf) => toString(buf),\n decode: (str) => fromString(str)\n})\n","import type { ArrayBufferView, ByteView } from './interface.js'\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\nexport function encode <T> (node: T): ByteView<T> {\n return textEncoder.encode(JSON.stringify(node))\n}\n\nexport function decode <T> (data: ByteView<T> | ArrayBufferView<T>): T {\n return JSON.parse(textDecoder.decode(data))\n}\n","import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\nimport type { DigestOptions } from './hasher.js'\n\nconst code: 0x0 = 0x0\nconst name = 'identity'\n\nconst encode: (input: Uint8Array) => Uint8Array = coerce\n\nfunction digest (input: Uint8Array, options?: DigestOptions): Digest.Digest<typeof code, number> {\n if (options?.truncate != null && options.truncate !== input.byteLength) {\n if (options.truncate < 0 || options.truncate > input.byteLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${input.byteLength}`)\n }\n\n input = input.subarray(0, options.truncate)\n }\n\n return Digest.create(code, encode(input))\n}\n\nexport const identity = { code, name, encode, digest }\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","/* global crypto */\n\nimport { from } from './hasher.js'\n\nfunction sha (name: AlgorithmIdentifier): (data: Uint8Array) => Promise<Uint8Array> {\n return async data => new Uint8Array(await crypto.subtle.digest(name, data))\n}\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: sha('SHA-512')\n})\n","import * as Digest from './digest.js'\nimport type { MultihashHasher } from './interface.js'\n\ntype Await<T> = Promise<T> | T\n\nconst DEFAULT_MIN_DIGEST_LENGTH = 20\n\nexport interface HasherInit <Name extends string, Code extends number> {\n name: Name\n code: Code\n encode(input: Uint8Array): Await<Uint8Array>\n\n /**\n * The minimum length a hash is allowed to be truncated to in bytes\n *\n * @default 20\n */\n minDigestLength?: number\n\n /**\n * The maximum length a hash is allowed to be truncated to in bytes. If not\n * specified it will be inferred from the length of the digest.\n */\n maxDigestLength?: number\n}\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode, minDigestLength, maxDigestLength }: HasherInit<Name, Code>): Hasher<Name, Code> {\n return new Hasher(name, code, encode, minDigestLength, maxDigestLength)\n}\n\nexport interface DigestOptions {\n /**\n * Truncate the returned digest to this number of bytes.\n *\n * This may cause the digest method to throw/reject if the passed value is\n * greater than the digest length or below a threshold under which the risk of\n * hash collisions is significant.\n *\n * The actual value of this threshold can depend on the hashing algorithm in\n * use.\n */\n truncate?: number\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n readonly name: Name\n readonly code: Code\n readonly encode: (input: Uint8Array) => Await<Uint8Array>\n readonly minDigestLength: number\n readonly maxDigestLength?: number\n\n constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array>, minDigestLength?: number, maxDigestLength?: number) {\n this.name = name\n this.code = code\n this.encode = encode\n this.minDigestLength = minDigestLength ?? DEFAULT_MIN_DIGEST_LENGTH\n this.maxDigestLength = maxDigestLength\n }\n\n digest (input: Uint8Array, options?: DigestOptions): Await<Digest.Digest<Code, number>> {\n if (options?.truncate != null) {\n if (options.truncate < this.minDigestLength) {\n throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`)\n }\n\n if (this.maxDigestLength != null && options.truncate > this.maxDigestLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)\n }\n }\n\n if (input instanceof Uint8Array) {\n const result = this.encode(input)\n\n if (result instanceof Uint8Array) {\n return createDigest(result, this.code, options?.truncate)\n }\n\n return result.then(digest => createDigest(digest, this.code, options?.truncate))\n } else {\n throw Error('Unknown type, must be binary type')\n /* c8 ignore next 1 */\n }\n }\n}\n\n/**\n * Create a Digest from the passed uint8array and code, optionally truncating it\n * first.\n */\nfunction createDigest <Code extends number> (digest: Uint8Array, code: Code, truncate?: number): Digest.Digest<Code, number> {\n if (truncate != null && truncate !== digest.byteLength) {\n if (truncate > digest.byteLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${digest.byteLength}`)\n }\n\n digest = digest.subarray(0, truncate)\n }\n\n return Digest.create(code, digest)\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nexport const bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nexport const hashes = { ...sha2, ...identity }\nexport const codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes }\n","import { getAddress, isAddress, recoverMessageAddress, type Hex } from \"viem\";\n\nexport type CanonicalAddress = `0x${string}`;\n\nexport interface PkhDidParts {\n method: \"pkh\";\n namespace: \"eip155\";\n chainId: number;\n address: CanonicalAddress;\n}\n\nexport interface DidEqualsOptions {\n ignoreFragment?: boolean;\n}\n\nexport interface DidCacheKeyOptions {\n preserveFragment?: boolean;\n}\n\nexport class IdentityParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"IdentityParseError\";\n }\n}\n\nconst PKH_DID_RE = /^did:pkh:eip155:(\\d+):(0x[a-fA-F0-9]{40})$/;\nconst DID_RE = /^did:[a-z0-9]+:.+$/;\n\nfunction splitDidUrl(input: string): { did: string; fragment: string } {\n const fragmentIndex = input.indexOf(\"#\");\n if (fragmentIndex < 0) {\n return { did: input, fragment: \"\" };\n }\n return {\n did: input.slice(0, fragmentIndex),\n fragment: input.slice(fragmentIndex),\n };\n}\n\nfunction assertValidChainId(chainId: number): void {\n if (!Number.isSafeInteger(chainId) || chainId <= 0) {\n throw new IdentityParseError(`Invalid EIP-155 chain ID: ${chainId}`);\n }\n}\n\nexport function isEvmAddress(input: string): boolean {\n return isAddress(input, { strict: false });\n}\n\nexport function canonicalizeAddress(address: string): CanonicalAddress {\n if (!isEvmAddress(address)) {\n throw new IdentityParseError(`Invalid EVM address: ${address}`);\n }\n return getAddress(address) as CanonicalAddress;\n}\n\n/** Verify EIP-191 evidence over the exact UTF-8 message and recover its signer. */\nexport async function verifyEip191MessageSignature(\n message: string,\n signature: string,\n expectedAddress: string,\n): Promise<boolean> {\n if (!/^0x[0-9a-fA-F]{130}$/.test(signature)) return false;\n try {\n const recovered = await recoverMessageAddress({\n message,\n signature: signature as Hex,\n });\n return canonicalizeAddress(recovered) === canonicalizeAddress(expectedAddress);\n } catch {\n return false;\n }\n}\n\nexport function addressStorageKey(address: string): CanonicalAddress {\n return canonicalizeAddress(address).toLowerCase() as CanonicalAddress;\n}\n\nexport function pkhDid(address: string, chainId: number = 1): string {\n assertValidChainId(chainId);\n return `did:pkh:eip155:${chainId}:${canonicalizeAddress(address)}`;\n}\n\nexport function parsePkhDid(did: string): PkhDidParts | null {\n const match = did.match(PKH_DID_RE);\n if (!match) return null;\n\n const chainId = Number(match[1]);\n assertValidChainId(chainId);\n\n return {\n method: \"pkh\",\n namespace: \"eip155\",\n chainId,\n address: canonicalizeAddress(match[2]),\n };\n}\n\nexport function canonicalizeDid(did: string): string {\n const pkh = parsePkhDid(did);\n if (pkh) {\n return pkhDid(pkh.address, pkh.chainId);\n }\n if (DID_RE.test(did)) {\n return did;\n }\n throw new IdentityParseError(`Invalid DID: ${did}`);\n}\n\nexport function canonicalizeDidUrl(didUrl: string): string {\n const { did, fragment } = splitDidUrl(didUrl);\n return `${canonicalizeDid(did)}${fragment}`;\n}\n\nexport function principalDid(didUrl: string): string {\n return canonicalizeDid(splitDidUrl(didUrl).did);\n}\n\nexport function didEquals(a: string, b: string, options: DidEqualsOptions = {}): boolean {\n const canonicalize = options.ignoreFragment ? principalDid : canonicalizeDidUrl;\n return canonicalize(a) === canonicalize(b);\n}\n\nexport function principalDidEquals(a: string, b: string): boolean {\n return didEquals(a, b, { ignoreFragment: true });\n}\n\nexport function didCacheKey(input: string, options: DidCacheKeyOptions = {}): string {\n const { did, fragment } = splitDidUrl(input);\n const pkh = parsePkhDid(did);\n const base = pkh\n ? `did:pkh:eip155:${pkh.chainId}:${addressStorageKey(pkh.address)}`\n : canonicalizeDid(did);\n\n return options.preserveFragment ? `${base}${fragment}` : base;\n}\n\nexport function makePkhSpaceId(\n address: string,\n chainId: number,\n name: string,\n): string {\n assertValidChainId(chainId);\n if (!name) {\n throw new IdentityParseError(\"Space name cannot be empty\");\n }\n return `tinycloud:pkh:eip155:${chainId}:${canonicalizeAddress(address)}:${name}`;\n}\n","import {\n POLICY_ENGINE_RECORD_SCHEMA,\n POLICY_SCHEMA,\n createAndSignPolicy,\n createAndSignPolicyEngineRecord,\n validatePolicyEngineRecordSignedShape,\n verifyPolicyEngineRecord,\n type Policy,\n type PolicyEngineRecord,\n type SignedObjectSigner,\n type UnsignedPolicyEngineRecord,\n} from \"./signed-object\";\nimport {\n PolicyCapabilityError,\n normalizePolicyCapability,\n type JsonObject,\n type PolicyCapability,\n} from \"./capability\";\nimport { normalizeJson, type JsonValue } from \"./jcs\";\nimport { SignedObjectProfileError, SignedObjectSchemaError } from \"./errors\";\n\nexport const TRANSCRIPT_SHARE_BOOTSTRAP_SCHEMA =\n \"xyz.tinycloud.exchange/transcript-bootstrap/v0\" as const;\nexport const OWNER_NODE_ENDPOINT_SCHEMA =\n \"xyz.tinycloud.exchange/owner-node-endpoint/v1\" as const;\nexport const POLICY_VERSION_V0 = \"v0\" as const;\nexport const W3C_VC_CREDENTIAL_VERIFIER = \"w3c.vc/credential/v1\" as const;\n\nexport type PolicyAuthoringErrorCode =\n | PolicyCapabilityError[\"code\"]\n | \"policy-authoring-malformed\"\n | \"policy-authoring-unknown-key\"\n | \"policy-engine-record-absent\"\n | \"policy-engine-record-date-invalid\"\n | \"policy-engine-record-signature-invalid\"\n | \"policy-engine-record-audience-mismatch\"\n | \"policy-engine-record-expired\"\n | \"policy-engine-record-owner-mismatch\"\n | \"policy-engine-record-grant-issuer-mismatch\"\n | \"policy-engine-record-policy-version-unsupported\"\n | \"policy-engine-record-evidence-verifier-unsupported\"\n | \"transcript-share-bootstrap-malformed\";\n\nexport class PolicyAuthoringError extends Error {\n public readonly code: PolicyAuthoringErrorCode;\n\n constructor(code: PolicyAuthoringErrorCode, message: string) {\n super(message);\n this.name = \"PolicyAuthoringError\";\n this.code = code;\n }\n}\n\nexport interface CreateTranscriptSharePolicyInput {\n readonly ownerDid: string;\n readonly signingKeyDid: string;\n readonly createdAt: string;\n readonly expiresAt?: string;\n readonly resourceType: string;\n readonly resourceId: string;\n readonly permissionsCeiling: readonly unknown[];\n readonly when: JsonObject;\n readonly grant: JsonObject;\n readonly disclosure?: JsonObject;\n readonly audit?: JsonObject;\n}\n\nexport interface TranscriptShareBootstrap {\n readonly schema: typeof TRANSCRIPT_SHARE_BOOTSTRAP_SCHEMA;\n readonly policyId: string;\n readonly policyEngine: {\n readonly endpoint: string;\n readonly audience: string;\n readonly supportedEvidenceVerifiers: readonly [\n typeof W3C_VC_CREDENTIAL_VERIFIER,\n ];\n readonly signedRecord: PolicyEngineRecord;\n };\n /** Untrusted routing hint. Authority comes only from delegation/invocation validation. */\n readonly ownerNode: {\n readonly schema: typeof OWNER_NODE_ENDPOINT_SCHEMA;\n readonly endpoint: string;\n readonly spaceId: string;\n };\n readonly resourceHint: JsonObject;\n}\n\nexport interface ComposeTranscriptShareBootstrapInput {\n readonly policyId: string;\n readonly policyEngineRecord: PolicyEngineRecord;\n readonly ownerNodeEndpoint: string;\n readonly ownerSpaceId: string;\n readonly resourceHint: JsonObject;\n}\n\nexport interface CreatePolicyEngineRecordInput {\n readonly ownerDid: string;\n readonly endpoint: string;\n readonly audience: string;\n readonly grantIssuerDid: string;\n readonly expiresAt: string;\n readonly supportedPolicyVersions?: readonly string[];\n readonly supportedEvidenceVerifiers?: readonly string[];\n}\n\nexport interface VerifyPolicyEngineRecordOptions {\n readonly signedRecord: unknown;\n readonly ownerDid: string;\n readonly audience: string;\n readonly grantIssuerDid: string;\n readonly now: string;\n readonly requiredPolicyVersion?: string;\n readonly requiredEvidenceVerifier?: string;\n}\n\n/**\n * Author a transcript-sharing Policy from already-resolved Listen-adapter\n * PolicyCapability JSON. Manifest PermissionEntry shapes are refused here; the\n * SDK does not expand or invent permissions while signing authority-bearing\n * objects.\n */\nexport async function createAndSignTranscriptSharePolicy(\n input: CreateTranscriptSharePolicyInput,\n signer: SignedObjectSigner,\n): Promise<Policy> {\n const normalized = expectObject(input, \"$\", \"policy-authoring-malformed\");\n assertExactKeys(\n normalized,\n [\n \"ownerDid\",\n \"signingKeyDid\",\n \"createdAt\",\n \"expiresAt\",\n \"resourceType\",\n \"resourceId\",\n \"permissionsCeiling\",\n \"when\",\n \"grant\",\n \"disclosure\",\n \"audit\",\n ],\n \"$\",\n );\n const permissions = requiredArray(normalized, \"permissionsCeiling\", \"$\");\n if (permissions.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n \"$.permissionsCeiling must not be empty\",\n );\n }\n const ceiling: PolicyCapability[] = [];\n for (let index = 0; index < permissions.length; index++) {\n ceiling.push(\n wrapCapabilityError(() => normalizePolicyCapability(permissions[index])),\n );\n }\n return createAndSignPolicy(\n {\n schema: POLICY_SCHEMA,\n ownerDid: requiredString(normalized, \"ownerDid\", \"$\"),\n signingKeyDid: requiredString(normalized, \"signingKeyDid\", \"$\"),\n createdAt: requiredString(normalized, \"createdAt\", \"$\"),\n ...(hasOwn(normalized, \"expiresAt\")\n ? { expiresAt: requiredString(normalized, \"expiresAt\", \"$\") }\n : {}),\n resource: {\n resourceType: requiredString(normalized, \"resourceType\", \"$\"),\n resourceId: requiredString(normalized, \"resourceId\", \"$\"),\n permissionsCeiling: ceiling,\n },\n when: requiredObject(normalized, \"when\", \"$\"),\n grant: requiredObject(normalized, \"grant\", \"$\"),\n ...(hasOwn(normalized, \"disclosure\")\n ? { disclosure: requiredObject(normalized, \"disclosure\", \"$\") }\n : {}),\n ...(hasOwn(normalized, \"audit\")\n ? { audit: requiredObject(normalized, \"audit\", \"$\") }\n : {}),\n },\n signer,\n ).catch((error) => {\n throw wrapSignedObjectError(error);\n });\n}\n\nexport function createUnsignedPolicyEngineRecord(\n input: CreatePolicyEngineRecordInput,\n): UnsignedPolicyEngineRecord {\n const normalized = expectObject(input, \"$\", \"policy-authoring-malformed\");\n assertExactKeys(\n normalized,\n [\n \"ownerDid\",\n \"endpoint\",\n \"audience\",\n \"grantIssuerDid\",\n \"expiresAt\",\n \"supportedPolicyVersions\",\n \"supportedEvidenceVerifiers\",\n ],\n \"$\",\n );\n const supportedPolicyVersions = hasOwn(normalized, \"supportedPolicyVersions\")\n ? requiredStringArray(normalized, \"supportedPolicyVersions\", \"$\")\n : [POLICY_VERSION_V0];\n validateSupportedPolicyVersions(\n supportedPolicyVersions,\n \"$.supportedPolicyVersions\",\n );\n const supportedEvidenceVerifiers = hasOwn(\n normalized,\n \"supportedEvidenceVerifiers\",\n )\n ? requiredStringArray(normalized, \"supportedEvidenceVerifiers\", \"$\")\n : [W3C_VC_CREDENTIAL_VERIFIER];\n validateSupportedEvidenceVerifiers(\n supportedEvidenceVerifiers,\n \"$.supportedEvidenceVerifiers\",\n );\n const expiresAt = fieldString(\n normalized,\n \"expiresAt\",\n \"$\",\n \"policy-engine-record-date-invalid\",\n );\n parseStrictRfc3339(expiresAt, \"$.expiresAt\");\n\n return {\n schema: POLICY_ENGINE_RECORD_SCHEMA,\n ownerDid: requiredString(normalized, \"ownerDid\", \"$\"),\n endpoint: validatePolicyEngineEndpoint(\n requiredString(normalized, \"endpoint\", \"$\"),\n ),\n audience: requiredString(normalized, \"audience\", \"$\"),\n supportedPolicyVersions,\n supportedEvidenceVerifiers,\n grantIssuerDid: requiredString(normalized, \"grantIssuerDid\", \"$\"),\n expiresAt,\n };\n}\n\nexport async function createAndSignRequesterPolicyEngineRecord(\n input: CreatePolicyEngineRecordInput,\n signer: SignedObjectSigner,\n): Promise<PolicyEngineRecord> {\n return createAndSignPolicyEngineRecord(\n createUnsignedPolicyEngineRecord(input),\n signer,\n ).catch((error) => {\n throw wrapSignedObjectError(error);\n });\n}\n\n/**\n * Compose the SDK-level transcript-share bootstrap record. This record is not\n * an invitation and is not authority; it only tells a requester where to ask\n * and which policy id to reference.\n */\nexport function composeTranscriptShareBootstrap(\n input: ComposeTranscriptShareBootstrapInput,\n): TranscriptShareBootstrap {\n const normalized = expectObject(\n input,\n \"$\",\n \"transcript-share-bootstrap-malformed\",\n );\n assertExactKeys(\n normalized,\n [\n \"policyId\",\n \"policyEngineRecord\",\n \"ownerNodeEndpoint\",\n \"ownerSpaceId\",\n \"resourceHint\",\n ],\n \"$\",\n );\n const signedRecord = expectPolicyEngineRecord(\n requiredValue(normalized, \"policyEngineRecord\", \"$\"),\n );\n if (\n !signedRecord.supportedEvidenceVerifiers.includes(\n W3C_VC_CREDENTIAL_VERIFIER,\n )\n ) {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n \"policy engine record does not support the bootstrap evidence verifier\",\n );\n }\n return {\n schema: TRANSCRIPT_SHARE_BOOTSTRAP_SCHEMA,\n policyId: requiredString(normalized, \"policyId\", \"$\"),\n policyEngine: {\n endpoint: signedRecord.endpoint,\n audience: signedRecord.audience,\n supportedEvidenceVerifiers: [W3C_VC_CREDENTIAL_VERIFIER],\n signedRecord,\n },\n ownerNode: {\n schema: OWNER_NODE_ENDPOINT_SCHEMA,\n endpoint: validateOwnerNodeEndpoint(\n requiredString(normalized, \"ownerNodeEndpoint\", \"$\"),\n ),\n spaceId: requiredString(normalized, \"ownerSpaceId\", \"$\"),\n },\n resourceHint: requiredObject(normalized, \"resourceHint\", \"$\"),\n };\n}\n\nfunction validateOwnerNodeEndpoint(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n \"$.ownerNodeEndpoint must be a URL\",\n );\n }\n if (\n url.protocol !== \"https:\" ||\n url.username !== \"\" ||\n url.password !== \"\" ||\n url.hash !== \"\" ||\n url.search !== \"\"\n ) {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n \"$.ownerNodeEndpoint must be an HTTPS URL without credentials, query, or fragment\",\n );\n }\n return url.toString().replace(/\\/$/, \"\");\n}\n\nfunction validatePolicyEngineEndpoint(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n \"$.endpoint must be a URL\",\n );\n }\n if (\n url.protocol !== \"https:\" ||\n url.username !== \"\" ||\n url.password !== \"\" ||\n url.hash !== \"\" ||\n url.search !== \"\"\n ) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n \"$.endpoint must be an HTTPS URL without credentials, query, or fragment\",\n );\n }\n return url.toString().replace(/\\/$/, \"\");\n}\n\n/**\n * Requester-side authentication gate for policy-engine endpoints. A requester\n * MUST NOT send credential evidence or call /resolve unless this verification\n * succeeds.\n */\nexport async function verifyPolicyEngineRecordForRequester(\n options: VerifyPolicyEngineRecordOptions,\n): Promise<PolicyEngineRecord> {\n const normalized = expectObject(options, \"$\", \"policy-authoring-malformed\");\n assertExactKeys(\n normalized,\n [\n \"signedRecord\",\n \"ownerDid\",\n \"audience\",\n \"grantIssuerDid\",\n \"now\",\n \"requiredPolicyVersion\",\n \"requiredEvidenceVerifier\",\n ],\n \"$\",\n );\n if (!hasOwn(normalized, \"signedRecord\")) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-absent\",\n \"$.signedRecord must be present\",\n );\n }\n const signedRecord = normalized[\"signedRecord\"];\n if (\n signedRecord === null ||\n typeof signedRecord !== \"object\" ||\n Array.isArray(signedRecord)\n ) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-absent\",\n \"$.signedRecord must be present\",\n );\n }\n const recordObject = signedRecord as JsonObject;\n const expiresAt = fieldString(\n recordObject,\n \"expiresAt\",\n \"$.signedRecord\",\n \"policy-engine-record-date-invalid\",\n );\n const now = fieldString(\n normalized,\n \"now\",\n \"$\",\n \"policy-engine-record-date-invalid\",\n );\n const expiresMs = parseStrictRfc3339(expiresAt, \"$.signedRecord.expiresAt\");\n const nowMs = parseStrictRfc3339(now, \"$.now\");\n if (expiresMs <= nowMs) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-expired\",\n \"$.signedRecord.expiresAt is expired\",\n );\n }\n\n let verified: PolicyEngineRecord;\n try {\n verified = (await verifyPolicyEngineRecord(recordObject)).object;\n } catch (error) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-signature-invalid\",\n error instanceof Error ? error.message : String(error),\n );\n }\n if (verified.signature.signerDid !== verified.ownerDid) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-signature-invalid\",\n \"$.signedRecord.signature.signerDid must match ownerDid for the direct-owner requester profile\",\n );\n }\n\n const expectedOwnerDid = requiredString(normalized, \"ownerDid\", \"$\");\n if (verified.ownerDid !== expectedOwnerDid) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-owner-mismatch\",\n \"$.signedRecord.ownerDid does not match\",\n );\n }\n const expectedAudience = requiredString(normalized, \"audience\", \"$\");\n if (verified.audience !== expectedAudience) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-audience-mismatch\",\n \"$.signedRecord.audience does not match\",\n );\n }\n const expectedGrantIssuerDid = requiredString(\n normalized,\n \"grantIssuerDid\",\n \"$\",\n );\n if (verified.grantIssuerDid !== expectedGrantIssuerDid) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-grant-issuer-mismatch\",\n \"$.signedRecord.grantIssuerDid does not match\",\n );\n }\n const requiredPolicyVersion = hasOwn(normalized, \"requiredPolicyVersion\")\n ? requiredString(normalized, \"requiredPolicyVersion\", \"$\")\n : POLICY_VERSION_V0;\n if (!verified.supportedPolicyVersions.includes(requiredPolicyVersion)) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-policy-version-unsupported\",\n \"$.signedRecord.supportedPolicyVersions does not include the required version\",\n );\n }\n const requiredEvidenceVerifier = hasOwn(\n normalized,\n \"requiredEvidenceVerifier\",\n )\n ? requiredString(normalized, \"requiredEvidenceVerifier\", \"$\")\n : W3C_VC_CREDENTIAL_VERIFIER;\n if (!verified.supportedEvidenceVerifiers.includes(requiredEvidenceVerifier)) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-evidence-verifier-unsupported\",\n \"$.signedRecord.supportedEvidenceVerifiers does not include the required verifier\",\n );\n }\n return verified;\n}\n\nfunction expectObject(\n input: unknown,\n path: string,\n code: PolicyAuthoringErrorCode,\n): JsonObject {\n try {\n const normalized = normalizeJson(input);\n if (\n normalized === null ||\n typeof normalized !== \"object\" ||\n Array.isArray(normalized)\n ) {\n throw new PolicyAuthoringError(code, `${path} must be an object`);\n }\n return normalized as JsonObject;\n } catch (error) {\n if (error instanceof PolicyAuthoringError) {\n throw error;\n }\n throw new PolicyAuthoringError(\n code,\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction expectPolicyEngineRecord(input: JsonValue): PolicyEngineRecord {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n \"$.policyEngineRecord must be an object\",\n );\n }\n try {\n return validatePolicyEngineRecordSignedShape(input);\n } catch (error) {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction assertExactKeys(\n object: JsonObject,\n allowed: readonly string[],\n path: string,\n): void {\n const allowedSet = new Set(allowed);\n for (const key of Object.keys(object)) {\n if (!allowedSet.has(key)) {\n throw new PolicyAuthoringError(\n \"policy-authoring-unknown-key\",\n `${path} has unknown field ${key}`,\n );\n }\n }\n}\n\nfunction requiredValue(\n object: JsonObject,\n key: string,\n path: string,\n): JsonValue {\n if (!hasOwn(object, key)) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key} is required`,\n );\n }\n return object[key];\n}\n\nfunction requiredString(object: JsonObject, key: string, path: string): string {\n const value = requiredValue(object, key, path);\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key} must be a non-empty string`,\n );\n }\n return value;\n}\n\nfunction fieldString(\n object: JsonObject,\n key: string,\n path: string,\n code: PolicyAuthoringErrorCode,\n): string {\n if (!hasOwn(object, key)) {\n throw new PolicyAuthoringError(code, `${path}.${key} is required`);\n }\n const value = object[key];\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyAuthoringError(\n code,\n `${path}.${key} must be a non-empty string`,\n );\n }\n return value;\n}\n\nfunction requiredObject(\n object: JsonObject,\n key: string,\n path: string,\n): JsonObject {\n const value = requiredValue(object, key, path);\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key} must be an object`,\n );\n }\n return value as JsonObject;\n}\n\nfunction requiredArray(\n object: JsonObject,\n key: string,\n path: string,\n): readonly JsonValue[] {\n const value = requiredValue(object, key, path);\n if (!Array.isArray(value)) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key} must be an array`,\n );\n }\n return value;\n}\n\nfunction requiredStringArray(\n object: JsonObject,\n key: string,\n path: string,\n): string[] {\n const values = requiredArray(object, key, path);\n return values.map((value, index) => {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key}[${index}] must be a non-empty string`,\n );\n }\n return value;\n });\n}\n\nfunction validateSupportedPolicyVersions(\n values: readonly string[],\n path: string,\n): void {\n if (values.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path} must not be empty`,\n );\n }\n for (let index = 0; index < values.length; index++) {\n if (values[index] !== POLICY_VERSION_V0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}[${index}] is unsupported`,\n );\n }\n }\n}\n\nfunction validateSupportedEvidenceVerifiers(\n values: readonly string[],\n path: string,\n): void {\n if (values.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path} must not be empty`,\n );\n }\n for (let index = 0; index < values.length; index++) {\n if (values[index] !== W3C_VC_CREDENTIAL_VERIFIER) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}[${index}] is unsupported`,\n );\n }\n }\n}\n\nfunction wrapCapabilityError<T>(fn: () => T): T {\n try {\n return fn();\n } catch (error) {\n if (error instanceof PolicyCapabilityError) {\n throw new PolicyAuthoringError(error.code, error.message);\n }\n throw error;\n }\n}\n\nfunction wrapSignedObjectError(error: unknown): Error {\n if (error instanceof PolicyAuthoringError) {\n return error;\n }\n if (\n error instanceof SignedObjectSchemaError ||\n error instanceof SignedObjectProfileError\n ) {\n return new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n error.message,\n );\n }\n return new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n error instanceof Error ? error.message : String(error),\n );\n}\n\nfunction parseStrictRfc3339(value: string, path: string): number {\n const match = value.match(\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(\\.\\d+)?Z$/,\n );\n if (!match) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-date-invalid\",\n `${path} must be strict RFC 3339`,\n );\n }\n const parsed = Date.parse(value);\n if (Number.isNaN(parsed)) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-date-invalid\",\n `${path} must be parseable`,\n );\n }\n const canonical = new Date(parsed).toISOString().replace(\".000Z\", \"Z\");\n if (canonical !== value) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-date-invalid\",\n `${path} must be normalizable`,\n );\n }\n return parsed;\n}\n\nconst objectHasOwn: (object: object, propertyKey: PropertyKey) => boolean =\n (\n Object as ObjectConstructor & {\n hasOwn?: (object: object, propertyKey: PropertyKey) => boolean;\n }\n ).hasOwn ??\n (Object.prototype.hasOwnProperty.call.bind(\n Object.prototype.hasOwnProperty,\n ) as (object: object, propertyKey: PropertyKey) => boolean);\n\nfunction hasOwn(object: JsonObject, key: string): boolean {\n return objectHasOwn(object, key);\n}\n","import { sha256 } from \"@noble/hashes/sha256\";\nimport { blake3 } from \"@noble/hashes/blake3\";\nimport { ed25519 } from \"@noble/curves/ed25519\";\nimport { CID } from \"multiformats/cid\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { z } from \"zod\";\nimport { jcsCanonicalize } from \"./jcs\";\n\nexport const POLICY_V1_SCHEMA = \"xyz.tinycloud.policy/policy/v1\" as const;\nexport const POLICY_CAPABILITY_V1_SCHEMA =\n \"xyz.tinycloud.policy/capability/v1\" as const;\nexport const POLICY_ENFORCEMENT_DELEGATION_V2_SCHEMA =\n \"xyz.tinycloud.policy/enforcement-delegation/v2\" as const;\nexport const ATTESTED_ENFORCER_BINDING_V2_SCHEMA =\n \"xyz.tinycloud.policy/attested-enforcer/v2\" as const;\nexport const ROOT_STATUS_CHECKPOINT_V1_SCHEMA =\n \"xyz.tinycloud.policy/root-status/v1\" as const;\nexport const ROOT_REVOCATION_V1_SCHEMA =\n \"xyz.tinycloud.policy/root-revocation/v1\" as const;\nexport const POLICY_SESSION_UCAN_V1_PROFILE = \"policy-session-ucan/v1\" as const;\n\nexport const POLICY_V1_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nexport const POLICY_CAPABILITY_V1_DOMAIN =\n \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nexport const CONTENT_SOURCE_V1_DOMAIN =\n \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nexport const NATIVE_PROJECTION_V1_DOMAIN =\n \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nexport const ROOT_STATUS_V1_DOMAIN =\n \"xyz.tinycloud.policy/RootStatusCheckpoint/v1\\0\";\nexport const ROOT_STATUS_RENEWAL_V1_DOMAIN =\n \"xyz.tinycloud.policy/RootStatusRenewal/v1\\0\";\nexport const ROOT_REVOCATION_V1_DOMAIN =\n \"xyz.tinycloud.policy/RootRevocation/v1\\0\";\n\nexport const LAST_V2_CREATE_AT = \"2026-09-30T00:00:00Z\" as const;\nexport const MAX_LEGACY_ENVELOPE_EXPIRES_AT = \"2026-12-29T00:00:00Z\" as const;\nexport const LAST_V2_READ_AT = \"2027-01-05T00:00:00Z\" as const;\n\nexport type UnifiedResourceSelector = \"exact\" | \"prefix\";\n\nexport interface UnifiedKvCapability {\n readonly kind: \"kv\";\n readonly resource: string;\n readonly selector: UnifiedResourceSelector;\n readonly actions: readonly (\n | \"tinycloud.kv/get\"\n | \"tinycloud.kv/list\"\n | \"tinycloud.kv/metadata\"\n | \"tinycloud.kv/put\"\n )[];\n}\n\nexport interface UnifiedEncryptionCapability {\n readonly kind: \"encryption\";\n readonly resource: string;\n readonly action: \"tinycloud.encryption/decrypt\";\n}\n\nexport type UnifiedPolicyCapability =\n | UnifiedKvCapability\n | UnifiedEncryptionCapability;\n\nexport interface UnifiedNativeCapability {\n readonly service: \"tinycloud.kv\" | \"tinycloud.encryption\";\n readonly space: string;\n readonly path: string;\n readonly actions: readonly string[];\n readonly caveat?: Readonly<Record<string, string>>;\n}\n\nexport interface UnifiedContentSource {\n readonly shareId: string;\n readonly kvResource: string;\n readonly selector: UnifiedResourceSelector;\n readonly encryptionNetwork: string;\n readonly encryptedSymmetricKeyDigestHex: string;\n readonly keyVersion: number;\n readonly mode: \"mutable\" | \"immutable\";\n readonly initialCiphertextDigestHex?: string;\n}\n\nexport interface UnifiedPolicyV1 {\n readonly schema: typeof POLICY_V1_SCHEMA;\n readonly policyId: string;\n readonly ownerDid: string;\n readonly createdAt: string;\n readonly expiresAt?: string;\n readonly contentSource: UnifiedContentSource;\n readonly capabilityCeiling: readonly UnifiedPolicyCapability[];\n readonly signature: {\n readonly suite: string;\n readonly signerDid: string;\n readonly value: string;\n };\n}\n\nexport interface PolicySessionUcanV1 {\n readonly authorization: string;\n readonly cid: string;\n readonly iss: string;\n readonly aud: string;\n readonly prf: readonly [string, string];\n readonly att: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly nbf: number;\n readonly exp: number;\n readonly nnc: string;\n readonly fact: Readonly<Record<string, unknown>>;\n}\n\nexport interface PolicyChallengeV3 {\n readonly challengeId: string;\n readonly nonce: string;\n readonly policyCid: string;\n readonly recipientDid: string;\n readonly expiresAt?: string;\n readonly nodeAudience?: string;\n readonly [key: string]: unknown;\n}\n\nexport async function requestPolicyChallengeV3(input: {\n readonly nodeOrigin: string;\n readonly policyCid: string;\n readonly recipientDid: string;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly fetch?: typeof fetch;\n}): Promise<PolicyChallengeV3> {\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const response = await fetchFn(new URL(\"/share/v3/policy/challenges\", input.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ policyCid: input.policyCid, recipientDid: input.recipientDid, requestedCapabilities: input.requestedCapabilities.map(normalizeUnifiedPolicyCapability) }),\n });\n if (!response.ok) throw new Error(`policy challenge rejected (${response.status})`);\n const value = object(await response.json(), \"policy challenge\") as PolicyChallengeV3;\n if (typeof value.challengeId !== \"string\" || typeof value.nonce !== \"string\" || value.policyCid !== input.policyCid || value.recipientDid !== input.recipientDid)\n throw new Error(\"policy challenge binding is invalid\");\n return value;\n}\n\nexport async function mintPolicySessionV3(input: {\n readonly nodeOrigin: string;\n readonly policyCid: string;\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly recipientDid: string;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly expectedFacts?: Readonly<Record<string, string | number>>;\n readonly claim: Readonly<Record<string, unknown>>;\n readonly presentation: Readonly<Record<string, unknown>>;\n readonly challenge?: PolicyChallengeV3;\n readonly fetch?: typeof fetch;\n}): Promise<PolicySessionUcanV1> {\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const challenge = input.challenge ?? await requestPolicyChallengeV3(input);\n if (challenge.policyCid !== input.policyCid || challenge.recipientDid !== input.recipientDid)\n throw new Error(\"policy challenge binding is invalid\");\n const response = await fetchFn(new URL(\"/share/v3/policy/delegations\", input.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ policyCid: input.policyCid, challengeId: challenge.challengeId, nonce: challenge.nonce, claim: input.claim, presentation: input.presentation }),\n });\n if (!response.ok) throw new Error(`policy delegation rejected (${response.status})`);\n const value = object(await response.json(), \"policy delegation\");\n if (value.admitted !== true || typeof value.sessionCid !== \"string\" || typeof value.authorization !== \"string\")\n throw new Error(\"policy delegation response is invalid\");\n const session = parsePolicySessionUcan(value.authorization, [input.policyRootCid, input.enforcementRootCid]);\n const expectedAttenuation = compactAttenuationForPolicyCapabilities(input.requestedCapabilities);\n if (session.cid !== value.sessionCid\n || session.aud !== input.recipientDid\n || session.fact.policyCid !== input.policyCid\n || session.fact.recipientDid !== input.recipientDid\n || session.fact.policyDelegationCid !== input.policyRootCid\n || session.fact.enforcementDelegationCid !== input.enforcementRootCid\n || jcsCanonicalize(session.att) !== jcsCanonicalize(expectedAttenuation)\n || Object.entries(input.expectedFacts ?? {}).some(([key, expected]) => session.fact[key] !== expected))\n throw new Error(\"policy delegation signed binding is invalid\");\n return session;\n}\n\nexport function compactAttenuationForPolicyCapabilities(\n input: readonly UnifiedPolicyCapability[],\n): Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>> {\n const attenuation: Record<string, Record<string, readonly unknown[]>> = {};\n for (const raw of input) {\n const capability = normalizeUnifiedPolicyCapability(raw);\n if (attenuation[capability.resource] !== undefined)\n throw new Error(\"policy capabilities contain a duplicate resource\");\n attenuation[capability.resource] = capability.kind === \"encryption\"\n ? { [capability.action]: [{}] }\n : Object.fromEntries(capability.actions.map((action) => [action, [{\n type: \"xyz.tinycloud.resource/selector\",\n kind: capability.selector,\n value: capability.resource,\n }]]));\n }\n return attenuation;\n}\n\nexport interface PolicyRootStatusV3 {\n readonly rootCid: string;\n readonly state: \"active\" | \"revoked\";\n readonly checkpoint: Readonly<Record<string, unknown>>;\n readonly revocation?: Readonly<Record<string, unknown>>;\n}\n\nexport function verifyPolicyRootStatusCheckpointV3(input: {\n readonly rootCid: string;\n readonly checkpoint: Readonly<Record<string, unknown>>;\n readonly expectedNodeAudience?: string;\n readonly now?: Date;\n}): boolean {\n const checkpoint = input.checkpoint;\n const allowed = new Set([\"schema\", \"targetCid\", \"targetRole\", \"ownerDid\", \"nodeAudience\", \"state\", \"sequence\", \"checkedAt\", \"freshUntil\", \"revokedAt\", \"revocationCid\", \"previousCheckpointDigestHex\", \"issuerDid\", \"signature\"]);\n if (Object.keys(checkpoint).some((key) => !allowed.has(key))\n || checkpoint.schema !== ROOT_STATUS_CHECKPOINT_V1_SCHEMA\n || checkpoint.targetCid !== input.rootCid\n || (checkpoint.targetRole !== \"policy-authority\" && checkpoint.targetRole !== \"policy-enforcement\")\n || (checkpoint.state !== \"active\" && checkpoint.state !== \"revoked\")\n || typeof checkpoint.ownerDid !== \"string\"\n || typeof checkpoint.nodeAudience !== \"string\"\n || checkpoint.issuerDid !== checkpoint.nodeAudience\n || (input.expectedNodeAudience !== undefined && checkpoint.nodeAudience !== input.expectedNodeAudience)\n || !Number.isInteger(checkpoint.sequence)\n || (checkpoint.sequence as number) < 1\n || typeof checkpoint.checkedAt !== \"string\"\n || typeof checkpoint.freshUntil !== \"string\") return false;\n const checkedAt = Date.parse(checkpoint.checkedAt as string);\n const freshUntil = Date.parse(checkpoint.freshUntil as string);\n const now = (input.now ?? new Date()).getTime();\n if (!Number.isFinite(checkedAt) || !Number.isFinite(freshUntil)\n || freshUntil < now || freshUntil <= checkedAt || freshUntil - checkedAt > 300_000) return false;\n if ((checkpoint.sequence === 1) !== (checkpoint.previousCheckpointDigestHex === undefined)) return false;\n if (checkpoint.sequence !== 1 && (typeof checkpoint.previousCheckpointDigestHex !== \"string\" || !/^[0-9a-f]{64}$/.test(checkpoint.previousCheckpointDigestHex))) return false;\n if (checkpoint.state === \"active\" && (checkpoint.revokedAt !== undefined || checkpoint.revocationCid !== undefined)) return false;\n if (checkpoint.state === \"revoked\" && (typeof checkpoint.revokedAt !== \"string\" || typeof checkpoint.revocationCid !== \"string\")) return false;\n const signature = checkpoint.signature;\n if (!isRecordValue(signature) || Object.keys(signature).length !== 3 || signature.suite !== \"Ed25519\" || signature.signerDid !== checkpoint.issuerDid || typeof signature.value !== \"string\") return false;\n try {\n const principal = (checkpoint.issuerDid as string).split(\"#\", 1)[0]!;\n const didMaterial = principal.startsWith(\"did:key:\") ? base58btc.decode(principal.slice(\"did:key:\".length)) : new Uint8Array();\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01) return false;\n const unsigned = { ...checkpoint } as Record<string, unknown>;\n delete unsigned.signature;\n return ed25519.verify(\n decodeBase64Url(signature.value),\n sha256(new TextEncoder().encode(ROOT_STATUS_V1_DOMAIN + jcsCanonicalize(unsigned))),\n didMaterial.slice(2),\n );\n } catch {\n return false;\n }\n}\n\nexport async function getPolicyRootStatusV3(input: {\n readonly nodeOrigin: string;\n readonly rootCid: string;\n readonly expectedNodeAudience?: string;\n readonly expectedEnforcerDid?: string;\n readonly now?: Date;\n readonly fetch?: typeof fetch;\n}): Promise<PolicyRootStatusV3> {\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const response = await fetchFn(new URL(`/share/v3/policy/status/${encodeURIComponent(input.rootCid)}`, input.nodeOrigin), {\n method: \"GET\",\n redirect: \"error\",\n headers: { accept: \"application/json\" },\n });\n if (!response.ok) throw new Error(`policy root status rejected (${response.status})`);\n const value = object(await response.json(), \"policy root status\");\n const checkpoint = object(value.checkpoint, \"policy root checkpoint\");\n if (value.rootCid !== input.rootCid\n || (value.state !== \"active\" && value.state !== \"revoked\")\n || value.state !== checkpoint.state\n || !verifyPolicyRootStatusCheckpointV3({ rootCid: input.rootCid, checkpoint, expectedNodeAudience: input.expectedNodeAudience, now: input.now }))\n throw new Error(\"policy root status binding is invalid\");\n const revocation = value.revocation === undefined ? undefined : object(value.revocation, \"policy root revocation\");\n if ((value.state === \"revoked\") !== (revocation !== undefined)\n || revocation !== undefined && !verifyPolicyRootRevocationV3({\n rootCid: input.rootCid,\n checkpoint,\n revocation,\n expectedEnforcerDid: input.expectedEnforcerDid,\n })) throw new Error(\"policy root status revocation evidence is invalid\");\n return { rootCid: input.rootCid, state: value.state, checkpoint, ...(revocation === undefined ? {} : { revocation }) };\n}\n\nexport function verifyPolicyRootRevocationV3(input: {\n readonly rootCid: string;\n readonly checkpoint: Readonly<Record<string, unknown>>;\n readonly revocation: Readonly<Record<string, unknown>>;\n readonly expectedEnforcerDid?: string;\n}): boolean {\n const value = input.revocation;\n const allowed = [\"schema\", \"targetCid\", \"targetRole\", \"ownerDid\", \"nodeAudience\", \"revokedAt\", \"reason\", \"issuerDid\", \"signature\"];\n if (Object.keys(value).length !== allowed.length || Object.keys(value).some((key) => !allowed.includes(key))\n || value.schema !== ROOT_REVOCATION_V1_SCHEMA\n || value.targetCid !== input.rootCid\n || value.targetRole !== input.checkpoint.targetRole\n || value.ownerDid !== input.checkpoint.ownerDid\n || value.nodeAudience !== input.checkpoint.nodeAudience\n || value.revokedAt !== input.checkpoint.revokedAt\n || typeof value.reason !== \"string\" || value.reason.length === 0\n || typeof value.issuerDid !== \"string\") return false;\n const authorized = value.issuerDid === value.ownerDid\n || value.targetRole === \"policy-enforcement\" && value.issuerDid === input.expectedEnforcerDid;\n if (!authorized) return false;\n const signature = value.signature;\n if (!isRecordValue(signature) || Object.keys(signature).length !== 3 || signature.suite !== \"Ed25519\" || signature.signerDid !== value.issuerDid || typeof signature.value !== \"string\") return false;\n try {\n const principal = (value.issuerDid as string).split(\"#\", 1)[0]!;\n const didMaterial = principal.startsWith(\"did:key:\") ? base58btc.decode(principal.slice(\"did:key:\".length)) : new Uint8Array();\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01) return false;\n const unsigned = { ...value } as Record<string, unknown>;\n delete unsigned.signature;\n const digest = sha256(new TextEncoder().encode(ROOT_REVOCATION_V1_DOMAIN + jcsCanonicalize(unsigned)));\n return input.checkpoint.revocationCid === hex(digest)\n && ed25519.verify(decodeBase64Url(signature.value), digest, didMaterial.slice(2));\n } catch {\n return false;\n }\n}\n\nexport async function renewPolicyRootStatusV3(input: {\n readonly nodeOrigin: string;\n readonly rootCid: string;\n readonly ownerDid: string;\n readonly nodeAudience: string;\n readonly sign: (digest: Uint8Array) => Promise<Uint8Array>;\n readonly now?: Date;\n readonly nonce?: string;\n readonly fetch?: typeof fetch;\n}): Promise<Readonly<Record<string, unknown>>> {\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const current = await getPolicyRootStatusV3({ nodeOrigin: input.nodeOrigin, rootCid: input.rootCid, expectedNodeAudience: input.nodeAudience, now: input.now, fetch: fetchFn });\n if (current.state !== \"active\" || current.checkpoint.ownerDid !== input.ownerDid || current.checkpoint.nodeAudience !== input.nodeAudience || current.checkpoint.state !== \"active\" || !Number.isInteger(current.checkpoint.sequence))\n throw new Error(\"policy root status cannot be renewed\");\n const currentUnsigned = { ...current.checkpoint };\n delete currentUnsigned.signature;\n const previousCheckpointDigestHex = hex(sha256(new TextEncoder().encode(ROOT_STATUS_V1_DOMAIN + jcsCanonicalize(currentUnsigned))));\n const unsigned = {\n schema: \"xyz.tinycloud.policy/root-status-renewal/v1\",\n targetCid: input.rootCid,\n ownerDid: input.ownerDid,\n nodeAudience: input.nodeAudience,\n issuedAt: (input.now ?? new Date()).toISOString(),\n nonce: input.nonce ?? encodeBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n sequence: (current.checkpoint.sequence as number) + 1,\n previousCheckpointDigestHex,\n };\n const signature = await input.sign(sha256(new TextEncoder().encode(ROOT_STATUS_RENEWAL_V1_DOMAIN + jcsCanonicalize(unsigned))));\n if (signature.length !== 64) throw new Error(\"policy root renewal signature must be Ed25519\");\n const response = await fetchFn(new URL(\"/share/v3/policy/status\", input.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ rootCid: input.rootCid, renewal: { ...unsigned, signature: { suite: \"Ed25519\", signerDid: input.ownerDid, value: encodeBase64Url(signature) } } }),\n });\n if (!response.ok) throw new Error(`policy root renewal rejected (${response.status})`);\n return object(await response.json(), \"policy root renewal\");\n}\n\nexport async function revokePolicyRootV3(input: {\n readonly nodeOrigin: string;\n readonly rootCid: string;\n readonly targetRole: \"policy-authority\" | \"policy-enforcement\";\n readonly ownerDid: string;\n readonly issuerDid: string;\n readonly nodeAudience: string;\n readonly reason: string;\n readonly sign: (digest: Uint8Array) => Promise<Uint8Array>;\n readonly now?: Date;\n readonly fetch?: typeof fetch;\n}): Promise<Readonly<Record<string, unknown>>> {\n if (input.reason.length === 0) throw new Error(\"policy root revocation reason is required\");\n const unsigned = {\n schema: ROOT_REVOCATION_V1_SCHEMA,\n targetCid: input.rootCid,\n targetRole: input.targetRole,\n ownerDid: input.ownerDid,\n nodeAudience: input.nodeAudience,\n revokedAt: (input.now ?? new Date()).toISOString(),\n reason: input.reason,\n issuerDid: input.issuerDid,\n };\n const signature = await input.sign(sha256(new TextEncoder().encode(ROOT_REVOCATION_V1_DOMAIN + jcsCanonicalize(unsigned))));\n if (signature.length !== 64) throw new Error(\"policy root revocation signature must be Ed25519\");\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const response = await fetchFn(new URL(\"/revoke\", input.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ revocation: { ...unsigned, signature: { suite: \"Ed25519\", signerDid: input.issuerDid, value: encodeBase64Url(signature) } } }),\n });\n if (!response.ok) throw new Error(`policy root revocation rejected (${response.status})`);\n return object(await response.json(), \"policy root revocation\");\n}\n\nconst POLICY_SESSION_FACT_KEYS = [\n \"profile\",\n \"ownerDid\",\n \"policyId\",\n \"policyDigestHex\",\n \"policyCid\",\n \"policyDelegationCid\",\n \"enforcementDelegationCid\",\n \"contentSourceDigestHex\",\n \"capabilityCeilingHashHex\",\n \"nativeProjectionHashHex\",\n \"enforcerDid\",\n \"nodeAudience\",\n \"recipientDid\",\n \"challengeId\",\n \"claimDigestHex\",\n \"claimJti\",\n \"vpDigestHex\",\n \"credentialEvidenceDigestHex\",\n \"decisionContextDigestHex\",\n \"issuanceAuditDigestHex\",\n \"remainingRedelegationDepth\",\n] as const;\n\nconst KV_ACTIONS = new Set<string>([\n \"tinycloud.kv/get\",\n \"tinycloud.kv/list\",\n \"tinycloud.kv/metadata\",\n \"tinycloud.kv/put\",\n]);\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(`${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactKeys(\n value: Record<string, unknown>,\n allowed: readonly string[],\n label: string,\n): void {\n const keys = new Set(allowed);\n if (Object.keys(value).some((key) => !keys.has(key)))\n throw new Error(`${label} contains an unknown field`);\n}\n\nfunction nonEmptyString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0)\n throw new Error(`${label} must be a non-empty string`);\n return value;\n}\n\nfunction parseKvResource(resource: string): { space: string; path: string } {\n const marker = resource.indexOf(\"/kv/\");\n const encodedSpace = marker < 1 ? \"\" : resource.slice(0, marker);\n const legacy = encodedSpace.startsWith(\"tinycloud://\");\n const space = legacy ? encodedSpace.slice(\"tinycloud://\".length) : encodedSpace;\n const path = marker < 1 ? \"\" : resource.slice(marker + 4);\n if (\n marker < 1 ||\n (legacy\n ? /[:/?#%]/.test(space)\n : !encodedSpace.startsWith(\"tinycloud:\") || /[/?#%]/.test(encodedSpace)) ||\n path.startsWith(\"/\") ||\n path.endsWith(\"/\") ||\n path.includes(\"//\") ||\n path\n .split(\"/\")\n .some((part) => part === \".\" || part === \"..\" || part.length === 0)\n ) {\n throw new Error(\"KV resource is not canonical\");\n }\n return { space, path };\n}\n\nfunction parseEncryptionResource(resource: string): void {\n if (!resource.startsWith(\"urn:tinycloud:encryption:\")) throw new Error(\"encryption capability is invalid\");\n const rest = resource.slice(\"urn:tinycloud:encryption:\".length);\n const separator = rest.lastIndexOf(\":\");\n const ownerDid = separator < 0 ? \"\" : rest.slice(0, separator);\n const network = separator < 0 ? \"\" : rest.slice(separator + 1);\n if (!ownerDid.startsWith(\"did:\") || network.length === 0 || network.includes(\":\") || network.includes(\"/\") || network.includes(\"%\") || network.includes(\"?\") || network.includes(\"#\")) {\n throw new Error(\"encryption capability is invalid\");\n }\n}\n\nexport function normalizeUnifiedPolicyCapability(\n input: unknown,\n): UnifiedPolicyCapability {\n const value = object(input, \"capability\");\n const kind = nonEmptyString(value.kind, \"capability.kind\");\n if (kind === \"kv\") {\n exactKeys(\n value,\n [\"kind\", \"resource\", \"selector\", \"actions\"],\n \"KV capability\",\n );\n const resource = nonEmptyString(value.resource, \"capability.resource\");\n parseKvResource(resource);\n if (value.selector !== \"exact\" && value.selector !== \"prefix\")\n throw new Error(\"capability.selector is invalid\");\n if (!Array.isArray(value.actions) || value.actions.length === 0)\n throw new Error(\"capability.actions is invalid\");\n const actions = value.actions.map((action) =>\n nonEmptyString(action, \"capability.actions[]\"),\n );\n if (\n new Set(actions).size !== actions.length ||\n actions.some((action) => !KV_ACTIONS.has(action))\n )\n throw new Error(\"capability.actions is invalid\");\n return {\n kind: \"kv\",\n resource,\n selector: value.selector,\n actions: [...actions].sort() as UnifiedKvCapability[\"actions\"],\n };\n }\n if (kind === \"encryption\") {\n exactKeys(value, [\"kind\", \"resource\", \"action\"], \"encryption capability\");\n const resource = nonEmptyString(value.resource, \"capability.resource\");\n if (value.action !== \"tinycloud.encryption/decrypt\")\n throw new Error(\"encryption capability is invalid\");\n parseEncryptionResource(resource);\n return {\n kind: \"encryption\",\n resource,\n action: \"tinycloud.encryption/decrypt\",\n };\n }\n throw new Error(\"capability.kind is invalid\");\n}\n\nexport function canonicalizeUnifiedPolicyCapability(\n input: unknown,\n): UnifiedPolicyCapability {\n return normalizeUnifiedPolicyCapability(input);\n}\n\nexport function unifiedPolicyCapabilityDigestHex(input: unknown): string {\n return hex(\n sha256(\n new TextEncoder().encode(\n POLICY_CAPABILITY_V1_DOMAIN +\n jcsCanonicalize(normalizeUnifiedPolicyCapability(input)),\n ),\n ),\n );\n}\n\nexport function unifiedPolicyCapabilityContains(\n authorityInput: unknown,\n requestedInput: unknown,\n): boolean {\n try {\n const authority = normalizeUnifiedPolicyCapability(authorityInput);\n const requested = normalizeUnifiedPolicyCapability(requestedInput);\n if (authority.kind !== requested.kind) return false;\n if (authority.kind === \"encryption\" && requested.kind === \"encryption\")\n return (\n authority.resource === requested.resource &&\n authority.action === requested.action\n );\n if (authority.kind !== \"kv\" || requested.kind !== \"kv\") return false;\n const { resource: authorized } = authority;\n const { resource: requestedResource } = requested;\n const pathContained =\n authority.selector === \"exact\"\n ? authorized === requestedResource\n : authorized === requestedResource ||\n requestedResource.startsWith(`${authorized}/`);\n if (\n !pathContained ||\n (authority.selector === \"exact\" && requested.selector === \"prefix\")\n )\n return false;\n return requested.actions.every((action) =>\n authority.actions.includes(action),\n );\n } catch {\n return false;\n }\n}\n\nexport function projectUnifiedPolicyCapability(\n input: unknown,\n): UnifiedNativeCapability {\n const capability = normalizeUnifiedPolicyCapability(input);\n if (capability.kind === \"encryption\") {\n return {\n service: \"tinycloud.encryption\",\n space: capability.resource,\n path: capability.resource,\n actions: [capability.action],\n };\n }\n const { space, path } = parseKvResource(capability.resource);\n return {\n service: \"tinycloud.kv\",\n space,\n path,\n actions: [...capability.actions],\n caveat: {\n type: \"xyz.tinycloud.resource/selector\",\n kind: capability.selector,\n value: capability.resource,\n },\n };\n}\n\nexport function projectUnifiedPolicyCapabilities(\n input: readonly unknown[],\n): UnifiedNativeCapability[] {\n return input\n .map(projectUnifiedPolicyCapability)\n .sort((left, right) => {\n const a = jcsCanonicalize(left);\n const b = jcsCanonicalize(right);\n return a < b ? -1 : a > b ? 1 : 0;\n });\n}\n\nexport function unifiedNativeProjectionHashHex(\n input: readonly unknown[],\n): string {\n return hex(\n sha256(\n new TextEncoder().encode(\n NATIVE_PROJECTION_V1_DOMAIN +\n jcsCanonicalize(projectUnifiedPolicyCapabilities(input)),\n ),\n ),\n );\n}\n\nexport function unifiedPolicyCapabilityFromNative(\n input: unknown,\n): UnifiedPolicyCapability {\n const value = object(input, \"native capability\");\n exactKeys(\n value,\n [\"service\", \"space\", \"path\", \"actions\", \"caveat\"],\n \"native capability\",\n );\n const service = nonEmptyString(value.service, \"native.service\");\n const actions = value.actions;\n if (!Array.isArray(actions)) throw new Error(\"native.actions is invalid\");\n if (\n service === \"tinycloud.encryption\" &&\n value.caveat === undefined &&\n value.space === value.path &&\n actions.length === 1 &&\n actions[0] === \"tinycloud.encryption/decrypt\"\n ) {\n return normalizeUnifiedPolicyCapability({\n kind: \"encryption\",\n resource: value.space,\n action: actions[0],\n });\n }\n if (\n service !== \"tinycloud.kv\" ||\n typeof value.space !== \"string\" ||\n typeof value.path !== \"string\"\n )\n throw new Error(\"native capability is not supported\");\n const caveat = object(value.caveat, \"native.caveat\");\n exactKeys(caveat, [\"type\", \"kind\", \"value\"], \"native selector caveat\");\n if (\n caveat.type !== \"xyz.tinycloud.resource/selector\" ||\n (caveat.kind !== \"exact\" && caveat.kind !== \"prefix\") ||\n caveat.value !== `${value.space.startsWith(\"tinycloud:\") ? value.space : `tinycloud://${value.space}`}/kv/${value.path}`\n )\n throw new Error(\"native selector caveat does not match capability\");\n return normalizeUnifiedPolicyCapability({\n kind: \"kv\",\n resource: caveat.value,\n selector: caveat.kind,\n actions,\n });\n}\n\nexport function contentSourceDigestHex(input: UnifiedContentSource): string {\n return hex(\n sha256(\n new TextEncoder().encode(\n CONTENT_SOURCE_V1_DOMAIN + jcsCanonicalize(input),\n ),\n ),\n );\n}\n\nexport function policyDigestHex(\n policy: Omit<UnifiedPolicyV1, \"policyId\" | \"signature\">,\n): string {\n const canonicalPolicy = {\n ...policy,\n capabilityCeiling: policy.capabilityCeiling.map(\n normalizeUnifiedPolicyCapability,\n ),\n };\n return hex(\n sha256(\n new TextEncoder().encode(\n POLICY_V1_DOMAIN + jcsCanonicalize(canonicalPolicy),\n ),\n ),\n );\n}\n\nexport function policyIdForDigestHex(digestHex: string): string {\n const digest = Uint8Array.from(\n (digestHex.match(/.{2}/g) ?? []).map((byte) => Number.parseInt(byte, 16)),\n );\n if (digest.length !== 32) throw new Error(\"policy digest must be 32 bytes\");\n return `pol_${base32Lower(digest)}`;\n}\n\nexport function policyCidFromCanonicalBytes(bytes: Uint8Array): string {\n return CID.createV1(0x55, createDigest(0x12, sha256(bytes))).toString();\n}\n\nconst CompactHeaderSchema = z.object({\n alg: z.literal(\"EdDSA\"),\n jwk: z.object({ alg: z.literal(\"EdDSA\"), crv: z.literal(\"Ed25519\"), kty: z.literal(\"OKP\"), x: z.string().min(1) }).strict(),\n typ: z.literal(\"JWT\"),\n ucv: z.literal(\"0.10.0\"),\n}).strict();\nconst CompactPayloadSchema = z.object({\n att: z.record(z.record(z.array(z.unknown()).min(1))),\n aud: z.string().min(1),\n exp: z.number().int(),\n fct: z.array(z.record(z.unknown())).length(1),\n iss: z.string().min(1),\n nbf: z.number().int(),\n nnc: z.string().min(1),\n prf: z.array(z.string().min(1)),\n}).strict();\n\nexport interface CompactUcanAuthorizationV1 {\n readonly authorization: string;\n readonly cid: string;\n readonly header: z.infer<typeof CompactHeaderSchema>;\n readonly payload: z.infer<typeof CompactPayloadSchema>;\n}\n\nexport interface SignCompactUcanAuthorizationInput {\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly facts: readonly [Readonly<Record<string, unknown>>];\n readonly proofs: readonly string[];\n readonly notBefore: number;\n readonly expiresAt: number;\n readonly nonce: string;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\nexport interface SignCompactUcanRootAuthorizationInput {\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly facts: readonly [Readonly<Record<string, unknown>>];\n readonly notBefore: number;\n readonly expiresAt: number;\n readonly nonce: string;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\nasync function signCompactUcan(\n input: SignCompactUcanAuthorizationInput,\n): Promise<CompactUcanAuthorizationV1> {\n const principal = input.issuerDid.split(\"#\", 1)[0]!;\n const didMaterial = principal.startsWith(\"did:key:\")\n ? base58btc.decode(principal.slice(\"did:key:\".length))\n : new Uint8Array();\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01)\n throw new Error(\"compact UCAN signer must be did:key Ed25519\");\n const header = { alg: \"EdDSA\", jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: encodeBase64Url(didMaterial.slice(2)) }, typ: \"JWT\", ucv: \"0.10.0\" };\n const payload = {\n att: input.attenuation,\n aud: input.audienceDid,\n exp: input.expiresAt,\n fct: input.facts,\n iss: input.issuerDid.includes(\"#\") ? input.issuerDid : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: input.notBefore,\n nnc: input.nonce,\n prf: input.proofs,\n };\n const protectedSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(header)));\n const payloadSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(payload)));\n const signature = await input.sign(new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`));\n if (signature.length !== 64) throw new Error(\"compact Authorization signature must be Ed25519\");\n return parseCompactUcanAuthorization(`${protectedSegment}.${payloadSegment}.${encodeBase64Url(signature)}`);\n}\n\n/** Sign exact compact-UCAN bytes with a caller-owned, potentially non-extractable key. */\nexport async function signCompactUcanAuthorization(\n input: SignCompactUcanAuthorizationInput,\n): Promise<CompactUcanAuthorizationV1> {\n if (input.notBefore >= input.expiresAt || input.expiresAt - input.notBefore > 60)\n throw new Error(\"compact invocation lifetime must be between one and 60 seconds\");\n return signCompactUcan(input);\n}\n\n/** Sign a proofless policy root without weakening the 60-second invocation profile. */\nexport async function signCompactUcanRootAuthorization(\n input: SignCompactUcanRootAuthorizationInput,\n): Promise<CompactUcanAuthorizationV1> {\n if (input.notBefore >= input.expiresAt || input.expiresAt - input.notBefore > 31 * 24 * 60 * 60)\n throw new Error(\"compact policy root lifetime must be between one second and 31 days\");\n return signCompactUcan({ ...input, proofs: [] });\n}\n\nexport interface CompactPolicyInvocationInput {\n readonly sessionAuthorization: string;\n readonly sessionCid: string;\n readonly recipientDid: string;\n readonly audienceDid: string;\n readonly resource: string;\n readonly action: string;\n readonly caveat?: Readonly<Record<string, unknown>>;\n readonly facts?: Readonly<Record<string, unknown>>;\n readonly privateKey: Uint8Array;\n readonly now?: number;\n readonly nonce?: string;\n}\n\n/** Sign a fresh one-parent ordinary invocation; S0 itself is never a bearer. */\nexport function createCompactPolicyInvocation(\n input: CompactPolicyInvocationInput,\n): CompactUcanAuthorizationV1 {\n const session = parsePolicySessionUcan(input.sessionAuthorization);\n if (session.cid !== input.sessionCid || session.aud !== input.recipientDid)\n throw new Error(\"policy session does not bind the recipient signer\");\n const principal = input.recipientDid.split(\"#\", 1)[0]!;\n const didMaterial = base58btc.decode(principal.slice(\"did:key:\".length));\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01)\n throw new Error(\"policy invocation signer must be did:key Ed25519\");\n const publicKey = ed25519.getPublicKey(input.privateKey);\n if (!equalBytes(publicKey, didMaterial.slice(2)))\n throw new Error(\"policy invocation private key does not bind recipient DID\");\n const now = input.now ?? Math.floor(Date.now() / 1000);\n const exp = Math.min(now + 60, session.exp);\n if (exp <= now) throw new Error(\"policy session has expired\");\n const header = { alg: \"EdDSA\", jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: encodeBase64Url(publicKey) }, typ: \"JWT\", ucv: \"0.10.0\" };\n const payload = {\n att: { [input.resource]: { [input.action]: [input.caveat ?? {}] } },\n aud: input.audienceDid,\n exp,\n fct: [input.facts ?? { type: \"tinycloud.policy.invocation/v1\", policyCid: session.fact.policyCid, sessionCid: session.cid }],\n iss: input.recipientDid.includes(\"#\") ? input.recipientDid : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: now,\n nnc: input.nonce ?? encodeBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n prf: [session.cid],\n };\n const protectedSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(header)));\n const payloadSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(payload)));\n const signingInput = new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`);\n const signature = ed25519.sign(signingInput, input.privateKey);\n return parseCompactUcanAuthorization(`${protectedSegment}.${payloadSegment}.${encodeBase64Url(signature)}`);\n}\n\nexport function createCompactPolicyDescendant(input: {\n readonly parentAuthorization: string;\n readonly parentCid: string;\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly privateKey: Uint8Array;\n readonly now?: number;\n readonly expiresAt?: number;\n readonly nonce?: string;\n}): CompactUcanAuthorizationV1 {\n const parent = parseCompactUcanAuthorization(input.parentAuthorization, input.parentCid);\n if (parent.payload.aud !== input.issuerDid) throw new Error(\"policy descendant issuer is not the parent audience\");\n const parentFact = parent.payload.fct[0]!;\n const depth = parentFact.remainingRedelegationDepth;\n if (!Number.isInteger(depth) || (depth as number) <= 0) throw new Error(\"policy descendant depth is exhausted\");\n if (!compactAttenuationContains(parent.payload.att, input.attenuation))\n throw new Error(\"policy descendant exceeds the parent attenuation\");\n const principal = input.issuerDid.split(\"#\", 1)[0]!;\n const didMaterial = base58btc.decode(principal.slice(\"did:key:\".length));\n const publicKey = ed25519.getPublicKey(input.privateKey);\n if (didMaterial.length !== 34 || !equalBytes(publicKey, didMaterial.slice(2))) throw new Error(\"policy descendant signer does not bind issuer DID\");\n const now = Math.max(input.now ?? Math.floor(Date.now() / 1000), parent.payload.nbf + 1);\n const exp = Math.min(input.expiresAt ?? now + 60, now + 60, parent.payload.exp - 1);\n if (exp <= now) throw new Error(\"policy parent has no strictly narrower validity window\");\n const header = { alg: \"EdDSA\", jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: encodeBase64Url(publicKey) }, typ: \"JWT\", ucv: \"0.10.0\" };\n const payload = {\n att: input.attenuation,\n aud: input.audienceDid,\n exp,\n fct: [{ ...parentFact, remainingRedelegationDepth: (depth as number) - 1 }],\n iss: input.issuerDid.includes(\"#\") ? input.issuerDid : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: now,\n nnc: input.nonce ?? encodeBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n prf: [parent.cid],\n };\n const protectedSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(header)));\n const payloadSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(payload)));\n const signature = ed25519.sign(new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`), input.privateKey);\n return parseCompactUcanAuthorization(`${protectedSegment}.${payloadSegment}.${encodeBase64Url(signature)}`);\n}\n\n/** Byte-independent semantic containment shared by S0, descendants and mint requests. */\nexport function compactAttenuationContains(\n parent: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>,\n child: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>,\n): boolean {\n const selector = (value: readonly unknown[]): { readonly kind: \"exact\" | \"prefix\"; readonly value: string } | undefined => {\n if (value.length !== 1 || !isRecordValue(value[0])) return undefined;\n const caveat = value[0];\n if (Object.keys(caveat).length !== 3 || caveat.type !== \"xyz.tinycloud.resource/selector\" || (caveat.kind !== \"exact\" && caveat.kind !== \"prefix\") || typeof caveat.value !== \"string\") return undefined;\n return { kind: caveat.kind, value: caveat.value };\n };\n const equal = (left: unknown, right: unknown): boolean => jcsCanonicalize(left) === jcsCanonicalize(right);\n return Object.entries(child).every(([childResource, childActions]) =>\n Object.entries(childActions).every(([action, childCaveats]) =>\n Object.entries(parent).some(([parentResource, parentActions]) => {\n const parentCaveats = parentActions[action];\n if (parentCaveats === undefined) return false;\n if (parentResource === childResource && equal(parentCaveats, childCaveats)) return true;\n const parentSelector = selector(parentCaveats);\n const childSelector = selector(childCaveats);\n return parentSelector?.kind === \"prefix\"\n && childSelector !== undefined\n && parentSelector.value === parentResource\n && childSelector.value === childResource\n && (childResource === parentResource || childResource.startsWith(`${parentResource}/`));\n }),\n ),\n );\n}\n\nfunction isRecordValue(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function parseCompactUcanAuthorization(\n input: string,\n expectedCid?: string,\n): CompactUcanAuthorizationV1 {\n if (typeof input !== \"string\" || /\\s/.test(input))\n throw new Error(\"Authorization must be compact UCAN bytes\");\n const segments = input.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0))\n throw new Error(\"Authorization must have three compact segments\");\n const [headerSegment, payloadSegment, signatureSegment] = segments as [string, string, string];\n const headerBytes = decodeBase64Url(headerSegment);\n const payloadBytes = decodeBase64Url(payloadSegment);\n const signature = decodeBase64Url(signatureSegment);\n const headerValue: unknown = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(headerBytes));\n const payloadValue: unknown = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(payloadBytes));\n if (jcsCanonicalize(headerValue) !== new TextDecoder().decode(headerBytes)\n || jcsCanonicalize(payloadValue) !== new TextDecoder().decode(payloadBytes))\n throw new Error(\"compact UCAN segments are not canonical JCS\");\n const header = CompactHeaderSchema.parse(headerValue);\n const payload = CompactPayloadSchema.parse(payloadValue);\n if (payload.nbf >= payload.exp) throw new Error(\"compact UCAN validity is empty\");\n const principal = payload.iss.split(\"#\", 1)[0]!;\n const didMaterial = principal.startsWith(\"did:key:\")\n ? base58btc.decode(principal.slice(\"did:key:\".length))\n : new Uint8Array();\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01)\n throw new Error(\"compact UCAN issuer must be did:key Ed25519\");\n const publicKey = didMaterial.slice(2);\n if (!equalBytes(publicKey, decodeBase64Url(header.jwk.x)))\n throw new Error(\"compact UCAN JWK does not bind issuer\");\n if (!ed25519.verify(signature, new TextEncoder().encode(`${headerSegment}.${payloadSegment}`), publicKey))\n throw new Error(\"compact UCAN signature is invalid\");\n const cid = CID.createV1(0x55, createDigest(0x1e, blake3(new TextEncoder().encode(input)))).toString();\n if (expectedCid !== undefined && cid !== expectedCid)\n throw new Error(\"compact UCAN CID does not match exact Authorization bytes\");\n return { authorization: input, cid, header, payload };\n}\n\nexport function parsePolicySessionUcan(\n authorization: string,\n expectedProofs?: readonly [string, string],\n): PolicySessionUcanV1 {\n const parsed = parseCompactUcanAuthorization(authorization);\n const fact = parsed.payload.fct[0]!;\n if (parsed.payload.prf.length !== 2 || parsed.payload.prf[0] === parsed.payload.prf[1])\n throw new Error(\"policy session UCAN requires two distinct ordered proofs\");\n if (expectedProofs !== undefined\n && (parsed.payload.prf[0] !== expectedProofs[0] || parsed.payload.prf[1] !== expectedProofs[1]))\n throw new Error(\"policy session UCAN ordered proofs do not match\");\n const factKeys = Object.keys(fact);\n if (\n factKeys.length !== POLICY_SESSION_FACT_KEYS.length ||\n factKeys.some((key) => !POLICY_SESSION_FACT_KEYS.includes(key as never)) ||\n POLICY_SESSION_FACT_KEYS.some((key) => !(key in fact))\n )\n throw new Error(\"policy session UCAN fact is incomplete\");\n if (\n fact.profile !== POLICY_SESSION_UCAN_V1_PROFILE ||\n typeof fact.remainingRedelegationDepth !== \"number\" ||\n !Number.isInteger(fact.remainingRedelegationDepth) ||\n fact.remainingRedelegationDepth < 0 ||\n fact.remainingRedelegationDepth > 8 ||\n parsed.payload.exp - parsed.payload.nbf > 60 ||\n parsed.payload.iss.split(\"#\", 1)[0] !== fact.enforcerDid ||\n parsed.payload.aud !== fact.recipientDid\n )\n throw new Error(\"policy session UCAN fact is invalid\");\n return {\n authorization,\n cid: parsed.cid,\n iss: parsed.payload.iss,\n aud: parsed.payload.aud,\n prf: parsed.payload.prf as [string, string],\n att: parsed.payload.att,\n nbf: parsed.payload.nbf,\n exp: parsed.payload.exp,\n nnc: parsed.payload.nnc,\n fact,\n };\n}\n\nfunction decodeBase64Url(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value) || value.length % 4 === 1)\n throw new Error(\"value is not canonical base64url\");\n const normalized = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const binary = typeof atob === \"function\"\n ? atob(normalized.padEnd(Math.ceil(normalized.length / 4) * 4, \"=\"))\n : Buffer.from(normalized, \"base64\").toString(\"binary\");\n const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\n const encoded = typeof btoa === \"function\"\n ? btoa(String.fromCharCode(...bytes)).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\")\n : Buffer.from(bytes).toString(\"base64url\");\n if (encoded !== value) throw new Error(\"value is not canonical base64url\");\n return bytes;\n}\n\nfunction encodeBase64Url(value: Uint8Array): string {\n return typeof btoa === \"function\"\n ? btoa(String.fromCharCode(...value)).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\")\n : Buffer.from(value).toString(\"base64url\");\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.length === right.length && left.every((byte, index) => byte === right[index]);\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction base32Lower(bytes: Uint8Array): string {\n const alphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n output += alphabet[(buffer >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) output += alphabet[(buffer << (5 - bits)) & 31];\n return output;\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport {\n credentialRequirementDigest,\n validateCredentialRequirement,\n} from \"../credentials/requirement\";\nimport {\n encodeBase64Url,\n isDigest,\n sha256Base64Url,\n} from \"../credentials/digest\";\nimport type {\n CredentialRequirement,\n IssuedCredentialEnvelope,\n VerifiedCredential,\n} from \"../credentials/types\";\nimport { jcsCanonicalize } from \"./jcs\";\nimport {\n compactAttenuationForPolicyCapabilities,\n normalizeUnifiedPolicyCapability,\n parsePolicySessionUcan,\n policyCidFromCanonicalBytes,\n policyIdForDigestHex,\n requestPolicyChallengeV3,\n unifiedPolicyCapabilityContains,\n type PolicyChallengeV3,\n type PolicySessionUcanV1,\n type UnifiedContentSource,\n type UnifiedPolicyCapability,\n} from \"./unified\";\n\nexport const POLICY_V2_SCHEMA = \"xyz.tinycloud.policy/policy/v2\" as const;\nexport const POLICY_V2_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\0\";\nexport const POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE =\n \"TinyCloudPolicyCredentialRequirement\" as const;\nexport const POLICY_PRESENTATION_V3_SCHEMA =\n \"xyz.tinycloud.policy/presentation/v3\" as const;\nexport const POLICY_PRESENTATION_V3_DOMAIN =\n \"xyz.tinycloud.policy/Presentation/v3\\0\";\n\nexport interface PolicyCredentialRequirementV1 {\n readonly type: typeof POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE;\n readonly version: 1;\n readonly requirementDigest: string;\n readonly descriptorDigest: string;\n readonly issuerDid: string;\n readonly issuerKid: string;\n readonly profile: { readonly id: string; readonly version: 1 };\n readonly credentialType: { readonly id: string; readonly version: 1 };\n}\n\nexport interface UnifiedPolicyV2 {\n readonly schema: typeof POLICY_V2_SCHEMA;\n readonly policyId: string;\n readonly ownerDid: string;\n readonly createdAt: string;\n readonly expiresAt?: string;\n readonly contentSource: UnifiedContentSource;\n readonly capabilityCeiling: readonly UnifiedPolicyCapability[];\n readonly credentialRequirement: PolicyCredentialRequirementV1;\n readonly signature: {\n readonly suite: \"Ed25519\";\n readonly signerDid: string;\n readonly value: string;\n };\n}\n\nexport type UnsignedUnifiedPolicyV2 = Omit<\n UnifiedPolicyV2,\n \"policyId\" | \"signature\"\n>;\n\nexport interface PolicyCredentialPresentationV3 {\n readonly schema: typeof POLICY_PRESENTATION_V3_SCHEMA;\n readonly jti: string;\n readonly challengeId: string;\n readonly nonce: string;\n readonly policyCid: string;\n readonly nodeAudience: string;\n readonly holderDid: string;\n readonly subjectDid: string;\n readonly credentialSpaceOwnerDid: string;\n readonly credentialDigest: string;\n readonly requirementDigest: string;\n readonly descriptorDigest: string;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly issuedAt: string;\n readonly expiresAt: string;\n readonly signature: {\n readonly suite: \"Ed25519\";\n readonly signerDid: string;\n readonly value: string;\n };\n}\n\nfunction record(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactKeys(\n value: Record<string, unknown>,\n keys: readonly string[],\n label: string,\n): void {\n const expected = [...keys].sort();\n const actual = Object.keys(value).sort();\n if (\n actual.length !== expected.length ||\n actual.some((key, index) => key !== expected[index])\n ) {\n throw new Error(`${label} contains an unknown or missing field`);\n }\n}\n\nfunction nonEmpty(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`${label} must be a non-empty string`);\n }\n return value;\n}\n\nfunction policyNodeOrigin(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new Error(\"policy node origin is invalid\");\n }\n if (\n url.protocol !== \"https:\" ||\n url.username !== \"\" ||\n url.password !== \"\" ||\n url.pathname !== \"/\" ||\n url.search !== \"\" ||\n url.hash !== \"\"\n ) {\n throw new Error(\"policy node origin is invalid\");\n }\n return url.origin;\n}\n\nfunction versionPair(\n value: unknown,\n label: string,\n): { readonly id: string; readonly version: 1 } {\n const item = record(value, label);\n exactKeys(item, [\"id\", \"version\"], label);\n if (item.version !== 1) throw new Error(`${label} version is unsupported`);\n return Object.freeze({ id: nonEmpty(item.id, `${label}.id`), version: 1 });\n}\n\nexport function validatePolicyCredentialRequirementV1(\n value: unknown,\n): PolicyCredentialRequirementV1 {\n const item = record(value, \"policy credential requirement\");\n exactKeys(\n item,\n [\n \"type\",\n \"version\",\n \"requirementDigest\",\n \"descriptorDigest\",\n \"issuerDid\",\n \"issuerKid\",\n \"profile\",\n \"credentialType\",\n ],\n \"policy credential requirement\",\n );\n if (\n item.type !== POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE ||\n item.version !== 1 ||\n !isDigest(item.requirementDigest) ||\n !isDigest(item.descriptorDigest)\n ) {\n throw new Error(\"policy credential requirement is invalid\");\n }\n return Object.freeze({\n type: POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE,\n version: 1,\n requirementDigest: item.requirementDigest,\n descriptorDigest: item.descriptorDigest,\n issuerDid: nonEmpty(item.issuerDid, \"policy credential issuer\"),\n issuerKid: nonEmpty(item.issuerKid, \"policy credential issuer key\"),\n profile: versionPair(item.profile, \"policy credential profile\"),\n credentialType: versionPair(\n item.credentialType,\n \"policy credential type\",\n ),\n });\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nexport function policyV2DigestHex(input: UnsignedUnifiedPolicyV2): string {\n const canonicalPolicy = {\n ...input,\n credentialRequirement: validatePolicyCredentialRequirementV1(\n input.credentialRequirement,\n ),\n capabilityCeiling: input.capabilityCeiling.map(\n normalizeUnifiedPolicyCapability,\n ),\n };\n return hex(\n sha256(\n new TextEncoder().encode(\n POLICY_V2_DOMAIN + jcsCanonicalize(canonicalPolicy),\n ),\n ),\n );\n}\n\nfunction date(value: unknown, label: string): string {\n const text = nonEmpty(value, label);\n if (!Number.isFinite(Date.parse(text))) throw new Error(`${label} is invalid`);\n return text;\n}\n\nfunction rfc3339Seconds(value: Date): string {\n return new Date(Math.floor(value.getTime() / 1000) * 1000)\n .toISOString()\n .replace(/\\.000Z$/, \"Z\");\n}\n\n/**\n * Validate the exact non-PII Policy/v2 commitment consumed by the holder.\n * The caller supplies policy bytes already owner-signature verified by Share;\n * Node remains the authoritative signature verifier at admission.\n */\nexport function validateUnifiedPolicyV2(\n value: unknown,\n expectedPolicyCid?: string,\n): UnifiedPolicyV2 {\n const item = record(value, \"Policy/v2\");\n const allowed = [\n \"schema\",\n \"policyId\",\n \"ownerDid\",\n \"createdAt\",\n \"contentSource\",\n \"capabilityCeiling\",\n \"credentialRequirement\",\n \"signature\",\n ...(item.expiresAt === undefined ? [] : [\"expiresAt\"]),\n ];\n exactKeys(item, allowed, \"Policy/v2\");\n if (item.schema !== POLICY_V2_SCHEMA || !Array.isArray(item.capabilityCeiling)) {\n throw new Error(\"Policy/v2 is invalid\");\n }\n const ownerDid = nonEmpty(item.ownerDid, \"Policy/v2 ownerDid\");\n const signature = record(item.signature, \"Policy/v2 signature\");\n exactKeys(signature, [\"suite\", \"signerDid\", \"value\"], \"Policy/v2 signature\");\n if (\n signature.suite !== \"Ed25519\" ||\n signature.signerDid !== ownerDid ||\n typeof signature.value !== \"string\" ||\n signature.value.length === 0\n ) {\n throw new Error(\"Policy/v2 signature binding is invalid\");\n }\n const policy = Object.freeze({\n schema: POLICY_V2_SCHEMA,\n policyId: nonEmpty(item.policyId, \"Policy/v2 policyId\"),\n ownerDid,\n createdAt: date(item.createdAt, \"Policy/v2 createdAt\"),\n ...(item.expiresAt === undefined\n ? {}\n : { expiresAt: date(item.expiresAt, \"Policy/v2 expiresAt\") }),\n contentSource: item.contentSource as UnifiedContentSource,\n capabilityCeiling: Object.freeze(\n item.capabilityCeiling.map(normalizeUnifiedPolicyCapability),\n ),\n credentialRequirement: validatePolicyCredentialRequirementV1(\n item.credentialRequirement,\n ),\n signature: Object.freeze({\n suite: \"Ed25519\" as const,\n signerDid: ownerDid,\n value: signature.value,\n }),\n });\n const unsigned = { ...policy } as Record<string, unknown>;\n delete unsigned.policyId;\n delete unsigned.signature;\n const digestHex = policyV2DigestHex(unsigned as UnsignedUnifiedPolicyV2);\n if (policy.policyId !== policyIdForDigestHex(digestHex)) {\n throw new Error(\"Policy/v2 policyId binding is invalid\");\n }\n if (expectedPolicyCid !== undefined) {\n const cid = policyCidFromCanonicalBytes(\n new TextEncoder().encode(jcsCanonicalize(policy)),\n );\n if (cid !== expectedPolicyCid) throw new Error(\"Policy/v2 CID binding is invalid\");\n }\n return policy;\n}\n\nfunction didKeyBytes(did: string): Uint8Array {\n const principal = did.split(\"#\", 1)[0]!;\n if (!principal.startsWith(\"did:key:\")) throw new Error(\"holder DID must be did:key\");\n const material = base58btc.decode(principal.slice(\"did:key:\".length));\n if (material.length !== 34 || material[0] !== 0xed || material[1] !== 0x01) {\n throw new Error(\"holder DID must contain an Ed25519 key\");\n }\n return material.slice(2);\n}\n\nfunction envelopeFromVerified(\n verified: VerifiedCredential,\n): IssuedCredentialEnvelope {\n const { verifiedAt: _verifiedAt, credentialDigest: _credentialDigest,\n statusCheckedAt: _statusCheckedAt, ...envelope } = verified;\n return envelope;\n}\n\nexport interface BuildPolicyCredentialPresentationV3Input {\n readonly policy: UnifiedPolicyV2;\n readonly policyCid: string;\n readonly challenge: PolicyChallengeV3;\n readonly requirement: CredentialRequirement;\n readonly credential: VerifiedCredential;\n readonly credentialSpaceOwnerDid: string;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly sign: (digest: Uint8Array) => Promise<Uint8Array>;\n readonly now?: Date;\n readonly jti?: string;\n}\n\nexport async function buildPolicyCredentialPresentationV3(\n input: BuildPolicyCredentialPresentationV3Input,\n): Promise<PolicyCredentialPresentationV3> {\n const policy = validateUnifiedPolicyV2(input.policy, input.policyCid);\n const requirement = validateCredentialRequirement(input.requirement);\n const commitment = policy.credentialRequirement;\n const requirementDigest = await credentialRequirementDigest(requirement);\n const credentialDigest = await sha256Base64Url(input.credential.credential);\n if (\n requirementDigest !== commitment.requirementDigest ||\n input.credential.descriptorDigest !== commitment.descriptorDigest ||\n input.credential.credentialDigest !== credentialDigest ||\n input.credential.issuerDid !== commitment.issuerDid ||\n input.credential.issuerKid !== commitment.issuerKid ||\n jcsCanonicalize(input.credential.profile) !== jcsCanonicalize(commitment.profile) ||\n jcsCanonicalize(input.credential.credentialType) !==\n jcsCanonicalize(commitment.credentialType)\n ) {\n throw new Error(\"credential does not match the signed Policy/v2 requirement\");\n }\n const requestedCapabilities = input.requestedCapabilities.map(\n normalizeUnifiedPolicyCapability,\n );\n if (\n requestedCapabilities.length === 0 ||\n requestedCapabilities.some(\n (requested) =>\n !policy.capabilityCeiling.some((authority) =>\n unifiedPolicyCapabilityContains(authority, requested),\n ),\n )\n ) {\n throw new Error(\"requested capabilities exceed the signed Policy/v2 ceiling\");\n }\n const challenge = input.challenge;\n const holderDid = input.credential.holderDid;\n if (\n challenge.policyCid !== input.policyCid ||\n challenge.recipientDid !== holderDid ||\n input.credential.subjectDid !== holderDid ||\n typeof challenge.nodeAudience !== \"string\" ||\n challenge.nodeAudience.length === 0 ||\n typeof challenge.expiresAt !== \"string\" ||\n !Number.isFinite(Date.parse(challenge.expiresAt))\n ) {\n throw new Error(\"policy challenge binding is invalid\");\n }\n didKeyBytes(holderDid);\n const now = input.now ?? new Date();\n const challengeExpiry = Date.parse(challenge.expiresAt);\n const credentialExpiry = Date.parse(input.credential.expiresAt);\n const expiresAtMs = Math.min(\n now.getTime() + 60_000,\n challengeExpiry,\n credentialExpiry,\n );\n if (expiresAtMs <= now.getTime()) throw new Error(\"policy challenge is expired\");\n const unsigned = Object.freeze({\n schema: POLICY_PRESENTATION_V3_SCHEMA,\n jti:\n input.jti ??\n encodeBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n challengeId: challenge.challengeId,\n nonce: challenge.nonce,\n policyCid: input.policyCid,\n nodeAudience: challenge.nodeAudience,\n holderDid,\n subjectDid: input.credential.subjectDid,\n credentialSpaceOwnerDid: nonEmpty(\n input.credentialSpaceOwnerDid,\n \"credential space owner DID\",\n ),\n credentialDigest,\n requirementDigest,\n descriptorDigest: input.credential.descriptorDigest,\n requestedCapabilities: Object.freeze(requestedCapabilities),\n issuedAt: rfc3339Seconds(now),\n expiresAt: rfc3339Seconds(new Date(expiresAtMs)),\n });\n const digest = sha256(\n new TextEncoder().encode(\n POLICY_PRESENTATION_V3_DOMAIN + jcsCanonicalize(unsigned),\n ),\n );\n const signature = await input.sign(digest);\n if (\n signature.length !== 64 ||\n !ed25519.verify(signature, digest, didKeyBytes(holderDid))\n ) {\n throw new Error(\"policy presentation signature is invalid\");\n }\n return Object.freeze({\n ...unsigned,\n signature: Object.freeze({\n suite: \"Ed25519\" as const,\n signerDid: holderDid,\n value: encodeBase64Url(signature),\n }),\n });\n}\n\nexport interface AdmitPolicyCredentialV3Input\n extends Omit<BuildPolicyCredentialPresentationV3Input, \"challenge\"> {\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly nodeOrigin: string;\n /** Root authorization CID of the recipient's active TinyCloud account session. */\n readonly accountAuthorizationCid: string;\n /** Recipient-owned `credentials` space covered by the account authorization. */\n readonly credentialSpaceId: string;\n readonly fetch?: typeof fetch;\n}\n\nexport interface PolicyCredentialAdmissionV3 {\n readonly challenge: PolicyChallengeV3;\n readonly presentation: PolicyCredentialPresentationV3;\n readonly session: PolicySessionUcanV1;\n}\n\n/**\n * Present verified TC-463 output to the Policy/v3 admission ceremony.\n * Raw credential material appears only in the TLS POST body.\n */\nexport async function admitPolicyCredentialV3(\n input: AdmitPolicyCredentialV3Input,\n): Promise<PolicyCredentialAdmissionV3> {\n const policy = validateUnifiedPolicyV2(input.policy, input.policyCid);\n const nodeOrigin = policyNodeOrigin(input.nodeOrigin);\n const accountAuthorizationCid = nonEmpty(\n input.accountAuthorizationCid,\n \"account authorization CID\",\n );\n const credentialSpaceId = nonEmpty(\n input.credentialSpaceId,\n \"credential space ID\",\n );\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const challenge = await requestPolicyChallengeV3({\n nodeOrigin,\n policyCid: input.policyCid,\n recipientDid: input.credential.holderDid,\n requestedCapabilities: input.requestedCapabilities,\n fetch: fetchFn,\n });\n const presentation = await buildPolicyCredentialPresentationV3({\n ...input,\n policy,\n challenge,\n });\n const response = await fetchFn(\n new URL(\"/share/v3/policy/delegations\", nodeOrigin),\n {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({\n policyCid: input.policyCid,\n challengeId: challenge.challengeId,\n nonce: challenge.nonce,\n requirement: validateCredentialRequirement(input.requirement),\n credential: envelopeFromVerified(input.credential),\n accountAuthorizationCid,\n credentialSpaceId,\n presentation,\n }),\n },\n );\n if (!response.ok) throw new Error(`policy delegation rejected (${response.status})`);\n const value = record(await response.json(), \"policy delegation\");\n if (\n value.admitted !== true ||\n typeof value.sessionCid !== \"string\" ||\n typeof value.authorization !== \"string\"\n ) {\n throw new Error(\"policy delegation response is invalid\");\n }\n const session = parsePolicySessionUcan(value.authorization, [\n input.policyRootCid,\n input.enforcementRootCid,\n ]);\n const expectedAttenuation = compactAttenuationForPolicyCapabilities(\n input.requestedCapabilities,\n );\n if (\n session.cid !== value.sessionCid ||\n session.aud !== input.credential.holderDid ||\n session.fact.policyCid !== input.policyCid ||\n session.fact.recipientDid !== input.credential.holderDid ||\n session.fact.policyDelegationCid !== input.policyRootCid ||\n session.fact.enforcementDelegationCid !== input.enforcementRootCid ||\n jcsCanonicalize(session.att) !== jcsCanonicalize(expectedAttenuation)\n ) {\n throw new Error(\"policy delegation signed binding is invalid\");\n }\n return Object.freeze({ challenge, presentation, session });\n}\n","import { jcsCanonicalize } from \"../policy/jcs\";\n\nexport function encodeBase64Url(bytes: Uint8Array): string {\n if (typeof btoa === \"function\") {\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n }\n return Buffer.from(bytes).toString(\"base64url\");\n}\n\nexport function decodeBase64Url(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]*$/.test(value) || value.length % 4 === 1) throw new TypeError(\"value is not canonical base64url\");\n const bytes = typeof atob === \"function\"\n ? Uint8Array.from(atob(value.replace(/-/g, \"+\").replace(/_/g, \"/\").padEnd(Math.ceil(value.length / 4) * 4, \"=\")), (c) => c.charCodeAt(0))\n : new Uint8Array(Buffer.from(value, \"base64url\"));\n if (encodeBase64Url(bytes) !== value) throw new TypeError(\"value is not canonical base64url\");\n return bytes;\n}\n\nexport async function sha256Base64Url(value: string | Uint8Array): Promise<string> {\n const bytes = typeof value === \"string\" ? new TextEncoder().encode(value) : value;\n return encodeBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", bytes)));\n}\n\nexport async function canonicalDigest(value: unknown): Promise<string> {\n return sha256Base64Url(jcsCanonicalize(value));\n}\n\nexport function isDigest(value: unknown): value is string {\n return typeof value === \"string\" && /^[A-Za-z0-9_-]{43}$/.test(value);\n}\n","export const CREDENTIAL_ERROR_CODES = [\n \"ACTIVE_SESSION_REQUIRED\",\n \"CANCELED\",\n \"DESCRIPTOR_INVALID\",\n \"HOLDER_MISMATCH\",\n \"ISSUER_UNREADY\",\n \"OFFLINE\",\n \"POPUP_BLOCKED\",\n \"REQUEST_EXPIRED\",\n \"REQUEST_SUBSTITUTED\",\n \"SIGNATURE_REJECTED\",\n \"UNSUPPORTED_PROFILE\",\n \"UNSUPPORTED_VERSION\",\n \"VERIFICATION_FAILED\",\n \"VERIFIED_NOT_SAVED\",\n] as const;\n\nexport type CredentialErrorCode = (typeof CREDENTIAL_ERROR_CODES)[number];\n\nconst RECOVERABLE = new Set<CredentialErrorCode>([\n \"CANCELED\",\n \"ISSUER_UNREADY\",\n \"OFFLINE\",\n \"POPUP_BLOCKED\",\n \"REQUEST_EXPIRED\",\n \"SIGNATURE_REJECTED\",\n \"UNSUPPORTED_PROFILE\",\n \"UNSUPPORTED_VERSION\",\n \"VERIFIED_NOT_SAVED\",\n]);\n\n/** Stable, redaction-safe error returned by the credential acquisition module. */\nexport class CredentialError extends Error {\n readonly name = \"CredentialError\";\n readonly recoverable: boolean;\n\n constructor(\n readonly code: CredentialErrorCode,\n message: string,\n readonly details: {\n readonly retryAfterMs?: number;\n readonly state?: string;\n readonly correlationId?: string;\n readonly cause?: unknown;\n } = {},\n ) {\n super(message);\n this.recoverable = RECOVERABLE.has(code);\n }\n}\n\nexport function credentialError(\n value: unknown,\n fallbackCode: CredentialErrorCode = \"VERIFICATION_FAILED\",\n): CredentialError {\n if (value instanceof CredentialError) return value;\n if (value instanceof DOMException && value.name === \"AbortError\") {\n return new CredentialError(\"CANCELED\", \"Credential acquisition was canceled\", { cause: value });\n }\n return new CredentialError(fallbackCode, \"Credential acquisition failed\", { cause: value });\n}\n","import { canonicalDigest } from \"./digest\";\nimport { CredentialError } from \"./errors\";\nimport type { CredentialFlowDescriptor, CredentialRequirement, StoredCredentialRecord, VerifiedCredential } from \"./types\";\n\nconst ID = /^[a-z0-9][a-z0-9._-]{0,127}(?:\\/v1)?$/;\n\nexport function validateCredentialRequirement(value: unknown): CredentialRequirement {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential requirement is invalid\");\n const raw = value as Record<string, unknown>;\n if (Object.keys(raw).some((key) => ![\"type\", \"version\", \"profile\", \"credentialType\", \"claims\", \"maxAgeSeconds\"].includes(key)) || raw.type !== \"TinyCloudCredentialRequirement\" || raw.version !== 1) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential requirement version is unsupported\");\n const pair = (candidate: unknown, label: string) => {\n if (typeof candidate !== \"object\" || candidate === null || Array.isArray(candidate)) throw new CredentialError(\"UNSUPPORTED_PROFILE\", `${label} is invalid`);\n const item = candidate as Record<string, unknown>;\n if (Object.keys(item).length !== 2 || typeof item.id !== \"string\" || !ID.test(item.id) || item.version !== 1) throw new CredentialError(\"UNSUPPORTED_PROFILE\", `${label} version is unsupported`);\n return { id: item.id, version: 1 as const };\n };\n if (typeof raw.claims !== \"object\" || raw.claims === null || Array.isArray(raw.claims)) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential claims are invalid\");\n const claims: Record<string, string> = {};\n for (const [key, value] of Object.entries(raw.claims as Record<string, unknown>).sort(([a], [b]) => a.localeCompare(b))) {\n if (!ID.test(key) || typeof value !== \"string\" || value.length === 0 || value.length > 4096) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential claim is invalid\");\n claims[key] = value;\n }\n if (raw.maxAgeSeconds !== undefined && (!Number.isSafeInteger(raw.maxAgeSeconds) || (raw.maxAgeSeconds as number) < 1)) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential freshness is invalid\");\n return Object.freeze({ type: \"TinyCloudCredentialRequirement\", version: 1, profile: pair(raw.profile, \"profile\"), credentialType: pair(raw.credentialType, \"credentialType\"), claims: Object.freeze(claims), ...(raw.maxAgeSeconds === undefined ? {} : { maxAgeSeconds: raw.maxAgeSeconds as number }) });\n}\n\nexport async function credentialRequirementDigest(requirement: CredentialRequirement): Promise<string> {\n return canonicalDigest(validateCredentialRequirement(requirement));\n}\n\nexport function descriptorSatisfiesRequirement(descriptor: CredentialFlowDescriptor, requirement: CredentialRequirement): boolean {\n const requested = validateCredentialRequirement(requirement);\n if (descriptor.profile !== requested.profile.id || descriptor.profileVersion !== requested.profile.version || descriptor.format.vct !== requested.credentialType.id || requested.credentialType.version !== 1) return false;\n const declared = new Map(descriptor.claims.map((claim) => [claim.name, claim]));\n return Object.keys(requested.claims).every((id) => declared.get(id)?.matching === \"normalized_exact\");\n}\n\nfunction matches(requirement: CredentialRequirement, candidate: Pick<StoredCredentialRecord | VerifiedCredential, \"profile\" | \"credentialType\" | \"claims\" | \"holderDid\" | \"expiresAt\" | \"issuedAt\">, holderDid: string, now: Date): boolean {\n if (candidate.holderDid !== holderDid || candidate.profile.id !== requirement.profile.id || candidate.profile.version !== requirement.profile.version || candidate.credentialType.id !== requirement.credentialType.id || candidate.credentialType.version !== requirement.credentialType.version) return false;\n if (new Date(candidate.expiresAt).getTime() <= now.getTime()) return false;\n if (requirement.maxAgeSeconds !== undefined && now.getTime() - new Date(candidate.issuedAt).getTime() > requirement.maxAgeSeconds * 1000) return false;\n return Object.entries(requirement.claims).every(([key, value]) => candidate.claims[key] === value);\n}\n\nexport function credentialMatchesRequirement(requirement: CredentialRequirement, candidate: Pick<StoredCredentialRecord | VerifiedCredential, \"profile\" | \"credentialType\" | \"claims\" | \"holderDid\" | \"expiresAt\" | \"issuedAt\">, holderDid: string, now = new Date()): boolean {\n return matches(validateCredentialRequirement(requirement), candidate, holderDid, now);\n}\n"],"mappings":"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","names":["code","output","length","code","code","objectHasOwn","object","name","encode","length","i","j","decode","name","encode","decode","alphabet","encode","decode","textEncoder","identity_exports","identity","encode","decode","decode","code","code","digest","decode","equals","encode","identity","sha256","from","name","code","encode","digest","name","sha256","from","base","baseCache","code","digest","equals","base","decode","length","cache","cid","identity_exports","import_viem","import_viem","textEncoder","objectHasOwn","object","requiredString","assertExactKeys","requiredValue","hasOwn","requiredArray","digest","encoded","alphabet","hex","code","expectObject","assertExactKeys","requiredArray","requiredString","hasOwn","requiredStringArray","requiredValue","object","objectHasOwn","import_ed25519","digest","alphabet","import_ed25519","import_sha256","encodeBase64Url","encodeBase64Url","code","value","exactKeys","hex","encodeBase64Url","digest"]}
1
+ {"version":3,"sources":["../../src/policy/index.ts","../../src/policy/errors.ts","../../src/policy/jcs.ts","../../src/policy/capability.ts","../../src/policy/signed-object.ts","../../../../node_modules/multiformats/src/bases/base10.ts","../../../../node_modules/multiformats/src/bytes.ts","../../../../node_modules/multiformats/src/vendor/base-x.js","../../../../node_modules/multiformats/src/bases/base.ts","../../../../node_modules/multiformats/src/bases/base16.ts","../../../../node_modules/multiformats/src/bases/base2.ts","../../../../node_modules/multiformats/src/bases/base256emoji.ts","../../../../node_modules/multiformats/src/bases/base32.ts","../../../../node_modules/multiformats/src/bases/base36.ts","../../../../node_modules/multiformats/src/bases/base58.ts","../../../../node_modules/multiformats/src/bases/base64.ts","../../../../node_modules/multiformats/src/bases/base8.ts","../../../../node_modules/multiformats/src/bases/identity.ts","../../../../node_modules/multiformats/src/codecs/json.ts","../../../../node_modules/multiformats/src/hashes/identity.ts","../../../../node_modules/multiformats/src/vendor/varint.js","../../../../node_modules/multiformats/src/varint.ts","../../../../node_modules/multiformats/src/hashes/digest.ts","../../../../node_modules/multiformats/src/hashes/sha2-browser.ts","../../../../node_modules/multiformats/src/hashes/hasher.ts","../../../../node_modules/multiformats/src/cid.ts","../../../../node_modules/multiformats/src/basics.ts","../../src/identity.ts","../../src/policy/authoring.ts","../../src/policy/unified.ts","../../src/policy/credential-admission.ts","../../src/credentials/digest.ts","../../src/credentials/errors.ts","../../src/credentials/requirement.ts"],"sourcesContent":["export {\n SignatureMaterialError,\n SignatureVerificationError,\n SignedObjectCanonicalizationError,\n SignedObjectDigestError,\n SignedObjectIdError,\n SignedObjectProfileError,\n SignedObjectSchemaError,\n SigningKeyBindingError,\n UnsupportedSignatureSuiteError,\n toSignedObjectError,\n type SignedObjectErrorCode,\n} from \"./errors\";\n\nexport {\n jcsCanonicalize,\n normalizeJson,\n serialize as serializeJcsJson,\n type JsonValue,\n} from \"./jcs\";\n\nexport {\n PolicyCapabilityError,\n canonicalizePolicyCapability,\n normalizePolicyCapability,\n policyCapabilityContains,\n policyCapabilityDigestHex,\n type PolicyCapability,\n type PolicyCapabilityErrorCode,\n} from \"./capability\";\n\nexport {\n POLICY_VERSION_V0,\n OWNER_NODE_ENDPOINT_SCHEMA,\n PolicyAuthoringError,\n TRANSCRIPT_SHARE_BOOTSTRAP_SCHEMA,\n W3C_VC_CREDENTIAL_VERIFIER,\n composeTranscriptShareBootstrap,\n createAndSignRequesterPolicyEngineRecord,\n createAndSignTranscriptSharePolicy,\n createUnsignedPolicyEngineRecord,\n verifyPolicyEngineRecordForRequester,\n type ComposeTranscriptShareBootstrapInput,\n type CreatePolicyEngineRecordInput,\n type CreateTranscriptSharePolicyInput,\n type PolicyAuthoringErrorCode,\n type TranscriptShareBootstrap,\n type VerifyPolicyEngineRecordOptions,\n} from \"./authoring\";\n\nexport {\n ED25519_JCS_SIGNATURE_SUITE,\n EIP191_JCS_SIGNATURE_SUITE,\n POLICY_ENGINE_RECORD_SCHEMA,\n POLICY_SCHEMA,\n POLICY_STATUS_SCHEMA,\n canonicalizeSignedObjectUnsigned,\n createAndSignPolicy,\n createAndSignPolicyEngineRecord,\n createAndSignPolicyStatus,\n createAndSignSignedObject,\n deriveSignedObjectMaterial,\n signedObjectIdFor,\n validatePolicyEngineRecordSigned,\n validatePolicyEngineRecordSignedShape,\n validatePolicyEngineRecordUnsigned,\n validatePolicySigned,\n validatePolicySignedShape,\n validatePolicyStatusSigned,\n validatePolicyStatusSignedShape,\n validatePolicyStatusUnsigned,\n validatePolicyUnsigned,\n verifyPolicy,\n verifyPolicyEngineRecord,\n verifyPolicyStatus,\n verifySignedObject,\n type JsonObject,\n type Policy,\n type PolicyEngineRecord,\n type PolicyStatus,\n type SignatureSuite,\n type SignedObjectKind,\n type SignedObjectMaterial,\n type SignedObjectSignature,\n type SignedObjectSigner,\n type SignedObjectVerificationResult,\n type SignedPolicyObject,\n type UnsignedPolicy,\n type UnsignedPolicyEngineRecord,\n type UnsignedPolicyObject,\n type UnsignedPolicyStatus,\n} from \"./signed-object\";\n\nexport {\n ATTESTED_ENFORCER_BINDING_V2_SCHEMA,\n CONTENT_SOURCE_V1_DOMAIN,\n LAST_V2_CREATE_AT,\n LAST_V2_READ_AT,\n MAX_LEGACY_ENVELOPE_EXPIRES_AT,\n NATIVE_PROJECTION_V1_DOMAIN,\n POLICY_CAPABILITY_V1_DOMAIN,\n POLICY_CAPABILITY_V1_SCHEMA,\n POLICY_ENFORCEMENT_DELEGATION_V2_SCHEMA,\n POLICY_SESSION_UCAN_V1_PROFILE,\n POLICY_V1_DOMAIN,\n POLICY_V1_SCHEMA,\n ROOT_REVOCATION_V1_SCHEMA,\n ROOT_REVOCATION_V1_DOMAIN,\n ROOT_STATUS_RENEWAL_V1_DOMAIN,\n ROOT_STATUS_V1_DOMAIN,\n ROOT_STATUS_CHECKPOINT_V1_SCHEMA,\n canonicalizeUnifiedPolicyCapability,\n compactAttenuationContains,\n createCompactPolicyInvocation,\n createCompactPolicyDescendant,\n contentSourceDigestHex,\n normalizeUnifiedPolicyCapability,\n mintPolicySessionV3,\n getPolicyRootStatusV3,\n verifyPolicyRootStatusCheckpointV3,\n verifyPolicyRootRevocationV3,\n parseCompactUcanAuthorization,\n parsePolicySessionUcan,\n policyCidFromCanonicalBytes,\n policyDigestHex,\n policyIdForDigestHex,\n registerPolicyV3,\n requestPolicyChallengeV3,\n renewPolicyRootStatusV3,\n revokePolicyRootV3,\n projectUnifiedPolicyCapabilities,\n projectUnifiedPolicyCapability,\n signCompactUcanAuthorization,\n signCompactUcanRootAuthorization,\n unifiedNativeProjectionHashHex,\n unifiedPolicyCapabilityContains,\n unifiedPolicyCapabilityDigestHex,\n unifiedPolicyCapabilityFromNative,\n type CompactUcanAuthorizationV1,\n type CompactPolicyInvocationInput,\n type PolicySessionUcanV1,\n type PolicySessionUcanFactV1,\n type PolicyChallengeV3,\n type PolicyRootStatusV3,\n type PolicyRootV3,\n type RegisterPolicyV3Input,\n type RegisterPolicyV3Receipt,\n type AttestedEnforcerBindingV2,\n type SignCompactUcanAuthorizationInput,\n type SignCompactUcanRootAuthorizationInput,\n type UnifiedContentSource,\n type UnifiedEncryptionCapability,\n type UnifiedKvCapability,\n type UnifiedNativeCapability,\n type UnifiedPolicyCapability,\n type UnifiedPolicyV1,\n type UnifiedResourceSelector,\n} from \"./unified\";\nexport {\n POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE,\n POLICY_PRESENTATION_V3_DOMAIN,\n POLICY_PRESENTATION_V3_SCHEMA,\n POLICY_PRESENTATION_V4_DOMAIN,\n POLICY_PRESENTATION_V4_SCHEMA,\n POLICY_V2_DOMAIN,\n POLICY_V2_SCHEMA,\n admitPolicyCredentialV3,\n admitPolicyCredentialV4,\n buildPolicyCredentialPresentationV3,\n buildPolicyCredentialPresentationV4,\n issuedCredentialEnvelopeFromVerified,\n signPolicyCredentialPresentationV4,\n policyV2DigestHex,\n validatePolicyCredentialRequirementV1,\n validateUnifiedPolicyV2,\n type AdmitPolicyCredentialV3Input,\n type AdmitPolicyCredentialV4Input,\n type BuildPolicyCredentialPresentationV3Input,\n type BuildPolicyCredentialPresentationV4Input,\n type PolicyCredentialAdmissionV3,\n type PolicyCredentialAdmissionV4,\n type PolicyCredentialPresentationV3,\n type PolicyCredentialPresentationV4,\n type UnsignedPolicyCredentialPresentationV4,\n type PolicyCredentialRequirementV1,\n type UnsignedUnifiedPolicyV2,\n type UnifiedPolicyV2,\n} from \"./credential-admission\";\n","export type SignedObjectErrorCode =\n | \"schema-invalid\"\n | \"canonicalization-mismatch\"\n | \"digest-mismatch\"\n | \"id-mismatch\"\n | \"signing-key-binding\"\n | \"signature-material-invalid\"\n | \"signature-suite-unsupported\"\n | \"signature-invalid\";\n\nexport class SignedObjectProfileError extends Error {\n public readonly code: SignedObjectErrorCode;\n\n constructor(code: SignedObjectErrorCode, message: string) {\n super(message);\n this.name = \"SignedObjectProfileError\";\n this.code = code;\n }\n}\n\nexport class SignedObjectSchemaError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"schema-invalid\", message);\n this.name = \"SignedObjectSchemaError\";\n }\n}\n\nexport class SignedObjectCanonicalizationError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"canonicalization-mismatch\", message);\n this.name = \"SignedObjectCanonicalizationError\";\n }\n}\n\nexport class SignedObjectDigestError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"digest-mismatch\", message);\n this.name = \"SignedObjectDigestError\";\n }\n}\n\nexport class SignedObjectIdError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"id-mismatch\", message);\n this.name = \"SignedObjectIdError\";\n }\n}\n\nexport class SigningKeyBindingError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"signing-key-binding\", message);\n this.name = \"SigningKeyBindingError\";\n }\n}\n\nexport class SignatureMaterialError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"signature-material-invalid\", message);\n this.name = \"SignatureMaterialError\";\n }\n}\n\nexport class UnsupportedSignatureSuiteError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"signature-suite-unsupported\", message);\n this.name = \"UnsupportedSignatureSuiteError\";\n }\n}\n\nexport class SignatureVerificationError extends SignedObjectProfileError {\n constructor(message: string) {\n super(\"signature-invalid\", message);\n this.name = \"SignatureVerificationError\";\n }\n}\n\nexport function toSignedObjectError(error: unknown): SignedObjectProfileError {\n if (error instanceof SignedObjectProfileError) {\n return error;\n }\n return new SignedObjectProfileError(\n \"schema-invalid\",\n error instanceof Error ? error.message : String(error),\n );\n}\n","import { SignedObjectCanonicalizationError } from \"./errors\";\n\nexport type JsonValue =\n | null\n | boolean\n | number\n | string\n | JsonValue[]\n | { readonly [key: string]: JsonValue };\n\ntype MutableJsonObject = { [key: string]: JsonValue };\nconst objectHasOwn: (object: object, propertyKey: PropertyKey) => boolean =\n (Object as ObjectConstructor & {\n hasOwn?: (object: object, propertyKey: PropertyKey) => boolean;\n }).hasOwn ??\n (Object.prototype.hasOwnProperty.call.bind(\n Object.prototype.hasOwnProperty,\n ) as (object: object, propertyKey: PropertyKey) => boolean);\n\n/**\n * RFC 8785 JSON Canonicalization Scheme encoder for the signed-object profile.\n *\n * This local encoder is intentionally stricter than JSON.stringify:\n * it rejects non-plain JSON inputs, sparse arrays, undefined/functions/symbols,\n * non-finite numbers, BigInt, dangerous prototype keys, and lone surrogates.\n * Object keys are sorted lexicographically by their raw UTF-16 code units,\n * as required by RFC 8785 section 3.2.3, before serialization.\n */\nexport function jcsCanonicalize(input: unknown): string {\n return serialize(normalizeJson(input, \"$\"));\n}\n\nexport function normalizeJson(input: unknown, path = \"$\"): JsonValue {\n if (input === null) {\n return null;\n }\n\n switch (typeof input) {\n case \"boolean\":\n return input;\n case \"number\":\n if (!Number.isFinite(input)) {\n throw new SignedObjectCanonicalizationError(\n `${path} must be a finite JSON number`,\n );\n }\n return input;\n case \"string\":\n assertUnicodeScalarString(input, path);\n return input;\n case \"object\":\n return normalizeJsonObjectOrArray(input, path);\n case \"bigint\":\n case \"function\":\n case \"symbol\":\n case \"undefined\":\n default:\n throw new SignedObjectCanonicalizationError(\n `${path} is not a JSON value`,\n );\n }\n}\n\nexport function serialize(value: JsonValue): string {\n if (value === null) {\n return \"null\";\n }\n\n switch (typeof value) {\n case \"boolean\":\n return value ? \"true\" : \"false\";\n case \"number\": {\n const encoded = JSON.stringify(value);\n if (encoded === undefined) {\n throw new SignedObjectCanonicalizationError(\n \"number could not be serialized as JSON\",\n );\n }\n return encoded;\n }\n case \"string\":\n return JSON.stringify(value);\n case \"object\":\n if (Array.isArray(value)) {\n return `[${value.map((item) => serialize(item)).join(\",\")}]`;\n }\n return serializeObject(value);\n default:\n throw new SignedObjectCanonicalizationError(\n `unsupported JSON value type ${typeof value}`,\n );\n }\n}\n\nfunction normalizeJsonObjectOrArray(input: object, path: string): JsonValue {\n assertNoSymbolKeys(input, path);\n\n if (Array.isArray(input)) {\n for (const key of Object.getOwnPropertyNames(input)) {\n if (key === \"length\") {\n continue;\n }\n if (!isArrayIndexKey(key, input.length)) {\n throw new SignedObjectCanonicalizationError(\n `${path}.${key} is not allowed on a JSON array`,\n );\n }\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (descriptor?.enumerable !== true) {\n throw new SignedObjectCanonicalizationError(\n `${path}[${key}] must be an enumerable JSON array item`,\n );\n }\n if (!(\"value\" in descriptor)) {\n throw new SignedObjectCanonicalizationError(\n `${path}[${key}] must be a JSON data property`,\n );\n }\n }\n const output: JsonValue[] = [];\n for (let index = 0; index < input.length; index++) {\n if (!objectHasOwn(input, index)) {\n throw new SignedObjectCanonicalizationError(\n `${path}[${index}] must not be a sparse array hole`,\n );\n }\n output.push(normalizeJson(input[index], `${path}[${index}]`));\n }\n return output;\n }\n\n const proto = Object.getPrototypeOf(input);\n if (proto !== Object.prototype && proto !== null) {\n throw new SignedObjectCanonicalizationError(\n `${path} must be a plain JSON object`,\n );\n }\n\n const output = Object.create(null) as MutableJsonObject;\n for (const key of Object.getOwnPropertyNames(input)) {\n assertUnicodeScalarString(key, `${path} key`);\n if (key === \"__proto__\" || key === \"constructor\") {\n throw new SignedObjectCanonicalizationError(\n `${path}.${key} is not allowed`,\n );\n }\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (descriptor?.enumerable !== true) {\n throw new SignedObjectCanonicalizationError(\n `${path}.${key} must be an enumerable JSON object property`,\n );\n }\n if (!(\"value\" in descriptor)) {\n throw new SignedObjectCanonicalizationError(\n `${path}.${key} must be a JSON data property`,\n );\n }\n const value = descriptor.value;\n output[key] = normalizeJson(value, `${path}.${key}`);\n }\n return output;\n}\n\nfunction assertNoSymbolKeys(input: object, path: string): void {\n if (Object.getOwnPropertySymbols(input).length > 0) {\n throw new SignedObjectCanonicalizationError(\n `${path} must not have symbol properties`,\n );\n }\n}\n\nfunction isArrayIndexKey(key: string, length: number): boolean {\n if (!/^(0|[1-9]\\d*)$/.test(key)) {\n return false;\n }\n const index = Number(key);\n return Number.isSafeInteger(index) && index >= 0 && index < length;\n}\n\nfunction serializeObject(value: { readonly [key: string]: JsonValue }): string {\n const keys = Object.keys(value).sort(compareUtf16CodeUnits);\n const parts = keys.map((key) => `${JSON.stringify(key)}:${serialize(value[key])}`);\n return `{${parts.join(\",\")}}`;\n}\n\nfunction compareUtf16CodeUnits(a: string, b: string): number {\n const max = Math.min(a.length, b.length);\n for (let index = 0; index < max; index++) {\n const leftCodeUnit = a.charCodeAt(index);\n const rightCodeUnit = b.charCodeAt(index);\n if (leftCodeUnit !== rightCodeUnit) {\n return leftCodeUnit - rightCodeUnit;\n }\n }\n return a.length - b.length;\n}\n\nfunction assertUnicodeScalarString(value: string, path: string): void {\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (Number.isNaN(next) || next < 0xdc00 || next > 0xdfff) {\n throw new SignedObjectCanonicalizationError(\n `${path} contains a lone high surrogate`,\n );\n }\n index++;\n continue;\n }\n if (code >= 0xdc00 && code <= 0xdfff) {\n throw new SignedObjectCanonicalizationError(\n `${path} contains a lone low surrogate`,\n );\n }\n }\n}\n","import { CAPABILITY_REGISTRY } from \"@tinycloud/bootstrap\";\nimport { bytesToHex, sha256 } from \"viem\";\nimport { jcsCanonicalize, normalizeJson, type JsonValue } from \"./jcs\";\n\nconst POLICY_CAPABILITY_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v0\";\nconst textEncoder = new TextEncoder();\n\nexport type PolicyCapabilityErrorCode =\n | \"policy-capability-malformed\"\n | \"policy-capability-unknown-key\"\n | \"policy-capability-malformed-service\"\n | \"policy-capability-malformed-space\"\n | \"policy-capability-malformed-path\"\n | \"policy-capability-malformed-action\"\n | \"policy-capability-empty-actions\"\n | \"policy-capability-malformed-caveats\";\n\nexport class PolicyCapabilityError extends Error {\n public readonly code: PolicyCapabilityErrorCode;\n\n constructor(code: PolicyCapabilityErrorCode, message: string) {\n super(message);\n this.name = \"PolicyCapabilityError\";\n this.code = code;\n }\n}\n\nexport interface PolicyCapability {\n readonly service: \"tinycloud.kv\" | \"tinycloud.sql\" | \"tinycloud.vfs\";\n readonly space: string;\n readonly path: string;\n readonly actions: readonly string[];\n readonly caveats?: JsonObject;\n}\n\nexport type JsonObject = { readonly [key: string]: JsonValue };\n\ninterface NormalizeOptions {\n readonly allowPrefixPaths?: boolean;\n readonly requireCanonical?: boolean;\n}\n\nconst objectHasOwn: (object: object, propertyKey: PropertyKey) => boolean =\n (Object as ObjectConstructor & {\n hasOwn?: (object: object, propertyKey: PropertyKey) => boolean;\n }).hasOwn ??\n (Object.prototype.hasOwnProperty.call.bind(\n Object.prototype.hasOwnProperty,\n ) as (object: object, propertyKey: PropertyKey) => boolean);\n\nconst CEILING_SERVICES = new Set([\"tinycloud.kv\", \"tinycloud.sql\", \"tinycloud.vfs\"]);\nconst GRANTABLE_ACTIONS = new Map<string, ReadonlySet<string>>();\n\nfor (const entry of CAPABILITY_REGISTRY) {\n if (!CEILING_SERVICES.has(entry.service)) {\n continue;\n }\n if (entry.aliasOf !== undefined || entry.implies !== undefined || entry.urn.endsWith(\"/*\")) {\n continue;\n }\n const existing = GRANTABLE_ACTIONS.get(entry.service);\n if (existing === undefined) {\n GRANTABLE_ACTIONS.set(entry.service, new Set([entry.urn]));\n continue;\n }\n (existing as Set<string>).add(entry.urn);\n}\n\n/**\n * Strict authoring validator for resolved Listen-adapter PolicyCapability JSON.\n * It accepts only concrete service/space/path/action/caveat forms and rejects\n * manifest-shaped permission payloads before any Policy is signed.\n */\nexport function normalizePolicyCapability(input: unknown): PolicyCapability {\n return normalizePolicyCapabilityWithOptions(input, { requireCanonical: true });\n}\n\n/**\n * Frozen-vector canonicalizer for the m1-b-01a policy-capability vectors.\n * Prefix paths are allowed here only to preserve behavioral conformance with\n * the vendored engine vectors; authoring uses normalizePolicyCapability.\n */\nexport function canonicalizePolicyCapability(input: unknown): PolicyCapability {\n return normalizePolicyCapabilityWithOptions(input, { allowPrefixPaths: true });\n}\n\nexport function policyCapabilityDigestHex(input: unknown): string {\n const canonical = canonicalizePolicyCapability(input);\n const jcs = textEncoder.encode(jcsCanonicalize(canonical));\n const domain = textEncoder.encode(`${POLICY_CAPABILITY_DOMAIN}\\0`);\n const bytes = new Uint8Array(domain.length + jcs.length);\n bytes.set(domain, 0);\n bytes.set(jcs, domain.length);\n return bytesToHex(sha256(bytes, \"bytes\")).slice(2);\n}\n\nexport function policyCapabilityContains(authority: unknown, request: unknown): boolean {\n let auth: PolicyCapability;\n let req: PolicyCapability;\n try {\n auth = canonicalizePolicyCapability(authority);\n req = canonicalizePolicyCapability(request);\n } catch {\n return false;\n }\n if (auth.service !== req.service || auth.space !== req.space) {\n return false;\n }\n if (!pathContains(auth.path, req.path)) {\n return false;\n }\n const authActions = new Set(auth.actions);\n for (const action of req.actions) {\n if (!authActions.has(action)) {\n return false;\n }\n }\n return caveatsContain(auth.caveats, req.caveats);\n}\n\nfunction normalizePolicyCapabilityWithOptions(\n input: unknown,\n options: NormalizeOptions,\n): PolicyCapability {\n const object = expectObject(input, \"$\");\n assertExactKeys(object, [\"service\", \"space\", \"path\", \"actions\", \"caveats\"], \"$\");\n const service = requiredString(object, \"service\", \"$\", \"policy-capability-malformed-service\");\n if (!CEILING_SERVICES.has(service)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-service\",\n \"$.service is outside the frozen permissionsCeiling vocabulary\",\n );\n }\n const space = requiredString(object, \"space\", \"$\", \"policy-capability-malformed-space\");\n validateConcreteSpace(space);\n const canonicalSpace = space.normalize(\"NFC\");\n if (options.requireCanonical && canonicalSpace !== space) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-space\",\n \"$.space must already be canonical NFC\",\n );\n }\n const rawPath = requiredString(object, \"path\", \"$\", \"policy-capability-malformed-path\");\n validateRawPath(rawPath, options);\n const path = normalizePath(rawPath);\n if (options.requireCanonical && path !== rawPath) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-path\",\n \"$.path must already be canonical\",\n );\n }\n validateRawPath(path, options);\n const actions = normalizeActions(\n requiredArray(object, \"actions\", \"$\", \"policy-capability-malformed-action\"),\n service,\n options,\n );\n const output = Object.create(null) as {\n service: PolicyCapability[\"service\"];\n space: string;\n path: string;\n actions: string[];\n caveats?: JsonObject;\n };\n output.service = service as PolicyCapability[\"service\"];\n output.space = canonicalSpace;\n output.path = path;\n output.actions = actions;\n if (hasOwn(object, \"caveats\")) {\n output.caveats = validateCaveats(\n requiredValue(object, \"caveats\", \"$\", \"policy-capability-malformed-caveats\"),\n output.service,\n );\n }\n return output;\n}\n\nfunction expectObject(input: unknown, path: string): JsonObject {\n try {\n const normalized = normalizeJson(input);\n if (normalized === null || typeof normalized !== \"object\" || Array.isArray(normalized)) {\n throw new PolicyCapabilityError(\"policy-capability-malformed\", `${path} must be an object`);\n }\n return normalized as JsonObject;\n } catch (error) {\n if (error instanceof PolicyCapabilityError) {\n throw error;\n }\n throw new PolicyCapabilityError(\n \"policy-capability-malformed\",\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction assertExactKeys(object: JsonObject, allowed: readonly string[], path: string): void {\n const allowedSet = new Set(allowed);\n for (const key of Object.keys(object)) {\n if (!allowedSet.has(key)) {\n throw new PolicyCapabilityError(\n key === \"id\" || key === \"scope\" ? \"policy-capability-malformed\" : \"policy-capability-unknown-key\",\n `${path} has unknown field ${key}`,\n );\n }\n }\n}\n\nfunction requiredValue(\n object: JsonObject,\n key: string,\n path: string,\n code: PolicyCapabilityErrorCode,\n): JsonValue {\n if (!hasOwn(object, key)) {\n throw new PolicyCapabilityError(code, `${path}.${key} is required`);\n }\n return object[key];\n}\n\nfunction requiredString(\n object: JsonObject,\n key: string,\n path: string,\n code: PolicyCapabilityErrorCode,\n): string {\n const value = requiredValue(object, key, path, code);\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyCapabilityError(code, `${path}.${key} must be a non-empty string`);\n }\n return value;\n}\n\nfunction requiredArray(\n object: JsonObject,\n key: string,\n path: string,\n code: PolicyCapabilityErrorCode,\n): readonly JsonValue[] {\n const value = requiredValue(object, key, path, code);\n if (!Array.isArray(value)) {\n throw new PolicyCapabilityError(code, `${path}.${key} must be an array`);\n }\n return value;\n}\n\nfunction validateConcreteSpace(space: string): void {\n if (space === \"*\" || space.includes(\"*\") || space.includes(\"?\") || space.includes(\"/\")) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-space\",\n \"$.space must be concrete\",\n );\n }\n}\n\nfunction validateRawPath(path: string, options: NormalizeOptions): void {\n if (path.length === 0) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-path\", \"$.path is empty\");\n }\n if (!options.allowPrefixPaths && path.endsWith(\"/\")) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-path\",\n \"$.path must be an exact concrete path, not a prefix\",\n );\n }\n if (path.endsWith(\"/*\") || path.includes(\"**\")) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-path\", \"$.path is a prefix form\");\n }\n const segments = path.split(\"/\");\n for (let index = 0; index < segments.length; index++) {\n const segment = segments[index]!;\n const isTrailingPrefixSegment =\n options.allowPrefixPaths && index === segments.length - 1 && segment.length === 0;\n if (segment.length === 0 && !isTrailingPrefixSegment) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-path\", \"$.path has an empty segment\");\n }\n if (segment === \".\" || segment === \"..\") {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-path\",\n \"$.path has a traversal segment\",\n );\n }\n if (segment === \"*\" || segment === \"?\" || segment.includes(\"*\") || segment.includes(\"?\")) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-path\",\n \"$.path has a wildcard segment\",\n );\n }\n }\n}\n\nfunction normalizePath(path: string): string {\n return decodeUnreserved(path).normalize(\"NFC\");\n}\n\nfunction decodeUnreserved(path: string): string {\n return path.replace(/%[0-9A-Fa-f]{2}/g, (encoded) => {\n const char = String.fromCharCode(Number.parseInt(encoded.slice(1), 16));\n return /^[A-Za-z0-9._~-]$/.test(char) ? char : encoded.toUpperCase();\n });\n}\n\nfunction normalizeActions(\n actions: readonly JsonValue[],\n service: string,\n options: NormalizeOptions,\n): string[] {\n const accepted = GRANTABLE_ACTIONS.get(service);\n if (accepted === undefined) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-service\",\n \"$.service is unsupported\",\n );\n }\n const unique = new Set<string>();\n const rawActions: string[] = [];\n for (let index = 0; index < actions.length; index++) {\n const action = actions[index];\n if (typeof action !== \"string\" || action.length === 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-action\",\n `$.actions[${index}] must be a non-empty action URN`,\n );\n }\n if (!action.startsWith(`${service}/`) || action.includes(\"*\") || !accepted.has(action)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-action\",\n `$.actions[${index}] is not a grantable action URN`,\n );\n }\n rawActions.push(action);\n unique.add(action);\n }\n if (unique.size === 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-empty-actions\",\n \"$.actions must not be empty\",\n );\n }\n const normalizedActions = [...unique].sort();\n if (\n options.requireCanonical &&\n (rawActions.length !== normalizedActions.length ||\n rawActions.some((action, index) => action !== normalizedActions[index]))\n ) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-action\",\n \"$.actions must already be sorted, deduplicated canonical action URNs\",\n );\n }\n return normalizedActions;\n}\n\nfunction validateCaveats(input: JsonValue, service: PolicyCapability[\"service\"]): JsonObject {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats must be an object\",\n );\n }\n if (service === \"tinycloud.sql\") {\n return validateSqlCaveats(input as JsonObject);\n }\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats are not defined for this service\",\n );\n}\n\nfunction validateSqlCaveats(input: JsonObject): JsonObject {\n assertCaveatKeys(input, [\"mode\", \"readOnly\", \"statements\"], \"$.caveats\");\n const mode = caveatString(input, \"mode\", \"$.caveats\");\n if (mode !== \"constrained-statements\") {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats.mode is unsupported\",\n );\n }\n if (requiredCaveat(input, \"readOnly\", \"$.caveats\") !== true) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats.readOnly must be true\",\n );\n }\n const statements = requiredCaveat(input, \"statements\", \"$.caveats\");\n if (!Array.isArray(statements) || statements.length === 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n \"$.caveats.statements must be a non-empty array\",\n );\n }\n for (let index = 0; index < statements.length; index++) {\n validateSqlStatement(statements[index], `$.caveats.statements[${index}]`);\n }\n return input;\n}\n\nfunction validateSqlStatement(input: JsonValue, path: string): void {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-caveats\", `${path} must be an object`);\n }\n const object = input as JsonObject;\n assertCaveatKeys(object, [\"name\", \"sql\", \"fixedParams\"], path);\n caveatString(object, \"name\", path);\n caveatString(object, \"sql\", path);\n const fixedParams = requiredCaveat(object, \"fixedParams\", path);\n if (!Array.isArray(fixedParams)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path}.fixedParams must be an array`,\n );\n }\n for (let index = 0; index < fixedParams.length; index++) {\n validateFixedParam(fixedParams[index], `${path}.fixedParams[${index}]`);\n }\n}\n\nfunction validateFixedParam(input: JsonValue, path: string): void {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new PolicyCapabilityError(\"policy-capability-malformed-caveats\", `${path} must be an object`);\n }\n const object = input as JsonObject;\n assertCaveatKeys(object, [\"index\", \"value\"], path);\n const index = requiredCaveat(object, \"index\", path);\n if (typeof index !== \"number\" || !Number.isSafeInteger(index) || index < 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path}.index must be a non-negative integer`,\n );\n }\n requiredCaveat(object, \"value\", path);\n}\n\nfunction assertCaveatKeys(object: JsonObject, allowed: readonly string[], path: string): void {\n const allowedSet = new Set(allowed);\n for (const key of Object.keys(object)) {\n if (!allowedSet.has(key)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path} has unknown field ${key}`,\n );\n }\n }\n}\n\nfunction requiredCaveat(object: JsonObject, key: string, path: string): JsonValue {\n if (!hasOwn(object, key)) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path}.${key} is required`,\n );\n }\n return object[key];\n}\n\nfunction caveatString(object: JsonObject, key: string, path: string): string {\n const value = requiredCaveat(object, key, path);\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyCapabilityError(\n \"policy-capability-malformed-caveats\",\n `${path}.${key} must be a non-empty string`,\n );\n }\n return value;\n}\n\nfunction pathContains(authority: string, request: string): boolean {\n if (authority === request) {\n return true;\n }\n return authority.endsWith(\"/\") && request.startsWith(authority);\n}\n\nfunction caveatsContain(authority: JsonObject | undefined, request: JsonObject | undefined): boolean {\n if (authority === undefined) {\n return request === undefined;\n }\n if (request === undefined) {\n return Object.keys(authority).length === 0;\n }\n if (authority.mode !== \"constrained-statements\" || request.mode !== \"constrained-statements\") {\n return false;\n }\n const authorityStatements = Array.isArray(authority.statements) ? authority.statements : [];\n const requestStatements = Array.isArray(request.statements) ? request.statements : [];\n return requestStatements.every((statement) =>\n authorityStatements.some((candidate) => jcsCanonicalize(candidate) === jcsCanonicalize(statement)),\n );\n}\n\nfunction hasOwn(object: JsonObject, key: string): boolean {\n return objectHasOwn(object, key);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { bases } from \"multiformats/basics\";\nimport { bytesToHex, sha256, verifyMessage } from \"viem\";\nimport { parsePkhDid } from \"../identity\";\nimport { canonicalizePolicyCapability, normalizePolicyCapability } from \"./capability\";\nimport {\n SignatureMaterialError,\n SignatureVerificationError,\n SignedObjectDigestError,\n SignedObjectIdError,\n SignedObjectProfileError,\n SignedObjectSchemaError,\n SigningKeyBindingError,\n UnsupportedSignatureSuiteError,\n toSignedObjectError,\n} from \"./errors\";\nimport { type JsonValue, jcsCanonicalize, normalizeJson } from \"./jcs\";\n\nexport const POLICY_SCHEMA = \"xyz.tinycloud.policy/policy/v0\";\nexport const POLICY_STATUS_SCHEMA = \"xyz.tinycloud.policy/status/v0\";\nexport const POLICY_ENGINE_RECORD_SCHEMA =\n \"xyz.tinycloud.policy/engine-record/v0\";\n\nexport const ED25519_JCS_SIGNATURE_SUITE = \"eddsa-ed25519-sha256-jcs-v1\";\nexport const EIP191_JCS_SIGNATURE_SUITE =\n \"eip191-secp256k1-sha256-jcs-v1\";\n\nexport type SignedObjectKind = \"Policy\" | \"PolicyStatus\" | \"PolicyEngineRecord\";\n\nexport type SignatureSuite =\n | typeof ED25519_JCS_SIGNATURE_SUITE\n | typeof EIP191_JCS_SIGNATURE_SUITE;\n\nexport interface SignedObjectSignature {\n suite: SignatureSuite;\n signerDid: string;\n value: string;\n}\n\nexport type JsonObject = { readonly [key: string]: JsonValue };\n\nexport interface Policy {\n readonly schema: typeof POLICY_SCHEMA;\n readonly policyId: string;\n readonly ownerDid: string;\n readonly signingKeyDid: string;\n readonly createdAt: string;\n readonly expiresAt?: string;\n readonly resource: JsonObject;\n readonly when: JsonObject;\n readonly grant: JsonObject;\n readonly disclosure?: JsonObject;\n readonly audit?: JsonObject;\n readonly signature: SignedObjectSignature;\n}\n\nexport type UnsignedPolicy = Omit<Policy, \"policyId\" | \"signature\">;\n\nexport interface PolicyStatus {\n readonly schema: typeof POLICY_STATUS_SCHEMA;\n readonly statusId: string;\n readonly policyId: string;\n readonly ownerDid: string;\n readonly sequence: number;\n readonly disposition: \"active\" | \"suspended\" | \"revoked\";\n readonly effectiveAt: string;\n readonly reasonCode?: string;\n readonly signingKeyDid: string;\n readonly signature: SignedObjectSignature;\n}\n\nexport type UnsignedPolicyStatus = Omit<PolicyStatus, \"statusId\" | \"signature\">;\n\nexport interface PolicyEngineRecord {\n readonly schema: typeof POLICY_ENGINE_RECORD_SCHEMA;\n readonly engineRecordId: string;\n readonly ownerDid: string;\n readonly endpoint: string;\n readonly audience: string;\n readonly supportedPolicyVersions: string[];\n readonly supportedEvidenceVerifiers: string[];\n readonly grantIssuerDid: string;\n readonly expiresAt: string;\n readonly signature: SignedObjectSignature;\n}\n\nexport type UnsignedPolicyEngineRecord = Omit<\n PolicyEngineRecord,\n \"engineRecordId\" | \"signature\"\n>;\n\nexport type SignedPolicyObject =\n | Policy\n | PolicyStatus\n | PolicyEngineRecord;\n\nexport type UnsignedPolicyObject =\n | UnsignedPolicy\n | UnsignedPolicyStatus\n | UnsignedPolicyEngineRecord;\n\nexport interface SignedObjectSigner {\n readonly suite: SignatureSuite;\n readonly signerDid: string;\n signDigest(digest: Uint8Array): Promise<Uint8Array | string> | Uint8Array | string;\n}\n\nexport interface SignedObjectMaterial {\n readonly kind: SignedObjectKind;\n readonly idField: string;\n readonly id: string;\n readonly domain: string;\n readonly unsigned: JsonObject;\n readonly jcs: string;\n readonly jcsBytes: Uint8Array;\n readonly digest: Uint8Array;\n readonly digestHex: string;\n}\n\nexport type SignedObjectVerificationResult<T extends SignedPolicyObject> =\n | { readonly ok: true; readonly object: T; readonly material: SignedObjectMaterial }\n | { readonly ok: false; readonly error: SignedObjectProfileError };\n\ninterface ObjectDescriptor {\n readonly kind: SignedObjectKind;\n readonly schema: string;\n readonly idField: \"policyId\" | \"statusId\" | \"engineRecordId\";\n readonly idPrefix: string;\n readonly domain: string;\n}\n\nconst DESCRIPTORS: Record<SignedObjectKind, ObjectDescriptor> = {\n Policy: {\n kind: \"Policy\",\n schema: POLICY_SCHEMA,\n idField: \"policyId\",\n idPrefix: \"pol_\",\n domain: POLICY_SCHEMA,\n },\n PolicyStatus: {\n kind: \"PolicyStatus\",\n schema: POLICY_STATUS_SCHEMA,\n idField: \"statusId\",\n idPrefix: \"polst_\",\n domain: POLICY_STATUS_SCHEMA,\n },\n PolicyEngineRecord: {\n kind: \"PolicyEngineRecord\",\n schema: POLICY_ENGINE_RECORD_SCHEMA,\n idField: \"engineRecordId\",\n idPrefix: \"peng_\",\n domain: POLICY_ENGINE_RECORD_SCHEMA,\n },\n};\n\nconst textEncoder = new TextEncoder();\nconst BASE32_ALPHABET = \"abcdefghijklmnopqrstuvwxyz234567\";\nconst BASE64URL_RE = /^[A-Za-z0-9_-]+$/;\nconst objectHasOwn: (object: object, propertyKey: PropertyKey) => boolean =\n (Object as ObjectConstructor & {\n hasOwn?: (object: object, propertyKey: PropertyKey) => boolean;\n }).hasOwn ??\n (Object.prototype.hasOwnProperty.call.bind(\n Object.prototype.hasOwnProperty,\n ) as (object: object, propertyKey: PropertyKey) => boolean);\n\nexport function canonicalizeSignedObjectUnsigned(input: unknown): string {\n return jcsCanonicalize(input);\n}\n\nexport function deriveSignedObjectMaterial(input: unknown): SignedObjectMaterial {\n const descriptor = descriptorForUnsigned(input);\n const unsigned = validateUnsignedForDescriptor(input, descriptor);\n return materialForUnsigned(unsigned, descriptor);\n}\n\nexport function signedObjectIdFor(input: unknown): string {\n return deriveSignedObjectMaterial(input).id;\n}\n\nexport async function createAndSignSignedObject(\n input: unknown,\n signer: SignedObjectSigner,\n): Promise<SignedPolicyObject> {\n const normalized = expectJsonObject(normalizeJson(input), \"$\");\n const descriptor = descriptorForUnsigned(normalized);\n const stripped = stripOwnIdAndSignature(normalized, descriptor);\n const unsigned = validateUnsignedForDescriptor(stripped, descriptor);\n if (descriptor.kind === \"Policy\") {\n validatePolicyPermissionsCeilingForSigning(unsigned);\n }\n assertSupportedSignatureSuite(signer.suite);\n requireStringType(signer.signerDid, \"$.signer.signerDid\");\n assertSignerDidMatchesSuite(signer.signerDid, signer.suite);\n assertSigningKeyBindingForCreate(unsigned, signer.signerDid);\n const material = materialForUnsigned(unsigned, descriptor);\n const signatureValue = encodeSignatureValue(\n await signer.signDigest(material.digest),\n signer.suite,\n );\n const signature = validateSignature({\n suite: signer.suite,\n signerDid: signer.signerDid,\n value: signatureValue,\n });\n return {\n ...unsigned,\n [descriptor.idField]: material.id,\n signature,\n } as unknown as SignedPolicyObject;\n}\n\nexport function createAndSignPolicy(\n input: unknown,\n signer: SignedObjectSigner,\n): Promise<Policy> {\n return createAndSignSignedObject(input, signer).then((object) =>\n validatePolicySignedShape(object),\n );\n}\n\nexport function createAndSignPolicyStatus(\n input: unknown,\n signer: SignedObjectSigner,\n): Promise<PolicyStatus> {\n return createAndSignSignedObject(input, signer).then((object) =>\n validatePolicyStatusSignedShape(object),\n );\n}\n\nexport function createAndSignPolicyEngineRecord(\n input: unknown,\n signer: SignedObjectSigner,\n): Promise<PolicyEngineRecord> {\n return createAndSignSignedObject(input, signer).then((object) =>\n validatePolicyEngineRecordSignedShape(object),\n );\n}\n\nexport async function verifySignedObject(\n input: unknown,\n): Promise<{ object: SignedPolicyObject; material: SignedObjectMaterial }> {\n const signed = validateSignedObjectShape(input);\n const signedJson = signed as unknown as JsonObject;\n const descriptor = descriptorForSchema(signed.schema);\n const signature = validateSignature(signed.signature);\n assertSigningKeyBindingForVerify(signedJson, signature);\n const unsigned = stripOwnIdAndSignature(signedJson, descriptor);\n const material = materialForUnsigned(unsigned, descriptor);\n assertIdMatches(signedJson, material, descriptor);\n if (!(await verifySignature(signature, material.digest))) {\n throw new SignatureVerificationError(\"signature verification failed\");\n }\n return { object: signed, material };\n}\n\nexport async function verifyPolicy(\n input: unknown,\n): Promise<{ object: Policy; material: SignedObjectMaterial }> {\n const result = await verifySignedObject(input);\n return {\n object: validatePolicySignedShape(result.object),\n material: result.material,\n };\n}\n\nexport async function verifyPolicyStatus(\n input: unknown,\n): Promise<{ object: PolicyStatus; material: SignedObjectMaterial }> {\n const result = await verifySignedObject(input);\n return {\n object: validatePolicyStatusSignedShape(result.object),\n material: result.material,\n };\n}\n\nexport async function verifyPolicyEngineRecord(\n input: unknown,\n): Promise<{ object: PolicyEngineRecord; material: SignedObjectMaterial }> {\n const result = await verifySignedObject(input);\n return {\n object: validatePolicyEngineRecordSignedShape(result.object),\n material: result.material,\n };\n}\n\nexport async function validatePolicySigned(\n input: unknown,\n): Promise<SignedObjectVerificationResult<Policy>> {\n try {\n const result = await verifyPolicy(input);\n return { ok: true, object: result.object, material: result.material };\n } catch (error) {\n return { ok: false, error: toSignedObjectError(error) };\n }\n}\n\nexport async function validatePolicyStatusSigned(\n input: unknown,\n): Promise<SignedObjectVerificationResult<PolicyStatus>> {\n try {\n const result = await verifyPolicyStatus(input);\n return { ok: true, object: result.object, material: result.material };\n } catch (error) {\n return { ok: false, error: toSignedObjectError(error) };\n }\n}\n\nexport async function validatePolicyEngineRecordSigned(\n input: unknown,\n): Promise<SignedObjectVerificationResult<PolicyEngineRecord>> {\n try {\n const result = await verifyPolicyEngineRecord(input);\n return { ok: true, object: result.object, material: result.material };\n } catch (error) {\n return { ok: false, error: toSignedObjectError(error) };\n }\n}\n\nexport function validatePolicyUnsigned(input: unknown): UnsignedPolicy {\n return validatePolicyShape(input, false) as unknown as UnsignedPolicy;\n}\n\nexport function validatePolicyStatusUnsigned(input: unknown): UnsignedPolicyStatus {\n return validatePolicyStatusShape(input, false) as unknown as UnsignedPolicyStatus;\n}\n\nexport function validatePolicyEngineRecordUnsigned(\n input: unknown,\n): UnsignedPolicyEngineRecord {\n return validatePolicyEngineRecordShape(input, false) as unknown as UnsignedPolicyEngineRecord;\n}\n\nexport function validatePolicySignedShape(input: unknown): Policy {\n return validatePolicyShape(input, true) as unknown as Policy;\n}\n\nexport function validatePolicyStatusSignedShape(input: unknown): PolicyStatus {\n return validatePolicyStatusShape(input, true) as unknown as PolicyStatus;\n}\n\nexport function validatePolicyEngineRecordSignedShape(\n input: unknown,\n): PolicyEngineRecord {\n return validatePolicyEngineRecordShape(input, true) as unknown as PolicyEngineRecord;\n}\n\nfunction validateSignedObjectShape(input: unknown): SignedPolicyObject {\n const normalized = expectJsonObject(normalizeJson(input), \"$\");\n const schema = requiredString(normalized, \"schema\", \"$\");\n const descriptor = descriptorForSchema(schema);\n switch (descriptor.kind) {\n case \"Policy\":\n return validatePolicySignedShape(normalized);\n case \"PolicyStatus\":\n return validatePolicyStatusSignedShape(normalized);\n case \"PolicyEngineRecord\":\n return validatePolicyEngineRecordSignedShape(normalized);\n }\n}\n\nfunction validateUnsignedForDescriptor(\n input: unknown,\n descriptor: ObjectDescriptor,\n): JsonObject {\n switch (descriptor.kind) {\n case \"Policy\":\n return validatePolicyUnsigned(input) as unknown as JsonObject;\n case \"PolicyStatus\":\n return validatePolicyStatusUnsigned(input) as unknown as JsonObject;\n case \"PolicyEngineRecord\":\n return validatePolicyEngineRecordUnsigned(input) as unknown as JsonObject;\n }\n}\n\nfunction validatePolicyShape(input: unknown, signed: boolean): JsonObject {\n const object = expectJsonObject(normalizeJson(input), \"$\");\n assertExactKeys(\n object,\n signed\n ? [\n \"schema\",\n \"policyId\",\n \"ownerDid\",\n \"signingKeyDid\",\n \"createdAt\",\n \"expiresAt\",\n \"resource\",\n \"when\",\n \"grant\",\n \"disclosure\",\n \"audit\",\n \"signature\",\n ]\n : [\n \"schema\",\n \"ownerDid\",\n \"signingKeyDid\",\n \"createdAt\",\n \"expiresAt\",\n \"resource\",\n \"when\",\n \"grant\",\n \"disclosure\",\n \"audit\",\n ],\n \"$\",\n );\n expectConst(requiredString(object, \"schema\", \"$\"), POLICY_SCHEMA, \"$.schema\");\n if (signed) {\n requiredString(object, \"policyId\", \"$\");\n validateSignature(requiredValue(object, \"signature\", \"$\"));\n }\n requiredString(object, \"ownerDid\", \"$\");\n requiredString(object, \"signingKeyDid\", \"$\");\n requiredDateString(object, \"createdAt\", \"$\");\n optionalDateString(object, \"expiresAt\", \"$\");\n validatePolicyResource(requiredValue(object, \"resource\", \"$\"), \"$.resource\");\n validateExpression(requiredValue(object, \"when\", \"$\"), \"$.when\");\n validateGrant(requiredValue(object, \"grant\", \"$\"), \"$.grant\");\n if (hasOwn(object, \"disclosure\")) {\n validateDisclosure(requiredValue(object, \"disclosure\", \"$\"), \"$.disclosure\");\n }\n if (hasOwn(object, \"audit\")) {\n validateAudit(requiredValue(object, \"audit\", \"$\"), \"$.audit\");\n }\n return object;\n}\n\nfunction validatePolicyStatusShape(input: unknown, signed: boolean): JsonObject {\n const object = expectJsonObject(normalizeJson(input), \"$\");\n assertExactKeys(\n object,\n signed\n ? [\n \"schema\",\n \"statusId\",\n \"policyId\",\n \"ownerDid\",\n \"sequence\",\n \"disposition\",\n \"effectiveAt\",\n \"reasonCode\",\n \"signingKeyDid\",\n \"signature\",\n ]\n : [\n \"schema\",\n \"policyId\",\n \"ownerDid\",\n \"sequence\",\n \"disposition\",\n \"effectiveAt\",\n \"reasonCode\",\n \"signingKeyDid\",\n ],\n \"$\",\n );\n expectConst(requiredString(object, \"schema\", \"$\"), POLICY_STATUS_SCHEMA, \"$.schema\");\n if (signed) {\n requiredString(object, \"statusId\", \"$\");\n validateSignature(requiredValue(object, \"signature\", \"$\"));\n }\n requiredString(object, \"policyId\", \"$\");\n requiredString(object, \"ownerDid\", \"$\");\n requiredInteger(object, \"sequence\", \"$\", 0);\n expectOneOf(requiredString(object, \"disposition\", \"$\"), [\n \"active\",\n \"suspended\",\n \"revoked\",\n ], \"$.disposition\");\n requiredDateString(object, \"effectiveAt\", \"$\");\n optionalString(object, \"reasonCode\", \"$\");\n requiredString(object, \"signingKeyDid\", \"$\");\n return object;\n}\n\nfunction validatePolicyEngineRecordShape(\n input: unknown,\n signed: boolean,\n): JsonObject {\n const object = expectJsonObject(normalizeJson(input), \"$\");\n assertExactKeys(\n object,\n signed\n ? [\n \"schema\",\n \"engineRecordId\",\n \"ownerDid\",\n \"endpoint\",\n \"audience\",\n \"supportedPolicyVersions\",\n \"supportedEvidenceVerifiers\",\n \"grantIssuerDid\",\n \"expiresAt\",\n \"signature\",\n ]\n : [\n \"schema\",\n \"ownerDid\",\n \"endpoint\",\n \"audience\",\n \"supportedPolicyVersions\",\n \"supportedEvidenceVerifiers\",\n \"grantIssuerDid\",\n \"expiresAt\",\n ],\n \"$\",\n );\n expectConst(\n requiredString(object, \"schema\", \"$\"),\n POLICY_ENGINE_RECORD_SCHEMA,\n \"$.schema\",\n );\n if (signed) {\n requiredString(object, \"engineRecordId\", \"$\");\n validateSignature(requiredValue(object, \"signature\", \"$\"));\n }\n requiredString(object, \"ownerDid\", \"$\");\n requiredString(object, \"endpoint\", \"$\");\n requiredString(object, \"audience\", \"$\");\n requiredStringArray(object, \"supportedPolicyVersions\", \"$\", (value, path) =>\n expectConst(value, \"v0\", path),\n );\n requiredStringArray(object, \"supportedEvidenceVerifiers\", \"$\");\n requiredString(object, \"grantIssuerDid\", \"$\");\n requiredDateString(object, \"expiresAt\", \"$\");\n return object;\n}\n\nfunction validateSignature(input: unknown): SignedObjectSignature {\n const object = expectJsonObject(input, \"$.signature\");\n assertExactKeys(object, [\"suite\", \"signerDid\", \"value\"], \"$.signature\");\n const suite = requiredString(object, \"suite\", \"$.signature\");\n assertSupportedSignatureSuite(suite);\n const signerDid = requiredString(object, \"signerDid\", \"$.signature\");\n const value = requiredString(object, \"value\", \"$.signature\");\n decodeSignatureValue(value, suite);\n return { suite, signerDid, value };\n}\n\nfunction validatePolicyResource(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(object, [\"resourceType\", \"resourceId\", \"permissionsCeiling\"], path);\n requiredString(object, \"resourceType\", path);\n requiredString(object, \"resourceId\", path);\n const ceiling = requiredArray(object, \"permissionsCeiling\", path, 1);\n for (let index = 0; index < ceiling.length; index++) {\n validatePolicyCapability(ceiling[index], `${path}.permissionsCeiling[${index}]`);\n }\n}\n\nfunction validatePolicyPermissionsCeilingForSigning(input: JsonObject): void {\n const resource = expectJsonObject(requiredValue(input, \"resource\", \"$\"), \"$.resource\");\n const ceiling = requiredArray(resource, \"permissionsCeiling\", \"$.resource\", 1);\n for (let index = 0; index < ceiling.length; index++) {\n validatePolicyCapabilityForSigning(\n ceiling[index],\n `$.resource.permissionsCeiling[${index}]`,\n );\n }\n}\n\nfunction validatePolicyCapability(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n try {\n const canonical = canonicalizePolicyCapability(object);\n if (jcsCanonicalize(object) !== jcsCanonicalize(canonical)) {\n throw new SignedObjectSchemaError(`${path} must be canonical PolicyCapability JSON`);\n }\n } catch (error) {\n if (error instanceof SignedObjectSchemaError) {\n throw error;\n }\n throw new SignedObjectSchemaError(\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction validatePolicyCapabilityForSigning(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n try {\n const canonical = normalizePolicyCapability(object);\n if (jcsCanonicalize(object) !== jcsCanonicalize(canonical)) {\n throw new SignedObjectSchemaError(`${path} must be strict canonical PolicyCapability JSON`);\n }\n } catch (error) {\n if (error instanceof SignedObjectSchemaError) {\n throw error;\n }\n throw new SignedObjectSchemaError(\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction validateExpression(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n const keys = Object.keys(object);\n if (keys.length !== 1) {\n throw new SignedObjectSchemaError(`${path} must have exactly one expression key`);\n }\n const key = keys[0];\n if (key === \"allOf\" || key === \"anyOf\") {\n const values = requiredArray(object, key, path, 1);\n for (let index = 0; index < values.length; index++) {\n validateExpression(values[index], `${path}.${key}[${index}]`);\n }\n return;\n }\n if (key === \"subject\") {\n const subject = expectJsonObject(requiredValue(object, \"subject\", path), `${path}.subject`);\n assertExactKeys(subject, [\"did\"], `${path}.subject`);\n requiredString(subject, \"did\", `${path}.subject`);\n return;\n }\n if (key === \"evidence\") {\n validateEvidenceRequirement(requiredValue(object, \"evidence\", path), `${path}.evidence`);\n return;\n }\n throw new SignedObjectSchemaError(`${path} has unknown expression key ${key}`);\n}\n\nfunction validateEvidenceRequirement(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(\n object,\n [\"requirementId\", \"verifier\", \"requirements\", \"authority\", \"freshness\"],\n path,\n );\n requiredString(object, \"requirementId\", path);\n requiredString(object, \"verifier\", path);\n requiredValue(object, \"requirements\", path);\n if (hasOwn(object, \"authority\")) {\n const authority = expectJsonObject(requiredValue(object, \"authority\", path), `${path}.authority`);\n assertExactKeys(\n authority,\n [\"profile\", \"acceptedIssuers\", \"allowOwnerAuthorizedIssuer\"],\n `${path}.authority`,\n );\n optionalString(authority, \"profile\", `${path}.authority`);\n if (hasOwn(authority, \"acceptedIssuers\")) {\n requiredStringArray(authority, \"acceptedIssuers\", `${path}.authority`);\n }\n optionalBoolean(authority, \"allowOwnerAuthorizedIssuer\", `${path}.authority`);\n }\n if (hasOwn(object, \"freshness\")) {\n const freshness = expectJsonObject(requiredValue(object, \"freshness\", path), `${path}.freshness`);\n assertExactKeys(freshness, [\"maxStatusAgeSeconds\"], `${path}.freshness`);\n requiredInteger(freshness, \"maxStatusAgeSeconds\", `${path}.freshness`, 0);\n }\n}\n\nfunction validateGrant(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(object, [\"output\", \"maxTtlSeconds\", \"delegationMode\", \"revocation\"], path);\n expectConst(requiredString(object, \"output\", path), \"portable-delegation\", `${path}.output`);\n requiredInteger(object, \"maxTtlSeconds\", path, 1);\n expectOneOf(requiredString(object, \"delegationMode\", path), [\n \"terminal\",\n \"attenuable\",\n ], `${path}.delegationMode`);\n expectOneOf(requiredString(object, \"revocation\", path), [\n \"refresh_only\",\n \"active_cutoff\",\n ], `${path}.revocation`);\n}\n\nfunction validateDisclosure(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(object, [\"denial\"], path);\n expectOneOf(requiredString(object, \"denial\", path), [\"none\", \"code\", \"debug\"], `${path}.denial`);\n}\n\nfunction validateAudit(input: unknown, path: string): void {\n const object = expectJsonObject(input, path);\n assertExactKeys(object, [\"issuance\"], path);\n expectOneOf(requiredString(object, \"issuance\", path), [\"off\", \"security\", \"full\"], `${path}.issuance`);\n}\n\nfunction materialForUnsigned(\n unsigned: JsonObject,\n descriptor: ObjectDescriptor,\n): SignedObjectMaterial {\n const jcs = jcsCanonicalize(unsigned);\n const jcsBytes = textEncoder.encode(jcs);\n const digest = sha256Bytes(concatBytes(textEncoder.encode(`${descriptor.domain}\\0`), jcsBytes));\n const id = `${descriptor.idPrefix}${base32LowerNoPad(digest)}`;\n return {\n kind: descriptor.kind,\n idField: descriptor.idField,\n id,\n domain: descriptor.domain,\n unsigned,\n jcs,\n jcsBytes,\n digest,\n digestHex: bytesToHex(digest).slice(2),\n };\n}\n\nfunction assertIdMatches(\n signed: JsonObject,\n material: SignedObjectMaterial,\n descriptor: ObjectDescriptor,\n): void {\n const actual = requiredString(signed, descriptor.idField, \"$\");\n if (actual === material.id) {\n return;\n }\n if (new RegExp(`^${descriptor.idPrefix}[a-z2-7]{52}$`).test(actual)) {\n throw new SignedObjectDigestError(\n `${descriptor.idField} was not derived from the signed object digest`,\n );\n }\n throw new SignedObjectIdError(`${descriptor.idField} does not match ${descriptor.idPrefix}`);\n}\n\nfunction assertSigningKeyBindingForCreate(\n unsigned: JsonObject,\n signerDid: string,\n): void {\n if (!hasOwn(unsigned, \"signingKeyDid\")) {\n return;\n }\n const signingKeyDid = requiredString(unsigned, \"signingKeyDid\", \"$\");\n if (signingKeyDid !== signerDid) {\n throw new SigningKeyBindingError(\n `signer DID ${signerDid} does not match signingKeyDid ${signingKeyDid}`,\n );\n }\n}\n\nfunction assertSigningKeyBindingForVerify(\n signed: JsonObject,\n signature: SignedObjectSignature,\n): void {\n if (!hasOwn(signed, \"signingKeyDid\")) {\n return;\n }\n const signingKeyDid = requiredString(signed, \"signingKeyDid\", \"$\");\n if (signature.signerDid !== signingKeyDid) {\n throw new SigningKeyBindingError(\n `signature signerDid ${signature.signerDid} does not match signingKeyDid ${signingKeyDid}`,\n );\n }\n}\n\nfunction assertSignerDidMatchesSuite(\n signerDid: string,\n suite: SignatureSuite,\n): void {\n if (suite === ED25519_JCS_SIGNATURE_SUITE) {\n ed25519PublicKeyFromDidKey(signerDid);\n return;\n }\n if (suite === EIP191_JCS_SIGNATURE_SUITE) {\n parseDidPkh(signerDid);\n return;\n }\n throw new UnsupportedSignatureSuiteError(`unsupported signature suite: ${suite}`);\n}\n\nasync function verifySignature(\n signature: SignedObjectSignature,\n digest: Uint8Array,\n): Promise<boolean> {\n if (signature.suite === ED25519_JCS_SIGNATURE_SUITE) {\n const publicKey = ed25519PublicKeyFromDidKey(signature.signerDid);\n const signatureBytes = decodeSignatureValue(signature.value, signature.suite);\n try {\n return ed25519.verify(signatureBytes, digest, publicKey);\n } catch {\n throw new SignatureVerificationError(\"Ed25519 signature verification failed\");\n }\n }\n\n if (signature.suite === EIP191_JCS_SIGNATURE_SUITE) {\n const pkh = parseDidPkh(signature.signerDid);\n const signatureBytes = decodeSignatureValue(signature.value, signature.suite);\n try {\n return verifyMessage({\n address: pkh.address,\n message: { raw: digest },\n signature: bytesToHex(signatureBytes),\n });\n } catch {\n throw new SignatureVerificationError(\"EIP-191 signature verification failed\");\n }\n }\n\n throw new UnsupportedSignatureSuiteError(`unsupported signature suite: ${signature.suite}`);\n}\n\nfunction ed25519PublicKeyFromDidKey(did: string): Uint8Array {\n if (!did.startsWith(\"did:key:\")) {\n throw new SignatureMaterialError(\"Ed25519 signerDid must be did:key\");\n }\n const identifier = did.slice(\"did:key:\".length);\n if (!identifier.startsWith(\"z\")) {\n throw new SignatureMaterialError(\"did:key must use base58btc multibase\");\n }\n let bytes: Uint8Array;\n try {\n bytes = bases.base58btc.decode(identifier);\n } catch {\n throw new SignatureMaterialError(\"did:key signerDid is undecodable\");\n }\n if (bytes.length === 34 && bytes[0] === 0xed && bytes[1] === 0x01) {\n return bytes.slice(2);\n }\n throw new SignatureMaterialError(\"did:key signerDid is not an Ed25519 key\");\n}\n\nfunction parseDidPkh(did: string): { address: `0x${string}` } {\n let parsed: ReturnType<typeof parsePkhDid>;\n try {\n parsed = parsePkhDid(did);\n } catch {\n throw new SignatureMaterialError(\"did:pkh signerDid is undecodable\");\n }\n if (!parsed) {\n throw new SignatureMaterialError(\"EIP-191 signerDid must be did:pkh\");\n }\n return { address: parsed.address };\n}\n\nfunction decodeSignatureValue(value: string, suite: SignatureSuite): Uint8Array {\n if (value.length === 0 || !BASE64URL_RE.test(value) || value.includes(\"=\")) {\n throw new SignatureMaterialError(\"signature value must be base64url without padding\");\n }\n const bytes = base64UrlDecode(value);\n if (suite === ED25519_JCS_SIGNATURE_SUITE && bytes.length !== 64) {\n throw new SignatureMaterialError(\"Ed25519 signature must be 64 bytes\");\n }\n if (suite === EIP191_JCS_SIGNATURE_SUITE) {\n if (bytes.length !== 65) {\n throw new SignatureMaterialError(\"EIP-191 signature must be 65 bytes\");\n }\n const v = bytes[64];\n if (v !== 27 && v !== 28) {\n throw new SignatureMaterialError(\"EIP-191 signature recovery id must be 27 or 28\");\n }\n }\n return bytes;\n}\n\nfunction encodeSignatureValue(\n value: Uint8Array | string,\n suite: SignatureSuite,\n): string {\n if (typeof value === \"string\") {\n const encoded = value.startsWith(\"0x\")\n ? base64UrlEncode(hexToBytes(value))\n : value;\n decodeSignatureValue(encoded, suite);\n return encoded;\n }\n const encoded = base64UrlEncode(value);\n decodeSignatureValue(encoded, suite);\n return encoded;\n}\n\nfunction stripOwnIdAndSignature(\n object: JsonObject,\n descriptor: ObjectDescriptor,\n): JsonObject {\n const output = Object.create(null) as { [key: string]: JsonValue };\n for (const [key, value] of Object.entries(object)) {\n if (key === descriptor.idField || key === \"signature\") {\n continue;\n }\n output[key] = value;\n }\n return output;\n}\n\nfunction descriptorForUnsigned(input: unknown): ObjectDescriptor {\n const object = expectJsonObject(normalizeJson(input), \"$\");\n return descriptorForSchema(requiredString(object, \"schema\", \"$\"));\n}\n\nfunction descriptorForSchema(schema: string): ObjectDescriptor {\n if (schema === POLICY_SCHEMA) return DESCRIPTORS.Policy;\n if (schema === POLICY_STATUS_SCHEMA) return DESCRIPTORS.PolicyStatus;\n if (schema === POLICY_ENGINE_RECORD_SCHEMA) return DESCRIPTORS.PolicyEngineRecord;\n throw new SignedObjectSchemaError(`unsupported signed-object schema: ${schema}`);\n}\n\nfunction expectJsonObject(input: unknown, path: string): JsonObject {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new SignedObjectSchemaError(`${path} must be an object`);\n }\n return input as JsonObject;\n}\n\nfunction assertExactKeys(object: JsonObject, allowed: readonly string[], path: string): void {\n const allowedSet = new Set(allowed);\n for (const key of Object.keys(object)) {\n if (!allowedSet.has(key)) {\n throw new SignedObjectSchemaError(`${path} has unknown field ${key}`);\n }\n }\n}\n\nfunction requiredValue(object: JsonObject, key: string, path: string): JsonValue {\n if (!hasOwn(object, key)) {\n throw new SignedObjectSchemaError(`${path}.${key} is required`);\n }\n return object[key];\n}\n\nfunction requiredString(object: JsonObject, key: string, path: string): string {\n return requireStringType(requiredValue(object, key, path), `${path}.${key}`);\n}\n\nfunction optionalString(object: JsonObject, key: string, path: string): void {\n if (!hasOwn(object, key)) {\n return;\n }\n requireStringType(requiredValue(object, key, path), `${path}.${key}`);\n}\n\nfunction requireStringType(value: JsonValue, path: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new SignedObjectSchemaError(`${path} must be a non-empty string`);\n }\n return value;\n}\n\nfunction optionalBoolean(object: JsonObject, key: string, path: string): void {\n if (!hasOwn(object, key)) {\n return;\n }\n if (typeof requiredValue(object, key, path) !== \"boolean\") {\n throw new SignedObjectSchemaError(`${path}.${key} must be a boolean`);\n }\n}\n\nfunction requiredInteger(\n object: JsonObject,\n key: string,\n path: string,\n minimum: number,\n): number {\n const value = requiredValue(object, key, path);\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < minimum) {\n throw new SignedObjectSchemaError(\n `${path}.${key} must be an integer >= ${minimum}`,\n );\n }\n return value;\n}\n\nfunction requiredArray(\n object: JsonObject,\n key: string,\n path: string,\n minimum: number,\n): readonly JsonValue[] {\n const value = requiredValue(object, key, path);\n if (!Array.isArray(value) || value.length < minimum) {\n throw new SignedObjectSchemaError(\n `${path}.${key} must be an array with at least ${minimum} item(s)`,\n );\n }\n return value;\n}\n\nfunction requiredStringArray(\n object: JsonObject,\n key: string,\n path: string,\n check?: (value: string, path: string) => void,\n): void {\n const values = requiredArray(object, key, path, 0);\n for (let index = 0; index < values.length; index++) {\n const itemPath = `${path}.${key}[${index}]`;\n const value = requireStringType(values[index], itemPath);\n check?.(value, itemPath);\n }\n}\n\nfunction requiredDateString(object: JsonObject, key: string, path: string): void {\n assertRfc3339(requiredString(object, key, path), `${path}.${key}`);\n}\n\nfunction optionalDateString(object: JsonObject, key: string, path: string): void {\n if (!hasOwn(object, key)) {\n return;\n }\n assertRfc3339(requiredString(object, key, path), `${path}.${key}`);\n}\n\nfunction assertRfc3339(value: string, path: string): void {\n const match = value.match(\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/,\n );\n if (!match) {\n throw new SignedObjectSchemaError(`${path} must be strict RFC 3339`);\n }\n const parsed = Date.parse(value);\n if (Number.isNaN(parsed)) {\n throw new SignedObjectSchemaError(`${path} must be a parseable RFC 3339 timestamp`);\n }\n const canonical = new Date(parsed).toISOString().replace(\".000Z\", \"Z\");\n if (canonical !== value) {\n throw new SignedObjectSchemaError(`${path} must be a normalizable RFC 3339 timestamp`);\n }\n}\n\nfunction expectConst<T extends string>(actual: string, expected: T, path: string): T {\n if (actual !== expected) {\n throw new SignedObjectSchemaError(`${path} must be ${expected}`);\n }\n return expected;\n}\n\nfunction expectOneOf<T extends string>(\n actual: string,\n allowed: readonly T[],\n path: string,\n): T {\n for (const value of allowed) {\n if (actual === value) {\n return value;\n }\n }\n throw new SignedObjectSchemaError(`${path} has unsupported value ${actual}`);\n}\n\nfunction hasOwn(object: JsonObject, key: string): boolean {\n return objectHasOwn(object, key);\n}\n\nfunction assertSupportedSignatureSuite(suite: string): asserts suite is SignatureSuite {\n if (suite !== ED25519_JCS_SIGNATURE_SUITE && suite !== EIP191_JCS_SIGNATURE_SUITE) {\n throw new UnsupportedSignatureSuiteError(`unsupported signature suite: ${suite}`);\n }\n}\n\nfunction sha256Bytes(bytes: Uint8Array): Uint8Array {\n return sha256(bytes, \"bytes\");\n}\n\nfunction concatBytes(left: Uint8Array, right: Uint8Array): Uint8Array {\n const output = new Uint8Array(left.length + right.length);\n output.set(left, 0);\n output.set(right, left.length);\n return output;\n}\n\nfunction base32LowerNoPad(bytes: Uint8Array): string {\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n bits -= 5;\n output += BASE32_ALPHABET[(buffer >> bits) & 31];\n }\n }\n if (bits > 0) {\n output += BASE32_ALPHABET[(buffer << (5 - bits)) & 31];\n }\n return output;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n const alphabet =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n let output = \"\";\n for (let index = 0; index < bytes.length; index += 3) {\n const a = bytes[index];\n const b = bytes[index + 1];\n const c = bytes[index + 2];\n const triplet = (a << 16) | ((b ?? 0) << 8) | (c ?? 0);\n output += alphabet[(triplet >> 18) & 63];\n output += alphabet[(triplet >> 12) & 63];\n if (index + 1 < bytes.length) {\n output += alphabet[(triplet >> 6) & 63];\n }\n if (index + 2 < bytes.length) {\n output += alphabet[triplet & 63];\n }\n }\n return output;\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n if (value.length % 4 === 1) {\n throw new SignatureMaterialError(\"signature value is not canonical base64url\");\n }\n const alphabet =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n const bytes: number[] = [];\n let buffer = 0;\n let bits = 0;\n for (const char of value) {\n const index = alphabet.indexOf(char);\n if (index < 0) {\n throw new SignatureMaterialError(\"signature value is not base64url\");\n }\n buffer = (buffer << 6) | index;\n bits += 6;\n if (bits >= 8) {\n bits -= 8;\n bytes.push((buffer >> bits) & 0xff);\n }\n }\n const decoded = Uint8Array.from(bytes);\n if (base64UrlEncode(decoded) !== value) {\n throw new SignatureMaterialError(\"signature value is not canonical base64url\");\n }\n return decoded;\n}\n\nfunction hexToBytes(value: string): Uint8Array {\n const hex = value.slice(2);\n if (hex.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(hex)) {\n throw new SignatureMaterialError(\"hex signature must have even length\");\n }\n const output = new Uint8Array(hex.length / 2);\n for (let index = 0; index < output.length; index++) {\n output[index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);\n }\n return output;\n}\n","import { baseX } from './base.js'\n\nexport const base10 = baseX({\n prefix: '9',\n name: 'base10',\n alphabet: '0123456789'\n})\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') { return o }\n if (o instanceof ArrayBuffer) { return new Uint8Array(o) }\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n prefix: 'f',\n name: 'base16',\n alphabet: '0123456789abcdef',\n bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n prefix: 'F',\n name: 'base16upper',\n alphabet: '0123456789ABCDEF',\n bitsPerChar: 4\n})\n","import { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n prefix: '0',\n name: 'base2',\n alphabet: '01',\n bitsPerChar: 1\n})\n","import { from } from './base.js'\n\nconst alphabet = Array.from('🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂')\nconst alphabetBytesToChars: string[] = (alphabet.reduce<string[]>((p, c, i) => { p[i] = c; return p }, ([])))\nconst alphabetCharsToBytes: number[] = (alphabet.reduce<number[]>((p, c, i) => {\n const codePoint = c.codePointAt(0)\n if (codePoint == null) {\n throw new Error(`Invalid character: ${c}`)\n }\n p[codePoint] = i\n return p\n}, ([])))\n\nfunction encode (data: Uint8Array): string {\n return data.reduce((p, c) => {\n p += alphabetBytesToChars[c]\n return p\n }, '')\n}\n\nfunction decode (str: string): Uint8Array {\n const byts = []\n for (const char of str) {\n const codePoint = char.codePointAt(0)\n if (codePoint == null) {\n throw new Error(`Invalid character: ${char}`)\n }\n const byt = alphabetCharsToBytes[codePoint]\n if (byt == null) {\n throw new Error(`Non-base256emoji character: ${char}`)\n }\n byts.push(byt)\n }\n return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n prefix: '🚀',\n name: 'base256emoji',\n encode,\n decode\n})\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n","import { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n prefix: '7',\n name: 'base8',\n alphabet: '01234567',\n bitsPerChar: 3\n})\n","import { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n prefix: '\\x00',\n name: 'identity',\n encode: (buf) => toString(buf),\n decode: (str) => fromString(str)\n})\n","import type { ArrayBufferView, ByteView } from './interface.js'\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\nexport function encode <T> (node: T): ByteView<T> {\n return textEncoder.encode(JSON.stringify(node))\n}\n\nexport function decode <T> (data: ByteView<T> | ArrayBufferView<T>): T {\n return JSON.parse(textDecoder.decode(data))\n}\n","import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\nimport type { DigestOptions } from './hasher.js'\n\nconst code: 0x0 = 0x0\nconst name = 'identity'\n\nconst encode: (input: Uint8Array) => Uint8Array = coerce\n\nfunction digest (input: Uint8Array, options?: DigestOptions): Digest.Digest<typeof code, number> {\n if (options?.truncate != null && options.truncate !== input.byteLength) {\n if (options.truncate < 0 || options.truncate > input.byteLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${input.byteLength}`)\n }\n\n input = input.subarray(0, options.truncate)\n }\n\n return Digest.create(code, encode(input))\n}\n\nexport const identity = { code, name, encode, digest }\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","/* global crypto */\n\nimport { from } from './hasher.js'\n\nfunction sha (name: AlgorithmIdentifier): (data: Uint8Array) => Promise<Uint8Array> {\n return async data => new Uint8Array(await crypto.subtle.digest(name, data))\n}\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: sha('SHA-512')\n})\n","import * as Digest from './digest.js'\nimport type { MultihashHasher } from './interface.js'\n\ntype Await<T> = Promise<T> | T\n\nconst DEFAULT_MIN_DIGEST_LENGTH = 20\n\nexport interface HasherInit <Name extends string, Code extends number> {\n name: Name\n code: Code\n encode(input: Uint8Array): Await<Uint8Array>\n\n /**\n * The minimum length a hash is allowed to be truncated to in bytes\n *\n * @default 20\n */\n minDigestLength?: number\n\n /**\n * The maximum length a hash is allowed to be truncated to in bytes. If not\n * specified it will be inferred from the length of the digest.\n */\n maxDigestLength?: number\n}\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode, minDigestLength, maxDigestLength }: HasherInit<Name, Code>): Hasher<Name, Code> {\n return new Hasher(name, code, encode, minDigestLength, maxDigestLength)\n}\n\nexport interface DigestOptions {\n /**\n * Truncate the returned digest to this number of bytes.\n *\n * This may cause the digest method to throw/reject if the passed value is\n * greater than the digest length or below a threshold under which the risk of\n * hash collisions is significant.\n *\n * The actual value of this threshold can depend on the hashing algorithm in\n * use.\n */\n truncate?: number\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n readonly name: Name\n readonly code: Code\n readonly encode: (input: Uint8Array) => Await<Uint8Array>\n readonly minDigestLength: number\n readonly maxDigestLength?: number\n\n constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array>, minDigestLength?: number, maxDigestLength?: number) {\n this.name = name\n this.code = code\n this.encode = encode\n this.minDigestLength = minDigestLength ?? DEFAULT_MIN_DIGEST_LENGTH\n this.maxDigestLength = maxDigestLength\n }\n\n digest (input: Uint8Array, options?: DigestOptions): Await<Digest.Digest<Code, number>> {\n if (options?.truncate != null) {\n if (options.truncate < this.minDigestLength) {\n throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`)\n }\n\n if (this.maxDigestLength != null && options.truncate > this.maxDigestLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)\n }\n }\n\n if (input instanceof Uint8Array) {\n const result = this.encode(input)\n\n if (result instanceof Uint8Array) {\n return createDigest(result, this.code, options?.truncate)\n }\n\n return result.then(digest => createDigest(digest, this.code, options?.truncate))\n } else {\n throw Error('Unknown type, must be binary type')\n /* c8 ignore next 1 */\n }\n }\n}\n\n/**\n * Create a Digest from the passed uint8array and code, optionally truncating it\n * first.\n */\nfunction createDigest <Code extends number> (digest: Uint8Array, code: Code, truncate?: number): Digest.Digest<Code, number> {\n if (truncate != null && truncate !== digest.byteLength) {\n if (truncate > digest.byteLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${digest.byteLength}`)\n }\n\n digest = digest.subarray(0, truncate)\n }\n\n return Digest.create(code, digest)\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nexport const bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nexport const hashes = { ...sha2, ...identity }\nexport const codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes }\n","import { getAddress, isAddress, recoverMessageAddress, type Hex } from \"viem\";\n\nexport type CanonicalAddress = `0x${string}`;\n\nexport interface PkhDidParts {\n method: \"pkh\";\n namespace: \"eip155\";\n chainId: number;\n address: CanonicalAddress;\n}\n\nexport interface DidEqualsOptions {\n ignoreFragment?: boolean;\n}\n\nexport interface DidCacheKeyOptions {\n preserveFragment?: boolean;\n}\n\nexport class IdentityParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"IdentityParseError\";\n }\n}\n\nconst PKH_DID_RE = /^did:pkh:eip155:(\\d+):(0x[a-fA-F0-9]{40})$/;\nconst DID_RE = /^did:[a-z0-9]+:.+$/;\n\nfunction splitDidUrl(input: string): { did: string; fragment: string } {\n const fragmentIndex = input.indexOf(\"#\");\n if (fragmentIndex < 0) {\n return { did: input, fragment: \"\" };\n }\n return {\n did: input.slice(0, fragmentIndex),\n fragment: input.slice(fragmentIndex),\n };\n}\n\nfunction assertValidChainId(chainId: number): void {\n if (!Number.isSafeInteger(chainId) || chainId <= 0) {\n throw new IdentityParseError(`Invalid EIP-155 chain ID: ${chainId}`);\n }\n}\n\nexport function isEvmAddress(input: string): boolean {\n return isAddress(input, { strict: false });\n}\n\nexport function canonicalizeAddress(address: string): CanonicalAddress {\n if (!isEvmAddress(address)) {\n throw new IdentityParseError(`Invalid EVM address: ${address}`);\n }\n return getAddress(address) as CanonicalAddress;\n}\n\n/** Verify EIP-191 evidence over the exact UTF-8 message and recover its signer. */\nexport async function verifyEip191MessageSignature(\n message: string,\n signature: string,\n expectedAddress: string,\n): Promise<boolean> {\n if (!/^0x[0-9a-fA-F]{130}$/.test(signature)) return false;\n try {\n const recovered = await recoverMessageAddress({\n message,\n signature: signature as Hex,\n });\n return canonicalizeAddress(recovered) === canonicalizeAddress(expectedAddress);\n } catch {\n return false;\n }\n}\n\nexport function addressStorageKey(address: string): CanonicalAddress {\n return canonicalizeAddress(address).toLowerCase() as CanonicalAddress;\n}\n\nexport function pkhDid(address: string, chainId: number = 1): string {\n assertValidChainId(chainId);\n return `did:pkh:eip155:${chainId}:${canonicalizeAddress(address)}`;\n}\n\nexport function parsePkhDid(did: string): PkhDidParts | null {\n const match = did.match(PKH_DID_RE);\n if (!match) return null;\n\n const chainId = Number(match[1]);\n assertValidChainId(chainId);\n\n return {\n method: \"pkh\",\n namespace: \"eip155\",\n chainId,\n address: canonicalizeAddress(match[2]),\n };\n}\n\nexport function canonicalizeDid(did: string): string {\n const pkh = parsePkhDid(did);\n if (pkh) {\n return pkhDid(pkh.address, pkh.chainId);\n }\n if (DID_RE.test(did)) {\n return did;\n }\n throw new IdentityParseError(`Invalid DID: ${did}`);\n}\n\nexport function canonicalizeDidUrl(didUrl: string): string {\n const { did, fragment } = splitDidUrl(didUrl);\n return `${canonicalizeDid(did)}${fragment}`;\n}\n\nexport function principalDid(didUrl: string): string {\n return canonicalizeDid(splitDidUrl(didUrl).did);\n}\n\nexport function didEquals(a: string, b: string, options: DidEqualsOptions = {}): boolean {\n const canonicalize = options.ignoreFragment ? principalDid : canonicalizeDidUrl;\n return canonicalize(a) === canonicalize(b);\n}\n\nexport function principalDidEquals(a: string, b: string): boolean {\n return didEquals(a, b, { ignoreFragment: true });\n}\n\nexport function didCacheKey(input: string, options: DidCacheKeyOptions = {}): string {\n const { did, fragment } = splitDidUrl(input);\n const pkh = parsePkhDid(did);\n const base = pkh\n ? `did:pkh:eip155:${pkh.chainId}:${addressStorageKey(pkh.address)}`\n : canonicalizeDid(did);\n\n return options.preserveFragment ? `${base}${fragment}` : base;\n}\n\nexport function makePkhSpaceId(\n address: string,\n chainId: number,\n name: string,\n): string {\n assertValidChainId(chainId);\n if (!name) {\n throw new IdentityParseError(\"Space name cannot be empty\");\n }\n return `tinycloud:pkh:eip155:${chainId}:${canonicalizeAddress(address)}:${name}`;\n}\n","import {\n POLICY_ENGINE_RECORD_SCHEMA,\n POLICY_SCHEMA,\n createAndSignPolicy,\n createAndSignPolicyEngineRecord,\n validatePolicyEngineRecordSignedShape,\n verifyPolicyEngineRecord,\n type Policy,\n type PolicyEngineRecord,\n type SignedObjectSigner,\n type UnsignedPolicyEngineRecord,\n} from \"./signed-object\";\nimport {\n PolicyCapabilityError,\n normalizePolicyCapability,\n type JsonObject,\n type PolicyCapability,\n} from \"./capability\";\nimport { normalizeJson, type JsonValue } from \"./jcs\";\nimport { SignedObjectProfileError, SignedObjectSchemaError } from \"./errors\";\n\nexport const TRANSCRIPT_SHARE_BOOTSTRAP_SCHEMA =\n \"xyz.tinycloud.exchange/transcript-bootstrap/v0\" as const;\nexport const OWNER_NODE_ENDPOINT_SCHEMA =\n \"xyz.tinycloud.exchange/owner-node-endpoint/v1\" as const;\nexport const POLICY_VERSION_V0 = \"v0\" as const;\nexport const W3C_VC_CREDENTIAL_VERIFIER = \"w3c.vc/credential/v1\" as const;\n\nexport type PolicyAuthoringErrorCode =\n | PolicyCapabilityError[\"code\"]\n | \"policy-authoring-malformed\"\n | \"policy-authoring-unknown-key\"\n | \"policy-engine-record-absent\"\n | \"policy-engine-record-date-invalid\"\n | \"policy-engine-record-signature-invalid\"\n | \"policy-engine-record-audience-mismatch\"\n | \"policy-engine-record-expired\"\n | \"policy-engine-record-owner-mismatch\"\n | \"policy-engine-record-grant-issuer-mismatch\"\n | \"policy-engine-record-policy-version-unsupported\"\n | \"policy-engine-record-evidence-verifier-unsupported\"\n | \"transcript-share-bootstrap-malformed\";\n\nexport class PolicyAuthoringError extends Error {\n public readonly code: PolicyAuthoringErrorCode;\n\n constructor(code: PolicyAuthoringErrorCode, message: string) {\n super(message);\n this.name = \"PolicyAuthoringError\";\n this.code = code;\n }\n}\n\nexport interface CreateTranscriptSharePolicyInput {\n readonly ownerDid: string;\n readonly signingKeyDid: string;\n readonly createdAt: string;\n readonly expiresAt?: string;\n readonly resourceType: string;\n readonly resourceId: string;\n readonly permissionsCeiling: readonly unknown[];\n readonly when: JsonObject;\n readonly grant: JsonObject;\n readonly disclosure?: JsonObject;\n readonly audit?: JsonObject;\n}\n\nexport interface TranscriptShareBootstrap {\n readonly schema: typeof TRANSCRIPT_SHARE_BOOTSTRAP_SCHEMA;\n readonly policyId: string;\n readonly policyEngine: {\n readonly endpoint: string;\n readonly audience: string;\n readonly supportedEvidenceVerifiers: readonly [\n typeof W3C_VC_CREDENTIAL_VERIFIER,\n ];\n readonly signedRecord: PolicyEngineRecord;\n };\n /** Untrusted routing hint. Authority comes only from delegation/invocation validation. */\n readonly ownerNode: {\n readonly schema: typeof OWNER_NODE_ENDPOINT_SCHEMA;\n readonly endpoint: string;\n readonly spaceId: string;\n };\n readonly resourceHint: JsonObject;\n}\n\nexport interface ComposeTranscriptShareBootstrapInput {\n readonly policyId: string;\n readonly policyEngineRecord: PolicyEngineRecord;\n readonly ownerNodeEndpoint: string;\n readonly ownerSpaceId: string;\n readonly resourceHint: JsonObject;\n}\n\nexport interface CreatePolicyEngineRecordInput {\n readonly ownerDid: string;\n readonly endpoint: string;\n readonly audience: string;\n readonly grantIssuerDid: string;\n readonly expiresAt: string;\n readonly supportedPolicyVersions?: readonly string[];\n readonly supportedEvidenceVerifiers?: readonly string[];\n}\n\nexport interface VerifyPolicyEngineRecordOptions {\n readonly signedRecord: unknown;\n readonly ownerDid: string;\n readonly audience: string;\n readonly grantIssuerDid: string;\n readonly now: string;\n readonly requiredPolicyVersion?: string;\n readonly requiredEvidenceVerifier?: string;\n}\n\n/**\n * Author a transcript-sharing Policy from already-resolved Listen-adapter\n * PolicyCapability JSON. Manifest PermissionEntry shapes are refused here; the\n * SDK does not expand or invent permissions while signing authority-bearing\n * objects.\n */\nexport async function createAndSignTranscriptSharePolicy(\n input: CreateTranscriptSharePolicyInput,\n signer: SignedObjectSigner,\n): Promise<Policy> {\n const normalized = expectObject(input, \"$\", \"policy-authoring-malformed\");\n assertExactKeys(\n normalized,\n [\n \"ownerDid\",\n \"signingKeyDid\",\n \"createdAt\",\n \"expiresAt\",\n \"resourceType\",\n \"resourceId\",\n \"permissionsCeiling\",\n \"when\",\n \"grant\",\n \"disclosure\",\n \"audit\",\n ],\n \"$\",\n );\n const permissions = requiredArray(normalized, \"permissionsCeiling\", \"$\");\n if (permissions.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n \"$.permissionsCeiling must not be empty\",\n );\n }\n const ceiling: PolicyCapability[] = [];\n for (let index = 0; index < permissions.length; index++) {\n ceiling.push(\n wrapCapabilityError(() => normalizePolicyCapability(permissions[index])),\n );\n }\n return createAndSignPolicy(\n {\n schema: POLICY_SCHEMA,\n ownerDid: requiredString(normalized, \"ownerDid\", \"$\"),\n signingKeyDid: requiredString(normalized, \"signingKeyDid\", \"$\"),\n createdAt: requiredString(normalized, \"createdAt\", \"$\"),\n ...(hasOwn(normalized, \"expiresAt\")\n ? { expiresAt: requiredString(normalized, \"expiresAt\", \"$\") }\n : {}),\n resource: {\n resourceType: requiredString(normalized, \"resourceType\", \"$\"),\n resourceId: requiredString(normalized, \"resourceId\", \"$\"),\n permissionsCeiling: ceiling,\n },\n when: requiredObject(normalized, \"when\", \"$\"),\n grant: requiredObject(normalized, \"grant\", \"$\"),\n ...(hasOwn(normalized, \"disclosure\")\n ? { disclosure: requiredObject(normalized, \"disclosure\", \"$\") }\n : {}),\n ...(hasOwn(normalized, \"audit\")\n ? { audit: requiredObject(normalized, \"audit\", \"$\") }\n : {}),\n },\n signer,\n ).catch((error) => {\n throw wrapSignedObjectError(error);\n });\n}\n\nexport function createUnsignedPolicyEngineRecord(\n input: CreatePolicyEngineRecordInput,\n): UnsignedPolicyEngineRecord {\n const normalized = expectObject(input, \"$\", \"policy-authoring-malformed\");\n assertExactKeys(\n normalized,\n [\n \"ownerDid\",\n \"endpoint\",\n \"audience\",\n \"grantIssuerDid\",\n \"expiresAt\",\n \"supportedPolicyVersions\",\n \"supportedEvidenceVerifiers\",\n ],\n \"$\",\n );\n const supportedPolicyVersions = hasOwn(normalized, \"supportedPolicyVersions\")\n ? requiredStringArray(normalized, \"supportedPolicyVersions\", \"$\")\n : [POLICY_VERSION_V0];\n validateSupportedPolicyVersions(\n supportedPolicyVersions,\n \"$.supportedPolicyVersions\",\n );\n const supportedEvidenceVerifiers = hasOwn(\n normalized,\n \"supportedEvidenceVerifiers\",\n )\n ? requiredStringArray(normalized, \"supportedEvidenceVerifiers\", \"$\")\n : [W3C_VC_CREDENTIAL_VERIFIER];\n validateSupportedEvidenceVerifiers(\n supportedEvidenceVerifiers,\n \"$.supportedEvidenceVerifiers\",\n );\n const expiresAt = fieldString(\n normalized,\n \"expiresAt\",\n \"$\",\n \"policy-engine-record-date-invalid\",\n );\n parseStrictRfc3339(expiresAt, \"$.expiresAt\");\n\n return {\n schema: POLICY_ENGINE_RECORD_SCHEMA,\n ownerDid: requiredString(normalized, \"ownerDid\", \"$\"),\n endpoint: validatePolicyEngineEndpoint(\n requiredString(normalized, \"endpoint\", \"$\"),\n ),\n audience: requiredString(normalized, \"audience\", \"$\"),\n supportedPolicyVersions,\n supportedEvidenceVerifiers,\n grantIssuerDid: requiredString(normalized, \"grantIssuerDid\", \"$\"),\n expiresAt,\n };\n}\n\nexport async function createAndSignRequesterPolicyEngineRecord(\n input: CreatePolicyEngineRecordInput,\n signer: SignedObjectSigner,\n): Promise<PolicyEngineRecord> {\n return createAndSignPolicyEngineRecord(\n createUnsignedPolicyEngineRecord(input),\n signer,\n ).catch((error) => {\n throw wrapSignedObjectError(error);\n });\n}\n\n/**\n * Compose the SDK-level transcript-share bootstrap record. This record is not\n * an invitation and is not authority; it only tells a requester where to ask\n * and which policy id to reference.\n */\nexport function composeTranscriptShareBootstrap(\n input: ComposeTranscriptShareBootstrapInput,\n): TranscriptShareBootstrap {\n const normalized = expectObject(\n input,\n \"$\",\n \"transcript-share-bootstrap-malformed\",\n );\n assertExactKeys(\n normalized,\n [\n \"policyId\",\n \"policyEngineRecord\",\n \"ownerNodeEndpoint\",\n \"ownerSpaceId\",\n \"resourceHint\",\n ],\n \"$\",\n );\n const signedRecord = expectPolicyEngineRecord(\n requiredValue(normalized, \"policyEngineRecord\", \"$\"),\n );\n if (\n !signedRecord.supportedEvidenceVerifiers.includes(\n W3C_VC_CREDENTIAL_VERIFIER,\n )\n ) {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n \"policy engine record does not support the bootstrap evidence verifier\",\n );\n }\n return {\n schema: TRANSCRIPT_SHARE_BOOTSTRAP_SCHEMA,\n policyId: requiredString(normalized, \"policyId\", \"$\"),\n policyEngine: {\n endpoint: signedRecord.endpoint,\n audience: signedRecord.audience,\n supportedEvidenceVerifiers: [W3C_VC_CREDENTIAL_VERIFIER],\n signedRecord,\n },\n ownerNode: {\n schema: OWNER_NODE_ENDPOINT_SCHEMA,\n endpoint: validateOwnerNodeEndpoint(\n requiredString(normalized, \"ownerNodeEndpoint\", \"$\"),\n ),\n spaceId: requiredString(normalized, \"ownerSpaceId\", \"$\"),\n },\n resourceHint: requiredObject(normalized, \"resourceHint\", \"$\"),\n };\n}\n\nfunction validateOwnerNodeEndpoint(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n \"$.ownerNodeEndpoint must be a URL\",\n );\n }\n if (\n url.protocol !== \"https:\" ||\n url.username !== \"\" ||\n url.password !== \"\" ||\n url.hash !== \"\" ||\n url.search !== \"\"\n ) {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n \"$.ownerNodeEndpoint must be an HTTPS URL without credentials, query, or fragment\",\n );\n }\n return url.toString().replace(/\\/$/, \"\");\n}\n\nfunction validatePolicyEngineEndpoint(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n \"$.endpoint must be a URL\",\n );\n }\n if (\n url.protocol !== \"https:\" ||\n url.username !== \"\" ||\n url.password !== \"\" ||\n url.hash !== \"\" ||\n url.search !== \"\"\n ) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n \"$.endpoint must be an HTTPS URL without credentials, query, or fragment\",\n );\n }\n return url.toString().replace(/\\/$/, \"\");\n}\n\n/**\n * Requester-side authentication gate for policy-engine endpoints. A requester\n * MUST NOT send credential evidence or call /resolve unless this verification\n * succeeds.\n */\nexport async function verifyPolicyEngineRecordForRequester(\n options: VerifyPolicyEngineRecordOptions,\n): Promise<PolicyEngineRecord> {\n const normalized = expectObject(options, \"$\", \"policy-authoring-malformed\");\n assertExactKeys(\n normalized,\n [\n \"signedRecord\",\n \"ownerDid\",\n \"audience\",\n \"grantIssuerDid\",\n \"now\",\n \"requiredPolicyVersion\",\n \"requiredEvidenceVerifier\",\n ],\n \"$\",\n );\n if (!hasOwn(normalized, \"signedRecord\")) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-absent\",\n \"$.signedRecord must be present\",\n );\n }\n const signedRecord = normalized[\"signedRecord\"];\n if (\n signedRecord === null ||\n typeof signedRecord !== \"object\" ||\n Array.isArray(signedRecord)\n ) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-absent\",\n \"$.signedRecord must be present\",\n );\n }\n const recordObject = signedRecord as JsonObject;\n const expiresAt = fieldString(\n recordObject,\n \"expiresAt\",\n \"$.signedRecord\",\n \"policy-engine-record-date-invalid\",\n );\n const now = fieldString(\n normalized,\n \"now\",\n \"$\",\n \"policy-engine-record-date-invalid\",\n );\n const expiresMs = parseStrictRfc3339(expiresAt, \"$.signedRecord.expiresAt\");\n const nowMs = parseStrictRfc3339(now, \"$.now\");\n if (expiresMs <= nowMs) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-expired\",\n \"$.signedRecord.expiresAt is expired\",\n );\n }\n\n let verified: PolicyEngineRecord;\n try {\n verified = (await verifyPolicyEngineRecord(recordObject)).object;\n } catch (error) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-signature-invalid\",\n error instanceof Error ? error.message : String(error),\n );\n }\n if (verified.signature.signerDid !== verified.ownerDid) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-signature-invalid\",\n \"$.signedRecord.signature.signerDid must match ownerDid for the direct-owner requester profile\",\n );\n }\n\n const expectedOwnerDid = requiredString(normalized, \"ownerDid\", \"$\");\n if (verified.ownerDid !== expectedOwnerDid) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-owner-mismatch\",\n \"$.signedRecord.ownerDid does not match\",\n );\n }\n const expectedAudience = requiredString(normalized, \"audience\", \"$\");\n if (verified.audience !== expectedAudience) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-audience-mismatch\",\n \"$.signedRecord.audience does not match\",\n );\n }\n const expectedGrantIssuerDid = requiredString(\n normalized,\n \"grantIssuerDid\",\n \"$\",\n );\n if (verified.grantIssuerDid !== expectedGrantIssuerDid) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-grant-issuer-mismatch\",\n \"$.signedRecord.grantIssuerDid does not match\",\n );\n }\n const requiredPolicyVersion = hasOwn(normalized, \"requiredPolicyVersion\")\n ? requiredString(normalized, \"requiredPolicyVersion\", \"$\")\n : POLICY_VERSION_V0;\n if (!verified.supportedPolicyVersions.includes(requiredPolicyVersion)) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-policy-version-unsupported\",\n \"$.signedRecord.supportedPolicyVersions does not include the required version\",\n );\n }\n const requiredEvidenceVerifier = hasOwn(\n normalized,\n \"requiredEvidenceVerifier\",\n )\n ? requiredString(normalized, \"requiredEvidenceVerifier\", \"$\")\n : W3C_VC_CREDENTIAL_VERIFIER;\n if (!verified.supportedEvidenceVerifiers.includes(requiredEvidenceVerifier)) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-evidence-verifier-unsupported\",\n \"$.signedRecord.supportedEvidenceVerifiers does not include the required verifier\",\n );\n }\n return verified;\n}\n\nfunction expectObject(\n input: unknown,\n path: string,\n code: PolicyAuthoringErrorCode,\n): JsonObject {\n try {\n const normalized = normalizeJson(input);\n if (\n normalized === null ||\n typeof normalized !== \"object\" ||\n Array.isArray(normalized)\n ) {\n throw new PolicyAuthoringError(code, `${path} must be an object`);\n }\n return normalized as JsonObject;\n } catch (error) {\n if (error instanceof PolicyAuthoringError) {\n throw error;\n }\n throw new PolicyAuthoringError(\n code,\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction expectPolicyEngineRecord(input: JsonValue): PolicyEngineRecord {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n \"$.policyEngineRecord must be an object\",\n );\n }\n try {\n return validatePolicyEngineRecordSignedShape(input);\n } catch (error) {\n throw new PolicyAuthoringError(\n \"transcript-share-bootstrap-malformed\",\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction assertExactKeys(\n object: JsonObject,\n allowed: readonly string[],\n path: string,\n): void {\n const allowedSet = new Set(allowed);\n for (const key of Object.keys(object)) {\n if (!allowedSet.has(key)) {\n throw new PolicyAuthoringError(\n \"policy-authoring-unknown-key\",\n `${path} has unknown field ${key}`,\n );\n }\n }\n}\n\nfunction requiredValue(\n object: JsonObject,\n key: string,\n path: string,\n): JsonValue {\n if (!hasOwn(object, key)) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key} is required`,\n );\n }\n return object[key];\n}\n\nfunction requiredString(object: JsonObject, key: string, path: string): string {\n const value = requiredValue(object, key, path);\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key} must be a non-empty string`,\n );\n }\n return value;\n}\n\nfunction fieldString(\n object: JsonObject,\n key: string,\n path: string,\n code: PolicyAuthoringErrorCode,\n): string {\n if (!hasOwn(object, key)) {\n throw new PolicyAuthoringError(code, `${path}.${key} is required`);\n }\n const value = object[key];\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyAuthoringError(\n code,\n `${path}.${key} must be a non-empty string`,\n );\n }\n return value;\n}\n\nfunction requiredObject(\n object: JsonObject,\n key: string,\n path: string,\n): JsonObject {\n const value = requiredValue(object, key, path);\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key} must be an object`,\n );\n }\n return value as JsonObject;\n}\n\nfunction requiredArray(\n object: JsonObject,\n key: string,\n path: string,\n): readonly JsonValue[] {\n const value = requiredValue(object, key, path);\n if (!Array.isArray(value)) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key} must be an array`,\n );\n }\n return value;\n}\n\nfunction requiredStringArray(\n object: JsonObject,\n key: string,\n path: string,\n): string[] {\n const values = requiredArray(object, key, path);\n return values.map((value, index) => {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}.${key}[${index}] must be a non-empty string`,\n );\n }\n return value;\n });\n}\n\nfunction validateSupportedPolicyVersions(\n values: readonly string[],\n path: string,\n): void {\n if (values.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path} must not be empty`,\n );\n }\n for (let index = 0; index < values.length; index++) {\n if (values[index] !== POLICY_VERSION_V0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}[${index}] is unsupported`,\n );\n }\n }\n}\n\nfunction validateSupportedEvidenceVerifiers(\n values: readonly string[],\n path: string,\n): void {\n if (values.length === 0) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path} must not be empty`,\n );\n }\n for (let index = 0; index < values.length; index++) {\n if (values[index] !== W3C_VC_CREDENTIAL_VERIFIER) {\n throw new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n `${path}[${index}] is unsupported`,\n );\n }\n }\n}\n\nfunction wrapCapabilityError<T>(fn: () => T): T {\n try {\n return fn();\n } catch (error) {\n if (error instanceof PolicyCapabilityError) {\n throw new PolicyAuthoringError(error.code, error.message);\n }\n throw error;\n }\n}\n\nfunction wrapSignedObjectError(error: unknown): Error {\n if (error instanceof PolicyAuthoringError) {\n return error;\n }\n if (\n error instanceof SignedObjectSchemaError ||\n error instanceof SignedObjectProfileError\n ) {\n return new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n error.message,\n );\n }\n return new PolicyAuthoringError(\n \"policy-authoring-malformed\",\n error instanceof Error ? error.message : String(error),\n );\n}\n\nfunction parseStrictRfc3339(value: string, path: string): number {\n const match = value.match(\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(\\.\\d+)?Z$/,\n );\n if (!match) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-date-invalid\",\n `${path} must be strict RFC 3339`,\n );\n }\n const parsed = Date.parse(value);\n if (Number.isNaN(parsed)) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-date-invalid\",\n `${path} must be parseable`,\n );\n }\n const canonical = new Date(parsed).toISOString().replace(\".000Z\", \"Z\");\n if (canonical !== value) {\n throw new PolicyAuthoringError(\n \"policy-engine-record-date-invalid\",\n `${path} must be normalizable`,\n );\n }\n return parsed;\n}\n\nconst objectHasOwn: (object: object, propertyKey: PropertyKey) => boolean =\n (\n Object as ObjectConstructor & {\n hasOwn?: (object: object, propertyKey: PropertyKey) => boolean;\n }\n ).hasOwn ??\n (Object.prototype.hasOwnProperty.call.bind(\n Object.prototype.hasOwnProperty,\n ) as (object: object, propertyKey: PropertyKey) => boolean);\n\nfunction hasOwn(object: JsonObject, key: string): boolean {\n return objectHasOwn(object, key);\n}\n","import { sha256 } from \"@noble/hashes/sha256\";\nimport { blake3 } from \"@noble/hashes/blake3\";\nimport { ed25519 } from \"@noble/curves/ed25519\";\nimport { CID } from \"multiformats/cid\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { z } from \"zod\";\nimport { jcsCanonicalize } from \"./jcs\";\n\nexport const POLICY_V1_SCHEMA = \"xyz.tinycloud.policy/policy/v1\" as const;\nexport const POLICY_CAPABILITY_V1_SCHEMA =\n \"xyz.tinycloud.policy/capability/v1\" as const;\nexport const POLICY_ENFORCEMENT_DELEGATION_V2_SCHEMA =\n \"xyz.tinycloud.policy/enforcement-delegation/v2\" as const;\nexport const ATTESTED_ENFORCER_BINDING_V2_SCHEMA =\n \"xyz.tinycloud.policy/attested-enforcer/v2\" as const;\nexport const ROOT_STATUS_CHECKPOINT_V1_SCHEMA =\n \"xyz.tinycloud.policy/root-status/v1\" as const;\nexport const ROOT_REVOCATION_V1_SCHEMA =\n \"xyz.tinycloud.policy/root-revocation/v1\" as const;\nexport const POLICY_SESSION_UCAN_V1_PROFILE = \"policy-session-ucan/v1\" as const;\n\nexport const POLICY_V1_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nexport const POLICY_CAPABILITY_V1_DOMAIN =\n \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nexport const CONTENT_SOURCE_V1_DOMAIN =\n \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nexport const NATIVE_PROJECTION_V1_DOMAIN =\n \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nexport const ROOT_STATUS_V1_DOMAIN =\n \"xyz.tinycloud.policy/RootStatusCheckpoint/v1\\0\";\nexport const ROOT_STATUS_RENEWAL_V1_DOMAIN =\n \"xyz.tinycloud.policy/RootStatusRenewal/v1\\0\";\nexport const ROOT_REVOCATION_V1_DOMAIN =\n \"xyz.tinycloud.policy/RootRevocation/v1\\0\";\n\nexport const LAST_V2_CREATE_AT = \"2026-09-30T00:00:00Z\" as const;\nexport const MAX_LEGACY_ENVELOPE_EXPIRES_AT = \"2026-12-29T00:00:00Z\" as const;\nexport const LAST_V2_READ_AT = \"2027-01-05T00:00:00Z\" as const;\n\nexport type UnifiedResourceSelector = \"exact\" | \"prefix\";\n\nexport interface UnifiedKvCapability {\n readonly kind: \"kv\";\n readonly resource: string;\n readonly selector: UnifiedResourceSelector;\n readonly actions: readonly (\n | \"tinycloud.kv/get\"\n | \"tinycloud.kv/list\"\n | \"tinycloud.kv/metadata\"\n | \"tinycloud.kv/put\"\n )[];\n}\n\nexport interface UnifiedEncryptionCapability {\n readonly kind: \"encryption\";\n readonly resource: string;\n readonly action: \"tinycloud.encryption/decrypt\";\n}\n\nexport type UnifiedPolicyCapability =\n | UnifiedKvCapability\n | UnifiedEncryptionCapability;\n\nexport interface UnifiedNativeCapability {\n readonly service: \"tinycloud.kv\" | \"tinycloud.encryption\";\n readonly space: string;\n readonly path: string;\n readonly actions: readonly string[];\n readonly caveat?: Readonly<Record<string, string>>;\n}\n\nexport interface UnifiedContentSource {\n readonly shareId: string;\n readonly kvResource: string;\n readonly selector: UnifiedResourceSelector;\n readonly encryptionNetwork: string;\n readonly encryptedSymmetricKeyDigestHex: string;\n readonly keyVersion: number;\n readonly mode: \"mutable\" | \"immutable\";\n readonly initialCiphertextDigestHex?: string;\n}\n\nexport interface UnifiedPolicyV1 {\n readonly schema: typeof POLICY_V1_SCHEMA;\n readonly policyId: string;\n readonly ownerDid: string;\n readonly createdAt: string;\n readonly expiresAt?: string;\n readonly contentSource: UnifiedContentSource;\n readonly capabilityCeiling: readonly UnifiedPolicyCapability[];\n readonly signature: {\n readonly suite: string;\n readonly signerDid: string;\n readonly value: string;\n };\n}\n\nexport interface PolicyRootV3 {\n readonly cid: string;\n readonly authorization: string;\n}\n\nexport interface RegisterPolicyV3Input {\n readonly nodeOrigin: string;\n readonly policyCid: string;\n readonly policy: Readonly<Record<string, unknown>>;\n readonly policyRoot: PolicyRootV3;\n readonly enforcementRoot: PolicyRootV3;\n readonly contentSourceDigestHex: string;\n readonly nativeProjectionHashHex: string;\n readonly rootExpiresAt: string;\n readonly enforcerDid: string;\n readonly expectedNodeAudience: string;\n readonly fetch?: typeof fetch;\n readonly signal?: AbortSignal;\n}\n\nexport interface AttestedEnforcerBindingV2 {\n readonly schema: \"xyz.tinycloud.policy/attested-enforcer/v2\";\n readonly enforcerDid: string;\n readonly nodeAudience: string;\n readonly attestationBindingDigestHex: string;\n readonly issuedAt: string;\n readonly expiresAt: string;\n readonly signature: {\n readonly suite: \"Ed25519\";\n readonly signerDid: string;\n readonly value: string;\n };\n}\n\nexport interface RegisterPolicyV3Receipt {\n readonly policyCid: string;\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly attestedEnforcerBinding: AttestedEnforcerBindingV2;\n}\n\nexport type PolicySessionUcanFactV1 = Readonly<Record<string, unknown>> & {\n /** Present only on accountless PolicyCredentialPresentation/v4 admissions. */\n readonly credentialIdAuditDigestHex?: string;\n /** Present only on accountless PolicyCredentialPresentation/v4 admissions. */\n readonly presentationJtiAuditDigestHex?: string;\n};\n\nexport interface PolicySessionUcanV1 {\n readonly authorization: string;\n readonly cid: string;\n readonly iss: string;\n readonly aud: string;\n readonly prf: readonly [string, string];\n readonly att: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly nbf: number;\n readonly exp: number;\n readonly nnc: string;\n readonly fact: PolicySessionUcanFactV1;\n}\n\nexport interface PolicyChallengeV3 {\n readonly challengeId: string;\n readonly nonce: string;\n readonly policyCid: string;\n readonly recipientDid: string;\n readonly expiresAt?: string;\n readonly nodeAudience?: string;\n readonly [key: string]: unknown;\n}\n\nexport async function requestPolicyChallengeV3(input: {\n readonly nodeOrigin: string;\n /**\n * Policy control routes are part of the recipient's TinyCloud Node. This is\n * deliberately a path, not a second origin: applications must not send a\n * credential presentation to a separately discovered policy service.\n */\n readonly policyRuntimePath?: string;\n readonly policyCid: string;\n readonly recipientDid: string;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly fetch?: typeof fetch;\n readonly signal?: AbortSignal;\n}): Promise<PolicyChallengeV3> {\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const policyRuntimePath = policyRuntimeBasePath(input.policyRuntimePath);\n const response = await fetchFn(new URL(`${policyRuntimePath}/challenges`, input.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n signal: input.signal,\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ policyCid: input.policyCid, recipientDid: input.recipientDid, requestedCapabilities: input.requestedCapabilities.map(normalizeUnifiedPolicyCapability) }),\n });\n if (!response.ok) throw new Error(`policy challenge rejected (${response.status})`);\n const value = object(await response.json(), \"policy challenge\") as PolicyChallengeV3;\n if (typeof value.challengeId !== \"string\" || typeof value.nonce !== \"string\" || value.policyCid !== input.policyCid || value.recipientDid !== input.recipientDid)\n throw new Error(\"policy challenge binding is invalid\");\n return value;\n}\n\nfunction policyRuntimeBasePath(value: string | undefined): string {\n const path = value ?? \"/policy/v3\";\n if (!/^\\/policy(?:\\/[a-z0-9-]+)*$/.test(path)) {\n throw new Error(\"policy runtime path is invalid\");\n }\n return path;\n}\n\nexport async function mintPolicySessionV3(input: {\n readonly nodeOrigin: string;\n readonly policyCid: string;\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly recipientDid: string;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly expectedFacts?: Readonly<Record<string, string | number>>;\n readonly claim: Readonly<Record<string, unknown>>;\n readonly presentation: Readonly<Record<string, unknown>>;\n readonly challenge?: PolicyChallengeV3;\n readonly fetch?: typeof fetch;\n readonly signal?: AbortSignal;\n}): Promise<PolicySessionUcanV1> {\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const challenge = input.challenge ?? await requestPolicyChallengeV3(input);\n if (challenge.policyCid !== input.policyCid || challenge.recipientDid !== input.recipientDid)\n throw new Error(\"policy challenge binding is invalid\");\n const response = await fetchFn(new URL(\"/policy/v3/delegations\", input.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n signal: input.signal,\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ policyCid: input.policyCid, challengeId: challenge.challengeId, nonce: challenge.nonce, claim: input.claim, presentation: input.presentation }),\n });\n if (!response.ok) throw new Error(`policy delegation rejected (${response.status})`);\n const value = object(await response.json(), \"policy delegation\");\n if (value.admitted !== true || typeof value.sessionCid !== \"string\" || typeof value.authorization !== \"string\")\n throw new Error(\"policy delegation response is invalid\");\n const session = parsePolicySessionUcan(value.authorization, [input.policyRootCid, input.enforcementRootCid]);\n const expectedAttenuation = compactAttenuationForPolicyCapabilities(input.requestedCapabilities);\n if (session.cid !== value.sessionCid\n || session.aud !== input.recipientDid\n || session.fact.policyCid !== input.policyCid\n || session.fact.recipientDid !== input.recipientDid\n || session.fact.policyDelegationCid !== input.policyRootCid\n || session.fact.enforcementDelegationCid !== input.enforcementRootCid\n || jcsCanonicalize(session.att) !== jcsCanonicalize(expectedAttenuation)\n || Object.entries(input.expectedFacts ?? {}).some(([key, expected]) => session.fact[key] !== expected))\n throw new Error(\"policy delegation signed binding is invalid\");\n return session;\n}\n\nexport function compactAttenuationForPolicyCapabilities(\n input: readonly UnifiedPolicyCapability[],\n): Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>> {\n const attenuation: Record<string, Record<string, readonly unknown[]>> = {};\n for (const raw of input) {\n const capability = normalizeUnifiedPolicyCapability(raw);\n if (attenuation[capability.resource] !== undefined)\n throw new Error(\"policy capabilities contain a duplicate resource\");\n attenuation[capability.resource] = capability.kind === \"encryption\"\n ? { [capability.action]: [{}] }\n : Object.fromEntries(capability.actions.map((action) => [action, [{\n type: \"xyz.tinycloud.resource/selector\",\n kind: capability.selector,\n value: capability.resource,\n }]]));\n }\n return attenuation;\n}\n\nexport interface PolicyRootStatusV3 {\n readonly rootCid: string;\n readonly state: \"active\" | \"revoked\";\n readonly checkpoint: Readonly<Record<string, unknown>>;\n readonly revocation?: Readonly<Record<string, unknown>>;\n}\n\nexport function verifyPolicyRootStatusCheckpointV3(input: {\n readonly rootCid: string;\n readonly checkpoint: Readonly<Record<string, unknown>>;\n readonly expectedNodeAudience?: string;\n readonly now?: Date;\n}): boolean {\n const checkpoint = input.checkpoint;\n const allowed = new Set([\"schema\", \"targetCid\", \"targetRole\", \"ownerDid\", \"nodeAudience\", \"state\", \"sequence\", \"checkedAt\", \"freshUntil\", \"revokedAt\", \"revocationCid\", \"previousCheckpointDigestHex\", \"issuerDid\", \"signature\"]);\n if (Object.keys(checkpoint).some((key) => !allowed.has(key))\n || checkpoint.schema !== ROOT_STATUS_CHECKPOINT_V1_SCHEMA\n || checkpoint.targetCid !== input.rootCid\n || (checkpoint.targetRole !== \"policy-authority\" && checkpoint.targetRole !== \"policy-enforcement\")\n || (checkpoint.state !== \"active\" && checkpoint.state !== \"revoked\")\n || typeof checkpoint.ownerDid !== \"string\"\n || typeof checkpoint.nodeAudience !== \"string\"\n || checkpoint.issuerDid !== checkpoint.nodeAudience\n || (input.expectedNodeAudience !== undefined && checkpoint.nodeAudience !== input.expectedNodeAudience)\n || !Number.isInteger(checkpoint.sequence)\n || (checkpoint.sequence as number) < 1\n || typeof checkpoint.checkedAt !== \"string\"\n || typeof checkpoint.freshUntil !== \"string\") return false;\n const checkedAt = Date.parse(checkpoint.checkedAt as string);\n const freshUntil = Date.parse(checkpoint.freshUntil as string);\n const now = (input.now ?? new Date()).getTime();\n if (!Number.isFinite(checkedAt) || !Number.isFinite(freshUntil)\n || freshUntil < now || freshUntil <= checkedAt || freshUntil - checkedAt > 300_000) return false;\n if ((checkpoint.sequence === 1) !== (checkpoint.previousCheckpointDigestHex === undefined)) return false;\n if (checkpoint.sequence !== 1 && (typeof checkpoint.previousCheckpointDigestHex !== \"string\" || !/^[0-9a-f]{64}$/.test(checkpoint.previousCheckpointDigestHex))) return false;\n if (checkpoint.state === \"active\" && (checkpoint.revokedAt !== undefined || checkpoint.revocationCid !== undefined)) return false;\n if (checkpoint.state === \"revoked\" && (typeof checkpoint.revokedAt !== \"string\" || typeof checkpoint.revocationCid !== \"string\")) return false;\n const signature = checkpoint.signature;\n if (!isRecordValue(signature) || Object.keys(signature).length !== 3 || signature.suite !== \"Ed25519\" || signature.signerDid !== checkpoint.issuerDid || typeof signature.value !== \"string\") return false;\n try {\n const principal = (checkpoint.issuerDid as string).split(\"#\", 1)[0]!;\n const didMaterial = principal.startsWith(\"did:key:\") ? base58btc.decode(principal.slice(\"did:key:\".length)) : new Uint8Array();\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01) return false;\n const unsigned = { ...checkpoint } as Record<string, unknown>;\n delete unsigned.signature;\n return ed25519.verify(\n decodeBase64Url(signature.value),\n sha256(new TextEncoder().encode(ROOT_STATUS_V1_DOMAIN + jcsCanonicalize(unsigned))),\n didMaterial.slice(2),\n );\n } catch {\n return false;\n }\n}\n\nexport async function getPolicyRootStatusV3(input: {\n readonly nodeOrigin: string;\n readonly rootCid: string;\n readonly expectedNodeAudience?: string;\n readonly expectedEnforcerDid?: string;\n readonly now?: Date;\n readonly fetch?: typeof fetch;\n}): Promise<PolicyRootStatusV3> {\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const response = await fetchFn(new URL(`/policy/v3/status/${encodeURIComponent(input.rootCid)}`, input.nodeOrigin), {\n method: \"GET\",\n redirect: \"error\",\n headers: { accept: \"application/json\" },\n });\n if (!response.ok) throw new Error(`policy root status rejected (${response.status})`);\n const value = object(await response.json(), \"policy root status\");\n const checkpoint = object(value.checkpoint, \"policy root checkpoint\");\n if (value.rootCid !== input.rootCid\n || (value.state !== \"active\" && value.state !== \"revoked\")\n || value.state !== checkpoint.state\n || !verifyPolicyRootStatusCheckpointV3({ rootCid: input.rootCid, checkpoint, expectedNodeAudience: input.expectedNodeAudience, now: input.now }))\n throw new Error(\"policy root status binding is invalid\");\n const revocation = value.revocation === undefined ? undefined : object(value.revocation, \"policy root revocation\");\n if ((value.state === \"revoked\") !== (revocation !== undefined)\n || revocation !== undefined && !verifyPolicyRootRevocationV3({\n rootCid: input.rootCid,\n checkpoint,\n revocation,\n expectedEnforcerDid: input.expectedEnforcerDid,\n })) throw new Error(\"policy root status revocation evidence is invalid\");\n return { rootCid: input.rootCid, state: value.state, checkpoint, ...(revocation === undefined ? {} : { revocation }) };\n}\n\nexport function verifyPolicyRootRevocationV3(input: {\n readonly rootCid: string;\n readonly checkpoint: Readonly<Record<string, unknown>>;\n readonly revocation: Readonly<Record<string, unknown>>;\n readonly expectedEnforcerDid?: string;\n}): boolean {\n const value = input.revocation;\n const allowed = [\"schema\", \"targetCid\", \"targetRole\", \"ownerDid\", \"nodeAudience\", \"revokedAt\", \"reason\", \"issuerDid\", \"signature\"];\n if (Object.keys(value).length !== allowed.length || Object.keys(value).some((key) => !allowed.includes(key))\n || value.schema !== ROOT_REVOCATION_V1_SCHEMA\n || value.targetCid !== input.rootCid\n || value.targetRole !== input.checkpoint.targetRole\n || value.ownerDid !== input.checkpoint.ownerDid\n || value.nodeAudience !== input.checkpoint.nodeAudience\n || value.revokedAt !== input.checkpoint.revokedAt\n || typeof value.reason !== \"string\" || value.reason.length === 0\n || typeof value.issuerDid !== \"string\") return false;\n const authorized = value.issuerDid === value.ownerDid\n || value.targetRole === \"policy-enforcement\" && value.issuerDid === input.expectedEnforcerDid;\n if (!authorized) return false;\n const signature = value.signature;\n if (!isRecordValue(signature) || Object.keys(signature).length !== 3 || signature.suite !== \"Ed25519\" || signature.signerDid !== value.issuerDid || typeof signature.value !== \"string\") return false;\n try {\n const principal = (value.issuerDid as string).split(\"#\", 1)[0]!;\n const didMaterial = principal.startsWith(\"did:key:\") ? base58btc.decode(principal.slice(\"did:key:\".length)) : new Uint8Array();\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01) return false;\n const unsigned = { ...value } as Record<string, unknown>;\n delete unsigned.signature;\n const digest = sha256(new TextEncoder().encode(ROOT_REVOCATION_V1_DOMAIN + jcsCanonicalize(unsigned)));\n return input.checkpoint.revocationCid === hex(digest)\n && ed25519.verify(decodeBase64Url(signature.value), digest, didMaterial.slice(2));\n } catch {\n return false;\n }\n}\n\nexport async function renewPolicyRootStatusV3(input: {\n readonly nodeOrigin: string;\n readonly rootCid: string;\n readonly ownerDid: string;\n readonly nodeAudience: string;\n readonly sign: (digest: Uint8Array) => Promise<Uint8Array>;\n readonly now?: Date;\n readonly nonce?: string;\n readonly fetch?: typeof fetch;\n}): Promise<Readonly<Record<string, unknown>>> {\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const current = await getPolicyRootStatusV3({ nodeOrigin: input.nodeOrigin, rootCid: input.rootCid, expectedNodeAudience: input.nodeAudience, now: input.now, fetch: fetchFn });\n if (current.state !== \"active\" || current.checkpoint.ownerDid !== input.ownerDid || current.checkpoint.nodeAudience !== input.nodeAudience || current.checkpoint.state !== \"active\" || !Number.isInteger(current.checkpoint.sequence))\n throw new Error(\"policy root status cannot be renewed\");\n const currentUnsigned = { ...current.checkpoint };\n delete currentUnsigned.signature;\n const previousCheckpointDigestHex = hex(sha256(new TextEncoder().encode(ROOT_STATUS_V1_DOMAIN + jcsCanonicalize(currentUnsigned))));\n const unsigned = {\n schema: \"xyz.tinycloud.policy/root-status-renewal/v1\",\n targetCid: input.rootCid,\n ownerDid: input.ownerDid,\n nodeAudience: input.nodeAudience,\n issuedAt: (input.now ?? new Date()).toISOString(),\n nonce: input.nonce ?? encodeBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n sequence: (current.checkpoint.sequence as number) + 1,\n previousCheckpointDigestHex,\n };\n const signature = await input.sign(sha256(new TextEncoder().encode(ROOT_STATUS_RENEWAL_V1_DOMAIN + jcsCanonicalize(unsigned))));\n if (signature.length !== 64) throw new Error(\"policy root renewal signature must be Ed25519\");\n const response = await fetchFn(new URL(\"/policy/v3/status\", input.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ rootCid: input.rootCid, renewal: { ...unsigned, signature: { suite: \"Ed25519\", signerDid: input.ownerDid, value: encodeBase64Url(signature) } } }),\n });\n if (!response.ok) throw new Error(`policy root renewal rejected (${response.status})`);\n return object(await response.json(), \"policy root renewal\");\n}\n\nexport async function revokePolicyRootV3(input: {\n readonly nodeOrigin: string;\n readonly rootCid: string;\n readonly targetRole: \"policy-authority\" | \"policy-enforcement\";\n readonly ownerDid: string;\n readonly issuerDid: string;\n readonly nodeAudience: string;\n readonly reason: string;\n readonly sign: (digest: Uint8Array) => Promise<Uint8Array>;\n readonly now?: Date;\n readonly fetch?: typeof fetch;\n}): Promise<Readonly<Record<string, unknown>>> {\n if (input.reason.length === 0) throw new Error(\"policy root revocation reason is required\");\n const unsigned = {\n schema: ROOT_REVOCATION_V1_SCHEMA,\n targetCid: input.rootCid,\n targetRole: input.targetRole,\n ownerDid: input.ownerDid,\n nodeAudience: input.nodeAudience,\n revokedAt: (input.now ?? new Date()).toISOString(),\n reason: input.reason,\n issuerDid: input.issuerDid,\n };\n const signature = await input.sign(sha256(new TextEncoder().encode(ROOT_REVOCATION_V1_DOMAIN + jcsCanonicalize(unsigned))));\n if (signature.length !== 64) throw new Error(\"policy root revocation signature must be Ed25519\");\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const response = await fetchFn(new URL(\"/revoke\", input.nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({ revocation: { ...unsigned, signature: { suite: \"Ed25519\", signerDid: input.issuerDid, value: encodeBase64Url(signature) } } }),\n });\n if (!response.ok) throw new Error(`policy root revocation rejected (${response.status})`);\n return object(await response.json(), \"policy root revocation\");\n}\n\nconst POLICY_SESSION_FACT_KEYS = [\n \"profile\",\n \"ownerDid\",\n \"policyId\",\n \"policyDigestHex\",\n \"policyCid\",\n \"policyDelegationCid\",\n \"enforcementDelegationCid\",\n \"contentSourceDigestHex\",\n \"capabilityCeilingHashHex\",\n \"nativeProjectionHashHex\",\n \"enforcerDid\",\n \"nodeAudience\",\n \"recipientDid\",\n \"challengeId\",\n \"claimDigestHex\",\n \"claimJti\",\n \"vpDigestHex\",\n \"credentialEvidenceDigestHex\",\n \"decisionContextDigestHex\",\n \"issuanceAuditDigestHex\",\n \"remainingRedelegationDepth\",\n] as const;\n\nconst POLICY_SESSION_V4_AUDIT_FACT_KEYS = [\n \"credentialIdAuditDigestHex\",\n \"presentationJtiAuditDigestHex\",\n] as const;\n\nconst LOWER_SHA256_HEX = /^[0-9a-f]{64}$/;\n\nconst KV_ACTIONS = new Set<string>([\n \"tinycloud.kv/get\",\n \"tinycloud.kv/list\",\n \"tinycloud.kv/metadata\",\n \"tinycloud.kv/put\",\n]);\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(`${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactKeys(\n value: Record<string, unknown>,\n allowed: readonly string[],\n label: string,\n): void {\n const keys = new Set(allowed);\n if (Object.keys(value).some((key) => !keys.has(key)))\n throw new Error(`${label} contains an unknown field`);\n}\n\nfunction nonEmptyString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0)\n throw new Error(`${label} must be a non-empty string`);\n return value;\n}\n\nfunction parseKvResource(resource: string): { space: string; path: string } {\n const marker = resource.indexOf(\"/kv/\");\n const encodedSpace = marker < 1 ? \"\" : resource.slice(0, marker);\n const legacy = encodedSpace.startsWith(\"tinycloud://\");\n const space = legacy ? encodedSpace.slice(\"tinycloud://\".length) : encodedSpace;\n const path = marker < 1 ? \"\" : resource.slice(marker + 4);\n if (\n marker < 1 ||\n (legacy\n ? /[:/?#%]/.test(space)\n : !encodedSpace.startsWith(\"tinycloud:\") || /[/?#%]/.test(encodedSpace)) ||\n path.startsWith(\"/\") ||\n path.endsWith(\"/\") ||\n path.includes(\"//\") ||\n path\n .split(\"/\")\n .some((part) => part === \".\" || part === \"..\" || part.length === 0)\n ) {\n throw new Error(\"KV resource is not canonical\");\n }\n return { space, path };\n}\n\nfunction parseEncryptionResource(resource: string): void {\n if (!resource.startsWith(\"urn:tinycloud:encryption:\")) throw new Error(\"encryption capability is invalid\");\n const rest = resource.slice(\"urn:tinycloud:encryption:\".length);\n const separator = rest.lastIndexOf(\":\");\n const ownerDid = separator < 0 ? \"\" : rest.slice(0, separator);\n const network = separator < 0 ? \"\" : rest.slice(separator + 1);\n if (!ownerDid.startsWith(\"did:\") || network.length === 0 || network.includes(\":\") || network.includes(\"/\") || network.includes(\"%\") || network.includes(\"?\") || network.includes(\"#\")) {\n throw new Error(\"encryption capability is invalid\");\n }\n}\n\nexport function normalizeUnifiedPolicyCapability(\n input: unknown,\n): UnifiedPolicyCapability {\n const value = object(input, \"capability\");\n const kind = nonEmptyString(value.kind, \"capability.kind\");\n if (kind === \"kv\") {\n exactKeys(\n value,\n [\"kind\", \"resource\", \"selector\", \"actions\"],\n \"KV capability\",\n );\n const resource = nonEmptyString(value.resource, \"capability.resource\");\n parseKvResource(resource);\n if (value.selector !== \"exact\" && value.selector !== \"prefix\")\n throw new Error(\"capability.selector is invalid\");\n if (!Array.isArray(value.actions) || value.actions.length === 0)\n throw new Error(\"capability.actions is invalid\");\n const actions = value.actions.map((action) =>\n nonEmptyString(action, \"capability.actions[]\"),\n );\n if (\n new Set(actions).size !== actions.length ||\n actions.some((action) => !KV_ACTIONS.has(action))\n )\n throw new Error(\"capability.actions is invalid\");\n return {\n kind: \"kv\",\n resource,\n selector: value.selector,\n actions: [...actions].sort() as UnifiedKvCapability[\"actions\"],\n };\n }\n if (kind === \"encryption\") {\n exactKeys(value, [\"kind\", \"resource\", \"action\"], \"encryption capability\");\n const resource = nonEmptyString(value.resource, \"capability.resource\");\n if (value.action !== \"tinycloud.encryption/decrypt\")\n throw new Error(\"encryption capability is invalid\");\n parseEncryptionResource(resource);\n return {\n kind: \"encryption\",\n resource,\n action: \"tinycloud.encryption/decrypt\",\n };\n }\n throw new Error(\"capability.kind is invalid\");\n}\n\nexport function canonicalizeUnifiedPolicyCapability(\n input: unknown,\n): UnifiedPolicyCapability {\n return normalizeUnifiedPolicyCapability(input);\n}\n\nexport function unifiedPolicyCapabilityDigestHex(input: unknown): string {\n return hex(\n sha256(\n new TextEncoder().encode(\n POLICY_CAPABILITY_V1_DOMAIN +\n jcsCanonicalize(normalizeUnifiedPolicyCapability(input)),\n ),\n ),\n );\n}\n\nexport function unifiedPolicyCapabilityContains(\n authorityInput: unknown,\n requestedInput: unknown,\n): boolean {\n try {\n const authority = normalizeUnifiedPolicyCapability(authorityInput);\n const requested = normalizeUnifiedPolicyCapability(requestedInput);\n if (authority.kind !== requested.kind) return false;\n if (authority.kind === \"encryption\" && requested.kind === \"encryption\")\n return (\n authority.resource === requested.resource &&\n authority.action === requested.action\n );\n if (authority.kind !== \"kv\" || requested.kind !== \"kv\") return false;\n const { resource: authorized } = authority;\n const { resource: requestedResource } = requested;\n const pathContained =\n authority.selector === \"exact\"\n ? authorized === requestedResource\n : authorized === requestedResource ||\n requestedResource.startsWith(`${authorized}/`);\n if (\n !pathContained ||\n (authority.selector === \"exact\" && requested.selector === \"prefix\")\n )\n return false;\n return requested.actions.every((action) =>\n authority.actions.includes(action),\n );\n } catch {\n return false;\n }\n}\n\nexport function projectUnifiedPolicyCapability(\n input: unknown,\n): UnifiedNativeCapability {\n const capability = normalizeUnifiedPolicyCapability(input);\n if (capability.kind === \"encryption\") {\n return {\n service: \"tinycloud.encryption\",\n space: capability.resource,\n path: capability.resource,\n actions: [capability.action],\n };\n }\n const { space, path } = parseKvResource(capability.resource);\n return {\n service: \"tinycloud.kv\",\n space,\n path,\n actions: [...capability.actions],\n caveat: {\n type: \"xyz.tinycloud.resource/selector\",\n kind: capability.selector,\n value: capability.resource,\n },\n };\n}\n\nexport function projectUnifiedPolicyCapabilities(\n input: readonly unknown[],\n): UnifiedNativeCapability[] {\n return input\n .map(projectUnifiedPolicyCapability)\n .sort((left, right) => {\n const a = jcsCanonicalize(left);\n const b = jcsCanonicalize(right);\n return a < b ? -1 : a > b ? 1 : 0;\n });\n}\n\nexport function unifiedNativeProjectionHashHex(\n input: readonly unknown[],\n): string {\n return hex(\n sha256(\n new TextEncoder().encode(\n NATIVE_PROJECTION_V1_DOMAIN +\n jcsCanonicalize(projectUnifiedPolicyCapabilities(input)),\n ),\n ),\n );\n}\n\nexport function unifiedPolicyCapabilityFromNative(\n input: unknown,\n): UnifiedPolicyCapability {\n const value = object(input, \"native capability\");\n exactKeys(\n value,\n [\"service\", \"space\", \"path\", \"actions\", \"caveat\"],\n \"native capability\",\n );\n const service = nonEmptyString(value.service, \"native.service\");\n const actions = value.actions;\n if (!Array.isArray(actions)) throw new Error(\"native.actions is invalid\");\n if (\n service === \"tinycloud.encryption\" &&\n value.caveat === undefined &&\n value.space === value.path &&\n actions.length === 1 &&\n actions[0] === \"tinycloud.encryption/decrypt\"\n ) {\n return normalizeUnifiedPolicyCapability({\n kind: \"encryption\",\n resource: value.space,\n action: actions[0],\n });\n }\n if (\n service !== \"tinycloud.kv\" ||\n typeof value.space !== \"string\" ||\n typeof value.path !== \"string\"\n )\n throw new Error(\"native capability is not supported\");\n const caveat = object(value.caveat, \"native.caveat\");\n exactKeys(caveat, [\"type\", \"kind\", \"value\"], \"native selector caveat\");\n if (\n caveat.type !== \"xyz.tinycloud.resource/selector\" ||\n (caveat.kind !== \"exact\" && caveat.kind !== \"prefix\") ||\n caveat.value !== `${value.space.startsWith(\"tinycloud:\") ? value.space : `tinycloud://${value.space}`}/kv/${value.path}`\n )\n throw new Error(\"native selector caveat does not match capability\");\n return normalizeUnifiedPolicyCapability({\n kind: \"kv\",\n resource: caveat.value,\n selector: caveat.kind,\n actions,\n });\n}\n\nexport function contentSourceDigestHex(input: UnifiedContentSource): string {\n return hex(\n sha256(\n new TextEncoder().encode(\n CONTENT_SOURCE_V1_DOMAIN + jcsCanonicalize(input),\n ),\n ),\n );\n}\n\nfunction exactObject(\n value: unknown,\n keys: readonly string[],\n label: string,\n): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(`${label} is invalid`);\n }\n const record = value as Record<string, unknown>;\n if (\n Object.keys(record).length !== keys.length ||\n keys.some((key) => !Object.prototype.hasOwnProperty.call(record, key))\n ) {\n throw new Error(`${label} is invalid`);\n }\n return record;\n}\n\nfunction didKeyEd25519PublicKey(value: string): Uint8Array {\n const principal = value.split(\"#\", 1)[0]!;\n if (!principal.startsWith(\"did:key:\")) {\n throw new Error(\"policy enforcer binding signer is invalid\");\n }\n const material = base58btc.decode(principal.slice(\"did:key:\".length));\n if (material.length !== 34 || material[0] !== 0xed || material[1] !== 0x01) {\n throw new Error(\"policy enforcer binding signer is invalid\");\n }\n return material.slice(2);\n}\n\n/**\n * Register a signed policy and its sibling roots with the embedded Node\n * Policy/v3 runtime. This is intentionally application-neutral: callers\n * supply policy material, while Node owns both transport endpoints.\n */\nexport async function registerPolicyV3(\n input: RegisterPolicyV3Input,\n): Promise<RegisterPolicyV3Receipt> {\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const rootExpiresAt = new Date(input.rootExpiresAt);\n const canonicalRootExpiresAt = new Date(\n Math.floor(rootExpiresAt.getTime() / 1000) * 1000,\n )\n .toISOString()\n .replace(/\\.000Z$/, \"Z\");\n if (\n !Number.isFinite(rootExpiresAt.getTime()) ||\n canonicalRootExpiresAt !== input.rootExpiresAt ||\n rootExpiresAt.getTime() <= Date.now()\n ) {\n throw new Error(\"policy root expiry is invalid\");\n }\n const bindingResponse = await fetchFn(\n new URL(\"/policy/v3/enforcer-bindings\", input.nodeOrigin),\n {\n method: \"POST\",\n redirect: \"error\",\n signal: input.signal,\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({\n rootExpiresAt: input.rootExpiresAt,\n enforcerDid: input.enforcerDid,\n }),\n },\n );\n if (!bindingResponse.ok) {\n throw new Error(`policy enforcer binding rejected (${bindingResponse.status})`);\n }\n const binding = exactObject(\n await bindingResponse.json(),\n [\n \"schema\",\n \"enforcerDid\",\n \"nodeAudience\",\n \"attestationBindingDigestHex\",\n \"issuedAt\",\n \"expiresAt\",\n \"signature\",\n ],\n \"policy enforcer binding\",\n );\n const signature = exactObject(\n binding.signature,\n [\"suite\", \"signerDid\", \"value\"],\n \"policy enforcer binding signature\",\n );\n const expectedBindingDigestHex = hex(\n sha256(\n new TextEncoder().encode(\n jcsCanonicalize({\n enforcerDid: input.enforcerDid,\n nodeAudience: input.expectedNodeAudience,\n }),\n ),\n ),\n );\n if (\n binding.schema !== ATTESTED_ENFORCER_BINDING_V2_SCHEMA ||\n binding.enforcerDid !== input.enforcerDid ||\n binding.nodeAudience !== input.expectedNodeAudience ||\n binding.attestationBindingDigestHex !== expectedBindingDigestHex ||\n binding.expiresAt !== input.rootExpiresAt ||\n typeof binding.issuedAt !== \"string\" ||\n Date.parse(binding.issuedAt) > Date.now() ||\n signature.suite !== \"Ed25519\" ||\n signature.signerDid !== input.expectedNodeAudience ||\n typeof signature.value !== \"string\"\n ) {\n throw new Error(\"policy enforcer binding is invalid\");\n }\n const { signature: _signature, ...unsignedBinding } = binding;\n const signedBinding = sha256(\n new TextEncoder().encode(\n `xyz.tinycloud.policy/AttestedEnforcerBinding/v2\\0${jcsCanonicalize(unsignedBinding)}`,\n ),\n );\n if (\n !ed25519.verify(\n decodeBase64Url(signature.value),\n signedBinding,\n didKeyEd25519PublicKey(input.expectedNodeAudience),\n { zip215: false },\n )\n ) {\n throw new Error(\"policy enforcer binding signature is invalid\");\n }\n\n const response = await fetchFn(\n new URL(\"/policy/v3/policies\", input.nodeOrigin),\n {\n method: \"POST\",\n redirect: \"error\",\n signal: input.signal,\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({\n policyCid: input.policyCid,\n policy: input.policy,\n policyRoot: input.policyRoot.authorization.replace(/^Bearer\\s+/i, \"\"),\n enforcementRoot: input.enforcementRoot.authorization.replace(/^Bearer\\s+/i, \"\"),\n contentSourceDigestHex: input.contentSourceDigestHex,\n nativeProjectionHashHex: input.nativeProjectionHashHex,\n attestedEnforcerBinding: binding,\n }),\n },\n );\n if (!response.ok) {\n throw new Error(`policy registration rejected (${response.status})`);\n }\n const receipt = exactObject(\n await response.json(),\n [\"policyCid\", \"policyRootCid\", \"enforcementRootCid\"],\n \"policy registration response\",\n );\n if (\n receipt.policyCid !== input.policyCid ||\n receipt.policyRootCid !== input.policyRoot.cid ||\n receipt.enforcementRootCid !== input.enforcementRoot.cid\n ) {\n throw new Error(\"policy registration response binding is invalid\");\n }\n return {\n policyCid: input.policyCid,\n policyRootCid: input.policyRoot.cid,\n enforcementRootCid: input.enforcementRoot.cid,\n attestedEnforcerBinding: binding as unknown as AttestedEnforcerBindingV2,\n };\n}\n\nexport function policyDigestHex(\n policy: Omit<UnifiedPolicyV1, \"policyId\" | \"signature\">,\n): string {\n const canonicalPolicy = {\n ...policy,\n capabilityCeiling: policy.capabilityCeiling.map(\n normalizeUnifiedPolicyCapability,\n ),\n };\n return hex(\n sha256(\n new TextEncoder().encode(\n POLICY_V1_DOMAIN + jcsCanonicalize(canonicalPolicy),\n ),\n ),\n );\n}\n\nexport function policyIdForDigestHex(digestHex: string): string {\n const digest = Uint8Array.from(\n (digestHex.match(/.{2}/g) ?? []).map((byte) => Number.parseInt(byte, 16)),\n );\n if (digest.length !== 32) throw new Error(\"policy digest must be 32 bytes\");\n return `pol_${base32Lower(digest)}`;\n}\n\nexport function policyCidFromCanonicalBytes(bytes: Uint8Array): string {\n return CID.createV1(0x55, createDigest(0x12, sha256(bytes))).toString();\n}\n\nconst CompactHeaderSchema = z.object({\n alg: z.literal(\"EdDSA\"),\n jwk: z.object({ alg: z.literal(\"EdDSA\"), crv: z.literal(\"Ed25519\"), kty: z.literal(\"OKP\"), x: z.string().min(1) }).strict(),\n typ: z.literal(\"JWT\"),\n ucv: z.literal(\"0.10.0\"),\n}).strict();\nconst CompactPayloadSchema = z.object({\n att: z.record(z.record(z.array(z.unknown()).min(1))),\n aud: z.string().min(1),\n exp: z.number().int(),\n fct: z.array(z.record(z.unknown())).length(1),\n iss: z.string().min(1),\n nbf: z.number().int(),\n nnc: z.string().min(1),\n prf: z.array(z.string().min(1)),\n}).strict();\n\nexport interface CompactUcanAuthorizationV1 {\n readonly authorization: string;\n readonly cid: string;\n readonly header: z.infer<typeof CompactHeaderSchema>;\n readonly payload: z.infer<typeof CompactPayloadSchema>;\n}\n\nexport interface SignCompactUcanAuthorizationInput {\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly facts: readonly [Readonly<Record<string, unknown>>];\n readonly proofs: readonly string[];\n readonly notBefore: number;\n readonly expiresAt: number;\n readonly nonce: string;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\nexport interface SignCompactUcanRootAuthorizationInput {\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly facts: readonly [Readonly<Record<string, unknown>>];\n readonly notBefore: number;\n readonly expiresAt: number;\n readonly nonce: string;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\nasync function signCompactUcan(\n input: SignCompactUcanAuthorizationInput,\n): Promise<CompactUcanAuthorizationV1> {\n const principal = input.issuerDid.split(\"#\", 1)[0]!;\n const didMaterial = principal.startsWith(\"did:key:\")\n ? base58btc.decode(principal.slice(\"did:key:\".length))\n : new Uint8Array();\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01)\n throw new Error(\"compact UCAN signer must be did:key Ed25519\");\n const header = { alg: \"EdDSA\", jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: encodeBase64Url(didMaterial.slice(2)) }, typ: \"JWT\", ucv: \"0.10.0\" };\n const payload = {\n att: input.attenuation,\n aud: input.audienceDid,\n exp: input.expiresAt,\n fct: input.facts,\n iss: input.issuerDid.includes(\"#\") ? input.issuerDid : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: input.notBefore,\n nnc: input.nonce,\n prf: input.proofs,\n };\n const protectedSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(header)));\n const payloadSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(payload)));\n const signature = await input.sign(new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`));\n if (signature.length !== 64) throw new Error(\"compact Authorization signature must be Ed25519\");\n return parseCompactUcanAuthorization(`${protectedSegment}.${payloadSegment}.${encodeBase64Url(signature)}`);\n}\n\n/** Sign exact compact-UCAN bytes with a caller-owned, potentially non-extractable key. */\nexport async function signCompactUcanAuthorization(\n input: SignCompactUcanAuthorizationInput,\n): Promise<CompactUcanAuthorizationV1> {\n if (input.notBefore >= input.expiresAt || input.expiresAt - input.notBefore > 60)\n throw new Error(\"compact invocation lifetime must be between one and 60 seconds\");\n return signCompactUcan(input);\n}\n\n/** Sign a proofless policy root without weakening the 60-second invocation profile. */\nexport async function signCompactUcanRootAuthorization(\n input: SignCompactUcanRootAuthorizationInput,\n): Promise<CompactUcanAuthorizationV1> {\n if (input.notBefore >= input.expiresAt || input.expiresAt - input.notBefore > 31 * 24 * 60 * 60)\n throw new Error(\"compact policy root lifetime must be between one second and 31 days\");\n return signCompactUcan({ ...input, proofs: [] });\n}\n\nexport interface CompactPolicyInvocationInput {\n readonly sessionAuthorization: string;\n readonly sessionCid: string;\n readonly recipientDid: string;\n readonly audienceDid: string;\n readonly resource: string;\n readonly action: string;\n readonly caveat?: Readonly<Record<string, unknown>>;\n readonly facts?: Readonly<Record<string, unknown>>;\n readonly privateKey: Uint8Array;\n readonly now?: number;\n readonly nonce?: string;\n}\n\n/** Sign a fresh one-parent ordinary invocation; S0 itself is never a bearer. */\nexport function createCompactPolicyInvocation(\n input: CompactPolicyInvocationInput,\n): CompactUcanAuthorizationV1 {\n const session = parsePolicySessionUcan(input.sessionAuthorization);\n if (session.cid !== input.sessionCid || session.aud !== input.recipientDid)\n throw new Error(\"policy session does not bind the recipient signer\");\n const principal = input.recipientDid.split(\"#\", 1)[0]!;\n const didMaterial = base58btc.decode(principal.slice(\"did:key:\".length));\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01)\n throw new Error(\"policy invocation signer must be did:key Ed25519\");\n const publicKey = ed25519.getPublicKey(input.privateKey);\n if (!equalBytes(publicKey, didMaterial.slice(2)))\n throw new Error(\"policy invocation private key does not bind recipient DID\");\n const now = input.now ?? Math.floor(Date.now() / 1000);\n const exp = Math.min(now + 60, session.exp);\n if (exp <= now) throw new Error(\"policy session has expired\");\n const header = { alg: \"EdDSA\", jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: encodeBase64Url(publicKey) }, typ: \"JWT\", ucv: \"0.10.0\" };\n const payload = {\n att: { [input.resource]: { [input.action]: [input.caveat ?? {}] } },\n aud: input.audienceDid,\n exp,\n fct: [input.facts ?? { type: \"tinycloud.policy.invocation/v1\", policyCid: session.fact.policyCid, sessionCid: session.cid }],\n iss: input.recipientDid.includes(\"#\") ? input.recipientDid : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: now,\n nnc: input.nonce ?? encodeBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n prf: [session.cid],\n };\n const protectedSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(header)));\n const payloadSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(payload)));\n const signingInput = new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`);\n const signature = ed25519.sign(signingInput, input.privateKey);\n return parseCompactUcanAuthorization(`${protectedSegment}.${payloadSegment}.${encodeBase64Url(signature)}`);\n}\n\nexport function createCompactPolicyDescendant(input: {\n readonly parentAuthorization: string;\n readonly parentCid: string;\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly privateKey: Uint8Array;\n readonly now?: number;\n readonly expiresAt?: number;\n readonly nonce?: string;\n}): CompactUcanAuthorizationV1 {\n const parent = parseCompactUcanAuthorization(input.parentAuthorization, input.parentCid);\n if (parent.payload.aud !== input.issuerDid) throw new Error(\"policy descendant issuer is not the parent audience\");\n const parentFact = parent.payload.fct[0]!;\n const depth = parentFact.remainingRedelegationDepth;\n if (!Number.isInteger(depth) || (depth as number) <= 0) throw new Error(\"policy descendant depth is exhausted\");\n if (!compactAttenuationContains(parent.payload.att, input.attenuation))\n throw new Error(\"policy descendant exceeds the parent attenuation\");\n const principal = input.issuerDid.split(\"#\", 1)[0]!;\n const didMaterial = base58btc.decode(principal.slice(\"did:key:\".length));\n const publicKey = ed25519.getPublicKey(input.privateKey);\n if (didMaterial.length !== 34 || !equalBytes(publicKey, didMaterial.slice(2))) throw new Error(\"policy descendant signer does not bind issuer DID\");\n const now = Math.max(input.now ?? Math.floor(Date.now() / 1000), parent.payload.nbf + 1);\n const exp = Math.min(input.expiresAt ?? now + 60, now + 60, parent.payload.exp - 1);\n if (exp <= now) throw new Error(\"policy parent has no strictly narrower validity window\");\n const header = { alg: \"EdDSA\", jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: encodeBase64Url(publicKey) }, typ: \"JWT\", ucv: \"0.10.0\" };\n const payload = {\n att: input.attenuation,\n aud: input.audienceDid,\n exp,\n fct: [{ ...parentFact, remainingRedelegationDepth: (depth as number) - 1 }],\n iss: input.issuerDid.includes(\"#\") ? input.issuerDid : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: now,\n nnc: input.nonce ?? encodeBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n prf: [parent.cid],\n };\n const protectedSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(header)));\n const payloadSegment = encodeBase64Url(new TextEncoder().encode(jcsCanonicalize(payload)));\n const signature = ed25519.sign(new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`), input.privateKey);\n return parseCompactUcanAuthorization(`${protectedSegment}.${payloadSegment}.${encodeBase64Url(signature)}`);\n}\n\n/** Byte-independent semantic containment shared by S0, descendants and mint requests. */\nexport function compactAttenuationContains(\n parent: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>,\n child: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>,\n): boolean {\n const selector = (value: readonly unknown[]): { readonly kind: \"exact\" | \"prefix\"; readonly value: string } | undefined => {\n if (value.length !== 1 || !isRecordValue(value[0])) return undefined;\n const caveat = value[0];\n if (Object.keys(caveat).length !== 3 || caveat.type !== \"xyz.tinycloud.resource/selector\" || (caveat.kind !== \"exact\" && caveat.kind !== \"prefix\") || typeof caveat.value !== \"string\") return undefined;\n return { kind: caveat.kind, value: caveat.value };\n };\n const equal = (left: unknown, right: unknown): boolean => jcsCanonicalize(left) === jcsCanonicalize(right);\n return Object.entries(child).every(([childResource, childActions]) =>\n Object.entries(childActions).every(([action, childCaveats]) =>\n Object.entries(parent).some(([parentResource, parentActions]) => {\n const parentCaveats = parentActions[action];\n if (parentCaveats === undefined) return false;\n if (parentResource === childResource && equal(parentCaveats, childCaveats)) return true;\n const parentSelector = selector(parentCaveats);\n const childSelector = selector(childCaveats);\n return parentSelector?.kind === \"prefix\"\n && childSelector !== undefined\n && parentSelector.value === parentResource\n && childSelector.value === childResource\n && (childResource === parentResource || childResource.startsWith(`${parentResource}/`));\n }),\n ),\n );\n}\n\nfunction isRecordValue(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function parseCompactUcanAuthorization(\n input: string,\n expectedCid?: string,\n): CompactUcanAuthorizationV1 {\n if (typeof input !== \"string\" || /\\s/.test(input))\n throw new Error(\"Authorization must be compact UCAN bytes\");\n const segments = input.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0))\n throw new Error(\"Authorization must have three compact segments\");\n const [headerSegment, payloadSegment, signatureSegment] = segments as [string, string, string];\n const headerBytes = decodeBase64Url(headerSegment);\n const payloadBytes = decodeBase64Url(payloadSegment);\n const signature = decodeBase64Url(signatureSegment);\n const headerValue: unknown = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(headerBytes));\n const payloadValue: unknown = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(payloadBytes));\n if (jcsCanonicalize(headerValue) !== new TextDecoder().decode(headerBytes)\n || jcsCanonicalize(payloadValue) !== new TextDecoder().decode(payloadBytes))\n throw new Error(\"compact UCAN segments are not canonical JCS\");\n const header = CompactHeaderSchema.parse(headerValue);\n const payload = CompactPayloadSchema.parse(payloadValue);\n if (payload.nbf >= payload.exp) throw new Error(\"compact UCAN validity is empty\");\n const principal = payload.iss.split(\"#\", 1)[0]!;\n const didMaterial = principal.startsWith(\"did:key:\")\n ? base58btc.decode(principal.slice(\"did:key:\".length))\n : new Uint8Array();\n if (didMaterial.length !== 34 || didMaterial[0] !== 0xed || didMaterial[1] !== 0x01)\n throw new Error(\"compact UCAN issuer must be did:key Ed25519\");\n const publicKey = didMaterial.slice(2);\n if (!equalBytes(publicKey, decodeBase64Url(header.jwk.x)))\n throw new Error(\"compact UCAN JWK does not bind issuer\");\n if (!ed25519.verify(signature, new TextEncoder().encode(`${headerSegment}.${payloadSegment}`), publicKey))\n throw new Error(\"compact UCAN signature is invalid\");\n const cid = CID.createV1(0x55, createDigest(0x1e, blake3(new TextEncoder().encode(input)))).toString();\n if (expectedCid !== undefined && cid !== expectedCid)\n throw new Error(\"compact UCAN CID does not match exact Authorization bytes\");\n return { authorization: input, cid, header, payload };\n}\n\nexport function parsePolicySessionUcan(\n authorization: string,\n expectedProofs?: readonly [string, string],\n): PolicySessionUcanV1 {\n const parsed = parseCompactUcanAuthorization(authorization);\n const fact = parsed.payload.fct[0]!;\n if (parsed.payload.prf.length !== 2 || parsed.payload.prf[0] === parsed.payload.prf[1])\n throw new Error(\"policy session UCAN requires two distinct ordered proofs\");\n if (expectedProofs !== undefined\n && (parsed.payload.prf[0] !== expectedProofs[0] || parsed.payload.prf[1] !== expectedProofs[1]))\n throw new Error(\"policy session UCAN ordered proofs do not match\");\n const factKeys = Object.keys(fact);\n const hasLegacyFactShape = factKeys.length === POLICY_SESSION_FACT_KEYS.length\n && factKeys.every((key) => POLICY_SESSION_FACT_KEYS.includes(key as never))\n && POLICY_SESSION_FACT_KEYS.every((key) => key in fact);\n const hasV4AuditFactShape = factKeys.length === POLICY_SESSION_FACT_KEYS.length + POLICY_SESSION_V4_AUDIT_FACT_KEYS.length\n && factKeys.every((key) => POLICY_SESSION_FACT_KEYS.includes(key as never) || POLICY_SESSION_V4_AUDIT_FACT_KEYS.includes(key as never))\n && POLICY_SESSION_FACT_KEYS.every((key) => key in fact)\n && POLICY_SESSION_V4_AUDIT_FACT_KEYS.every((key) => key in fact);\n if (!hasLegacyFactShape && !hasV4AuditFactShape)\n throw new Error(\"policy session UCAN fact is incomplete\");\n if (hasV4AuditFactShape\n && (!LOWER_SHA256_HEX.test(fact.credentialIdAuditDigestHex as string)\n || !LOWER_SHA256_HEX.test(fact.presentationJtiAuditDigestHex as string)))\n throw new Error(\"policy session UCAN v4 audit facts are invalid\");\n if (\n fact.profile !== POLICY_SESSION_UCAN_V1_PROFILE ||\n typeof fact.remainingRedelegationDepth !== \"number\" ||\n !Number.isInteger(fact.remainingRedelegationDepth) ||\n fact.remainingRedelegationDepth < 0 ||\n fact.remainingRedelegationDepth > 8 ||\n parsed.payload.exp - parsed.payload.nbf > 60 ||\n parsed.payload.iss.split(\"#\", 1)[0] !== fact.nodeAudience ||\n parsed.payload.aud !== fact.recipientDid\n )\n throw new Error(\"policy session UCAN fact is invalid\");\n return {\n authorization,\n cid: parsed.cid,\n iss: parsed.payload.iss,\n aud: parsed.payload.aud,\n prf: parsed.payload.prf as [string, string],\n att: parsed.payload.att,\n nbf: parsed.payload.nbf,\n exp: parsed.payload.exp,\n nnc: parsed.payload.nnc,\n fact,\n };\n}\n\nfunction decodeBase64Url(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value) || value.length % 4 === 1)\n throw new Error(\"value is not canonical base64url\");\n const normalized = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const binary = typeof atob === \"function\"\n ? atob(normalized.padEnd(Math.ceil(normalized.length / 4) * 4, \"=\"))\n : Buffer.from(normalized, \"base64\").toString(\"binary\");\n const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\n const encoded = typeof btoa === \"function\"\n ? btoa(String.fromCharCode(...bytes)).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\")\n : Buffer.from(bytes).toString(\"base64url\");\n if (encoded !== value) throw new Error(\"value is not canonical base64url\");\n return bytes;\n}\n\nfunction encodeBase64Url(value: Uint8Array): string {\n return typeof btoa === \"function\"\n ? btoa(String.fromCharCode(...value)).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\")\n : Buffer.from(value).toString(\"base64url\");\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.length === right.length && left.every((byte, index) => byte === right[index]);\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction base32Lower(bytes: Uint8Array): string {\n const alphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n output += alphabet[(buffer >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) output += alphabet[(buffer << (5 - bits)) & 31];\n return output;\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport {\n credentialRequirementDigest,\n validateCredentialRequirement,\n} from \"../credentials/requirement\";\nimport {\n encodeBase64Url,\n isDigest,\n sha256Base64Url,\n} from \"../credentials/digest\";\nimport type {\n CredentialRequirement,\n IssuedCredentialEnvelope,\n VerifiedCredential,\n} from \"../credentials/types\";\nimport { jcsCanonicalize } from \"./jcs\";\nimport {\n compactAttenuationForPolicyCapabilities,\n normalizeUnifiedPolicyCapability,\n parsePolicySessionUcan,\n policyCidFromCanonicalBytes,\n policyIdForDigestHex,\n requestPolicyChallengeV3,\n unifiedPolicyCapabilityContains,\n type PolicyChallengeV3,\n type PolicySessionUcanV1,\n type UnifiedContentSource,\n type UnifiedPolicyCapability,\n} from \"./unified\";\n\nexport const POLICY_V2_SCHEMA = \"xyz.tinycloud.policy/policy/v2\" as const;\nexport const POLICY_V2_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\0\";\nexport const POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE =\n \"TinyCloudPolicyCredentialRequirement\" as const;\nexport const POLICY_PRESENTATION_V3_SCHEMA =\n \"xyz.tinycloud.policy/presentation/v3\" as const;\nexport const POLICY_PRESENTATION_V3_DOMAIN =\n \"xyz.tinycloud.policy/Presentation/v3\\0\";\nexport const POLICY_PRESENTATION_V4_SCHEMA =\n \"xyz.tinycloud.policy/presentation/v4\" as const;\nexport const POLICY_PRESENTATION_V4_DOMAIN =\n \"xyz.tinycloud.policy/Presentation/v4\\0\";\n\nexport interface PolicyCredentialRequirementV1 {\n readonly type: typeof POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE;\n readonly version: 1;\n readonly requirementDigest: string;\n readonly descriptorDigest: string;\n readonly issuerDid: string;\n readonly issuerKid: string;\n readonly profile: { readonly id: string; readonly version: 1 };\n readonly credentialType: { readonly id: string; readonly version: 1 };\n}\n\nexport interface UnifiedPolicyV2 {\n readonly schema: typeof POLICY_V2_SCHEMA;\n readonly policyId: string;\n readonly ownerDid: string;\n readonly createdAt: string;\n readonly expiresAt?: string;\n readonly contentSource: UnifiedContentSource;\n readonly capabilityCeiling: readonly UnifiedPolicyCapability[];\n readonly credentialRequirement: PolicyCredentialRequirementV1;\n readonly signature: {\n readonly suite: \"Ed25519\";\n readonly signerDid: string;\n readonly value: string;\n };\n}\n\nexport type UnsignedUnifiedPolicyV2 = Omit<\n UnifiedPolicyV2,\n \"policyId\" | \"signature\"\n>;\n\nexport interface PolicyCredentialPresentationV3 {\n readonly schema: typeof POLICY_PRESENTATION_V3_SCHEMA;\n readonly jti: string;\n readonly challengeId: string;\n readonly nonce: string;\n readonly policyCid: string;\n readonly nodeAudience: string;\n readonly holderDid: string;\n readonly subjectDid: string;\n readonly credentialSpaceOwnerDid: string;\n readonly credentialDigest: string;\n readonly requirementDigest: string;\n readonly descriptorDigest: string;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly issuedAt: string;\n readonly expiresAt: string;\n readonly signature: {\n readonly suite: \"Ed25519\";\n readonly signerDid: string;\n readonly value: string;\n };\n}\n\nexport interface UnsignedPolicyCredentialPresentationV4 {\n readonly schema: typeof POLICY_PRESENTATION_V4_SCHEMA;\n readonly jti: string;\n readonly challengeId: string;\n readonly nonce: string;\n readonly policyCid: string;\n readonly nodeAudience: string;\n readonly holderDid: string;\n readonly subjectDid: string;\n readonly credentialDigest: string;\n readonly requirementDigest: string;\n readonly descriptorDigest: string;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly issuedAt: string;\n readonly expiresAt: string;\n}\n\nexport interface PolicyCredentialPresentationV4\n extends UnsignedPolicyCredentialPresentationV4 {\n readonly signature: {\n readonly suite: \"Ed25519\";\n readonly signerDid: string;\n readonly value: string;\n };\n}\n\nfunction record(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactKeys(\n value: Record<string, unknown>,\n keys: readonly string[],\n label: string,\n): void {\n const expected = [...keys].sort();\n const actual = Object.keys(value).sort();\n if (\n actual.length !== expected.length ||\n actual.some((key, index) => key !== expected[index])\n ) {\n throw new Error(`${label} contains an unknown or missing field`);\n }\n}\n\nfunction nonEmpty(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`${label} must be a non-empty string`);\n }\n return value;\n}\n\nfunction policyNodeOrigin(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new Error(\"policy node origin is invalid\");\n }\n if (\n url.protocol !== \"https:\" ||\n url.username !== \"\" ||\n url.password !== \"\" ||\n url.pathname !== \"/\" ||\n url.search !== \"\" ||\n url.hash !== \"\"\n ) {\n throw new Error(\"policy node origin is invalid\");\n }\n return url.origin;\n}\n\nfunction versionPair(\n value: unknown,\n label: string,\n): { readonly id: string; readonly version: 1 } {\n const item = record(value, label);\n exactKeys(item, [\"id\", \"version\"], label);\n if (item.version !== 1) throw new Error(`${label} version is unsupported`);\n return Object.freeze({ id: nonEmpty(item.id, `${label}.id`), version: 1 });\n}\n\nexport function validatePolicyCredentialRequirementV1(\n value: unknown,\n): PolicyCredentialRequirementV1 {\n const item = record(value, \"policy credential requirement\");\n exactKeys(\n item,\n [\n \"type\",\n \"version\",\n \"requirementDigest\",\n \"descriptorDigest\",\n \"issuerDid\",\n \"issuerKid\",\n \"profile\",\n \"credentialType\",\n ],\n \"policy credential requirement\",\n );\n if (\n item.type !== POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE ||\n item.version !== 1 ||\n !isDigest(item.requirementDigest) ||\n !isDigest(item.descriptorDigest)\n ) {\n throw new Error(\"policy credential requirement is invalid\");\n }\n return Object.freeze({\n type: POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE,\n version: 1,\n requirementDigest: item.requirementDigest,\n descriptorDigest: item.descriptorDigest,\n issuerDid: nonEmpty(item.issuerDid, \"policy credential issuer\"),\n issuerKid: nonEmpty(item.issuerKid, \"policy credential issuer key\"),\n profile: versionPair(item.profile, \"policy credential profile\"),\n credentialType: versionPair(\n item.credentialType,\n \"policy credential type\",\n ),\n });\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nexport function policyV2DigestHex(input: UnsignedUnifiedPolicyV2): string {\n const canonicalPolicy = {\n ...input,\n credentialRequirement: validatePolicyCredentialRequirementV1(\n input.credentialRequirement,\n ),\n capabilityCeiling: input.capabilityCeiling.map(\n normalizeUnifiedPolicyCapability,\n ),\n };\n return hex(\n sha256(\n new TextEncoder().encode(\n POLICY_V2_DOMAIN + jcsCanonicalize(canonicalPolicy),\n ),\n ),\n );\n}\n\nfunction date(value: unknown, label: string): string {\n const text = nonEmpty(value, label);\n if (!Number.isFinite(Date.parse(text))) throw new Error(`${label} is invalid`);\n return text;\n}\n\nfunction rfc3339Seconds(value: Date): string {\n return new Date(Math.floor(value.getTime() / 1000) * 1000)\n .toISOString()\n .replace(/\\.000Z$/, \"Z\");\n}\n\n/**\n * Validate the exact non-PII Policy/v2 commitment consumed by the holder.\n * The caller supplies policy bytes already owner-signature verified by Share;\n * Node remains the authoritative signature verifier at admission.\n */\nexport function validateUnifiedPolicyV2(\n value: unknown,\n expectedPolicyCid?: string,\n): UnifiedPolicyV2 {\n const item = record(value, \"Policy/v2\");\n const allowed = [\n \"schema\",\n \"policyId\",\n \"ownerDid\",\n \"createdAt\",\n \"contentSource\",\n \"capabilityCeiling\",\n \"credentialRequirement\",\n \"signature\",\n ...(item.expiresAt === undefined ? [] : [\"expiresAt\"]),\n ];\n exactKeys(item, allowed, \"Policy/v2\");\n if (item.schema !== POLICY_V2_SCHEMA || !Array.isArray(item.capabilityCeiling)) {\n throw new Error(\"Policy/v2 is invalid\");\n }\n const ownerDid = nonEmpty(item.ownerDid, \"Policy/v2 ownerDid\");\n const signature = record(item.signature, \"Policy/v2 signature\");\n exactKeys(signature, [\"suite\", \"signerDid\", \"value\"], \"Policy/v2 signature\");\n if (\n signature.suite !== \"Ed25519\" ||\n signature.signerDid !== ownerDid ||\n typeof signature.value !== \"string\" ||\n signature.value.length === 0\n ) {\n throw new Error(\"Policy/v2 signature binding is invalid\");\n }\n const policy = Object.freeze({\n schema: POLICY_V2_SCHEMA,\n policyId: nonEmpty(item.policyId, \"Policy/v2 policyId\"),\n ownerDid,\n createdAt: date(item.createdAt, \"Policy/v2 createdAt\"),\n ...(item.expiresAt === undefined\n ? {}\n : { expiresAt: date(item.expiresAt, \"Policy/v2 expiresAt\") }),\n contentSource: item.contentSource as UnifiedContentSource,\n capabilityCeiling: Object.freeze(\n item.capabilityCeiling.map(normalizeUnifiedPolicyCapability),\n ),\n credentialRequirement: validatePolicyCredentialRequirementV1(\n item.credentialRequirement,\n ),\n signature: Object.freeze({\n suite: \"Ed25519\" as const,\n signerDid: ownerDid,\n value: signature.value,\n }),\n });\n const unsigned = { ...policy } as Record<string, unknown>;\n delete unsigned.policyId;\n delete unsigned.signature;\n const digestHex = policyV2DigestHex(unsigned as UnsignedUnifiedPolicyV2);\n if (policy.policyId !== policyIdForDigestHex(digestHex)) {\n throw new Error(\"Policy/v2 policyId binding is invalid\");\n }\n if (expectedPolicyCid !== undefined) {\n const cid = policyCidFromCanonicalBytes(\n new TextEncoder().encode(jcsCanonicalize(policy)),\n );\n if (cid !== expectedPolicyCid) throw new Error(\"Policy/v2 CID binding is invalid\");\n }\n return policy;\n}\n\nfunction didKeyBytes(did: string): Uint8Array {\n const principal = did.split(\"#\", 1)[0]!;\n if (!principal.startsWith(\"did:key:\")) throw new Error(\"holder DID must be did:key\");\n const material = base58btc.decode(principal.slice(\"did:key:\".length));\n if (material.length !== 34 || material[0] !== 0xed || material[1] !== 0x01) {\n throw new Error(\"holder DID must contain an Ed25519 key\");\n }\n return material.slice(2);\n}\n\nfunction envelopeFromVerified(\n verified: VerifiedCredential,\n): IssuedCredentialEnvelope {\n const { verifiedAt: _verifiedAt, credentialDigest: _credentialDigest,\n statusCheckedAt: _statusCheckedAt, ...envelope } = verified;\n return envelope;\n}\n\nexport function issuedCredentialEnvelopeFromVerified(\n verified: VerifiedCredential,\n): IssuedCredentialEnvelope {\n return envelopeFromVerified(verified);\n}\n\n/** Sign the exact accountless v4 wire value. No account custody fields exist. */\nexport async function signPolicyCredentialPresentationV4(\n value: UnsignedPolicyCredentialPresentationV4,\n sign: (digest: Uint8Array) => Promise<Uint8Array>,\n): Promise<PolicyCredentialPresentationV4> {\n const item = record(value, \"Policy presentation v4\");\n exactKeys(item, [\n \"schema\", \"jti\", \"challengeId\", \"nonce\", \"policyCid\", \"nodeAudience\",\n \"holderDid\", \"subjectDid\", \"credentialDigest\", \"requirementDigest\",\n \"descriptorDigest\", \"requestedCapabilities\", \"issuedAt\", \"expiresAt\",\n ], \"Policy presentation v4\");\n if (\n item.schema !== POLICY_PRESENTATION_V4_SCHEMA ||\n item.holderDid !== item.subjectDid ||\n !Array.isArray(item.requestedCapabilities)\n ) throw new Error(\"Policy presentation v4 is invalid\");\n const holderDid = nonEmpty(item.holderDid, \"Policy presentation v4 holder DID\");\n didKeyBytes(holderDid);\n const unsigned = Object.freeze({\n schema: POLICY_PRESENTATION_V4_SCHEMA,\n jti: nonEmpty(item.jti, \"Policy presentation v4 jti\"),\n challengeId: nonEmpty(item.challengeId, \"Policy presentation v4 challenge\"),\n nonce: nonEmpty(item.nonce, \"Policy presentation v4 nonce\"),\n policyCid: nonEmpty(item.policyCid, \"Policy presentation v4 policy CID\"),\n nodeAudience: nonEmpty(item.nodeAudience, \"Policy presentation v4 audience\"),\n holderDid,\n subjectDid: holderDid,\n credentialDigest: nonEmpty(item.credentialDigest, \"Policy presentation v4 credential digest\"),\n requirementDigest: nonEmpty(item.requirementDigest, \"Policy presentation v4 requirement digest\"),\n descriptorDigest: nonEmpty(item.descriptorDigest, \"Policy presentation v4 descriptor digest\"),\n // The low-level signer preserves the frozen wire bytes exactly. The\n // policy-aware builder performs capability normalization and containment.\n requestedCapabilities: Object.freeze(item.requestedCapabilities as UnifiedPolicyCapability[]),\n issuedAt: date(item.issuedAt, \"Policy presentation v4 issuedAt\"),\n expiresAt: date(item.expiresAt, \"Policy presentation v4 expiresAt\"),\n });\n const digest = sha256(new TextEncoder().encode(\n POLICY_PRESENTATION_V4_DOMAIN + jcsCanonicalize(unsigned),\n ));\n const signature = await sign(digest);\n if (\n signature.length !== 64 ||\n !ed25519.verify(signature, digest, didKeyBytes(holderDid))\n ) throw new Error(\"policy presentation signature is invalid\");\n return Object.freeze({\n ...unsigned,\n signature: Object.freeze({\n suite: \"Ed25519\" as const,\n signerDid: holderDid,\n value: encodeBase64Url(signature),\n }),\n });\n}\n\nexport interface BuildPolicyCredentialPresentationV4Input {\n readonly policy: UnifiedPolicyV2;\n readonly policyCid: string;\n readonly challenge: PolicyChallengeV3;\n readonly requirement: CredentialRequirement;\n readonly credential: VerifiedCredential;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly sign: (digest: Uint8Array) => Promise<Uint8Array>;\n readonly now?: Date;\n readonly jti?: string;\n}\n\nexport async function buildPolicyCredentialPresentationV4(\n input: BuildPolicyCredentialPresentationV4Input,\n): Promise<PolicyCredentialPresentationV4> {\n const policy = validateUnifiedPolicyV2(input.policy, input.policyCid);\n const requirement = validateCredentialRequirement(input.requirement);\n const commitment = policy.credentialRequirement;\n const requirementDigest = await credentialRequirementDigest(requirement);\n const credentialDigest = await sha256Base64Url(input.credential.credential);\n if (\n requirementDigest !== commitment.requirementDigest ||\n input.credential.descriptorDigest !== commitment.descriptorDigest ||\n input.credential.credentialDigest !== credentialDigest ||\n input.credential.issuerDid !== commitment.issuerDid ||\n input.credential.issuerKid !== commitment.issuerKid ||\n jcsCanonicalize(input.credential.profile) !== jcsCanonicalize(commitment.profile) ||\n jcsCanonicalize(input.credential.credentialType) !== jcsCanonicalize(commitment.credentialType)\n ) throw new Error(\"credential does not match the signed Policy/v2 requirement\");\n const requestedCapabilities = input.requestedCapabilities.map(normalizeUnifiedPolicyCapability);\n if (\n requestedCapabilities.length === 0 ||\n requestedCapabilities.some((requested) =>\n !policy.capabilityCeiling.some((authority) =>\n unifiedPolicyCapabilityContains(authority, requested)))\n ) throw new Error(\"requested capabilities exceed the signed Policy/v2 ceiling\");\n const holderDid = input.credential.holderDid;\n if (\n input.challenge.policyCid !== input.policyCid ||\n input.challenge.recipientDid !== holderDid ||\n input.credential.subjectDid !== holderDid ||\n typeof input.challenge.nodeAudience !== \"string\" ||\n input.challenge.nodeAudience.length === 0 ||\n typeof input.challenge.expiresAt !== \"string\" ||\n !Number.isFinite(Date.parse(input.challenge.expiresAt))\n ) throw new Error(\"policy challenge binding is invalid\");\n const now = input.now ?? new Date();\n const expiresAtMs = Math.min(\n now.getTime() + 60_000,\n Date.parse(input.challenge.expiresAt),\n Date.parse(input.credential.expiresAt),\n );\n if (expiresAtMs <= now.getTime()) throw new Error(\"policy challenge is expired\");\n return signPolicyCredentialPresentationV4(Object.freeze({\n schema: POLICY_PRESENTATION_V4_SCHEMA,\n jti: input.jti ?? encodeBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n challengeId: input.challenge.challengeId,\n nonce: input.challenge.nonce,\n policyCid: input.policyCid,\n nodeAudience: input.challenge.nodeAudience,\n holderDid,\n subjectDid: holderDid,\n credentialDigest,\n requirementDigest,\n descriptorDigest: input.credential.descriptorDigest,\n requestedCapabilities: Object.freeze(requestedCapabilities),\n issuedAt: rfc3339Seconds(now),\n expiresAt: rfc3339Seconds(new Date(expiresAtMs)),\n }), input.sign);\n}\n\nexport interface BuildPolicyCredentialPresentationV3Input {\n readonly policy: UnifiedPolicyV2;\n readonly policyCid: string;\n readonly challenge: PolicyChallengeV3;\n readonly requirement: CredentialRequirement;\n readonly credential: VerifiedCredential;\n readonly credentialSpaceOwnerDid: string;\n readonly requestedCapabilities: readonly UnifiedPolicyCapability[];\n readonly sign: (digest: Uint8Array) => Promise<Uint8Array>;\n readonly now?: Date;\n readonly jti?: string;\n}\n\nexport async function buildPolicyCredentialPresentationV3(\n input: BuildPolicyCredentialPresentationV3Input,\n): Promise<PolicyCredentialPresentationV3> {\n const policy = validateUnifiedPolicyV2(input.policy, input.policyCid);\n const requirement = validateCredentialRequirement(input.requirement);\n const commitment = policy.credentialRequirement;\n const requirementDigest = await credentialRequirementDigest(requirement);\n const credentialDigest = await sha256Base64Url(input.credential.credential);\n if (\n requirementDigest !== commitment.requirementDigest ||\n input.credential.descriptorDigest !== commitment.descriptorDigest ||\n input.credential.credentialDigest !== credentialDigest ||\n input.credential.issuerDid !== commitment.issuerDid ||\n input.credential.issuerKid !== commitment.issuerKid ||\n jcsCanonicalize(input.credential.profile) !== jcsCanonicalize(commitment.profile) ||\n jcsCanonicalize(input.credential.credentialType) !==\n jcsCanonicalize(commitment.credentialType)\n ) {\n throw new Error(\"credential does not match the signed Policy/v2 requirement\");\n }\n const requestedCapabilities = input.requestedCapabilities.map(\n normalizeUnifiedPolicyCapability,\n );\n if (\n requestedCapabilities.length === 0 ||\n requestedCapabilities.some(\n (requested) =>\n !policy.capabilityCeiling.some((authority) =>\n unifiedPolicyCapabilityContains(authority, requested),\n ),\n )\n ) {\n throw new Error(\"requested capabilities exceed the signed Policy/v2 ceiling\");\n }\n const challenge = input.challenge;\n const holderDid = input.credential.holderDid;\n if (\n challenge.policyCid !== input.policyCid ||\n challenge.recipientDid !== holderDid ||\n input.credential.subjectDid !== holderDid ||\n typeof challenge.nodeAudience !== \"string\" ||\n challenge.nodeAudience.length === 0 ||\n typeof challenge.expiresAt !== \"string\" ||\n !Number.isFinite(Date.parse(challenge.expiresAt))\n ) {\n throw new Error(\"policy challenge binding is invalid\");\n }\n didKeyBytes(holderDid);\n const now = input.now ?? new Date();\n const challengeExpiry = Date.parse(challenge.expiresAt);\n const credentialExpiry = Date.parse(input.credential.expiresAt);\n const expiresAtMs = Math.min(\n now.getTime() + 60_000,\n challengeExpiry,\n credentialExpiry,\n );\n if (expiresAtMs <= now.getTime()) throw new Error(\"policy challenge is expired\");\n const unsigned = Object.freeze({\n schema: POLICY_PRESENTATION_V3_SCHEMA,\n jti:\n input.jti ??\n encodeBase64Url(crypto.getRandomValues(new Uint8Array(16))),\n challengeId: challenge.challengeId,\n nonce: challenge.nonce,\n policyCid: input.policyCid,\n nodeAudience: challenge.nodeAudience,\n holderDid,\n subjectDid: input.credential.subjectDid,\n credentialSpaceOwnerDid: nonEmpty(\n input.credentialSpaceOwnerDid,\n \"credential space owner DID\",\n ),\n credentialDigest,\n requirementDigest,\n descriptorDigest: input.credential.descriptorDigest,\n requestedCapabilities: Object.freeze(requestedCapabilities),\n issuedAt: rfc3339Seconds(now),\n expiresAt: rfc3339Seconds(new Date(expiresAtMs)),\n });\n const digest = sha256(\n new TextEncoder().encode(\n POLICY_PRESENTATION_V3_DOMAIN + jcsCanonicalize(unsigned),\n ),\n );\n const signature = await input.sign(digest);\n if (\n signature.length !== 64 ||\n !ed25519.verify(signature, digest, didKeyBytes(holderDid))\n ) {\n throw new Error(\"policy presentation signature is invalid\");\n }\n return Object.freeze({\n ...unsigned,\n signature: Object.freeze({\n suite: \"Ed25519\" as const,\n signerDid: holderDid,\n value: encodeBase64Url(signature),\n }),\n });\n}\n\nexport interface AdmitPolicyCredentialV3Input\n extends Omit<BuildPolicyCredentialPresentationV3Input, \"challenge\"> {\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly nodeOrigin: string;\n /** Path to the embedded Node policy runtime. Defaults to `/policy/v3`. */\n readonly policyRuntimePath?: string;\n /** Root authorization CID of the recipient's active TinyCloud account session. */\n readonly accountAuthorizationCid: string;\n /** Recipient-owned `credentials` space covered by the account authorization. */\n readonly credentialSpaceId: string;\n readonly fetch?: typeof fetch;\n readonly signal?: AbortSignal;\n}\n\nexport interface PolicyCredentialAdmissionV3 {\n readonly challenge: PolicyChallengeV3;\n readonly presentation: PolicyCredentialPresentationV3;\n readonly session: PolicySessionUcanV1;\n}\n\n/**\n * Present verified TC-463 output to the Policy/v3 admission ceremony.\n * Raw credential material appears only in the TLS POST body.\n */\nexport async function admitPolicyCredentialV3(\n input: AdmitPolicyCredentialV3Input,\n): Promise<PolicyCredentialAdmissionV3> {\n const policy = validateUnifiedPolicyV2(input.policy, input.policyCid);\n const nodeOrigin = policyNodeOrigin(input.nodeOrigin);\n const accountAuthorizationCid = nonEmpty(\n input.accountAuthorizationCid,\n \"account authorization CID\",\n );\n const credentialSpaceId = nonEmpty(\n input.credentialSpaceId,\n \"credential space ID\",\n );\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const challenge = await requestPolicyChallengeV3({\n nodeOrigin,\n policyRuntimePath: input.policyRuntimePath,\n policyCid: input.policyCid,\n recipientDid: input.credential.holderDid,\n requestedCapabilities: input.requestedCapabilities,\n fetch: fetchFn,\n signal: input.signal,\n });\n const presentation = await buildPolicyCredentialPresentationV3({\n ...input,\n policy,\n challenge,\n });\n const response = await fetchFn(\n new URL(`${policyRuntimeBasePath(input.policyRuntimePath)}/delegations`, nodeOrigin),\n {\n method: \"POST\",\n redirect: \"error\",\n signal: input.signal,\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({\n policyCid: input.policyCid,\n challengeId: challenge.challengeId,\n nonce: challenge.nonce,\n requirement: validateCredentialRequirement(input.requirement),\n credential: envelopeFromVerified(input.credential),\n accountAuthorizationCid,\n credentialSpaceId,\n presentation,\n }),\n },\n );\n if (!response.ok) throw new Error(`policy delegation rejected (${response.status})`);\n const value = record(await response.json(), \"policy delegation\");\n if (\n value.admitted !== true ||\n typeof value.sessionCid !== \"string\" ||\n typeof value.authorization !== \"string\"\n ) {\n throw new Error(\"policy delegation response is invalid\");\n }\n const session = parsePolicySessionUcan(value.authorization, [\n input.policyRootCid,\n input.enforcementRootCid,\n ]);\n const expectedAttenuation = compactAttenuationForPolicyCapabilities(\n input.requestedCapabilities,\n );\n if (\n session.cid !== value.sessionCid ||\n session.aud !== input.credential.holderDid ||\n session.fact.policyCid !== input.policyCid ||\n session.fact.recipientDid !== input.credential.holderDid ||\n session.fact.policyDelegationCid !== input.policyRootCid ||\n session.fact.enforcementDelegationCid !== input.enforcementRootCid ||\n jcsCanonicalize(session.att) !== jcsCanonicalize(expectedAttenuation)\n ) {\n throw new Error(\"policy delegation signed binding is invalid\");\n }\n input.signal?.throwIfAborted();\n return Object.freeze({ challenge, presentation, session });\n}\n\nexport interface AdmitPolicyCredentialV4Input\n extends Omit<BuildPolicyCredentialPresentationV4Input, \"challenge\"> {\n readonly policyRootCid: string;\n readonly enforcementRootCid: string;\n readonly expectedNodeAudience: string;\n readonly expectedEnforcerDid: string;\n readonly nodeOrigin: string;\n /** Path to the embedded Node policy runtime. Defaults to `/policy/v3`. */\n readonly policyRuntimePath?: string;\n readonly fetch?: typeof fetch;\n readonly signal?: AbortSignal;\n}\n\nexport interface PolicyCredentialAdmissionV4 {\n readonly challenge: PolicyChallengeV3;\n readonly presentation: PolicyCredentialPresentationV4;\n readonly session: PolicySessionUcanV1;\n /** The ordinary delegation has been activated using Node's generic `/delegate`. */\n readonly delegationImported: true;\n}\n\n/** @internal */\nexport function validatePolicyCredentialAdmissionV4Authority(\n session: PolicySessionUcanV1,\n expected: { readonly nodeAudience: string; readonly enforcerDid: string },\n): void {\n if (session.iss.split(\"#\", 1)[0] !== expected.nodeAudience\n || session.fact.nodeAudience !== expected.nodeAudience\n || session.fact.enforcerDid !== expected.enforcerDid) throw new Error(\"policy delegation authority binding is invalid\");\n}\n\n/** Accountless admission. The request deliberately has no account custody fields. */\nexport async function admitPolicyCredentialV4(\n input: AdmitPolicyCredentialV4Input,\n): Promise<PolicyCredentialAdmissionV4> {\n const policy = validateUnifiedPolicyV2(input.policy, input.policyCid);\n const nodeOrigin = policyNodeOrigin(input.nodeOrigin);\n const fetchFn = input.fetch ?? globalThis.fetch.bind(globalThis);\n const challenge = await requestPolicyChallengeV3({\n nodeOrigin,\n policyRuntimePath: input.policyRuntimePath,\n policyCid: input.policyCid,\n recipientDid: input.credential.holderDid,\n requestedCapabilities: input.requestedCapabilities,\n fetch: fetchFn,\n signal: input.signal,\n });\n const presentation = await buildPolicyCredentialPresentationV4({\n ...input,\n policy,\n challenge,\n });\n const response = await fetchFn(new URL(`${policyRuntimeBasePath(input.policyRuntimePath)}/delegations`, nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n signal: input.signal,\n headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n body: JSON.stringify({\n policyCid: input.policyCid,\n challengeId: challenge.challengeId,\n nonce: challenge.nonce,\n requirement: validateCredentialRequirement(input.requirement),\n credential: envelopeFromVerified(input.credential),\n presentation,\n }),\n });\n if (!response.ok) throw new Error(`policy delegation rejected (${response.status})`);\n const value = record(await response.json(), \"policy delegation\");\n if (\n value.admitted !== true ||\n typeof value.sessionCid !== \"string\" ||\n typeof value.authorization !== \"string\"\n ) throw new Error(\"policy delegation response is invalid\");\n const session = parsePolicySessionUcan(value.authorization, [\n input.policyRootCid,\n input.enforcementRootCid,\n ]);\n const expectedAttenuation = compactAttenuationForPolicyCapabilities(input.requestedCapabilities);\n validatePolicyCredentialAdmissionV4Authority(session, {\n nodeAudience: input.expectedNodeAudience,\n enforcerDid: input.expectedEnforcerDid,\n });\n if (\n session.cid !== value.sessionCid ||\n session.aud !== input.credential.holderDid ||\n session.fact.policyCid !== input.policyCid ||\n session.fact.recipientDid !== input.credential.holderDid ||\n session.fact.policyDelegationCid !== input.policyRootCid ||\n session.fact.enforcementDelegationCid !== input.enforcementRootCid ||\n jcsCanonicalize(session.att) !== jcsCanonicalize(expectedAttenuation)\n ) throw new Error(\"policy delegation signed binding is invalid\");\n const importResponse = await fetchFn(new URL(\"/delegate\", nodeOrigin), {\n method: \"POST\",\n redirect: \"error\",\n signal: input.signal,\n headers: { Authorization: session.authorization },\n });\n if (!importResponse.ok) throw new Error(`delegation import rejected (${importResponse.status})`);\n input.signal?.throwIfAborted();\n return Object.freeze({ challenge, presentation, session, delegationImported: true as const });\n}\n\nfunction policyRuntimeBasePath(value: string | undefined): string {\n const path = value ?? \"/policy/v3\";\n if (!/^\\/policy(?:\\/[a-z0-9-]+)*$/.test(path)) {\n throw new Error(\"policy runtime path is invalid\");\n }\n return path;\n}\n","import { jcsCanonicalize } from \"../policy/jcs\";\n\nexport function encodeBase64Url(bytes: Uint8Array): string {\n if (typeof btoa === \"function\") {\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n }\n return Buffer.from(bytes).toString(\"base64url\");\n}\n\nexport function decodeBase64Url(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]*$/.test(value) || value.length % 4 === 1) throw new TypeError(\"value is not canonical base64url\");\n const bytes = typeof atob === \"function\"\n ? Uint8Array.from(atob(value.replace(/-/g, \"+\").replace(/_/g, \"/\").padEnd(Math.ceil(value.length / 4) * 4, \"=\")), (c) => c.charCodeAt(0))\n : new Uint8Array(Buffer.from(value, \"base64url\"));\n if (encodeBase64Url(bytes) !== value) throw new TypeError(\"value is not canonical base64url\");\n return bytes;\n}\n\nexport async function sha256Base64Url(value: string | Uint8Array): Promise<string> {\n const bytes = typeof value === \"string\" ? new TextEncoder().encode(value) : value;\n return encodeBase64Url(new Uint8Array(await crypto.subtle.digest(\"SHA-256\", bytes)));\n}\n\nexport async function canonicalDigest(value: unknown): Promise<string> {\n return sha256Base64Url(jcsCanonicalize(value));\n}\n\nexport function isDigest(value: unknown): value is string {\n return typeof value === \"string\" && /^[A-Za-z0-9_-]{43}$/.test(value);\n}\n","export const CREDENTIAL_ERROR_CODES = [\n \"ACTIVE_SESSION_REQUIRED\",\n \"CANCELED\",\n \"DESCRIPTOR_INVALID\",\n \"HOLDER_MISMATCH\",\n \"ISSUER_UNREADY\",\n \"OFFLINE\",\n \"POPUP_BLOCKED\",\n \"REQUEST_EXPIRED\",\n \"REQUEST_SUBSTITUTED\",\n \"SIGNATURE_REJECTED\",\n \"UNSUPPORTED_PROFILE\",\n \"UNSUPPORTED_VERSION\",\n \"VERIFICATION_FAILED\",\n \"VERIFIED_NOT_SAVED\",\n] as const;\n\nexport type CredentialErrorCode = (typeof CREDENTIAL_ERROR_CODES)[number];\n\nconst RECOVERABLE = new Set<CredentialErrorCode>([\n \"CANCELED\",\n \"ISSUER_UNREADY\",\n \"OFFLINE\",\n \"POPUP_BLOCKED\",\n \"REQUEST_EXPIRED\",\n \"SIGNATURE_REJECTED\",\n \"UNSUPPORTED_PROFILE\",\n \"UNSUPPORTED_VERSION\",\n \"VERIFIED_NOT_SAVED\",\n]);\n\n/** Stable, redaction-safe error returned by the credential acquisition module. */\nexport class CredentialError extends Error {\n readonly name = \"CredentialError\";\n readonly recoverable: boolean;\n\n constructor(\n readonly code: CredentialErrorCode,\n message: string,\n readonly details: {\n readonly retryAfterMs?: number;\n readonly state?: string;\n readonly correlationId?: string;\n readonly cause?: unknown;\n } = {},\n ) {\n super(message);\n this.recoverable = RECOVERABLE.has(code);\n }\n}\n\nexport function credentialError(\n value: unknown,\n fallbackCode: CredentialErrorCode = \"VERIFICATION_FAILED\",\n): CredentialError {\n if (value instanceof CredentialError) return value;\n if (value instanceof DOMException && value.name === \"AbortError\") {\n return new CredentialError(\"CANCELED\", \"Credential acquisition was canceled\", { cause: value });\n }\n return new CredentialError(fallbackCode, \"Credential acquisition failed\", { cause: value });\n}\n","import { canonicalDigest } from \"./digest\";\nimport { CredentialError } from \"./errors\";\nimport type { CredentialFlowDescriptor, CredentialRequirement, StoredCredentialRecord, VerifiedCredential } from \"./types\";\n\nconst ID = /^[a-z0-9][a-z0-9._-]{0,127}(?:\\/v1)?$/;\nexport const EMAIL_CREDENTIAL_MAX_AGE_SECONDS = 3600 as const;\n\nexport function createEmailCredentialRequirement(input: {\n readonly email: string;\n readonly profile: CredentialRequirement[\"profile\"];\n readonly credentialType: CredentialRequirement[\"credentialType\"];\n}): CredentialRequirement {\n return validateCredentialRequirement({\n type: \"TinyCloudCredentialRequirement\",\n version: 1,\n profile: input.profile,\n credentialType: input.credentialType,\n claims: { email: input.email },\n maxAgeSeconds: EMAIL_CREDENTIAL_MAX_AGE_SECONDS,\n });\n}\n\nexport function validateCredentialRequirement(value: unknown): CredentialRequirement {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential requirement is invalid\");\n const raw = value as Record<string, unknown>;\n if (Object.keys(raw).some((key) => ![\"type\", \"version\", \"profile\", \"credentialType\", \"claims\", \"maxAgeSeconds\"].includes(key)) || raw.type !== \"TinyCloudCredentialRequirement\" || raw.version !== 1) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential requirement version is unsupported\");\n const pair = (candidate: unknown, label: string) => {\n if (typeof candidate !== \"object\" || candidate === null || Array.isArray(candidate)) throw new CredentialError(\"UNSUPPORTED_PROFILE\", `${label} is invalid`);\n const item = candidate as Record<string, unknown>;\n if (Object.keys(item).length !== 2 || typeof item.id !== \"string\" || !ID.test(item.id) || item.version !== 1) throw new CredentialError(\"UNSUPPORTED_PROFILE\", `${label} version is unsupported`);\n return { id: item.id, version: 1 as const };\n };\n if (typeof raw.claims !== \"object\" || raw.claims === null || Array.isArray(raw.claims)) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential claims are invalid\");\n const claims: Record<string, string> = {};\n for (const [key, value] of Object.entries(raw.claims as Record<string, unknown>).sort(([a], [b]) => a.localeCompare(b))) {\n if (!ID.test(key) || typeof value !== \"string\" || value.length === 0 || value.length > 4096) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential claim is invalid\");\n claims[key] = value;\n }\n if (raw.maxAgeSeconds !== undefined && (!Number.isSafeInteger(raw.maxAgeSeconds) || (raw.maxAgeSeconds as number) < 1)) throw new CredentialError(\"UNSUPPORTED_PROFILE\", \"Credential freshness is invalid\");\n return Object.freeze({ type: \"TinyCloudCredentialRequirement\", version: 1, profile: pair(raw.profile, \"profile\"), credentialType: pair(raw.credentialType, \"credentialType\"), claims: Object.freeze(claims), ...(raw.maxAgeSeconds === undefined ? {} : { maxAgeSeconds: raw.maxAgeSeconds as number }) });\n}\n\nexport async function credentialRequirementDigest(requirement: CredentialRequirement): Promise<string> {\n return canonicalDigest(validateCredentialRequirement(requirement));\n}\n\nexport function descriptorSatisfiesRequirement(descriptor: CredentialFlowDescriptor, requirement: CredentialRequirement): boolean {\n const requested = validateCredentialRequirement(requirement);\n if (descriptor.profile !== requested.profile.id || descriptor.profileVersion !== requested.profile.version || descriptor.format.vct !== requested.credentialType.id || requested.credentialType.version !== 1) return false;\n const declared = new Map(descriptor.claims.map((claim) => [claim.name, claim]));\n return Object.keys(requested.claims).every((id) => declared.get(id)?.matching === \"normalized_exact\");\n}\n\nfunction matches(requirement: CredentialRequirement, candidate: Pick<StoredCredentialRecord | VerifiedCredential, \"profile\" | \"credentialType\" | \"claims\" | \"holderDid\" | \"expiresAt\" | \"issuedAt\">, holderDid: string, now: Date): boolean {\n if (candidate.holderDid !== holderDid || candidate.profile.id !== requirement.profile.id || candidate.profile.version !== requirement.profile.version || candidate.credentialType.id !== requirement.credentialType.id || candidate.credentialType.version !== requirement.credentialType.version) return false;\n if (new Date(candidate.expiresAt).getTime() <= now.getTime()) return false;\n if (requirement.maxAgeSeconds !== undefined && now.getTime() - new Date(candidate.issuedAt).getTime() > requirement.maxAgeSeconds * 1000) return false;\n return Object.entries(requirement.claims).every(([key, value]) => candidate.claims[key] === value);\n}\n\nexport function credentialMatchesRequirement(requirement: CredentialRequirement, candidate: Pick<StoredCredentialRecord | VerifiedCredential, \"profile\" | \"credentialType\" | \"claims\" | \"holderDid\" | \"expiresAt\" | \"issuedAt\">, holderDid: string, now = new Date()): boolean {\n return matches(validateCredentialRequirement(requirement), candidate, holderDid, now);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACUO,IAAM,2BAAN,cAAuC,MAAM;AAAA,EAGlD,YAAYA,OAA6B,SAAiB;AACxD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAOA;AAAA,EACd;AACF;AAEO,IAAM,0BAAN,cAAsC,yBAAyB;AAAA,EACpE,YAAY,SAAiB;AAC3B,UAAM,kBAAkB,OAAO;AAC/B,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,oCAAN,cAAgD,yBAAyB;AAAA,EAC9E,YAAY,SAAiB;AAC3B,UAAM,6BAA6B,OAAO;AAC1C,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,0BAAN,cAAsC,yBAAyB;AAAA,EACpE,YAAY,SAAiB;AAC3B,UAAM,mBAAmB,OAAO;AAChC,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,sBAAN,cAAkC,yBAAyB;AAAA,EAChE,YAAY,SAAiB;AAC3B,UAAM,eAAe,OAAO;AAC5B,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,yBAAN,cAAqC,yBAAyB;AAAA,EACnE,YAAY,SAAiB;AAC3B,UAAM,uBAAuB,OAAO;AACpC,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,yBAAN,cAAqC,yBAAyB;AAAA,EACnE,YAAY,SAAiB;AAC3B,UAAM,8BAA8B,OAAO;AAC3C,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,iCAAN,cAA6C,yBAAyB;AAAA,EAC3E,YAAY,SAAiB;AAC3B,UAAM,+BAA+B,OAAO;AAC5C,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,6BAAN,cAAyC,yBAAyB;AAAA,EACvE,YAAY,SAAiB;AAC3B,UAAM,qBAAqB,OAAO;AAClC,SAAK,OAAO;AAAA,EACd;AACF;AAEO,SAAS,oBAAoB,OAA0C;AAC5E,MAAI,iBAAiB,0BAA0B;AAC7C,WAAO;AAAA,EACT;AACA,SAAO,IAAI;AAAA,IACT;AAAA,IACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EACvD;AACF;;;ACzEA,IAAM,eACH,OAEE,UACF,OAAO,UAAU,eAAe,KAAK;AAAA,EACpC,OAAO,UAAU;AACnB;AAWK,SAAS,gBAAgB,OAAwB;AACtD,SAAO,UAAU,cAAc,OAAO,GAAG,CAAC;AAC5C;AAEO,SAAS,cAAc,OAAgB,OAAO,KAAgB;AACnE,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AAEA,UAAQ,OAAO,OAAO;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,UAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,cAAM,IAAI;AAAA,UACR,GAAG,IAAI;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT,KAAK;AACH,gCAA0B,OAAO,IAAI;AACrC,aAAO;AAAA,IACT,KAAK;AACH,aAAO,2BAA2B,OAAO,IAAI;AAAA,IAC/C,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AACE,YAAM,IAAI;AAAA,QACR,GAAG,IAAI;AAAA,MACT;AAAA,EACJ;AACF;AAEO,SAAS,UAAU,OAA0B;AAClD,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AAEA,UAAQ,OAAO,OAAO;AAAA,IACpB,KAAK;AACH,aAAO,QAAQ,SAAS;AAAA,IAC1B,KAAK,UAAU;AACb,YAAM,UAAU,KAAK,UAAU,KAAK;AACpC,UAAI,YAAY,QAAW;AACzB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK;AACH,aAAO,KAAK,UAAU,KAAK;AAAA,IAC7B,KAAK;AACH,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAO,IAAI,MAAM,IAAI,CAAC,SAAS,UAAU,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,MAC3D;AACA,aAAO,gBAAgB,KAAK;AAAA,IAC9B;AACE,YAAM,IAAI;AAAA,QACR,+BAA+B,OAAO,KAAK;AAAA,MAC7C;AAAA,EACJ;AACF;AAEA,SAAS,2BAA2B,OAAe,MAAyB;AAC1E,qBAAmB,OAAO,IAAI;AAE9B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAW,OAAO,OAAO,oBAAoB,KAAK,GAAG;AACnD,UAAI,QAAQ,UAAU;AACpB;AAAA,MACF;AACA,UAAI,CAAC,gBAAgB,KAAK,MAAM,MAAM,GAAG;AACvC,cAAM,IAAI;AAAA,UACR,GAAG,IAAI,IAAI,GAAG;AAAA,QAChB;AAAA,MACF;AACA,YAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;AAC7D,UAAI,YAAY,eAAe,MAAM;AACnC,cAAM,IAAI;AAAA,UACR,GAAG,IAAI,IAAI,GAAG;AAAA,QAChB;AAAA,MACF;AACA,UAAI,EAAE,WAAW,aAAa;AAC5B,cAAM,IAAI;AAAA,UACR,GAAG,IAAI,IAAI,GAAG;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AACA,UAAMC,UAAsB,CAAC;AAC7B,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;AACjD,UAAI,CAAC,aAAa,OAAO,KAAK,GAAG;AAC/B,cAAM,IAAI;AAAA,UACR,GAAG,IAAI,IAAI,KAAK;AAAA,QAClB;AAAA,MACF;AACA,MAAAA,QAAO,KAAK,cAAc,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;AAAA,IAC9D;AACA,WAAOA;AAAA,EACT;AAEA,QAAM,QAAQ,OAAO,eAAe,KAAK;AACzC,MAAI,UAAU,OAAO,aAAa,UAAU,MAAM;AAChD,UAAM,IAAI;AAAA,MACR,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AAEA,QAAM,SAAS,uBAAO,OAAO,IAAI;AACjC,aAAW,OAAO,OAAO,oBAAoB,KAAK,GAAG;AACnD,8BAA0B,KAAK,GAAG,IAAI,MAAM;AAC5C,QAAI,QAAQ,eAAe,QAAQ,eAAe;AAChD,YAAM,IAAI;AAAA,QACR,GAAG,IAAI,IAAI,GAAG;AAAA,MAChB;AAAA,IACF;AACA,UAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;AAC7D,QAAI,YAAY,eAAe,MAAM;AACnC,YAAM,IAAI;AAAA,QACR,GAAG,IAAI,IAAI,GAAG;AAAA,MAChB;AAAA,IACF;AACA,QAAI,EAAE,WAAW,aAAa;AAC5B,YAAM,IAAI;AAAA,QACR,GAAG,IAAI,IAAI,GAAG;AAAA,MAChB;AAAA,IACF;AACA,UAAM,QAAQ,WAAW;AACzB,WAAO,GAAG,IAAI,cAAc,OAAO,GAAG,IAAI,IAAI,GAAG,EAAE;AAAA,EACrD;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAe,MAAoB;AAC7D,MAAI,OAAO,sBAAsB,KAAK,EAAE,SAAS,GAAG;AAClD,UAAM,IAAI;AAAA,MACR,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,KAAaC,SAAyB;AAC7D,MAAI,CAAC,iBAAiB,KAAK,GAAG,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,OAAO,GAAG;AACxB,SAAO,OAAO,cAAc,KAAK,KAAK,SAAS,KAAK,QAAQA;AAC9D;AAEA,SAAS,gBAAgB,OAAsD;AAC7E,QAAM,OAAO,OAAO,KAAK,KAAK,EAAE,KAAK,qBAAqB;AAC1D,QAAM,QAAQ,KAAK,IAAI,CAAC,QAAQ,GAAG,KAAK,UAAU,GAAG,CAAC,IAAI,UAAU,MAAM,GAAG,CAAC,CAAC,EAAE;AACjF,SAAO,IAAI,MAAM,KAAK,GAAG,CAAC;AAC5B;AAEA,SAAS,sBAAsB,GAAW,GAAmB;AAC3D,QAAM,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM;AACvC,WAAS,QAAQ,GAAG,QAAQ,KAAK,SAAS;AACxC,UAAM,eAAe,EAAE,WAAW,KAAK;AACvC,UAAM,gBAAgB,EAAE,WAAW,KAAK;AACxC,QAAI,iBAAiB,eAAe;AAClC,aAAO,eAAe;AAAA,IACxB;AAAA,EACF;AACA,SAAO,EAAE,SAAS,EAAE;AACtB;AAEA,SAAS,0BAA0B,OAAe,MAAoB;AACpE,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;AACjD,UAAMC,QAAO,MAAM,WAAW,KAAK;AACnC,QAAIA,SAAQ,SAAUA,SAAQ,OAAQ;AACpC,YAAM,OAAO,MAAM,WAAW,QAAQ,CAAC;AACvC,UAAI,OAAO,MAAM,IAAI,KAAK,OAAO,SAAU,OAAO,OAAQ;AACxD,cAAM,IAAI;AAAA,UACR,GAAG,IAAI;AAAA,QACT;AAAA,MACF;AACA;AACA;AAAA,IACF;AACA,QAAIA,SAAQ,SAAUA,SAAQ,OAAQ;AACpC,YAAM,IAAI;AAAA,QACR,GAAG,IAAI;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;;;ACxNA,uBAAoC;AACpC,kBAAmC;AAGnC,IAAM,2BAA2B;AACjC,IAAM,cAAc,IAAI,YAAY;AAY7B,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAG/C,YAAYC,OAAiC,SAAiB;AAC5D,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAOA;AAAA,EACd;AACF;AAiBA,IAAMC,gBACH,OAEE,UACF,OAAO,UAAU,eAAe,KAAK;AAAA,EACpC,OAAO,UAAU;AACnB;AAEF,IAAM,mBAAmB,oBAAI,IAAI,CAAC,gBAAgB,iBAAiB,eAAe,CAAC;AACnF,IAAM,oBAAoB,oBAAI,IAAiC;AAE/D,WAAW,SAAS,sCAAqB;AACvC,MAAI,CAAC,iBAAiB,IAAI,MAAM,OAAO,GAAG;AACxC;AAAA,EACF;AACA,MAAI,MAAM,YAAY,UAAa,MAAM,YAAY,UAAa,MAAM,IAAI,SAAS,IAAI,GAAG;AAC1F;AAAA,EACF;AACA,QAAM,WAAW,kBAAkB,IAAI,MAAM,OAAO;AACpD,MAAI,aAAa,QAAW;AAC1B,sBAAkB,IAAI,MAAM,SAAS,oBAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD;AAAA,EACF;AACA,EAAC,SAAyB,IAAI,MAAM,GAAG;AACzC;AAOO,SAAS,0BAA0B,OAAkC;AAC1E,SAAO,qCAAqC,OAAO,EAAE,kBAAkB,KAAK,CAAC;AAC/E;AAOO,SAAS,6BAA6B,OAAkC;AAC7E,SAAO,qCAAqC,OAAO,EAAE,kBAAkB,KAAK,CAAC;AAC/E;AAEO,SAAS,0BAA0B,OAAwB;AAChE,QAAM,YAAY,6BAA6B,KAAK;AACpD,QAAM,MAAM,YAAY,OAAO,gBAAgB,SAAS,CAAC;AACzD,QAAM,SAAS,YAAY,OAAO,GAAG,wBAAwB,IAAI;AACjE,QAAM,QAAQ,IAAI,WAAW,OAAO,SAAS,IAAI,MAAM;AACvD,QAAM,IAAI,QAAQ,CAAC;AACnB,QAAM,IAAI,KAAK,OAAO,MAAM;AAC5B,aAAO,4BAAW,oBAAO,OAAO,OAAO,CAAC,EAAE,MAAM,CAAC;AACnD;AAEO,SAAS,yBAAyB,WAAoB,SAA2B;AACtF,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,WAAO,6BAA6B,SAAS;AAC7C,UAAM,6BAA6B,OAAO;AAAA,EAC5C,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI,KAAK,YAAY,IAAI,WAAW,KAAK,UAAU,IAAI,OAAO;AAC5D,WAAO;AAAA,EACT;AACA,MAAI,CAAC,aAAa,KAAK,MAAM,IAAI,IAAI,GAAG;AACtC,WAAO;AAAA,EACT;AACA,QAAM,cAAc,IAAI,IAAI,KAAK,OAAO;AACxC,aAAW,UAAU,IAAI,SAAS;AAChC,QAAI,CAAC,YAAY,IAAI,MAAM,GAAG;AAC5B,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,eAAe,KAAK,SAAS,IAAI,OAAO;AACjD;AAEA,SAAS,qCACP,OACA,SACkB;AAClB,QAAMC,UAAS,aAAa,OAAO,GAAG;AACtC,kBAAgBA,SAAQ,CAAC,WAAW,SAAS,QAAQ,WAAW,SAAS,GAAG,GAAG;AAC/E,QAAM,UAAU,eAAeA,SAAQ,WAAW,KAAK,qCAAqC;AAC5F,MAAI,CAAC,iBAAiB,IAAI,OAAO,GAAG;AAClC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,eAAeA,SAAQ,SAAS,KAAK,mCAAmC;AACtF,wBAAsB,KAAK;AAC3B,QAAM,iBAAiB,MAAM,UAAU,KAAK;AAC5C,MAAI,QAAQ,oBAAoB,mBAAmB,OAAO;AACxD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,eAAeA,SAAQ,QAAQ,KAAK,kCAAkC;AACtF,kBAAgB,SAAS,OAAO;AAChC,QAAM,OAAO,cAAc,OAAO;AAClC,MAAI,QAAQ,oBAAoB,SAAS,SAAS;AAChD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,kBAAgB,MAAM,OAAO;AAC7B,QAAM,UAAU;AAAA,IACd,cAAcA,SAAQ,WAAW,KAAK,oCAAoC;AAAA,IAC1E;AAAA,IACA;AAAA,EACF;AACA,QAAM,SAAS,uBAAO,OAAO,IAAI;AAOjC,SAAO,UAAU;AACjB,SAAO,QAAQ;AACf,SAAO,OAAO;AACd,SAAO,UAAU;AACjB,MAAI,OAAOA,SAAQ,SAAS,GAAG;AAC7B,WAAO,UAAU;AAAA,MACf,cAAcA,SAAQ,WAAW,KAAK,qCAAqC;AAAA,MAC3E,OAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,aAAa,OAAgB,MAA0B;AAC9D,MAAI;AACF,UAAM,aAAa,cAAc,KAAK;AACtC,QAAI,eAAe,QAAQ,OAAO,eAAe,YAAY,MAAM,QAAQ,UAAU,GAAG;AACtF,YAAM,IAAI,sBAAsB,+BAA+B,GAAG,IAAI,oBAAoB;AAAA,IAC5F;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iBAAiB,uBAAuB;AAC1C,YAAM;AAAA,IACR;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACvD;AAAA,EACF;AACF;AAEA,SAAS,gBAAgBA,SAAoB,SAA4B,MAAoB;AAC3F,QAAM,aAAa,IAAI,IAAI,OAAO;AAClC,aAAW,OAAO,OAAO,KAAKA,OAAM,GAAG;AACrC,QAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,YAAM,IAAI;AAAA,QACR,QAAQ,QAAQ,QAAQ,UAAU,gCAAgC;AAAA,QAClE,GAAG,IAAI,sBAAsB,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,cACPA,SACA,KACA,MACAF,OACW;AACX,MAAI,CAAC,OAAOE,SAAQ,GAAG,GAAG;AACxB,UAAM,IAAI,sBAAsBF,OAAM,GAAG,IAAI,IAAI,GAAG,cAAc;AAAA,EACpE;AACA,SAAOE,QAAO,GAAG;AACnB;AAEA,SAAS,eACPA,SACA,KACA,MACAF,OACQ;AACR,QAAM,QAAQ,cAAcE,SAAQ,KAAK,MAAMF,KAAI;AACnD,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,UAAM,IAAI,sBAAsBA,OAAM,GAAG,IAAI,IAAI,GAAG,6BAA6B;AAAA,EACnF;AACA,SAAO;AACT;AAEA,SAAS,cACPE,SACA,KACA,MACAF,OACsB;AACtB,QAAM,QAAQ,cAAcE,SAAQ,KAAK,MAAMF,KAAI;AACnD,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,UAAM,IAAI,sBAAsBA,OAAM,GAAG,IAAI,IAAI,GAAG,mBAAmB;AAAA,EACzE;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAqB;AAClD,MAAI,UAAU,OAAO,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AACtF,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,MAAc,SAAiC;AACtE,MAAI,KAAK,WAAW,GAAG;AACrB,UAAM,IAAI,sBAAsB,oCAAoC,iBAAiB;AAAA,EACvF;AACA,MAAI,CAAC,QAAQ,oBAAoB,KAAK,SAAS,GAAG,GAAG;AACnD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG;AAC9C,UAAM,IAAI,sBAAsB,oCAAoC,yBAAyB;AAAA,EAC/F;AACA,QAAM,WAAW,KAAK,MAAM,GAAG;AAC/B,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS;AACpD,UAAM,UAAU,SAAS,KAAK;AAC9B,UAAM,0BACJ,QAAQ,oBAAoB,UAAU,SAAS,SAAS,KAAK,QAAQ,WAAW;AAClF,QAAI,QAAQ,WAAW,KAAK,CAAC,yBAAyB;AACpD,YAAM,IAAI,sBAAsB,oCAAoC,6BAA6B;AAAA,IACnG;AACA,QAAI,YAAY,OAAO,YAAY,MAAM;AACvC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,QAAI,YAAY,OAAO,YAAY,OAAO,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;AACxF,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,cAAc,MAAsB;AAC3C,SAAO,iBAAiB,IAAI,EAAE,UAAU,KAAK;AAC/C;AAEA,SAAS,iBAAiB,MAAsB;AAC9C,SAAO,KAAK,QAAQ,oBAAoB,CAAC,YAAY;AACnD,UAAM,OAAO,OAAO,aAAa,OAAO,SAAS,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC;AACtE,WAAO,oBAAoB,KAAK,IAAI,IAAI,OAAO,QAAQ,YAAY;AAAA,EACrE,CAAC;AACH;AAEA,SAAS,iBACP,SACA,SACA,SACU;AACV,QAAM,WAAW,kBAAkB,IAAI,OAAO;AAC9C,MAAI,aAAa,QAAW;AAC1B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS,oBAAI,IAAY;AAC/B,QAAM,aAAuB,CAAC;AAC9B,WAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS;AACnD,UAAM,SAAS,QAAQ,KAAK;AAC5B,QAAI,OAAO,WAAW,YAAY,OAAO,WAAW,GAAG;AACrD,YAAM,IAAI;AAAA,QACR;AAAA,QACA,aAAa,KAAK;AAAA,MACpB;AAAA,IACF;AACA,QAAI,CAAC,OAAO,WAAW,GAAG,OAAO,GAAG,KAAK,OAAO,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,MAAM,GAAG;AACtF,YAAM,IAAI;AAAA,QACR;AAAA,QACA,aAAa,KAAK;AAAA,MACpB;AAAA,IACF;AACA,eAAW,KAAK,MAAM;AACtB,WAAO,IAAI,MAAM;AAAA,EACnB;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,oBAAoB,CAAC,GAAG,MAAM,EAAE,KAAK;AAC3C,MACE,QAAQ,qBACP,WAAW,WAAW,kBAAkB,UACvC,WAAW,KAAK,CAAC,QAAQ,UAAU,WAAW,kBAAkB,KAAK,CAAC,IACxE;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAkB,SAAkD;AAC3F,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,YAAY,iBAAiB;AAC/B,WAAO,mBAAmB,KAAmB;AAAA,EAC/C;AACA,QAAM,IAAI;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,OAA+B;AACzD,mBAAiB,OAAO,CAAC,QAAQ,YAAY,YAAY,GAAG,WAAW;AACvE,QAAM,OAAO,aAAa,OAAO,QAAQ,WAAW;AACpD,MAAI,SAAS,0BAA0B;AACrC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,eAAe,OAAO,YAAY,WAAW,MAAM,MAAM;AAC3D,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,aAAa,eAAe,OAAO,cAAc,WAAW;AAClE,MAAI,CAAC,MAAM,QAAQ,UAAU,KAAK,WAAW,WAAW,GAAG;AACzD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,WAAS,QAAQ,GAAG,QAAQ,WAAW,QAAQ,SAAS;AACtD,yBAAqB,WAAW,KAAK,GAAG,wBAAwB,KAAK,GAAG;AAAA,EAC1E;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,OAAkB,MAAoB;AAClE,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI,sBAAsB,uCAAuC,GAAG,IAAI,oBAAoB;AAAA,EACpG;AACA,QAAME,UAAS;AACf,mBAAiBA,SAAQ,CAAC,QAAQ,OAAO,aAAa,GAAG,IAAI;AAC7D,eAAaA,SAAQ,QAAQ,IAAI;AACjC,eAAaA,SAAQ,OAAO,IAAI;AAChC,QAAM,cAAc,eAAeA,SAAQ,eAAe,IAAI;AAC9D,MAAI,CAAC,MAAM,QAAQ,WAAW,GAAG;AAC/B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACA,WAAS,QAAQ,GAAG,QAAQ,YAAY,QAAQ,SAAS;AACvD,uBAAmB,YAAY,KAAK,GAAG,GAAG,IAAI,gBAAgB,KAAK,GAAG;AAAA,EACxE;AACF;AAEA,SAAS,mBAAmB,OAAkB,MAAoB;AAChE,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI,sBAAsB,uCAAuC,GAAG,IAAI,oBAAoB;AAAA,EACpG;AACA,QAAMA,UAAS;AACf,mBAAiBA,SAAQ,CAAC,SAAS,OAAO,GAAG,IAAI;AACjD,QAAM,QAAQ,eAAeA,SAAQ,SAAS,IAAI;AAClD,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAC1E,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACA,iBAAeA,SAAQ,SAAS,IAAI;AACtC;AAEA,SAAS,iBAAiBA,SAAoB,SAA4B,MAAoB;AAC5F,QAAM,aAAa,IAAI,IAAI,OAAO;AAClC,aAAW,OAAO,OAAO,KAAKA,OAAM,GAAG;AACrC,QAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,IAAI,sBAAsB,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,eAAeA,SAAoB,KAAa,MAAyB;AAChF,MAAI,CAAC,OAAOA,SAAQ,GAAG,GAAG;AACxB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI,IAAI,GAAG;AAAA,IAChB;AAAA,EACF;AACA,SAAOA,QAAO,GAAG;AACnB;AAEA,SAAS,aAAaA,SAAoB,KAAa,MAAsB;AAC3E,QAAM,QAAQ,eAAeA,SAAQ,KAAK,IAAI;AAC9C,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI,IAAI,GAAG;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,aAAa,WAAmB,SAA0B;AACjE,MAAI,cAAc,SAAS;AACzB,WAAO;AAAA,EACT;AACA,SAAO,UAAU,SAAS,GAAG,KAAK,QAAQ,WAAW,SAAS;AAChE;AAEA,SAAS,eAAe,WAAmC,SAA0C;AACnG,MAAI,cAAc,QAAW;AAC3B,WAAO,YAAY;AAAA,EACrB;AACA,MAAI,YAAY,QAAW;AACzB,WAAO,OAAO,KAAK,SAAS,EAAE,WAAW;AAAA,EAC3C;AACA,MAAI,UAAU,SAAS,4BAA4B,QAAQ,SAAS,0BAA0B;AAC5F,WAAO;AAAA,EACT;AACA,QAAM,sBAAsB,MAAM,QAAQ,UAAU,UAAU,IAAI,UAAU,aAAa,CAAC;AAC1F,QAAM,oBAAoB,MAAM,QAAQ,QAAQ,UAAU,IAAI,QAAQ,aAAa,CAAC;AACpF,SAAO,kBAAkB;AAAA,IAAM,CAAC,cAC9B,oBAAoB,KAAK,CAAC,cAAc,gBAAgB,SAAS,MAAM,gBAAgB,SAAS,CAAC;AAAA,EACnG;AACF;AAEA,SAAS,OAAOA,SAAoB,KAAsB;AACxD,SAAOD,cAAaC,SAAQ,GAAG;AACjC;;;AC3eA,qBAAwB;;;ACAxB;;;;;;ACAO,IAAM,QAAQ,IAAI,WAAW,CAAC;AAW/B,SAAU,OAAQ,IAAgB,IAAc;AACpD,MAAI,OAAO,IAAI;AAAE,WAAO;EAAK;AAC7B,MAAI,GAAG,eAAe,GAAG,YAAY;AACnC,WAAO;EACT;AAEA,WAAS,KAAK,GAAG,KAAK,GAAG,YAAY,MAAM;AACzC,QAAI,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG;AACrB,aAAO;IACT;EACF;AAEA,SAAO;AACT;AAEM,SAAU,OAAQ,GAA6C;AACnE,MAAI,aAAa,cAAc,EAAE,YAAY,SAAS,cAAc;AAAE,WAAO;EAAE;AAC/E,MAAI,aAAa,aAAa;AAAE,WAAO,IAAI,WAAW,CAAC;EAAE;AACzD,MAAI,YAAY,OAAO,CAAC,GAAG;AACzB,WAAO,IAAI,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU;EAC5D;AACA,QAAM,IAAI,MAAM,mCAAmC;AACrD;AAMM,SAAU,WAAY,KAAW;AACrC,SAAO,IAAI,YAAW,EAAG,OAAO,GAAG;AACrC;AAEM,SAAU,SAAU,GAAa;AACrC,SAAO,IAAI,YAAW,EAAG,OAAO,CAAC;AACnC;;;ACnCA,SAAS,KAAM,UAAUC,OAAI;AAC3B,MAAI,SAAS,UAAU,KAAK;AAAE,UAAM,IAAI,UAAU,mBAAmB;EAAE;AACvE,MAAI,WAAW,IAAI,WAAW,GAAG;AACjC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,aAAS,CAAC,IAAI;EAChB;AACA,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,IAAI,SAAS,OAAO,CAAC;AACzB,QAAI,KAAK,EAAE,WAAW,CAAC;AACvB,QAAI,SAAS,EAAE,MAAM,KAAK;AAAE,YAAM,IAAI,UAAU,IAAI,eAAe;IAAE;AACrE,aAAS,EAAE,IAAI;EACjB;AACA,MAAI,OAAO,SAAS;AACpB,MAAI,SAAS,SAAS,OAAO,CAAC;AAC9B,MAAI,SAAS,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG;AAC1C,MAAI,UAAU,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI;AAI3C,WAASC,QAAQ,QAAM;AAErB,QAAI,kBAAkB;AAAY;aAAW,YAAY,OAAO,MAAM,GAAG;AACvE,eAAS,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,OAAO,UAAU;IAC7E,WAAW,MAAM,QAAQ,MAAM,GAAG;AAChC,eAAS,WAAW,KAAK,MAAM;IACjC;AACA,QAAI,EAAE,kBAAkB,aAAa;AAAE,YAAM,IAAI,UAAU,qBAAqB;IAAE;AAClF,QAAI,OAAO,WAAW,GAAG;AAAE,aAAO;IAAG;AAErC,QAAI,SAAS;AACb,QAAIC,UAAS;AACb,QAAI,SAAS;AACb,QAAI,OAAO,OAAO;AAClB,WAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,GAAG;AAC9C;AACA;IACF;AAEA,QAAI,QAAS,OAAO,UAAU,UAAU,MAAO;AAC/C,QAAI,MAAM,IAAI,WAAW,IAAI;AAE7B,WAAO,WAAW,MAAM;AACtB,UAAI,QAAQ,OAAO,MAAM;AAEzB,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,YAAY,QAAQ,IAAK,OAAOC,MAAK;AAChF,iBAAU,MAAM,IAAI,GAAG,MAAO;AAC9B,YAAI,GAAG,IAAK,QAAQ,SAAU;AAC9B,gBAAS,QAAQ,SAAU;MAC7B;AACA,UAAI,UAAU,GAAG;AAAE,cAAM,IAAI,MAAM,gBAAgB;MAAE;AACrD,MAAAD,UAASC;AACT;IACF;AAEA,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,IAAI,GAAG,MAAM,GAAG;AACrC;IACF;AAEA,QAAI,MAAM,OAAO,OAAO,MAAM;AAC9B,WAAO,MAAM,MAAM,EAAE,KAAK;AAAE,aAAO,SAAS,OAAO,IAAI,GAAG,CAAC;IAAG;AAC9D,WAAO;EACT;AAIA,WAAS,aAAc,QAAM;AAC3B,QAAI,OAAO,WAAW,UAAU;AAAE,YAAM,IAAI,UAAU,iBAAiB;IAAE;AACzE,QAAI,OAAO,WAAW,GAAG;AAAE,aAAO,IAAI,WAAU;IAAG;AACnD,QAAI,MAAM;AAEV,QAAI,OAAO,GAAG,MAAM,KAAK;AAAE;IAAO;AAElC,QAAI,SAAS;AACb,QAAIA,UAAS;AACb,WAAO,OAAO,GAAG,MAAM,QAAQ;AAC7B;AACA;IACF;AAEA,QAAI,QAAU,OAAO,SAAS,OAAO,SAAU,MAAO;AACtD,QAAI,OAAO,IAAI,WAAW,IAAI;AAE9B,WAAO,OAAO,GAAG,GAAG;AAElB,UAAI,QAAQ,SAAS,OAAO,WAAW,GAAG,CAAC;AAE3C,UAAI,UAAU,KAAK;AAAE;MAAO;AAC5B,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,YAAY,QAAQ,IAAK,OAAOC,MAAK;AAChF,iBAAU,OAAO,KAAK,GAAG,MAAO;AAChC,aAAK,GAAG,IAAK,QAAQ,QAAS;AAC9B,gBAAS,QAAQ,QAAS;MAC5B;AACA,UAAI,UAAU,GAAG;AAAE,cAAM,IAAI,MAAM,gBAAgB;MAAE;AACrD,MAAAD,UAASC;AACT;IACF;AAEA,QAAI,OAAO,GAAG,MAAM,KAAK;AAAE;IAAO;AAElC,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,KAAK,GAAG,MAAM,GAAG;AACtC;IACF;AACA,QAAI,MAAM,IAAI,WAAW,UAAU,OAAO,IAAI;AAC9C,QAAIE,KAAI;AACR,WAAO,QAAQ,MAAM;AACnB,UAAIA,IAAG,IAAI,KAAK,KAAK;IACvB;AACA,WAAO;EACT;AAIA,WAASC,QAAQ,QAAM;AACrB,QAAI,SAAS,aAAa,MAAM;AAChC,QAAI,QAAQ;AAAE,aAAO;IAAO;AAC5B,UAAM,IAAI,MAAM,OAAOL,KAAI,YAAY;EACzC;AACA,SAAO;IACL,QAAQC;IACR;IACA,QAAQI;;AAEZ;AACA,IAAI,MAAM;AAEV,IAAI,kCAAkC;AAEtC,IAAA,iBAAe;;;ACjIf,IAAM,UAAN,MAAa;EAKX,YAAaC,OAAY,QAAgB,YAAoB;AAJpD;AACA;AACA;AAGP,SAAK,OAAOA;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;EACpB;EAEA,OAAQ,OAAiB;AACvB,QAAI,iBAAiB,YAAY;AAC/B,aAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAW,KAAK,CAAC;IAChD,OAAO;AACL,YAAM,MAAM,mCAAmC;IACjD;EACF;;AAQF,IAAM,UAAN,MAAa;EAMX,YAAaA,OAAY,QAAgB,YAAoB;AALpD;AACA;AACA;AACQ;AAGf,SAAK,OAAOA;AACZ,SAAK,SAAS;AACd,UAAM,kBAAkB,OAAO,YAAY,CAAC;AAE5C,QAAI,oBAAoB,QAAW;AACjC,YAAM,IAAI,MAAM,0BAA0B;IAC5C;AACA,SAAK,kBAAkB;AACvB,SAAK,aAAa;EACpB;EAEA,OAAQ,MAAY;AAClB,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,KAAK,YAAY,CAAC,MAAM,KAAK,iBAAiB;AAChD,cAAM,MAAM,qCAAqC,KAAK,UAAU,IAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE;MACjJ;AACA,aAAO,KAAK,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM,CAAC;IACvD,OAAO;AACL,YAAM,MAAM,mCAAmC;IACjD;EACF;EAEA,GAAgC,SAAmE;AACjG,WAAO,GAAG,MAAM,OAAO;EACzB;;AAKF,IAAM,kBAAN,MAAqB;EAGnB,YAAa,UAA0B;AAF9B;AAGP,SAAK,WAAW;EAClB;EAEA,GAAiC,SAAmE;AAClG,WAAO,GAAG,MAAM,OAAO;EACzB;EAEA,OAAQ,OAAa;AACnB,UAAM,SAAS,MAAM,CAAC;AACtB,UAAM,UAAU,KAAK,SAAS,MAAM;AACpC,QAAI,WAAW,MAAM;AACnB,aAAO,QAAQ,OAAO,KAAK;IAC7B,OAAO;AACL,YAAM,WAAW,qCAAqC,KAAK,UAAU,KAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB;IACtJ;EACF;;AAGI,SAAU,GAAyC,MAA+C,OAA8C;AACpJ,SAAO,IAAI,gBAAgB;IACzB,GAAI,KAAK,YAAY,EAAE,CAAE,KAA2B,MAAM,GAAG,KAAI;IACjE,GAAI,MAAM,YAAY,EAAE,CAAE,MAA4B,MAAM,GAAG,MAAK;GAClD;AACtB;AAEM,IAAO,QAAP,MAAY;EAQhB,YAAaA,OAAY,QAAgB,YAAsB,YAAoB;AAP1E;AACA;AACA;AACA;AACA;AACA;AAGP,SAAK,OAAOA;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,UAAU,IAAI,QAAQA,OAAM,QAAQ,UAAU;AACnD,SAAK,UAAU,IAAI,QAAQA,OAAM,QAAQ,UAAU;EACrD;EAEA,OAAQ,OAAiB;AACvB,WAAO,KAAK,QAAQ,OAAO,KAAK;EAClC;EAEA,OAAQ,OAAa;AACnB,WAAO,KAAK,QAAQ,OAAO,KAAK;EAClC;;AAGI,SAAU,KAAmD,EAAE,MAAAA,OAAM,QAAQ,QAAAC,SAAQ,QAAAC,QAAM,GAAsE;AACrK,SAAO,IAAI,MAAMF,OAAM,QAAQC,SAAQC,OAAM;AAC/C;AAEM,SAAU,MAAoD,EAAE,MAAAF,OAAM,QAAQ,UAAAG,UAAQ,GAAoD;AAC9I,QAAM,EAAE,QAAAF,SAAQ,QAAAC,QAAM,IAAK,eAAMC,WAAUH,KAAI;AAC/C,SAAO,KAAK;IACV;IACA,MAAAA;IACA,QAAAC;IACA,QAAQ,CAAC,SAA6B,OAAOC,QAAO,IAAI,CAAC;GAC1D;AACH;AAEA,SAAS,OAAQ,QAAgB,aAAqC,aAAqBF,OAAY;AAErG,MAAI,MAAM,OAAO;AACjB,SAAO,OAAO,MAAM,CAAC,MAAM,KAAK;AAC9B,MAAE;EACJ;AAGA,QAAM,MAAM,IAAI,WAAY,MAAM,cAAc,IAAK,CAAC;AAGtD,MAAI,OAAO;AACX,MAAI,SAAS;AACb,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAE5B,UAAM,QAAQ,YAAY,OAAO,CAAC,CAAC;AACnC,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI,YAAY,OAAOA,KAAI,YAAY;IAC/C;AAGA,aAAU,UAAU,cAAe;AACnC,YAAQ;AAGR,QAAI,QAAQ,GAAG;AACb,cAAQ;AACR,UAAI,SAAS,IAAI,MAAQ,UAAU;IACrC;EACF;AAGA,MAAI,QAAQ,gBAAgB,MAAQ,UAAW,IAAI,UAAY,GAAG;AAChE,UAAM,IAAI,YAAY,wBAAwB;EAChD;AAEA,SAAO;AACT;AAEA,SAAS,OAAQ,MAAkBG,WAAkB,aAAmB;AACtE,QAAM,MAAMA,UAASA,UAAS,SAAS,CAAC,MAAM;AAC9C,QAAM,QAAQ,KAAK,eAAe;AAClC,MAAI,MAAM;AAEV,MAAI,OAAO;AACX,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAEpC,aAAU,UAAU,IAAK,KAAK,CAAC;AAC/B,YAAQ;AAGR,WAAO,OAAO,aAAa;AACzB,cAAQ;AACR,aAAOA,UAAS,OAAQ,UAAU,IAAK;IACzC;EACF;AAGA,MAAI,SAAS,GAAG;AACd,WAAOA,UAAS,OAAQ,UAAW,cAAc,IAAM;EACzD;AAGA,MAAI,KAAK;AACP,YAAS,IAAI,SAAS,cAAe,OAAO,GAAG;AAC7C,aAAO;IACT;EACF;AAEA,SAAO;AACT;AAEA,SAAS,kBAAmBA,WAAgB;AAE1C,QAAM,cAAsC,CAAA;AAC5C,WAAS,IAAI,GAAG,IAAIA,UAAS,QAAQ,EAAE,GAAG;AACxC,gBAAYA,UAAS,CAAC,CAAC,IAAI;EAC7B;AACA,SAAO;AACT;AAKM,SAAU,QAAsD,EAAE,MAAAH,OAAM,QAAQ,aAAa,UAAAG,UAAQ,GAAyE;AAClL,QAAM,cAAc,kBAAkBA,SAAQ;AAC9C,SAAO,KAAK;IACV;IACA,MAAAH;IACA,OAAQ,OAAiB;AACvB,aAAO,OAAO,OAAOG,WAAU,WAAW;IAC5C;IACA,OAAQ,OAAa;AACnB,aAAO,OAAO,OAAO,aAAa,aAAaH,KAAI;IACrD;GACD;AACH;;;AH9OO,IAAM,SAAS,MAAM;EAC1B,QAAQ;EACR,MAAM;EACN,UAAU;CACX;;;AIND;;;;;AAEO,IAAM,SAAS,QAAQ;EAC5B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,cAAc,QAAQ;EACjC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;;;ACdD;;;;AAEO,IAAM,QAAQ,QAAQ;EAC3B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;;;ACPD;;;;AAEA,IAAM,WAAW,MAAM,KAAK,orEAAwe;AACpgB,IAAM,uBAAkC,SAAS,OAAiB,CAAC,GAAG,GAAG,MAAK;AAAG,IAAE,CAAC,IAAI;AAAG,SAAO;AAAE,GAAI,CAAA,CAAG;AAC3G,IAAM,uBAAkC,SAAS,OAAiB,CAAC,GAAG,GAAG,MAAK;AAC5E,QAAM,YAAY,EAAE,YAAY,CAAC;AACjC,MAAI,aAAa,MAAM;AACrB,UAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;EAC3C;AACA,IAAE,SAAS,IAAI;AACf,SAAO;AACT,GAAI,CAAA,CAAG;AAEP,SAASI,QAAQ,MAAgB;AAC/B,SAAO,KAAK,OAAO,CAAC,GAAG,MAAK;AAC1B,SAAK,qBAAqB,CAAC;AAC3B,WAAO;EACT,GAAG,EAAE;AACP;AAEA,SAASC,QAAQ,KAAW;AAC1B,QAAM,OAAO,CAAA;AACb,aAAW,QAAQ,KAAK;AACtB,UAAM,YAAY,KAAK,YAAY,CAAC;AACpC,QAAI,aAAa,MAAM;AACrB,YAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;IAC9C;AACA,UAAM,MAAM,qBAAqB,SAAS;AAC1C,QAAI,OAAO,MAAM;AACf,YAAM,IAAI,MAAM,+BAA+B,IAAI,EAAE;IACvD;AACA,SAAK,KAAK,GAAG;EACf;AACA,SAAO,IAAI,WAAW,IAAI;AAC5B;AAEO,IAAM,eAAe,KAAK;EAC/B,QAAQ;EACR,MAAM;EACN,QAAAD;EACA,QAAAC;CACD;;;ACzCD;;;;;;;;;;;;AAEO,IAAM,SAAS,QAAQ;EAC5B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,cAAc,QAAQ;EACjC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,YAAY,QAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,iBAAiB,QAAQ;EACpC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,YAAY,QAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,iBAAiB,QAAQ;EACpC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,eAAe,QAAQ;EAClC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,oBAAoB,QAAQ;EACvC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,UAAU,QAAQ;EAC7B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;;;AC/DD;;;;;AAEO,IAAM,SAAS,MAAM;EAC1B,QAAQ;EACR,MAAM;EACN,UAAU;CACX;AAEM,IAAM,cAAc,MAAM;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;CACX;;;ACZD;;;;;AAEO,IAAM,YAAY,MAAM;EAC7B,MAAM;EACN,QAAQ;EACR,UAAU;CACX;AAEM,IAAM,eAAe,MAAM;EAChC,MAAM;EACN,QAAQ;EACR,UAAU;CACX;;;ACZD;;;;;;;AAEO,IAAM,SAAS,QAAQ;EAC5B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,YAAY,QAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,YAAY,QAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,eAAe,QAAQ;EAClC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;;;AC5BD;;;;AAEO,IAAM,QAAQ,QAAQ;EAC3B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;;;ACPD;;;;AAGO,IAAM,WAAW,KAAK;EAC3B,QAAQ;EACR,MAAM;EACN,QAAQ,CAAC,QAAQ,SAAS,GAAG;EAC7B,QAAQ,CAAC,QAAQ,WAAW,GAAG;CAChC;;;ACND,IAAMC,eAAc,IAAI,YAAW;AACnC,IAAM,cAAc,IAAI,YAAW;;;ACHnC,IAAAC,oBAAA;SAAAA,mBAAA;kBAAAC;;;;ACCA,IAAI,WAAWC;AAEf,IAAI,MAAM;AAAV,IACI,OAAO;AADX,IAEI,SAAS,CAAC;AAFd,IAGI,MAAM,KAAK,IAAI,GAAG,EAAE;AAOxB,SAASA,QAAO,KAAK,KAAK,QAAM;AAC9B,QAAM,OAAO,CAAA;AACb,WAAS,UAAU;AACnB,MAAI,YAAY;AAEhB,SAAM,OAAO,KAAK;AAChB,QAAI,QAAQ,IAAK,MAAM,MAAQ;AAC/B,WAAO;EACT;AACA,SAAM,MAAM,QAAQ;AAClB,QAAI,QAAQ,IAAK,MAAM,MAAQ;AAC/B,aAAS;EACX;AACA,MAAI,MAAM,IAAI,MAAM;AAGpB,EAAAA,QAAO,QAAQ,SAAS,YAAY;AAEpC,SAAO;AACT;AAEA,IAAIC,UAAS;AAEb,IAAI,QAAQ;AAAZ,IACI,SAAS;AAMb,SAAS,KAAK,KAAK,QAAM;AACvB,MAAI,MAAS,GACT,SAAS,UAAU,GACnB,QAAS,GACT,UAAU,QACV,GACA,IAAI,IAAI;AAEZ,KAAG;AACD,QAAI,WAAW,GAAG;AAEhB,WAAK,QAAQ;AACb,YAAM,IAAI,WAAW,yBAAyB;IAChD;AACA,QAAI,IAAI,SAAS;AACjB,WAAO,QAAQ,MACV,IAAI,WAAW,SACf,IAAI,UAAU,KAAK,IAAI,GAAG,KAAK;AACpC,aAAS;EACX,SAAS,KAAK;AAGd,OAAK,QAAQ,UAAU;AAEvB,SAAO;AACT;AAEA,IAAI,KAAK,KAAK,IAAI,GAAI,CAAC;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AAEvB,IAAI,SAAS,SAAgC,OAAK;AAChD,SACE,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACA;AAEjB;AAEA,IAAI,SAAS;EACT,QAAQ;EACR,QAAQA;EACR,gBAAgB;;AAGpB,IAAI,eAAe;AAEnB,IAAA,iBAAe;;;ACrGT,SAAUC,QAAQ,MAAkB,SAAS,GAAC;AAClD,QAAMC,QAAO,eAAO,OAAO,MAAM,MAAM;AACvC,SAAO,CAACA,OAAM,eAAO,OAAO,KAAK;AACnC;AAEM,SAAU,SAAU,KAAa,QAAoB,SAAS,GAAC;AACnE,iBAAO,OAAO,KAAK,QAAQ,MAAM;AACjC,SAAO;AACT;AAEM,SAAU,eAAgB,KAAW;AACzC,SAAO,eAAO,eAAe,GAAG;AAClC;;;ACPM,SAAU,OAA8BC,OAAYC,SAAkB;AAC1E,QAAM,OAAOA,QAAO;AACpB,QAAM,aAAoB,eAAeD,KAAI;AAC7C,QAAM,eAAe,aAAoB,eAAe,IAAI;AAE5D,QAAM,QAAQ,IAAI,WAAW,eAAe,IAAI;AAChD,EAAO,SAASA,OAAM,OAAO,CAAC;AAC9B,EAAO,SAAS,MAAM,OAAO,UAAU;AACvC,QAAM,IAAIC,SAAQ,YAAY;AAE9B,SAAO,IAAI,OAAOD,OAAM,MAAMC,SAAQ,KAAK;AAC7C;AAKM,SAAUC,QAAQ,WAAqB;AAC3C,QAAM,QAAQ,OAAO,SAAS;AAC9B,QAAM,CAACF,OAAM,UAAU,IAAWE,QAAO,KAAK;AAC9C,QAAM,CAAC,MAAM,YAAY,IAAWA,QAAO,MAAM,SAAS,UAAU,CAAC;AACrE,QAAMD,UAAS,MAAM,SAAS,aAAa,YAAY;AAEvD,MAAIA,QAAO,eAAe,MAAM;AAC9B,UAAM,IAAI,MAAM,kBAAkB;EACpC;AAEA,SAAO,IAAI,OAAOD,OAAM,MAAMC,SAAQ,KAAK;AAC7C;AAEM,SAAUE,QAAQ,GAAoB,GAAU;AACpD,MAAI,MAAM,GAAG;AACX,WAAO;EACT,OAAO;AACL,UAAM,OAAO;AAEb,WACE,EAAE,SAAS,KAAK,QAChB,EAAE,SAAS,KAAK,QAChB,KAAK,iBAAiB,cACtB,OAAW,EAAE,OAAO,KAAK,KAAK;EAElC;AACF;AAMM,IAAO,SAAP,MAAa;;;;EASjB,YAAaH,OAAY,MAAYC,SAAoB,OAAiB;AARjE;AACA;AACA;AACA;AAMP,SAAK,OAAOD;AACZ,SAAK,OAAO;AACZ,SAAK,SAASC;AACd,SAAK,QAAQ;EACf;;;;AHjEF,IAAM,OAAY;AAClB,IAAM,OAAO;AAEb,IAAMG,UAA4C;AAElD,SAAS,OAAQ,OAAmB,SAAuB;AACzD,MAAI,SAAS,YAAY,QAAQ,QAAQ,aAAa,MAAM,YAAY;AACtE,QAAI,QAAQ,WAAW,KAAK,QAAQ,WAAW,MAAM,YAAY;AAC/D,YAAM,IAAI,MAAM,0DAA0D,MAAM,UAAU,EAAE;IAC9F;AAEA,YAAQ,MAAM,SAAS,GAAG,QAAQ,QAAQ;EAC5C;AAEA,SAAc,OAAO,MAAMA,QAAO,KAAK,CAAC;AAC1C;AAEO,IAAMC,YAAW,EAAE,MAAM,MAAM,QAAAD,SAAQ,OAAM;;;AIrBpD;;gBAAAE;EAAA;;;;ACKA,IAAM,4BAA4B;AAqB5B,SAAUC,MAAiD,EAAE,MAAAC,OAAM,MAAAC,OAAM,QAAAC,SAAQ,iBAAiB,gBAAe,GAA0B;AAC/I,SAAO,IAAI,OAAOF,OAAMC,OAAMC,SAAQ,iBAAiB,eAAe;AACxE;AAoBM,IAAO,SAAP,MAAa;EAOjB,YAAaF,OAAYC,OAAYC,SAAkD,iBAA0B,iBAAwB;AANhI;AACA;AACA;AACA;AACA;AAGP,SAAK,OAAOF;AACZ,SAAK,OAAOC;AACZ,SAAK,SAASC;AACd,SAAK,kBAAkB,mBAAmB;AAC1C,SAAK,kBAAkB;EACzB;EAEA,OAAQ,OAAmB,SAAuB;AAChD,QAAI,SAAS,YAAY,MAAM;AAC7B,UAAI,QAAQ,WAAW,KAAK,iBAAiB;AAC3C,cAAM,IAAI,MAAM,6DAA6D,KAAK,eAAe,EAAE;MACrG;AAEA,UAAI,KAAK,mBAAmB,QAAQ,QAAQ,WAAW,KAAK,iBAAiB;AAC3E,cAAM,IAAI,MAAM,0DAA0D,KAAK,eAAe,EAAE;MAClG;IACF;AAEA,QAAI,iBAAiB,YAAY;AAC/B,YAAM,SAAS,KAAK,OAAO,KAAK;AAEhC,UAAI,kBAAkB,YAAY;AAChC,eAAO,aAAa,QAAQ,KAAK,MAAM,SAAS,QAAQ;MAC1D;AAEA,aAAO,OAAO,KAAK,CAAAC,YAAU,aAAaA,SAAQ,KAAK,MAAM,SAAS,QAAQ,CAAC;IACjF,OAAO;AACL,YAAM,MAAM,mCAAmC;IAEjD;EACF;;AAOF,SAAS,aAAoCA,SAAoBF,OAAY,UAAiB;AAC5F,MAAI,YAAY,QAAQ,aAAaE,QAAO,YAAY;AACtD,QAAI,WAAWA,QAAO,YAAY;AAChC,YAAM,IAAI,MAAM,0DAA0DA,QAAO,UAAU,EAAE;IAC/F;AAEA,IAAAA,UAASA,QAAO,SAAS,GAAG,QAAQ;EACtC;AAEA,SAAc,OAAOF,OAAME,OAAM;AACnC;;;ADnGA,SAAS,IAAKC,OAAyB;AACrC,SAAO,OAAM,SAAQ,IAAI,WAAW,MAAM,OAAO,OAAO,OAAOA,OAAM,IAAI,CAAC;AAC5E;AAEO,IAAMC,UAASC,MAAK;EACzB,MAAM;EACN,MAAM;EACN,QAAQ,IAAI,SAAS;CACtB;AAEM,IAAM,SAASA,MAAK;EACzB,MAAM;EACN,MAAM;EACN,QAAQ,IAAI,SAAS;CACtB;;;AEPK,SAAU,OAA0F,MAASC,OAAmC;AACpJ,QAAM,EAAE,OAAO,QAAO,IAAK;AAC3B,UAAQ,SAAS;IACf,KAAK;AACH,aAAO,WACL,OACA,UAAU,IAAI,GACdA,SAAqC,UAAU,OAAO;IAE1D;AACE,aAAO,WACL,OACA,UAAU,IAAI,GACbA,SAAQ,OAAO,OAAwC;EAE9D;AACF;AAYA,IAAM,QAAQ,oBAAI,QAAO;AAEzB,SAAS,UAAW,KAAoB;AACtC,QAAMC,aAAY,MAAM,IAAI,GAAG;AAC/B,MAAIA,cAAa,MAAM;AACrB,UAAMA,aAAY,oBAAI,IAAG;AACzB,UAAM,IAAI,KAAKA,UAAS;AACxB,WAAOA;EACT;AACA,SAAOA;AACT;AAjDA;AAmDM,IAAO,MAAP,MAAO,KAAG;;;;;;EAYd,YAAa,SAAkBC,OAAc,WAAqC,OAAiB;AAX1F;AACA;AACA;AACA;AACA;AAmHA,wBAAC,IAAsB;AA3G9B,SAAK,OAAOA;AACZ,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,QAAQ;AAIb,SAAK,GAAG,IAAI;EACd;;;;;;;EAQA,IAAI,QAAK;AACP,WAAO;EACT;;EAGA,IAAI,aAAU;AACZ,WAAO,KAAK,MAAM;EACpB;;EAGA,IAAI,aAAU;AACZ,WAAO,KAAK,MAAM;EACpB;EAEA,OAAI;AACF,YAAQ,KAAK,SAAS;MACpB,KAAK,GAAG;AACN,eAAO;MACT;MACA,KAAK,GAAG;AACN,cAAM,EAAE,MAAAA,OAAM,UAAS,IAAK;AAE5B,YAAIA,UAAS,aAAa;AACxB,gBAAM,IAAI,MAAM,0CAA0C;QAC5D;AAGA,YAAI,UAAU,SAAS,cAAc;AACnC,gBAAM,IAAI,MAAM,oDAAoD;QACtE;AAEA,eACE,KAAI,SACF,SAA6C;MAGnD;MACA,SAAS;AACP,cAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C;MAE3F;IACF;EACF;EAEA,OAAI;AACF,YAAQ,KAAK,SAAS;MACpB,KAAK,GAAG;AACN,cAAM,EAAE,MAAAA,OAAM,QAAAC,QAAM,IAAK,KAAK;AAC9B,cAAM,YAAmB,OAAOD,OAAMC,OAAM;AAC5C,eACE,KAAI,SAAS,KAAK,MAAM,SAAS;MAErC;MACA,KAAK,GAAG;AACN,eAAO;MACT;MACA,SAAS;AACP,cAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C;MAE3F;IACF;EACF;EAEA,OAAQ,OAAc;AACpB,WAAO,KAAI,OAAO,MAAM,KAAK;EAC/B;EAEA,OAAO,OAAsF,MAA4C,OAAc;AACrJ,UAAM,UAAU;AAChB,WACE,WAAW,QACX,KAAK,SAAS,QAAQ,QACtB,KAAK,YAAY,QAAQ,WAClBC,QAAO,KAAK,WAAW,QAAQ,SAAS;EAEnD;EAEA,SAAUC,OAAmC;AAC3C,WAAO,OAAO,MAAMA,KAAI;EAC1B;EAEA,SAAM;AACJ,WAAO,EAAE,KAAK,OAAO,IAAI,EAAC;EAC5B;EAEA,OAAI;AACF,WAAO;EACT;;EAMA,EAJU,YAAO,aAIhB,uBAAO,IAAI,4BAA4B,EAAC,IAAC;AACxC,WAAO,OAAO,KAAK,SAAQ,CAAE;EAC/B;;;;;;;;;;;EAYA,OAAO,MAAwF,OAA+C;AAC5I,QAAI,SAAS,MAAM;AACjB,aAAO;IACT;AAEA,UAAM,QAAQ;AACd,QAAI,iBAAiB,MAAK;AAExB,aAAO;IACT,WAAY,MAAM,GAAG,KAAK,QAAQ,MAAM,GAAG,MAAM,MAAM,SAAU,MAAM,UAAU,OAAO;AAMtF,YAAM,EAAE,SAAS,MAAAH,OAAM,WAAW,MAAK,IAAK;AAC5C,aAAO,IAAI,KACT,SACAA,OACA,WACA,SAAS,UAAU,SAASA,OAAM,UAAU,KAAK,CAAC;IAEtD,WAAW,MAAM,SAAS,MAAM,MAAM;AAIpC,YAAM,EAAE,SAAS,WAAW,MAAAA,MAAI,IAAK;AACrC,YAAMC,UAAgBG,QAAO,SAAS;AACtC,aAAO,KAAI,OAAO,SAASJ,OAAMC,OAAM;IACzC,OAAO;AAGL,aAAO;IACT;EACF;;;;;;EAOA,OAAO,OAAsF,SAAkBD,OAAcC,SAAgC;AAC3J,QAAI,OAAOD,UAAS,UAAU;AAC5B,YAAM,IAAI,MAAM,uCAAuC;IACzD;AAEA,QAAI,EAAEC,QAAO,iBAAiB,aAAa;AACzC,YAAM,IAAI,MAAM,gBAAgB;IAClC;AAEA,YAAQ,SAAS;MACf,KAAK,GAAG;AACN,YAAID,UAAS,aAAa;AACxB,gBAAM,IAAI,MACR,wCAAwC,WAAW,kBAAkB;QAEzE,OAAO;AACL,iBAAO,IAAI,KAAI,SAASA,OAAMC,SAAQA,QAAO,KAAK;QACpD;MACF;MACA,KAAK,GAAG;AACN,cAAM,QAAQ,UAAU,SAASD,OAAMC,QAAO,KAAK;AACnD,eAAO,IAAI,KAAI,SAASD,OAAMC,SAAQ,KAAK;MAC7C;MACA,SAAS;AACP,cAAM,IAAI,MAAM,iBAAiB;MACnC;IACF;EACF;;;;EAKA,OAAO,SAAuBA,SAAgD;AAC5E,WAAO,KAAI,OAAO,GAAG,aAAaA,OAAM;EAC1C;;;;;;;EAQA,OAAO,SAAyDD,OAAYC,SAAgC;AAC1G,WAAO,KAAI,OAAO,GAAGD,OAAMC,OAAM;EACnC;;;;;;;;EASA,OAAO,OAAoF,OAAuD;AAChJ,UAAM,CAAC,KAAK,SAAS,IAAI,KAAI,YAAY,KAAK;AAC9C,QAAI,UAAU,WAAW,GAAG;AAC1B,YAAM,IAAI,MAAM,kBAAkB;IACpC;AACA,WAAO;EACT;;;;;;;;;;EAWA,OAAO,YAA2E,OAAyC;AACzH,UAAM,QAAQ,KAAI,aAAa,KAAK;AACpC,UAAM,aAAa,MAAM,OAAO,MAAM;AACtC,UAAM,iBAAiB,OACrB,MAAM,SAAS,YAAY,aAAa,MAAM,aAAa,CAAC;AAE9D,QAAI,eAAe,eAAe,MAAM,eAAe;AACrD,YAAM,IAAI,MAAM,kBAAkB;IACpC;AACA,UAAM,cAAc,eAAe,SACjC,MAAM,gBAAgB,MAAM,UAAU;AAExC,UAAMA,UAAS,IAAW,OACxB,MAAM,eACN,MAAM,YACN,aACA,cAAc;AAEhB,UAAM,MACJ,MAAM,YAAY,IACd,KAAI,SAASA,OAA0C,IACvD,KAAI,SAAS,MAAM,OAAOA,OAAM;AACtC,WAAO,CAAC,KAAwB,MAAM,SAAS,MAAM,IAAI,CAAC;EAC5D;;;;;;;;;;EAWA,OAAO,aAA4E,cAAgD;AACjI,QAAI,SAAS;AACb,UAAM,OAAO,MAAa;AACxB,YAAM,CAAC,GAAGI,OAAM,IAAWD,QAAO,aAAa,SAAS,MAAM,CAAC;AAC/D,gBAAUC;AACV,aAAO;IACT;AAEA,QAAI,UAAU,KAAI;AAClB,QAAI,QAAQ;AACZ,QAAI,YAAsB,IAAI;AAE5B,gBAAU;AACV,eAAS;IACX,OAAO;AACL,cAAQ,KAAI;IACd;AAEA,QAAI,YAAY,KAAK,YAAY,GAAG;AAClC,YAAM,IAAI,WAAW,uBAAuB,OAAO,EAAE;IACvD;AAEA,UAAM,aAAa;AACnB,UAAM,gBAAgB,KAAI;AAC1B,UAAM,aAAa,KAAI;AACvB,UAAM,OAAO,SAAS;AACtB,UAAM,gBAAgB,OAAO;AAE7B,WAAO,EAAE,SAAS,OAAO,eAAe,YAAY,eAAe,KAAI;EACzE;;;;;;;EAQA,OAAO,MAA0G,QAAkEF,OAAmC;AACpN,UAAM,CAAC,QAAQ,KAAK,IAAI,gBAAgB,QAAQA,KAAI;AAEpD,UAAM,MAAM,KAAI,OAAO,KAAK;AAE5B,QAAI,IAAI,YAAY,KAAK,OAAO,CAAC,MAAM,KAAK;AAC1C,YAAM,MAAM,wDAAwD;IACtE;AAGA,cAAU,GAAG,EAAE,IAAI,QAAQ,MAAM;AAEjC,WAAO;EACT;;AAGF,SAAS,gBAAqH,QAAkEA,OAAmC;AACjO,UAAQ,OAAO,CAAC,GAAG;;IAEjB,KAAK,KAAK;AACR,YAAM,UAAUA,SAAQ;AACxB,aAAO;QACL,UAAU;QACV,QAAQ,OAAO,GAAG,UAAU,MAAM,GAAG,MAAM,EAAE;;IAEjD;IACA,KAAK,UAAU,QAAQ;AACrB,YAAM,UAAUA,SAAQ;AACxB,aAAO,CAAC,UAAU,QAAkB,QAAQ,OAAO,MAAM,CAAC;IAC5D;IACA,KAAK,OAAO,QAAQ;AAClB,YAAM,UAAUA,SAAQ;AACxB,aAAO,CAAC,OAAO,QAAkB,QAAQ,OAAO,MAAM,CAAC;IACzD;IACA,KAAK,OAAO,QAAQ;AAClB,YAAM,UAAUA,SAAQ;AACxB,aAAO,CAAC,OAAO,QAAkB,QAAQ,OAAO,MAAM,CAAC;IACzD;IACA,SAAS;AACP,UAAIA,SAAQ,MAAM;AAChB,cAAM,MACJ,yFAAyF;MAE7F;AACA,aAAO,CAAC,OAAO,CAAC,GAAaA,MAAK,OAAO,MAAM,CAAC;IAClD;EACF;AACF;AAEA,SAAS,WAAY,OAAmBG,QAA4BH,OAA+B;AACjG,QAAM,EAAE,OAAM,IAAKA;AACnB,MAAI,WAAW,UAAU,QAAQ;AAC/B,UAAM,MAAM,8BAA8BA,MAAK,IAAI,WAAW;EAChE;AAEA,QAAM,MAAMG,OAAM,IAAI,MAAM;AAC5B,MAAI,OAAO,MAAM;AACf,UAAMC,OAAMJ,MAAK,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,IAAAG,OAAM,IAAI,QAAQC,IAAG;AACrB,WAAOA;EACT,OAAO;AACL,WAAO;EACT;AACF;AAEA,SAAS,WAAoC,OAAmBD,QAA4BH,OAAkC;AAC5H,QAAM,EAAE,OAAM,IAAKA;AACnB,QAAM,MAAMG,OAAM,IAAI,MAAM;AAC5B,MAAI,OAAO,MAAM;AACf,UAAMC,OAAMJ,MAAK,OAAO,KAAK;AAC7B,IAAAG,OAAM,IAAI,QAAQC,IAAG;AACrB,WAAOA;EACT,OAAO;AACL,WAAO;EACT;AACF;AAEA,IAAM,cAAc;AACpB,IAAM,eAAe;AAErB,SAAS,UAAW,SAAsBP,OAAc,WAAqB;AAC3E,QAAM,aAAoB,eAAe,OAAO;AAChD,QAAM,aAAa,aAAoB,eAAeA,KAAI;AAC1D,QAAM,QAAQ,IAAI,WAAW,aAAa,UAAU,UAAU;AAC9D,EAAO,SAAS,SAAS,OAAO,CAAC;AACjC,EAAO,SAASA,OAAM,OAAO,UAAU;AACvC,QAAM,IAAI,WAAW,UAAU;AAC/B,SAAO;AACT;AAEA,IAAM,YAAY,uBAAO,IAAI,kBAAkB;;;AC7bxC,IAAM,QAAQ,EAAE,GAAG,kBAAc,GAAG,eAAO,GAAG,eAAO,GAAG,gBAAQ,GAAG,gBAAQ,GAAG,gBAAQ,GAAG,gBAAQ,GAAG,gBAAQ,GAAG,gBAAQ,GAAG,qBAAY;AACtI,IAAM,SAAS,EAAE,GAAG,sBAAM,GAAGQ,kBAAQ;;;AtBf5C,IAAAC,eAAkD;;;AuBFlD,IAAAC,eAAuE;AAmBhE,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEA,IAAM,aAAa;AAcnB,SAAS,mBAAmB,SAAuB;AACjD,MAAI,CAAC,OAAO,cAAc,OAAO,KAAK,WAAW,GAAG;AAClD,UAAM,IAAI,mBAAmB,6BAA6B,OAAO,EAAE;AAAA,EACrE;AACF;AAEO,SAAS,aAAa,OAAwB;AACnD,aAAO,wBAAU,OAAO,EAAE,QAAQ,MAAM,CAAC;AAC3C;AAEO,SAAS,oBAAoB,SAAmC;AACrE,MAAI,CAAC,aAAa,OAAO,GAAG;AAC1B,UAAM,IAAI,mBAAmB,wBAAwB,OAAO,EAAE;AAAA,EAChE;AACA,aAAO,yBAAW,OAAO;AAC3B;AA6BO,SAAS,YAAY,KAAiC;AAC3D,QAAM,QAAQ,IAAI,MAAM,UAAU;AAClC,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,UAAU,OAAO,MAAM,CAAC,CAAC;AAC/B,qBAAmB,OAAO;AAE1B,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,WAAW;AAAA,IACX;AAAA,IACA,SAAS,oBAAoB,MAAM,CAAC,CAAC;AAAA,EACvC;AACF;;;AvB/EO,IAAM,gBAAgB;AACtB,IAAM,uBAAuB;AAC7B,IAAM,8BACX;AAEK,IAAM,8BAA8B;AACpC,IAAM,6BACX;AA0GF,IAAM,cAA0D;AAAA,EAC9D,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AACF;AAEA,IAAMC,eAAc,IAAI,YAAY;AACpC,IAAM,kBAAkB;AACxB,IAAM,eAAe;AACrB,IAAMC,gBACH,OAEE,UACF,OAAO,UAAU,eAAe,KAAK;AAAA,EACpC,OAAO,UAAU;AACnB;AAEK,SAAS,iCAAiC,OAAwB;AACvE,SAAO,gBAAgB,KAAK;AAC9B;AAEO,SAAS,2BAA2B,OAAsC;AAC/E,QAAM,aAAa,sBAAsB,KAAK;AAC9C,QAAM,WAAW,8BAA8B,OAAO,UAAU;AAChE,SAAO,oBAAoB,UAAU,UAAU;AACjD;AAEO,SAAS,kBAAkB,OAAwB;AACxD,SAAO,2BAA2B,KAAK,EAAE;AAC3C;AAEA,eAAsB,0BACpB,OACA,QAC6B;AAC7B,QAAM,aAAa,iBAAiB,cAAc,KAAK,GAAG,GAAG;AAC7D,QAAM,aAAa,sBAAsB,UAAU;AACnD,QAAM,WAAW,uBAAuB,YAAY,UAAU;AAC9D,QAAM,WAAW,8BAA8B,UAAU,UAAU;AACnE,MAAI,WAAW,SAAS,UAAU;AAChC,+CAA2C,QAAQ;AAAA,EACrD;AACA,gCAA8B,OAAO,KAAK;AAC1C,oBAAkB,OAAO,WAAW,oBAAoB;AACxD,8BAA4B,OAAO,WAAW,OAAO,KAAK;AAC1D,mCAAiC,UAAU,OAAO,SAAS;AAC3D,QAAM,WAAW,oBAAoB,UAAU,UAAU;AACzD,QAAM,iBAAiB;AAAA,IACrB,MAAM,OAAO,WAAW,SAAS,MAAM;AAAA,IACvC,OAAO;AAAA,EACT;AACA,QAAM,YAAY,kBAAkB;AAAA,IAClC,OAAO,OAAO;AAAA,IACd,WAAW,OAAO;AAAA,IAClB,OAAO;AAAA,EACT,CAAC;AACD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,CAAC,WAAW,OAAO,GAAG,SAAS;AAAA,IAC/B;AAAA,EACF;AACF;AAEO,SAAS,oBACd,OACA,QACiB;AACjB,SAAO,0BAA0B,OAAO,MAAM,EAAE;AAAA,IAAK,CAACC,YACpD,0BAA0BA,OAAM;AAAA,EAClC;AACF;AAEO,SAAS,0BACd,OACA,QACuB;AACvB,SAAO,0BAA0B,OAAO,MAAM,EAAE;AAAA,IAAK,CAACA,YACpD,gCAAgCA,OAAM;AAAA,EACxC;AACF;AAEO,SAAS,gCACd,OACA,QAC6B;AAC7B,SAAO,0BAA0B,OAAO,MAAM,EAAE;AAAA,IAAK,CAACA,YACpD,sCAAsCA,OAAM;AAAA,EAC9C;AACF;AAEA,eAAsB,mBACpB,OACyE;AACzE,QAAM,SAAS,0BAA0B,KAAK;AAC9C,QAAM,aAAa;AACnB,QAAM,aAAa,oBAAoB,OAAO,MAAM;AACpD,QAAM,YAAY,kBAAkB,OAAO,SAAS;AACpD,mCAAiC,YAAY,SAAS;AACtD,QAAM,WAAW,uBAAuB,YAAY,UAAU;AAC9D,QAAM,WAAW,oBAAoB,UAAU,UAAU;AACzD,kBAAgB,YAAY,UAAU,UAAU;AAChD,MAAI,CAAE,MAAM,gBAAgB,WAAW,SAAS,MAAM,GAAI;AACxD,UAAM,IAAI,2BAA2B,+BAA+B;AAAA,EACtE;AACA,SAAO,EAAE,QAAQ,QAAQ,SAAS;AACpC;AAEA,eAAsB,aACpB,OAC6D;AAC7D,QAAM,SAAS,MAAM,mBAAmB,KAAK;AAC7C,SAAO;AAAA,IACL,QAAQ,0BAA0B,OAAO,MAAM;AAAA,IAC/C,UAAU,OAAO;AAAA,EACnB;AACF;AAEA,eAAsB,mBACpB,OACmE;AACnE,QAAM,SAAS,MAAM,mBAAmB,KAAK;AAC7C,SAAO;AAAA,IACL,QAAQ,gCAAgC,OAAO,MAAM;AAAA,IACrD,UAAU,OAAO;AAAA,EACnB;AACF;AAEA,eAAsB,yBACpB,OACyE;AACzE,QAAM,SAAS,MAAM,mBAAmB,KAAK;AAC7C,SAAO;AAAA,IACL,QAAQ,sCAAsC,OAAO,MAAM;AAAA,IAC3D,UAAU,OAAO;AAAA,EACnB;AACF;AAEA,eAAsB,qBACpB,OACiD;AACjD,MAAI;AACF,UAAM,SAAS,MAAM,aAAa,KAAK;AACvC,WAAO,EAAE,IAAI,MAAM,QAAQ,OAAO,QAAQ,UAAU,OAAO,SAAS;AAAA,EACtE,SAAS,OAAO;AACd,WAAO,EAAE,IAAI,OAAO,OAAO,oBAAoB,KAAK,EAAE;AAAA,EACxD;AACF;AAEA,eAAsB,2BACpB,OACuD;AACvD,MAAI;AACF,UAAM,SAAS,MAAM,mBAAmB,KAAK;AAC7C,WAAO,EAAE,IAAI,MAAM,QAAQ,OAAO,QAAQ,UAAU,OAAO,SAAS;AAAA,EACtE,SAAS,OAAO;AACd,WAAO,EAAE,IAAI,OAAO,OAAO,oBAAoB,KAAK,EAAE;AAAA,EACxD;AACF;AAEA,eAAsB,iCACpB,OAC6D;AAC7D,MAAI;AACF,UAAM,SAAS,MAAM,yBAAyB,KAAK;AACnD,WAAO,EAAE,IAAI,MAAM,QAAQ,OAAO,QAAQ,UAAU,OAAO,SAAS;AAAA,EACtE,SAAS,OAAO;AACd,WAAO,EAAE,IAAI,OAAO,OAAO,oBAAoB,KAAK,EAAE;AAAA,EACxD;AACF;AAEO,SAAS,uBAAuB,OAAgC;AACrE,SAAO,oBAAoB,OAAO,KAAK;AACzC;AAEO,SAAS,6BAA6B,OAAsC;AACjF,SAAO,0BAA0B,OAAO,KAAK;AAC/C;AAEO,SAAS,mCACd,OAC4B;AAC5B,SAAO,gCAAgC,OAAO,KAAK;AACrD;AAEO,SAAS,0BAA0B,OAAwB;AAChE,SAAO,oBAAoB,OAAO,IAAI;AACxC;AAEO,SAAS,gCAAgC,OAA8B;AAC5E,SAAO,0BAA0B,OAAO,IAAI;AAC9C;AAEO,SAAS,sCACd,OACoB;AACpB,SAAO,gCAAgC,OAAO,IAAI;AACpD;AAEA,SAAS,0BAA0B,OAAoC;AACrE,QAAM,aAAa,iBAAiB,cAAc,KAAK,GAAG,GAAG;AAC7D,QAAM,SAASC,gBAAe,YAAY,UAAU,GAAG;AACvD,QAAM,aAAa,oBAAoB,MAAM;AAC7C,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK;AACH,aAAO,0BAA0B,UAAU;AAAA,IAC7C,KAAK;AACH,aAAO,gCAAgC,UAAU;AAAA,IACnD,KAAK;AACH,aAAO,sCAAsC,UAAU;AAAA,EAC3D;AACF;AAEA,SAAS,8BACP,OACA,YACY;AACZ,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK;AACH,aAAO,uBAAuB,KAAK;AAAA,IACrC,KAAK;AACH,aAAO,6BAA6B,KAAK;AAAA,IAC3C,KAAK;AACH,aAAO,mCAAmC,KAAK;AAAA,EACnD;AACF;AAEA,SAAS,oBAAoB,OAAgB,QAA6B;AACxE,QAAMD,UAAS,iBAAiB,cAAc,KAAK,GAAG,GAAG;AACzD,EAAAE;AAAA,IACEF;AAAA,IACA,SACI;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACJ;AAAA,EACF;AACA,cAAYC,gBAAeD,SAAQ,UAAU,GAAG,GAAG,eAAe,UAAU;AAC5E,MAAI,QAAQ;AACV,IAAAC,gBAAeD,SAAQ,YAAY,GAAG;AACtC,sBAAkBG,eAAcH,SAAQ,aAAa,GAAG,CAAC;AAAA,EAC3D;AACA,EAAAC,gBAAeD,SAAQ,YAAY,GAAG;AACtC,EAAAC,gBAAeD,SAAQ,iBAAiB,GAAG;AAC3C,qBAAmBA,SAAQ,aAAa,GAAG;AAC3C,qBAAmBA,SAAQ,aAAa,GAAG;AAC3C,yBAAuBG,eAAcH,SAAQ,YAAY,GAAG,GAAG,YAAY;AAC3E,qBAAmBG,eAAcH,SAAQ,QAAQ,GAAG,GAAG,QAAQ;AAC/D,gBAAcG,eAAcH,SAAQ,SAAS,GAAG,GAAG,SAAS;AAC5D,MAAII,QAAOJ,SAAQ,YAAY,GAAG;AAChC,uBAAmBG,eAAcH,SAAQ,cAAc,GAAG,GAAG,cAAc;AAAA,EAC7E;AACA,MAAII,QAAOJ,SAAQ,OAAO,GAAG;AAC3B,kBAAcG,eAAcH,SAAQ,SAAS,GAAG,GAAG,SAAS;AAAA,EAC9D;AACA,SAAOA;AACT;AAEA,SAAS,0BAA0B,OAAgB,QAA6B;AAC9E,QAAMA,UAAS,iBAAiB,cAAc,KAAK,GAAG,GAAG;AACzD,EAAAE;AAAA,IACEF;AAAA,IACA,SACI;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACJ;AAAA,EACF;AACA,cAAYC,gBAAeD,SAAQ,UAAU,GAAG,GAAG,sBAAsB,UAAU;AACnF,MAAI,QAAQ;AACV,IAAAC,gBAAeD,SAAQ,YAAY,GAAG;AACtC,sBAAkBG,eAAcH,SAAQ,aAAa,GAAG,CAAC;AAAA,EAC3D;AACA,EAAAC,gBAAeD,SAAQ,YAAY,GAAG;AACtC,EAAAC,gBAAeD,SAAQ,YAAY,GAAG;AACtC,kBAAgBA,SAAQ,YAAY,KAAK,CAAC;AAC1C,cAAYC,gBAAeD,SAAQ,eAAe,GAAG,GAAG;AAAA,IACtD;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAG,eAAe;AAClB,qBAAmBA,SAAQ,eAAe,GAAG;AAC7C,iBAAeA,SAAQ,cAAc,GAAG;AACxC,EAAAC,gBAAeD,SAAQ,iBAAiB,GAAG;AAC3C,SAAOA;AACT;AAEA,SAAS,gCACP,OACA,QACY;AACZ,QAAMA,UAAS,iBAAiB,cAAc,KAAK,GAAG,GAAG;AACzD,EAAAE;AAAA,IACEF;AAAA,IACA,SACI;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACJ;AAAA,EACF;AACA;AAAA,IACEC,gBAAeD,SAAQ,UAAU,GAAG;AAAA,IACpC;AAAA,IACA;AAAA,EACF;AACA,MAAI,QAAQ;AACV,IAAAC,gBAAeD,SAAQ,kBAAkB,GAAG;AAC5C,sBAAkBG,eAAcH,SAAQ,aAAa,GAAG,CAAC;AAAA,EAC3D;AACA,EAAAC,gBAAeD,SAAQ,YAAY,GAAG;AACtC,EAAAC,gBAAeD,SAAQ,YAAY,GAAG;AACtC,EAAAC,gBAAeD,SAAQ,YAAY,GAAG;AACtC;AAAA,IAAoBA;AAAA,IAAQ;AAAA,IAA2B;AAAA,IAAK,CAAC,OAAO,SAClE,YAAY,OAAO,MAAM,IAAI;AAAA,EAC/B;AACA,sBAAoBA,SAAQ,8BAA8B,GAAG;AAC7D,EAAAC,gBAAeD,SAAQ,kBAAkB,GAAG;AAC5C,qBAAmBA,SAAQ,aAAa,GAAG;AAC3C,SAAOA;AACT;AAEA,SAAS,kBAAkB,OAAuC;AAChE,QAAMA,UAAS,iBAAiB,OAAO,aAAa;AACpD,EAAAE,iBAAgBF,SAAQ,CAAC,SAAS,aAAa,OAAO,GAAG,aAAa;AACtE,QAAM,QAAQC,gBAAeD,SAAQ,SAAS,aAAa;AAC3D,gCAA8B,KAAK;AACnC,QAAM,YAAYC,gBAAeD,SAAQ,aAAa,aAAa;AACnE,QAAM,QAAQC,gBAAeD,SAAQ,SAAS,aAAa;AAC3D,uBAAqB,OAAO,KAAK;AACjC,SAAO,EAAE,OAAO,WAAW,MAAM;AACnC;AAEA,SAAS,uBAAuB,OAAgB,MAAoB;AAClE,QAAMA,UAAS,iBAAiB,OAAO,IAAI;AAC3C,EAAAE,iBAAgBF,SAAQ,CAAC,gBAAgB,cAAc,oBAAoB,GAAG,IAAI;AAClF,EAAAC,gBAAeD,SAAQ,gBAAgB,IAAI;AAC3C,EAAAC,gBAAeD,SAAQ,cAAc,IAAI;AACzC,QAAM,UAAUK,eAAcL,SAAQ,sBAAsB,MAAM,CAAC;AACnE,WAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS;AACnD,6BAAyB,QAAQ,KAAK,GAAG,GAAG,IAAI,uBAAuB,KAAK,GAAG;AAAA,EACjF;AACF;AAEA,SAAS,2CAA2C,OAAyB;AAC3E,QAAM,WAAW,iBAAiBG,eAAc,OAAO,YAAY,GAAG,GAAG,YAAY;AACrF,QAAM,UAAUE,eAAc,UAAU,sBAAsB,cAAc,CAAC;AAC7E,WAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS;AACnD;AAAA,MACE,QAAQ,KAAK;AAAA,MACb,iCAAiC,KAAK;AAAA,IACxC;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,OAAgB,MAAoB;AACpE,QAAML,UAAS,iBAAiB,OAAO,IAAI;AAC3C,MAAI;AACF,UAAM,YAAY,6BAA6BA,OAAM;AACrD,QAAI,gBAAgBA,OAAM,MAAM,gBAAgB,SAAS,GAAG;AAC1D,YAAM,IAAI,wBAAwB,GAAG,IAAI,0CAA0C;AAAA,IACrF;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,yBAAyB;AAC5C,YAAM;AAAA,IACR;AACA,UAAM,IAAI;AAAA,MACR,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACvD;AAAA,EACF;AACF;AAEA,SAAS,mCAAmC,OAAgB,MAAoB;AAC9E,QAAMA,UAAS,iBAAiB,OAAO,IAAI;AAC3C,MAAI;AACF,UAAM,YAAY,0BAA0BA,OAAM;AAClD,QAAI,gBAAgBA,OAAM,MAAM,gBAAgB,SAAS,GAAG;AAC1D,YAAM,IAAI,wBAAwB,GAAG,IAAI,iDAAiD;AAAA,IAC5F;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,yBAAyB;AAC5C,YAAM;AAAA,IACR;AACA,UAAM,IAAI;AAAA,MACR,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACvD;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,OAAgB,MAAoB;AAC9D,QAAMA,UAAS,iBAAiB,OAAO,IAAI;AAC3C,QAAM,OAAO,OAAO,KAAKA,OAAM;AAC/B,MAAI,KAAK,WAAW,GAAG;AACrB,UAAM,IAAI,wBAAwB,GAAG,IAAI,uCAAuC;AAAA,EAClF;AACA,QAAM,MAAM,KAAK,CAAC;AAClB,MAAI,QAAQ,WAAW,QAAQ,SAAS;AACtC,UAAM,SAASK,eAAcL,SAAQ,KAAK,MAAM,CAAC;AACjD,aAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAClD,yBAAmB,OAAO,KAAK,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG;AAAA,IAC9D;AACA;AAAA,EACF;AACA,MAAI,QAAQ,WAAW;AACrB,UAAM,UAAU,iBAAiBG,eAAcH,SAAQ,WAAW,IAAI,GAAG,GAAG,IAAI,UAAU;AAC1F,IAAAE,iBAAgB,SAAS,CAAC,KAAK,GAAG,GAAG,IAAI,UAAU;AACnD,IAAAD,gBAAe,SAAS,OAAO,GAAG,IAAI,UAAU;AAChD;AAAA,EACF;AACA,MAAI,QAAQ,YAAY;AACtB,gCAA4BE,eAAcH,SAAQ,YAAY,IAAI,GAAG,GAAG,IAAI,WAAW;AACvF;AAAA,EACF;AACA,QAAM,IAAI,wBAAwB,GAAG,IAAI,+BAA+B,GAAG,EAAE;AAC/E;AAEA,SAAS,4BAA4B,OAAgB,MAAoB;AACvE,QAAMA,UAAS,iBAAiB,OAAO,IAAI;AAC3C,EAAAE;AAAA,IACEF;AAAA,IACA,CAAC,iBAAiB,YAAY,gBAAgB,aAAa,WAAW;AAAA,IACtE;AAAA,EACF;AACA,EAAAC,gBAAeD,SAAQ,iBAAiB,IAAI;AAC5C,EAAAC,gBAAeD,SAAQ,YAAY,IAAI;AACvC,EAAAG,eAAcH,SAAQ,gBAAgB,IAAI;AAC1C,MAAII,QAAOJ,SAAQ,WAAW,GAAG;AAC/B,UAAM,YAAY,iBAAiBG,eAAcH,SAAQ,aAAa,IAAI,GAAG,GAAG,IAAI,YAAY;AAChG,IAAAE;AAAA,MACE;AAAA,MACA,CAAC,WAAW,mBAAmB,4BAA4B;AAAA,MAC3D,GAAG,IAAI;AAAA,IACT;AACA,mBAAe,WAAW,WAAW,GAAG,IAAI,YAAY;AACxD,QAAIE,QAAO,WAAW,iBAAiB,GAAG;AACxC,0BAAoB,WAAW,mBAAmB,GAAG,IAAI,YAAY;AAAA,IACvE;AACA,oBAAgB,WAAW,8BAA8B,GAAG,IAAI,YAAY;AAAA,EAC9E;AACA,MAAIA,QAAOJ,SAAQ,WAAW,GAAG;AAC/B,UAAM,YAAY,iBAAiBG,eAAcH,SAAQ,aAAa,IAAI,GAAG,GAAG,IAAI,YAAY;AAChG,IAAAE,iBAAgB,WAAW,CAAC,qBAAqB,GAAG,GAAG,IAAI,YAAY;AACvE,oBAAgB,WAAW,uBAAuB,GAAG,IAAI,cAAc,CAAC;AAAA,EAC1E;AACF;AAEA,SAAS,cAAc,OAAgB,MAAoB;AACzD,QAAMF,UAAS,iBAAiB,OAAO,IAAI;AAC3C,EAAAE,iBAAgBF,SAAQ,CAAC,UAAU,iBAAiB,kBAAkB,YAAY,GAAG,IAAI;AACzF,cAAYC,gBAAeD,SAAQ,UAAU,IAAI,GAAG,uBAAuB,GAAG,IAAI,SAAS;AAC3F,kBAAgBA,SAAQ,iBAAiB,MAAM,CAAC;AAChD,cAAYC,gBAAeD,SAAQ,kBAAkB,IAAI,GAAG;AAAA,IAC1D;AAAA,IACA;AAAA,EACF,GAAG,GAAG,IAAI,iBAAiB;AAC3B,cAAYC,gBAAeD,SAAQ,cAAc,IAAI,GAAG;AAAA,IACtD;AAAA,IACA;AAAA,EACF,GAAG,GAAG,IAAI,aAAa;AACzB;AAEA,SAAS,mBAAmB,OAAgB,MAAoB;AAC9D,QAAMA,UAAS,iBAAiB,OAAO,IAAI;AAC3C,EAAAE,iBAAgBF,SAAQ,CAAC,QAAQ,GAAG,IAAI;AACxC,cAAYC,gBAAeD,SAAQ,UAAU,IAAI,GAAG,CAAC,QAAQ,QAAQ,OAAO,GAAG,GAAG,IAAI,SAAS;AACjG;AAEA,SAAS,cAAc,OAAgB,MAAoB;AACzD,QAAMA,UAAS,iBAAiB,OAAO,IAAI;AAC3C,EAAAE,iBAAgBF,SAAQ,CAAC,UAAU,GAAG,IAAI;AAC1C,cAAYC,gBAAeD,SAAQ,YAAY,IAAI,GAAG,CAAC,OAAO,YAAY,MAAM,GAAG,GAAG,IAAI,WAAW;AACvG;AAEA,SAAS,oBACP,UACA,YACsB;AACtB,QAAM,MAAM,gBAAgB,QAAQ;AACpC,QAAM,WAAWF,aAAY,OAAO,GAAG;AACvC,QAAMQ,UAAS,YAAY,YAAYR,aAAY,OAAO,GAAG,WAAW,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC9F,QAAM,KAAK,GAAG,WAAW,QAAQ,GAAG,iBAAiBQ,OAAM,CAAC;AAC5D,SAAO;AAAA,IACL,MAAM,WAAW;AAAA,IACjB,SAAS,WAAW;AAAA,IACpB;AAAA,IACA,QAAQ,WAAW;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAAA;AAAA,IACA,eAAW,yBAAWA,OAAM,EAAE,MAAM,CAAC;AAAA,EACvC;AACF;AAEA,SAAS,gBACP,QACA,UACA,YACM;AACN,QAAM,SAASL,gBAAe,QAAQ,WAAW,SAAS,GAAG;AAC7D,MAAI,WAAW,SAAS,IAAI;AAC1B;AAAA,EACF;AACA,MAAI,IAAI,OAAO,IAAI,WAAW,QAAQ,eAAe,EAAE,KAAK,MAAM,GAAG;AACnE,UAAM,IAAI;AAAA,MACR,GAAG,WAAW,OAAO;AAAA,IACvB;AAAA,EACF;AACA,QAAM,IAAI,oBAAoB,GAAG,WAAW,OAAO,mBAAmB,WAAW,QAAQ,EAAE;AAC7F;AAEA,SAAS,iCACP,UACA,WACM;AACN,MAAI,CAACG,QAAO,UAAU,eAAe,GAAG;AACtC;AAAA,EACF;AACA,QAAM,gBAAgBH,gBAAe,UAAU,iBAAiB,GAAG;AACnE,MAAI,kBAAkB,WAAW;AAC/B,UAAM,IAAI;AAAA,MACR,cAAc,SAAS,iCAAiC,aAAa;AAAA,IACvE;AAAA,EACF;AACF;AAEA,SAAS,iCACP,QACA,WACM;AACN,MAAI,CAACG,QAAO,QAAQ,eAAe,GAAG;AACpC;AAAA,EACF;AACA,QAAM,gBAAgBH,gBAAe,QAAQ,iBAAiB,GAAG;AACjE,MAAI,UAAU,cAAc,eAAe;AACzC,UAAM,IAAI;AAAA,MACR,uBAAuB,UAAU,SAAS,iCAAiC,aAAa;AAAA,IAC1F;AAAA,EACF;AACF;AAEA,SAAS,4BACP,WACA,OACM;AACN,MAAI,UAAU,6BAA6B;AACzC,+BAA2B,SAAS;AACpC;AAAA,EACF;AACA,MAAI,UAAU,4BAA4B;AACxC,gBAAY,SAAS;AACrB;AAAA,EACF;AACA,QAAM,IAAI,+BAA+B,gCAAgC,KAAK,EAAE;AAClF;AAEA,eAAe,gBACb,WACAK,SACkB;AAClB,MAAI,UAAU,UAAU,6BAA6B;AACnD,UAAM,YAAY,2BAA2B,UAAU,SAAS;AAChE,UAAM,iBAAiB,qBAAqB,UAAU,OAAO,UAAU,KAAK;AAC5E,QAAI;AACF,aAAO,uBAAQ,OAAO,gBAAgBA,SAAQ,SAAS;AAAA,IACzD,QAAQ;AACN,YAAM,IAAI,2BAA2B,uCAAuC;AAAA,IAC9E;AAAA,EACF;AAEA,MAAI,UAAU,UAAU,4BAA4B;AAClD,UAAM,MAAM,YAAY,UAAU,SAAS;AAC3C,UAAM,iBAAiB,qBAAqB,UAAU,OAAO,UAAU,KAAK;AAC5E,QAAI;AACF,iBAAO,4BAAc;AAAA,QACnB,SAAS,IAAI;AAAA,QACb,SAAS,EAAE,KAAKA,QAAO;AAAA,QACvB,eAAW,yBAAW,cAAc;AAAA,MACtC,CAAC;AAAA,IACH,QAAQ;AACN,YAAM,IAAI,2BAA2B,uCAAuC;AAAA,IAC9E;AAAA,EACF;AAEA,QAAM,IAAI,+BAA+B,gCAAgC,UAAU,KAAK,EAAE;AAC5F;AAEA,SAAS,2BAA2B,KAAyB;AAC3D,MAAI,CAAC,IAAI,WAAW,UAAU,GAAG;AAC/B,UAAM,IAAI,uBAAuB,mCAAmC;AAAA,EACtE;AACA,QAAM,aAAa,IAAI,MAAM,WAAW,MAAM;AAC9C,MAAI,CAAC,WAAW,WAAW,GAAG,GAAG;AAC/B,UAAM,IAAI,uBAAuB,sCAAsC;AAAA,EACzE;AACA,MAAI;AACJ,MAAI;AACF,YAAQ,MAAM,UAAU,OAAO,UAAU;AAAA,EAC3C,QAAQ;AACN,UAAM,IAAI,uBAAuB,kCAAkC;AAAA,EACrE;AACA,MAAI,MAAM,WAAW,MAAM,MAAM,CAAC,MAAM,OAAQ,MAAM,CAAC,MAAM,GAAM;AACjE,WAAO,MAAM,MAAM,CAAC;AAAA,EACtB;AACA,QAAM,IAAI,uBAAuB,yCAAyC;AAC5E;AAEA,SAAS,YAAY,KAAyC;AAC5D,MAAI;AACJ,MAAI;AACF,aAAS,YAAY,GAAG;AAAA,EAC1B,QAAQ;AACN,UAAM,IAAI,uBAAuB,kCAAkC;AAAA,EACrE;AACA,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,uBAAuB,mCAAmC;AAAA,EACtE;AACA,SAAO,EAAE,SAAS,OAAO,QAAQ;AACnC;AAEA,SAAS,qBAAqB,OAAe,OAAmC;AAC9E,MAAI,MAAM,WAAW,KAAK,CAAC,aAAa,KAAK,KAAK,KAAK,MAAM,SAAS,GAAG,GAAG;AAC1E,UAAM,IAAI,uBAAuB,mDAAmD;AAAA,EACtF;AACA,QAAM,QAAQ,gBAAgB,KAAK;AACnC,MAAI,UAAU,+BAA+B,MAAM,WAAW,IAAI;AAChE,UAAM,IAAI,uBAAuB,oCAAoC;AAAA,EACvE;AACA,MAAI,UAAU,4BAA4B;AACxC,QAAI,MAAM,WAAW,IAAI;AACvB,YAAM,IAAI,uBAAuB,oCAAoC;AAAA,IACvE;AACA,UAAM,IAAI,MAAM,EAAE;AAClB,QAAI,MAAM,MAAM,MAAM,IAAI;AACxB,YAAM,IAAI,uBAAuB,gDAAgD;AAAA,IACnF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBACP,OACA,OACQ;AACR,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAMC,WAAU,MAAM,WAAW,IAAI,IACjC,gBAAgB,WAAW,KAAK,CAAC,IACjC;AACJ,yBAAqBA,UAAS,KAAK;AACnC,WAAOA;AAAA,EACT;AACA,QAAM,UAAU,gBAAgB,KAAK;AACrC,uBAAqB,SAAS,KAAK;AACnC,SAAO;AACT;AAEA,SAAS,uBACPP,SACA,YACY;AACZ,QAAM,SAAS,uBAAO,OAAO,IAAI;AACjC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQA,OAAM,GAAG;AACjD,QAAI,QAAQ,WAAW,WAAW,QAAQ,aAAa;AACrD;AAAA,IACF;AACA,WAAO,GAAG,IAAI;AAAA,EAChB;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAkC;AAC/D,QAAMA,UAAS,iBAAiB,cAAc,KAAK,GAAG,GAAG;AACzD,SAAO,oBAAoBC,gBAAeD,SAAQ,UAAU,GAAG,CAAC;AAClE;AAEA,SAAS,oBAAoB,QAAkC;AAC7D,MAAI,WAAW,cAAe,QAAO,YAAY;AACjD,MAAI,WAAW,qBAAsB,QAAO,YAAY;AACxD,MAAI,WAAW,4BAA6B,QAAO,YAAY;AAC/D,QAAM,IAAI,wBAAwB,qCAAqC,MAAM,EAAE;AACjF;AAEA,SAAS,iBAAiB,OAAgB,MAA0B;AAClE,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI,wBAAwB,GAAG,IAAI,oBAAoB;AAAA,EAC/D;AACA,SAAO;AACT;AAEA,SAASE,iBAAgBF,SAAoB,SAA4B,MAAoB;AAC3F,QAAM,aAAa,IAAI,IAAI,OAAO;AAClC,aAAW,OAAO,OAAO,KAAKA,OAAM,GAAG;AACrC,QAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,YAAM,IAAI,wBAAwB,GAAG,IAAI,sBAAsB,GAAG,EAAE;AAAA,IACtE;AAAA,EACF;AACF;AAEA,SAASG,eAAcH,SAAoB,KAAa,MAAyB;AAC/E,MAAI,CAACI,QAAOJ,SAAQ,GAAG,GAAG;AACxB,UAAM,IAAI,wBAAwB,GAAG,IAAI,IAAI,GAAG,cAAc;AAAA,EAChE;AACA,SAAOA,QAAO,GAAG;AACnB;AAEA,SAASC,gBAAeD,SAAoB,KAAa,MAAsB;AAC7E,SAAO,kBAAkBG,eAAcH,SAAQ,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE;AAC7E;AAEA,SAAS,eAAeA,SAAoB,KAAa,MAAoB;AAC3E,MAAI,CAACI,QAAOJ,SAAQ,GAAG,GAAG;AACxB;AAAA,EACF;AACA,oBAAkBG,eAAcH,SAAQ,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE;AACtE;AAEA,SAAS,kBAAkB,OAAkB,MAAsB;AACjE,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,UAAM,IAAI,wBAAwB,GAAG,IAAI,6BAA6B;AAAA,EACxE;AACA,SAAO;AACT;AAEA,SAAS,gBAAgBA,SAAoB,KAAa,MAAoB;AAC5E,MAAI,CAACI,QAAOJ,SAAQ,GAAG,GAAG;AACxB;AAAA,EACF;AACA,MAAI,OAAOG,eAAcH,SAAQ,KAAK,IAAI,MAAM,WAAW;AACzD,UAAM,IAAI,wBAAwB,GAAG,IAAI,IAAI,GAAG,oBAAoB;AAAA,EACtE;AACF;AAEA,SAAS,gBACPA,SACA,KACA,MACA,SACQ;AACR,QAAM,QAAQG,eAAcH,SAAQ,KAAK,IAAI;AAC7C,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,SAAS;AAChF,UAAM,IAAI;AAAA,MACR,GAAG,IAAI,IAAI,GAAG,0BAA0B,OAAO;AAAA,IACjD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAASK,eACPL,SACA,KACA,MACA,SACsB;AACtB,QAAM,QAAQG,eAAcH,SAAQ,KAAK,IAAI;AAC7C,MAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,SAAS;AACnD,UAAM,IAAI;AAAA,MACR,GAAG,IAAI,IAAI,GAAG,mCAAmC,OAAO;AAAA,IAC1D;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBACPA,SACA,KACA,MACA,OACM;AACN,QAAM,SAASK,eAAcL,SAAQ,KAAK,MAAM,CAAC;AACjD,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAClD,UAAM,WAAW,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK;AACxC,UAAM,QAAQ,kBAAkB,OAAO,KAAK,GAAG,QAAQ;AACvD,YAAQ,OAAO,QAAQ;AAAA,EACzB;AACF;AAEA,SAAS,mBAAmBA,SAAoB,KAAa,MAAoB;AAC/E,gBAAcC,gBAAeD,SAAQ,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE;AACnE;AAEA,SAAS,mBAAmBA,SAAoB,KAAa,MAAoB;AAC/E,MAAI,CAACI,QAAOJ,SAAQ,GAAG,GAAG;AACxB;AAAA,EACF;AACA,gBAAcC,gBAAeD,SAAQ,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE;AACnE;AAEA,SAAS,cAAc,OAAe,MAAoB;AACxD,QAAM,QAAQ,MAAM;AAAA,IAClB;AAAA,EACF;AACA,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,wBAAwB,GAAG,IAAI,0BAA0B;AAAA,EACrE;AACA,QAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,MAAI,OAAO,MAAM,MAAM,GAAG;AACxB,UAAM,IAAI,wBAAwB,GAAG,IAAI,yCAAyC;AAAA,EACpF;AACA,QAAM,YAAY,IAAI,KAAK,MAAM,EAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AACrE,MAAI,cAAc,OAAO;AACvB,UAAM,IAAI,wBAAwB,GAAG,IAAI,4CAA4C;AAAA,EACvF;AACF;AAEA,SAAS,YAA8B,QAAgB,UAAa,MAAiB;AACnF,MAAI,WAAW,UAAU;AACvB,UAAM,IAAI,wBAAwB,GAAG,IAAI,YAAY,QAAQ,EAAE;AAAA,EACjE;AACA,SAAO;AACT;AAEA,SAAS,YACP,QACA,SACA,MACG;AACH,aAAW,SAAS,SAAS;AAC3B,QAAI,WAAW,OAAO;AACpB,aAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,IAAI,wBAAwB,GAAG,IAAI,0BAA0B,MAAM,EAAE;AAC7E;AAEA,SAASI,QAAOJ,SAAoB,KAAsB;AACxD,SAAOD,cAAaC,SAAQ,GAAG;AACjC;AAEA,SAAS,8BAA8B,OAAgD;AACrF,MAAI,UAAU,+BAA+B,UAAU,4BAA4B;AACjF,UAAM,IAAI,+BAA+B,gCAAgC,KAAK,EAAE;AAAA,EAClF;AACF;AAEA,SAAS,YAAY,OAA+B;AAClD,aAAO,qBAAO,OAAO,OAAO;AAC9B;AAEA,SAAS,YAAY,MAAkB,OAA+B;AACpE,QAAM,SAAS,IAAI,WAAW,KAAK,SAAS,MAAM,MAAM;AACxD,SAAO,IAAI,MAAM,CAAC;AAClB,SAAO,IAAI,OAAO,KAAK,MAAM;AAC7B,SAAO;AACT;AAEA,SAAS,iBAAiB,OAA2B;AACnD,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,OAAO;AACX,aAAW,QAAQ,OAAO;AACxB,aAAU,UAAU,IAAK;AACzB,YAAQ;AACR,WAAO,QAAQ,GAAG;AAChB,cAAQ;AACR,gBAAU,gBAAiB,UAAU,OAAQ,EAAE;AAAA,IACjD;AAAA,EACF;AACA,MAAI,OAAO,GAAG;AACZ,cAAU,gBAAiB,UAAW,IAAI,OAAS,EAAE;AAAA,EACvD;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAA2B;AAClD,QAAMQ,YACJ;AACF,MAAI,SAAS;AACb,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,IAAI,MAAM,KAAK;AACrB,UAAM,IAAI,MAAM,QAAQ,CAAC;AACzB,UAAM,IAAI,MAAM,QAAQ,CAAC;AACzB,UAAM,UAAW,KAAK,MAAQ,KAAK,MAAM,KAAM,KAAK;AACpD,cAAUA,UAAU,WAAW,KAAM,EAAE;AACvC,cAAUA,UAAU,WAAW,KAAM,EAAE;AACvC,QAAI,QAAQ,IAAI,MAAM,QAAQ;AAC5B,gBAAUA,UAAU,WAAW,IAAK,EAAE;AAAA,IACxC;AACA,QAAI,QAAQ,IAAI,MAAM,QAAQ;AAC5B,gBAAUA,UAAS,UAAU,EAAE;AAAA,IACjC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAA2B;AAClD,MAAI,MAAM,SAAS,MAAM,GAAG;AAC1B,UAAM,IAAI,uBAAuB,4CAA4C;AAAA,EAC/E;AACA,QAAMA,YACJ;AACF,QAAM,QAAkB,CAAC;AACzB,MAAI,SAAS;AACb,MAAI,OAAO;AACX,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQA,UAAS,QAAQ,IAAI;AACnC,QAAI,QAAQ,GAAG;AACb,YAAM,IAAI,uBAAuB,kCAAkC;AAAA,IACrE;AACA,aAAU,UAAU,IAAK;AACzB,YAAQ;AACR,QAAI,QAAQ,GAAG;AACb,cAAQ;AACR,YAAM,KAAM,UAAU,OAAQ,GAAI;AAAA,IACpC;AAAA,EACF;AACA,QAAM,UAAU,WAAW,KAAK,KAAK;AACrC,MAAI,gBAAgB,OAAO,MAAM,OAAO;AACtC,UAAM,IAAI,uBAAuB,4CAA4C;AAAA,EAC/E;AACA,SAAO;AACT;AAEA,SAAS,WAAW,OAA2B;AAC7C,QAAMC,OAAM,MAAM,MAAM,CAAC;AACzB,MAAIA,KAAI,SAAS,MAAM,KAAK,CAAC,iBAAiB,KAAKA,IAAG,GAAG;AACvD,UAAM,IAAI,uBAAuB,qCAAqC;AAAA,EACxE;AACA,QAAM,SAAS,IAAI,WAAWA,KAAI,SAAS,CAAC;AAC5C,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAClD,WAAO,KAAK,IAAI,OAAO,SAASA,KAAI,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE;AAAA,EACzE;AACA,SAAO;AACT;;;AwBrlCO,IAAM,oCACX;AACK,IAAM,6BACX;AACK,IAAM,oBAAoB;AAC1B,IAAM,6BAA6B;AAiBnC,IAAM,uBAAN,cAAmC,MAAM;AAAA,EAG9C,YAAYC,OAAgC,SAAiB;AAC3D,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAOA;AAAA,EACd;AACF;AAsEA,eAAsB,mCACpB,OACA,QACiB;AACjB,QAAM,aAAaC,cAAa,OAAO,KAAK,4BAA4B;AACxE,EAAAC;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,QAAM,cAAcC,eAAc,YAAY,sBAAsB,GAAG;AACvE,MAAI,YAAY,WAAW,GAAG;AAC5B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAA8B,CAAC;AACrC,WAAS,QAAQ,GAAG,QAAQ,YAAY,QAAQ,SAAS;AACvD,YAAQ;AAAA,MACN,oBAAoB,MAAM,0BAA0B,YAAY,KAAK,CAAC,CAAC;AAAA,IACzE;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,MACE,QAAQ;AAAA,MACR,UAAUC,gBAAe,YAAY,YAAY,GAAG;AAAA,MACpD,eAAeA,gBAAe,YAAY,iBAAiB,GAAG;AAAA,MAC9D,WAAWA,gBAAe,YAAY,aAAa,GAAG;AAAA,MACtD,GAAIC,QAAO,YAAY,WAAW,IAC9B,EAAE,WAAWD,gBAAe,YAAY,aAAa,GAAG,EAAE,IAC1D,CAAC;AAAA,MACL,UAAU;AAAA,QACR,cAAcA,gBAAe,YAAY,gBAAgB,GAAG;AAAA,QAC5D,YAAYA,gBAAe,YAAY,cAAc,GAAG;AAAA,QACxD,oBAAoB;AAAA,MACtB;AAAA,MACA,MAAM,eAAe,YAAY,QAAQ,GAAG;AAAA,MAC5C,OAAO,eAAe,YAAY,SAAS,GAAG;AAAA,MAC9C,GAAIC,QAAO,YAAY,YAAY,IAC/B,EAAE,YAAY,eAAe,YAAY,cAAc,GAAG,EAAE,IAC5D,CAAC;AAAA,MACL,GAAIA,QAAO,YAAY,OAAO,IAC1B,EAAE,OAAO,eAAe,YAAY,SAAS,GAAG,EAAE,IAClD,CAAC;AAAA,IACP;AAAA,IACA;AAAA,EACF,EAAE,MAAM,CAAC,UAAU;AACjB,UAAM,sBAAsB,KAAK;AAAA,EACnC,CAAC;AACH;AAEO,SAAS,iCACd,OAC4B;AAC5B,QAAM,aAAaJ,cAAa,OAAO,KAAK,4BAA4B;AACxE,EAAAC;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,QAAM,0BAA0BG,QAAO,YAAY,yBAAyB,IACxEC,qBAAoB,YAAY,2BAA2B,GAAG,IAC9D,CAAC,iBAAiB;AACtB;AAAA,IACE;AAAA,IACA;AAAA,EACF;AACA,QAAM,6BAA6BD;AAAA,IACjC;AAAA,IACA;AAAA,EACF,IACIC,qBAAoB,YAAY,8BAA8B,GAAG,IACjE,CAAC,0BAA0B;AAC/B;AAAA,IACE;AAAA,IACA;AAAA,EACF;AACA,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,qBAAmB,WAAW,aAAa;AAE3C,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,UAAUF,gBAAe,YAAY,YAAY,GAAG;AAAA,IACpD,UAAU;AAAA,MACRA,gBAAe,YAAY,YAAY,GAAG;AAAA,IAC5C;AAAA,IACA,UAAUA,gBAAe,YAAY,YAAY,GAAG;AAAA,IACpD;AAAA,IACA;AAAA,IACA,gBAAgBA,gBAAe,YAAY,kBAAkB,GAAG;AAAA,IAChE;AAAA,EACF;AACF;AAEA,eAAsB,yCACpB,OACA,QAC6B;AAC7B,SAAO;AAAA,IACL,iCAAiC,KAAK;AAAA,IACtC;AAAA,EACF,EAAE,MAAM,CAAC,UAAU;AACjB,UAAM,sBAAsB,KAAK;AAAA,EACnC,CAAC;AACH;AAOO,SAAS,gCACd,OAC0B;AAC1B,QAAM,aAAaH;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,EAAAC;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,QAAM,eAAe;AAAA,IACnBK,eAAc,YAAY,sBAAsB,GAAG;AAAA,EACrD;AACA,MACE,CAAC,aAAa,2BAA2B;AAAA,IACvC;AAAA,EACF,GACA;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,UAAUH,gBAAe,YAAY,YAAY,GAAG;AAAA,IACpD,cAAc;AAAA,MACZ,UAAU,aAAa;AAAA,MACvB,UAAU,aAAa;AAAA,MACvB,4BAA4B,CAAC,0BAA0B;AAAA,MACvD;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,QACRA,gBAAe,YAAY,qBAAqB,GAAG;AAAA,MACrD;AAAA,MACA,SAASA,gBAAe,YAAY,gBAAgB,GAAG;AAAA,IACzD;AAAA,IACA,cAAc,eAAe,YAAY,gBAAgB,GAAG;AAAA,EAC9D;AACF;AAEA,SAAS,0BAA0B,OAAuB;AACxD,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,KAAK;AAAA,EACrB,QAAQ;AACN,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MACE,IAAI,aAAa,YACjB,IAAI,aAAa,MACjB,IAAI,aAAa,MACjB,IAAI,SAAS,MACb,IAAI,WAAW,IACf;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,IAAI,SAAS,EAAE,QAAQ,OAAO,EAAE;AACzC;AAEA,SAAS,6BAA6B,OAAuB;AAC3D,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,KAAK;AAAA,EACrB,QAAQ;AACN,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MACE,IAAI,aAAa,YACjB,IAAI,aAAa,MACjB,IAAI,aAAa,MACjB,IAAI,SAAS,MACb,IAAI,WAAW,IACf;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,IAAI,SAAS,EAAE,QAAQ,OAAO,EAAE;AACzC;AAOA,eAAsB,qCACpB,SAC6B;AAC7B,QAAM,aAAaH,cAAa,SAAS,KAAK,4BAA4B;AAC1E,EAAAC;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,MAAI,CAACG,QAAO,YAAY,cAAc,GAAG;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,eAAe,WAAW,cAAc;AAC9C,MACE,iBAAiB,QACjB,OAAO,iBAAiB,YACxB,MAAM,QAAQ,YAAY,GAC1B;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,eAAe;AACrB,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,MAAM;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,YAAY,mBAAmB,WAAW,0BAA0B;AAC1E,QAAM,QAAQ,mBAAmB,KAAK,OAAO;AAC7C,MAAI,aAAa,OAAO;AACtB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,gBAAY,MAAM,yBAAyB,YAAY,GAAG;AAAA,EAC5D,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR;AAAA,MACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACvD;AAAA,EACF;AACA,MAAI,SAAS,UAAU,cAAc,SAAS,UAAU;AACtD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmBD,gBAAe,YAAY,YAAY,GAAG;AACnE,MAAI,SAAS,aAAa,kBAAkB;AAC1C,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,mBAAmBA,gBAAe,YAAY,YAAY,GAAG;AACnE,MAAI,SAAS,aAAa,kBAAkB;AAC1C,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,yBAAyBA;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,SAAS,mBAAmB,wBAAwB;AACtD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,wBAAwBC,QAAO,YAAY,uBAAuB,IACpED,gBAAe,YAAY,yBAAyB,GAAG,IACvD;AACJ,MAAI,CAAC,SAAS,wBAAwB,SAAS,qBAAqB,GAAG;AACrE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,2BAA2BC;AAAA,IAC/B;AAAA,IACA;AAAA,EACF,IACID,gBAAe,YAAY,4BAA4B,GAAG,IAC1D;AACJ,MAAI,CAAC,SAAS,2BAA2B,SAAS,wBAAwB,GAAG;AAC3E,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAASH,cACP,OACA,MACAD,OACY;AACZ,MAAI;AACF,UAAM,aAAa,cAAc,KAAK;AACtC,QACE,eAAe,QACf,OAAO,eAAe,YACtB,MAAM,QAAQ,UAAU,GACxB;AACA,YAAM,IAAI,qBAAqBA,OAAM,GAAG,IAAI,oBAAoB;AAAA,IAClE;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iBAAiB,sBAAsB;AACzC,YAAM;AAAA,IACR;AACA,UAAM,IAAI;AAAA,MACRA;AAAA,MACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACvD;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,OAAsC;AACtE,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI;AACF,WAAO,sCAAsC,KAAK;AAAA,EACpD,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR;AAAA,MACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACvD;AAAA,EACF;AACF;AAEA,SAASE,iBACPM,SACA,SACA,MACM;AACN,QAAM,aAAa,IAAI,IAAI,OAAO;AAClC,aAAW,OAAO,OAAO,KAAKA,OAAM,GAAG;AACrC,QAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,IAAI,sBAAsB,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAASD,eACPC,SACA,KACA,MACW;AACX,MAAI,CAACH,QAAOG,SAAQ,GAAG,GAAG;AACxB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI,IAAI,GAAG;AAAA,IAChB;AAAA,EACF;AACA,SAAOA,QAAO,GAAG;AACnB;AAEA,SAASJ,gBAAeI,SAAoB,KAAa,MAAsB;AAC7E,QAAM,QAAQD,eAAcC,SAAQ,KAAK,IAAI;AAC7C,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI,IAAI,GAAG;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YACPA,SACA,KACA,MACAR,OACQ;AACR,MAAI,CAACK,QAAOG,SAAQ,GAAG,GAAG;AACxB,UAAM,IAAI,qBAAqBR,OAAM,GAAG,IAAI,IAAI,GAAG,cAAc;AAAA,EACnE;AACA,QAAM,QAAQQ,QAAO,GAAG;AACxB,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,UAAM,IAAI;AAAA,MACRR;AAAA,MACA,GAAG,IAAI,IAAI,GAAG;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eACPQ,SACA,KACA,MACY;AACZ,QAAM,QAAQD,eAAcC,SAAQ,KAAK,IAAI;AAC7C,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI,IAAI,GAAG;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAASL,eACPK,SACA,KACA,MACsB;AACtB,QAAM,QAAQD,eAAcC,SAAQ,KAAK,IAAI;AAC7C,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI,IAAI,GAAG;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAASF,qBACPE,SACA,KACA,MACU;AACV,QAAM,SAASL,eAAcK,SAAQ,KAAK,IAAI;AAC9C,SAAO,OAAO,IAAI,CAAC,OAAO,UAAU;AAClC,QAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK;AAAA,MACzB;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,gCACP,QACA,MACM;AACN,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACA,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAClD,QAAI,OAAO,KAAK,MAAM,mBAAmB;AACvC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,IAAI,IAAI,KAAK;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,mCACP,QACA,MACM;AACN,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACA,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAClD,QAAI,OAAO,KAAK,MAAM,4BAA4B;AAChD,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,IAAI,IAAI,KAAK;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,oBAAuB,IAAgB;AAC9C,MAAI;AACF,WAAO,GAAG;AAAA,EACZ,SAAS,OAAO;AACd,QAAI,iBAAiB,uBAAuB;AAC1C,YAAM,IAAI,qBAAqB,MAAM,MAAM,MAAM,OAAO;AAAA,IAC1D;AACA,UAAM;AAAA,EACR;AACF;AAEA,SAAS,sBAAsB,OAAuB;AACpD,MAAI,iBAAiB,sBAAsB;AACzC,WAAO;AAAA,EACT;AACA,MACE,iBAAiB,2BACjB,iBAAiB,0BACjB;AACA,WAAO,IAAI;AAAA,MACT;AAAA,MACA,MAAM;AAAA,IACR;AAAA,EACF;AACA,SAAO,IAAI;AAAA,IACT;AAAA,IACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EACvD;AACF;AAEA,SAAS,mBAAmB,OAAe,MAAsB;AAC/D,QAAM,QAAQ,MAAM;AAAA,IAClB;AAAA,EACF;AACA,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACA,QAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,MAAI,OAAO,MAAM,MAAM,GAAG;AACxB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACA,QAAM,YAAY,IAAI,KAAK,MAAM,EAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AACrE,MAAI,cAAc,OAAO;AACvB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAMC,gBAEF,OAGA,UACD,OAAO,UAAU,eAAe,KAAK;AAAA,EACpC,OAAO,UAAU;AACnB;AAEF,SAASJ,QAAOG,SAAoB,KAAsB;AACxD,SAAOC,cAAaD,SAAQ,GAAG;AACjC;;;ACzuBA,oBAAuB;AACvB,oBAAuB;AACvB,IAAAE,kBAAwB;AAIxB,iBAAkB;AAGX,IAAM,mBAAmB;AACzB,IAAM,8BACX;AACK,IAAM,0CACX;AACK,IAAM,sCACX;AACK,IAAM,mCACX;AACK,IAAM,4BACX;AACK,IAAM,iCAAiC;AAEvC,IAAM,mBAAmB;AACzB,IAAM,8BACX;AACK,IAAM,2BACX;AACK,IAAM,8BACX;AACK,IAAM,wBACX;AACK,IAAM,gCACX;AACK,IAAM,4BACX;AAEK,IAAM,oBAAoB;AAC1B,IAAM,iCAAiC;AACvC,IAAM,kBAAkB;AAmI/B,eAAsB,yBAAyB,OAahB;AAC7B,QAAM,UAAU,MAAM,SAAS,WAAW,MAAM,KAAK,UAAU;AAC/D,QAAM,oBAAoB,sBAAsB,MAAM,iBAAiB;AACvE,QAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,GAAG,iBAAiB,eAAe,MAAM,UAAU,GAAG;AAAA,IAC3F,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ,MAAM;AAAA,IACd,SAAS,EAAE,QAAQ,oBAAoB,gBAAgB,mBAAmB;AAAA,IAC1E,MAAM,KAAK,UAAU,EAAE,WAAW,MAAM,WAAW,cAAc,MAAM,cAAc,uBAAuB,MAAM,sBAAsB,IAAI,gCAAgC,EAAE,CAAC;AAAA,EACjL,CAAC;AACD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,8BAA8B,SAAS,MAAM,GAAG;AAClF,QAAM,QAAQ,OAAO,MAAM,SAAS,KAAK,GAAG,kBAAkB;AAC9D,MAAI,OAAO,MAAM,gBAAgB,YAAY,OAAO,MAAM,UAAU,YAAY,MAAM,cAAc,MAAM,aAAa,MAAM,iBAAiB,MAAM;AAClJ,UAAM,IAAI,MAAM,qCAAqC;AACvD,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAmC;AAChE,QAAM,OAAO,SAAS;AACtB,MAAI,CAAC,8BAA8B,KAAK,IAAI,GAAG;AAC7C,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AACA,SAAO;AACT;AAEA,eAAsB,oBAAoB,OAaT;AAC/B,QAAM,UAAU,MAAM,SAAS,WAAW,MAAM,KAAK,UAAU;AAC/D,QAAM,YAAY,MAAM,aAAa,MAAM,yBAAyB,KAAK;AACzE,MAAI,UAAU,cAAc,MAAM,aAAa,UAAU,iBAAiB,MAAM;AAC9E,UAAM,IAAI,MAAM,qCAAqC;AACvD,QAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,0BAA0B,MAAM,UAAU,GAAG;AAAA,IAClF,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ,MAAM;AAAA,IACd,SAAS,EAAE,QAAQ,oBAAoB,gBAAgB,mBAAmB;AAAA,IAC1E,MAAM,KAAK,UAAU,EAAE,WAAW,MAAM,WAAW,aAAa,UAAU,aAAa,OAAO,UAAU,OAAO,OAAO,MAAM,OAAO,cAAc,MAAM,aAAa,CAAC;AAAA,EACvK,CAAC;AACD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,+BAA+B,SAAS,MAAM,GAAG;AACnF,QAAM,QAAQ,OAAO,MAAM,SAAS,KAAK,GAAG,mBAAmB;AAC/D,MAAI,MAAM,aAAa,QAAQ,OAAO,MAAM,eAAe,YAAY,OAAO,MAAM,kBAAkB;AACpG,UAAM,IAAI,MAAM,uCAAuC;AACzD,QAAM,UAAU,uBAAuB,MAAM,eAAe,CAAC,MAAM,eAAe,MAAM,kBAAkB,CAAC;AAC3G,QAAM,sBAAsB,wCAAwC,MAAM,qBAAqB;AAC/F,MAAI,QAAQ,QAAQ,MAAM,cACrB,QAAQ,QAAQ,MAAM,gBACtB,QAAQ,KAAK,cAAc,MAAM,aACjC,QAAQ,KAAK,iBAAiB,MAAM,gBACpC,QAAQ,KAAK,wBAAwB,MAAM,iBAC3C,QAAQ,KAAK,6BAA6B,MAAM,sBAChD,gBAAgB,QAAQ,GAAG,MAAM,gBAAgB,mBAAmB,KACpE,OAAO,QAAQ,MAAM,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,QAAQ,MAAM,QAAQ,KAAK,GAAG,MAAM,QAAQ;AACrG,UAAM,IAAI,MAAM,6CAA6C;AAC/D,SAAO;AACT;AAEO,SAAS,wCACd,OACwE;AACxE,QAAM,cAAkE,CAAC;AACzE,aAAW,OAAO,OAAO;AACvB,UAAM,aAAa,iCAAiC,GAAG;AACvD,QAAI,YAAY,WAAW,QAAQ,MAAM;AACvC,YAAM,IAAI,MAAM,kDAAkD;AACpE,gBAAY,WAAW,QAAQ,IAAI,WAAW,SAAS,eACnD,EAAE,CAAC,WAAW,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,IAC5B,OAAO,YAAY,WAAW,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAAA,MAC9D,MAAM;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,OAAO,WAAW;AAAA,IACpB,CAAC,CAAC,CAAC,CAAC;AAAA,EACV;AACA,SAAO;AACT;AASO,SAAS,mCAAmC,OAKvC;AACV,QAAM,aAAa,MAAM;AACzB,QAAM,UAAU,oBAAI,IAAI,CAAC,UAAU,aAAa,cAAc,YAAY,gBAAgB,SAAS,YAAY,aAAa,cAAc,aAAa,iBAAiB,+BAA+B,aAAa,WAAW,CAAC;AAChO,MAAI,OAAO,KAAK,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,GAAG,CAAC,KACtD,WAAW,WAAW,oCACtB,WAAW,cAAc,MAAM,WAC9B,WAAW,eAAe,sBAAsB,WAAW,eAAe,wBAC1E,WAAW,UAAU,YAAY,WAAW,UAAU,aACvD,OAAO,WAAW,aAAa,YAC/B,OAAO,WAAW,iBAAiB,YACnC,WAAW,cAAc,WAAW,gBACnC,MAAM,yBAAyB,UAAa,WAAW,iBAAiB,MAAM,wBAC/E,CAAC,OAAO,UAAU,WAAW,QAAQ,KACpC,WAAW,WAAsB,KAClC,OAAO,WAAW,cAAc,YAChC,OAAO,WAAW,eAAe,SAAU,QAAO;AACvD,QAAM,YAAY,KAAK,MAAM,WAAW,SAAmB;AAC3D,QAAM,aAAa,KAAK,MAAM,WAAW,UAAoB;AAC7D,QAAM,OAAO,MAAM,OAAO,oBAAI,KAAK,GAAG,QAAQ;AAC9C,MAAI,CAAC,OAAO,SAAS,SAAS,KAAK,CAAC,OAAO,SAAS,UAAU,KACzD,aAAa,OAAO,cAAc,aAAa,aAAa,YAAY,IAAS,QAAO;AAC7F,MAAK,WAAW,aAAa,OAAQ,WAAW,gCAAgC,QAAY,QAAO;AACnG,MAAI,WAAW,aAAa,MAAM,OAAO,WAAW,gCAAgC,YAAY,CAAC,iBAAiB,KAAK,WAAW,2BAA2B,GAAI,QAAO;AACxK,MAAI,WAAW,UAAU,aAAa,WAAW,cAAc,UAAa,WAAW,kBAAkB,QAAY,QAAO;AAC5H,MAAI,WAAW,UAAU,cAAc,OAAO,WAAW,cAAc,YAAY,OAAO,WAAW,kBAAkB,UAAW,QAAO;AACzI,QAAM,YAAY,WAAW;AAC7B,MAAI,CAAC,cAAc,SAAS,KAAK,OAAO,KAAK,SAAS,EAAE,WAAW,KAAK,UAAU,UAAU,aAAa,UAAU,cAAc,WAAW,aAAa,OAAO,UAAU,UAAU,SAAU,QAAO;AACrM,MAAI;AACF,UAAM,YAAa,WAAW,UAAqB,MAAM,KAAK,CAAC,EAAE,CAAC;AAClE,UAAM,cAAc,UAAU,WAAW,UAAU,IAAI,UAAU,OAAO,UAAU,MAAM,WAAW,MAAM,CAAC,IAAI,IAAI,WAAW;AAC7H,QAAI,YAAY,WAAW,MAAM,YAAY,CAAC,MAAM,OAAQ,YAAY,CAAC,MAAM,EAAM,QAAO;AAC5F,UAAM,WAAW,EAAE,GAAG,WAAW;AACjC,WAAO,SAAS;AAChB,WAAO,wBAAQ;AAAA,MACb,gBAAgB,UAAU,KAAK;AAAA,UAC/B,sBAAO,IAAI,YAAY,EAAE,OAAO,wBAAwB,gBAAgB,QAAQ,CAAC,CAAC;AAAA,MAClF,YAAY,MAAM,CAAC;AAAA,IACrB;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,sBAAsB,OAOZ;AAC9B,QAAM,UAAU,MAAM,SAAS,WAAW,MAAM,KAAK,UAAU;AAC/D,QAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,qBAAqB,mBAAmB,MAAM,OAAO,CAAC,IAAI,MAAM,UAAU,GAAG;AAAA,IAClH,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS,EAAE,QAAQ,mBAAmB;AAAA,EACxC,CAAC;AACD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,gCAAgC,SAAS,MAAM,GAAG;AACpF,QAAM,QAAQ,OAAO,MAAM,SAAS,KAAK,GAAG,oBAAoB;AAChE,QAAM,aAAa,OAAO,MAAM,YAAY,wBAAwB;AACpE,MAAI,MAAM,YAAY,MAAM,WACtB,MAAM,UAAU,YAAY,MAAM,UAAU,aAC7C,MAAM,UAAU,WAAW,SAC3B,CAAC,mCAAmC,EAAE,SAAS,MAAM,SAAS,YAAY,sBAAsB,MAAM,sBAAsB,KAAK,MAAM,IAAI,CAAC;AAC/I,UAAM,IAAI,MAAM,uCAAuC;AACzD,QAAM,aAAa,MAAM,eAAe,SAAY,SAAY,OAAO,MAAM,YAAY,wBAAwB;AACjH,MAAK,MAAM,UAAU,eAAgB,eAAe,WAC/C,eAAe,UAAa,CAAC,6BAA6B;AAAA,IAC3D,SAAS,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA,qBAAqB,MAAM;AAAA,EAC7B,CAAC,EAAG,OAAM,IAAI,MAAM,mDAAmD;AACzE,SAAO,EAAE,SAAS,MAAM,SAAS,OAAO,MAAM,OAAO,YAAY,GAAI,eAAe,SAAY,CAAC,IAAI,EAAE,WAAW,EAAG;AACvH;AAEO,SAAS,6BAA6B,OAKjC;AACV,QAAM,QAAQ,MAAM;AACpB,QAAM,UAAU,CAAC,UAAU,aAAa,cAAc,YAAY,gBAAgB,aAAa,UAAU,aAAa,WAAW;AACjI,MAAI,OAAO,KAAK,KAAK,EAAE,WAAW,QAAQ,UAAU,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,SAAS,GAAG,CAAC,KACtG,MAAM,WAAW,6BACjB,MAAM,cAAc,MAAM,WAC1B,MAAM,eAAe,MAAM,WAAW,cACtC,MAAM,aAAa,MAAM,WAAW,YACpC,MAAM,iBAAiB,MAAM,WAAW,gBACxC,MAAM,cAAc,MAAM,WAAW,aACrC,OAAO,MAAM,WAAW,YAAY,MAAM,OAAO,WAAW,KAC5D,OAAO,MAAM,cAAc,SAAU,QAAO;AACjD,QAAM,aAAa,MAAM,cAAc,MAAM,YACxC,MAAM,eAAe,wBAAwB,MAAM,cAAc,MAAM;AAC5E,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,YAAY,MAAM;AACxB,MAAI,CAAC,cAAc,SAAS,KAAK,OAAO,KAAK,SAAS,EAAE,WAAW,KAAK,UAAU,UAAU,aAAa,UAAU,cAAc,MAAM,aAAa,OAAO,UAAU,UAAU,SAAU,QAAO;AAChM,MAAI;AACF,UAAM,YAAa,MAAM,UAAqB,MAAM,KAAK,CAAC,EAAE,CAAC;AAC7D,UAAM,cAAc,UAAU,WAAW,UAAU,IAAI,UAAU,OAAO,UAAU,MAAM,WAAW,MAAM,CAAC,IAAI,IAAI,WAAW;AAC7H,QAAI,YAAY,WAAW,MAAM,YAAY,CAAC,MAAM,OAAQ,YAAY,CAAC,MAAM,EAAM,QAAO;AAC5F,UAAM,WAAW,EAAE,GAAG,MAAM;AAC5B,WAAO,SAAS;AAChB,UAAMC,cAAS,sBAAO,IAAI,YAAY,EAAE,OAAO,4BAA4B,gBAAgB,QAAQ,CAAC,CAAC;AACrG,WAAO,MAAM,WAAW,kBAAkB,IAAIA,OAAM,KAC/C,wBAAQ,OAAO,gBAAgB,UAAU,KAAK,GAAGA,SAAQ,YAAY,MAAM,CAAC,CAAC;AAAA,EACpF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,wBAAwB,OASC;AAC7C,QAAM,UAAU,MAAM,SAAS,WAAW,MAAM,KAAK,UAAU;AAC/D,QAAM,UAAU,MAAM,sBAAsB,EAAE,YAAY,MAAM,YAAY,SAAS,MAAM,SAAS,sBAAsB,MAAM,cAAc,KAAK,MAAM,KAAK,OAAO,QAAQ,CAAC;AAC9K,MAAI,QAAQ,UAAU,YAAY,QAAQ,WAAW,aAAa,MAAM,YAAY,QAAQ,WAAW,iBAAiB,MAAM,gBAAgB,QAAQ,WAAW,UAAU,YAAY,CAAC,OAAO,UAAU,QAAQ,WAAW,QAAQ;AAClO,UAAM,IAAI,MAAM,sCAAsC;AACxD,QAAM,kBAAkB,EAAE,GAAG,QAAQ,WAAW;AAChD,SAAO,gBAAgB;AACvB,QAAM,8BAA8B,QAAI,sBAAO,IAAI,YAAY,EAAE,OAAO,wBAAwB,gBAAgB,eAAe,CAAC,CAAC,CAAC;AAClI,QAAM,WAAW;AAAA,IACf,QAAQ;AAAA,IACR,WAAW,MAAM;AAAA,IACjB,UAAU,MAAM;AAAA,IAChB,cAAc,MAAM;AAAA,IACpB,WAAW,MAAM,OAAO,oBAAI,KAAK,GAAG,YAAY;AAAA,IAChD,OAAO,MAAM,SAAS,gBAAgB,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,CAAC;AAAA,IAChF,UAAW,QAAQ,WAAW,WAAsB;AAAA,IACpD;AAAA,EACF;AACA,QAAM,YAAY,MAAM,MAAM,SAAK,sBAAO,IAAI,YAAY,EAAE,OAAO,gCAAgC,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC9H,MAAI,UAAU,WAAW,GAAI,OAAM,IAAI,MAAM,+CAA+C;AAC5F,QAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,qBAAqB,MAAM,UAAU,GAAG;AAAA,IAC7E,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS,EAAE,QAAQ,oBAAoB,gBAAgB,mBAAmB;AAAA,IAC1E,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM,SAAS,SAAS,EAAE,GAAG,UAAU,WAAW,EAAE,OAAO,WAAW,WAAW,MAAM,UAAU,OAAO,gBAAgB,SAAS,EAAE,EAAE,EAAE,CAAC;AAAA,EAC1K,CAAC;AACD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,iCAAiC,SAAS,MAAM,GAAG;AACrF,SAAO,OAAO,MAAM,SAAS,KAAK,GAAG,qBAAqB;AAC5D;AAEA,eAAsB,mBAAmB,OAWM;AAC7C,MAAI,MAAM,OAAO,WAAW,EAAG,OAAM,IAAI,MAAM,2CAA2C;AAC1F,QAAM,WAAW;AAAA,IACf,QAAQ;AAAA,IACR,WAAW,MAAM;AAAA,IACjB,YAAY,MAAM;AAAA,IAClB,UAAU,MAAM;AAAA,IAChB,cAAc,MAAM;AAAA,IACpB,YAAY,MAAM,OAAO,oBAAI,KAAK,GAAG,YAAY;AAAA,IACjD,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM;AAAA,EACnB;AACA,QAAM,YAAY,MAAM,MAAM,SAAK,sBAAO,IAAI,YAAY,EAAE,OAAO,4BAA4B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC1H,MAAI,UAAU,WAAW,GAAI,OAAM,IAAI,MAAM,kDAAkD;AAC/F,QAAM,UAAU,MAAM,SAAS,WAAW,MAAM,KAAK,UAAU;AAC/D,QAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,WAAW,MAAM,UAAU,GAAG;AAAA,IACnE,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS,EAAE,QAAQ,oBAAoB,gBAAgB,mBAAmB;AAAA,IAC1E,MAAM,KAAK,UAAU,EAAE,YAAY,EAAE,GAAG,UAAU,WAAW,EAAE,OAAO,WAAW,WAAW,MAAM,WAAW,OAAO,gBAAgB,SAAS,EAAE,EAAE,EAAE,CAAC;AAAA,EACtJ,CAAC;AACD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,oCAAoC,SAAS,MAAM,GAAG;AACxF,SAAO,OAAO,MAAM,SAAS,KAAK,GAAG,wBAAwB;AAC/D;AAEA,IAAM,2BAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,oCAAoC;AAAA,EACxC;AAAA,EACA;AACF;AAEA,IAAM,mBAAmB;AAEzB,IAAM,aAAa,oBAAI,IAAY;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,OAAO,OAAgB,OAAwC;AACtE,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI,MAAM,GAAG,KAAK,oBAAoB;AAAA,EAC9C;AACA,SAAO;AACT;AAEA,SAAS,UACP,OACA,SACA,OACM;AACN,QAAM,OAAO,IAAI,IAAI,OAAO;AAC5B,MAAI,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC;AACjD,UAAM,IAAI,MAAM,GAAG,KAAK,4BAA4B;AACxD;AAEA,SAAS,eAAe,OAAgB,OAAuB;AAC7D,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW;AAChD,UAAM,IAAI,MAAM,GAAG,KAAK,6BAA6B;AACvD,SAAO;AACT;AAEA,SAAS,gBAAgB,UAAmD;AAC1E,QAAM,SAAS,SAAS,QAAQ,MAAM;AACtC,QAAM,eAAe,SAAS,IAAI,KAAK,SAAS,MAAM,GAAG,MAAM;AAC/D,QAAM,SAAS,aAAa,WAAW,cAAc;AACrD,QAAM,QAAQ,SAAS,aAAa,MAAM,eAAe,MAAM,IAAI;AACnE,QAAM,OAAO,SAAS,IAAI,KAAK,SAAS,MAAM,SAAS,CAAC;AACxD,MACE,SAAS,MACR,SACG,UAAU,KAAK,KAAK,IACpB,CAAC,aAAa,WAAW,YAAY,KAAK,SAAS,KAAK,YAAY,MACxE,KAAK,WAAW,GAAG,KACnB,KAAK,SAAS,GAAG,KACjB,KAAK,SAAS,IAAI,KAClB,KACG,MAAM,GAAG,EACT,KAAK,CAAC,SAAS,SAAS,OAAO,SAAS,QAAQ,KAAK,WAAW,CAAC,GACpE;AACA,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AACA,SAAO,EAAE,OAAO,KAAK;AACvB;AAEA,SAAS,wBAAwB,UAAwB;AACvD,MAAI,CAAC,SAAS,WAAW,2BAA2B,EAAG,OAAM,IAAI,MAAM,kCAAkC;AACzG,QAAM,OAAO,SAAS,MAAM,4BAA4B,MAAM;AAC9D,QAAM,YAAY,KAAK,YAAY,GAAG;AACtC,QAAM,WAAW,YAAY,IAAI,KAAK,KAAK,MAAM,GAAG,SAAS;AAC7D,QAAM,UAAU,YAAY,IAAI,KAAK,KAAK,MAAM,YAAY,CAAC;AAC7D,MAAI,CAAC,SAAS,WAAW,MAAM,KAAK,QAAQ,WAAW,KAAK,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;AACrL,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AACF;AAEO,SAAS,iCACd,OACyB;AACzB,QAAM,QAAQ,OAAO,OAAO,YAAY;AACxC,QAAM,OAAO,eAAe,MAAM,MAAM,iBAAiB;AACzD,MAAI,SAAS,MAAM;AACjB;AAAA,MACE;AAAA,MACA,CAAC,QAAQ,YAAY,YAAY,SAAS;AAAA,MAC1C;AAAA,IACF;AACA,UAAM,WAAW,eAAe,MAAM,UAAU,qBAAqB;AACrE,oBAAgB,QAAQ;AACxB,QAAI,MAAM,aAAa,WAAW,MAAM,aAAa;AACnD,YAAM,IAAI,MAAM,gCAAgC;AAClD,QAAI,CAAC,MAAM,QAAQ,MAAM,OAAO,KAAK,MAAM,QAAQ,WAAW;AAC5D,YAAM,IAAI,MAAM,+BAA+B;AACjD,UAAM,UAAU,MAAM,QAAQ;AAAA,MAAI,CAAC,WACjC,eAAe,QAAQ,sBAAsB;AAAA,IAC/C;AACA,QACE,IAAI,IAAI,OAAO,EAAE,SAAS,QAAQ,UAClC,QAAQ,KAAK,CAAC,WAAW,CAAC,WAAW,IAAI,MAAM,CAAC;AAEhD,YAAM,IAAI,MAAM,+BAA+B;AACjD,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,UAAU,MAAM;AAAA,MAChB,SAAS,CAAC,GAAG,OAAO,EAAE,KAAK;AAAA,IAC7B;AAAA,EACF;AACA,MAAI,SAAS,cAAc;AACzB,cAAU,OAAO,CAAC,QAAQ,YAAY,QAAQ,GAAG,uBAAuB;AACxE,UAAM,WAAW,eAAe,MAAM,UAAU,qBAAqB;AACrE,QAAI,MAAM,WAAW;AACnB,YAAM,IAAI,MAAM,kCAAkC;AACpD,4BAAwB,QAAQ;AAChC,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AACA,QAAM,IAAI,MAAM,4BAA4B;AAC9C;AAEO,SAAS,oCACd,OACyB;AACzB,SAAO,iCAAiC,KAAK;AAC/C;AAEO,SAAS,iCAAiC,OAAwB;AACvE,SAAO;AAAA,QACL;AAAA,MACE,IAAI,YAAY,EAAE;AAAA,QAChB,8BACE,gBAAgB,iCAAiC,KAAK,CAAC;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,gCACd,gBACA,gBACS;AACT,MAAI;AACF,UAAM,YAAY,iCAAiC,cAAc;AACjE,UAAM,YAAY,iCAAiC,cAAc;AACjE,QAAI,UAAU,SAAS,UAAU,KAAM,QAAO;AAC9C,QAAI,UAAU,SAAS,gBAAgB,UAAU,SAAS;AACxD,aACE,UAAU,aAAa,UAAU,YACjC,UAAU,WAAW,UAAU;AAEnC,QAAI,UAAU,SAAS,QAAQ,UAAU,SAAS,KAAM,QAAO;AAC/D,UAAM,EAAE,UAAU,WAAW,IAAI;AACjC,UAAM,EAAE,UAAU,kBAAkB,IAAI;AACxC,UAAM,gBACJ,UAAU,aAAa,UACnB,eAAe,oBACf,eAAe,qBACf,kBAAkB,WAAW,GAAG,UAAU,GAAG;AACnD,QACE,CAAC,iBACA,UAAU,aAAa,WAAW,UAAU,aAAa;AAE1D,aAAO;AACT,WAAO,UAAU,QAAQ;AAAA,MAAM,CAAC,WAC9B,UAAU,QAAQ,SAAS,MAAM;AAAA,IACnC;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,+BACd,OACyB;AACzB,QAAM,aAAa,iCAAiC,KAAK;AACzD,MAAI,WAAW,SAAS,cAAc;AACpC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,WAAW;AAAA,MAClB,MAAM,WAAW;AAAA,MACjB,SAAS,CAAC,WAAW,MAAM;AAAA,IAC7B;AAAA,EACF;AACA,QAAM,EAAE,OAAO,KAAK,IAAI,gBAAgB,WAAW,QAAQ;AAC3D,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,SAAS,CAAC,GAAG,WAAW,OAAO;AAAA,IAC/B,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,OAAO,WAAW;AAAA,IACpB;AAAA,EACF;AACF;AAEO,SAAS,iCACd,OAC2B;AAC3B,SAAO,MACJ,IAAI,8BAA8B,EAClC,KAAK,CAAC,MAAM,UAAU;AACrB,UAAM,IAAI,gBAAgB,IAAI;AAC9B,UAAM,IAAI,gBAAgB,KAAK;AAC/B,WAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;AAAA,EAClC,CAAC;AACL;AAEO,SAAS,+BACd,OACQ;AACR,SAAO;AAAA,QACL;AAAA,MACE,IAAI,YAAY,EAAE;AAAA,QAChB,8BACE,gBAAgB,iCAAiC,KAAK,CAAC;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,kCACd,OACyB;AACzB,QAAM,QAAQ,OAAO,OAAO,mBAAmB;AAC/C;AAAA,IACE;AAAA,IACA,CAAC,WAAW,SAAS,QAAQ,WAAW,QAAQ;AAAA,IAChD;AAAA,EACF;AACA,QAAM,UAAU,eAAe,MAAM,SAAS,gBAAgB;AAC9D,QAAM,UAAU,MAAM;AACtB,MAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,OAAM,IAAI,MAAM,2BAA2B;AACxE,MACE,YAAY,0BACZ,MAAM,WAAW,UACjB,MAAM,UAAU,MAAM,QACtB,QAAQ,WAAW,KACnB,QAAQ,CAAC,MAAM,gCACf;AACA,WAAO,iCAAiC;AAAA,MACtC,MAAM;AAAA,MACN,UAAU,MAAM;AAAA,MAChB,QAAQ,QAAQ,CAAC;AAAA,IACnB,CAAC;AAAA,EACH;AACA,MACE,YAAY,kBACZ,OAAO,MAAM,UAAU,YACvB,OAAO,MAAM,SAAS;AAEtB,UAAM,IAAI,MAAM,oCAAoC;AACtD,QAAM,SAAS,OAAO,MAAM,QAAQ,eAAe;AACnD,YAAU,QAAQ,CAAC,QAAQ,QAAQ,OAAO,GAAG,wBAAwB;AACrE,MACE,OAAO,SAAS,qCACf,OAAO,SAAS,WAAW,OAAO,SAAS,YAC5C,OAAO,UAAU,GAAG,MAAM,MAAM,WAAW,YAAY,IAAI,MAAM,QAAQ,eAAe,MAAM,KAAK,EAAE,OAAO,MAAM,IAAI;AAEtH,UAAM,IAAI,MAAM,kDAAkD;AACpE,SAAO,iCAAiC;AAAA,IACtC,MAAM;AAAA,IACN,UAAU,OAAO;AAAA,IACjB,UAAU,OAAO;AAAA,IACjB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,uBAAuB,OAAqC;AAC1E,SAAO;AAAA,QACL;AAAA,MACE,IAAI,YAAY,EAAE;AAAA,QAChB,2BAA2B,gBAAgB,KAAK;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,YACP,OACA,MACA,OACyB;AACzB,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI,MAAM,GAAG,KAAK,aAAa;AAAA,EACvC;AACA,QAAMC,UAAS;AACf,MACE,OAAO,KAAKA,OAAM,EAAE,WAAW,KAAK,UACpC,KAAK,KAAK,CAAC,QAAQ,CAAC,OAAO,UAAU,eAAe,KAAKA,SAAQ,GAAG,CAAC,GACrE;AACA,UAAM,IAAI,MAAM,GAAG,KAAK,aAAa;AAAA,EACvC;AACA,SAAOA;AACT;AAEA,SAAS,uBAAuB,OAA2B;AACzD,QAAM,YAAY,MAAM,MAAM,KAAK,CAAC,EAAE,CAAC;AACvC,MAAI,CAAC,UAAU,WAAW,UAAU,GAAG;AACrC,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,QAAM,WAAW,UAAU,OAAO,UAAU,MAAM,WAAW,MAAM,CAAC;AACpE,MAAI,SAAS,WAAW,MAAM,SAAS,CAAC,MAAM,OAAQ,SAAS,CAAC,MAAM,GAAM;AAC1E,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,SAAO,SAAS,MAAM,CAAC;AACzB;AAOA,eAAsB,iBACpB,OACkC;AAClC,QAAM,UAAU,MAAM,SAAS,WAAW,MAAM,KAAK,UAAU;AAC/D,QAAM,gBAAgB,IAAI,KAAK,MAAM,aAAa;AAClD,QAAM,yBAAyB,IAAI;AAAA,IACjC,KAAK,MAAM,cAAc,QAAQ,IAAI,GAAI,IAAI;AAAA,EAC/C,EACG,YAAY,EACZ,QAAQ,WAAW,GAAG;AACzB,MACE,CAAC,OAAO,SAAS,cAAc,QAAQ,CAAC,KACxC,2BAA2B,MAAM,iBACjC,cAAc,QAAQ,KAAK,KAAK,IAAI,GACpC;AACA,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,QAAM,kBAAkB,MAAM;AAAA,IAC5B,IAAI,IAAI,gCAAgC,MAAM,UAAU;AAAA,IACxD;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ,MAAM;AAAA,MACd,SAAS,EAAE,QAAQ,oBAAoB,gBAAgB,mBAAmB;AAAA,MAC1E,MAAM,KAAK,UAAU;AAAA,QACnB,eAAe,MAAM;AAAA,QACrB,aAAa,MAAM;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,CAAC,gBAAgB,IAAI;AACvB,UAAM,IAAI,MAAM,qCAAqC,gBAAgB,MAAM,GAAG;AAAA,EAChF;AACA,QAAM,UAAU;AAAA,IACd,MAAM,gBAAgB,KAAK;AAAA,IAC3B;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,QAAM,YAAY;AAAA,IAChB,QAAQ;AAAA,IACR,CAAC,SAAS,aAAa,OAAO;AAAA,IAC9B;AAAA,EACF;AACA,QAAM,2BAA2B;AAAA,QAC/B;AAAA,MACE,IAAI,YAAY,EAAE;AAAA,QAChB,gBAAgB;AAAA,UACd,aAAa,MAAM;AAAA,UACnB,cAAc,MAAM;AAAA,QACtB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACA,MACE,QAAQ,WAAW,uCACnB,QAAQ,gBAAgB,MAAM,eAC9B,QAAQ,iBAAiB,MAAM,wBAC/B,QAAQ,gCAAgC,4BACxC,QAAQ,cAAc,MAAM,iBAC5B,OAAO,QAAQ,aAAa,YAC5B,KAAK,MAAM,QAAQ,QAAQ,IAAI,KAAK,IAAI,KACxC,UAAU,UAAU,aACpB,UAAU,cAAc,MAAM,wBAC9B,OAAO,UAAU,UAAU,UAC3B;AACA,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AACA,QAAM,EAAE,WAAW,YAAY,GAAG,gBAAgB,IAAI;AACtD,QAAM,oBAAgB;AAAA,IACpB,IAAI,YAAY,EAAE;AAAA,MAChB,oDAAoD,gBAAgB,eAAe,CAAC;AAAA,IACtF;AAAA,EACF;AACA,MACE,CAAC,wBAAQ;AAAA,IACP,gBAAgB,UAAU,KAAK;AAAA,IAC/B;AAAA,IACA,uBAAuB,MAAM,oBAAoB;AAAA,IACjD,EAAE,QAAQ,MAAM;AAAA,EAClB,GACA;AACA,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AAEA,QAAM,WAAW,MAAM;AAAA,IACrB,IAAI,IAAI,uBAAuB,MAAM,UAAU;AAAA,IAC/C;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ,MAAM;AAAA,MACd,SAAS,EAAE,QAAQ,oBAAoB,gBAAgB,mBAAmB;AAAA,MAC1E,MAAM,KAAK,UAAU;AAAA,QACnB,WAAW,MAAM;AAAA,QACjB,QAAQ,MAAM;AAAA,QACd,YAAY,MAAM,WAAW,cAAc,QAAQ,eAAe,EAAE;AAAA,QACpE,iBAAiB,MAAM,gBAAgB,cAAc,QAAQ,eAAe,EAAE;AAAA,QAC9E,wBAAwB,MAAM;AAAA,QAC9B,yBAAyB,MAAM;AAAA,QAC/B,yBAAyB;AAAA,MAC3B,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,iCAAiC,SAAS,MAAM,GAAG;AAAA,EACrE;AACA,QAAM,UAAU;AAAA,IACd,MAAM,SAAS,KAAK;AAAA,IACpB,CAAC,aAAa,iBAAiB,oBAAoB;AAAA,IACnD;AAAA,EACF;AACA,MACE,QAAQ,cAAc,MAAM,aAC5B,QAAQ,kBAAkB,MAAM,WAAW,OAC3C,QAAQ,uBAAuB,MAAM,gBAAgB,KACrD;AACA,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AACA,SAAO;AAAA,IACL,WAAW,MAAM;AAAA,IACjB,eAAe,MAAM,WAAW;AAAA,IAChC,oBAAoB,MAAM,gBAAgB;AAAA,IAC1C,yBAAyB;AAAA,EAC3B;AACF;AAEO,SAAS,gBACd,QACQ;AACR,QAAM,kBAAkB;AAAA,IACtB,GAAG;AAAA,IACH,mBAAmB,OAAO,kBAAkB;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,QACL;AAAA,MACE,IAAI,YAAY,EAAE;AAAA,QAChB,mBAAmB,gBAAgB,eAAe;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,qBAAqB,WAA2B;AAC9D,QAAMD,UAAS,WAAW;AAAA,KACvB,UAAU,MAAM,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,OAAO,SAAS,MAAM,EAAE,CAAC;AAAA,EAC1E;AACA,MAAIA,QAAO,WAAW,GAAI,OAAM,IAAI,MAAM,gCAAgC;AAC1E,SAAO,OAAO,YAAYA,OAAM,CAAC;AACnC;AAEO,SAAS,4BAA4B,OAA2B;AACrE,SAAO,IAAI,SAAS,IAAM,OAAa,QAAM,sBAAO,KAAK,CAAC,CAAC,EAAE,SAAS;AACxE;AAEA,IAAM,sBAAsB,aAAE,OAAO;AAAA,EACnC,KAAK,aAAE,QAAQ,OAAO;AAAA,EACtB,KAAK,aAAE,OAAO,EAAE,KAAK,aAAE,QAAQ,OAAO,GAAG,KAAK,aAAE,QAAQ,SAAS,GAAG,KAAK,aAAE,QAAQ,KAAK,GAAG,GAAG,aAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO;AAAA,EAC1H,KAAK,aAAE,QAAQ,KAAK;AAAA,EACpB,KAAK,aAAE,QAAQ,QAAQ;AACzB,CAAC,EAAE,OAAO;AACV,IAAM,uBAAuB,aAAE,OAAO;AAAA,EACpC,KAAK,aAAE,OAAO,aAAE,OAAO,aAAE,MAAM,aAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAAA,EACnD,KAAK,aAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACrB,KAAK,aAAE,OAAO,EAAE,IAAI;AAAA,EACpB,KAAK,aAAE,MAAM,aAAE,OAAO,aAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA,EAC5C,KAAK,aAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACrB,KAAK,aAAE,OAAO,EAAE,IAAI;AAAA,EACpB,KAAK,aAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACrB,KAAK,aAAE,MAAM,aAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC,EAAE,OAAO;AAgCV,eAAe,gBACb,OACqC;AACrC,QAAM,YAAY,MAAM,UAAU,MAAM,KAAK,CAAC,EAAE,CAAC;AACjD,QAAM,cAAc,UAAU,WAAW,UAAU,IAC/C,UAAU,OAAO,UAAU,MAAM,WAAW,MAAM,CAAC,IACnD,IAAI,WAAW;AACnB,MAAI,YAAY,WAAW,MAAM,YAAY,CAAC,MAAM,OAAQ,YAAY,CAAC,MAAM;AAC7E,UAAM,IAAI,MAAM,6CAA6C;AAC/D,QAAM,SAAS,EAAE,KAAK,SAAS,KAAK,EAAE,KAAK,SAAS,KAAK,WAAW,KAAK,OAAO,GAAG,gBAAgB,YAAY,MAAM,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,KAAK,SAAS;AACtJ,QAAM,UAAU;AAAA,IACd,KAAK,MAAM;AAAA,IACX,KAAK,MAAM;AAAA,IACX,KAAK,MAAM;AAAA,IACX,KAAK,MAAM;AAAA,IACX,KAAK,MAAM,UAAU,SAAS,GAAG,IAAI,MAAM,YAAY,GAAG,SAAS,IAAI,UAAU,MAAM,WAAW,MAAM,CAAC;AAAA,IACzG,KAAK,MAAM;AAAA,IACX,KAAK,MAAM;AAAA,IACX,KAAK,MAAM;AAAA,EACb;AACA,QAAM,mBAAmB,gBAAgB,IAAI,YAAY,EAAE,OAAO,gBAAgB,MAAM,CAAC,CAAC;AAC1F,QAAM,iBAAiB,gBAAgB,IAAI,YAAY,EAAE,OAAO,gBAAgB,OAAO,CAAC,CAAC;AACzF,QAAM,YAAY,MAAM,MAAM,KAAK,IAAI,YAAY,EAAE,OAAO,GAAG,gBAAgB,IAAI,cAAc,EAAE,CAAC;AACpG,MAAI,UAAU,WAAW,GAAI,OAAM,IAAI,MAAM,iDAAiD;AAC9F,SAAO,8BAA8B,GAAG,gBAAgB,IAAI,cAAc,IAAI,gBAAgB,SAAS,CAAC,EAAE;AAC5G;AAGA,eAAsB,6BACpB,OACqC;AACrC,MAAI,MAAM,aAAa,MAAM,aAAa,MAAM,YAAY,MAAM,YAAY;AAC5E,UAAM,IAAI,MAAM,gEAAgE;AAClF,SAAO,gBAAgB,KAAK;AAC9B;AAGA,eAAsB,iCACpB,OACqC;AACrC,MAAI,MAAM,aAAa,MAAM,aAAa,MAAM,YAAY,MAAM,YAAY,KAAK,KAAK,KAAK;AAC3F,UAAM,IAAI,MAAM,qEAAqE;AACvF,SAAO,gBAAgB,EAAE,GAAG,OAAO,QAAQ,CAAC,EAAE,CAAC;AACjD;AAiBO,SAAS,8BACd,OAC4B;AAC5B,QAAM,UAAU,uBAAuB,MAAM,oBAAoB;AACjE,MAAI,QAAQ,QAAQ,MAAM,cAAc,QAAQ,QAAQ,MAAM;AAC5D,UAAM,IAAI,MAAM,mDAAmD;AACrE,QAAM,YAAY,MAAM,aAAa,MAAM,KAAK,CAAC,EAAE,CAAC;AACpD,QAAM,cAAc,UAAU,OAAO,UAAU,MAAM,WAAW,MAAM,CAAC;AACvE,MAAI,YAAY,WAAW,MAAM,YAAY,CAAC,MAAM,OAAQ,YAAY,CAAC,MAAM;AAC7E,UAAM,IAAI,MAAM,kDAAkD;AACpE,QAAM,YAAY,wBAAQ,aAAa,MAAM,UAAU;AACvD,MAAI,CAAC,WAAW,WAAW,YAAY,MAAM,CAAC,CAAC;AAC7C,UAAM,IAAI,MAAM,2DAA2D;AAC7E,QAAM,MAAM,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AACrD,QAAM,MAAM,KAAK,IAAI,MAAM,IAAI,QAAQ,GAAG;AAC1C,MAAI,OAAO,IAAK,OAAM,IAAI,MAAM,4BAA4B;AAC5D,QAAM,SAAS,EAAE,KAAK,SAAS,KAAK,EAAE,KAAK,SAAS,KAAK,WAAW,KAAK,OAAO,GAAG,gBAAgB,SAAS,EAAE,GAAG,KAAK,OAAO,KAAK,SAAS;AAC3I,QAAM,UAAU;AAAA,IACd,KAAK,EAAE,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,MAAM,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,EAAE,EAAE;AAAA,IAClE,KAAK,MAAM;AAAA,IACX;AAAA,IACA,KAAK,CAAC,MAAM,SAAS,EAAE,MAAM,kCAAkC,WAAW,QAAQ,KAAK,WAAW,YAAY,QAAQ,IAAI,CAAC;AAAA,IAC3H,KAAK,MAAM,aAAa,SAAS,GAAG,IAAI,MAAM,eAAe,GAAG,SAAS,IAAI,UAAU,MAAM,WAAW,MAAM,CAAC;AAAA,IAC/G,KAAK;AAAA,IACL,KAAK,MAAM,SAAS,gBAAgB,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,CAAC;AAAA,IAC9E,KAAK,CAAC,QAAQ,GAAG;AAAA,EACnB;AACA,QAAM,mBAAmB,gBAAgB,IAAI,YAAY,EAAE,OAAO,gBAAgB,MAAM,CAAC,CAAC;AAC1F,QAAM,iBAAiB,gBAAgB,IAAI,YAAY,EAAE,OAAO,gBAAgB,OAAO,CAAC,CAAC;AACzF,QAAM,eAAe,IAAI,YAAY,EAAE,OAAO,GAAG,gBAAgB,IAAI,cAAc,EAAE;AACrF,QAAM,YAAY,wBAAQ,KAAK,cAAc,MAAM,UAAU;AAC7D,SAAO,8BAA8B,GAAG,gBAAgB,IAAI,cAAc,IAAI,gBAAgB,SAAS,CAAC,EAAE;AAC5G;AAEO,SAAS,8BAA8B,OAUf;AAC7B,QAAM,SAAS,8BAA8B,MAAM,qBAAqB,MAAM,SAAS;AACvF,MAAI,OAAO,QAAQ,QAAQ,MAAM,UAAW,OAAM,IAAI,MAAM,qDAAqD;AACjH,QAAM,aAAa,OAAO,QAAQ,IAAI,CAAC;AACvC,QAAM,QAAQ,WAAW;AACzB,MAAI,CAAC,OAAO,UAAU,KAAK,KAAM,SAAoB,EAAG,OAAM,IAAI,MAAM,sCAAsC;AAC9G,MAAI,CAAC,2BAA2B,OAAO,QAAQ,KAAK,MAAM,WAAW;AACnE,UAAM,IAAI,MAAM,kDAAkD;AACpE,QAAM,YAAY,MAAM,UAAU,MAAM,KAAK,CAAC,EAAE,CAAC;AACjD,QAAM,cAAc,UAAU,OAAO,UAAU,MAAM,WAAW,MAAM,CAAC;AACvE,QAAM,YAAY,wBAAQ,aAAa,MAAM,UAAU;AACvD,MAAI,YAAY,WAAW,MAAM,CAAC,WAAW,WAAW,YAAY,MAAM,CAAC,CAAC,EAAG,OAAM,IAAI,MAAM,mDAAmD;AAClJ,QAAM,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,GAAG,OAAO,QAAQ,MAAM,CAAC;AACvF,QAAM,MAAM,KAAK,IAAI,MAAM,aAAa,MAAM,IAAI,MAAM,IAAI,OAAO,QAAQ,MAAM,CAAC;AAClF,MAAI,OAAO,IAAK,OAAM,IAAI,MAAM,wDAAwD;AACxF,QAAM,SAAS,EAAE,KAAK,SAAS,KAAK,EAAE,KAAK,SAAS,KAAK,WAAW,KAAK,OAAO,GAAG,gBAAgB,SAAS,EAAE,GAAG,KAAK,OAAO,KAAK,SAAS;AAC3I,QAAM,UAAU;AAAA,IACd,KAAK,MAAM;AAAA,IACX,KAAK,MAAM;AAAA,IACX;AAAA,IACA,KAAK,CAAC,EAAE,GAAG,YAAY,4BAA6B,QAAmB,EAAE,CAAC;AAAA,IAC1E,KAAK,MAAM,UAAU,SAAS,GAAG,IAAI,MAAM,YAAY,GAAG,SAAS,IAAI,UAAU,MAAM,WAAW,MAAM,CAAC;AAAA,IACzG,KAAK;AAAA,IACL,KAAK,MAAM,SAAS,gBAAgB,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,CAAC;AAAA,IAC9E,KAAK,CAAC,OAAO,GAAG;AAAA,EAClB;AACA,QAAM,mBAAmB,gBAAgB,IAAI,YAAY,EAAE,OAAO,gBAAgB,MAAM,CAAC,CAAC;AAC1F,QAAM,iBAAiB,gBAAgB,IAAI,YAAY,EAAE,OAAO,gBAAgB,OAAO,CAAC,CAAC;AACzF,QAAM,YAAY,wBAAQ,KAAK,IAAI,YAAY,EAAE,OAAO,GAAG,gBAAgB,IAAI,cAAc,EAAE,GAAG,MAAM,UAAU;AAClH,SAAO,8BAA8B,GAAG,gBAAgB,IAAI,cAAc,IAAI,gBAAgB,SAAS,CAAC,EAAE;AAC5G;AAGO,SAAS,2BACd,QACA,OACS;AACT,QAAM,WAAW,CAAC,UAAyG;AACzH,QAAI,MAAM,WAAW,KAAK,CAAC,cAAc,MAAM,CAAC,CAAC,EAAG,QAAO;AAC3D,UAAM,SAAS,MAAM,CAAC;AACtB,QAAI,OAAO,KAAK,MAAM,EAAE,WAAW,KAAK,OAAO,SAAS,qCAAsC,OAAO,SAAS,WAAW,OAAO,SAAS,YAAa,OAAO,OAAO,UAAU,SAAU,QAAO;AAC/L,WAAO,EAAE,MAAM,OAAO,MAAM,OAAO,OAAO,MAAM;AAAA,EAClD;AACA,QAAM,QAAQ,CAAC,MAAe,UAA4B,gBAAgB,IAAI,MAAM,gBAAgB,KAAK;AACzG,SAAO,OAAO,QAAQ,KAAK,EAAE;AAAA,IAAM,CAAC,CAAC,eAAe,YAAY,MAC9D,OAAO,QAAQ,YAAY,EAAE;AAAA,MAAM,CAAC,CAAC,QAAQ,YAAY,MACvD,OAAO,QAAQ,MAAM,EAAE,KAAK,CAAC,CAAC,gBAAgB,aAAa,MAAM;AAC/D,cAAM,gBAAgB,cAAc,MAAM;AAC1C,YAAI,kBAAkB,OAAW,QAAO;AACxC,YAAI,mBAAmB,iBAAiB,MAAM,eAAe,YAAY,EAAG,QAAO;AACnF,cAAM,iBAAiB,SAAS,aAAa;AAC7C,cAAM,gBAAgB,SAAS,YAAY;AAC3C,eAAO,gBAAgB,SAAS,YAC3B,kBAAkB,UAClB,eAAe,UAAU,kBACzB,cAAc,UAAU,kBACvB,kBAAkB,kBAAkB,cAAc,WAAW,GAAG,cAAc,GAAG;AAAA,MACzF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,cAAc,OAAkD;AACvE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEO,SAAS,8BACd,OACA,aAC4B;AAC5B,MAAI,OAAO,UAAU,YAAY,KAAK,KAAK,KAAK;AAC9C,UAAM,IAAI,MAAM,0CAA0C;AAC5D,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,MAAI,SAAS,WAAW,KAAK,SAAS,KAAK,CAAC,YAAY,QAAQ,WAAW,CAAC;AAC1E,UAAM,IAAI,MAAM,gDAAgD;AAClE,QAAM,CAAC,eAAe,gBAAgB,gBAAgB,IAAI;AAC1D,QAAM,cAAc,gBAAgB,aAAa;AACjD,QAAM,eAAe,gBAAgB,cAAc;AACnD,QAAM,YAAY,gBAAgB,gBAAgB;AAClD,QAAM,cAAuB,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,WAAW,CAAC;AACrG,QAAM,eAAwB,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,YAAY,CAAC;AACvG,MAAI,gBAAgB,WAAW,MAAM,IAAI,YAAY,EAAE,OAAO,WAAW,KACpE,gBAAgB,YAAY,MAAM,IAAI,YAAY,EAAE,OAAO,YAAY;AAC1E,UAAM,IAAI,MAAM,6CAA6C;AAC/D,QAAM,SAAS,oBAAoB,MAAM,WAAW;AACpD,QAAM,UAAU,qBAAqB,MAAM,YAAY;AACvD,MAAI,QAAQ,OAAO,QAAQ,IAAK,OAAM,IAAI,MAAM,gCAAgC;AAChF,QAAM,YAAY,QAAQ,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAM,cAAc,UAAU,WAAW,UAAU,IAC/C,UAAU,OAAO,UAAU,MAAM,WAAW,MAAM,CAAC,IACnD,IAAI,WAAW;AACnB,MAAI,YAAY,WAAW,MAAM,YAAY,CAAC,MAAM,OAAQ,YAAY,CAAC,MAAM;AAC7E,UAAM,IAAI,MAAM,6CAA6C;AAC/D,QAAM,YAAY,YAAY,MAAM,CAAC;AACrC,MAAI,CAAC,WAAW,WAAW,gBAAgB,OAAO,IAAI,CAAC,CAAC;AACtD,UAAM,IAAI,MAAM,uCAAuC;AACzD,MAAI,CAAC,wBAAQ,OAAO,WAAW,IAAI,YAAY,EAAE,OAAO,GAAG,aAAa,IAAI,cAAc,EAAE,GAAG,SAAS;AACtG,UAAM,IAAI,MAAM,mCAAmC;AACrD,QAAM,MAAM,IAAI,SAAS,IAAM,OAAa,QAAM,sBAAO,IAAI,YAAY,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS;AACrG,MAAI,gBAAgB,UAAa,QAAQ;AACvC,UAAM,IAAI,MAAM,2DAA2D;AAC7E,SAAO,EAAE,eAAe,OAAO,KAAK,QAAQ,QAAQ;AACtD;AAEO,SAAS,uBACd,eACA,gBACqB;AACrB,QAAM,SAAS,8BAA8B,aAAa;AAC1D,QAAM,OAAO,OAAO,QAAQ,IAAI,CAAC;AACjC,MAAI,OAAO,QAAQ,IAAI,WAAW,KAAK,OAAO,QAAQ,IAAI,CAAC,MAAM,OAAO,QAAQ,IAAI,CAAC;AACnF,UAAM,IAAI,MAAM,0DAA0D;AAC5E,MAAI,mBAAmB,WACjB,OAAO,QAAQ,IAAI,CAAC,MAAM,eAAe,CAAC,KAAK,OAAO,QAAQ,IAAI,CAAC,MAAM,eAAe,CAAC;AAC7F,UAAM,IAAI,MAAM,iDAAiD;AACnE,QAAM,WAAW,OAAO,KAAK,IAAI;AACjC,QAAM,qBAAqB,SAAS,WAAW,yBAAyB,UACnE,SAAS,MAAM,CAAC,QAAQ,yBAAyB,SAAS,GAAY,CAAC,KACvE,yBAAyB,MAAM,CAAC,QAAQ,OAAO,IAAI;AACxD,QAAM,sBAAsB,SAAS,WAAW,yBAAyB,SAAS,kCAAkC,UAC/G,SAAS,MAAM,CAAC,QAAQ,yBAAyB,SAAS,GAAY,KAAK,kCAAkC,SAAS,GAAY,CAAC,KACnI,yBAAyB,MAAM,CAAC,QAAQ,OAAO,IAAI,KACnD,kCAAkC,MAAM,CAAC,QAAQ,OAAO,IAAI;AACjE,MAAI,CAAC,sBAAsB,CAAC;AAC1B,UAAM,IAAI,MAAM,wCAAwC;AAC1D,MAAI,wBACE,CAAC,iBAAiB,KAAK,KAAK,0BAAoC,KAC/D,CAAC,iBAAiB,KAAK,KAAK,6BAAuC;AACxE,UAAM,IAAI,MAAM,gDAAgD;AAClE,MACE,KAAK,YAAY,kCACjB,OAAO,KAAK,+BAA+B,YAC3C,CAAC,OAAO,UAAU,KAAK,0BAA0B,KACjD,KAAK,6BAA6B,KAClC,KAAK,6BAA6B,KAClC,OAAO,QAAQ,MAAM,OAAO,QAAQ,MAAM,MAC1C,OAAO,QAAQ,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,MAAM,KAAK,gBAC7C,OAAO,QAAQ,QAAQ,KAAK;AAE5B,UAAM,IAAI,MAAM,qCAAqC;AACvD,SAAO;AAAA,IACL;AAAA,IACA,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO,QAAQ;AAAA,IACpB,KAAK,OAAO,QAAQ;AAAA,IACpB,KAAK,OAAO,QAAQ;AAAA,IACpB,KAAK,OAAO,QAAQ;AAAA,IACpB,KAAK,OAAO,QAAQ;AAAA,IACpB,KAAK,OAAO,QAAQ;AAAA,IACpB,KAAK,OAAO,QAAQ;AAAA,IACpB;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,OAA2B;AAClD,MAAI,CAAC,mBAAmB,KAAK,KAAK,KAAK,MAAM,SAAS,MAAM;AAC1D,UAAM,IAAI,MAAM,kCAAkC;AACpD,QAAM,aAAa,MAAM,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG;AAC7D,QAAM,SAAS,OAAO,SAAS,aAC3B,KAAK,WAAW,OAAO,KAAK,KAAK,WAAW,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,IACjE,OAAO,KAAK,YAAY,QAAQ,EAAE,SAAS,QAAQ;AACvD,QAAM,QAAQ,WAAW,KAAK,QAAQ,CAAC,cAAc,UAAU,WAAW,CAAC,CAAC;AAC5E,QAAM,UAAU,OAAO,SAAS,aAC5B,KAAK,OAAO,aAAa,GAAG,KAAK,CAAC,EAAE,QAAQ,MAAM,EAAE,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,IAC5F,OAAO,KAAK,KAAK,EAAE,SAAS,WAAW;AAC3C,MAAI,YAAY,MAAO,OAAM,IAAI,MAAM,kCAAkC;AACzE,SAAO;AACT;AAEA,SAAS,gBAAgB,OAA2B;AAClD,SAAO,OAAO,SAAS,aACnB,KAAK,OAAO,aAAa,GAAG,KAAK,CAAC,EAAE,QAAQ,MAAM,EAAE,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,IAC5F,OAAO,KAAK,KAAK,EAAE,SAAS,WAAW;AAC7C;AAEA,SAAS,WAAW,MAAkB,OAA4B;AAChE,SAAO,KAAK,WAAW,MAAM,UAAU,KAAK,MAAM,CAAC,MAAM,UAAU,SAAS,MAAM,KAAK,CAAC;AAC1F;AAEA,SAAS,IAAI,OAA2B;AACtC,SAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC7E;AAEA,SAAS,YAAY,OAA2B;AAC9C,QAAME,YAAW;AACjB,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,OAAO;AACX,aAAW,QAAQ,OAAO;AACxB,aAAU,UAAU,IAAK;AACzB,YAAQ;AACR,WAAO,QAAQ,GAAG;AAChB,gBAAUA,UAAU,WAAY,OAAO,IAAM,EAAE;AAC/C,cAAQ;AAAA,IACV;AAAA,EACF;AACA,MAAI,OAAO,EAAG,WAAUA,UAAU,UAAW,IAAI,OAAS,EAAE;AAC5D,SAAO;AACT;;;ACpyCA,IAAAC,kBAAwB;AACxB,IAAAC,iBAAuB;;;ACChB,SAASC,iBAAgB,OAA2B;AACzD,MAAI,OAAO,SAAS,YAAY;AAC9B,QAAI,SAAS;AACb,eAAW,QAAQ,MAAO,WAAU,OAAO,aAAa,IAAI;AAC5D,WAAO,KAAK,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,QAAQ,EAAE;AAAA,EAChF;AACA,SAAO,OAAO,KAAK,KAAK,EAAE,SAAS,WAAW;AAChD;AAWA,eAAsB,gBAAgB,OAA6C;AACjF,QAAM,QAAQ,OAAO,UAAU,WAAW,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI;AAC5E,SAAOC,iBAAgB,IAAI,WAAW,MAAM,OAAO,OAAO,OAAO,WAAW,KAAK,CAAC,CAAC;AACrF;AAEA,eAAsB,gBAAgB,OAAiC;AACrE,SAAO,gBAAgB,gBAAgB,KAAK,CAAC;AAC/C;AAEO,SAAS,SAAS,OAAiC;AACxD,SAAO,OAAO,UAAU,YAAY,sBAAsB,KAAK,KAAK;AACtE;;;ACZA,IAAM,cAAc,oBAAI,IAAyB;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,kBAAN,cAA8B,MAAM;AAAA,EAIzC,YACWC,OACT,SACS,UAKL,CAAC,GACL;AACA,UAAM,OAAO;AATJ,gBAAAA;AAEA;AANX,SAAS,OAAO;AAcd,SAAK,cAAc,YAAY,IAAIA,KAAI;AAAA,EACzC;AACF;;;AC7CA,IAAM,KAAK;AAkBJ,SAAS,8BAA8B,OAAuC;AACnF,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,EAAG,OAAM,IAAI,gBAAgB,uBAAuB,mCAAmC;AAC7J,QAAM,MAAM;AACZ,MAAI,OAAO,KAAK,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,WAAW,WAAW,kBAAkB,UAAU,eAAe,EAAE,SAAS,GAAG,CAAC,KAAK,IAAI,SAAS,oCAAoC,IAAI,YAAY,EAAG,OAAM,IAAI,gBAAgB,uBAAuB,+CAA+C;AACtS,QAAM,OAAO,CAAC,WAAoB,UAAkB;AAClD,QAAI,OAAO,cAAc,YAAY,cAAc,QAAQ,MAAM,QAAQ,SAAS,EAAG,OAAM,IAAI,gBAAgB,uBAAuB,GAAG,KAAK,aAAa;AAC3J,UAAM,OAAO;AACb,QAAI,OAAO,KAAK,IAAI,EAAE,WAAW,KAAK,OAAO,KAAK,OAAO,YAAY,CAAC,GAAG,KAAK,KAAK,EAAE,KAAK,KAAK,YAAY,EAAG,OAAM,IAAI,gBAAgB,uBAAuB,GAAG,KAAK,yBAAyB;AAChM,WAAO,EAAE,IAAI,KAAK,IAAI,SAAS,EAAW;AAAA,EAC5C;AACA,MAAI,OAAO,IAAI,WAAW,YAAY,IAAI,WAAW,QAAQ,MAAM,QAAQ,IAAI,MAAM,EAAG,OAAM,IAAI,gBAAgB,uBAAuB,+BAA+B;AACxK,QAAM,SAAiC,CAAC;AACxC,aAAW,CAAC,KAAKC,MAAK,KAAK,OAAO,QAAQ,IAAI,MAAiC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,GAAG;AACvH,QAAI,CAAC,GAAG,KAAK,GAAG,KAAK,OAAOA,WAAU,YAAYA,OAAM,WAAW,KAAKA,OAAM,SAAS,KAAM,OAAM,IAAI,gBAAgB,uBAAuB,6BAA6B;AAC3K,WAAO,GAAG,IAAIA;AAAA,EAChB;AACA,MAAI,IAAI,kBAAkB,WAAc,CAAC,OAAO,cAAc,IAAI,aAAa,KAAM,IAAI,gBAA2B,GAAI,OAAM,IAAI,gBAAgB,uBAAuB,iCAAiC;AAC1M,SAAO,OAAO,OAAO,EAAE,MAAM,kCAAkC,SAAS,GAAG,SAAS,KAAK,IAAI,SAAS,SAAS,GAAG,gBAAgB,KAAK,IAAI,gBAAgB,gBAAgB,GAAG,QAAQ,OAAO,OAAO,MAAM,GAAG,GAAI,IAAI,kBAAkB,SAAY,CAAC,IAAI,EAAE,eAAe,IAAI,cAAwB,EAAG,CAAC;AAC3S;AAEA,eAAsB,4BAA4B,aAAqD;AACrG,SAAO,gBAAgB,8BAA8B,WAAW,CAAC;AACnE;;;AHZO,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AACzB,IAAM,wCACX;AACK,IAAM,gCACX;AACK,IAAM,gCACX;AACK,IAAM,gCACX;AACK,IAAM,gCACX;AAmFF,SAAS,OAAO,OAAgB,OAAwC;AACtE,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI,MAAM,GAAG,KAAK,oBAAoB;AAAA,EAC9C;AACA,SAAO;AACT;AAEA,SAASC,WACP,OACA,MACA,OACM;AACN,QAAM,WAAW,CAAC,GAAG,IAAI,EAAE,KAAK;AAChC,QAAM,SAAS,OAAO,KAAK,KAAK,EAAE,KAAK;AACvC,MACE,OAAO,WAAW,SAAS,UAC3B,OAAO,KAAK,CAAC,KAAK,UAAU,QAAQ,SAAS,KAAK,CAAC,GACnD;AACA,UAAM,IAAI,MAAM,GAAG,KAAK,uCAAuC;AAAA,EACjE;AACF;AAEA,SAAS,SAAS,OAAgB,OAAuB;AACvD,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,UAAM,IAAI,MAAM,GAAG,KAAK,6BAA6B;AAAA,EACvD;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAuB;AAC/C,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,KAAK;AAAA,EACrB,QAAQ;AACN,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,MACE,IAAI,aAAa,YACjB,IAAI,aAAa,MACjB,IAAI,aAAa,MACjB,IAAI,aAAa,OACjB,IAAI,WAAW,MACf,IAAI,SAAS,IACb;AACA,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,SAAO,IAAI;AACb;AAEA,SAAS,YACP,OACA,OAC8C;AAC9C,QAAM,OAAO,OAAO,OAAO,KAAK;AAChC,EAAAA,WAAU,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK;AACxC,MAAI,KAAK,YAAY,EAAG,OAAM,IAAI,MAAM,GAAG,KAAK,yBAAyB;AACzE,SAAO,OAAO,OAAO,EAAE,IAAI,SAAS,KAAK,IAAI,GAAG,KAAK,KAAK,GAAG,SAAS,EAAE,CAAC;AAC3E;AAEO,SAAS,sCACd,OAC+B;AAC/B,QAAM,OAAO,OAAO,OAAO,+BAA+B;AAC1D,EAAAA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,MACE,KAAK,SAAS,yCACd,KAAK,YAAY,KACjB,CAAC,SAAS,KAAK,iBAAiB,KAChC,CAAC,SAAS,KAAK,gBAAgB,GAC/B;AACA,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,SAAO,OAAO,OAAO;AAAA,IACnB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,mBAAmB,KAAK;AAAA,IACxB,kBAAkB,KAAK;AAAA,IACvB,WAAW,SAAS,KAAK,WAAW,0BAA0B;AAAA,IAC9D,WAAW,SAAS,KAAK,WAAW,8BAA8B;AAAA,IAClE,SAAS,YAAY,KAAK,SAAS,2BAA2B;AAAA,IAC9D,gBAAgB;AAAA,MACd,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAASC,KAAI,OAA2B;AACtC,SAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC7E;AAEO,SAAS,kBAAkB,OAAwC;AACxE,QAAM,kBAAkB;AAAA,IACtB,GAAG;AAAA,IACH,uBAAuB;AAAA,MACrB,MAAM;AAAA,IACR;AAAA,IACA,mBAAmB,MAAM,kBAAkB;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AACA,SAAOA;AAAA,QACL;AAAA,MACE,IAAI,YAAY,EAAE;AAAA,QAChB,mBAAmB,gBAAgB,eAAe;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,KAAK,OAAgB,OAAuB;AACnD,QAAM,OAAO,SAAS,OAAO,KAAK;AAClC,MAAI,CAAC,OAAO,SAAS,KAAK,MAAM,IAAI,CAAC,EAAG,OAAM,IAAI,MAAM,GAAG,KAAK,aAAa;AAC7E,SAAO;AACT;AAEA,SAAS,eAAe,OAAqB;AAC3C,SAAO,IAAI,KAAK,KAAK,MAAM,MAAM,QAAQ,IAAI,GAAI,IAAI,GAAI,EACtD,YAAY,EACZ,QAAQ,WAAW,GAAG;AAC3B;AAOO,SAAS,wBACd,OACA,mBACiB;AACjB,QAAM,OAAO,OAAO,OAAO,WAAW;AACtC,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,KAAK,cAAc,SAAY,CAAC,IAAI,CAAC,WAAW;AAAA,EACtD;AACA,EAAAD,WAAU,MAAM,SAAS,WAAW;AACpC,MAAI,KAAK,WAAW,oBAAoB,CAAC,MAAM,QAAQ,KAAK,iBAAiB,GAAG;AAC9E,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AACA,QAAM,WAAW,SAAS,KAAK,UAAU,oBAAoB;AAC7D,QAAM,YAAY,OAAO,KAAK,WAAW,qBAAqB;AAC9D,EAAAA,WAAU,WAAW,CAAC,SAAS,aAAa,OAAO,GAAG,qBAAqB;AAC3E,MACE,UAAU,UAAU,aACpB,UAAU,cAAc,YACxB,OAAO,UAAU,UAAU,YAC3B,UAAU,MAAM,WAAW,GAC3B;AACA,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACA,QAAM,SAAS,OAAO,OAAO;AAAA,IAC3B,QAAQ;AAAA,IACR,UAAU,SAAS,KAAK,UAAU,oBAAoB;AAAA,IACtD;AAAA,IACA,WAAW,KAAK,KAAK,WAAW,qBAAqB;AAAA,IACrD,GAAI,KAAK,cAAc,SACnB,CAAC,IACD,EAAE,WAAW,KAAK,KAAK,WAAW,qBAAqB,EAAE;AAAA,IAC7D,eAAe,KAAK;AAAA,IACpB,mBAAmB,OAAO;AAAA,MACxB,KAAK,kBAAkB,IAAI,gCAAgC;AAAA,IAC7D;AAAA,IACA,uBAAuB;AAAA,MACrB,KAAK;AAAA,IACP;AAAA,IACA,WAAW,OAAO,OAAO;AAAA,MACvB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO,UAAU;AAAA,IACnB,CAAC;AAAA,EACH,CAAC;AACD,QAAM,WAAW,EAAE,GAAG,OAAO;AAC7B,SAAO,SAAS;AAChB,SAAO,SAAS;AAChB,QAAM,YAAY,kBAAkB,QAAmC;AACvE,MAAI,OAAO,aAAa,qBAAqB,SAAS,GAAG;AACvD,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AACA,MAAI,sBAAsB,QAAW;AACnC,UAAM,MAAM;AAAA,MACV,IAAI,YAAY,EAAE,OAAO,gBAAgB,MAAM,CAAC;AAAA,IAClD;AACA,QAAI,QAAQ,kBAAmB,OAAM,IAAI,MAAM,kCAAkC;AAAA,EACnF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,KAAyB;AAC5C,QAAM,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;AACrC,MAAI,CAAC,UAAU,WAAW,UAAU,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACnF,QAAM,WAAW,UAAU,OAAO,UAAU,MAAM,WAAW,MAAM,CAAC;AACpE,MAAI,SAAS,WAAW,MAAM,SAAS,CAAC,MAAM,OAAQ,SAAS,CAAC,MAAM,GAAM;AAC1E,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACA,SAAO,SAAS,MAAM,CAAC;AACzB;AAEA,SAAS,qBACP,UAC0B;AAC1B,QAAM;AAAA,IAAE,YAAY;AAAA,IAAa,kBAAkB;AAAA,IACjD,iBAAiB;AAAA,IAAkB,GAAG;AAAA,EAAS,IAAI;AACrD,SAAO;AACT;AAEO,SAAS,qCACd,UAC0B;AAC1B,SAAO,qBAAqB,QAAQ;AACtC;AAGA,eAAsB,mCACpB,OACA,MACyC;AACzC,QAAM,OAAO,OAAO,OAAO,wBAAwB;AACnD,EAAAA,WAAU,MAAM;AAAA,IACd;AAAA,IAAU;AAAA,IAAO;AAAA,IAAe;AAAA,IAAS;AAAA,IAAa;AAAA,IACtD;AAAA,IAAa;AAAA,IAAc;AAAA,IAAoB;AAAA,IAC/C;AAAA,IAAoB;AAAA,IAAyB;AAAA,IAAY;AAAA,EAC3D,GAAG,wBAAwB;AAC3B,MACE,KAAK,WAAW,iCAChB,KAAK,cAAc,KAAK,cACxB,CAAC,MAAM,QAAQ,KAAK,qBAAqB,EACzC,OAAM,IAAI,MAAM,mCAAmC;AACrD,QAAM,YAAY,SAAS,KAAK,WAAW,mCAAmC;AAC9E,cAAY,SAAS;AACrB,QAAM,WAAW,OAAO,OAAO;AAAA,IAC7B,QAAQ;AAAA,IACR,KAAK,SAAS,KAAK,KAAK,4BAA4B;AAAA,IACpD,aAAa,SAAS,KAAK,aAAa,kCAAkC;AAAA,IAC1E,OAAO,SAAS,KAAK,OAAO,8BAA8B;AAAA,IAC1D,WAAW,SAAS,KAAK,WAAW,mCAAmC;AAAA,IACvE,cAAc,SAAS,KAAK,cAAc,iCAAiC;AAAA,IAC3E;AAAA,IACA,YAAY;AAAA,IACZ,kBAAkB,SAAS,KAAK,kBAAkB,0CAA0C;AAAA,IAC5F,mBAAmB,SAAS,KAAK,mBAAmB,2CAA2C;AAAA,IAC/F,kBAAkB,SAAS,KAAK,kBAAkB,0CAA0C;AAAA;AAAA;AAAA,IAG5F,uBAAuB,OAAO,OAAO,KAAK,qBAAkD;AAAA,IAC5F,UAAU,KAAK,KAAK,UAAU,iCAAiC;AAAA,IAC/D,WAAW,KAAK,KAAK,WAAW,kCAAkC;AAAA,EACpE,CAAC;AACD,QAAME,cAAS,uBAAO,IAAI,YAAY,EAAE;AAAA,IACtC,gCAAgC,gBAAgB,QAAQ;AAAA,EAC1D,CAAC;AACD,QAAM,YAAY,MAAM,KAAKA,OAAM;AACnC,MACE,UAAU,WAAW,MACrB,CAAC,wBAAQ,OAAO,WAAWA,SAAQ,YAAY,SAAS,CAAC,EACzD,OAAM,IAAI,MAAM,0CAA0C;AAC5D,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG;AAAA,IACH,WAAW,OAAO,OAAO;AAAA,MACvB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAOC,iBAAgB,SAAS;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AACH;AAcA,eAAsB,oCACpB,OACyC;AACzC,QAAM,SAAS,wBAAwB,MAAM,QAAQ,MAAM,SAAS;AACpE,QAAM,cAAc,8BAA8B,MAAM,WAAW;AACnE,QAAM,aAAa,OAAO;AAC1B,QAAM,oBAAoB,MAAM,4BAA4B,WAAW;AACvE,QAAM,mBAAmB,MAAM,gBAAgB,MAAM,WAAW,UAAU;AAC1E,MACE,sBAAsB,WAAW,qBACjC,MAAM,WAAW,qBAAqB,WAAW,oBACjD,MAAM,WAAW,qBAAqB,oBACtC,MAAM,WAAW,cAAc,WAAW,aAC1C,MAAM,WAAW,cAAc,WAAW,aAC1C,gBAAgB,MAAM,WAAW,OAAO,MAAM,gBAAgB,WAAW,OAAO,KAChF,gBAAgB,MAAM,WAAW,cAAc,MAAM,gBAAgB,WAAW,cAAc,EAC9F,OAAM,IAAI,MAAM,4DAA4D;AAC9E,QAAM,wBAAwB,MAAM,sBAAsB,IAAI,gCAAgC;AAC9F,MACE,sBAAsB,WAAW,KACjC,sBAAsB,KAAK,CAAC,cAC1B,CAAC,OAAO,kBAAkB,KAAK,CAAC,cAC9B,gCAAgC,WAAW,SAAS,CAAC,CAAC,EAC1D,OAAM,IAAI,MAAM,4DAA4D;AAC9E,QAAM,YAAY,MAAM,WAAW;AACnC,MACE,MAAM,UAAU,cAAc,MAAM,aACpC,MAAM,UAAU,iBAAiB,aACjC,MAAM,WAAW,eAAe,aAChC,OAAO,MAAM,UAAU,iBAAiB,YACxC,MAAM,UAAU,aAAa,WAAW,KACxC,OAAO,MAAM,UAAU,cAAc,YACrC,CAAC,OAAO,SAAS,KAAK,MAAM,MAAM,UAAU,SAAS,CAAC,EACtD,OAAM,IAAI,MAAM,qCAAqC;AACvD,QAAM,MAAM,MAAM,OAAO,oBAAI,KAAK;AAClC,QAAM,cAAc,KAAK;AAAA,IACvB,IAAI,QAAQ,IAAI;AAAA,IAChB,KAAK,MAAM,MAAM,UAAU,SAAS;AAAA,IACpC,KAAK,MAAM,MAAM,WAAW,SAAS;AAAA,EACvC;AACA,MAAI,eAAe,IAAI,QAAQ,EAAG,OAAM,IAAI,MAAM,6BAA6B;AAC/E,SAAO,mCAAmC,OAAO,OAAO;AAAA,IACtD,QAAQ;AAAA,IACR,KAAK,MAAM,OAAOA,iBAAgB,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,CAAC;AAAA,IAC5E,aAAa,MAAM,UAAU;AAAA,IAC7B,OAAO,MAAM,UAAU;AAAA,IACvB,WAAW,MAAM;AAAA,IACjB,cAAc,MAAM,UAAU;AAAA,IAC9B;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,kBAAkB,MAAM,WAAW;AAAA,IACnC,uBAAuB,OAAO,OAAO,qBAAqB;AAAA,IAC1D,UAAU,eAAe,GAAG;AAAA,IAC5B,WAAW,eAAe,IAAI,KAAK,WAAW,CAAC;AAAA,EACjD,CAAC,GAAG,MAAM,IAAI;AAChB;AAeA,eAAsB,oCACpB,OACyC;AACzC,QAAM,SAAS,wBAAwB,MAAM,QAAQ,MAAM,SAAS;AACpE,QAAM,cAAc,8BAA8B,MAAM,WAAW;AACnE,QAAM,aAAa,OAAO;AAC1B,QAAM,oBAAoB,MAAM,4BAA4B,WAAW;AACvE,QAAM,mBAAmB,MAAM,gBAAgB,MAAM,WAAW,UAAU;AAC1E,MACE,sBAAsB,WAAW,qBACjC,MAAM,WAAW,qBAAqB,WAAW,oBACjD,MAAM,WAAW,qBAAqB,oBACtC,MAAM,WAAW,cAAc,WAAW,aAC1C,MAAM,WAAW,cAAc,WAAW,aAC1C,gBAAgB,MAAM,WAAW,OAAO,MAAM,gBAAgB,WAAW,OAAO,KAChF,gBAAgB,MAAM,WAAW,cAAc,MAC7C,gBAAgB,WAAW,cAAc,GAC3C;AACA,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC9E;AACA,QAAM,wBAAwB,MAAM,sBAAsB;AAAA,IACxD;AAAA,EACF;AACA,MACE,sBAAsB,WAAW,KACjC,sBAAsB;AAAA,IACpB,CAAC,cACC,CAAC,OAAO,kBAAkB;AAAA,MAAK,CAAC,cAC9B,gCAAgC,WAAW,SAAS;AAAA,IACtD;AAAA,EACJ,GACA;AACA,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC9E;AACA,QAAM,YAAY,MAAM;AACxB,QAAM,YAAY,MAAM,WAAW;AACnC,MACE,UAAU,cAAc,MAAM,aAC9B,UAAU,iBAAiB,aAC3B,MAAM,WAAW,eAAe,aAChC,OAAO,UAAU,iBAAiB,YAClC,UAAU,aAAa,WAAW,KAClC,OAAO,UAAU,cAAc,YAC/B,CAAC,OAAO,SAAS,KAAK,MAAM,UAAU,SAAS,CAAC,GAChD;AACA,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,cAAY,SAAS;AACrB,QAAM,MAAM,MAAM,OAAO,oBAAI,KAAK;AAClC,QAAM,kBAAkB,KAAK,MAAM,UAAU,SAAS;AACtD,QAAM,mBAAmB,KAAK,MAAM,MAAM,WAAW,SAAS;AAC9D,QAAM,cAAc,KAAK;AAAA,IACvB,IAAI,QAAQ,IAAI;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AACA,MAAI,eAAe,IAAI,QAAQ,EAAG,OAAM,IAAI,MAAM,6BAA6B;AAC/E,QAAM,WAAW,OAAO,OAAO;AAAA,IAC7B,QAAQ;AAAA,IACR,KACE,MAAM,OACNA,iBAAgB,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,CAAC;AAAA,IAC5D,aAAa,UAAU;AAAA,IACvB,OAAO,UAAU;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,cAAc,UAAU;AAAA,IACxB;AAAA,IACA,YAAY,MAAM,WAAW;AAAA,IAC7B,yBAAyB;AAAA,MACvB,MAAM;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB,MAAM,WAAW;AAAA,IACnC,uBAAuB,OAAO,OAAO,qBAAqB;AAAA,IAC1D,UAAU,eAAe,GAAG;AAAA,IAC5B,WAAW,eAAe,IAAI,KAAK,WAAW,CAAC;AAAA,EACjD,CAAC;AACD,QAAMD,cAAS;AAAA,IACb,IAAI,YAAY,EAAE;AAAA,MAChB,gCAAgC,gBAAgB,QAAQ;AAAA,IAC1D;AAAA,EACF;AACA,QAAM,YAAY,MAAM,MAAM,KAAKA,OAAM;AACzC,MACE,UAAU,WAAW,MACrB,CAAC,wBAAQ,OAAO,WAAWA,SAAQ,YAAY,SAAS,CAAC,GACzD;AACA,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG;AAAA,IACH,WAAW,OAAO,OAAO;AAAA,MACvB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAOC,iBAAgB,SAAS;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AACH;AA2BA,eAAsB,wBACpB,OACsC;AACtC,QAAM,SAAS,wBAAwB,MAAM,QAAQ,MAAM,SAAS;AACpE,QAAM,aAAa,iBAAiB,MAAM,UAAU;AACpD,QAAM,0BAA0B;AAAA,IAC9B,MAAM;AAAA,IACN;AAAA,EACF;AACA,QAAM,oBAAoB;AAAA,IACxB,MAAM;AAAA,IACN;AAAA,EACF;AACA,QAAM,UAAU,MAAM,SAAS,WAAW,MAAM,KAAK,UAAU;AAC/D,QAAM,YAAY,MAAM,yBAAyB;AAAA,IAC/C;AAAA,IACA,mBAAmB,MAAM;AAAA,IACzB,WAAW,MAAM;AAAA,IACjB,cAAc,MAAM,WAAW;AAAA,IAC/B,uBAAuB,MAAM;AAAA,IAC7B,OAAO;AAAA,IACP,QAAQ,MAAM;AAAA,EAChB,CAAC;AACD,QAAM,eAAe,MAAM,oCAAoC;AAAA,IAC7D,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,WAAW,MAAM;AAAA,IACrB,IAAI,IAAI,GAAGC,uBAAsB,MAAM,iBAAiB,CAAC,gBAAgB,UAAU;AAAA,IACnF;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ,MAAM;AAAA,MACd,SAAS,EAAE,QAAQ,oBAAoB,gBAAgB,mBAAmB;AAAA,MAC1E,MAAM,KAAK,UAAU;AAAA,QACnB,WAAW,MAAM;AAAA,QACjB,aAAa,UAAU;AAAA,QACvB,OAAO,UAAU;AAAA,QACjB,aAAa,8BAA8B,MAAM,WAAW;AAAA,QAC5D,YAAY,qBAAqB,MAAM,UAAU;AAAA,QACjD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,+BAA+B,SAAS,MAAM,GAAG;AACnF,QAAM,QAAQ,OAAO,MAAM,SAAS,KAAK,GAAG,mBAAmB;AAC/D,MACE,MAAM,aAAa,QACnB,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,kBAAkB,UAC/B;AACA,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AACA,QAAM,UAAU,uBAAuB,MAAM,eAAe;AAAA,IAC1D,MAAM;AAAA,IACN,MAAM;AAAA,EACR,CAAC;AACD,QAAM,sBAAsB;AAAA,IAC1B,MAAM;AAAA,EACR;AACA,MACE,QAAQ,QAAQ,MAAM,cACtB,QAAQ,QAAQ,MAAM,WAAW,aACjC,QAAQ,KAAK,cAAc,MAAM,aACjC,QAAQ,KAAK,iBAAiB,MAAM,WAAW,aAC/C,QAAQ,KAAK,wBAAwB,MAAM,iBAC3C,QAAQ,KAAK,6BAA6B,MAAM,sBAChD,gBAAgB,QAAQ,GAAG,MAAM,gBAAgB,mBAAmB,GACpE;AACA,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACA,QAAM,QAAQ,eAAe;AAC7B,SAAO,OAAO,OAAO,EAAE,WAAW,cAAc,QAAQ,CAAC;AAC3D;AAwBO,SAAS,6CACd,SACA,UACM;AACN,MAAI,QAAQ,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,MAAM,SAAS,gBACzC,QAAQ,KAAK,iBAAiB,SAAS,gBACvC,QAAQ,KAAK,gBAAgB,SAAS,YAAa,OAAM,IAAI,MAAM,gDAAgD;AAC1H;AAGA,eAAsB,wBACpB,OACsC;AACtC,QAAM,SAAS,wBAAwB,MAAM,QAAQ,MAAM,SAAS;AACpE,QAAM,aAAa,iBAAiB,MAAM,UAAU;AACpD,QAAM,UAAU,MAAM,SAAS,WAAW,MAAM,KAAK,UAAU;AAC/D,QAAM,YAAY,MAAM,yBAAyB;AAAA,IAC/C;AAAA,IACA,mBAAmB,MAAM;AAAA,IACzB,WAAW,MAAM;AAAA,IACjB,cAAc,MAAM,WAAW;AAAA,IAC/B,uBAAuB,MAAM;AAAA,IAC7B,OAAO;AAAA,IACP,QAAQ,MAAM;AAAA,EAChB,CAAC;AACD,QAAM,eAAe,MAAM,oCAAoC;AAAA,IAC7D,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,GAAGA,uBAAsB,MAAM,iBAAiB,CAAC,gBAAgB,UAAU,GAAG;AAAA,IACnH,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ,MAAM;AAAA,IACd,SAAS,EAAE,QAAQ,oBAAoB,gBAAgB,mBAAmB;AAAA,IAC1E,MAAM,KAAK,UAAU;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,aAAa,UAAU;AAAA,MACvB,OAAO,UAAU;AAAA,MACjB,aAAa,8BAA8B,MAAM,WAAW;AAAA,MAC5D,YAAY,qBAAqB,MAAM,UAAU;AAAA,MACjD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,+BAA+B,SAAS,MAAM,GAAG;AACnF,QAAM,QAAQ,OAAO,MAAM,SAAS,KAAK,GAAG,mBAAmB;AAC/D,MACE,MAAM,aAAa,QACnB,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,kBAAkB,SAC/B,OAAM,IAAI,MAAM,uCAAuC;AACzD,QAAM,UAAU,uBAAuB,MAAM,eAAe;AAAA,IAC1D,MAAM;AAAA,IACN,MAAM;AAAA,EACR,CAAC;AACD,QAAM,sBAAsB,wCAAwC,MAAM,qBAAqB;AAC/F,+CAA6C,SAAS;AAAA,IACpD,cAAc,MAAM;AAAA,IACpB,aAAa,MAAM;AAAA,EACrB,CAAC;AACD,MACE,QAAQ,QAAQ,MAAM,cACtB,QAAQ,QAAQ,MAAM,WAAW,aACjC,QAAQ,KAAK,cAAc,MAAM,aACjC,QAAQ,KAAK,iBAAiB,MAAM,WAAW,aAC/C,QAAQ,KAAK,wBAAwB,MAAM,iBAC3C,QAAQ,KAAK,6BAA6B,MAAM,sBAChD,gBAAgB,QAAQ,GAAG,MAAM,gBAAgB,mBAAmB,EACpE,OAAM,IAAI,MAAM,6CAA6C;AAC/D,QAAM,iBAAiB,MAAM,QAAQ,IAAI,IAAI,aAAa,UAAU,GAAG;AAAA,IACrE,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ,MAAM;AAAA,IACd,SAAS,EAAE,eAAe,QAAQ,cAAc;AAAA,EAClD,CAAC;AACD,MAAI,CAAC,eAAe,GAAI,OAAM,IAAI,MAAM,+BAA+B,eAAe,MAAM,GAAG;AAC/F,QAAM,QAAQ,eAAe;AAC7B,SAAO,OAAO,OAAO,EAAE,WAAW,cAAc,SAAS,oBAAoB,KAAc,CAAC;AAC9F;AAEA,SAASA,uBAAsB,OAAmC;AAChE,QAAM,OAAO,SAAS;AACtB,MAAI,CAAC,8BAA8B,KAAK,IAAI,GAAG;AAC7C,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AACA,SAAO;AACT;","names":["code","output","length","code","code","objectHasOwn","object","name","encode","length","i","j","decode","name","encode","decode","alphabet","encode","decode","textEncoder","identity_exports","identity","encode","decode","decode","code","code","digest","decode","equals","encode","identity","sha256","from","name","code","encode","digest","name","sha256","from","base","baseCache","code","digest","equals","base","decode","length","cache","cid","identity_exports","import_viem","import_viem","textEncoder","objectHasOwn","object","requiredString","assertExactKeys","requiredValue","hasOwn","requiredArray","digest","encoded","alphabet","hex","code","expectObject","assertExactKeys","requiredArray","requiredString","hasOwn","requiredStringArray","requiredValue","object","objectHasOwn","import_ed25519","digest","record","alphabet","import_ed25519","import_sha256","encodeBase64Url","encodeBase64Url","code","value","exactKeys","hex","digest","encodeBase64Url","policyRuntimeBasePath"]}