@openeudi/openid4vp 0.11.1 → 0.12.0

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/reflect-polyfill.ts","../src/errors.ts","../node_modules/pvtsutils/build/index.es.js","../node_modules/pvutils/build/utils.es.js","../node_modules/asn1js/build/index.es.js","../node_modules/@peculiar/asn1-schema/build/es2015/enums.js","../node_modules/@peculiar/asn1-schema/build/es2015/types/bit_string.js","../node_modules/@peculiar/asn1-schema/build/es2015/types/octet_string.js","../node_modules/@peculiar/asn1-schema/build/es2015/types/index.js","../node_modules/@peculiar/asn1-schema/build/es2015/converters.js","../node_modules/@peculiar/asn1-schema/build/es2015/helper.js","../node_modules/@peculiar/asn1-schema/build/es2015/schema.js","../node_modules/@peculiar/asn1-schema/build/es2015/storage.js","../node_modules/@peculiar/asn1-schema/build/es2015/decorators.js","../node_modules/@peculiar/asn1-schema/build/es2015/errors/schema_validation.js","../node_modules/@peculiar/asn1-schema/build/es2015/errors/index.js","../node_modules/@peculiar/asn1-schema/build/es2015/parser.js","../node_modules/@peculiar/asn1-schema/build/es2015/serializer.js","../node_modules/@peculiar/asn1-schema/build/es2015/objects.js","../node_modules/@peculiar/asn1-schema/build/es2015/convert.js","../node_modules/@peculiar/asn1-schema/build/es2015/index.js","../node_modules/tslib/tslib.es6.mjs","../node_modules/@peculiar/asn1-x509/build/es2015/ip_converter.js","../node_modules/@peculiar/asn1-x509/build/es2015/name.js","../node_modules/@peculiar/asn1-x509/build/es2015/general_name.js","../node_modules/@peculiar/asn1-x509/build/es2015/object_identifiers.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/authority_information_access.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/authority_key_identifier.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/basic_constraints.js","../node_modules/@peculiar/asn1-x509/build/es2015/general_names.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/certificate_issuer.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/certificate_policies.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_number.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_delta_indicator.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_distribution_points.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_freshest.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_issuing_distribution_point.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_reason.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/extended_key_usage.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/inhibit_any_policy.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/invalidity_date.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/issuer_alternative_name.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/key_usage.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/name_constraints.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/policy_constraints.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/policy_mappings.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_alternative_name.js","../node_modules/@peculiar/asn1-x509/build/es2015/attribute.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_directory_attributes.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_key_identifier.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/private_key_usage_period.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/entrust_version_info.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_info_access.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/index.js","../node_modules/@peculiar/asn1-x509/build/es2015/algorithm_identifier.js","../node_modules/@peculiar/asn1-x509/build/es2015/subject_public_key_info.js","../node_modules/@peculiar/asn1-x509/build/es2015/time.js","../node_modules/@peculiar/asn1-x509/build/es2015/validity.js","../node_modules/@peculiar/asn1-x509/build/es2015/extension.js","../node_modules/@peculiar/asn1-x509/build/es2015/types.js","../node_modules/@peculiar/asn1-x509/build/es2015/tbs_certificate.js","../node_modules/@peculiar/asn1-x509/build/es2015/certificate.js","../node_modules/@peculiar/asn1-x509/build/es2015/tbs_cert_list.js","../node_modules/@peculiar/asn1-x509/build/es2015/certificate_list.js","../node_modules/@peculiar/asn1-x509/build/es2015/index.js","../src/trust/x509-utils.ts","../src/trust/ChainBuilder.ts","../src/trust/ecdsa-util.ts","../src/trust/CrlFetcher.ts","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/acceptable_responses.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/archive_cutoff.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/extended_revoke.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/nonce.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/preferred_signature_algorithms.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/service_locator.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/index.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/responder_id.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/cert_id.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/revoked_info.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/cert_status.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/single_response.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/types.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/response_data.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/basic_ocsp_response.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/object_identifiers.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/signature.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/request.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/tbs_request.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/ocsp_request.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/ocsp_response_status.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/response_bytes.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/ocsp_response.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/index.js","../src/trust/OcspClient.ts","../src/trust/RevocationChecker.ts","../src/trust/lotl-loa-mapping.ts","../src/trust/service-metadata.ts","../src/trust/ProvenanceResolver.ts","../src/trust/TrustEvaluator.ts","../src/index.ts","../src/authorization.ts","../src/signed-authorization.ts","../src/haip.ts","../src/presentation.ts","../src/parsers/mdoc.parser.ts","../src/crypto/cose-sign1.ts","../src/crypto/device-auth.ts","../src/crypto/digest.ts","../src/crypto/mso.ts","../src/parsers/sd-jwt.parser.ts","../src/verify.ts","../src/decrypt-response.ts","../src/crypto/session-transcript.ts","../src/trust/Cache.ts","../src/trust/index.ts","../src/trust/TrustStore.ts","../src/trust/LotlTrustStore.ts","../src/trust/lotl-signing-anchors.ts","../src/trust/LotlFetcher.ts","../src/trust/LotlParser.ts","../src/trust/xml-util.ts","../src/trust/NationalTlResolver.ts"],"names":["InvalidSignatureError","ExpiredCredentialError","UnsupportedFormatError","MalformedCredentialError","NonceValidationError","HaipValidationError","OpenID4VPError","TrustAnchorNotFoundError","CertificateChainError","RevokedCertificateError","RevocationCheckFailedError","LotlFetchError","LotlSignatureError","SignedRequestBuildError","UnsupportedJweError","DecryptionFailedError","MissingDecryptionKeyError","MissingVerifierEncryptionKeyError","MultipleCredentialsNotSupportedError","enc","retBuf","retView","Boolean","Set","_a","init_index_es","AsnTypeTypes","AsnPropTypes","BitString","OctetString","defaultConverter","init_errors","DirectoryString","AttributeValue","RelativeDistinguishedName","RDNSequence","Name","GeneralName","AuthorityInfoAccessSyntax","GeneralNames","CertificateIssuer","DisplayText","Qualifier","CertificatePolicies","CRLNumber","BaseCRLNumber","ReasonFlags","DistributionPointName","CRLDistributionPoints","FreshestCRL","CRLReasons","CRLReason","ExtendedKeyUsage","InhibitAnyPolicy","InvalidityDate","IssueAlternativeName","KeyUsageFlags","GeneralSubtrees","PolicyMappings","SubjectAlternativeName","SubjectDirectoryAttributes","EntrustInfoFlags","SubjectInfoAccessSyntax","Time","Extensions","init_types","Version","init_es2015","SubjectKeyIdentifierExtension","SubjectAlternativeNameExtension","X509Name","X509Certificates","BasicConstraintsExtension","KeyUsagesExtension","AuthorityKeyIdentifierExtension","parsed","AcceptableResponses","ArchiveCutoff","ExtendedRevoke","PreferredSignatureAlgorithms","init_extensions","ResponderID","CertStatus","init_object_identifiers","OCSPResponseStatus","normalizeHexUnsignedInt","bytesToHex","X509Certificate","ExtendedKeyUsageExtension","envelope","ProvenanceResolver","uuidv4","SignJWT","CborEncoder","Tag","HEADER_ALG","COSE_ALG_TO_NAME","ALG_TO_HASH","decoder","bytesEqual","TrustEvaluator","importX509","DEFAULT_ALLOWED_ALGORITHMS","encoder","derToPem","splitSdJwt","decodeProtectedHeader","result","jwtVerify","importJWK","decodeSdJwt","getClaims","compactDecrypt","matchQuery","buildSubmission","DOMParser","xmldsig","TSL_NS","parseNextUpdate"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,qBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAaA,wCAQAC,uCAAA,CAAA,CAQAC,uCAAA,CAAA,CAQAC,yCAAA,CAAA,CAQAC,qCAAA,CAAA,CAiBAC,sCAiBSC,+BAAA,CAAA,CAaTC,yCAAA,CAAA,CAcAC,sCAAA,CAAA,CAaAC,wCAAA,CAAA,CAiBAC,6CAIAC,+BAAA,CAAA,CAaAC,mCAAA,CAAA,CAoBAC,0CAQAC,oCAAA,CAAA,CAWAC,sCAAA,CAAA,CAOAC,4CAOAC,kDAAA,CAAA,CASAC;AA1Mb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,eAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAO,IAAMlB,6BAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,MAC7C,WAAA,CAAY,UAAU,wCAAA,EAA0C;AAC5D,QAAA,KAAA,CAAM,OAAO,CAAA;AACb,QAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AACZ,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,MACpD;AAAA,KACJ;AAEO,IAAMC,8BAAA,GAAN,cAAqC,KAAA,CAAM;AAAA,MAC9C,WAAA,CAAY,UAAU,wBAAA,EAA0B;AAC5C,QAAA,KAAA,CAAM,OAAO,CAAA;AACb,QAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,MACpD;AAAA,KACJ;AAEO,IAAMC,8BAAA,GAAN,cAAqC,KAAA,CAAM;AAAA,MAC9C,YAAY,MAAA,EAAgB;AACxB,QAAA,KAAA,CAAM,CAAA,+BAAA,EAAkC,MAAM,CAAA,CAAE,CAAA;AAChD,QAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,MACpD;AAAA,KACJ;AAEO,IAAMC,gCAAA,GAAN,cAAuC,KAAA,CAAM;AAAA,MAChD,WAAA,CAAY,UAAU,mCAAA,EAAqC;AACvD,QAAA,KAAA,CAAM,OAAO,CAAA;AACb,QAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,MACpD;AAAA,KACJ;AAEO,IAAMC,4BAAA,GAAN,cAAmC,KAAA,CAAM;AAAA,MAC5C,WAAA,CAAY,UAAU,qCAAA,EAAuC;AACzD,QAAA,KAAA,CAAM,OAAO,CAAA;AACb,QAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AACZ,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,MACpD;AAAA,KACJ;AAWO,IAAMC,2BAAA,GAAN,cAAkC,KAAA,CAAM;AAAA,MAClC,IAAA;AAAA,MACA,YAAA;AAAA,MAET,WAAA,CAAY,IAAA,EAA0B,OAAA,EAAiB,YAAA,EAAuB;AAC1E,QAAA,KAAA,CAAM,OAAO,CAAA;AACb,QAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AACZ,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,QAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,MACpD;AAAA,KACJ;AAMO,IAAeC,sBAAA,GAAf,cAAsC,KAAA,CAAM;AAAA,MAG/C,WAAA,CAAY,SAAiB,OAAA,EAA6B;AACtD,QAAA,KAAA,CAAM,OAAO,CAAA;AACb,QAAA,IAAA,CAAK,OAAO,GAAA,CAAA,MAAA,CAAW,IAAA;AACvB,QAAA,IAAI,OAAA,EAAS,UAAU,MAAA,EAAW;AAC9B,UAAC,IAAA,CAA6B,QAAQ,OAAA,CAAQ,KAAA;AAAA,QAClD;AACA,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,MACpD;AAAA,KACJ;AAEO,IAAMC,gCAAA,GAAN,cAAuCD,sBAAA,CAAe;AAAA,MAChD,IAAA,GAAO,wBAAA;AAAA,KACpB;AAYO,IAAME,6BAAA,GAAN,cAAoCF,sBAAA,CAAe;AAAA,MAC7C,IAAA,GAAO,eAAA;AAAA,MACP,MAAA;AAAA,MAET,WAAA,CACI,SACA,OAAA,EACF;AACE,QAAA,KAAA,CAAM,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAA;AACvC,QAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,MAC1B;AAAA,KACJ;AAEO,IAAMG,+BAAA,GAAN,cAAsCH,sBAAA,CAAe;AAAA,MAC/C,IAAA,GAAO,qBAAA;AAAA,MACP,MAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MAET,WAAA,CACI,SACA,OAAA,EACF;AACE,QAAA,KAAA,CAAM,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAA;AACvC,QAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,QAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,SAAA;AACzB,QAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,MAC1B;AAAA,KACJ;AAEO,IAAMI,kCAAA,GAAN,cAAyCJ,sBAAA,CAAe;AAAA,MAClD,IAAA,GAAO,yBAAA;AAAA,KACpB;AAEO,IAAMK,sBAAA,GAAN,cAA6BL,sBAAA,CAAe;AAAA,MACtC,IAAA,GAAO,mBAAA;AAAA,MACP,GAAA;AAAA,MAET,WAAA,CACI,SACA,OAAA,EACF;AACE,QAAA,KAAA,CAAM,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAA;AACvC,QAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AAAA,MACvB;AAAA,KACJ;AAEO,IAAMM,0BAAA,GAAN,cAAiCN,sBAAA,CAAe;AAAA,MAC1C,IAAA,GAAO,wBAAA;AAAA,KACpB;AAkBO,IAAMO,+BAAA,GAAN,cAAsCP,sBAAA,CAAe;AAAA,MAC/C,IAAA;AAAA,MACT,WAAA,CAAY,MAAmC,OAAA,EAAiB;AAC5D,QAAA,KAAA,CAAM,OAAO,CAAA;AACb,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,MAChB;AAAA,KACJ;AAEO,IAAMQ,2BAAA,GAAN,cAAkCR,sBAAA,CAAe;AAAA,MAC3C,IAAA,GAAO,iBAAA;AAAA,MACP,GAAA;AAAA,MACA,GAAA;AAAA,MACT,WAAA,CAAY,KAAaa,IAAAA,EAAa;AAClC,QAAA,KAAA,CAAM,CAAA,gCAAA,EAAmC,GAAG,CAAA,MAAA,EAASA,IAAG,CAAA,CAAE,CAAA;AAC1D,QAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,QAAA,IAAA,CAAK,GAAA,GAAMA,IAAAA;AAAA,MACf;AAAA,KACJ;AAEO,IAAMJ,6BAAA,GAAN,cAAoCT,sBAAA,CAAe;AAAA,MAC7C,IAAA,GAAO,mBAAA;AAAA,MAChB,WAAA,CAAY,OAAA,GAAU,0CAAA,EAA4C,OAAA,EAA6B;AAC3F,QAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AAAA,MAC1B;AAAA,KACJ;AAEO,IAAMU,iCAAA,GAAN,cAAwCV,sBAAA,CAAe;AAAA,MACjD,IAAA,GAAO,wBAAA;AAAA,MAChB,WAAA,CAAY,UAAU,gEAAA,EAAkE;AACpF,QAAA,KAAA,CAAM,OAAO,CAAA;AAAA,MACjB;AAAA,KACJ;AAEO,IAAMW,yCAAA,GAAN,cAAgDX,sBAAA,CAAe;AAAA,MACzD,IAAA,GAAO,iCAAA;AAAA,MAChB,WAAA,CACI,UAAU,yHAAA,EACZ;AACE,QAAA,KAAA,CAAM,OAAO,CAAA;AAAA,MACjB;AAAA,KACJ;AAEO,IAAMY,4CAAA,GAAN,cAAmDZ,sBAAA,CAAe;AAAA,MAC5D,IAAA,GAAO,8BAAA;AAAA,MACP,UAAA;AAAA,MACA,iBAAA;AAAA,MACT,WAAA,CAAY,YAAoB,iBAAA,EAA2B;AACvD,QAAA,KAAA;AAAA,UACI,CAAA,sDAAA,EACO,UAAU,CAAA,kBAAA,EAAqB,iBAAiB,CAAA,cAAA;AAAA,SAC3D;AACA,QAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,QAAA,IAAA,CAAK,iBAAA,GAAoB,iBAAA;AAAA,MAC7B;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACiKA,SAAS,OAAA,CAAQ,QAAQ,MAAA,EAAQ;AAC7B,EAAA,IAAI,EAAE,UAAU,MAAA,CAAA,EAAS;AACrB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,MAAA,CAAO,UAAA,KAAe,MAAA,CAAO,UAAA,EAAY;AACzC,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,EAAA,GAAK,IAAI,UAAA,CAAW,MAAM,CAAA;AAChC,EAAA,MAAM,EAAA,GAAK,IAAI,UAAA,CAAW,MAAM,CAAA;AAChC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,YAAY,CAAA,EAAA,EAAK;AACxC,IAAA,IAAI,EAAA,CAAG,CAAC,CAAA,KAAM,EAAA,CAAG,CAAC,CAAA,EAAG;AACjB,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;AAtYA,IAyBM,mBACA,qBAAA,EAwFA,WAAA,EACA,WACA,YAAA,EACA,eAAA,EACA,eAmBA,cAAA,EAoBA,OAAA;AA7JN,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0CAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAyBA,IAAM,iBAAA,GAAoB,sBAAA;AAC1B,IAAM,qBAAA,GAAN,MAAM,sBAAA,CAAsB;AAAA,MACxB,OAAO,cAAc,IAAA,EAAM;AACvB,QAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,KAAM,iBAAA;AAAA,MACpD;AAAA,MACA,OAAO,cAAc,IAAA,EAAM;AACvB,QAAA,IAAI,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA,EAAG;AAC1B,UAAA,OAAO,IAAA;AAAA,QACX;AACA,QAAA,IAAI,IAAA,CAAK,UAAA,KAAe,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY;AAC5C,UAAA,OAAO,IAAA,CAAK,MAAA;AAAA,QAChB;AACA,QAAA,IAAI,KAAK,UAAA,KAAe,CAAA,IAAK,KAAK,UAAA,KAAe,IAAA,CAAK,OAAO,UAAA,EAAY;AACrE,UAAA,OAAO,IAAA,CAAK,MAAA;AAAA,QAChB;AACA,QAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA,CAC/B,KAAA,CAAM,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,UAAU,CAAA,CACxD,MAAA;AAAA,MACT;AAAA,MACA,OAAO,aAAa,IAAA,EAAM;AACtB,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,UAAU,CAAA;AAAA,MACvC;AAAA,MACA,OAAO,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM;AACtB,QAAA,IAAI,IAAA,CAAK,gBAAgB,IAAA,EAAM;AAC3B,UAAA,OAAO,IAAA;AAAA,QACX;AACA,QAAA,IAAI,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA,EAAG;AAC1B,UAAA,OAAO,IAAI,KAAK,IAAI,CAAA;AAAA,QACxB;AACA,QAAA,IAAI,IAAA,CAAK,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC9B,UAAA,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,QAAQ,IAAA,CAAK,UAAA,EAAY,KAAK,UAAU,CAAA;AAAA,QACjE;AACA,QAAA,MAAM,IAAI,UAAU,sEAAsE,CAAA;AAAA,MAC9F;AAAA,MACA,OAAO,eAAe,IAAA,EAAM;AACxB,QAAA,OAAO,KAAK,iBAAA,CAAkB,IAAI,CAAA,IAC3B,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,MAClC;AAAA,MACA,OAAO,kBAAkB,IAAA,EAAM;AAC3B,QAAA,OAAO,WAAA,CAAY,OAAO,IAAI,CAAA,IACtB,QAAQ,IAAA,CAAK,aAAA,CAAc,KAAK,MAAM,CAAA;AAAA,MAClD;AAAA,MACA,OAAO,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG;AACjB,QAAA,MAAM,KAAA,GAAQ,sBAAA,CAAsB,YAAA,CAAa,CAAC,CAAA;AAClD,QAAA,MAAM,KAAA,GAAQ,sBAAA,CAAsB,YAAA,CAAa,CAAC,CAAA;AAClD,QAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,UAAA,EAAY;AACnC,UAAA,OAAO,KAAA;AAAA,QACX;AACA,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,UAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,CAAA,EAAG;AACvB,YAAA,OAAO,KAAA;AAAA,UACX;AAAA,QACJ;AACA,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,MACA,OAAO,UAAU,IAAA,EAAM;AACnB,QAAA,IAAI,OAAA;AACJ,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,KAAK,EAAE,IAAA,CAAK,CAAC,CAAA,YAAa,QAAA,CAAA,EAAW;AAC1D,UAAA,OAAA,GAAU,KAAK,CAAC,CAAA;AAAA,QACpB,CAAA,MAAA,IACS,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA,YAAa,QAAA,EAAU;AAC5D,UAAA,OAAA,GAAU,KAAK,CAAC,CAAA;AAAA,QACpB,CAAA,MACK;AACD,UAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,aAAa,QAAA,EAAU;AAC3C,YAAA,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,UAC3C,CAAA,MACK;AACD,YAAA,OAAA,GAAU,IAAA;AAAA,UACd;AAAA,QACJ;AACA,QAAA,IAAI,IAAA,GAAO,CAAA;AACX,QAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC1B,UAAA,IAAA,IAAQ,MAAA,CAAO,UAAA;AAAA,QACnB;AACA,QAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,IAAI,CAAA;AAC/B,QAAA,IAAI,MAAA,GAAS,CAAA;AACb,QAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC1B,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AACrC,UAAA,GAAA,CAAI,GAAA,CAAI,MAAM,MAAM,CAAA;AACpB,UAAA,MAAA,IAAU,IAAA,CAAK,MAAA;AAAA,QACnB;AACA,QAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,aAAa,QAAA,EAAU;AAC3C,UAAA,OAAO,KAAK,MAAA,CAAO,GAAA,EAAK,KAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,QACjD;AACA,QAAA,OAAO,GAAA,CAAI,MAAA;AAAA,MACf;AAAA,KACJ;AAEA,IAAM,WAAA,GAAc,QAAA;AACpB,IAAM,SAAA,GAAY,gBAAA;AAClB,IAAM,YAAA,GAAe,kEAAA;AACrB,IAAM,eAAA,GAAkB,kBAAA;AACxB,IAAM,gBAAN,MAAoB;AAAA,MAChB,OAAO,WAAW,IAAA,EAAM;AACpB,QAAA,MAAM,CAAA,GAAI,QAAA,CAAS,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAC3C,QAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,CAAA,CAAE,MAAM,CAAA;AACzC,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AAC/B,UAAA,SAAA,CAAU,CAAC,CAAA,GAAI,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AAAA,QACjC;AACA,QAAA,OAAO,SAAA,CAAU,MAAA;AAAA,MACrB;AAAA,MACA,OAAO,SAAS,MAAA,EAAQ;AACpB,QAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,YAAA,CAAa,MAAM,CAAA;AACrD,QAAA,IAAI,aAAA,GAAgB,EAAA;AACpB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,UAAA,aAAA,IAAiB,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,QAC/C;AACA,QAAA,MAAM,aAAA,GAAgB,kBAAA,CAAmB,MAAA,CAAO,aAAa,CAAC,CAAA;AAC9D,QAAA,OAAO,aAAA;AAAA,MACX;AAAA,KACJ;AACA,IAAM,iBAAN,MAAqB;AAAA,MACjB,OAAO,QAAA,CAAS,MAAA,EAAQ,YAAA,GAAe,KAAA,EAAO;AAC1C,QAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,aAAA,CAAc,MAAM,CAAA;AAC9D,QAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,WAAW,CAAA;AACzC,QAAA,IAAI,GAAA,GAAM,EAAA;AACV,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,UAAA,EAAY,KAAK,CAAA,EAAG;AAChD,UAAA,MAAM,IAAA,GAAO,QAAA,CAAS,SAAA,CAAU,CAAA,EAAG,YAAY,CAAA;AAC/C,UAAA,GAAA,IAAO,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,QACnC;AACA,QAAA,OAAO,GAAA;AAAA,MACX;AAAA,MACA,OAAO,UAAA,CAAW,IAAA,EAAM,YAAA,GAAe,KAAA,EAAO;AAC1C,QAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,IAAA,CAAK,SAAS,CAAC,CAAA;AAC3C,QAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,GAAG,CAAA;AACjC,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AAClC,UAAA,QAAA,CAAS,UAAU,CAAA,GAAI,CAAA,EAAG,KAAK,UAAA,CAAW,CAAC,GAAG,YAAY,CAAA;AAAA,QAC9D;AACA,QAAA,OAAO,GAAA;AAAA,MACX;AAAA,KACJ;AACA,IAAM,OAAA,GAAN,MAAM,QAAA,CAAQ;AAAA,MACV,OAAO,MAAM,IAAA,EAAM;AACf,QAAA,OAAO,OAAO,IAAA,KAAS,WAAA,IAChB,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,MAC9B;AAAA,MACA,OAAO,SAAS,IAAA,EAAM;AAClB,QAAA,OAAO,OAAO,IAAA,KAAS,WAAA,IAChB,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,MACjC;AAAA,MACA,OAAO,YAAY,IAAA,EAAM;AACrB,QAAA,OAAO,OAAO,IAAA,KAAS,WAAA,IAChB,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,MACpC;AAAA,MACA,OAAO,QAAA,CAAS,MAAA,EAAQa,IAAAA,GAAM,MAAA,EAAQ;AAClC,QAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,YAAA,CAAa,MAAM,CAAA;AACrD,QAAA,QAAQA,IAAAA,CAAI,aAAY;AAAG,UACvB,KAAK,MAAA;AACD,YAAA,OAAO,IAAA,CAAK,aAAa,GAAG,CAAA;AAAA,UAChC,KAAK,QAAA;AACD,YAAA,OAAO,IAAA,CAAK,SAAS,GAAG,CAAA;AAAA,UAC5B,KAAK,KAAA;AACD,YAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,UACzB,KAAK,QAAA;AACD,YAAA,OAAO,IAAA,CAAK,SAAS,GAAG,CAAA;AAAA,UAC5B,KAAK,WAAA;AACD,YAAA,OAAO,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,UAC/B,KAAK,SAAA;AACD,YAAA,OAAO,cAAA,CAAe,QAAA,CAAS,GAAA,EAAK,IAAI,CAAA;AAAA,UAC5C,KAAK,OAAA;AAAA,UACL,KAAK,SAAA;AACD,YAAA,OAAO,cAAA,CAAe,SAAS,GAAG,CAAA;AAAA,UACtC;AACI,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6BA,IAAG,CAAA,CAAA,CAAG,CAAA;AAAA;AAC3D,MACJ;AAAA,MACA,OAAO,UAAA,CAAW,GAAA,EAAKA,IAAAA,GAAM,MAAA,EAAQ;AACjC,QAAA,IAAI,CAAC,GAAA,EAAK;AACN,UAAA,OAAO,IAAI,YAAY,CAAC,CAAA;AAAA,QAC5B;AACA,QAAA,QAAQA,IAAAA,CAAI,aAAY;AAAG,UACvB,KAAK,MAAA;AACD,YAAA,OAAO,IAAA,CAAK,eAAe,GAAG,CAAA;AAAA,UAClC,KAAK,QAAA;AACD,YAAA,OAAO,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,UAC9B,KAAK,KAAA;AACD,YAAA,OAAO,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,UAC3B,KAAK,QAAA;AACD,YAAA,OAAO,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,UAC9B,KAAK,WAAA;AACD,YAAA,OAAO,IAAA,CAAK,cAAc,GAAG,CAAA;AAAA,UACjC,KAAK,SAAA;AACD,YAAA,OAAO,cAAA,CAAe,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA;AAAA,UAC9C,KAAK,OAAA;AAAA,UACL,KAAK,SAAA;AACD,YAAA,OAAO,cAAA,CAAe,WAAW,GAAG,CAAA;AAAA,UACxC;AACI,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6BA,IAAG,CAAA,CAAA,CAAG,CAAA;AAAA;AAC3D,MACJ;AAAA,MACA,OAAO,SAAS,MAAA,EAAQ;AACpB,QAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,YAAA,CAAa,MAAM,CAAA;AACrD,QAAA,IAAI,OAAO,SAAS,WAAA,EAAa;AAC7B,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,QAAQ,CAAA;AAC1C,UAAA,OAAO,KAAK,MAAM,CAAA;AAAA,QACtB,CAAA,MACK;AACD,UAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,SAAS,QAAQ,CAAA;AAAA,QAC7C;AAAA,MACJ;AAAA,MACA,OAAO,WAAW,MAAA,EAAQ;AACtB,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AAC1C,QAAA,IAAI,CAAC,SAAA,EAAW;AACZ,UAAA,OAAO,IAAI,YAAY,CAAC,CAAA;AAAA,QAC5B;AACA,QAAA,IAAI,CAAC,QAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AAC9B,UAAA,MAAM,IAAI,UAAU,6CAA6C,CAAA;AAAA,QACrE;AACA,QAAA,IAAI,OAAO,SAAS,WAAA,EAAa;AAC7B,UAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,QAC1C,CAAA,MACK;AACD,UAAA,OAAO,IAAI,UAAA,CAAW,MAAA,CAAO,KAAK,SAAA,EAAW,QAAQ,CAAC,CAAA,CAAE,MAAA;AAAA,QAC5D;AAAA,MACJ;AAAA,MACA,OAAO,cAAc,SAAA,EAAW;AAC5B,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA;AAC7C,QAAA,IAAI,CAAC,SAAA,EAAW;AACZ,UAAA,OAAO,IAAI,YAAY,CAAC,CAAA;AAAA,QAC5B;AACA,QAAA,IAAI,CAAC,QAAA,CAAQ,WAAA,CAAY,SAAS,CAAA,EAAG;AACjC,UAAA,MAAM,IAAI,UAAU,+CAA+C,CAAA;AAAA,QACvE;AACA,QAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,aAAA,CAAc,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAC,CAAA;AAAA,MAChG;AAAA,MACA,OAAO,YAAY,IAAA,EAAM;AACrB,QAAA,OAAO,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,CAAE,QAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAAA,MACxF;AAAA,MACA,OAAO,cAAA,CAAe,IAAA,EAAM,QAAA,GAAW,SAAQ,qBAAA,EAAuB;AAClE,QAAA,QAAQ,QAAA;AAAU,UACd,KAAK,OAAA;AACD,YAAA,OAAO,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,UAC/B,KAAK,MAAA;AACD,YAAA,OAAO,aAAA,CAAc,WAAW,IAAI,CAAA;AAAA,UACxC,KAAK,OAAA;AAAA,UACL,KAAK,SAAA;AACD,YAAA,OAAO,cAAA,CAAe,WAAW,IAAI,CAAA;AAAA,UACzC,KAAK,SAAA;AAAA,UACL,KAAK,MAAA;AACD,YAAA,OAAO,cAAA,CAAe,UAAA,CAAW,IAAA,EAAM,IAAI,CAAA;AAAA,UAC/C;AACI,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA;AAChE,MACJ;AAAA,MACA,OAAO,YAAA,CAAa,MAAA,EAAQ,QAAA,GAAW,SAAQ,qBAAA,EAAuB;AAClE,QAAA,QAAQ,QAAA;AAAU,UACd,KAAK,OAAA;AACD,YAAA,OAAO,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,UAC/B,KAAK,MAAA;AACD,YAAA,OAAO,aAAA,CAAc,SAAS,MAAM,CAAA;AAAA,UACxC,KAAK,OAAA;AAAA,UACL,KAAK,SAAA;AACD,YAAA,OAAO,cAAA,CAAe,SAAS,MAAM,CAAA;AAAA,UACzC,KAAK,SAAA;AAAA,UACL,KAAK,MAAA;AACD,YAAA,OAAO,cAAA,CAAe,QAAA,CAAS,MAAA,EAAQ,IAAI,CAAA;AAAA,UAC/C;AACI,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA;AAChE,MACJ;AAAA,MACA,OAAO,WAAW,IAAA,EAAM;AACpB,QAAA,MAAM,eAAe,IAAA,CAAK,MAAA;AAC1B,QAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAW,YAAY,CAAA;AAC9C,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,EAAc,CAAA,EAAA,EAAK;AACnC,UAAA,UAAA,CAAW,CAAC,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA;AAAA,QACrC;AACA,QAAA,OAAO,UAAA,CAAW,MAAA;AAAA,MACtB;AAAA,MACA,OAAO,SAAS,MAAA,EAAQ;AACpB,QAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,YAAA,CAAa,MAAM,CAAA;AACrD,QAAA,IAAI,GAAA,GAAM,EAAA;AACV,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,UAAA,GAAA,IAAO,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,QACrC;AACA,QAAA,OAAO,GAAA;AAAA,MACX;AAAA,MACA,OAAO,MAAM,MAAA,EAAQ;AACjB,QAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,YAAA,CAAa,MAAM,CAAA;AACrD,QAAA,IAAI,MAAA,GAAS,EAAA;AACb,QAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAChB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC1B,UAAA,MAAM,IAAA,GAAO,IAAI,CAAC,CAAA;AAClB,UAAA,IAAI,OAAO,EAAA,EAAI;AACX,YAAA,MAAA,IAAU,GAAA;AAAA,UACd;AACA,UAAA,MAAA,IAAU,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,OAAO,QAAQ,SAAA,EAAW;AACtB,QAAA,IAAI,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA;AAC3C,QAAA,IAAI,CAAC,SAAA,EAAW;AACZ,UAAA,OAAO,IAAI,YAAY,CAAC,CAAA;AAAA,QAC5B;AACA,QAAA,IAAI,CAAC,QAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3B,UAAA,MAAM,IAAI,UAAU,yCAAyC,CAAA;AAAA,QACjE;AACA,QAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,UAAA,SAAA,GAAY,IAAI,SAAS,CAAA,CAAA;AAAA,QAC7B;AACA,QAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,SAAA,CAAU,SAAS,CAAC,CAAA;AAC/C,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,UAAU,MAAA,EAAQ,CAAA,GAAI,IAAI,CAAA,EAAG;AAC7C,UAAA,MAAM,CAAA,GAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,IAAI,CAAC,CAAA;AAClC,UAAA,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,QAAA,CAAS,GAAG,EAAE,CAAA;AAAA,QAC/B;AACA,QAAA,OAAO,GAAA,CAAI,MAAA;AAAA,MACf;AAAA,MACA,OAAO,aAAA,CAAc,MAAA,EAAQ,YAAA,GAAe,KAAA,EAAO;AAC/C,QAAA,OAAO,cAAA,CAAe,QAAA,CAAS,MAAA,EAAQ,YAAY,CAAA;AAAA,MACvD;AAAA,MACA,OAAO,eAAA,CAAgB,IAAA,EAAM,YAAA,GAAe,KAAA,EAAO;AAC/C,QAAA,OAAO,cAAA,CAAe,UAAA,CAAW,IAAA,EAAM,YAAY,CAAA;AAAA,MACvD;AAAA,MACA,OAAO,cAAc,MAAA,EAAQ;AACzB,QAAA,MAAM,QAAA,GAAW,CAAA,GAAK,MAAA,CAAO,MAAA,GAAS,CAAA;AACtC,QAAA,IAAI,WAAW,CAAA,EAAG;AACd,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AAC/B,YAAA,MAAA,IAAU,GAAA;AAAA,UACd;AAAA,QACJ;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,OAAO,aAAa,IAAA,EAAM;AACtB,QAAA,OAAA,CAAQ,IAAA,KAAS,QAAQ,IAAA,KAAS,MAAA,GAAS,SAAS,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA,KAAM,EAAA;AAAA,MAC3F;AAAA,KACJ;AACA,IAAA,OAAA,CAAQ,qBAAA,GAAwB,MAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7ShC,SAAS,YAAA,CAAa,aAAa,SAAA,EAAW;AAC1C,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC1B,IAAA,OAAO,YAAY,CAAC,CAAA;AAAA,EACxB;AACA,EAAA,KAAA,IAAS,IAAK,WAAA,CAAY,MAAA,GAAS,CAAA,EAAI,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAChD,IAAA,MAAA,IAAU,WAAA,CAAa,WAAA,CAAY,MAAA,GAAS,CAAA,GAAK,CAAC,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAA,GAAY,CAAC,CAAA;AAAA,EACnF;AACA,EAAA,OAAO,MAAA;AACX;AACA,SAAS,UAAA,CAAW,KAAA,EAAO,IAAA,EAAM,QAAA,GAAY,EAAA,EAAK;AAC9C,EAAA,MAAM,gBAAA,GAAmB,QAAA;AACzB,EAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AAC9B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AACxB,IAAA,IAAI,QAAQ,OAAA,EAAS;AACjB,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,mBAAmB,CAAA,EAAG;AACtB,QAAA,MAAA,GAAS,IAAI,YAAY,CAAC,CAAA;AAC1B,QAAA,MAAA,GAAS,CAAA;AAAA,MACb,CAAA,MACK;AACD,QAAA,IAAI,mBAAmB,CAAA,EAAG;AACtB,UAAA,OAAQ,IAAI,YAAY,CAAC,CAAA;AAAA,QAC7B;AACA,QAAA,MAAA,GAAS,IAAI,YAAY,gBAAgB,CAAA;AACzC,QAAA,MAAA,GAAS,gBAAA;AAAA,MACb;AACA,MAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,MAAM,CAAA;AACrC,MAAA,KAAA,IAAS,CAAA,GAAK,CAAA,GAAI,CAAA,EAAI,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC/B,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,IAAI,CAAA;AAClC,QAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,CAAC,IAAI,IAAA,CAAK,KAAA,CAAM,gBAAgB,KAAK,CAAA;AAC1D,QAAA,aAAA,IAAkB,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA,GAAK,KAAA;AAAA,MACjD;AACA,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,OAAA,IAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,IAAI,YAAY,CAAC,CAAA;AAC5B;AAeA,SAAS,kBAAkB,KAAA,EAAO;AAC9B,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,IAAA,YAAA,IAAgB,IAAA,CAAK,MAAA;AAAA,EACzB;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,YAAY,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,MAAM,CAAA;AACrC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,UAAU,CAAA;AAC5B,IAAA,UAAA,IAAc,IAAA,CAAK,MAAA;AAAA,EACvB;AACA,EAAA,OAAO,OAAA;AACX;AACA,SAAS,YAAA,GAAe;AACpB,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA;AACxC,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,UAAA,IAAc,CAAA,EAAG;AAC/B,IAAA,MAAM,aAAc,GAAA,CAAI,CAAC,MAAM,GAAA,IAAU,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA;AAClD,IAAA,MAAM,UAAA,GAAc,IAAI,CAAC,CAAA,KAAM,MAAW,GAAA,CAAI,CAAC,IAAI,GAAA,MAAU,CAAA;AAC7D,IAAA,IAAI,cAAc,UAAA,EAAY;AAC1B,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,wBAAwB,CAAA;AAAA,IAC/C;AAAA,EACJ;AACA,EAAA,MAAM,YAAA,GAAe,IAAI,WAAA,CAAY,IAAA,CAAK,SAAS,UAAU,CAAA;AAC7D,EAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAW,YAAY,CAAA;AAC9C,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,EAAA,EAAK;AAC/C,IAAA,UAAA,CAAW,CAAC,CAAA,GAAI,CAAA;AAAA,EACpB;AACA,EAAA,UAAA,CAAW,CAAC,CAAA,GAAK,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA;AAC1B,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,UAAA,EAAY,CAAC,CAAA;AACzC,EAAA,MAAM,cAAA,GAAiB,IAAI,WAAA,CAAY,IAAA,CAAK,SAAS,UAAU,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,IAAI,UAAA,CAAW,cAAc,CAAA;AAClD,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,EAAA,EAAK;AAC/C,IAAA,YAAA,CAAa,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AAAA,EAC3B;AACA,EAAA,YAAA,CAAa,CAAC,CAAA,IAAK,GAAA;AACnB,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,YAAA,EAAc,CAAC,CAAA;AAC7C,EAAA,OAAQ,QAAA,GAAW,MAAA;AACvB;AACA,SAAS,aAAa,KAAA,EAAO;AACzB,EAAA,MAAM,QAAA,GAAY,KAAA,GAAQ,CAAA,GAAM,KAAA,GAAS,EAAA,GAAO,KAAA;AAChD,EAAA,IAAI,MAAA,GAAS,GAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AACxB,IAAA,IAAI,YAAY,MAAA,EAAQ;AACpB,MAAA,IAAI,QAAQ,CAAA,EAAG;AACX,QAAA,MAAM,WAAW,MAAA,GAAS,QAAA;AAC1B,QAAA,MAAMC,OAAAA,GAAS,UAAA,CAAW,QAAA,EAAU,CAAA,EAAG,CAAC,CAAA;AACxC,QAAA,MAAMC,QAAAA,GAAU,IAAI,UAAA,CAAWD,OAAM,CAAA;AACrC,QAAAC,QAAAA,CAAQ,CAAC,CAAA,IAAK,GAAA;AACd,QAAA,OAAOD,OAAAA;AAAA,MACX;AACA,MAAA,IAAI,MAAA,GAAS,UAAA,CAAW,QAAA,EAAU,CAAA,EAAG,CAAC,CAAA;AACtC,MAAA,IAAI,OAAA,GAAU,IAAI,UAAA,CAAW,MAAM,CAAA;AACnC,MAAA,IAAI,OAAA,CAAQ,CAAC,CAAA,GAAI,GAAA,EAAM;AACnB,QAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAC9B,QAAA,MAAM,QAAA,GAAW,IAAI,UAAA,CAAW,OAAO,CAAA;AACvC,QAAA,MAAA,GAAS,IAAI,WAAA,CAAY,MAAA,CAAO,UAAA,GAAa,CAAC,CAAA;AAC9C,QAAA,OAAA,GAAU,IAAI,WAAW,MAAM,CAAA;AAC/B,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,YAAY,CAAA,EAAA,EAAK;AACzC,UAAA,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA;AAAA,QAC/B;AACA,QAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA;AAAA,MACjB;AACA,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,MAAA,IAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AAAA,EAC3B;AACA,EAAA,OAAQ,IAAI,YAAY,CAAC,CAAA;AAC7B;AACA,SAAS,aAAA,CAAc,cAAc,YAAA,EAAc;AAC/C,EAAA,IAAI,YAAA,CAAa,UAAA,KAAe,YAAA,CAAa,UAAA,EAAY;AACrD,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,YAAY,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,YAAY,CAAA;AACzC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,CAAA,EAAG;AACvB,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;AACA,SAAS,SAAA,CAAU,aAAa,UAAA,EAAY;AACxC,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,QAAA,CAAS,EAAE,CAAA;AACnC,EAAA,IAAI,UAAA,GAAa,IAAI,MAAA,EAAQ;AACzB,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,aAAa,GAAA,CAAI,MAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,IAAI,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC1B,IAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,GAAA;AAAA,EACjB;AACA,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AACrC,EAAA,OAAO,aAAA,CAAc,OAAO,GAAG,CAAA;AACnC;AAxMA,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wCAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAqUuB,EAAA;AAAA,CAAA,CAAA;;;ACrUvB,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,GAAA,EAAA,MAAA,GAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,OAAA,EAAA,MAAAE,QAAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,GAAA,EAAA,MAAAC,IAAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,YAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAqCA,SAAS,YAAA,GAAe;AACpB,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAC/B,IAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,EACvF;AACJ;AACA,SAAS,OAAO,OAAA,EAAS;AACrB,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,IAAA,YAAA,IAAgB,MAAA,CAAO,UAAA;AAAA,EAC3B;AACA,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,YAAY,CAAA;AAC3C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,UAAA,CAAW,MAAM,GAAG,UAAU,CAAA;AAC9C,IAAA,UAAA,IAAc,MAAA,CAAO,UAAA;AAAA,EACzB;AACA,EAAA,OAAO,OAAA,CAAQ,MAAA;AACnB;AACA,SAAS,iBAAA,CAAkB,SAAA,EAAW,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AACzE,EAAA,IAAI,EAAE,uBAAuB,UAAA,CAAA,EAAa;AACtC,IAAA,SAAA,CAAU,KAAA,GAAQ,mDAAA;AAClB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,CAAC,YAAY,UAAA,EAAY;AACzB,IAAA,SAAA,CAAU,KAAA,GAAQ,8CAAA;AAClB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,cAAc,CAAA,EAAG;AACjB,IAAA,SAAA,CAAU,KAAA,GAAQ,6CAAA;AAClB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,cAAc,CAAA,EAAG;AACjB,IAAA,SAAA,CAAU,KAAA,GAAQ,6CAAA;AAClB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAK,WAAA,CAAY,UAAA,GAAa,WAAA,GAAc,WAAA,GAAe,CAAA,EAAG;AAC1D,IAAA,SAAA,CAAU,KAAA,GAAQ,+FAAA;AAClB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA;AACX;AAiCA,SAAS,SAAS,SAAA,EAAW;AACzB,EAAA,IAAIC,GAAAA;AACJ,EAAA,OAAOA,GAAAA,GAAK,MAAM,IAAA,SAAa,SAAA,CAAU;AAAA,IACjC,IAAI,QAAA,GAAW;AACX,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA;AAAA,IACrC;AAAA,IACA,IAAI,SAAS,KAAA,EAAO;AAChB,MAAA,IAAA,CAAK,YAAA,GAAe,IAAI,UAAA,CAAW,KAAK,CAAA;AAAA,IAC5C;AAAA,IACA,eAAe,IAAA,EAAM;AACjB,MAAA,IAAI,EAAA;AACJ,MAAA,KAAA,CAAM,GAAG,IAAI,CAAA;AACb,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC3B,MAAA,IAAA,CAAK,aAAa,EAAA,GAAK,MAAA,CAAO,eAAe,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,KAAA;AAC1E,MAAA,IAAA,CAAK,eAAe,MAAA,CAAO,QAAA,GAAqB,sBAAsB,YAAA,CAAa,MAAA,CAAO,QAAQ,CAAA,GAAI,UAAA;AAAA,IAC1G;AAAA,IACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,QAAA,EAAU;AACrD,MAAA,MAAM,OAAO,WAAA,YAAuB,WAAA,GAAc,IAAI,UAAA,CAAW,WAAW,CAAA,GAAI,WAAA;AAChF,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,EAAM,IAAA,EAAM,WAAA,EAAa,WAAW,CAAA,EAAG;AAC1D,QAAA,OAAO,EAAA;AAAA,MACX;AACA,MAAA,MAAM,YAAY,WAAA,GAAc,WAAA;AAChC,MAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,QAAA,CAAS,WAAA,EAAa,SAAS,CAAA;AACxD,MAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAC3B,QAAA,IAAA,CAAK,QAAA,CAAS,KAAK,oBAAoB,CAAA;AACvC,QAAA,OAAO,WAAA;AAAA,MACX;AACA,MAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,MAAA,OAAO,SAAA;AAAA,IACX;AAAA,IACA,KAAA,CAAM,WAAW,KAAA,EAAO;AACpB,MAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACjB,QAAA,IAAA,CAAK,KAAA,GAAQ,oCAAA;AACb,QAAA,OAAO,YAAA;AAAA,MACX;AACA,MAAA,IAAI,QAAA,EAAU;AACV,QAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA;AAAA,MACvD;AACA,MAAA,OAAQ,IAAA,CAAK,YAAA,CAAa,UAAA,KAAe,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,UAAA,GAC5D,IAAA,CAAK,YAAA,CAAa,MAAA,GAClB,IAAA,CAAK,YAAA,CAAa,OAAM,CAAE,MAAA;AAAA,IACpC;AAAA,IACA,MAAA,GAAS;AACL,MAAA,OAAO;AAAA,QACH,GAAG,MAAM,MAAA,EAAO;AAAA,QAChB,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,QAAA,EAAoB,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,YAAY;AAAA,OACvD;AAAA,IACJ;AAAA,GACJ,EACAA,GAAAA,CAAG,IAAA,GAAO,UAAA,EACVA,GAAAA;AACR;AA0YA,SAAS,sBAAsB,SAAA,EAAW;AACtC,EAAA,IAAIA,GAAAA;AACJ,EAAA,IAAI,SAAA,YAAqB,UAAU,WAAA,EAAa;AAC5C,IAAA,KAAA,MAAW,KAAA,IAAS,SAAA,CAAU,UAAA,CAAW,KAAA,EAAO;AAC5C,MAAA,IAAI,qBAAA,CAAsB,KAAK,CAAA,EAAG;AAC9B,QAAA,SAAA,CAAU,SAAS,gBAAA,GAAmB,IAAA;AAAA,MAC1C;AAAA,IACJ;AAAA,EACJ;AACA,EAAA,OAAO,CAAC,GAAGA,GAAAA,GAAK,SAAA,CAAU,cAAc,IAAA,IAAQA,GAAAA,KAAO,MAAA,GAAS,MAAA,GAASA,GAAAA,CAAG,gBAAA,CAAA;AAChF;AAiEA,SAAS,oBAAA,CAAqB,OAAA,GAAU,EAAC,EAAG;AACxC,EAAA,IAAIA,KAAI,EAAA,EAAI,EAAA;AACZ,EAAA,OAAO;AAAA,IACH,KAAA,EAAO,CAAA;AAAA,IACP,WAAWA,GAAAA,GAAK,OAAA,CAAQ,cAAc,IAAA,IAAQA,GAAAA,KAAO,SAASA,GAAAA,GAAK,iBAAA;AAAA,IACnE,UAAA,EAAY,CAAA;AAAA,IACZ,WAAW,EAAA,GAAK,OAAA,CAAQ,cAAc,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,iBAAA;AAAA,IACnE,mBAAmB,EAAA,GAAK,OAAA,CAAQ,sBAAsB,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK;AAAA,GACvF;AACJ;AACA,SAAS,kBAAkB,KAAA,EAAO;AAC9B,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU,IAAI,UAAU,CAAA;AAC3C,EAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AACf,EAAA,OAAO;AAAA,IACH,MAAA,EAAQ,EAAA;AAAA,IACR;AAAA,GACJ;AACJ;AACA,SAAS,gBAAgB,OAAA,EAAS;AAC9B,EAAA,OAAA,CAAQ,UAAA,IAAc,CAAA;AACtB,EAAA,IAAI,OAAA,CAAQ,UAAA,GAAa,OAAA,CAAQ,QAAA,EAAU;AACvC,IAAA,OAAO,wBAAA;AAAA,EACX;AACA,EAAA,OAAO,MAAA;AACX;AACA,SAAS,uBAAA,CAAwB,aAAa,OAAA,EAAS;AACnD,EAAA,IAAI,WAAA,GAAc,QAAQ,gBAAA,EAAkB;AACxC,IAAA,OAAO,iCAAA;AAAA,EACX;AACA,EAAA,OAAO,MAAA;AACX;AACA,SAAS,4BAAA,CAA6B,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS;AAClF,EAAA,MAAM,UAAA,GAAa,QAAQ,KAAA,GAAQ,CAAA;AACnC,EAAA,IAAI,UAAA,GAAa,QAAQ,QAAA,EAAU;AAC/B,IAAA,OAAO,kBAAkB,wBAAwB,CAAA;AAAA,EACrD;AACA,EAAA,OAAA,CAAQ,KAAA,GAAQ,UAAA;AAChB,EAAA,IAAI;AACA,IAAA,OAAO,YAAA,CAAa,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,OAAO,CAAA;AAAA,EACtE,CAAA,SACA;AACI,IAAA,OAAA,CAAQ,KAAA,IAAS,CAAA;AAAA,EACrB;AACJ;AACA,SAAS,eAAA,CAAgB,aAAa,OAAA,EAAS;AAC3C,EAAA,IAAI,uBAAuB,OAAA,EAAS;AAChC,IAAA,OAAO,WAAA;AAAA,EACX;AACA,EAAA,MAAM,SAAA,GAAY,IAAI,OAAA,EAAQ;AAC9B,EAAA,SAAA,CAAU,UAAU,WAAA,CAAY,OAAA;AAChC,EAAA,SAAA,CAAU,WAAW,WAAA,CAAY,QAAA;AACjC,EAAA,SAAA,CAAU,WAAW,WAAA,CAAY,QAAA;AACjC,EAAA,SAAA,CAAU,wBAAwB,WAAA,CAAY,qBAAA;AAC9C,EAAA,OAAO,SAAA;AACX;AACA,SAAS,YAAA,CAAa,aAAa,WAAA,GAAc,CAAA,EAAG,cAAc,WAAA,CAAY,MAAA,EAAQ,OAAA,GAAU,oBAAA,EAAqB,EAAG;AACpH,EAAA,MAAM,cAAA,GAAiB,WAAA;AACvB,EAAA,IAAI,YAAA,GAAe,IAAI,SAAA,CAAU,IAAI,UAAU,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,IAAI,cAAA,EAAe;AACrC,EAAA,IAAI,CAAC,iBAAA,CAAkB,SAAA,EAAW,WAAA,EAAa,WAAA,EAAa,WAAW,CAAA,EAAG;AACtE,IAAA,YAAA,CAAa,QAAQ,SAAA,CAAU,KAAA;AAC/B,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,QAAA,CAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AAC7E,EAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACnB,IAAA,YAAA,CAAa,KAAA,GAAQ,oBAAA;AACrB,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,MAAM,eAAA,GAAkB,gBAAgB,OAAO,CAAA;AAC/C,EAAA,IAAI,eAAA,EAAiB;AACjB,IAAA,YAAA,CAAa,KAAA,GAAQ,eAAA;AACrB,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,IAAI,eAAe,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAa,aAAa,WAAW,CAAA;AACrF,EAAA,IAAI,YAAA,CAAa,OAAA,CAAQ,QAAA,CAAS,MAAA,EAAQ;AACtC,IAAA,YAAA,CAAa,QAAA,CAAS,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AAAA,EAC9D;AACA,EAAA,IAAI,iBAAiB,EAAA,EAAI;AACrB,IAAA,YAAA,CAAa,KAAA,GAAQ,aAAa,OAAA,CAAQ,KAAA;AAC1C,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,WAAA,GAAc,YAAA;AACd,EAAA,WAAA,IAAe,aAAa,OAAA,CAAQ,WAAA;AACpC,EAAA,YAAA,GAAe,YAAA,CAAa,QAAA,CAAS,OAAA,CAAQ,WAAA,EAAa,aAAa,WAAW,CAAA;AAClF,EAAA,IAAI,YAAA,CAAa,QAAA,CAAS,QAAA,CAAS,MAAA,EAAQ;AACvC,IAAA,YAAA,CAAa,QAAA,CAAS,MAAA,CAAO,YAAA,CAAa,QAAA,CAAS,QAAQ,CAAA;AAAA,EAC/D;AACA,EAAA,IAAI,iBAAiB,EAAA,EAAI;AACrB,IAAA,YAAA,CAAa,KAAA,GAAQ,aAAa,QAAA,CAAS,KAAA;AAC3C,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,WAAA,GAAc,YAAA;AACd,EAAA,WAAA,IAAe,aAAa,QAAA,CAAS,WAAA;AACrC,EAAA,MAAM,cAAc,YAAA,CAAa,QAAA,CAAS,gBAAA,GAAmB,WAAA,GAAc,aAAa,QAAA,CAAS,MAAA;AACjG,EAAA,MAAM,kBAAA,GAAqB,uBAAA,CAAwB,WAAA,EAAa,OAAO,CAAA;AACvE,EAAA,IAAI,kBAAA,EAAoB;AACpB,IAAA,YAAA,CAAa,KAAA,GAAQ,kBAAA;AACrB,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,IAAI,CAAC,YAAA,CAAa,OAAA,CAAQ,aAAA,IACnB,YAAA,CAAa,SAAS,gBAAA,EAAkB;AAC3C,IAAA,YAAA,CAAa,KAAA,GAAQ,yDAAA;AACrB,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,GAAc,SAAA;AAClB,EAAA,QAAQ,YAAA,CAAa,QAAQ,QAAA;AAAU,IACnC,KAAK,CAAA;AACD,MAAA,IAAK,aAAa,OAAA,CAAQ,SAAA,IAAa,MAC/B,YAAA,CAAa,OAAA,CAAQ,cAAc,KAAA,EAAQ;AAC/C,QAAA,YAAA,CAAa,KAAA,GAAQ,4DAAA;AACrB,QAAA,OAAO;AAAA,UACH,MAAA,EAAQ,EAAA;AAAA,UACR,MAAA,EAAQ;AAAA,SACZ;AAAA,MACJ;AACA,MAAA,QAAQ,YAAA,CAAa,QAAQ,SAAA;AAAW,QACpC,KAAK,CAAA;AACD,UAAA,IAAK,aAAa,OAAA,CAAQ,aAAA,IAClB,YAAA,CAAa,QAAA,CAAS,SAAS,CAAA,EAAI;AACvC,YAAA,YAAA,CAAa,KAAA,GAAQ,gCAAA;AACrB,YAAA,OAAO;AAAA,cACH,MAAA,EAAQ,EAAA;AAAA,cACR,MAAA,EAAQ;AAAA,aACZ;AAAA,UACJ;AACA,UAAA,WAAA,GAAc,SAAA,CAAU,YAAA;AACxB,UAAA;AAAA,QACJ,KAAK,CAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,OAAA;AACxB,UAAA;AAAA,QACJ,KAAK,CAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,OAAA;AACxB,UAAA;AAAA,QACJ,KAAK,CAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,SAAA;AACxB,UAAA;AAAA,QACJ,KAAK,CAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,WAAA;AACxB,UAAA;AAAA,QACJ,KAAK,CAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,IAAA;AACxB,UAAA;AAAA,QACJ,KAAK,CAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,gBAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,UAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,UAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,wBAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,IAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,YAAA,CAAa,KAAA,GAAQ,8CAAA;AACrB,UAAA,OAAO;AAAA,YACH,MAAA,EAAQ,EAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACZ;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,QAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,GAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,aAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,eAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,aAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,cAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,SAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,OAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,eAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,aAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,aAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,aAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,eAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,eAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,SAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,IAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,SAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,QAAA;AACxB,UAAA;AAAA,QACJ,KAAK,EAAA;AACD,UAAA,WAAA,GAAc,SAAA,CAAU,QAAA;AACxB,UAAA;AAAA,QACJ,SAAS;AACL,UAAA,MAAM,SAAA,GAAY,YAAA,CAAa,OAAA,CAAQ,aAAA,GACjC,IAAI,UAAU,WAAA,EAAY,GAC1B,IAAI,SAAA,CAAU,SAAA,EAAU;AAC9B,UAAA,SAAA,CAAU,UAAU,YAAA,CAAa,OAAA;AACjC,UAAA,SAAA,CAAU,WAAW,YAAA,CAAa,QAAA;AAClC,UAAA,SAAA,CAAU,WAAW,YAAA,CAAa,QAAA;AAClC,UAAA,YAAA,GAAe,SAAA;AAAA,QACnB;AAAA;AAEJ,MAAA;AAAA,IACJ,KAAK,CAAA;AAAA,IACL,KAAK,CAAA;AAAA,IACL,KAAK,CAAA;AAAA,IACL,SAAS;AACL,MAAA,WAAA,GAAc,YAAA,CAAa,OAAA,CAAQ,aAAA,GAC7B,SAAA,CAAU,cACV,SAAA,CAAU,SAAA;AAAA,IACpB;AAAA;AAEJ,EAAA,YAAA,GAAe,eAAA,CAAgB,cAAc,WAAW,CAAA;AACxD,EAAA,YAAA,GAAe,YAAA,CAAa,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,aAAa,OAAO,CAAA;AAClF,EAAA,YAAA,CAAa,wBAAwB,WAAA,CAAY,QAAA,CAAS,cAAA,EAAgB,cAAA,GAAiB,aAAa,WAAW,CAAA;AACnH,EAAA,OAAO;AAAA,IACH,MAAA,EAAQ,YAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACZ;AACJ;AACA,SAAS,OAAA,CAAQ,WAAA,EAAa,OAAA,GAAU,EAAC,EAAG;AACxC,EAAA,IAAI,CAAC,YAAY,UAAA,EAAY;AACzB,IAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU,IAAI,UAAU,CAAA;AAC3C,IAAA,MAAA,CAAO,KAAA,GAAQ,8BAAA;AACf,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,EAAA;AAAA,MACR;AAAA,KACJ;AAAA,EACJ;AACA,EAAA,OAAO,YAAA,CAAuB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA,CAAE,KAAA,EAAM,EAAG,CAAA,EAAG,WAAA,CAAY,UAAA,EAAY,oBAAA,CAAqB,OAAO,CAAC,CAAA;AACnJ;AAEA,SAAS,QAAA,CAAS,kBAAkB,MAAA,EAAQ;AACxC,EAAA,IAAI,gBAAA,EAAkB;AAClB,IAAA,OAAO,CAAA;AAAA,EACX;AACA,EAAA,OAAO,MAAA;AACX;AAigBA,SAAS,OAAA,CAAQ,OAAO,MAAA,EAAQ;AAC5B,EAAA,MAAM,CAAA,GAAI,IAAI,UAAA,CAAW,CAAC,CAAC,CAAC,CAAA;AAC5B,EAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,KAAK,CAAA;AACtC,EAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAW,MAAM,CAAA;AACxC,EAAA,IAAI,aAAA,GAAgB,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AACrC,EAAA,MAAM,mBAAA,GAAsB,cAAc,MAAA,GAAS,CAAA;AACnD,EAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AACzC,EAAA,MAAM,oBAAA,GAAuB,eAAe,MAAA,GAAS,CAAA;AACrD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,MAAM,GAAA,GAAO,oBAAA,GAAuB,mBAAA,GAAuB,mBAAA,GAAsB,oBAAA;AACjF,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,KAAA,IAAS,CAAA,GAAI,GAAA,EAAK,CAAA,IAAK,CAAA,EAAG,KAAK,OAAA,EAAA,EAAW;AACtC,IAAA,QAAQ,IAAA;AAAM,MACV,KAAM,UAAU,cAAA,CAAe,MAAA;AAC3B,QAAA,KAAA,GAAQ,aAAA,CAAc,sBAAsB,OAAO,CAAA,GAAI,eAAe,oBAAA,GAAuB,OAAO,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA;AAC3G,QAAA;AAAA,MACJ;AACI,QAAA,KAAA,GAAQ,aAAA,CAAc,mBAAA,GAAsB,OAAO,CAAA,GAAI,EAAE,CAAC,CAAA;AAAA;AAElE,IAAA,CAAA,CAAE,CAAC,IAAI,KAAA,GAAQ,EAAA;AACf,IAAA,QAAQ,IAAA;AAAM,MACV,KAAM,WAAW,aAAA,CAAc,MAAA;AAC3B,QAAA,aAAA,GAAwB,cAAA,CAAe,IAAI,UAAA,CAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAA;AAClF,QAAA;AAAA,MACJ;AACI,QAAA,aAAA,CAAc,mBAAA,GAAsB,OAAO,CAAA,GAAI,KAAA,GAAQ,EAAA;AAAA;AAC/D,EACJ;AACA,EAAA,IAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA;AACP,IAAA,aAAA,GAAwB,cAAA,CAAe,GAAG,aAAa,CAAA;AAC3D,EAAA,OAAO,aAAA;AACX;AACA,SAAS,OAAO,CAAA,EAAG;AACf,EAAA,IAAI,CAAA,IAAK,QAAQ,MAAA,EAAQ;AACrB,IAAA,KAAA,IAAS,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,CAAA,GAAI,IAAI,UAAA,CAAW,CAAC,CAAC,CAAC,CAAA;AAC5B,MAAA,IAAI,SAAU,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA,CAAG,MAAM,CAAC,CAAA;AACrC,MAAA,KAAA,IAAS,IAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAI,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,QAAA,MAAM,QAAA,GAAW,IAAI,UAAA,CAAW,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,IAAK,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AACzD,QAAA,CAAA,CAAE,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA,GAAI,EAAA;AACrB,QAAA,MAAA,CAAO,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA,GAAI,EAAA;AAAA,MAC9B;AACA,MAAA,IAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA;AACP,QAAA,MAAA,GAAiB,cAAA,CAAe,GAAG,MAAM,CAAA;AAC7C,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACvB;AAAA,EACJ;AACA,EAAA,OAAO,QAAQ,CAAC,CAAA;AACpB;AACA,SAAS,OAAA,CAAQ,OAAO,MAAA,EAAQ;AAC5B,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,KAAK,CAAA;AACtC,EAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAW,MAAM,CAAA;AACxC,EAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AACvC,EAAA,MAAM,mBAAA,GAAsB,cAAc,MAAA,GAAS,CAAA;AACnD,EAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AACzC,EAAA,MAAM,oBAAA,GAAuB,eAAe,MAAA,GAAS,CAAA;AACrD,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,KAAA,IAAS,CAAA,GAAI,oBAAA,EAAsB,CAAA,IAAK,CAAA,EAAG,KAAK,OAAA,EAAA,EAAW;AACvD,IAAA,KAAA,GAAQ,cAAc,mBAAA,GAAsB,OAAO,IAAI,cAAA,CAAe,oBAAA,GAAuB,OAAO,CAAA,GAAI,CAAA;AACxG,IAAA,QAAQ,IAAA;AAAM,MACV,KAAM,KAAA,GAAQ,CAAA;AACV,QAAA,CAAA,GAAI,CAAA;AACJ,QAAA,aAAA,CAAc,mBAAA,GAAsB,OAAO,CAAA,GAAI,KAAA,GAAQ,EAAA;AACvD,QAAA;AAAA,MACJ;AACI,QAAA,CAAA,GAAI,CAAA;AACJ,QAAA,aAAA,CAAc,mBAAA,GAAsB,OAAO,CAAA,GAAI,KAAA;AAAA;AACvD,EACJ;AACA,EAAA,IAAI,IAAI,CAAA,EAAG;AACP,IAAA,KAAA,IAAS,IAAK,mBAAA,GAAsB,oBAAA,GAAuB,GAAI,CAAA,IAAK,CAAA,EAAG,KAAK,OAAA,EAAA,EAAW;AACnF,MAAA,KAAA,GAAQ,aAAA,CAAc,mBAAA,GAAsB,OAAO,CAAA,GAAI,CAAA;AACvD,MAAA,IAAI,QAAQ,CAAA,EAAG;AACX,QAAA,CAAA,GAAI,CAAA;AACJ,QAAA,aAAA,CAAc,mBAAA,GAAsB,OAAO,CAAA,GAAI,KAAA,GAAQ,EAAA;AAAA,MAC3D,CAAA,MACK;AACD,QAAA,CAAA,GAAI,CAAA;AACJ,QAAA,aAAA,CAAc,mBAAA,GAAsB,OAAO,CAAA,GAAI,KAAA;AAC/C,QAAA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,EAAA,OAAO,cAAc,KAAA,EAAM;AAC/B;AAk1CA,SAAS,aAAA,CAAc,IAAA,EAAM,SAAA,EAAW,WAAA,EAAa;AACjD,EAAA,IAAI,uBAAuB,MAAA,EAAQ;AAC/B,IAAA,KAAA,MAAW,OAAA,IAAW,YAAY,KAAA,EAAO;AACrC,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,IAAA,EAAM,SAAA,EAAW,OAAO,CAAA;AACrD,MAAA,IAAI,OAAO,QAAA,EAAU;AACjB,QAAA,OAAO;AAAA,UACH,QAAA,EAAU,IAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACZ;AAAA,MACJ;AAAA,IACJ;AACA,IAAA;AACI,MAAA,MAAM,OAAA,GAAU;AAAA,QACZ,QAAA,EAAU,KAAA;AAAA,QACV,MAAA,EAAQ,EAAE,KAAA,EAAO,8BAAA;AAA+B,OACpD;AACA,MAAA,IAAI,WAAA,CAAY,eAAe,IAAI,CAAA;AAC/B,QAAA,OAAA,CAAQ,OAAO,WAAA,CAAY,IAAA;AAC/B,MAAA,OAAO,OAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,IAAI,uBAAuB,GAAA,EAAK;AAC5B,IAAA,IAAI,WAAA,CAAY,eAAe,IAAI,CAAA;AAC/B,MAAA,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,GAAI,SAAA;AAC7B,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,IAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,IAAK,IAAA,YAAgB,WAAY,KAAA,EAAO;AACpC,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,mBAAA;AAAoB,KACzC;AAAA,EACJ;AACA,EAAA,IAAK,SAAA,YAAqB,WAAY,KAAA,EAAO;AACzC,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,kBAAA;AAAmB,KACxC;AAAA,EACJ;AACA,EAAA,IAAK,WAAA,YAAuB,WAAY,KAAA,EAAO;AAC3C,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA;AAAqB,KAC1C;AAAA,EACJ;AACA,EAAA,IAAK,QAAA,IAAY,gBAAiB,KAAA,EAAO;AACrC,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA;AAAqB,KAC1C;AAAA,EACJ;AACA,EAAA,IAAK,QAAA,IAAY,WAAA,CAAY,OAAA,KAAa,KAAA,EAAO;AAC7C,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA;AAAqB,KAC1C;AAAA,EACJ;AACA,EAAA,IAAK,MAAA,IAAU,WAAA,CAAY,OAAA,KAAa,KAAA,EAAO;AAC3C,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA;AAAqB,KAC1C;AAAA,EACJ;AACA,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA;AACjD,EAAA,IAAI,SAAA,CAAU,eAAe,CAAA,EAAG;AAC5B,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,yCAAA;AAA0C,KAC/D;AAAA,EACJ;AACA,EAAA,MAAM,gBAAgB,WAAA,CAAY,OAAA,CAAQ,QAAQ,SAAA,EAAW,CAAA,EAAG,UAAU,UAAU,CAAA;AACpF,EAAA,IAAI,kBAAkB,EAAA,EAAI;AACtB,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,yCAAA;AAA0C,KAC/D;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,cAAA,CAAe,SAAS,MAAM,KAAA,EAAO;AACzD,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA;AAAqB,KAC1C;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,QAAA,KAAa,SAAA,CAAU,QAAQ,QAAA,EAAU;AAC7D,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,cAAA,CAAe,UAAU,MAAM,KAAA,EAAO;AAC1D,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA;AAAqB,KAC1C;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,SAAA,KAAc,SAAA,CAAU,QAAQ,SAAA,EAAW;AAC/D,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,cAAA,CAAe,cAAc,MAAM,KAAA,EAAO;AAC9D,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA;AAAqB,KAC1C;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,aAAA,KAAkB,SAAA,CAAU,QAAQ,aAAA,EAAe;AACvE,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,IAAI,EAAE,WAAA,IAAe,WAAA,CAAY,OAAA,CAAA,EAAU;AACvC,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA;AAAqB,KAC1C;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,SAAA,KAAc,SAAA,CAAU,QAAQ,SAAA,EAAW;AAC/D,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,CAAY,QAAQ,SAAA,EAAW;AAC/B,IAAA,IAAK,cAAA,IAAkB,WAAA,CAAY,OAAA,KAAa,KAAA,EAAO;AACnD,MAAA,OAAO;AAAA,QACH,QAAA,EAAU,KAAA;AAAA,QACV,MAAA,EAAQ,EAAE,KAAA,EAAO,oBAAA;AAAqB,OAC1C;AAAA,IACJ;AACA,IAAA,MAAM,UAAA,GAAa,YAAY,OAAA,CAAQ,YAAA;AACvC,IAAA,MAAM,QAAA,GAAW,UAAU,OAAA,CAAQ,YAAA;AACnC,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,QAAA,CAAS,MAAA,EAAQ;AACvC,MAAA,OAAO;AAAA,QACH,QAAA,EAAU,KAAA;AAAA,QACV,MAAA,EAAQ;AAAA,OACZ;AAAA,IACJ;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AACxC,MAAA,IAAI,UAAA,CAAW,CAAC,CAAA,KAAM,QAAA,CAAS,CAAC,CAAA,EAAG;AAC/B,QAAA,OAAO;AAAA,UACH,QAAA,EAAU,KAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACZ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,EAAA,IAAI,YAAY,IAAA,EAAM;AAClB,IAAA,WAAA,CAAY,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,cAAc,YAAY,CAAA;AACtE,IAAA,IAAI,WAAA,CAAY,IAAA;AACZ,MAAA,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,GAAI,SAAA;AAAA,EACjC;AACA,EAAA,IAAI,WAAA,YAAuB,UAAU,WAAA,EAAa;AAC9C,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,IAAI,MAAA,GAAS;AAAA,MACT,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,eAAA;AAAgB,KACrC;AACA,IAAA,IAAI,SAAA,GAAY,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,MAAA;AAC7C,IAAA,IAAI,YAAY,CAAA,EAAG;AACf,MAAA,IAAI,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,aAAa,QAAA,EAAU;AACrD,QAAA,SAAA,GAAY,SAAA,CAAU,WAAW,KAAA,CAAM,MAAA;AAAA,MAC3C;AAAA,IACJ;AACA,IAAA,IAAI,cAAc,CAAA,EAAG;AACjB,MAAA,OAAO;AAAA,QACH,QAAA,EAAU,IAAA;AAAA,QACV,MAAA,EAAQ;AAAA,OACZ;AAAA,IACJ;AACA,IAAA,IAAK,SAAA,CAAU,WAAW,KAAA,CAAM,MAAA,KAAW,KACnC,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,MAAA,KAAW,CAAA,EAAI;AAChD,MAAA,IAAI,SAAA,GAAY,IAAA;AAChB,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,UAAA,CAAW,MAAM,MAAA,EAAQ,CAAA,EAAA;AACrD,QAAA,SAAA,GAAY,cAAc,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,EAAE,QAAA,IAAY,KAAA,CAAA;AAC1E,MAAA,IAAI,SAAA,EAAW;AACX,QAAA,OAAO;AAAA,UACH,QAAA,EAAU,IAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACZ;AAAA,MACJ;AACA,MAAA,IAAI,YAAY,IAAA,EAAM;AAClB,QAAA,WAAA,CAAY,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,cAAc,YAAY,CAAA;AACtE,QAAA,IAAI,WAAA,CAAY,IAAA;AACZ,UAAA,OAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,MACpC;AACA,MAAA,IAAA,CAAK,KAAA,GAAQ,4BAAA;AACb,MAAA,OAAO;AAAA,QACH,QAAA,EAAU,KAAA;AAAA,QACV,MAAA,EAAQ;AAAA,OACZ;AAAA,IACJ;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAChC,MAAA,IAAK,CAAA,GAAI,SAAA,IAAc,SAAA,CAAU,UAAA,CAAW,MAAM,MAAA,EAAQ;AACtD,QAAA,IAAI,YAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,aAAa,KAAA,EAAO;AACpD,UAAA,MAAM,OAAA,GAAU;AAAA,YACZ,QAAA,EAAU,KAAA;AAAA,YACV,MAAA,EAAQ;AAAA,WACZ;AACA,UAAA,IAAA,CAAK,KAAA,GAAQ,mDAAA;AACb,UAAA,IAAI,YAAY,IAAA,EAAM;AAClB,YAAA,WAAA,CAAY,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,cAAc,YAAY,CAAA;AACtE,YAAA,IAAI,YAAY,IAAA,EAAM;AAClB,cAAA,OAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AAC5B,cAAA,OAAA,CAAQ,OAAO,WAAA,CAAY,IAAA;AAAA,YAC/B;AAAA,UACJ;AACA,UAAA,OAAO,OAAA;AAAA,QACX;AAAA,MACJ,CAAA,MACK;AACD,QAAA,IAAI,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,aAAa,QAAA,EAAU;AACrD,UAAA,MAAA,GAAS,aAAA,CAAc,IAAA,EAAM,SAAA,CAAU,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,EAAG,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,CAAA;AACjG,UAAA,IAAI,MAAA,CAAO,aAAa,KAAA,EAAO;AAC3B,YAAA,IAAI,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA;AAChC,cAAA,SAAA,EAAA;AAAA,iBACC;AACD,cAAA,IAAI,YAAY,IAAA,EAAM;AAClB,gBAAA,WAAA,CAAY,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,cAAc,YAAY,CAAA;AACtE,gBAAA,IAAI,WAAA,CAAY,IAAA;AACZ,kBAAA,OAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,cACpC;AACA,cAAA,OAAO,MAAA;AAAA,YACX;AAAA,UACJ;AACA,UAAA,IAAK,IAAA,IAAQ,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,IAAO,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA,EAAI;AAChG,YAAA,IAAI,YAAY,EAAC;AACjB,YAAA,IAAK,KAAA,IAAS,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,KAAO,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA;AAC/E,cAAA,SAAA,GAAY,SAAA;AAAA;AAEZ,cAAA,SAAA,GAAY,IAAA;AAChB,YAAA,IAAI,OAAO,UAAU,WAAA,CAAY,UAAA,CAAW,MAAM,CAAC,CAAA,CAAE,IAAI,CAAA,KAAM,WAAA;AAC3D,cAAA,SAAA,CAAU,YAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,IAAI,IAAI,EAAC;AACvD,YAAA,SAAA,CAAU,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,UACtF;AAAA,QACJ,CAAA,MACK;AACD,UAAA,MAAA,GAAS,aAAA,CAAc,IAAA,EAAM,SAAA,CAAU,UAAA,CAAW,KAAA,CAAM,CAAA,GAAI,SAAS,CAAA,EAAG,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA;AACvG,UAAA,IAAI,MAAA,CAAO,aAAa,KAAA,EAAO;AAC3B,YAAA,IAAI,WAAA,CAAY,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA;AAChC,cAAA,SAAA,EAAA;AAAA,iBACC;AACD,cAAA,IAAI,YAAY,IAAA,EAAM;AAClB,gBAAA,WAAA,CAAY,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,cAAc,YAAY,CAAA;AACtE,gBAAA,IAAI,WAAA,CAAY,IAAA;AACZ,kBAAA,OAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,cACpC;AACA,cAAA,OAAO,MAAA;AAAA,YACX;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,IAAI,MAAA,CAAO,aAAa,KAAA,EAAO;AAC3B,MAAA,MAAM,OAAA,GAAU;AAAA,QACZ,QAAA,EAAU,KAAA;AAAA,QACV,MAAA,EAAQ;AAAA,OACZ;AACA,MAAA,IAAI,YAAY,IAAA,EAAM;AAClB,QAAA,WAAA,CAAY,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,cAAc,YAAY,CAAA;AACtE,QAAA,IAAI,YAAY,IAAA,EAAM;AAClB,UAAA,OAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AAC5B,UAAA,OAAA,CAAQ,OAAO,WAAA,CAAY,IAAA;AAAA,QAC/B;AAAA,MACJ;AACA,MAAA,OAAO,OAAA;AAAA,IACX;AACA,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,IAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACA,EAAA,IAAI,WAAA,CAAY,eAAA,IACR,cAAA,IAAkB,SAAA,CAAU,UAAA,EAAa;AAC7C,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,SAAA,CAAU,UAAA,CAAW,YAAY,CAAA;AAC3D,IAAA,IAAI,IAAA,CAAK,WAAW,EAAA,EAAI;AACpB,MAAA,MAAM,OAAA,GAAU;AAAA,QACZ,QAAA,EAAU,KAAA;AAAA,QACV,QAAQ,IAAA,CAAK;AAAA,OACjB;AACA,MAAA,IAAI,YAAY,IAAA,EAAM;AAClB,QAAA,WAAA,CAAY,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,cAAc,YAAY,CAAA;AACtE,QAAA,IAAI,YAAY,IAAA,EAAM;AAClB,UAAA,OAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AAC5B,UAAA,OAAA,CAAQ,OAAO,WAAA,CAAY,IAAA;AAAA,QAC/B;AAAA,MACJ;AACA,MAAA,OAAO,OAAA;AAAA,IACX;AACA,IAAA,OAAO,aAAA,CAAc,IAAA,EAAM,IAAA,CAAK,MAAA,EAAQ,YAAY,eAAe,CAAA;AAAA,EACvE;AACA,EAAA,OAAO;AAAA,IACH,QAAA,EAAU,IAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACZ;AACJ;AACA,SAAS,YAAA,CAAa,aAAa,WAAA,EAAa;AAC5C,EAAA,IAAK,WAAA,YAAuB,WAAY,KAAA,EAAO;AAC3C,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAE,KAAA,EAAO,yBAAA;AAA0B,KAC/C;AAAA,EACJ;AACA,EAAA,MAAM,IAAA,GAAO,YAAA,CAAuB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAC,CAAA;AACnF,EAAA,IAAI,IAAA,CAAK,WAAW,EAAA,EAAI;AACpB,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,QAAQ,IAAA,CAAK;AAAA,KACjB;AAAA,EACJ;AACA,EAAA,OAAO,aAAA,CAAc,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,QAAQ,WAAW,CAAA;AAC9D;AA3nGA,IAiFM,UAAA,EAYA,OAAA,EACA,YAAA,EACA,IAAA,EACA,cAAA,EACA,WAAA,EACA,QAAA,EACA,SAAA,EACA,UAAA,EACA,cAAA,EACA,QAAA,EACA,MAAA,EACA,KAAA,EACA,cACA,YAAA,EACA,UAAA,EACA,mBAAA,EACA,iBAAA,EACA,eAAA,EAwDA,cAAA,EA4BA,UAAA,EAUA,wBAAA,EAoKA,gBAAA,EAmGA,SAAA,EAEA,SAAA,EAqGA,eAAA,EAoCA,wBAAA,EAQF,IAAA,EACE,WAYA,iBAAA,EACA,iBAAA,EACA,0BAAA,EACA,wBAAA,EACA,wBAAA,EACA,iCAAA,EAgSA,0BAAA,EAmEF,IAAA,EACE,WAAA,EAuCA,2BAAA,EAUF,IAAA,EACE,YAAA,EAaF,IAAA,EACE,IAAA,EA0CA,wBAiDF,IAAA,EACEF,QAAAA,EAsBA,0BAAA,EAmDF,IAAA,EACE,WAAA,EAwEA,wBAAA,EA8FF,IAAA,EACE,SAAA,EA8CF,IAAA,EAwFE,sBAAA,EA2IF,IAAA,EACE,OAAA,EAwDF,IAAA,EACE,UAAA,EAaA,oBAmHA,+BAAA,EA+HF,IAAA,EACE,gBAAA,EA4BA,0BAAA,EAiFA,uCAAA,EAsFF,IAAA,EACE,wBAAA,EA4BF,IAAA,EACE,QAAA,EAaF,IAAA,EACEC,IAAAA,EAaA,qBAAA,EAeA,2BAAA,EAIA,sBAAA,EAiBA,2BAkBF,IAAA,EACE,UAAA,EAaA,wBAAA,EAYF,IAAA,EACE,SAAA,EAaA,8BAAA,EA6BF,IAAA,EACE,eAAA,EAaF,IAAA,EACE,aAAA,EAaF,IAAA,EACE,eAAA,EAaF,IAAA,EACE,aAAA,EAaF,MACE,cAAA,EAaF,IAAA,EACE,SAAA,EAaF,IAAA,EACE,aAAA,EAaF,IAAA,EACE,aAAA,EAaF,IAAA,EACE,aAAA,EAaF,IAAA,EACE,eAAA,EAaF,IAAA,EACE,OAAA,EAiGF,IAAA,EACE,iBAsLF,IAAA,EACE,IAAA,EAaF,IAAA,EACE,SAAA,EAaF,IAAA,EACE,QAAA,EAaF,IAAA,EACE,QAAA,EAaF,EAAA,EACE,IAAA,EAaA,GAAA,EAOA,MAAA,EAOA,QAAA,EAQA,OAAA;AA5yFN,IAAAE,cAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uCAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAkCA,IAAA,aAAA,EAAA;AACA,IAAA,aAAA,EAAA;AA8CA,IAAM,aAAN,MAAiB;AAAA,MACb,WAAA,GAAc;AACV,QAAA,IAAA,CAAK,QAAQ,EAAC;AAAA,MAClB;AAAA,MACA,MAAM,GAAA,EAAK;AACP,QAAA,IAAA,CAAK,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,MACvB;AAAA,MACA,KAAA,GAAQ;AACJ,QAAA,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,MAC5B;AAAA,KACJ;AAEA,IAAM,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AACpC,IAAM,YAAA,GAAe,YAAA;AACrB,IAAM,IAAA,GAAO,MAAA;AACb,IAAM,cAAA,GAAiB,cAAA;AACvB,IAAM,WAAA,GAAc,WAAA;AACpB,IAAM,QAAA,GAAW,SAAA;AACjB,IAAM,SAAA,GAAY,UAAA;AAClB,IAAM,UAAA,GAAa,WAAA;AACnB,IAAM,cAAA,GAAiB,eAAA;AACvB,IAAM,QAAA,GAAW,SAAA;AACjB,IAAM,MAAA,GAAS,OAAA;AACf,IAAM,KAAA,GAAQ,OAAA;AACd,IAAM,YAAA,GAAe,EAAA;AACrB,IAAM,YAAA,GAAe,IAAI,WAAA,CAAY,CAAC,CAAA;AACtC,IAAM,UAAA,GAAa,IAAI,UAAA,CAAW,CAAC,CAAA;AACnC,IAAM,mBAAA,GAAsB,cAAA;AAC5B,IAAM,iBAAA,GAAoB,cAAA;AAC1B,IAAM,eAAA,GAAkB,YAAA;AAwDxB,IAAM,iBAAN,MAAqB;AAAA,MACjB,OAAO,SAAA,GAAY;AACf,QAAA,OAAO,IAAA,CAAK,IAAA;AAAA,MAChB;AAAA,MACA,IAAI,iBAAA,GAAoB;AACpB,QAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,KAAA,EAAM,CAAE,MAAA;AAAA,MAC9C;AAAA,MACA,IAAI,kBAAkB,KAAA,EAAO;AACzB,QAAA,IAAA,CAAK,qBAAA,GAAwB,IAAI,UAAA,CAAW,KAAK,CAAA;AAAA,MACrD;AAAA,MACA,WAAA,CAAY,EAAE,WAAA,GAAc,CAAA,EAAG,KAAA,GAAQ,YAAA,EAAc,QAAA,GAAW,EAAC,EAAG,iBAAA,GAAoB,UAAA,EAAY,GAAI,EAAC,EAAG;AACxG,QAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,QAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,QAAA,IAAA,CAAK,qBAAA,GAAkC,qBAAA,CAAsB,YAAA,CAAa,iBAAiB,CAAA;AAAA,MAC/F;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,SAAA,EAAW,KAAK,WAAA,CAAY,IAAA;AAAA,UAC5B,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,iBAAA,EAA6B,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,qBAAqB;AAAA,SACzE;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,cAAA,CAAe,IAAA,GAAO,WAAA;AAEtB,IAAM,UAAA,GAAN,cAAyB,cAAA,CAAe;AAAA,MACpC,OAAA,CAAQ,YAAA,EAAc,YAAA,EAAc,YAAA,EAAc,QAAA,EAAU;AACxD,QAAA,MAAM,UAAU,6EAA6E,CAAA;AAAA,MACjG;AAAA,MACA,KAAA,CAAM,WAAW,OAAA,EAAS;AACtB,QAAA,MAAM,UAAU,6EAA6E,CAAA;AAAA,MACjG;AAAA,KACJ;AACA,IAAA,UAAA,CAAW,IAAA,GAAO,YAAA;AAElB,IAAM,wBAAA,GAAN,cAAuC,QAAA,CAAS,cAAc,CAAA,CAAE;AAAA,MAC5D,YAAY,EAAE,OAAA,GAAU,EAAC,EAAE,GAAI,EAAC,EAAG;AAC/B,QAAA,IAAID,GAAAA,EAAI,IAAI,EAAA,EAAI,EAAA;AAChB,QAAA,KAAA,EAAM;AACN,QAAA,IAAI,OAAA,EAAS;AACT,UAAA,IAAA,CAAK,aAAaA,GAAAA,GAAK,OAAA,CAAQ,eAAe,IAAA,IAAQA,GAAAA,KAAO,SAASA,GAAAA,GAAK,KAAA;AAC3E,UAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,QAAA,GACZ,sBAAsB,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA,GAC7D,UAAA;AACN,UAAA,IAAA,CAAK,YAAY,EAAA,GAAK,OAAA,CAAQ,cAAc,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAA;AACzE,UAAA,IAAA,CAAK,aAAa,EAAA,GAAK,OAAA,CAAQ,eAAe,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,EAAA;AAC3E,UAAA,IAAA,CAAK,iBAAiB,EAAA,GAAK,OAAA,CAAQ,mBAAmB,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,KAAA;AAAA,QACvF,CAAA,MACK;AACD,UAAA,IAAA,CAAK,QAAA,GAAW,EAAA;AAChB,UAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AACjB,UAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA,QACzB;AAAA,MACJ;AAAA,MACA,KAAA,CAAM,WAAW,KAAA,EAAO;AACpB,QAAA,IAAI,UAAA,GAAa,CAAA;AACjB,QAAA,QAAQ,KAAK,QAAA;AAAU,UACnB,KAAK,CAAA;AACD,YAAA,UAAA,IAAc,CAAA;AACd,YAAA;AAAA,UACJ,KAAK,CAAA;AACD,YAAA,UAAA,IAAc,EAAA;AACd,YAAA;AAAA,UACJ,KAAK,CAAA;AACD,YAAA,UAAA,IAAc,GAAA;AACd,YAAA;AAAA,UACJ,KAAK,CAAA;AACD,YAAA,UAAA,IAAc,GAAA;AACd,YAAA;AAAA,UACJ;AACI,YAAA,IAAA,CAAK,KAAA,GAAQ,mBAAA;AACb,YAAA,OAAO,YAAA;AAAA;AAEf,QAAA,IAAI,IAAA,CAAK,aAAA;AACL,UAAA,UAAA,IAAc,EAAA;AAClB,QAAA,IAAI,IAAA,CAAK,SAAA,GAAY,EAAA,IAAM,CAAC,KAAK,SAAA,EAAW;AACxC,UAAA,MAAMH,QAAAA,GAAU,IAAI,UAAA,CAAW,CAAC,CAAA;AAChC,UAAA,IAAI,CAAC,QAAA,EAAU;AACX,YAAA,IAAI,SAAS,IAAA,CAAK,SAAA;AAClB,YAAA,MAAA,IAAU,EAAA;AACV,YAAA,UAAA,IAAc,MAAA;AACd,YAAAA,QAAAA,CAAQ,CAAC,CAAA,GAAI,UAAA;AAAA,UACjB;AACA,UAAA,OAAOA,QAAAA,CAAQ,MAAA;AAAA,QACnB;AACA,QAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACjB,UAAA,MAAM,UAAA,GAAqB,UAAA,CAAW,IAAA,CAAK,SAAA,EAAW,CAAC,CAAA;AACvD,UAAA,MAAM,WAAA,GAAc,IAAI,UAAA,CAAW,UAAU,CAAA;AAC7C,UAAA,MAAM,OAAO,UAAA,CAAW,UAAA;AACxB,UAAA,MAAMA,QAAAA,GAAU,IAAI,UAAA,CAAW,IAAA,GAAO,CAAC,CAAA;AACvC,UAAAA,QAAAA,CAAQ,CAAC,CAAA,GAAK,UAAA,GAAa,EAAA;AAC3B,UAAA,IAAI,CAAC,QAAA,EAAU;AACX,YAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAK,IAAA,GAAO,CAAA,EAAI,CAAA,EAAA;AAC5B,cAAAA,SAAQ,CAAA,GAAI,CAAC,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA,GAAI,GAAA;AACtC,YAAAA,QAAAA,CAAQ,IAAI,CAAA,GAAI,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,UACxC;AACA,UAAA,OAAOA,QAAAA,CAAQ,MAAA;AAAA,QACnB;AACA,QAAA,MAAM,UAAU,IAAI,UAAA,CAAW,IAAA,CAAK,YAAA,CAAa,aAAa,CAAC,CAAA;AAC/D,QAAA,OAAA,CAAQ,CAAC,IAAK,UAAA,GAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAA,EAAU;AACX,UAAA,MAAM,UAAU,IAAA,CAAK,YAAA;AACrB,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAK,OAAA,CAAQ,SAAS,CAAA,EAAI,CAAA,EAAA;AACtC,YAAA,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,GAAI,GAAA;AAClC,UAAA,OAAA,CAAQ,KAAK,YAAA,CAAa,UAAU,IAAI,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,QACtE;AACA,QAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,MACnB;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,MAAM,SAAA,GAAsB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA;AAC1E,QAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,EAAM,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA,EAAG;AAC/D,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,MAAM,SAAA,GAAY,SAAA,CAAU,QAAA,CAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AAC3E,QAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AACxB,UAAA,IAAA,CAAK,KAAA,GAAQ,oBAAA;AACb,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,MAAM,YAAA,GAAe,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA;AACpC,QAAA,QAAQ,YAAA;AAAc,UAClB,KAAK,CAAA;AACD,YAAA,IAAA,CAAK,QAAA,GAAY,CAAA;AACjB,YAAA;AAAA,UACJ,KAAK,EAAA;AACD,YAAA,IAAA,CAAK,QAAA,GAAY,CAAA;AACjB,YAAA;AAAA,UACJ,KAAK,GAAA;AACD,YAAA,IAAA,CAAK,QAAA,GAAY,CAAA;AACjB,YAAA;AAAA,UACJ,KAAK,GAAA;AACD,YAAA,IAAA,CAAK,QAAA,GAAY,CAAA;AACjB,YAAA;AAAA,UACJ;AACI,YAAA,IAAA,CAAK,KAAA,GAAQ,mBAAA;AACb,YAAA,OAAO,EAAA;AAAA;AAEf,QAAA,IAAA,CAAK,aAAA,GAAA,CAAiB,SAAA,CAAU,CAAC,CAAA,GAAI,EAAA,MAAU,EAAA;AAC/C,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,CAAC,CAAA,GAAI,EAAA;AACrC,QAAA,IAAI,kBAAkB,EAAA,EAAM;AACxB,UAAA,IAAA,CAAK,SAAA,GAAa,aAAA;AAClB,UAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AAAA,QACvB,CAAA,MACK;AACD,UAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,UAAA,OAAO,IAAA,EAAM;AACT,YAAA,MAAM,eAAe,KAAA,GAAQ,CAAA;AAC7B,YAAA,IAAI,YAAA,IAAgB,UAAU,MAAA,EAAQ;AAClC,cAAA,IAAA,CAAK,KAAA,GAAQ,uDAAA;AACb,cAAA,OAAO,EAAA;AAAA,YACX;AACA,YAAA,KAAA,EAAA;AACA,YAAA,IAAA,CAAK,SAAA,CAAU,YAAY,CAAA,GAAI,GAAA,MAAU,CAAA;AACrC,cAAA;AAAA,UACR;AACA,UAAA,IAAA,CAAK,cAAe,KAAA,GAAQ,CAAA;AAC5B,UAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,YAAA,GAAe,IAAI,WAAW,KAAK,CAAA;AACnE,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA;AACvB,YAAA,kBAAA,CAAmB,CAAC,CAAA,GAAI,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA;AAC/C,UAAA,IAAI,KAAK,WAAA,IAAe,CAAA;AACpB,YAAA,IAAA,CAAK,SAAA,GAAoB,YAAA,CAAa,kBAAA,EAAoB,CAAC,CAAA;AAAA,eAC1D;AACD,YAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,YAAA,IAAA,CAAK,QAAA,CAAS,KAAK,wCAAwC,CAAA;AAAA,UAC/D;AAAA,QACJ;AACA,QAAA,IAAM,IAAA,CAAK,QAAA,KAAa,CAAA,IAChB,IAAA,CAAK,aAAA,EAAgB;AACzB,UAAA,QAAQ,KAAK,SAAA;AAAW,YACpB,KAAK,CAAA;AAAA,YACL,KAAK,CAAA;AAAA,YACL,KAAK,CAAA;AAAA,YACL,KAAK,CAAA;AAAA,YACL,KAAK,CAAA;AAAA,YACL,KAAK,EAAA;AAAA,YACL,KAAK,EAAA;AAAA,YACL,KAAK,EAAA;AAAA,YACL,KAAK,EAAA;AAAA,YACL,KAAK,EAAA;AAAA,YACL,KAAK,EAAA;AAAA,YACL,KAAK,EAAA;AAAA,YACL,KAAK,EAAA;AACD,cAAA,IAAA,CAAK,KAAA,GAAQ,8CAAA;AACb,cAAA,OAAO,EAAA;AAAA;AACf,QACJ;AACA,QAAA,OAAQ,cAAc,IAAA,CAAK,WAAA;AAAA,MAC/B;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,WAAW,IAAA,CAAK,SAAA;AAAA,UAChB,eAAe,IAAA,CAAK;AAAA,SACxB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,wBAAA,CAAyB,IAAA,GAAO,qBAAA;AAEhC,IAAM,gBAAA,GAAN,cAA+B,cAAA,CAAe;AAAA,MAC1C,YAAY,EAAE,QAAA,GAAW,EAAC,EAAE,GAAI,EAAC,EAAG;AAChC,QAAA,IAAIG,KAAI,EAAA,EAAI,EAAA;AACZ,QAAA,KAAA,EAAM;AACN,QAAA,IAAA,CAAK,oBAAoBA,GAAAA,GAAK,QAAA,CAAS,sBAAsB,IAAA,IAAQA,GAAAA,KAAO,SAASA,GAAAA,GAAK,KAAA;AAC1F,QAAA,IAAA,CAAK,gBAAgB,EAAA,GAAK,QAAA,CAAS,kBAAkB,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,KAAA;AAClF,QAAA,IAAA,CAAK,UAAU,EAAA,GAAK,QAAA,CAAS,YAAY,IAAA,IAAQ,EAAA,KAAO,SAAS,EAAA,GAAK,CAAA;AAAA,MAC1E;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,MAAM,IAAA,GAAiB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA;AACrE,QAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,EAAM,IAAA,EAAM,WAAA,EAAa,WAAW,CAAA,EAAG;AAC1D,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AACtE,QAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AACxB,UAAA,IAAA,CAAK,KAAA,GAAQ,oBAAA;AACb,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,IAAI,SAAA,CAAU,CAAC,CAAA,KAAM,GAAA,EAAM;AACvB,UAAA,IAAA,CAAK,KAAA,GAAQ,2CAAA;AACb,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,IAAA,CAAK,gBAAA,GAAmB,SAAA,CAAU,CAAC,CAAA,KAAM,GAAA;AACzC,QAAA,IAAI,KAAK,gBAAA,EAAkB;AACvB,UAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AACnB,UAAA,OAAQ,cAAc,IAAA,CAAK,WAAA;AAAA,QAC/B;AACA,QAAA,IAAA,CAAK,YAAA,GAAe,CAAC,EAAE,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA,CAAA;AACtC,QAAA,IAAI,IAAA,CAAK,iBAAiB,KAAA,EAAO;AAC7B,UAAA,IAAA,CAAK,MAAA,GAAU,UAAU,CAAC,CAAA;AAC1B,UAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AACnB,UAAA,OAAQ,cAAc,IAAA,CAAK,WAAA;AAAA,QAC/B;AACA,QAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA;AAC7B,QAAA,IAAI,QAAQ,CAAA,EAAG;AACX,UAAA,IAAA,CAAK,KAAA,GAAQ,iBAAA;AACb,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,IAAK,KAAA,GAAQ,CAAA,GAAK,SAAA,CAAU,MAAA,EAAQ;AAChC,UAAA,IAAA,CAAK,KAAA,GAAQ,uDAAA;AACb,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,MAAM,YAAY,WAAA,GAAc,CAAA;AAChC,QAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,YAAY,KAAK,CAAA;AACnE,QAAA,IAAI,gBAAA,CAAiB,KAAA,GAAQ,CAAC,CAAA,KAAM,CAAA;AAChC,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,gCAAgC,CAAA;AACvD,QAAA,IAAA,CAAK,MAAA,GAAiB,YAAA,CAAa,gBAAA,EAAkB,CAAC,CAAA;AACtD,QAAA,IAAI,IAAA,CAAK,YAAA,IAAiB,IAAA,CAAK,MAAA,IAAU,GAAA;AACrC,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,uCAAuC,CAAA;AAC9D,QAAA,IAAA,CAAK,cAAc,KAAA,GAAQ,CAAA;AAC3B,QAAA,OAAQ,cAAc,IAAA,CAAK,WAAA;AAAA,MAC/B;AAAA,MACA,KAAA,CAAM,WAAW,KAAA,EAAO;AACpB,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,OAAA;AACJ,QAAA,IAAI,KAAK,MAAA,GAAS,GAAA;AACd,UAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACxB,QAAA,IAAI,KAAK,gBAAA,EAAkB;AACvB,UAAA,MAAA,GAAS,IAAI,YAAY,CAAC,CAAA;AAC1B,UAAA,IAAI,aAAa,KAAA,EAAO;AACpB,YAAA,OAAA,GAAU,IAAI,WAAW,MAAM,CAAA;AAC/B,YAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,GAAA;AAAA,UACjB;AACA,UAAA,OAAO,MAAA;AAAA,QACX;AACA,QAAA,IAAI,KAAK,YAAA,EAAc;AACnB,UAAA,MAAM,UAAA,GAAqB,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAA;AACpD,UAAA,IAAI,UAAA,CAAW,aAAa,GAAA,EAAK;AAC7B,YAAA,IAAA,CAAK,KAAA,GAAQ,gBAAA;AACb,YAAA,OAAQ,YAAA;AAAA,UACZ;AACA,UAAA,MAAA,GAAS,IAAI,WAAA,CAAY,UAAA,CAAW,UAAA,GAAa,CAAC,CAAA;AAClD,UAAA,IAAI,QAAA;AACA,YAAA,OAAO,MAAA;AACX,UAAA,MAAM,WAAA,GAAc,IAAI,UAAA,CAAW,UAAU,CAAA;AAC7C,UAAA,OAAA,GAAU,IAAI,WAAW,MAAM,CAAA;AAC/B,UAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,UAAA,CAAW,UAAA,GAAa,GAAA;AACrC,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,UAAA,EAAY,CAAA,EAAA;AACvC,YAAA,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA;AAClC,UAAA,OAAO,MAAA;AAAA,QACX;AACA,QAAA,MAAA,GAAS,IAAI,YAAY,CAAC,CAAA;AAC1B,QAAA,IAAI,aAAa,KAAA,EAAO;AACpB,UAAA,OAAA,GAAU,IAAI,WAAW,MAAM,CAAA;AAC/B,UAAA,OAAA,CAAQ,CAAC,IAAI,IAAA,CAAK,MAAA;AAAA,QACtB;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,kBAAkB,IAAA,CAAK,gBAAA;AAAA,UACvB,cAAc,IAAA,CAAK,YAAA;AAAA,UACnB,QAAQ,IAAA,CAAK;AAAA,SACjB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,gBAAA,CAAiB,IAAA,GAAO,aAAA;AAExB,IAAM,YAAY,EAAC;AAEnB,IAAM,SAAA,GAAN,cAAwB,cAAA,CAAe;AAAA,MACnC,WAAA,CAAY,EAAE,IAAA,GAAO,YAAA,EAAc,QAAA,GAAW,KAAA,EAAO,eAAA,EAAiB,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG,cAAA,EAAgB;AACxG,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,QAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,QAAA,IAAI,eAAA,EAAiB;AACjB,UAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AAAA,QAC3B;AACA,QAAA,IAAA,CAAK,OAAA,GAAU,IAAI,wBAAA,CAAyB,UAAU,CAAA;AACtD,QAAA,IAAA,CAAK,QAAA,GAAW,IAAI,gBAAA,CAAiB,UAAU,CAAA;AAC/C,QAAA,IAAA,CAAK,UAAA,GAAa,iBAAiB,IAAI,cAAA,CAAe,UAAU,CAAA,GAAI,IAAI,WAAW,UAAU,CAAA;AAAA,MACjG;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS;AACpD,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAc,IAAA,CAAK,QAAA,CAAS,gBAAA,GAChF,WAAA,GACA,IAAA,CAAK,QAAA,CAAS,QAAQ,OAAO,CAAA;AACnC,QAAA,IAAI,iBAAiB,EAAA,EAAI;AACrB,UAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,UAAA,CAAW,KAAA;AAC7B,UAAA,OAAO,YAAA;AAAA,QACX;AACA,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA;AACpB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,OAAA,CAAQ,WAAA;AACrC,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,MAAA;AACrB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,QAAA,CAAS,WAAA;AACtC,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,MAAA;AACvB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,UAAA,CAAW,WAAA;AACxC,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,MACA,KAAA,CAAM,UAAU,MAAA,EAAQ;AACpB,QAAA,MAAM,OAAA,GAAU,MAAA,IAAU,IAAI,UAAA,EAAW;AACzC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACT,UAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,QAC9B;AACA,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA;AAC9C,QAAA,OAAA,CAAQ,MAAM,UAAU,CAAA;AACxB,QAAA,IAAI,IAAA,CAAK,SAAS,gBAAA,EAAkB;AAChC,UAAA,OAAA,CAAQ,MAAM,IAAI,UAAA,CAAW,CAAC,GAAI,CAAC,EAAE,MAAM,CAAA;AAC3C,UAAA,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAA,EAAU,OAAO,CAAA;AACvC,UAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,WAAA,CAAY,CAAC,CAAC,CAAA;AAAA,QACpC,CAAA,MACK;AACD,UAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAQ,CAAA;AACpD,UAAA,IAAA,CAAK,QAAA,CAAS,SAAS,aAAA,CAAc,UAAA;AACrC,UAAA,MAAM,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,QAAQ,CAAA;AAChD,UAAA,OAAA,CAAQ,MAAM,WAAW,CAAA;AACzB,UAAA,OAAA,CAAQ,MAAM,aAAa,CAAA;AAAA,QAC/B;AACA,QAAA,IAAI,CAAC,MAAA,EAAQ;AACT,UAAA,OAAO,QAAQ,KAAA,EAAM;AAAA,QACzB;AACA,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,MACA,MAAA,GAAS;AACL,QAAA,MAAM,MAAA,GAAS;AAAA,UACX,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO;AAAA,UAC7B,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO;AAAA,UAC/B,UAAA,EAAY,IAAA,CAAK,UAAA,CAAW,MAAA,EAAO;AAAA,UACnC,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,UAAU,IAAA,CAAK;AAAA,SACnB;AACA,QAAA,IAAI,IAAA,CAAK,eAAA;AACL,UAAA,MAAA,CAAO,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAO;AACzD,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,QAAA,CAAS,WAAW,OAAA,EAAS;AACzB,QAAA,IAAI,aAAa,OAAA,EAAS;AACtB,UAAA,OAAO,KAAK,eAAA,EAAgB;AAAA,QAChC;AACA,QAAA,OAAiB,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,MAC/C;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,MAAM,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC9B,QAAA,MAAM,KAAA,GAAkB,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,WAAW,qBAAqB,CAAA;AAC3E,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA;AAAA,MAC7B;AAAA,MACA,QAAQ,KAAA,EAAO;AACX,QAAA,IAAI,SAAS,KAAA,EAAO;AAChB,UAAA,OAAO,IAAA;AAAA,QACX;AACA,QAAA,IAAI,EAAE,KAAA,YAAiB,IAAA,CAAK,WAAA,CAAA,EAAc;AACtC,UAAA,OAAO,KAAA;AAAA,QACX;AACA,QAAA,MAAM,OAAA,GAAU,KAAK,KAAA,EAAM;AAC3B,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,EAAM;AAC7B,QAAA,OAAe,aAAA,CAAc,SAAS,QAAQ,CAAA;AAAA,MAClD;AAAA,KACJ;AACA,IAAA,SAAA,CAAU,IAAA,GAAO,WAAA;AAajB,IAAM,eAAA,GAAN,cAA8B,SAAA,CAAU;AAAA,MACpC,QAAA,GAAW;AACP,QAAA,OAAO,KAAK,UAAA,CAAW,KAAA;AAAA,MAC3B;AAAA,MACA,SAAS,KAAA,EAAO;AACZ,QAAA,IAAA,CAAK,WAAW,KAAA,GAAQ,KAAA;AAAA,MAC5B;AAAA,MACA,WAAA,CAAY,EAAE,KAAA,GAAQ,YAAA,EAAc,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG,oBAAA,EAAsB;AAC5E,QAAA,KAAA,CAAM,YAAY,oBAAoB,CAAA;AACtC,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,QACzB;AAAA,MACJ;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAc,IAAA,CAAK,QAAA,CAAS,gBAAA,GAChF,WAAA,GACA,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAC1B,QAAA,IAAI,iBAAiB,EAAA,EAAI;AACrB,UAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,UAAA,CAAW,KAAA;AAC7B,UAAA,OAAO,YAAA;AAAA,QACX;AACA,QAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA;AAC5C,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA;AACpB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,OAAA,CAAQ,WAAA;AACrC,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,MAAA;AACrB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,QAAA,CAAS,WAAA;AACtC,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,MAAA;AACvB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,UAAA,CAAW,WAAA;AACxC,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,OAAO,GAAG,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,IAAA,EAAO,IAAA,CAAK,WAAW,KAAK,CAAA,CAAA,CAAA;AAAA,MAC/D;AAAA,KACJ;AACA,IAAA,eAAA,CAAgB,IAAA,GAAO,iBAAA;AAEvB,IAAM,wBAAA,GAAN,cAAuC,QAAA,CAAS,UAAU,CAAA,CAAE;AAAA,MACxD,WAAA,CAAY,EAAE,SAAA,GAAY,IAAA,EAAM,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAClD,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,MACrB;AAAA,KACJ;AACA,IAAA,wBAAA,CAAyB,IAAA,GAAO,qBAAA;AAGhC,IAAM,SAAA,GAAN,cAAwB,SAAA,CAAU;AAAA,MAC9B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,YAAY,wBAAwB,CAAA;AAC1C,QAAA,IAAA,CAAK,QAAQ,aAAA,GAAgB,KAAA;AAAA,MACjC;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,SAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,SAAA,GAAY,IAAA;AAAA,IAC1B,CAAA,GAAG;AACH,IAAA,SAAA,CAAU,IAAA,GAAO,WAAA;AAEjB,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,0BAAA,GAA6B,KAAK,IAAA,GAAO,IAAA;AAC/C,IAAM,wBAAA,GAA2B,sCAAA;AACjC,IAAM,wBAAA,GAA2B,mCAAA;AACjC,IAAM,iCAAA,GAAoC,uCAAA;AAgS1C,IAAM,0BAAA,GAAN,cAAyC,UAAA,CAAW;AAAA,MAChD,WAAA,CAAY,EAAE,KAAA,GAAQ,EAAC,EAAG,gBAAA,GAAmB,KAAA,EAAO,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AACtE,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,QAAA,IAAA,CAAK,gBAAA,GAAmB,gBAAA;AAAA,MAC5B;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS;AACpD,QAAA,MAAM,IAAA,GAAiB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA;AACrE,QAAA,MAAM,eAAe,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,GAAS,UAAU,oBAAA,EAAqB;AAC7F,QAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,EAAM,IAAA,EAAM,WAAA,EAAa,WAAW,CAAA,EAAG;AAC1D,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA,CAAK,QAAA,CAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AACjF,QAAA,IAAI,IAAA,CAAK,qBAAA,CAAsB,MAAA,KAAW,CAAA,EAAG;AACzC,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,oBAAoB,CAAA;AACvC,UAAA,OAAO,WAAA;AAAA,QACX;AACA,QAAA,IAAI,aAAA,GAAgB,WAAA;AACpB,QAAA,OAAO,QAAA,CAAS,IAAA,CAAK,gBAAA,EAAkB,WAAW,IAAI,CAAA,EAAG;AACrD,UAAA,MAAM,YAAA,GAAe,4BAAA,CAA6B,IAAA,EAAM,aAAA,EAAe,aAAa,YAAY,CAAA;AAChG,UAAA,IAAI,YAAA,CAAa,WAAW,EAAA,EAAI;AAC5B,YAAA,IAAA,CAAK,KAAA,GAAQ,aAAa,MAAA,CAAO,KAAA;AACjC,YAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,QAAQ,CAAA;AACjD,YAAA,OAAO,EAAA;AAAA,UACX;AACA,UAAA,aAAA,GAAgB,YAAA,CAAa,MAAA;AAC7B,UAAA,IAAA,CAAK,WAAA,IAAe,aAAa,MAAA,CAAO,WAAA;AACxC,UAAA,WAAA,IAAe,aAAa,MAAA,CAAO,WAAA;AACnC,UAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AACnC,UAAA,IAAI,KAAK,gBAAA,IAAoB,YAAA,CAAa,MAAA,CAAO,WAAA,CAAY,SAAS,mBAAA,EAAqB;AACvF,YAAA;AAAA,UACJ;AAAA,QACJ;AACA,QAAA,IAAI,KAAK,gBAAA,EAAkB;AACvB,UAAA,IAAI,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,WAAA,CAAY,IAAA,KAAS,mBAAA,EAAqB;AAC5E,YAAA,IAAA,CAAK,MAAM,GAAA,EAAI;AAAA,UACnB,CAAA,MACK;AACD,YAAA,IAAA,CAAK,QAAA,CAAS,KAAK,+BAA+B,CAAA;AAAA,UACtD;AAAA,QACJ;AACA,QAAA,OAAO,aAAA;AAAA,MACX;AAAA,MACA,KAAA,CAAM,UAAU,MAAA,EAAQ;AACpB,QAAA,MAAM,OAAA,GAAU,MAAA,IAAU,IAAI,UAAA,EAAW;AACzC,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACxC,UAAA,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,UAAU,OAAO,CAAA;AAAA,QACzC;AACA,QAAA,IAAI,CAAC,MAAA,EAAQ;AACT,UAAA,OAAO,QAAQ,KAAA,EAAM;AAAA,QACzB;AACA,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,MACA,MAAA,GAAS;AACL,QAAA,MAAM,MAAA,GAAS;AAAA,UACX,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,kBAAkB,IAAA,CAAK,gBAAA;AAAA,UACvB,OAAO;AAAC,SACZ;AACA,QAAA,KAAA,MAAW,KAAA,IAAS,KAAK,KAAA,EAAO;AAC5B,UAAA,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,CAAA;AAAA,QACpC;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,KACJ;AACA,IAAA,0BAAA,CAA2B,IAAA,GAAO,uBAAA;AAGlC,IAAM,WAAA,GAAN,cAA0B,SAAA,CAAU;AAAA,MAChC,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,YAAY,0BAA0B,CAAA;AAC5C,QAAA,IAAA,CAAK,QAAQ,aAAA,GAAgB,IAAA;AAAA,MACjC;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS;AACpD,QAAA,IAAA,CAAK,UAAA,CAAW,gBAAA,GAAmB,IAAA,CAAK,QAAA,CAAS,gBAAA;AACjD,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAc,IAAA,CAAK,QAAA,CAAS,gBAAA,GAAoB,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS,QAAQ,OAAO,CAAA;AACrJ,QAAA,IAAI,iBAAiB,EAAA,EAAI;AACrB,UAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,UAAA,CAAW,KAAA;AAC7B,UAAA,OAAO,YAAA;AAAA,QACX;AACA,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA;AACpB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,OAAA,CAAQ,WAAA;AACrC,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,MAAA;AACrB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,QAAA,CAAS,WAAA;AACtC,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,MAAA;AACvB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,UAAA,CAAW,WAAA;AACxC,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,MAAM,SAAS,EAAC;AAChB,QAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO;AACvC,UAAA,MAAA,CAAO,KAAK,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,CAAE,MAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,MAAM,CAAA,EAAA,EAAK,CAAC,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,QACnF;AACA,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,QAAA,KAAa,CAAA,GACtC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,CAAA,CAAA,GAC1B,IAAA,CAAK,WAAA,CAAY,IAAA;AACvB,QAAA,OAAO,MAAA,CAAO,MAAA,GACR,CAAA,EAAG,SAAS,CAAA;AAAA,EAAO,OAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GACpC,GAAG,SAAS,CAAA,EAAA,CAAA;AAAA,MACtB;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,WAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,WAAA,GAAc,IAAA;AAAA,IAC5B,CAAA,GAAG;AACH,IAAA,WAAA,CAAY,IAAA,GAAO,aAAA;AAEnB,IAAM,2BAAA,GAAN,cAA0C,UAAA,CAAW;AAAA,MACjD,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,YAAA,EAAc;AAC5C,QAAA,OAAO,WAAA;AAAA,MACX;AAAA,MACA,MAAM,SAAA,EAAW;AACb,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,KACJ;AACA,IAAA,2BAAA,CAA4B,QAAA,GAAW,wBAAA;AAGvC,IAAM,YAAA,GAAN,cAA2B,SAAA,CAAU;AAAA,MACjC,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,YAAY,2BAA2B,CAAA;AAC7C,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,CAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,YAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,YAAA,GAAe,IAAA;AAAA,IAC7B,CAAA,GAAG;AACH,IAAA,YAAA,CAAa,IAAA,GAAO,mBAAA;AAGpB,IAAM,IAAA,GAAN,cAAmB,SAAA,CAAU;AAAA,MACzB,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,YAAY,UAAU,CAAA;AAC5B,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,CAAA;AAAA,MAC7B;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,IAAI,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AACvB,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,8CAA8C,CAAA;AACrE,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA;AACpB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,OAAA,CAAQ,WAAA;AACrC,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,MAAA;AACrB,UAAA,IAAA,CAAK,WAAA,IAAe,KAAK,QAAA,CAAS,WAAA;AACtC,QAAA,IAAA,CAAK,WAAA,IAAe,WAAA;AACpB,QAAA,IAAK,WAAA,GAAc,WAAA,GAAe,WAAA,CAAY,UAAA,EAAY;AACtD,UAAA,IAAA,CAAK,KAAA,GAAQ,+FAAA;AACb,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,OAAQ,WAAA,GAAc,WAAA;AAAA,MAC1B;AAAA,MACA,KAAA,CAAM,UAAU,MAAA,EAAQ;AACpB,QAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,CAAC,CAAA;AAChC,QAAA,IAAI,CAAC,QAAA,EAAU;AACX,UAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,MAAM,CAAA;AACrC,UAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA;AACb,UAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA;AAAA,QACjB;AACA,QAAA,IAAI,MAAA,EAAQ;AACR,UAAA,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,QACvB;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,OAAO,CAAA,EAAG,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,MACnC;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,IAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,IAAA,GAAO,IAAA;AAAA,IACrB,CAAA,GAAG;AACH,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AAEZ,IAAM,sBAAA,GAAN,cAAqC,QAAA,CAAS,UAAU,CAAA,CAAE;AAAA,MACtD,IAAI,KAAA,GAAQ;AACR,QAAA,KAAA,MAAW,KAAA,IAAS,KAAK,YAAA,EAAc;AACnC,UAAA,IAAI,QAAQ,CAAA,EAAG;AACX,YAAA,OAAO,IAAA;AAAA,UACX;AAAA,QACJ;AACA,QAAA,OAAO,KAAA;AAAA,MACX;AAAA,MACA,IAAI,MAAM,KAAA,EAAO;AACb,QAAA,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,GAAI,KAAA,GAAQ,GAAA,GAAO,CAAA;AAAA,MAC1C;AAAA,MACA,YAAY,EAAE,KAAA,EAAO,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AACvC,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAI,WAAW,QAAA,EAAU;AACrB,UAAA,IAAA,CAAK,YAAA,GAAyB,qBAAA,CAAsB,YAAA,CAAa,UAAA,CAAW,QAAQ,CAAA;AAAA,QACxF,CAAA,MACK;AACD,UAAA,IAAA,CAAK,YAAA,GAAe,IAAI,UAAA,CAAW,CAAC,CAAA;AAAA,QACxC;AACA,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,QACjB;AAAA,MACJ;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,MAAM,SAAA,GAAsB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA;AAC1E,QAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,EAAM,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA,EAAG;AAC/D,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,IAAA,CAAK,YAAA,GAAe,SAAA,CAAU,QAAA,CAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AAC7E,QAAA,IAAI,WAAA,GAAc,CAAA;AACd,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,4CAA4C,CAAA;AACnE,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,QAAQ,YAAA,CAAa,KAAK,IAAI,CAAA;AAC9B,QAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,QAAA,OAAQ,WAAA,GAAc,WAAA;AAAA,MAC1B;AAAA,MACA,KAAA,GAAQ;AACJ,QAAA,OAAO,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,MACnC;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,OAAO,IAAA,CAAK;AAAA,SAChB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,sBAAA,CAAuB,IAAA,GAAO,mBAAA;AAG9B,IAAMF,QAAAA,GAAN,cAAsB,SAAA,CAAU;AAAA,MAC5B,QAAA,GAAW;AACP,QAAA,OAAO,KAAK,UAAA,CAAW,KAAA;AAAA,MAC3B;AAAA,MACA,SAAS,KAAA,EAAO;AACZ,QAAA,IAAA,CAAK,WAAW,KAAA,GAAQ,KAAA;AAAA,MAC5B;AAAA,MACA,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,YAAY,sBAAsB,CAAA;AACxC,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,CAAA;AAAA,MAC7B;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,OAAO,GAAG,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,GAAA,EAAM,KAAK,QAAQ,CAAA,CAAA;AAAA,MACtD;AAAA,KACJ;AACA,IAAA,IAAA,GAAOA,QAAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,IACxB,CAAA,GAAG;AACH,IAAAA,SAAQ,IAAA,GAAO,SAAA;AAEf,IAAM,0BAAA,GAAN,cAAyC,QAAA,CAAS,0BAA0B,CAAA,CAAE;AAAA,MAC1E,WAAA,CAAY,EAAE,aAAA,GAAgB,KAAA,EAAO,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AACvD,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,MACzB;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS;AACpD,QAAA,IAAI,YAAA,GAAe,CAAA;AACnB,QAAA,IAAI,KAAK,aAAA,EAAe;AACpB,UAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,UAAA,YAAA,GAAe,0BAAA,CAA2B,UAAU,OAAA,CAAQ,IAAA,CAAK,MAAM,WAAA,EAAa,WAAA,EAAa,aAAa,OAAO,CAAA;AACrH,UAAA,IAAI,YAAA,KAAiB,EAAA;AACjB,YAAA,OAAO,YAAA;AACX,UAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACxC,YAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,WAAA,CAAY,IAAA;AACnD,YAAA,IAAI,qBAAqB,mBAAA,EAAqB;AAC1C,cAAA,IAAI,IAAA,CAAK,gBAAA;AACL,gBAAA;AAAA,mBACC;AACD,gBAAA,IAAA,CAAK,KAAA,GAAQ,6EAAA;AACb,gBAAA,OAAO,EAAA;AAAA,cACX;AAAA,YACJ;AACA,YAAA,IAAI,qBAAqB,iBAAA,EAAmB;AACxC,cAAA,IAAA,CAAK,KAAA,GAAQ,iDAAA;AACb,cAAA,OAAO,EAAA;AAAA,YACX;AAAA,UACJ;AAAA,QACJ,CAAA,MACK;AACD,UAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,UAAA,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAW,CAAA;AAClE,UAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,QACvB;AACA,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,MACA,KAAA,CAAM,UAAU,MAAA,EAAQ;AACpB,QAAA,IAAI,IAAA,CAAK,aAAA;AACL,UAAA,OAAO,2BAA2B,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,UAAU,MAAM,CAAA;AACjF,QAAA,OAAO,QAAA,GACD,IAAI,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA,GAC5C,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA;AAAA,MACpC;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,eAAe,IAAA,CAAK;AAAA,SACxB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,0BAAA,CAA2B,IAAA,GAAO,uBAAA;AAGlC,IAAM,WAAA,GAAN,cAA0B,SAAA,CAAU;AAAA,MAChC,WAAA,CAAY,EAAE,OAAA,GAAU,EAAC,EAAG,QAAA,GAAW,EAAC,EAAG,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAC7D,QAAA,IAAI,EAAA,EAAI,EAAA;AACR,QAAA,CAAC,KAAK,UAAA,CAAW,aAAA,MAAmB,QAAQ,EAAA,KAAO,MAAA,GAAS,KAAM,UAAA,CAAW,aAAA,GAAgB,CAAC,EAAA,CAAG,KAAK,UAAA,CAAW,KAAA,MAAW,QAAQ,EAAA,KAAO,MAAA,GAAS,SAAS,EAAA,CAAG,MAAA,CAAA;AAChK,QAAA,KAAA,CAAM;AAAA,UACF,OAAA,EAAS;AAAA,YACL,eAAe,UAAA,CAAW,aAAA;AAAA,YAC1B,GAAG;AAAA,WACP;AAAA,UACA,QAAA,EAAU;AAAA,YACN,GAAG,QAAA;AAAA,YACH,gBAAA,EAAkB,CAAC,CAAC,UAAA,CAAW;AAAA,WACnC;AAAA,UACA,GAAG;AAAA,WACJ,0BAA0B,CAAA;AAC7B,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,CAAA;AAAA,MAC7B;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS;AACpD,QAAA,IAAA,CAAK,UAAA,CAAW,aAAA,GAAgB,IAAA,CAAK,OAAA,CAAQ,aAAA;AAC7C,QAAA,IAAA,CAAK,UAAA,CAAW,gBAAA,GAAmB,IAAA,CAAK,QAAA,CAAS,gBAAA;AACjD,QAAA,IAAI,gBAAgB,CAAA,EAAG;AACnB,UAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA,KAAW,CAAA;AAC9B,YAAA,IAAA,CAAK,WAAA,IAAe,KAAK,OAAA,CAAQ,WAAA;AACrC,UAAA,IAAI,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,MAAA,KAAW,CAAA;AAC/B,YAAA,IAAA,CAAK,WAAA,IAAe,KAAK,QAAA,CAAS,WAAA;AACtC,UAAA,OAAO,WAAA;AAAA,QACX;AACA,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,aAAA,EAAe;AAChC,UAAA,MAAM,OAAO,WAAA,YAAuB,WAAA,GAAc,IAAI,UAAA,CAAW,WAAW,CAAA,GAAI,WAAA;AAChF,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AAChE,UAAA,IAAI;AACA,YAAA,IAAI,IAAI,UAAA,EAAY;AAChB,cAAA,MAAM,eAAe,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,KAAA,CAAA,GAAS,UAAU,oBAAA,EAAqB;AAC7F,cAAA,MAAM,MAAM,4BAAA,CAA6B,GAAA,EAAK,CAAA,EAAG,GAAA,CAAI,YAAY,YAAY,CAAA;AAC7E,cAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,CAAA,IAAM,GAAA,CAAI,WAAW,WAAA,EAAa;AACjD,gBAAA,IAAA,CAAK,UAAA,CAAW,KAAA,GAAQ,CAAC,GAAA,CAAI,MAAM,CAAA;AAAA,cACvC;AAAA,YACJ;AAAA,UACJ,CAAA,CAAA,MACM;AAAA,UACN;AAAA,QACJ;AACA,QAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,aAAa,OAAO,CAAA;AAAA,MACvE;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,IAAI,IAAA,CAAK,WAAW,aAAA,IAAkB,IAAA,CAAK,WAAW,KAAA,IAAS,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,MAAA,EAAS;AAC1F,UAAA,OAAO,WAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AAAA,QAC1D;AACA,QAAA,MAAM,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC9B,QAAA,MAAM,KAAA,GAAkB,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,WAAW,YAAY,CAAA;AAClE,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA;AAAA,MAC7B;AAAA,MACA,QAAA,GAAW;AACP,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe;AAC7B,UAAA,OAAO,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA;AAAA,QAChD;AACA,QAAA,MAAM,QAAQ,EAAC;AACf,QAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO;AACzC,UAAA,IAAI,mBAAmB,IAAA,EAAM;AACzB,YAAA,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,YAAY,CAAA;AAAA,UAC9C;AAAA,QACJ;AACA,QAAA,OAAiB,qBAAA,CAAsB,OAAO,KAAK,CAAA;AAAA,MACvD;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,WAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,WAAA,GAAc,IAAA;AAAA,IAC5B,CAAA,GAAG;AACH,IAAA,WAAA,CAAY,IAAA,GAAO,iBAAA;AAEnB,IAAM,wBAAA,GAAN,cAAuC,QAAA,CAAS,0BAA0B,CAAA,CAAE;AAAA,MACxE,WAAA,CAAY,EAAE,UAAA,GAAa,CAAA,EAAG,aAAA,GAAgB,OAAO,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AACvE,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,QAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,QAAA,IAAA,CAAK,WAAA,GAAc,KAAK,YAAA,CAAa,UAAA;AAAA,MACzC;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS;AACpD,QAAA,IAAI,CAAC,WAAA,EAAa;AACd,UAAA,OAAO,WAAA;AAAA,QACX;AACA,QAAA,IAAI,YAAA,GAAe,EAAA;AACnB,QAAA,IAAI,KAAK,aAAA,EAAe;AACpB,UAAA,YAAA,GAAe,0BAAA,CAA2B,UAAU,OAAA,CAAQ,IAAA,CAAK,MAAM,WAAA,EAAa,WAAA,EAAa,aAAa,OAAO,CAAA;AACrH,UAAA,IAAI,YAAA,KAAiB,EAAA;AACjB,YAAA,OAAO,YAAA;AACX,UAAA,KAAA,MAAW,KAAA,IAAS,KAAK,KAAA,EAAO;AAC5B,YAAA,MAAM,gBAAA,GAAmB,MAAM,WAAA,CAAY,IAAA;AAC3C,YAAA,IAAI,qBAAqB,mBAAA,EAAqB;AAC1C,cAAA,IAAI,IAAA,CAAK,gBAAA;AACL,gBAAA;AAAA,mBACC;AACD,gBAAA,IAAA,CAAK,KAAA,GAAQ,yEAAA;AACb,gBAAA,OAAO,EAAA;AAAA,cACX;AAAA,YACJ;AACA,YAAA,IAAI,qBAAqB,eAAA,EAAiB;AACtC,cAAA,IAAA,CAAK,KAAA,GAAQ,6CAAA;AACb,cAAA,OAAO,EAAA;AAAA,YACX;AACA,YAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,YAAA,IAAK,IAAA,CAAK,UAAA,GAAa,CAAA,IAAO,UAAA,CAAW,aAAa,CAAA,EAAI;AACtD,cAAA,IAAA,CAAK,KAAA,GAAQ,kFAAA;AACb,cAAA,OAAO,EAAA;AAAA,YACX;AACA,YAAA,IAAA,CAAK,aAAa,UAAA,CAAW,UAAA;AAAA,UACjC;AACA,UAAA,OAAO,YAAA;AAAA,QACX;AACA,QAAA,MAAM,SAAA,GAAsB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA;AAC1E,QAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,EAAM,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA,EAAG;AAC/D,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,MAAM,SAAA,GAAY,SAAA,CAAU,QAAA,CAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AAC3E,QAAA,IAAA,CAAK,UAAA,GAAa,UAAU,CAAC,CAAA;AAC7B,QAAA,IAAI,IAAA,CAAK,aAAa,CAAA,EAAG;AACrB,UAAA,IAAA,CAAK,KAAA,GAAQ,gDAAA;AACb,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AAClB,UAAA,MAAM,GAAA,GAAM,SAAA,CAAU,QAAA,CAAS,CAAC,CAAA;AAChC,UAAA,IAAI;AACA,YAAA,IAAI,IAAI,UAAA,EAAY;AAChB,cAAA,MAAM,eAAe,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,KAAA,CAAA,GAAS,UAAU,oBAAA,EAAqB;AAC7F,cAAA,MAAM,MAAM,4BAAA,CAA6B,GAAA,EAAK,CAAA,EAAG,GAAA,CAAI,YAAY,YAAY,CAAA;AAC7E,cAAA,IAAI,IAAI,MAAA,KAAW,CAAA,CAAA,IAAM,GAAA,CAAI,MAAA,KAAY,cAAc,CAAA,EAAI;AACvD,gBAAA,IAAA,CAAK,KAAA,GAAQ,CAAC,GAAA,CAAI,MAAM,CAAA;AAAA,cAC5B;AAAA,YACJ;AAAA,UACJ,CAAA,CAAA,MACM;AAAA,UACN;AAAA,QACJ;AACA,QAAA,IAAA,CAAK,YAAA,GAAe,SAAA,CAAU,QAAA,CAAS,CAAC,CAAA;AACxC,QAAA,IAAA,CAAK,cAAc,SAAA,CAAU,MAAA;AAC7B,QAAA,OAAQ,WAAA,GAAc,WAAA;AAAA,MAC1B;AAAA,MACA,KAAA,CAAM,UAAU,MAAA,EAAQ;AACpB,QAAA,IAAI,KAAK,aAAA,EAAe;AACpB,UAAA,OAAO,2BAA2B,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,UAAU,MAAM,CAAA;AAAA,QACjF;AACA,QAAA,IAAI,QAAA,EAAU;AACV,UAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,aAAa,CAAC,CAAA;AAAA,QAC3D;AACA,QAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,UAAA,EAAY;AAC/B,UAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,CAAC,CAAA;AAC9B,UAAA,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACX,UAAA,OAAO,KAAA,CAAM,MAAA;AAAA,QACjB;AACA,QAAA,MAAM,UAAU,IAAI,UAAA,CAAW,IAAA,CAAK,YAAA,CAAa,SAAS,CAAC,CAAA;AAC3D,QAAA,OAAA,CAAQ,CAAC,IAAI,IAAA,CAAK,UAAA;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,YAAA,EAAc,CAAC,CAAA;AAChC,QAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,MACnB;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,YAAY,IAAA,CAAK,UAAA;AAAA,UACjB,eAAe,IAAA,CAAK;AAAA,SACxB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,wBAAA,CAAyB,IAAA,GAAO,qBAAA;AAGhC,IAAM,SAAA,GAAN,cAAwB,SAAA,CAAU;AAAA,MAC9B,WAAA,CAAY,EAAE,OAAA,GAAU,EAAC,EAAG,QAAA,GAAW,EAAC,EAAG,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAC7D,QAAA,IAAI,EAAA,EAAI,EAAA;AACR,QAAA,CAAC,KAAK,UAAA,CAAW,aAAA,MAAmB,QAAQ,EAAA,KAAO,MAAA,GAAS,KAAM,UAAA,CAAW,aAAA,GAAgB,CAAC,EAAA,CAAG,KAAK,UAAA,CAAW,KAAA,MAAW,QAAQ,EAAA,KAAO,MAAA,GAAS,SAAS,EAAA,CAAG,MAAA,CAAA;AAChK,QAAA,KAAA,CAAM;AAAA,UACF,OAAA,EAAS;AAAA,YACL,eAAe,UAAA,CAAW,aAAA;AAAA,YAC1B,GAAG;AAAA,WACP;AAAA,UACA,QAAA,EAAU;AAAA,YACN,GAAG,QAAA;AAAA,YACH,gBAAA,EAAkB,CAAC,CAAC,UAAA,CAAW;AAAA,WACnC;AAAA,UACA,GAAG;AAAA,WACJ,wBAAwB,CAAA;AAC3B,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,CAAA;AAAA,MAC7B;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS;AACpD,QAAA,IAAA,CAAK,UAAA,CAAW,aAAA,GAAgB,IAAA,CAAK,OAAA,CAAQ,aAAA;AAC7C,QAAA,IAAA,CAAK,UAAA,CAAW,gBAAA,GAAmB,IAAA,CAAK,QAAA,CAAS,gBAAA;AACjD,QAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,aAAa,OAAO,CAAA;AAAA,MACvE;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,IAAI,IAAA,CAAK,WAAW,aAAA,IAAkB,IAAA,CAAK,WAAW,KAAA,IAAS,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,MAAA,EAAS;AAC1F,UAAA,OAAO,WAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AAAA,QAC1D,CAAA,MACK;AACD,UAAA,MAAM,OAAO,EAAC;AACd,UAAA,MAAM,QAAA,GAAW,KAAK,UAAA,CAAW,YAAA;AACjC,UAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AACzB,YAAA,IAAA,CAAK,IAAA,CAAK,KAAK,QAAA,CAAS,CAAC,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,UAC/C;AACA,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA;AAC5B,UAAA,MAAM,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC9B,UAAA,MAAM,KAAA,GAAQ,QAAQ,SAAA,CAAU,CAAA,EAAG,QAAQ,MAAA,GAAS,IAAA,CAAK,WAAW,UAAU,CAAA;AAC9E,UAAA,OAAO,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA;AAAA,QAC7B;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,SAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,SAAA,GAAY,IAAA;AAAA,IAC1B,CAAA,GAAG;AACH,IAAA,SAAA,CAAU,IAAA,GAAO,eAAA;AA0FjB,IAAM,sBAAA,GAAN,cAAqC,QAAA,CAAS,UAAU,CAAA,CAAE;AAAA,MACtD,WAAA,GAAc;AACV,QAAA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,IAAU,CAAA,EAAG;AAC/B,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,wCAAwC,CAAA;AAC3D,UAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,UAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AAAA,QACrB,CAAA,MACK;AACD,UAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,UAAA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAC9B,YAAA,IAAA,CAAK,SAAA,GAAoB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAAA,UACnD;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,YAAY,EAAE,KAAA,EAAO,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AACvC,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,QAAA,IAAI,WAAW,QAAA,EAAU;AACrB,UAAA,IAAA,CAAK,WAAA,EAAY;AAAA,QACrB;AACA,QAAA,IAAI,UAAU,MAAA,EAAW;AACrB,UAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAAA,QACpB;AAAA,MACJ;AAAA,MACA,IAAI,SAAS,CAAA,EAAG;AACZ,QAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA,IAAA,CAAK,YAAA,GAAe,IAAI,UAAA,CAAmB,YAAA,CAAa,CAAC,CAAC,CAAA;AAAA,MAC9D;AAAA,MACA,IAAI,QAAA,GAAW;AACX,QAAA,OAAO,IAAA,CAAK,SAAA;AAAA,MAChB;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,iBAAiB,CAAA,EAAG;AAC/D,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,aAAa,WAAW,CAAA;AACjE,QAAA,IAAI,MAAA,KAAW,EAAA;AACX,UAAA,OAAO,MAAA;AACX,QAAA,MAAM,OAAO,IAAA,CAAK,YAAA;AAClB,QAAA,IAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,IAAA,CAAW,KAAK,CAAC,CAAA,GAAI,SAAU,CAAA,EAAI;AAChD,UAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAAA,QACvC,CAAA,MACK;AACD,UAAA,IAAI,mBAAmB,CAAA,EAAG;AACtB,YAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAC9B,cAAA,IAAK,cAAA,GAAiB,KAAK,MAAA,GAAU,CAAA;AACjC,gBAAA,cAAA,GAAiB,KAAK,MAAA,GAAS,CAAA;AACnC,cAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,QAAA,CAAS,cAAA,GAAiB,KAAK,MAAM,CAAA;AAAA,YAClE;AAAA,UACJ;AAAA,QACJ;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,KAAA,CAAM,WAAW,KAAA,EAAO;AACpB,QAAA,MAAM,OAAO,IAAA,CAAK,YAAA;AAClB,QAAA,QAAQ,IAAA;AAAM,UACV,KAAA,CAAO,IAAA,CAAK,CAAC,CAAA,GAAI,GAAA,MAAU,CAAA;AACvB,YAAA;AACI,cAAA,MAAM,cAAc,IAAI,UAAA,CAAW,IAAA,CAAK,YAAA,CAAa,SAAS,CAAC,CAAA;AAC/D,cAAA,WAAA,CAAY,CAAC,CAAA,GAAI,CAAA;AACjB,cAAA,WAAA,CAAY,GAAA,CAAI,MAAM,CAAC,CAAA;AACvB,cAAA,IAAA,CAAK,YAAA,GAAe,WAAA;AAAA,YACxB;AACA,YAAA;AAAA,UACJ,MAAO,KAAK,CAAC,CAAA,KAAM,MAAW,IAAA,CAAK,CAAC,IAAI,GAAA,MAAU,CAAA;AAC9C,YAAA;AACI,cAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,CAAC,CAAA;AAAA,YACpD;AACA,YAAA;AAAA;AAER,QAAA,OAAO,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,MAC9B;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAa,aAAa,WAAW,CAAA;AACxE,QAAA,IAAI,iBAAiB,EAAA,EAAI;AACrB,UAAA,OAAO,YAAA;AAAA,QACX;AACA,QAAA,IAAA,CAAK,WAAA,EAAY;AACjB,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,MACA,MAAM,QAAA,EAAU;AACZ,QAAA,OAAO,QAAA,GACD,IAAI,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,GACxC,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA;AAAA,MACpC;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,UAAU,IAAA,CAAK;AAAA,SACnB;AAAA,MACJ;AAAA,MACA,QAAA,GAAW;AACP,QAAA,MAAM,QAAA,GAAY,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,GAAK,CAAA;AAClD,QAAA,IAAI,SAAS,IAAI,UAAA,CAAY,KAAK,YAAA,CAAa,MAAA,GAAS,IAAK,CAAC,CAAA;AAC9D,QAAA,IAAI,SAAA,GAAY,CAAA;AAChB,QAAA,IAAI,WAAA;AACJ,QAAA,MAAM,WAAW,IAAA,CAAK,YAAA;AACtB,QAAA,IAAI,MAAA,GAAS,EAAA;AACb,QAAA,IAAI,IAAA,GAAO,KAAA;AACX,QAAA,KAAA,IAAS,aAAc,QAAA,CAAS,UAAA,GAAa,CAAA,EAAI,UAAA,IAAc,GAAG,UAAA,EAAA,EAAc;AAC5E,UAAA,WAAA,GAAc,SAAS,UAAU,CAAA;AACjC,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AACxB,YAAA,IAAA,CAAK,WAAA,GAAc,OAAO,CAAA,EAAG;AACzB,cAAA,QAAQ,SAAA;AAAW,gBACf,KAAK,QAAA;AACD,kBAAA,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAG,MAAM,CAAA;AAC1C,kBAAA,MAAA,GAAS,GAAA;AACT,kBAAA;AAAA,gBACJ;AACI,kBAAA,MAAA,GAAS,OAAA,CAAQ,MAAA,EAAQ,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA;AAClD,YACJ;AACA,YAAA,SAAA,EAAA;AACA,YAAA,WAAA,KAAgB,CAAA;AAAA,UACpB;AAAA,QACJ;AACA,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACpC,UAAA,IAAI,OAAO,CAAC,CAAA;AACR,YAAA,IAAA,GAAO,IAAA;AACX,UAAA,IAAI,IAAA;AACA,YAAA,MAAA,IAAU,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,QAC/C;AACA,QAAA,IAAI,IAAA,KAAS,KAAA;AACT,UAAA,MAAA,IAAU,YAAA,CAAa,OAAO,CAAC,CAAA;AACnC,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,sBAAA;AACP,IAAA,sBAAA,CAAuB,IAAA,GAAO,mBAAA;AAC9B,IAAA,CAAC,MAAM;AACH,MAAA,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,UAAA,EAAY;AAAA,QAC9C,GAAA,EAAK,SAAU,CAAA,EAAG;AACd,UAAA,IAAA,CAAK,YAAA,GAAe,IAAI,UAAA,CAAW,CAAC,CAAA;AACpC,UAAA,IAAA,CAAK,WAAA,EAAY;AAAA,QACrB,CAAA;AAAA,QACA,KAAK,WAAY;AACb,UAAA,OAAO,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM,CAAE,MAAA;AAAA,QACrC;AAAA,OACH,CAAA;AAAA,IACL,CAAA,GAAG;AAGH,IAAM,OAAA,GAAN,cAAsB,SAAA,CAAU;AAAA,MAC5B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,YAAY,sBAAsB,CAAA;AACxC,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,CAAA;AAAA,MAC7B;AAAA,MACA,QAAA,GAAW;AACP,QAAA,YAAA,EAAa;AACb,QAAA,OAAO,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,CAAA;AAAA,MAC5C;AAAA,MACA,OAAO,WAAW,KAAA,EAAO;AACrB,QAAA,YAAA,EAAa;AACb,QAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAChC,QAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,QAAA,MAAM,MAAM,WAAA,CAAY,QAAA,CAAS,EAAE,CAAA,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACrD,QAAA,MAAM,OAAO,IAAI,UAAA,CAAqB,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAC,CAAA;AAC1D,QAAA,IAAI,cAAc,CAAA,EAAG;AACjB,UAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,IAAA,CAAK,MAAA,IAAU,KAAK,CAAC,CAAA,GAAI,GAAA,GAAO,CAAA,GAAI,CAAA,CAAE,CAAA;AACnE,UAAA,KAAA,CAAM,CAAC,CAAA,IAAK,GAAA;AACZ,UAAA,MAAM,WAAW,MAAA,CAAO,CAAA,EAAA,EAAe,QAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,CAAE,CAAA;AAC7D,UAAA,MAAM,YAAY,QAAA,GAAW,WAAA;AAC7B,UAAA,MAAM,MAAA,GAAmB,sBAAsB,YAAA,CAAuB,OAAA,CAAQ,QAAQ,SAAA,CAAU,QAAA,CAAS,EAAE,CAAC,CAAC,CAAA;AAC7G,UAAA,MAAA,CAAO,CAAC,CAAA,IAAK,GAAA;AACb,UAAA,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,QACvB,CAAA,MACK;AACD,UAAA,IAAI,IAAA,CAAK,CAAC,CAAA,GAAI,GAAA,EAAM;AAChB,YAAA,MAAA,CAAO,MAAM,IAAI,UAAA,CAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,UACpC;AACA,UAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,QACrB;AACA,QAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,EAAE,UAAU,MAAA,CAAO,KAAA,IAAS,CAAA;AACjD,QAAA,OAAO,GAAA;AAAA,MACX;AAAA,MACA,YAAA,GAAe;AACX,QAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,EAAE,UAAU,IAAA,CAAK,UAAA,CAAW,cAAc,CAAA;AACnE,QAAA,OAAA,CAAQ,WAAW,KAAA,EAAM;AACzB,QAAA,OAAO,OAAA;AAAA,MACX;AAAA,MACA,cAAA,GAAiB;AACb,QAAA,OAAO,IAAI,IAAA,CAAK;AAAA,UACZ,QAAA,EAAU,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,CAAC,CAAA,KAAM,CAAA,GACxC,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,QAAA,CAAS,CAAC,CAAA,GACvC,KAAK,UAAA,CAAW;AAAA,SACzB,CAAA;AAAA,MACL;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,OAAO,CAAA,EAAG,KAAK,WAAA,CAAY,IAAI,MAAM,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,CAAA;AAAA,MACnE;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,OAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,IACxB,CAAA,GAAG;AACH,IAAA,OAAA,CAAQ,IAAA,GAAO,SAAA;AAGf,IAAM,UAAA,GAAN,cAAyB,OAAA,CAAQ;AAAA,MAC7B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,UAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,UAAA,GAAa,IAAA;AAAA,IAC3B,CAAA,GAAG;AACH,IAAA,UAAA,CAAW,IAAA,GAAO,YAAA;AAElB,IAAM,kBAAA,GAAN,cAAiC,QAAA,CAAS,UAAU,CAAA,CAAE;AAAA,MAClD,WAAA,CAAY,EAAE,QAAA,GAAW,EAAA,EAAI,UAAA,GAAa,OAAO,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AACnE,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,QAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,MACtB;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,IAAI,CAAC,WAAA,EAAa;AACd,UAAA,OAAO,WAAA;AAAA,QACX;AACA,QAAA,MAAM,SAAA,GAAsB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA;AAC1E,QAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,EAAM,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA,EAAG;AAC/D,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,MAAM,SAAA,GAAY,SAAA,CAAU,QAAA,CAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AAC3E,QAAA,IAAA,CAAK,YAAA,GAAe,IAAI,UAAA,CAAW,WAAW,CAAA;AAC9C,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,EAAa,CAAA,EAAA,EAAK;AAClC,UAAA,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,GAAI,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA;AACtC,UAAA,IAAA,CAAK,WAAA,EAAA;AACL,UAAA,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA,MAAU,CAAA;AAC1B,YAAA;AAAA,QACR;AACA,QAAA,MAAM,QAAA,GAAW,IAAI,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA;AAChD,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,aAAa,CAAA,EAAA,EAAK;AACvC,UAAA,QAAA,CAAS,CAAC,CAAA,GAAI,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA;AAAA,QACrC;AACA,QAAA,IAAA,CAAK,YAAA,GAAe,QAAA;AACpB,QAAA,IAAA,CAAK,UAAU,IAAA,CAAK,WAAA,GAAc,CAAC,CAAA,GAAI,SAAU,CAAA,EAAM;AACnD,UAAA,IAAA,CAAK,KAAA,GAAQ,uDAAA;AACb,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,IAAI,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,KAAM,CAAA;AACzB,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,wCAAwC,CAAA;AAC/D,QAAA,IAAI,KAAK,WAAA,IAAe,CAAA;AACpB,UAAA,IAAA,CAAK,QAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,CAAC,CAAA;AAAA,aACxD;AACD,UAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,oCAAoC,CAAA;AAAA,QAC3D;AACA,QAAA,OAAQ,cAAc,IAAA,CAAK,WAAA;AAAA,MAC/B;AAAA,MACA,IAAI,YAAY,KAAA,EAAO;AACnB,QAAA,YAAA,EAAa;AACb,QAAA,IAAI,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,CAAE,SAAS,CAAC,CAAA;AACnC,QAAA,OAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AACpB,UAAA,IAAA,GAAO,GAAA,GAAM,IAAA;AAAA,QACjB;AACA,QAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,IAAA,CAAK,SAAS,CAAC,CAAA;AAC5C,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,UAAA,KAAA,CAAM,CAAC,CAAA,GAAI,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,GAAG,CAAC,CAAA,IAAK,IAAI,CAAA,GAAI,KAAA,CAAM,SAAS,GAAA,GAAO,CAAA,CAAA;AAAA,QAC1F;AACA,QAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAG,MAAM,MAAM,CAAA;AAAA,MAC9C;AAAA,MACA,MAAM,QAAA,EAAU;AACZ,QAAA,IAAI,KAAK,SAAA,EAAW;AAChB,UAAA,IAAI,QAAA;AACA,YAAA,OAAQ,IAAI,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA;AACxD,UAAA,MAAM,UAAU,IAAA,CAAK,YAAA;AACrB,UAAA,MAAMD,QAAAA,GAAU,IAAI,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA;AAC/C,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAK,IAAA,CAAK,cAAc,CAAA,EAAI,CAAA,EAAA;AACxC,YAAAA,QAAAA,CAAQ,CAAC,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,GAAI,GAAA;AAC9B,UAAAA,QAAAA,CAAQ,KAAK,WAAA,GAAc,CAAC,IAAI,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAC,CAAA;AAC5D,UAAA,OAAOA,QAAAA,CAAQ,MAAA;AAAA,QACnB;AACA,QAAA,MAAM,UAAA,GAAqB,UAAA,CAAW,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AACtD,QAAA,IAAI,UAAA,CAAW,eAAe,CAAA,EAAG;AAC7B,UAAA,IAAA,CAAK,KAAA,GAAQ,iCAAA;AACb,UAAA,OAAO,YAAA;AAAA,QACX;AACA,QAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,UAAA,CAAW,UAAU,CAAA;AACpD,QAAA,IAAI,CAAC,QAAA,EAAU;AACX,UAAA,MAAM,WAAA,GAAc,IAAI,UAAA,CAAW,UAAU,CAAA;AAC7C,UAAA,MAAM,GAAA,GAAM,WAAW,UAAA,GAAa,CAAA;AACpC,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA;AACrB,YAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA,GAAI,GAAA;AAClC,UAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,WAAA,CAAY,GAAG,CAAA;AAAA,QAClC;AACA,QAAA,OAAO,OAAA;AAAA,MACX;AAAA,MACA,QAAA,GAAW;AACP,QAAA,IAAI,MAAA,GAAS,EAAA;AACb,QAAA,IAAI,IAAA,CAAK,SAAA;AACL,UAAA,MAAA,GAAmB,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA;AAAA,aACjD;AACD,UAAA,IAAI,KAAK,UAAA,EAAY;AACjB,YAAA,IAAI,WAAW,IAAA,CAAK,QAAA;AACpB,YAAA,IAAI,KAAK,QAAA,IAAY,EAAA;AACjB,cAAA,MAAA,GAAS,IAAA;AAAA,iBACR;AACD,cAAA,IAAI,IAAA,CAAK,YAAY,EAAA,EAAI;AACrB,gBAAA,MAAA,GAAS,IAAA;AACT,gBAAA,QAAA,IAAY,EAAA;AAAA,cAChB,CAAA,MACK;AACD,gBAAA,MAAA,GAAS,IAAA;AACT,gBAAA,QAAA,IAAY,EAAA;AAAA,cAChB;AAAA,YACJ;AACA,YAAA,MAAA,IAAU,SAAS,QAAA,EAAS;AAAA,UAChC,CAAA;AAEI,YAAA,MAAA,GAAS,IAAA,CAAK,SAAS,QAAA,EAAS;AAAA,QACxC;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,YAAY,IAAA,CAAK;AAAA,SACrB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,kBAAA,CAAmB,IAAA,GAAO,UAAA;AAE1B,IAAM,+BAAA,GAAN,cAA8C,UAAA,CAAW;AAAA,MACrD,WAAA,CAAY,EAAE,KAAA,GAAQ,YAAA,EAAc,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AACtD,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,EAAC;AACd,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,QACzB;AAAA,MACJ;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,IAAI,YAAA,GAAe,WAAA;AACnB,QAAA,OAAO,cAAc,CAAA,EAAG;AACpB,UAAA,MAAM,QAAA,GAAW,IAAI,kBAAA,EAAmB;AACxC,UAAA,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,WAAA,EAAa,YAAA,EAAc,WAAW,CAAA;AACtE,UAAA,IAAI,iBAAiB,EAAA,EAAI;AACrB,YAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AACnB,YAAA,IAAA,CAAK,QAAQ,QAAA,CAAS,KAAA;AACtB,YAAA,OAAO,YAAA;AAAA,UACX;AACA,UAAA,IAAI,IAAA,CAAK,MAAM,MAAA,KAAW,CAAA;AACtB,YAAA,QAAA,CAAS,UAAA,GAAa,IAAA;AAC1B,UAAA,IAAA,CAAK,eAAe,QAAA,CAAS,WAAA;AAC7B,UAAA,WAAA,IAAe,QAAA,CAAS,WAAA;AACxB,UAAA,IAAA,CAAK,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,QAC5B;AACA,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,MACA,MAAM,QAAA,EAAU;AACZ,QAAA,MAAM,aAAa,EAAC;AACpB,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACxC,UAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,QAAQ,CAAA;AAC7C,UAAA,IAAI,QAAA,CAAS,eAAe,CAAA,EAAG;AAC3B,YAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA;AAC3B,YAAA,OAAO,YAAA;AAAA,UACX;AACA,UAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,QAC5B;AACA,QAAA,OAAO,OAAO,UAAU,CAAA;AAAA,MAC5B;AAAA,MACA,WAAW,MAAA,EAAQ;AACf,QAAA,IAAA,CAAK,QAAQ,EAAC;AACd,QAAA,IAAI,IAAA,GAAO,CAAA;AACX,QAAA,IAAI,IAAA,GAAO,CAAA;AACX,QAAA,IAAI,GAAA,GAAM,EAAA;AACV,QAAA,IAAI,IAAA,GAAO,KAAA;AACX,QAAA,GAAG;AACC,UAAA,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAA;AAC/B,UAAA,IAAI,IAAA,KAAS,EAAA;AACT,YAAA,GAAA,GAAM,MAAA,CAAO,UAAU,IAAI,CAAA;AAAA;AAE3B,YAAA,GAAA,GAAM,MAAA,CAAO,SAAA,CAAU,IAAA,EAAM,IAAI,CAAA;AACrC,UAAA,IAAA,GAAO,IAAA,GAAO,CAAA;AACd,UAAA,IAAI,IAAA,EAAM;AACN,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAC7B,YAAA,IAAI,IAAA,GAAO,CAAA;AACX,YAAA,QAAQ,SAAS,QAAA;AAAU,cACvB,KAAK,CAAA;AACD,gBAAA;AAAA,cACJ,KAAK,CAAA;AACD,gBAAA,IAAA,GAAO,EAAA;AACP,gBAAA;AAAA,cACJ,KAAK,CAAA;AACD,gBAAA,IAAA,GAAO,EAAA;AACP,gBAAA;AAAA,cACJ;AACI,gBAAA,IAAA,CAAK,QAAQ,EAAC;AACd,gBAAA;AAAA;AAER,YAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAClC,YAAA,IAAI,MAAM,SAAS,CAAA;AACf,cAAA;AACJ,YAAA,QAAA,CAAS,WAAW,SAAA,GAAY,IAAA;AAChC,YAAA,IAAA,GAAO,KAAA;AAAA,UACX,CAAA,MACK;AACD,YAAA,MAAM,QAAA,GAAW,IAAI,kBAAA,EAAmB;AACxC,YAAA,IAAI,GAAA,GAAM,OAAO,gBAAA,EAAkB;AAC/B,cAAA,YAAA,EAAa;AACb,cAAA,MAAM,QAAA,GAAW,OAAO,GAAG,CAAA;AAC3B,cAAA,QAAA,CAAS,WAAA,GAAc,QAAA;AAAA,YAC3B,CAAA,MACK;AACD,cAAA,QAAA,CAAS,QAAA,GAAW,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AACpC,cAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA;AACvB,gBAAA;AAAA,YACR;AACA,YAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;AACpB,cAAA,QAAA,CAAS,UAAA,GAAa,IAAA;AACtB,cAAA,IAAA,GAAO,IAAA;AAAA,YACX;AACA,YAAA,IAAA,CAAK,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,UAC5B;AAAA,QACJ,SAAS,IAAA,KAAS,EAAA;AAAA,MACtB;AAAA,MACA,QAAA,GAAW;AACP,QAAA,IAAI,MAAA,GAAS,EAAA;AACb,QAAA,IAAI,SAAA,GAAY,KAAA;AAChB,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACxC,UAAA,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,SAAA;AAC1B,UAAA,IAAI,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,QAAA,EAAS;AACpC,UAAA,IAAI,CAAA,KAAM,CAAA;AACN,YAAA,MAAA,GAAS,GAAG,MAAM,CAAA,CAAA,CAAA;AACtB,UAAA,IAAI,SAAA,EAAW;AACX,YAAA,MAAA,GAAS,IAAI,MAAM,CAAA,CAAA,CAAA;AACnB,YAAA,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,UAAA;AACd,cAAA,MAAA,GAAS,MAAM,MAAM,CAAA,MAAA,CAAA;AAAA;AAErB,cAAA,MAAA,IAAU,MAAA;AAAA,UAClB,CAAA;AAEI,YAAA,MAAA,IAAU,MAAA;AAAA,QAClB;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,MAAA,GAAS;AACL,QAAA,MAAM,MAAA,GAAS;AAAA,UACX,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,KAAA,EAAO,KAAK,QAAA,EAAS;AAAA,UACrB,UAAU;AAAC,SACf;AACA,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACxC,UAAA,MAAA,CAAO,SAAS,IAAA,CAAK,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,QAAQ,CAAA;AAAA,QAC/C;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,KACJ;AACA,IAAA,+BAAA,CAAgC,IAAA,GAAO,4BAAA;AAGvC,IAAM,gBAAA,GAAN,cAA+B,SAAA,CAAU;AAAA,MACrC,QAAA,GAAW;AACP,QAAA,OAAO,IAAA,CAAK,WAAW,QAAA,EAAS;AAAA,MACpC;AAAA,MACA,SAAS,KAAA,EAAO;AACZ,QAAA,IAAA,CAAK,UAAA,CAAW,WAAW,KAAK,CAAA;AAAA,MACpC;AAAA,MACA,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,YAAY,+BAA+B,CAAA;AACjD,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,CAAA;AAAA,MAC7B;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,OAAO,CAAA,EAAG,KAAK,WAAA,CAAY,IAAI,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,EAAS,IAAK,OAAO,CAAA,CAAA;AAAA,MAC9E;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,KAAA,EAAO,KAAK,QAAA;AAAS,SACzB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,gBAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,gBAAA,GAAmB,IAAA;AAAA,IACjC,CAAA,GAAG;AACH,IAAA,gBAAA,CAAiB,IAAA,GAAO,mBAAA;AAExB,IAAM,0BAAA,GAAN,cAAyC,QAAA,CAAS,cAAc,CAAA,CAAE;AAAA,MAC9D,WAAA,CAAY,EAAE,QAAA,GAAW,CAAA,EAAG,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAC9C,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,MACpB;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,IAAI,WAAA,KAAgB,CAAA;AAChB,UAAA,OAAO,WAAA;AACX,QAAA,MAAM,SAAA,GAAsB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA;AAC1E,QAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,EAAM,SAAA,EAAW,aAAa,WAAW,CAAA;AAC5D,UAAA,OAAO,EAAA;AACX,QAAA,MAAM,SAAA,GAAY,SAAA,CAAU,QAAA,CAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AAC3E,QAAA,IAAA,CAAK,YAAA,GAAe,IAAI,UAAA,CAAW,WAAW,CAAA;AAC9C,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,EAAa,CAAA,EAAA,EAAK;AAClC,UAAA,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,GAAI,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA;AACtC,UAAA,IAAA,CAAK,WAAA,EAAA;AACL,UAAA,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA,MAAU,CAAA;AAC1B,YAAA;AAAA,QACR;AACA,QAAA,MAAM,QAAA,GAAW,IAAI,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA;AAChD,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,WAAA,EAAa,CAAA,EAAA;AAClC,UAAA,QAAA,CAAS,CAAC,CAAA,GAAI,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA;AACrC,QAAA,IAAA,CAAK,YAAA,GAAe,QAAA;AACpB,QAAA,IAAA,CAAK,UAAU,IAAA,CAAK,WAAA,GAAc,CAAC,CAAA,GAAI,SAAU,CAAA,EAAM;AACnD,UAAA,IAAA,CAAK,KAAA,GAAQ,uDAAA;AACb,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,IAAI,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,KAAM,CAAA;AACzB,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,wCAAwC,CAAA;AAC/D,QAAA,IAAI,KAAK,WAAA,IAAe,CAAA;AACpB,UAAA,IAAA,CAAK,QAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,CAAC,CAAA;AAAA,aACxD;AACD,UAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,oCAAoC,CAAA;AAAA,QAC3D;AACA,QAAA,OAAQ,cAAc,IAAA,CAAK,WAAA;AAAA,MAC/B;AAAA,MACA,MAAM,QAAA,EAAU;AACZ,QAAA,IAAI,KAAK,SAAA,EAAW;AAChB,UAAA,IAAI,QAAA;AACA,YAAA,OAAQ,IAAI,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA;AACxD,UAAA,MAAM,UAAU,IAAA,CAAK,YAAA;AACrB,UAAA,MAAMA,QAAAA,GAAU,IAAI,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA;AAC/C,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAK,IAAA,CAAK,cAAc,CAAA,EAAI,CAAA,EAAA;AACxC,YAAAA,QAAAA,CAAQ,CAAC,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,GAAI,GAAA;AAC9B,UAAAA,QAAAA,CAAQ,KAAK,WAAA,GAAc,CAAC,IAAI,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAC,CAAA;AAC5D,UAAA,OAAOA,QAAAA,CAAQ,MAAA;AAAA,QACnB;AACA,QAAA,MAAM,UAAA,GAAqB,UAAA,CAAW,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AACtD,QAAA,IAAI,UAAA,CAAW,eAAe,CAAA,EAAG;AAC7B,UAAA,IAAA,CAAK,KAAA,GAAQ,iCAAA;AACb,UAAA,OAAO,YAAA;AAAA,QACX;AACA,QAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,UAAA,CAAW,UAAU,CAAA;AACpD,QAAA,IAAI,CAAC,QAAA,EAAU;AACX,UAAA,MAAM,WAAA,GAAc,IAAI,UAAA,CAAW,UAAU,CAAA;AAC7C,UAAA,MAAM,GAAA,GAAM,WAAW,UAAA,GAAa,CAAA;AACpC,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA;AACrB,YAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA,GAAI,GAAA;AAClC,UAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,WAAA,CAAY,GAAG,CAAA;AAAA,QAClC;AACA,QAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,MACnB;AAAA,MACA,QAAA,GAAW;AACP,QAAA,IAAI,MAAA,GAAS,EAAA;AACb,QAAA,IAAI,IAAA,CAAK,SAAA;AACL,UAAA,MAAA,GAAmB,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA;AAAA,aACjD;AACD,UAAA,MAAA,GAAS,IAAA,CAAK,SAAS,QAAA,EAAS;AAAA,QACpC;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,UAAU,IAAA,CAAK;AAAA,SACnB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,0BAAA,CAA2B,IAAA,GAAO,kBAAA;AAElC,IAAM,uCAAA,GAAN,cAAsD,UAAA,CAAW;AAAA,MAC7D,WAAA,CAAY,EAAE,KAAA,GAAQ,YAAA,EAAc,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AACtD,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,EAAC;AACd,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,QACzB;AAAA,MACJ;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,IAAI,YAAA,GAAe,WAAA;AACnB,QAAA,OAAO,cAAc,CAAA,EAAG;AACpB,UAAA,MAAM,QAAA,GAAW,IAAI,0BAAA,EAA2B;AAChD,UAAA,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,WAAA,EAAa,YAAA,EAAc,WAAW,CAAA;AACtE,UAAA,IAAI,iBAAiB,EAAA,EAAI;AACrB,YAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AACnB,YAAA,IAAA,CAAK,QAAQ,QAAA,CAAS,KAAA;AACtB,YAAA,OAAO,YAAA;AAAA,UACX;AACA,UAAA,IAAA,CAAK,eAAe,QAAA,CAAS,WAAA;AAC7B,UAAA,WAAA,IAAe,QAAA,CAAS,WAAA;AACxB,UAAA,IAAA,CAAK,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,QAC5B;AACA,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,MACA,KAAA,CAAM,UAAU,OAAA,EAAS;AACrB,QAAA,MAAM,aAAa,EAAC;AACpB,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACxC,UAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,QAAQ,CAAA;AAC7C,UAAA,IAAI,QAAA,CAAS,eAAe,CAAA,EAAG;AAC3B,YAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA;AAC3B,YAAA,OAAO,YAAA;AAAA,UACX;AACA,UAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,QAC5B;AACA,QAAA,OAAO,OAAO,UAAU,CAAA;AAAA,MAC5B;AAAA,MACA,WAAW,MAAA,EAAQ;AACf,QAAA,IAAA,CAAK,QAAQ,EAAC;AACd,QAAA,IAAI,IAAA,GAAO,CAAA;AACX,QAAA,IAAI,IAAA,GAAO,CAAA;AACX,QAAA,IAAI,GAAA,GAAM,EAAA;AACV,QAAA,GAAG;AACC,UAAA,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAA;AAC/B,UAAA,IAAI,IAAA,KAAS,EAAA;AACT,YAAA,GAAA,GAAM,MAAA,CAAO,UAAU,IAAI,CAAA;AAAA;AAE3B,YAAA,GAAA,GAAM,MAAA,CAAO,SAAA,CAAU,IAAA,EAAM,IAAI,CAAA;AACrC,UAAA,IAAA,GAAO,IAAA,GAAO,CAAA;AACd,UAAA,MAAM,QAAA,GAAW,IAAI,0BAAA,EAA2B;AAChD,UAAA,QAAA,CAAS,QAAA,GAAW,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AACpC,UAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA;AACvB,YAAA,OAAO,IAAA;AACX,UAAA,IAAA,CAAK,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,QAC5B,SAAS,IAAA,KAAS,EAAA;AAClB,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,MACA,QAAA,GAAW;AACP,QAAA,IAAI,MAAA,GAAS,EAAA;AACb,QAAA,IAAI,SAAA,GAAY,KAAA;AAChB,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACxC,UAAA,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,SAAA;AAC1B,UAAA,IAAI,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,QAAA,EAAS;AACpC,UAAA,IAAI,CAAA,KAAM,CAAA;AACN,YAAA,MAAA,GAAS,GAAG,MAAM,CAAA,CAAA,CAAA;AACtB,UAAA,IAAI,SAAA,EAAW;AACX,YAAA,MAAA,GAAS,IAAI,MAAM,CAAA,CAAA,CAAA;AACnB,YAAA,MAAA,IAAU,MAAA;AAAA,UACd,CAAA;AAEI,YAAA,MAAA,IAAU,MAAA;AAAA,QAClB;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,MAAA,GAAS;AACL,QAAA,MAAM,MAAA,GAAS;AAAA,UACX,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,KAAA,EAAO,KAAK,QAAA,EAAS;AAAA,UACrB,UAAU;AAAC,SACf;AACA,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAM,MAAA,EAAQ,CAAA,EAAA;AACnC,UAAA,MAAA,CAAO,SAAS,IAAA,CAAK,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,QAAQ,CAAA;AAC/C,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,KACJ;AACA,IAAA,uCAAA,CAAwC,IAAA,GAAO,oCAAA;AAG/C,IAAM,wBAAA,GAAN,cAAuC,SAAA,CAAU;AAAA,MAC7C,QAAA,GAAW;AACP,QAAA,OAAO,IAAA,CAAK,WAAW,QAAA,EAAS;AAAA,MACpC;AAAA,MACA,SAAS,KAAA,EAAO;AACZ,QAAA,IAAA,CAAK,UAAA,CAAW,WAAW,KAAK,CAAA;AAAA,MACpC;AAAA,MACA,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,YAAY,uCAAuC,CAAA;AACzD,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,OAAO,CAAA,EAAG,KAAK,WAAA,CAAY,IAAI,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,EAAS,IAAK,OAAO,CAAA,CAAA;AAAA,MAC9E;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,KAAA,EAAO,KAAK,QAAA;AAAS,SACzB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,wBAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,wBAAA,GAA2B,IAAA;AAAA,IACzC,CAAA,GAAG;AACH,IAAA,wBAAA,CAAyB,IAAA,GAAO,0BAAA;AAGhC,IAAM,QAAA,GAAN,cAAuB,WAAA,CAAY;AAAA,MAC/B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,QAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,QAAA,GAAW,IAAA;AAAA,IACzB,CAAA,GAAG;AACH,IAAA,QAAA,CAAS,IAAA,GAAO,UAAA;AAGhB,IAAME,IAAAA,GAAN,cAAkB,WAAA,CAAY;AAAA,MAC1B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAOA,IAAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,GAAA,GAAM,IAAA;AAAA,IACpB,CAAA,GAAG;AACH,IAAAA,KAAI,IAAA,GAAO,KAAA;AAEX,IAAM,qBAAA,GAAN,cAAoC,QAAA,CAAS,UAAU,CAAA,CAAE;AAAA,MACrD,YAAY,EAAE,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAChC,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,QAAA,IAAA,CAAK,KAAA,GAAQ,YAAA;AAAA,MACjB;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,OAAO,IAAA,CAAK;AAAA,SAChB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,qBAAA,CAAsB,IAAA,GAAO,kBAAA;AAE7B,IAAM,2BAAA,GAAN,cAA0C,qBAAA,CAAsB;AAAA,KAChE;AACA,IAAA,2BAAA,CAA4B,IAAA,GAAO,wBAAA;AAEnC,IAAM,sBAAA,GAAN,cAAqC,eAAA,CAAgB;AAAA,MACjD,YAAY,EAAE,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAChC,QAAA,KAAA,CAAM,YAAY,2BAA2B,CAAA;AAAA,MACjD;AAAA,MACA,WAAW,WAAA,EAAa;AACpB,QAAA,IAAA,CAAK,UAAA,CAAW,QAAQ,MAAA,CAAO,YAAA,CAAa,MAAM,IAAA,EAAgB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAC,CAAA;AAAA,MACrH;AAAA,MACA,WAAW,WAAA,EAAa;AACpB,QAAA,MAAM,SAAS,WAAA,CAAY,MAAA;AAC3B,QAAA,MAAM,OAAO,IAAA,CAAK,UAAA,CAAW,YAAA,GAAe,IAAI,WAAW,MAAM,CAAA;AACjE,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA;AACxB,UAAA,IAAA,CAAK,CAAC,CAAA,GAAI,WAAA,CAAY,UAAA,CAAW,CAAC,CAAA;AACtC,QAAA,IAAA,CAAK,WAAW,KAAA,GAAQ,WAAA;AAAA,MAC5B;AAAA,KACJ;AACA,IAAA,sBAAA,CAAuB,IAAA,GAAO,eAAA;AAE9B,IAAM,yBAAA,GAAN,cAAwC,sBAAA,CAAuB;AAAA,MAC3D,WAAW,WAAA,EAAa;AACpB,QAAA,IAAA,CAAK,UAAA,CAAW,YAAA,GAAyB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA;AACvF,QAAA,IAAI;AACA,UAAA,IAAA,CAAK,UAAA,CAAW,KAAA,GAAkB,OAAA,CAAQ,YAAA,CAAa,WAAW,CAAA;AAAA,QACtE,SACO,EAAA,EAAI;AACP,UAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,mCAAA,EAAsC,EAAE,CAAA,kBAAA,CAAoB,CAAA;AAC/E,UAAA,IAAA,CAAK,UAAA,CAAW,KAAA,GAAkB,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AAAA,QAClE;AAAA,MACJ;AAAA,MACA,WAAW,WAAA,EAAa;AACpB,QAAA,IAAA,CAAK,WAAW,YAAA,GAAe,IAAI,WAAqB,OAAA,CAAQ,cAAA,CAAe,WAAW,CAAC,CAAA;AAC3F,QAAA,IAAA,CAAK,WAAW,KAAA,GAAQ,WAAA;AAAA,MAC5B;AAAA,KACJ;AACA,IAAA,yBAAA,CAA0B,IAAA,GAAO,sBAAA;AAGjC,IAAM,UAAA,GAAN,cAAyB,yBAAA,CAA0B;AAAA,MAC/C,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,UAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,UAAA,GAAa,IAAA;AAAA,IAC3B,CAAA,GAAG;AACH,IAAA,UAAA,CAAW,IAAA,GAAO,YAAA;AAElB,IAAM,wBAAA,GAAN,cAAuC,sBAAA,CAAuB;AAAA,MAC1D,WAAW,WAAA,EAAa;AACpB,QAAA,IAAA,CAAK,UAAA,CAAW,KAAA,GAAkB,OAAA,CAAQ,aAAA,CAAc,WAAW,CAAA;AACnE,QAAA,IAAA,CAAK,UAAA,CAAW,YAAA,GAAyB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA;AAAA,MAC3F;AAAA,MACA,WAAW,WAAA,EAAa;AACpB,QAAA,IAAA,CAAK,WAAW,KAAA,GAAQ,WAAA;AACxB,QAAA,IAAA,CAAK,WAAW,YAAA,GAAe,IAAI,WAAqB,OAAA,CAAQ,eAAA,CAAgB,WAAW,CAAC,CAAA;AAAA,MAChG;AAAA,KACJ;AACA,IAAA,wBAAA,CAAyB,IAAA,GAAO,qBAAA;AAGhC,IAAM,SAAA,GAAN,cAAwB,wBAAA,CAAyB;AAAA,MAC7C,YAAY,EAAE,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAChC,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,SAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,SAAA,GAAY,IAAA;AAAA,IAC1B,CAAA,GAAG;AACH,IAAA,SAAA,CAAU,IAAA,GAAO,WAAA;AAEjB,IAAM,8BAAA,GAAN,cAA6C,sBAAA,CAAuB;AAAA,MAChE,WAAW,WAAA,EAAa;AACpB,QAAA,MAAM,UAAA,GAAa,WAAA,CAAY,MAAA,CAAO,WAAW,CAAA,GAAI,WAAA,CAAY,KAAA,EAAM,CAAE,MAAA,GAAS,WAAA,CAAY,KAAA,CAAM,CAAC,CAAA;AACrG,QAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,UAAU,CAAA;AAC3C,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC1C,UAAA,SAAA,CAAU,CAAC,CAAA,GAAI,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA;AAC9B,UAAA,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA,GAAI,SAAA,CAAU,IAAI,CAAC,CAAA;AAClC,UAAA,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AACnB,UAAA,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AAAA,QACvB;AACA,QAAA,IAAA,CAAK,UAAA,CAAW,QAAQ,MAAA,CAAO,YAAA,CAAa,MAAM,IAAA,EAAM,IAAI,WAAA,CAAY,UAAU,CAAC,CAAA;AAAA,MACvF;AAAA,MACA,WAAW,WAAA,EAAa;AACpB,QAAA,MAAM,YAAY,WAAA,CAAY,MAAA;AAC9B,QAAA,MAAM,eAAe,IAAA,CAAK,UAAA,CAAW,eAAe,IAAI,UAAA,CAAW,YAAY,CAAC,CAAA;AAChF,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAChC,UAAA,MAAM,UAAkB,UAAA,CAAW,WAAA,CAAY,UAAA,CAAW,CAAC,GAAG,CAAC,CAAA;AAC/D,UAAA,MAAM,QAAA,GAAW,IAAI,UAAA,CAAW,OAAO,CAAA;AACvC,UAAA,IAAI,SAAS,MAAA,GAAS,CAAA;AAClB,YAAA;AACJ,UAAA,MAAM,GAAA,GAAM,IAAI,QAAA,CAAS,MAAA;AACzB,UAAA,KAAA,IAAS,CAAA,GAAK,QAAA,CAAS,MAAA,GAAS,CAAA,EAAI,KAAK,CAAA,EAAG,CAAA,EAAA;AACxC,YAAA,YAAA,CAAa,IAAI,CAAA,GAAI,CAAA,GAAI,GAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,QAClD;AACA,QAAA,IAAA,CAAK,WAAW,KAAA,GAAQ,WAAA;AAAA,MAC5B;AAAA,KACJ;AACA,IAAA,8BAAA,CAA+B,IAAA,GAAO,2BAAA;AAGtC,IAAM,eAAA,GAAN,cAA8B,8BAAA,CAA+B;AAAA,MACzD,YAAY,EAAE,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAChC,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,eAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,eAAA,GAAkB,IAAA;AAAA,IAChC,CAAA,GAAG;AACH,IAAA,eAAA,CAAgB,IAAA,GAAO,iBAAA;AAGvB,IAAM,aAAA,GAAN,cAA4B,sBAAA,CAAuB;AAAA,MAC/C,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,aAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,aAAA,GAAgB,IAAA;AAAA,IAC9B,CAAA,GAAG;AACH,IAAA,aAAA,CAAc,IAAA,GAAO,eAAA;AAGrB,IAAM,eAAA,GAAN,cAA8B,sBAAA,CAAuB;AAAA,MACjD,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,eAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,eAAA,GAAkB,IAAA;AAAA,IAChC,CAAA,GAAG;AACH,IAAA,eAAA,CAAgB,IAAA,GAAO,iBAAA;AAGvB,IAAM,aAAA,GAAN,cAA4B,sBAAA,CAAuB;AAAA,MAC/C,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,aAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,aAAA,GAAgB,IAAA;AAAA,IAC9B,CAAA,GAAG;AACH,IAAA,aAAA,CAAc,IAAA,GAAO,eAAA;AAGrB,IAAM,cAAA,GAAN,cAA6B,sBAAA,CAAuB;AAAA,MAChD,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,cAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,cAAA,GAAiB,IAAA;AAAA,IAC/B,CAAA,GAAG;AACH,IAAA,cAAA,CAAe,IAAA,GAAO,gBAAA;AAGtB,IAAM,SAAA,GAAN,cAAwB,sBAAA,CAAuB;AAAA,MAC3C,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,SAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,SAAA,GAAY,IAAA;AAAA,IAC1B,CAAA,GAAG;AACH,IAAA,SAAA,CAAU,IAAA,GAAO,WAAA;AAGjB,IAAM,aAAA,GAAN,cAA4B,sBAAA,CAAuB;AAAA,MAC/C,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,aAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,aAAA,GAAgB,IAAA;AAAA,IAC9B,CAAA,GAAG;AACH,IAAA,aAAA,CAAc,IAAA,GAAO,eAAA;AAGrB,IAAM,aAAA,GAAN,cAA4B,sBAAA,CAAuB;AAAA,MAC/C,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,aAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,aAAA,GAAgB,IAAA;AAAA,IAC9B,CAAA,GAAG;AACH,IAAA,aAAA,CAAc,IAAA,GAAO,eAAA;AAGrB,IAAM,aAAA,GAAN,cAA4B,sBAAA,CAAuB;AAAA,MAC/C,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,aAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,aAAA,GAAgB,IAAA;AAAA,IAC9B,CAAA,GAAG;AACH,IAAA,aAAA,CAAc,IAAA,GAAO,eAAA;AAGrB,IAAM,eAAA,GAAN,cAA8B,sBAAA,CAAuB;AAAA,MACjD,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,eAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,eAAA,GAAkB,IAAA;AAAA,IAChC,CAAA,GAAG;AACH,IAAA,eAAA,CAAgB,IAAA,GAAO,iBAAA;AAGvB,IAAM,OAAA,GAAN,cAAsB,aAAA,CAAc;AAAA,MAChC,WAAA,CAAY,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAClD,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AACZ,QAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AACb,QAAA,IAAA,CAAK,GAAA,GAAM,CAAA;AACX,QAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AACZ,QAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,QAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AACrB,UAAA,IAAA,CAAK,UAAA,CAAW,YAAA,GAAe,IAAI,UAAA,CAAW,MAAM,MAAM,CAAA;AAC1D,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAA;AAC9B,YAAA,IAAA,CAAK,WAAW,YAAA,CAAa,CAAC,CAAA,GAAI,KAAA,CAAM,WAAW,CAAC,CAAA;AAAA,QAC5D;AACA,QAAA,IAAI,SAAA,EAAW;AACX,UAAA,IAAA,CAAK,SAAS,SAAS,CAAA;AACvB,UAAA,IAAA,CAAK,WAAW,YAAA,GAAe,IAAI,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAAA,QACjE;AACA,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,MACA,WAAW,WAAA,EAAa;AACpB,QAAA,IAAA,CAAK,UAAA,CAAW,OAAO,YAAA,CAAa,KAAA,CAAM,MAAgB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAC,CAAC,CAAA;AAAA,MAC9G;AAAA,MACA,QAAA,GAAW;AACP,QAAA,MAAM,GAAA,GAAM,KAAK,QAAA,EAAS;AAC1B,QAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACzC,QAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,MAAM,CAAA;AAClC,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAA;AAC5B,UAAA,IAAA,CAAK,CAAC,CAAA,GAAI,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC9B,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,SAAS,SAAA,EAAW;AAChB,QAAA,IAAA,CAAK,IAAA,GAAO,UAAU,cAAA,EAAe;AACrC,QAAA,IAAA,CAAK,KAAA,GAAQ,SAAA,CAAU,WAAA,EAAY,GAAI,CAAA;AACvC,QAAA,IAAA,CAAK,GAAA,GAAM,UAAU,UAAA,EAAW;AAChC,QAAA,IAAA,CAAK,IAAA,GAAO,UAAU,WAAA,EAAY;AAClC,QAAA,IAAA,CAAK,MAAA,GAAS,UAAU,aAAA,EAAc;AACtC,QAAA,IAAA,CAAK,MAAA,GAAS,UAAU,aAAA,EAAc;AAAA,MAC1C;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAQ,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,KAAK,IAAA,CAAK,IAAA,EAAM,KAAK,MAAA,EAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,MACvG;AAAA,MACA,WAAW,WAAA,EAAa;AACpB,QAAA,MAAM,MAAA,GAAS,+CAAA;AACf,QAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AAC3C,QAAA,IAAI,gBAAgB,IAAA,EAAM;AACtB,UAAA,IAAA,CAAK,KAAA,GAAQ,mCAAA;AACb,UAAA;AAAA,QACJ;AACA,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACxC,QAAA,IAAI,IAAA,IAAQ,EAAA;AACR,UAAA,IAAA,CAAK,OAAO,IAAA,GAAO,IAAA;AAAA;AAEnB,UAAA,IAAA,CAAK,OAAO,GAAA,GAAO,IAAA;AACvB,QAAA,IAAA,CAAK,KAAA,GAAQ,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACxC,QAAA,IAAA,CAAK,GAAA,GAAM,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACtC,QAAA,IAAA,CAAK,IAAA,GAAO,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACvC,QAAA,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACzC,QAAA,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AAAA,MAC7C;AAAA,MACA,QAAA,CAAS,WAAW,KAAA,EAAO;AACvB,QAAA,IAAI,aAAa,KAAA,EAAO;AACpB,UAAA,MAAM,WAAA,GAAc,IAAI,KAAA,CAAM,CAAC,CAAA;AAC/B,UAAA,WAAA,CAAY,CAAC,CAAA,GAAY,SAAA,CAAY,IAAA,CAAK,IAAA,GAAO,GAAA,GAAS,IAAA,CAAK,IAAA,GAAO,IAAA,GAAS,IAAA,CAAK,IAAA,GAAO,GAAA,EAAQ,CAAC,CAAA;AACpG,UAAA,WAAA,CAAY,CAAC,CAAA,GAAY,SAAA,CAAU,IAAA,CAAK,OAAO,CAAC,CAAA;AAChD,UAAA,WAAA,CAAY,CAAC,CAAA,GAAY,SAAA,CAAU,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9C,UAAA,WAAA,CAAY,CAAC,CAAA,GAAY,SAAA,CAAU,IAAA,CAAK,MAAM,CAAC,CAAA;AAC/C,UAAA,WAAA,CAAY,CAAC,CAAA,GAAY,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAC,CAAA;AACjD,UAAA,WAAA,CAAY,CAAC,CAAA,GAAY,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAC,CAAA;AACjD,UAAA,WAAA,CAAY,CAAC,CAAA,GAAI,GAAA;AACjB,UAAA,OAAO,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,MAClC;AAAA,MACA,eAAA,GAAkB;AACd,QAAA,OAAO,CAAA,EAAG,KAAK,WAAA,CAAY,IAAI,MAAM,IAAA,CAAK,MAAA,EAAO,CAAE,WAAA,EAAa,CAAA,CAAA;AAAA,MACpE;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAQ,IAAA,CAAK;AAAA,SACjB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,OAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,IACxB,CAAA,GAAG;AACH,IAAA,OAAA,CAAQ,IAAA,GAAO,SAAA;AAGf,IAAM,eAAA,GAAN,cAA8B,OAAA,CAAQ;AAAA,MAClC,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,IAAI,EAAA;AACJ,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,CAAC,EAAA,GAAK,KAAK,WAAA,MAAiB,IAAA,IAAQ,OAAO,MAAA,GAAS,EAAA,GAAM,KAAK,WAAA,GAAc,CAAA;AAC7E,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,MACA,SAAS,SAAA,EAAW;AAChB,QAAA,KAAA,CAAM,SAAS,SAAS,CAAA;AACxB,QAAA,IAAA,CAAK,WAAA,GAAc,UAAU,kBAAA,EAAmB;AAAA,MACpD;AAAA,MACA,MAAA,GAAS;AACL,QAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,KAAK,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,KAAK,IAAA,EAAM,IAAA,CAAK,QAAQ,IAAA,CAAK,MAAA,EAAQ,KAAK,WAAW,CAAA;AACnH,QAAA,OAAQ,IAAI,KAAK,OAAO,CAAA;AAAA,MAC5B;AAAA,MACA,WAAW,WAAA,EAAa;AACpB,QAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,QAAA,IAAI,UAAA,GAAa,EAAA;AACjB,QAAA,IAAI,cAAA,GAAiB,EAAA;AACrB,QAAA,IAAI,YAAA,GAAe,CAAA;AACnB,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,QAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,QAAA,IAAI,WAAA,CAAY,WAAA,CAAY,MAAA,GAAS,CAAC,MAAM,GAAA,EAAK;AAC7C,UAAA,UAAA,GAAa,WAAA,CAAY,SAAA,CAAU,CAAA,EAAG,WAAA,CAAY,SAAS,CAAC,CAAA;AAC5D,UAAA,KAAA,GAAQ,IAAA;AAAA,QACZ,CAAA,MACK;AACD,UAAA,MAAM,SAAS,IAAI,MAAA,CAAO,YAAY,WAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA;AAC7D,UAAA,IAAI,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,CAAA;AACtB,YAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACvD,UAAA,UAAA,GAAa,WAAA;AAAA,QACjB;AACA,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,IAAI,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA,KAAM,EAAA;AAC5B,YAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACvD,UAAA,IAAI,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA,KAAM,EAAA;AAC5B,YAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,QAC3D,CAAA,MACK;AACD,UAAA,IAAI,UAAA,GAAa,CAAA;AACjB,UAAA,IAAI,kBAAA,GAAqB,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAC/C,UAAA,IAAI,gBAAA,GAAmB,EAAA;AACvB,UAAA,IAAI,uBAAuB,EAAA,EAAI;AAC3B,YAAA,kBAAA,GAAqB,UAAA,CAAW,QAAQ,GAAG,CAAA;AAC3C,YAAA,UAAA,GAAa,EAAA;AAAA,UACjB;AACA,UAAA,IAAI,uBAAuB,EAAA,EAAI;AAC3B,YAAA,gBAAA,GAAmB,UAAA,CAAW,SAAA,CAAU,kBAAA,GAAqB,CAAC,CAAA;AAC9D,YAAA,UAAA,GAAa,UAAA,CAAW,SAAA,CAAU,CAAA,EAAG,kBAAkB,CAAA;AACvD,YAAA,IAAK,gBAAA,CAAiB,MAAA,KAAW,CAAA,IAAO,gBAAA,CAAiB,MAAA,KAAW,CAAA;AAChE,cAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACvD,YAAA,IAAI,SAAS,QAAA,CAAS,gBAAA,CAAiB,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC1D,YAAA,IAAI,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,CAAA;AACtB,cAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACvD,YAAA,cAAA,GAAiB,UAAA,GAAa,MAAA;AAC9B,YAAA,IAAI,gBAAA,CAAiB,WAAW,CAAA,EAAG;AAC/B,cAAA,MAAA,GAAS,SAAS,gBAAA,CAAiB,SAAA,CAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtD,cAAA,IAAI,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,CAAA;AACtB,gBAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACvD,cAAA,gBAAA,GAAmB,UAAA,GAAa,MAAA;AAAA,YACpC;AAAA,UACJ;AAAA,QACJ;AACA,QAAA,IAAI,qBAAA,GAAwB,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAClD,QAAA,IAAI,qBAAA,KAA0B,EAAA;AAC1B,UAAA,qBAAA,GAAwB,UAAA,CAAW,QAAQ,GAAG,CAAA;AAClD,QAAA,IAAI,0BAA0B,EAAA,EAAI;AAC9B,UAAA,MAAM,iBAAA,GAAoB,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,WAAW,SAAA,CAAU,qBAAqB,CAAC,CAAA,CAAE,CAAA;AACtF,UAAA,IAAI,KAAA,CAAM,iBAAA,CAAkB,OAAA,EAAS,CAAA;AACjC,YAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACvD,UAAA,YAAA,GAAe,kBAAkB,OAAA,EAAQ;AACzC,UAAA,cAAA,GAAiB,UAAA,CAAW,SAAA,CAAU,CAAA,EAAG,qBAAqB,CAAA;AAAA,QAClE,CAAA;AAEI,UAAA,cAAA,GAAiB,UAAA;AACrB,QAAA,QAAQ,IAAA;AAAM,UACV,KAAM,eAAe,MAAA,KAAW,CAAA;AAC5B,YAAA,MAAA,GAAS,yBAAA;AACT,YAAA,IAAI,qBAAA,KAA0B,EAAA;AAC1B,cAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACvD,YAAA;AAAA,UACJ,KAAM,eAAe,MAAA,KAAW,EAAA;AAC5B,YAAA,MAAA,GAAS,gCAAA;AACT,YAAA,IAAI,0BAA0B,EAAA,EAAI;AAC9B,cAAA,IAAI,iBAAiB,EAAA,GAAK,YAAA;AAC1B,cAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,cAAc,CAAA;AACvC,cAAA,cAAA,GAAiB,EAAA,IAAM,iBAAiB,IAAA,CAAK,MAAA,CAAA;AAC7C,cAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,cAAc,CAAA;AACvC,cAAA,cAAA,GAAiB,GAAA,IAAQ,iBAAiB,IAAA,CAAK,MAAA,CAAA;AAC/C,cAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,cAAc,CAAA;AAAA,YAChD;AACA,YAAA;AAAA,UACJ,KAAM,eAAe,MAAA,KAAW,EAAA;AAC5B,YAAA,MAAA,GAAS,uCAAA;AACT,YAAA,IAAI,0BAA0B,EAAA,EAAI;AAC9B,cAAA,IAAI,iBAAiB,EAAA,GAAK,YAAA;AAC1B,cAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,cAAc,CAAA;AACvC,cAAA,cAAA,GAAiB,GAAA,IAAQ,iBAAiB,IAAA,CAAK,MAAA,CAAA;AAC/C,cAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,cAAc,CAAA;AAAA,YAChD;AACA,YAAA;AAAA,UACJ,KAAM,eAAe,MAAA,KAAW,EAAA;AAC5B,YAAA,MAAA,GAAS,8CAAA;AACT,YAAA,IAAI,0BAA0B,EAAA,EAAI;AAC9B,cAAA,MAAM,iBAAiB,GAAA,GAAO,YAAA;AAC9B,cAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,cAAc,CAAA;AAAA,YAChD;AACA,YAAA;AAAA,UACJ;AACI,YAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA;AAE3D,QAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA;AAC9C,QAAA,IAAI,WAAA,KAAgB,IAAA;AAChB,UAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACvD,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AACzC,UAAA,QAAQ,CAAA;AAAG,YACP,KAAK,CAAA;AACD,cAAA,IAAA,CAAK,IAAA,GAAO,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACvC,cAAA;AAAA,YACJ,KAAK,CAAA;AACD,cAAA,IAAA,CAAK,KAAA,GAAQ,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACxC,cAAA;AAAA,YACJ,KAAK,CAAA;AACD,cAAA,IAAA,CAAK,GAAA,GAAM,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACtC,cAAA;AAAA,YACJ,KAAK,CAAA;AACD,cAAA,IAAA,CAAK,OAAO,QAAA,CAAS,WAAA,CAAY,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,cAAA;AAC3C,cAAA;AAAA,YACJ,KAAK,CAAA;AACD,cAAA,IAAA,CAAK,SAAS,QAAA,CAAS,WAAA,CAAY,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,gBAAA;AAC7C,cAAA;AAAA,YACJ,KAAK,CAAA;AACD,cAAA,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACzC,cAAA;AAAA,YACJ;AACI,cAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA;AAC3D,QACJ;AACA,QAAA,IAAI,UAAU,KAAA,EAAO;AACjB,UAAA,MAAM,WAAW,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,KAAK,KAAA,EAAO,IAAA,CAAK,GAAA,EAAK,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,KAAK,WAAW,CAAA;AAChH,UAAA,IAAA,CAAK,IAAA,GAAO,SAAS,cAAA,EAAe;AACpC,UAAA,IAAA,CAAK,KAAA,GAAQ,SAAS,WAAA,EAAY;AAClC,UAAA,IAAA,CAAK,GAAA,GAAM,SAAS,SAAA,EAAU;AAC9B,UAAA,IAAA,CAAK,IAAA,GAAO,SAAS,WAAA,EAAY;AACjC,UAAA,IAAA,CAAK,MAAA,GAAS,SAAS,aAAA,EAAc;AACrC,UAAA,IAAA,CAAK,MAAA,GAAS,SAAS,aAAA,EAAc;AACrC,UAAA,IAAA,CAAK,WAAA,GAAc,SAAS,kBAAA,EAAmB;AAAA,QACnD;AAAA,MACJ;AAAA,MACA,QAAA,CAAS,WAAW,KAAA,EAAO;AACvB,QAAA,IAAI,aAAa,KAAA,EAAO;AACpB,UAAA,MAAM,cAAc,EAAC;AACrB,UAAA,WAAA,CAAY,IAAA,CAAa,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AAChD,UAAA,WAAA,CAAY,IAAA,CAAa,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,CAAC,CAAC,CAAA;AACjD,UAAA,WAAA,CAAY,IAAA,CAAa,SAAA,CAAU,IAAA,CAAK,GAAA,EAAK,CAAC,CAAC,CAAA;AAC/C,UAAA,WAAA,CAAY,IAAA,CAAa,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AAChD,UAAA,WAAA,CAAY,IAAA,CAAa,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAC,CAAA;AAClD,UAAA,WAAA,CAAY,IAAA,CAAa,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAC,CAAA;AAClD,UAAA,IAAI,IAAA,CAAK,gBAAgB,CAAA,EAAG;AACxB,YAAA,WAAA,CAAY,KAAK,GAAG,CAAA;AACpB,YAAA,WAAA,CAAY,IAAA,CAAa,SAAA,CAAU,IAAA,CAAK,WAAA,EAAa,CAAC,CAAC,CAAA;AAAA,UAC3D;AACA,UAAA,WAAA,CAAY,KAAK,GAAG,CAAA;AACpB,UAAA,OAAO,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,MAClC;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO;AAAA,UACH,GAAG,MAAM,MAAA,EAAO;AAAA,UAChB,aAAa,IAAA,CAAK;AAAA,SACtB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,eAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,eAAA,GAAkB,IAAA;AAAA,IAChC,CAAA,GAAG;AACH,IAAA,eAAA,CAAgB,IAAA,GAAO,iBAAA;AAGvB,IAAM,IAAA,GAAN,cAAmB,UAAA,CAAW;AAAA,MAC1B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,IAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,IAAA,GAAO,IAAA;AAAA,IACrB,CAAA,GAAG;AACH,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AAGZ,IAAM,SAAA,GAAN,cAAwB,UAAA,CAAW;AAAA,MAC/B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,SAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,SAAA,GAAY,IAAA;AAAA,IAC1B,CAAA,GAAG;AACH,IAAA,SAAA,CAAU,IAAA,GAAO,WAAA;AAGjB,IAAM,QAAA,GAAN,cAAuB,UAAA,CAAW;AAAA,MAC9B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,QAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,QAAA,GAAW,IAAA;AAAA,IACzB,CAAA,GAAG;AACH,IAAA,QAAA,CAAS,IAAA,GAAO,UAAA;AAGhB,IAAM,QAAA,GAAN,cAAuB,UAAA,CAAW;AAAA,MAC9B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,QAAA;AACP,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,QAAA,GAAW,IAAA;AAAA,IACzB,CAAA,GAAG;AACH,IAAA,QAAA,CAAS,IAAA,GAAO,UAAA;AAGhB,IAAM,IAAA,GAAN,cAAmB,UAAA,CAAW;AAAA,MAC1B,WAAA,CAAY,UAAA,GAAa,EAAC,EAAG;AACzB,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,QAAQ,QAAA,GAAW,CAAA;AACxB,QAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,EAAA;AAAA,MAC7B;AAAA,KACJ;AACA,IAAA,EAAA,GAAK,IAAA;AACL,IAAA,CAAC,MAAM;AACH,MAAA,SAAA,CAAU,IAAA,GAAO,EAAA;AAAA,IACrB,CAAA,GAAG;AACH,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AAEZ,IAAM,MAAN,MAAU;AAAA,MACN,WAAA,CAAY,EAAE,IAAA,GAAO,YAAA,EAAc,WAAW,KAAA,EAAM,GAAI,EAAC,EAAG;AACxD,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,QAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,MACpB;AAAA,KACJ;AAEA,IAAM,MAAA,GAAN,cAAqB,GAAA,CAAI;AAAA,MACrB,WAAA,CAAY,EAAE,KAAA,GAAQ,IAAI,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAC5C,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,MACjB;AAAA,KACJ;AAEA,IAAM,QAAA,GAAN,cAAuB,GAAA,CAAI;AAAA,MACvB,WAAA,CAAY,EAAE,KAAA,GAAQ,IAAI,GAAA,EAAI,EAAG,KAAA,GAAQ,KAAA,EAAO,GAAG,UAAA,EAAW,GAAI,EAAC,EAAG;AAClE,QAAA,KAAA,CAAM,UAAU,CAAA;AAChB,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,MACjB;AAAA,KACJ;AAEA,IAAM,UAAN,MAAc;AAAA,MACV,IAAI,IAAA,GAAO;AACP,QAAA,OAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAM,CAAE,MAAA;AAAA,MACjC;AAAA,MACA,IAAI,KAAK,KAAA,EAAO;AACZ,QAAA,IAAA,CAAK,QAAA,GAAqB,qBAAA,CAAsB,YAAA,CAAa,KAAK,CAAA;AAAA,MACtE;AAAA,MACA,YAAY,EAAE,IAAA,GAAO,UAAA,EAAW,GAAI,EAAC,EAAG;AACpC,QAAA,IAAA,CAAK,QAAA,GAAqB,qBAAA,CAAsB,YAAA,CAAa,IAAI,CAAA;AAAA,MACrE;AAAA,MACA,OAAA,CAAQ,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa;AAC3C,QAAA,MAAM,YAAY,WAAA,GAAc,WAAA;AAChC,QAAA,IAAA,CAAK,WAAqB,qBAAA,CAAsB,YAAA,CAAa,WAAW,CAAA,CAAE,QAAA,CAAS,aAAa,SAAS,CAAA;AACzG,QAAA,OAAO,SAAA;AAAA,MACX;AAAA,MACA,MAAM,SAAA,EAAW;AACb,QAAA,OAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAM,CAAE,MAAA;AAAA,MACjC;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC9zFA,IAAW,YAAA,EAMA,YAAA;AANX,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,CAAC,SAAUG,aAAAA,EAAc;AACrB,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,UAAU,CAAA,GAAI,CAAC,CAAA,GAAI,UAAA;AAC7C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,KAAK,CAAA,GAAI,CAAC,CAAA,GAAI,KAAA;AACxC,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,QAAQ,CAAA,GAAI,CAAC,CAAA,GAAI,QAAA;AAAA,IAC/C,CAAA,EAAG,YAAA,KAAiB,YAAA,GAAe,EAAC,CAAE,CAAA;AAEtC,IAAA,CAAC,SAAUC,aAAAA,EAAc;AACrB,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,KAAK,CAAA,GAAI,CAAC,CAAA,GAAI,KAAA;AACxC,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,SAAS,CAAA,GAAI,CAAC,CAAA,GAAI,SAAA;AAC5C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,aAAa,CAAA,GAAI,CAAC,CAAA,GAAI,aAAA;AAChD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,WAAW,CAAA,GAAI,CAAC,CAAA,GAAI,WAAA;AAC9C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,SAAS,CAAA,GAAI,CAAC,CAAA,GAAI,SAAA;AAC5C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,YAAY,CAAA,GAAI,CAAC,CAAA,GAAI,YAAA;AAC/C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,kBAAkB,CAAA,GAAI,CAAC,CAAA,GAAI,kBAAA;AACrD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,YAAY,CAAA,GAAI,CAAC,CAAA,GAAI,YAAA;AAC/C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,WAAW,CAAA,GAAI,CAAC,CAAA,GAAI,WAAA;AAC9C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,iBAAiB,CAAA,GAAI,EAAE,CAAA,GAAI,iBAAA;AACrD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,eAAe,CAAA,GAAI,EAAE,CAAA,GAAI,eAAA;AACnD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,iBAAiB,CAAA,GAAI,EAAE,CAAA,GAAI,iBAAA;AACrD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,eAAe,CAAA,GAAI,EAAE,CAAA,GAAI,eAAA;AACnD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,gBAAgB,CAAA,GAAI,EAAE,CAAA,GAAI,gBAAA;AACpD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,WAAW,CAAA,GAAI,EAAE,CAAA,GAAI,WAAA;AAC/C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,eAAe,CAAA,GAAI,EAAE,CAAA,GAAI,eAAA;AACnD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,eAAe,CAAA,GAAI,EAAE,CAAA,GAAI,eAAA;AACnD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,eAAe,CAAA,GAAI,EAAE,CAAA,GAAI,eAAA;AACnD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,iBAAiB,CAAA,GAAI,EAAE,CAAA,GAAI,iBAAA;AACrD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,SAAS,CAAA,GAAI,EAAE,CAAA,GAAI,SAAA;AAC7C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,iBAAiB,CAAA,GAAI,EAAE,CAAA,GAAI,iBAAA;AACrD,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,MAAM,CAAA,GAAI,EAAE,CAAA,GAAI,MAAA;AAC1C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,WAAW,CAAA,GAAI,EAAE,CAAA,GAAI,WAAA;AAC/C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,UAAU,CAAA,GAAI,EAAE,CAAA,GAAI,UAAA;AAC9C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,UAAU,CAAA,GAAI,EAAE,CAAA,GAAI,UAAA;AAC9C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,MAAM,CAAA,GAAI,EAAE,CAAA,GAAI,MAAA;AAC1C,MAAAA,aAAAA,CAAaA,aAAAA,CAAa,MAAM,CAAA,GAAI,EAAE,CAAA,GAAI,MAAA;AAAA,IAC9C,CAAA,EAAG,YAAA,KAAiB,YAAA,GAAe,EAAC,CAAE,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACnCtC,IAEaC,UAAAA;AAFb,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAH,cAAAA,EAAAA;AACA,IAAA,aAAA,EAAA;AACO,IAAMG,aAAN,MAAgB;AAAA,MACnB,WAAA,CAAY,MAAA,EAAQ,UAAA,GAAa,CAAA,EAAG;AAChC,QAAA,IAAA,CAAK,UAAA,GAAa,CAAA;AAClB,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,WAAA,CAAY,CAAC,CAAA;AAC9B,QAAA,IAAI,MAAA,EAAQ;AACR,UAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC5B,YAAA,IAAA,CAAK,WAAW,MAAM,CAAA;AAAA,UAC1B,CAAA,MAAA,IACS,qBAAA,CAAsB,cAAA,CAAe,MAAM,CAAA,EAAG;AACnD,YAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,YAAA,IAAA,CAAK,KAAA,GAAQ,qBAAA,CAAsB,aAAA,CAAc,MAAM,CAAA;AAAA,UAC3D,CAAA,MACK;AACD,YAAA,MAAM,UAAU,qDAAqD,CAAA;AAAA,UACzE;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,QAAQ,GAAA,EAAK;AACT,QAAA,IAAI,EAAE,eAAsB,SAAA,CAAA,EAAY;AACpC,UAAA,MAAM,IAAI,UAAU,mDAAmD,CAAA;AAAA,QAC3E;AACA,QAAA,IAAA,CAAK,UAAA,GAAa,IAAI,UAAA,CAAW,UAAA;AACjC,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,UAAA,CAAW,QAAA;AAC5B,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,MACA,KAAA,GAAQ;AACJ,QAAA,OAAO,IAAW,UAAU,EAAE,UAAA,EAAY,KAAK,UAAA,EAAY,QAAA,EAAU,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,MACrF;AAAA,MACA,SAAS,IAAA,EAAM;AACX,QAAA,OAAO,IAAW,SAAA,CAAU,EAAE,IAAA,EAAM,CAAA;AAAA,MACxC;AAAA,MACA,QAAA,GAAW;AACP,QAAA,IAAI,GAAA,GAAM,EAAA;AACV,QAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAC3C,QAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC3B,UAAA,GAAA,IAAO,MAAM,QAAA,CAAS,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,QAC5C;AACA,QAAA,GAAA,GAAM,IAAI,KAAA,CAAM,EAAE,EAAE,OAAA,EAAQ,CAAE,KAAK,EAAE,CAAA;AACrC,QAAA,IAAI,KAAK,UAAA,EAAY;AACjB,UAAA,GAAA,GAAM,GAAA,CAAI,MAAM,IAAA,CAAK,UAAU,EAAE,QAAA,CAAS,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,QAClE;AACA,QAAA,OAAO,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,MAC1B;AAAA,MACA,WAAW,KAAA,EAAO;AACd,QAAA,IAAI,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAC3B,QAAA,MAAM,SAAA,GAAa,IAAA,CAAK,MAAA,GAAS,CAAA,IAAM,CAAA;AACvC,QAAA,IAAA,CAAK,UAAA,GAAA,CAAc,SAAA,IAAa,CAAA,IAAK,IAAA,CAAK,MAAA;AAC1C,QAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,SAAS,CAAA;AACvC,QAAA,IAAA,GAAO,IAAA,CACF,QAAA,CAAS,SAAA,IAAa,CAAA,EAAG,GAAG,CAAA,CAC5B,KAAA,CAAM,EAAE,CAAA,CACR,OAAA,EAAQ,CACR,IAAA,CAAK,EAAE,CAAA;AACZ,QAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,QAAA,OAAO,QAAQ,SAAA,EAAW;AACtB,UAAA,MAAA,CAAO,KAAK,CAAA,GAAI,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,KAAA,IAAS,CAAA,EAAA,CAAI,KAAA,IAAS,CAAA,IAAK,CAAC,CAAA,EAAG,CAAC,CAAA;AACpE,UAAA,KAAA,EAAA;AAAA,QACJ;AACA,QAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,MAAA;AAAA,MACxB;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC9DA,IAEaC,YAAAA;AAFb,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAJ,cAAAA,EAAAA;AACA,IAAA,aAAA,EAAA;AACO,IAAMI,eAAN,MAAkB;AAAA,MACrB,IAAI,UAAA,GAAa;AACb,QAAA,OAAO,KAAK,MAAA,CAAO,UAAA;AAAA,MACvB;AAAA,MACA,IAAI,UAAA,GAAa;AACb,QAAA,OAAO,CAAA;AAAA,MACX;AAAA,MACA,YAAY,KAAA,EAAO;AACf,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,UAAA,IAAA,CAAK,MAAA,GAAS,IAAI,WAAA,CAAY,KAAK,CAAA;AAAA,QACvC,CAAA,MACK;AACD,UAAA,IAAI,qBAAA,CAAsB,cAAA,CAAe,KAAK,CAAA,EAAG;AAC7C,YAAA,IAAA,CAAK,MAAA,GAAS,qBAAA,CAAsB,aAAA,CAAc,KAAK,CAAA;AAAA,UAC3D,CAAA,MAAA,IACS,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC3B,YAAA,IAAA,CAAK,MAAA,GAAS,IAAI,UAAA,CAAW,KAAK,CAAA;AAAA,UACtC,CAAA,MACK;AACD,YAAA,IAAA,CAAK,MAAA,GAAS,IAAI,WAAA,CAAY,CAAC,CAAA;AAAA,UACnC;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,QAAQ,GAAA,EAAK;AACT,QAAA,IAAI,EAAE,eAAsB,WAAA,CAAA,EAAc;AACtC,UAAA,MAAM,IAAI,UAAU,qDAAqD,CAAA;AAAA,QAC7E;AACA,QAAA,IAAA,CAAK,MAAA,GAAS,IAAI,UAAA,CAAW,QAAA;AAC7B,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,MACA,KAAA,GAAQ;AACJ,QAAA,OAAO,IAAW,WAAA,CAAY,EAAE,QAAA,EAAU,IAAA,CAAK,QAAQ,CAAA;AAAA,MAC3D;AAAA,MACA,SAAS,IAAA,EAAM;AACX,QAAA,OAAO,IAAW,WAAA,CAAY,EAAE,IAAA,EAAM,CAAA;AAAA,MAC1C;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtCA,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,eAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACqDA,SAAS,sBAAsB,QAAA,EAAU;AACrC,EAAA,OAAO;AAAA,IACH,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,UAAA,CAAW,KAAA;AAAA,IACrC,OAAO,CAAC,KAAA,KAAU,IAAI,QAAA,CAAS,EAAE,OAAO;AAAA,GAC5C;AACJ;AA2BO,SAAS,iBAAiB,IAAA,EAAM;AACnC,EAAA,QAAQ,IAAA;AAAM,IACV,KAAK,YAAA,CAAa,GAAA;AACd,MAAA,OAAO,eAAA;AAAA,IACX,KAAK,YAAA,CAAa,SAAA;AACd,MAAA,OAAO,qBAAA;AAAA,IACX,KAAK,YAAA,CAAa,SAAA;AACd,MAAA,OAAO,qBAAA;AAAA,IACX,KAAK,YAAA,CAAa,OAAA;AACd,MAAA,OAAO,mBAAA;AAAA,IACX,KAAK,YAAA,CAAa,eAAA;AACd,MAAA,OAAO,2BAAA;AAAA,IACX,KAAK,YAAA,CAAa,UAAA;AACd,MAAA,OAAO,sBAAA;AAAA,IACX,KAAK,YAAA,CAAa,aAAA;AACd,MAAA,OAAO,yBAAA;AAAA,IACX,KAAK,YAAA,CAAa,eAAA;AACd,MAAA,OAAO,2BAAA;AAAA,IACX,KAAK,YAAA,CAAa,aAAA;AACd,MAAA,OAAO,yBAAA;AAAA,IACX,KAAK,YAAA,CAAa,SAAA;AACd,MAAA,OAAO,qBAAA;AAAA,IACX,KAAK,YAAA,CAAa,OAAA;AACd,MAAA,OAAO,mBAAA;AAAA,IACX,KAAK,YAAA,CAAa,IAAA;AACd,MAAA,OAAO,gBAAA;AAAA,IACX,KAAK,YAAA,CAAa,aAAA;AACd,MAAA,OAAO,yBAAA;AAAA,IACX,KAAK,YAAA,CAAa,gBAAA;AACd,MAAA,OAAO,4BAAA;AAAA,IACX,KAAK,YAAA,CAAa,WAAA;AACd,MAAA,OAAO,uBAAA;AAAA,IACX,KAAK,YAAA,CAAa,eAAA;AACd,MAAA,OAAO,2BAAA;AAAA,IACX,KAAK,YAAA,CAAa,aAAA;AACd,MAAA,OAAO,yBAAA;AAAA,IACX,KAAK,YAAA,CAAa,OAAA;AACd,MAAA,OAAO,mBAAA;AAAA,IACX,KAAK,YAAA,CAAa,eAAA;AACd,MAAA,OAAO,2BAAA;AAAA,IACX,KAAK,YAAA,CAAa,UAAA;AACd,MAAA,OAAO,sBAAA;AAAA,IACX,KAAK,YAAA,CAAa,cAAA;AACd,MAAA,OAAO,0BAAA;AAAA,IACX,KAAK,YAAA,CAAa,aAAA;AACd,MAAA,OAAO,yBAAA;AAAA,IACX;AACI,MAAA,OAAO,IAAA;AAAA;AAEnB;AAvIA,IAGa,eAAA,EAaA,qBAMA,sBAAA,EAIA,8BAAA,EAQA,uBAIA,4BAAA,EAIA,mBAAA,EAIA,yBAcA,sBAAA,EACA,qBAAA,EACA,6BACA,yBAAA,EACA,2BAAA,EACA,2BACA,0BAAA,EACA,qBAAA,EACA,2BACA,yBAAA,EACA,yBAAA,EACA,2BAAA,EACA,mBAAA,EAIA,2BAAA,EAIA,gBAAA;AAhFb,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAJ,cAAAA,EAAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACO,IAAM,eAAA,GAAkB;AAAA,MAC3B,SAAS,CAAC,KAAA,KAAU,KAAA,YAAwB,IAAA,GAAO,OAAO,KAAA,CAAM,qBAAA;AAAA,MAChE,KAAA,EAAO,CAAC,KAAA,KAAU;AACd,QAAA,IAAI,UAAU,IAAA,EAAM;AAChB,UAAA,OAAO,IAAW,IAAA,EAAK;AAAA,QAC3B;AACA,QAAA,MAAM,MAAA,GAAgB,QAAQ,KAAK,CAAA;AACnC,QAAA,IAAI,MAAA,CAAO,OAAO,KAAA,EAAO;AACrB,UAAA,MAAM,IAAI,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAAA,QACvC;AACA,QAAA,OAAO,MAAA,CAAO,MAAA;AAAA,MAClB;AAAA,KACJ;AACO,IAAM,mBAAA,GAAsB;AAAA,MAC/B,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,UAAA,CAAW,YAAA,CAAa,UAAA,IAAc,CAAA,GAC1D,KAAA,CAAM,UAAA,CAAW,QAAA,EAAS,GAC1B,MAAM,UAAA,CAAW,QAAA;AAAA,MACvB,KAAA,EAAO,CAAC,KAAA,KAAU,IAAW,QAAQ,EAAE,KAAA,EAAO,CAAC,KAAA,EAAO;AAAA,KAC1D;AACO,IAAM,sBAAA,GAAyB;AAAA,MAClC,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,UAAA,CAAW,QAAA;AAAA,MACrC,OAAO,CAAC,KAAA,KAAU,IAAW,UAAA,CAAW,EAAE,OAAO;AAAA,KACrD;AACO,IAAM,8BAAA,GAAiC;AAAA,MAC1C,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,UAAA,CAAW,YAAA;AAAA,MACrC,KAAA,EAAO,CAAC,KAAA,KAAU,IAAW,QAAQ,EAAE,QAAA,EAAU,OAAO;AAAA,KAC5D;AAKO,IAAM,qBAAA,GAAwB;AAAA,MACjC,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,UAAA,CAAW,YAAA;AAAA,MACrC,KAAA,EAAO,CAAC,KAAA,KAAU,IAAW,UAAU,EAAE,QAAA,EAAU,OAAO;AAAA,KAC9D;AACO,IAAM,4BAAA,GAA+B;AAAA,MACxC,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,MAC9C,OAAO,CAAC,KAAA,KAAU,IAAW,gBAAA,CAAiB,EAAE,OAAO;AAAA,KAC3D;AACO,IAAM,mBAAA,GAAsB;AAAA,MAC/B,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,UAAA,CAAW,KAAA;AAAA,MACrC,OAAO,CAAC,KAAA,KAAU,IAAWH,QAAAA,CAAQ,EAAE,OAAO;AAAA,KAClD;AACO,IAAM,uBAAA,GAA0B;AAAA,MACnC,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,UAAA,CAAW,YAAA;AAAA,MACrC,KAAA,EAAO,CAAC,KAAA,KAAU,IAAW,YAAY,EAAE,QAAA,EAAU,OAAO;AAAA,KAChE;AAWO,IAAM,sBAAA,GAAyB,sBAA6B,UAAU,CAAA;AACtE,IAAM,qBAAA,GAAwB,sBAA6B,SAAS,CAAA;AACpE,IAAM,2BAAA,GAA8B,sBAA6B,eAAe,CAAA;AAChF,IAAM,yBAAA,GAA4B,sBAA6B,aAAa,CAAA;AAC5E,IAAM,2BAAA,GAA8B,sBAA6B,eAAe,CAAA;AAChF,IAAM,yBAAA,GAA4B,sBAA6B,aAAa,CAAA;AAC5E,IAAM,0BAAA,GAA6B,sBAA6B,cAAc,CAAA;AAC9E,IAAM,qBAAA,GAAwB,sBAA6B,SAAS,CAAA;AACpE,IAAM,yBAAA,GAA4B,sBAA6B,aAAa,CAAA;AAC5E,IAAM,yBAAA,GAA4B,sBAA6B,aAAa,CAAA;AAC5E,IAAM,yBAAA,GAA4B,sBAA6B,aAAa,CAAA;AAC5E,IAAM,2BAAA,GAA8B,sBAA6B,eAAe,CAAA;AAChF,IAAM,mBAAA,GAAsB;AAAA,MAC/B,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,EAAO;AAAA,MACjC,KAAA,EAAO,CAAC,KAAA,KAAU,IAAW,QAAQ,EAAE,SAAA,EAAW,OAAO;AAAA,KAC7D;AACO,IAAM,2BAAA,GAA8B;AAAA,MACvC,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,EAAO;AAAA,MACjC,KAAA,EAAO,CAAC,KAAA,KAAU,IAAW,gBAAgB,EAAE,SAAA,EAAW,OAAO;AAAA,KACrE;AACO,IAAM,gBAAA,GAAmB;AAAA,MAC5B,SAAS,MAAM,IAAA;AAAA,MACf,OAAO,MAAM;AACT,QAAA,OAAO,IAAW,IAAA,EAAK;AAAA,MAC3B;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACrFO,SAAS,cAAc,MAAA,EAAQ;AAClC,EAAA,IAAI,OAAO,MAAA,KAAW,UAAA,IAAc,MAAA,CAAO,SAAA,EAAW;AAClD,IAAA,IAAI,MAAA,CAAO,SAAA,CAAU,KAAA,IAAS,MAAA,CAAO,UAAU,OAAA,EAAS;AACpD,MAAA,OAAO,IAAA;AAAA,IACX,CAAA,MACK;AACD,MAAA,OAAO,aAAA,CAAc,OAAO,SAAS,CAAA;AAAA,IACzC;AAAA,EACJ,CAAA,MACK;AACD,IAAA,OAAO,CAAC,EAAE,MAAA,IAAU,OAAO,WAAW,QAAA,IAAY,OAAA,IAAW,UAAU,SAAA,IAAa,MAAA,CAAA;AAAA,EACxF;AACJ;AACO,SAAS,cAAc,MAAA,EAAQ;AAClC,EAAA,IAAIE,GAAAA;AACJ,EAAA,IAAI,MAAA,EAAQ;AACR,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,cAAA,CAAe,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAA,CAAMA,GAAAA,GAAK,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,SAAS,MAAA,GAAS,KAAA,CAAM,SAAA,MAAe,IAAA,IAAQA,GAAAA,KAAO,MAAA,GAAS,MAAA,GAASA,GAAAA,CAAG,iBAAiB,KAAA,EAAO;AACtI,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,cAAc,KAAK,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,KAAA;AACX;AACO,SAAS,YAAA,CAAa,QAAQ,MAAA,EAAQ;AACzC,EAAA,IAAI,EAAE,UAAU,MAAA,CAAA,EAAS;AACrB,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,MAAA,CAAO,UAAA,KAAe,MAAA,CAAO,UAAA,EAAY;AACzC,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,EAAA,GAAK,IAAI,UAAA,CAAW,MAAM,CAAA;AAChC,EAAA,MAAM,EAAA,GAAK,IAAI,UAAA,CAAW,MAAM,CAAA;AAChC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,YAAY,CAAA,EAAA,EAAK;AACxC,IAAA,IAAI,EAAA,CAAG,CAAC,CAAA,KAAM,EAAA,CAAG,CAAC,CAAA,EAAG;AACjB,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;AAvCA,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAA,IAGa,gBAAA;AAHb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAC,cAAAA,EAAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACO,IAAM,mBAAN,MAAuB;AAAA,MAC1B,WAAA,GAAc;AACV,QAAA,IAAA,CAAK,KAAA,uBAAY,OAAA,EAAQ;AAAA,MAC7B;AAAA,MACA,IAAI,MAAA,EAAQ;AACR,QAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAAA,MAChC;AAAA,MACA,GAAA,CAAI,MAAA,EAAQ,WAAA,GAAc,KAAA,EAAO;AAC7B,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AACpC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACT,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,OAAO,SAAA,CAAU,WAAA,CAAY,IAAI,CAAA,QAAA,CAAU,CAAA;AAAA,QACzF;AACA,QAAA,IAAI,WAAA,IAAe,CAAC,MAAA,CAAO,MAAA,EAAQ;AAC/B,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,OAAO,SAAA,CAAU,WAAA,CAAY,IAAI,CAAA,8DAAA,CAAgE,CAAA;AAAA,QAChI;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,MAAM,MAAA,EAAQ;AACV,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAChB,UAAA,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,IAAI,CAAA;AAAA,QAC5C;AAAA,MACJ;AAAA,MACA,cAAc,MAAA,EAAQ;AAClB,QAAA,MAAM,SAAS,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,KAAA,EAAO,EAAC,EAAE;AACxD,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA;AACjD,QAAA,IAAI,YAAA,EAAc;AACd,UAAA,MAAA,CAAO,MAAA,CAAO,QAAQ,YAAY,CAAA;AAClC,UAAA,MAAA,CAAO,KAAA,GAAQ,OAAO,MAAA,CAAO,IAAI,MAAA,CAAO,KAAA,EAAO,aAAa,KAAK,CAAA;AAAA,QACrE;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,MACA,MAAA,CAAO,QAAQ,QAAA,EAAU;AACrB,QAAA,MAAM,MAAA,GAAS,KAAK,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,IAAK,IAAA,CAAK,cAAc,MAAM,CAAA;AAClE,QAAA,MAAM,YAAY,EAAC;AACnB,QAAA,KAAA,MAAW,GAAA,IAAO,OAAO,KAAA,EAAO;AAC5B,UAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAC7B,UAAA,MAAM,IAAA,GAAO,WAAW,GAAA,GAAM,EAAA;AAC9B,UAAA,IAAI,QAAA;AACJ,UAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU;AAC/B,YAAA,MAAM,YAAA,GAAe,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC3C,YAAA,MAAM,QAAA,GAAW,iBAAO,YAAY,CAAA;AACpC,YAAA,IAAI,CAAC,QAAA,EAAU;AACX,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,YACrE;AACA,YAAA,QAAA,GAAW,IAAI,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA;AAAA,UACpC,CAAA,MAAA,IACS,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,YAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,EAAK;AAC/B,YAAA,QAAA,GAAW,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,UACrC,CAAA,MAAA,IACS,KAAK,QAAA,EAAU;AACpB,YAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AACrC,YAAA,IAAI,UAAA,CAAW,IAAA,KAAS,YAAA,CAAa,MAAA,EAAQ;AACzC,cAAA,QAAA,GAAW,IAAW,GAAA,CAAI,EAAE,IAAA,EAAM,CAAA;AAAA,YACtC,CAAA,MACK;AACD,cAAA,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AACvC,cAAA,QAAA,CAAS,IAAA,GAAO,IAAA;AAAA,YACpB;AAAA,UACJ,CAAA,MACK;AACD,YAAA,QAAA,GAAW,IAAW,GAAA,CAAI,EAAE,IAAA,EAAM,CAAA;AAAA,UACtC;AACA,UAAA,MAAM,WAAW,CAAC,CAAC,IAAA,CAAK,QAAA,IAAY,KAAK,YAAA,KAAiB,MAAA;AAC1D,UAAA,IAAI,KAAK,QAAA,EAAU;AACf,YAAA,QAAA,CAAS,IAAA,GAAO,EAAA;AAChB,YAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,KAAa,KAAA,GAAeF,IAAAA,GAAa,QAAA;AAChE,YAAA,QAAA,GAAW,IAAI,SAAA,CAAU;AAAA,cACrB,IAAA,EAAM,EAAA;AAAA,cACN,KAAA,EAAO,CAAC,IAAW,QAAA,CAAS,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,CAAC;AAAA,aACzD,CAAA;AAAA,UACL;AACA,UAAA,IAAI,IAAA,CAAK,OAAA,KAAY,IAAA,IAAQ,IAAA,CAAK,YAAY,MAAA,EAAW;AACrD,YAAA,IAAI,KAAK,QAAA,EAAU;AACf,cAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,YAAY,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,EAAG;AAC3D,gBAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,GAAkB,WAAA,GAAqB,SAAA;AAC9D,gBAAA,SAAA,CAAU,IAAA,CAAK,IAAI,SAAA,CAAU,EAAE,MAAM,QAAA,EAAU,OAAA,EAAS,EAAE,QAAA,EAAU,GAAG,SAAA,EAAW,IAAA,CAAK,OAAA,EAAQ,EAAG,CAAC,CAAA;AAAA,cACvG,CAAA,MACK;AACD,gBAAA,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AACpB,gBAAA,MAAM,UAAA,GAAa,CAAC,CAAC,IAAA,CAAK,QAAA;AAC1B,gBAAA,IAAI,KAAA,GAAQ,CAAC,UAAA,GAAa,IAAA,CAAK,IAAI,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA,CAAE,MAAA,GAAS,QAAA;AAC7D,gBAAA,KAAA,GACI,YAAA,IAAgB,KAAA,GACV,KAAA,CAAM,UAAA,CAAW,QAEf,KAAA,CAAM,KAAA;AAClB,gBAAA,SAAA,CAAU,IAAA,CAAK,IAAW,WAAA,CAAY;AAAA,kBAClC,IAAA,EAAM,CAAC,UAAA,GAAa,IAAA,GAAO,EAAA;AAAA,kBAC3B,QAAA;AAAA,kBACA,SAAS,EAAE,QAAA,EAAU,CAAA,EAAG,SAAA,EAAW,KAAK,OAAA,EAAQ;AAAA,kBAChD;AAAA,iBACH,CAAC,CAAA;AAAA,cACN;AAAA,YACJ,CAAA,MACK;AACD,cAAA,SAAA,CAAU,IAAA,CAAK,IAAW,WAAA,CAAY;AAAA,gBAClC,QAAA;AAAA,gBACA,SAAS,EAAE,QAAA,EAAU,CAAA,EAAG,SAAA,EAAW,KAAK,OAAA,EAAQ;AAAA,gBAChD,KAAA,EAAO,CAAC,QAAQ;AAAA,eACnB,CAAC,CAAA;AAAA,YACN;AAAA,UACJ,CAAA,MACK;AACD,YAAA,QAAA,CAAS,QAAA,GAAW,QAAA;AACpB,YAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,UAC3B;AAAA,QACJ;AACA,QAAA,QAAQ,OAAO,IAAA;AAAM,UACjB,KAAK,YAAA,CAAa,QAAA;AACd,YAAA,OAAO,IAAW,QAAA,CAAS,EAAE,OAAO,SAAA,EAAW,IAAA,EAAM,IAAI,CAAA;AAAA,UAC7D,KAAK,YAAA,CAAa,GAAA;AACd,YAAA,OAAO,IAAWA,IAAAA,CAAI,EAAE,OAAO,SAAA,EAAW,IAAA,EAAM,IAAI,CAAA;AAAA,UACxD,KAAK,YAAA,CAAa,MAAA;AACd,YAAA,OAAO,IAAW,MAAA,CAAO,EAAE,OAAO,SAAA,EAAW,IAAA,EAAM,IAAI,CAAA;AAAA,UAC3D;AACI,YAAA,MAAM,IAAI,MAAM,CAAA,4BAAA,CAA8B,CAAA;AAAA;AACtD,MACJ;AAAA,MACA,GAAA,CAAI,QAAQ,MAAA,EAAQ;AAChB,QAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAA,EAAQ,MAAM,CAAA;AAC7B,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,MACA,iBAAiB,MAAA,EAAQ;AACrB,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,cAAA,CAAe,MAAM,CAAA;AAC3C,QAAA,IAAI,MAAA,EAAQ;AACR,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AACpC,UAAA,OAAO,MAAA,IAAU,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA;AAAA,QACjD;AACA,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACvIA,IACa,aAAA;AADb,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,WAAA,EAAA;AACO,IAAM,aAAA,GAAgB,IAAI,gBAAA,EAAiB;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACDlD,IAGa,OAAA,EAcA,OAAA;AAjBb,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,eAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACO,IAAM,OAAA,GAAU,CAAC,OAAA,KAAY,CAAC,MAAA,KAAW;AAC5C,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA,EAAG;AAC5B,QAAA,MAAA,GAAS,aAAA,CAAc,cAAc,MAAM,CAAA;AAC3C,QAAA,aAAA,CAAc,GAAA,CAAI,QAAQ,MAAM,CAAA;AAAA,MACpC,CAAA,MACK;AACD,QAAA,MAAA,GAAS,aAAA,CAAc,IAAI,MAAM,CAAA;AAAA,MACrC;AACA,MAAA,MAAA,CAAO,MAAA,CAAO,QAAQ,OAAO,CAAA;AAAA,IACjC,CAAA;AAIO,IAAM,OAAA,GAAU,CAAC,OAAA,KAAY,CAAC,QAAQ,WAAA,KAAgB;AACzD,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACxC,QAAA,MAAA,GAAS,aAAA,CAAc,aAAA,CAAc,MAAA,CAAO,WAAW,CAAA;AACvD,QAAA,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,WAAA,EAAa,MAAM,CAAA;AAAA,MAChD,CAAA,MACK;AACD,QAAA,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,WAAW,CAAA;AAAA,MACjD;AACA,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,IAAI,OAAO,CAAA;AAC7C,MAAA,IAAI,OAAO,WAAA,CAAY,IAAA,KAAS,QAAA,IAAY,CAAC,YAAY,SAAA,EAAW;AAChE,QAAA,MAAMO,iBAAAA,GAA8B,gBAAA,CAAiB,OAAA,CAAQ,IAAI,CAAA;AACjE,QAAA,IAAI,CAACA,iBAAAA,EAAkB;AACnB,UAAA,MAAM,IAAI,MAAM,CAAA,2CAAA,EAA8C,WAAW,QAAQ,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,CAAE,CAAA;AAAA,QAC9G;AACA,QAAA,WAAA,CAAY,SAAA,GAAYA,iBAAAA;AAAA,MAC5B;AACA,MAAA,WAAA,CAAY,MAAM,OAAA,CAAQ,GAAA;AAC1B,MAAA,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,GAAI,WAAA;AAAA,IAChC,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACpCA,IAAa,wBAAA;AAAb,IAAA,sBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,6EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAO,IAAM,wBAAA,GAAN,cAAuC,KAAA,CAAM;AAAA,MAChD,WAAA,GAAc;AACV,QAAA,KAAA,CAAM,GAAG,SAAS,CAAA;AAClB,QAAA,IAAA,CAAK,UAAU,EAAC;AAAA,MACpB;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACLA,IAAAC,YAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,iEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,sBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAA,IAMa,SAAA;AANb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAN,cAAAA,EAAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,eAAA,EAAA;AACA,IAAAM,YAAAA,EAAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACO,IAAM,YAAN,MAAgB;AAAA,MACnB,OAAO,KAAA,CAAM,IAAA,EAAM,MAAA,EAAQ;AACvB,QAAA,MAAM,UAAA,GAAoB,QAAQ,IAAI,CAAA;AACtC,QAAA,IAAI,UAAA,CAAW,OAAO,KAAA,EAAO;AACzB,UAAA,MAAM,IAAI,KAAA,CAAM,UAAA,CAAW,MAAA,CAAO,KAAK,CAAA;AAAA,QAC3C;AACA,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,QAAQ,MAAM,CAAA;AAClD,QAAA,OAAO,GAAA;AAAA,MACX;AAAA,MACA,OAAO,OAAA,CAAQ,UAAA,EAAY,MAAA,EAAQ;AAC/B,QAAA,IAAI;AACA,UAAA,IAAI,aAAA,CAAc,MAAM,CAAA,EAAG;AACvB,YAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,EAAO;AACzB,YAAA,OAAO,KAAA,CAAM,QAAQ,UAAU,CAAA;AAAA,UACnC;AACA,UAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AACvC,UAAA,aAAA,CAAc,MAAM,MAAM,CAAA;AAC1B,UAAA,IAAI,eAAe,MAAA,CAAO,MAAA;AAC1B,UAAA,MAAM,eAAe,IAAA,CAAK,iBAAA,CAAkB,UAAA,EAAY,MAAA,EAAQ,QAAQ,YAAY,CAAA;AACpF,UAAA,IAAI,iBAAiB,IAAA,IAAQ,YAAA,KAAiB,KAAA,CAAA,GAAS,KAAA,CAAA,GAAS,aAAa,MAAA,EAAQ;AACjF,YAAA,OAAO,YAAA,CAAa,MAAA;AAAA,UACxB;AACA,UAAA,IAAI,iBAAiB,IAAA,IAAQ,YAAA,KAAiB,KAAA,CAAA,GAAS,KAAA,CAAA,GAAS,aAAa,YAAA,EAAc;AACvF,YAAA,YAAA,GAAe,YAAA,CAAa,YAAA;AAAA,UAChC;AACA,UAAA,MAAM,iBAAiB,IAAA,CAAK,mBAAA,CAAoB,UAAA,EAAY,MAAA,EAAQ,QAAQ,YAAY,CAAA;AACxF,UAAA,MAAM,GAAA,GAAM,IAAI,MAAA,EAAO;AACvB,UAAA,IAAI,aAAA,CAAc,MAAM,CAAA,EAAG;AACvB,YAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,UAAA,EAAY,MAAA,EAAQ,MAAM,CAAA;AAAA,UAC3D;AACA,UAAA,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,cAAA,EAAgB,GAAG,CAAA;AACnD,UAAA,OAAO,GAAA;AAAA,QACX,SACO,KAAA,EAAO;AACV,UAAA,IAAI,iBAAiB,wBAAA,EAA0B;AAC3C,YAAA,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAAA,UAClC;AACA,UAAA,MAAM,KAAA;AAAA,QACV;AAAA,MACJ;AAAA,MACA,OAAO,iBAAA,CAAkB,UAAA,EAAY,MAAA,EAAQ,QAAQ,YAAA,EAAc;AAC/D,QAAA,IAAI,UAAA,CAAW,WAAA,KAAuB,WAAA,IAClC,MAAA,CAAO,IAAA,KAAS,aAAa,MAAA,IAC7B,UAAA,CAAW,OAAA,CAAQ,QAAA,KAAa,CAAA,EAAG;AACnC,UAAA,KAAA,MAAW,GAAA,IAAO,OAAO,KAAA,EAAO;AAC5B,YAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AACnC,YAAA,IAAI,WAAW,OAAA,KAAY,UAAA,CAAW,OAAA,CAAQ,SAAA,IAAa,WAAW,QAAA,EAAU;AAC5E,cAAA,IAAI,OAAO,WAAW,IAAA,KAAS,UAAA,IAC3B,cAAc,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AACpC,gBAAA,MAAM,WAAA,GAAc,aAAA,CAAc,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA;AACrD,gBAAA,IAAI,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,YAAA,CAAa,QAAA,EAAU;AAC3D,kBAAA,MAAM,MAAA,GAAS,IAAW,QAAA,EAAS;AACnC,kBAAA,IAAI,OAAA,IAAW,UAAA,CAAW,UAAA,IACtB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,UAAA,CAAW,KAAK,CAAA,IACzC,OAAA,IAAW,MAAA,CAAO,UAAA,EAAY;AAC9B,oBAAA,MAAA,CAAO,UAAA,CAAW,KAAA,GAAQ,UAAA,CAAW,UAAA,CAAW,KAAA;AAChD,oBAAA,MAAM,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,WAAW,IAAI,CAAA;AACvD,oBAAA,MAAM,GAAA,GAAM,IAAI,MAAA,EAAO;AACvB,oBAAA,GAAA,CAAI,GAAG,CAAA,GAAI,UAAA;AACX,oBAAA,OAAO,EAAE,QAAQ,GAAA,EAAI;AAAA,kBACzB;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,WACS,UAAA,CAAW,WAAA,KAAuB,eACvC,MAAA,CAAO,IAAA,KAAS,aAAa,MAAA,EAAQ;AACrC,UAAA,MAAM,eAAA,GAAkB,IAAW,WAAA,CAAY;AAAA,YAC3C,OAAA,EAAS;AAAA,cACL,QAAA,EAAU,CAAA;AAAA,cACV,SAAA,EAAW,WAAW,OAAA,CAAQ;AAAA,aAClC;AAAA,YACA,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW;AAAA,WACnC,CAAA;AACD,UAAA,KAAA,MAAW,GAAA,IAAO,OAAO,KAAA,EAAO;AAC5B,YAAA,OAAO,WAAW,GAAG,CAAA;AAAA,UACzB;AACA,UAAA,OAAO,EAAE,cAAc,eAAA,EAAgB;AAAA,QAC3C;AACA,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,MACA,OAAO,mBAAA,CAAoB,UAAA,EAAY,MAAA,EAAQ,QAAQ,YAAA,EAAc;AACjE,QAAA,IAAI,MAAA,CAAO,IAAA,KAAS,YAAA,CAAa,QAAA,EAAU;AACvC,UAAA,MAAM,kBAAA,GAA4B,aAAA,CAAc,EAAC,EAAG,YAAY,YAAY,CAAA;AAC5E,UAAA,IAAI,CAAC,mBAAmB,QAAA,EAAU;AAC9B,YAAA,MAAM,IAAI,wBAAA,CAAyB,CAAA,uBAAA,EAA0B,MAAA,CAAO,IAAI,CAAA,aAAA,EAAgB,kBAAA,CAAmB,MAAA,CAAO,KAAA,GAAQ,IAAI,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,UAC1K;AACA,UAAA,OAAO,kBAAA;AAAA,QACX,CAAA,MACK;AACD,UAAA,MAAM,kBAAA,GAA4B,aAAA,CAAc,EAAC,EAAG,YAAY,YAAY,CAAA;AAC5E,UAAA,IAAI,CAAC,mBAAmB,QAAA,EAAU;AAC9B,YAAA,MAAM,IAAI,wBAAA,CAAyB,CAAA,uBAAA,EAA0B,MAAA,CAAO,IAAI,CAAA,aAAA,EAAgB,kBAAA,CAAmB,MAAA,CAAO,KAAA,GAAQ,IAAI,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,UAC1K;AACA,UAAA,OAAO,kBAAA;AAAA,QACX;AAAA,MACJ;AAAA,MACA,OAAO,oBAAA,CAAqB,YAAA,EAAc,SAAA,EAAW,UAAA,EAAY;AAC7D,QAAA,IAAI,iBAAA,GAAoB,YAAA,CAAa,KAAA,CAAM,SAAS,CAAA;AACpD,QAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,IAAK,iBAAA,CAAkB,CAAC,CAAA,CAAE,WAAA,CAAY,SAAS,UAAA,EAAY;AACxF,UAAA,MAAM,GAAA,GAAM,kBAAkB,CAAC,CAAA;AAC/B,UAAA,IAAI,GAAA,CAAI,UAAA,IAAc,GAAA,CAAI,UAAA,CAAW,KAAA,IAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AAC/E,YAAA,iBAAA,GAAoB,IAAI,UAAA,CAAW,KAAA;AAAA,UACvC;AAAA,QACJ;AACA,QAAA,IAAI,OAAO,UAAA,CAAW,IAAA,KAAS,QAAA,EAAU;AACrC,UAAA,MAAM,SAAA,GAAuB,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAA;AAC7D,UAAA,IAAI,CAAC,SAAA;AACD,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,UAAA,CAAW,IAAI,CAAA,CAAE,CAAA;AACpE,UAAA,OAAO,iBAAA,CACF,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,IAAM,GAAG,UAAU,CAAA,CAClC,GAAA,CAAI,CAAC,EAAA,KAAO;AACb,YAAA,IAAI;AACA,cAAA,OAAO,SAAA,CAAU,QAAQ,EAAE,CAAA;AAAA,YAC/B,CAAA,CAAA,MACM;AACF,cAAA,OAAO,MAAA;AAAA,YACX;AAAA,UACJ,CAAC,CAAA,CACI,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,MAAS,CAAA;AAAA,QACtC,CAAA,MACK;AACD,UAAA,OAAO,iBAAA,CACF,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,IAAM,GAAG,UAAU,CAAA,CAClC,GAAA,CAAI,CAAC,EAAA,KAAO;AACb,YAAA,IAAI;AACA,cAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,EAAA,EAAI,UAAA,CAAW,IAAI,CAAA;AAAA,YAC3C,CAAA,CAAA,MACM;AACF,cAAA,OAAO,MAAA;AAAA,YACX;AAAA,UACJ,CAAC,CAAA,CACI,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,MAAS,CAAA;AAAA,QACtC;AAAA,MACJ;AAAA,MACA,OAAO,qBAAA,CAAsB,WAAA,EAAa,UAAA,EAAY;AAClD,QAAA,MAAM,SAAA,GAAuB,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAA;AAC7D,QAAA,IAAI,CAAC,SAAA;AACD,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,UAAA,CAAW,IAAI,CAAA,CAAE,CAAA;AACpE,QAAA,OAAO,SAAA,CAAU,QAAQ,WAAW,CAAA;AAAA,MACxC;AAAA,MACA,OAAO,sBAAsB,UAAA,EAAY;AACrC,QAAA,OAAQ,WAAW,QAAA,IACf,OAAO,UAAA,CAAW,IAAA,KAAS,cAC3B,aAAA,CAAc,GAAA,CAAI,UAAA,CAAW,IAAI,KACjC,aAAA,CAAc,GAAA,CAAI,WAAW,IAAI,CAAA,CAAE,SAAS,YAAA,CAAa,MAAA;AAAA,MACjE;AAAA,MACA,OAAO,0BAAA,CAA2B,WAAA,EAAa,UAAA,EAAY;AACvD,QAAA,IAAI;AACA,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,WAAW,IAAI,CAAA;AACvD,UAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAM;AAAA,QACpC,SACO,GAAA,EAAK;AACR,UAAA,IAAI,eAAe,wBAAA,IACf,8BAAA,CAA+B,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG;AAClD,YAAA,OAAO,EAAE,WAAW,KAAA,EAAM;AAAA,UAC9B;AACA,UAAA,MAAM,GAAA;AAAA,QACV;AAAA,MACJ;AAAA,MACA,OAAO,gBAAA,CAAiB,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAQ;AAChD,QAAA,IAAI,EAAE,WAAW,UAAA,CAAW,UAAA,IAAc,MAAM,OAAA,CAAQ,UAAA,CAAW,UAAA,CAAW,KAAK,CAAA,CAAA,EAAI;AACnF,UAAA,MAAM,IAAI,MAAM,CAAA,8EAAA,CAAgF,CAAA;AAAA,QACpG;AACA,QAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,QAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAC9B,UAAA,MAAM,SAAA,GAAuB,iBAAiB,QAAQ,CAAA;AACtD,UAAA,IAAI,CAAC,SAAA,EAAW;AACZ,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+CAAA,EAAkD,MAAA,CAAO,IAAI,CAAA,YAAA,CAAc,CAAA;AAAA,UAC/F;AACA,UAAA,OAAO,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,UAAA,CAAW,KAAA,EAAO,CAAC,OAAA,KAAY,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,QAC3F,CAAA,MACK;AACD,UAAA,OAAO,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,UAAA,CAAW,KAAA,EAAO,CAAC,OAAA,KAAY,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,QAChG;AAAA,MACJ;AAAA,MACA,OAAO,kBAAA,CAAmB,MAAA,EAAQ,kBAAA,EAAoB,GAAA,EAAK;AACvD,QAAA,KAAA,MAAW,GAAA,IAAO,OAAO,KAAA,EAAO;AAC5B,UAAA,MAAM,eAAA,GAAkB,kBAAA,CAAmB,MAAA,CAAO,GAAG,CAAA;AACrD,UAAA,IAAI,CAAC,eAAA,EAAiB;AAClB,YAAA;AAAA,UACJ;AACA,UAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AACnC,UAAA,MAAM,iBAAiB,UAAA,CAAW,IAAA;AAClC,UAAA,IAAI,WAAA;AACJ,UAAA,IAAI,OAAO,cAAA,KAAmB,QAAA,IAAY,aAAA,CAAc,cAAc,CAAA,EAAG;AACrE,YAAA,WAAA,GAAc,IAAA,CAAK,0BAAA,CAA2B,eAAA,EAAiB,UAAA,EAAY,cAAc,CAAA;AAAA,UAC7F,CAAA,MACK;AACD,YAAA,WAAA,GAAc,IAAA,CAAK,wBAAA,CAAyB,eAAA,EAAiB,UAAA,EAAY,cAAc,CAAA;AAAA,UAC3F;AACA,UAAA,IAAI,eACA,OAAO,WAAA,KAAgB,YACvB,OAAA,IAAW,WAAA,IACX,SAAS,WAAA,EAAa;AACtB,YAAA,GAAA,CAAI,GAAG,IAAI,WAAA,CAAY,KAAA;AACvB,YAAA,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAK,CAAA,GAAI,WAAA,CAAY,GAAA;AAAA,UACnC,CAAA,MACK;AACD,YAAA,GAAA,CAAI,GAAG,CAAA,GAAI,WAAA;AAAA,UACf;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,OAAO,0BAAA,CAA2B,eAAA,EAAiB,UAAA,EAAY,cAAA,EAAgB;AAC3E,QAAA,IAAIP,GAAAA;AACJ,QAAA,MAAM,SAAA,GAAA,CAAaA,GAAAA,GAAK,UAAA,CAAW,SAAA,MAAe,IAAA,IAAQA,GAAAA,KAAO,MAAA,GAASA,GAAAA,GAAM,aAAA,CAAc,cAAc,CAAA,GACtG,IAAI,gBAAe,GACnB,IAAA;AACN,QAAA,IAAI,CAAC,SAAA,EAAW;AACZ,UAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,QACxC;AACA,QAAA,IAAI,WAAW,QAAA,EAAU;AACrB,UAAA,OAAO,IAAA,CAAK,4BAAA,CAA6B,eAAA,EAAiB,UAAA,EAAY,SAAS,CAAA;AAAA,QACnF,CAAA,MACK;AACD,UAAA,OAAO,IAAA,CAAK,0BAAA,CAA2B,eAAA,EAAiB,UAAA,EAAY,gBAAgB,SAAS,CAAA;AAAA,QACjG;AAAA,MACJ;AAAA,MACA,OAAO,4BAAA,CAA6B,eAAA,EAAiB,UAAA,EAAY,SAAA,EAAW;AACxE,QAAA,IAAI,WAAW,QAAA,EAAU;AACrB,UAAA,MAAM,SAAA,GAAY,UAAA,CAAW,QAAA,KAAa,UAAA,GAAoB,QAAA,GAAkBD,IAAAA;AAChF,UAAA,MAAM,OAAA,GAAU,IAAI,SAAA,EAAU;AAC9B,UAAA,OAAA,CAAQ,aAAa,eAAA,CAAgB,UAAA;AACrC,UAAA,MAAM,UAAA,GAAoB,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA;AACtD,UAAA,IAAI,UAAA,CAAW,WAAW,EAAA,EAAI;AAC1B,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,UAAA,CAAW,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,UAC7E;AACA,UAAA,IAAI,EAAE,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,UAAA,IAC/B,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,CAAA,EAAI;AACpD,YAAA,MAAM,IAAI,MAAM,gFAAgF,CAAA;AAAA,UACpG;AACA,UAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,MAAA,CAAO,UAAA,CAAW,KAAA;AAC3C,UAAA,OAAO,KAAA,CAAM,KAAK,KAAA,EAAO,CAAC,YAAY,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,QACpE,CAAA,MACK;AACD,UAAA,OAAO,KAAA,CAAM,KAAK,eAAA,EAAiB,CAAC,YAAY,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,QAC9E;AAAA,MACJ;AAAA,MACA,OAAO,0BAAA,CAA2B,eAAA,EAAiB,UAAA,EAAY,gBAAgB,SAAA,EAAW;AACtF,QAAA,IAAI,KAAA,GAAQ,eAAA;AACZ,QAAA,IAAI,WAAW,QAAA,EAAU;AACrB,UAAA,IAAI,OAAA;AACJ,UAAA,IAAI,aAAA,CAAc,cAAc,CAAA,EAAG;AAC/B,YAAA,OAAA,GAAU,IAAI,cAAA,EAAe,CAAE,QAAA,CAAS,EAAE,CAAA;AAAA,UAC9C,CAAA,MACK;AACD,YAAA,MAAM,YAAA,GAAe,aAAa,cAAc,CAAA;AAChD,YAAA,MAAM,QAAA,GAAW,iBAAO,YAAY,CAAA;AACpC,YAAA,IAAI,CAAC,QAAA,EAAU;AACX,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,YAAY,CAAA,0BAAA,CAA4B,CAAA;AAAA,YAC3E;AACA,YAAA,OAAA,GAAU,IAAI,QAAA,EAAS;AAAA,UAC3B;AACA,UAAA,OAAA,CAAQ,aAAa,KAAA,CAAM,UAAA;AAC3B,UAAA,KAAA,GAAe,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,CAAE,MAAA;AAAA,QACjD;AACA,QAAA,OAAO,SAAA,CAAU,QAAQ,KAAK,CAAA;AAAA,MAClC;AAAA,MACA,OAAO,wBAAA,CAAyB,eAAA,EAAiB,UAAA,EAAY,cAAA,EAAgB;AACzE,QAAA,IAAI,WAAW,QAAA,EAAU;AACrB,UAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAA,EAAG;AACjC,YAAA,MAAM,IAAI,MAAM,uFAAuF,CAAA;AAAA,UAC3G;AACA,UAAA,OAAO,KAAA,CAAM,KAAK,eAAA,EAAiB,CAAC,YAAY,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,cAAc,CAAC,CAAA;AAAA,QACzF,CAAA,MACK;AACD,UAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,qBAAA,CAAsB,eAAA,EAAiB,YAAY,cAAc,CAAA;AAC7F,UAAA,IAAI,IAAA,CAAK,qBAAA,CAAsB,UAAU,CAAA,EAAG;AACxC,YAAA,IAAI;AACA,cAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,cAAc,CAAA;AAAA,YACtD,SACO,GAAA,EAAK;AACR,cAAA,IAAI,eAAe,wBAAA,IACf,8BAAA,CAA+B,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG;AAClD,gBAAA,OAAO,MAAA;AAAA,cACX;AACA,cAAA,MAAM,GAAA;AAAA,YACV;AAAA,UACJ,CAAA,MACK;AACD,YAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,cAAc,CAAA;AAC/D,YAAA,IAAI,WAAW,GAAA,EAAK;AAChB,cAAA,OAAO;AAAA,gBACH,KAAA,EAAO,WAAA;AAAA,gBACP,KAAK,eAAA,CAAgB;AAAA,eACzB;AAAA,YACJ;AACA,YAAA,OAAO,WAAA;AAAA,UACX;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,OAAO,qBAAA,CAAsB,eAAA,EAAiB,UAAA,EAAY,cAAA,EAAgB;AACtE,QAAA,IAAI,UAAA,CAAW,QAAA,IAAY,OAAO,UAAA,CAAW,YAAY,QAAA,EAAU;AAC/D,UAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,cAAc,CAAA;AAC/C,UAAA,IAAI,MAAA,CAAO,IAAA,KAAS,YAAA,CAAa,QAAA,EAAU;AACvC,YAAA,MAAM,MAAA,GAAS,IAAW,QAAA,EAAS;AACnC,YAAA,IAAI,OAAA,IAAW,eAAA,CAAgB,UAAA,IAC3B,KAAA,CAAM,OAAA,CAAQ,eAAA,CAAgB,UAAA,CAAW,KAAK,CAAA,IAC9C,OAAA,IAAW,MAAA,CAAO,UAAA,EAAY;AAC9B,cAAA,MAAA,CAAO,UAAA,CAAW,KAAA,GAAQ,eAAA,CAAgB,UAAA,CAAW,KAAA;AACrD,cAAA,OAAO,MAAA;AAAA,YACX;AAAA,UACJ,CAAA,MAAA,IACS,MAAA,CAAO,IAAA,KAAS,YAAA,CAAa,GAAA,EAAK;AACvC,YAAA,MAAM,MAAA,GAAS,IAAWA,IAAAA,EAAI;AAC9B,YAAA,IAAI,OAAA,IAAW,eAAA,CAAgB,UAAA,IAC3B,KAAA,CAAM,OAAA,CAAQ,eAAA,CAAgB,UAAA,CAAW,KAAK,CAAA,IAC9C,OAAA,IAAW,MAAA,CAAO,UAAA,EAAY;AAC9B,cAAA,MAAA,CAAO,UAAA,CAAW,KAAA,GAAQ,eAAA,CAAgB,UAAA,CAAW,KAAA;AACrD,cAAA,OAAO,MAAA;AAAA,YACX;AAAA,UACJ;AAAA,QACJ;AACA,QAAA,OAAO,eAAA;AAAA,MACX;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClUA,IAKa,aAAA;AALb,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAE,cAAAA,EAAAA;AACA,IAAA,eAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACO,IAAM,aAAA,GAAN,MAAM,cAAA,CAAc;AAAA,MACvB,OAAO,UAAU,GAAA,EAAK;AAClB,QAAA,IAAI,eAAsB,SAAA,EAAW;AACjC,UAAA,OAAO,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA,QAC1B;AACA,QAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAM,KAAK,CAAA;AAAA,MACtC;AAAA,MACA,OAAO,MAAM,GAAA,EAAK;AACd,QAAA,IAAI,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,aAAA,CAAc,GAAG,CAAA,EAAG;AACtD,UAAA,OAAO,IAAI,KAAA,EAAM;AAAA,QACrB;AACA,QAAA,IAAI,EAAE,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,CAAA,EAAW;AACnC,UAAA,MAAM,IAAI,UAAU,uCAAuC,CAAA;AAAA,QAC/D;AACA,QAAA,MAAM,SAAS,GAAA,CAAI,WAAA;AACnB,QAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AACvC,QAAA,aAAA,CAAc,MAAM,MAAM,CAAA;AAC1B,QAAA,IAAI,YAAY,EAAC;AACjB,QAAA,IAAI,OAAO,QAAA,EAAU;AACjB,UAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACrB,YAAA,MAAM,IAAI,UAAU,sCAAsC,CAAA;AAAA,UAC9D;AACA,UAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AACrC,YAAA,MAAM,SAAA,GAAuB,gBAAA,CAAiB,MAAA,CAAO,QAAQ,CAAA;AAC7D,YAAA,IAAI,CAAC,SAAA,EAAW;AACZ,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+CAAA,EAAkD,MAAA,CAAO,IAAI,CAAA,YAAA,CAAc,CAAA;AAAA,YAC/F;AACA,YAAA,SAAA,GAAY,IAAI,GAAA,CAAI,CAAC,MAAM,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,UACjD,CAAA,MACK;AACD,YAAA,SAAA,GAAY,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,KAAK,SAAA,CAAU,EAAE,IAAA,EAAM,MAAA,CAAO,QAAA,EAAS,EAAG,IAAA,EAAM,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,UACzF;AAAA,QACJ,CAAA,MACK;AACD,UAAA,KAAA,MAAW,GAAA,IAAO,OAAO,KAAA,EAAO;AAC5B,YAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AACnC,YAAA,MAAM,OAAA,GAAU,IAAI,GAAG,CAAA;AACvB,YAAA,IAAI,OAAA,KAAY,UACZ,UAAA,CAAW,YAAA,KAAiB,WAC3B,OAAO,UAAA,CAAW,YAAA,KAAiB,QAAA,IAChC,OAAO,OAAA,KAAY,YACnB,YAAA,CAAa,IAAA,CAAK,UAAU,UAAA,CAAW,YAAY,GAAG,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,EAAI;AACrF,cAAA;AAAA,YACJ;AACA,YAAA,MAAM,WAAW,cAAA,CAAc,SAAA,CAAU,UAAA,EAAY,GAAA,EAAK,QAAQ,OAAO,CAAA;AACzE,YAAA,IAAI,OAAO,UAAA,CAAW,OAAA,KAAY,QAAA,EAAU;AACxC,cAAA,IAAI,WAAW,QAAA,EAAU;AACrB,gBAAA,IAAI,CAAC,UAAA,CAAW,QAAA,KACX,OAAO,UAAA,CAAW,SAAS,QAAA,IAAY,aAAA,CAAc,UAAA,CAAW,IAAI,CAAA,CAAA,EAAI;AACzE,kBAAA,MAAM,QAAQ,EAAC;AACf,kBAAA,KAAA,CAAM,WACF,QAAA,YAA2B,IAAA,GACrB,SAAS,qBAAA,GACT,QAAA,CAAS,WAAW,KAAA,EAAM;AACpC,kBAAA,SAAA,CAAU,IAAA,CAAK,IAAW,SAAA,CAAU;AAAA,oBAChC,UAAU,UAAA,CAAW,QAAA;AAAA,oBACrB,OAAA,EAAS;AAAA,sBACL,QAAA,EAAU,CAAA;AAAA,sBACV,WAAW,UAAA,CAAW;AAAA,qBAC1B;AAAA,oBACA,GAAG;AAAA,mBACN,CAAC,CAAA;AAAA,gBACN,CAAA,MACK;AACD,kBAAA,SAAA,CAAU,IAAA,CAAK,IAAW,WAAA,CAAY;AAAA,oBAClC,UAAU,UAAA,CAAW,QAAA;AAAA,oBACrB,OAAA,EAAS;AAAA,sBACL,QAAA,EAAU,CAAA;AAAA,sBACV,WAAW,UAAA,CAAW;AAAA,qBAC1B;AAAA,oBACA,KAAA,EAAO,SAAS,UAAA,CAAW;AAAA,mBAC9B,CAAC,CAAA;AAAA,gBACN;AAAA,cACJ,CAAA,MACK;AACD,gBAAA,SAAA,CAAU,IAAA,CAAK,IAAW,WAAA,CAAY;AAAA,kBAClC,UAAU,UAAA,CAAW,QAAA;AAAA,kBACrB,OAAA,EAAS;AAAA,oBACL,QAAA,EAAU,CAAA;AAAA,oBACV,WAAW,UAAA,CAAW;AAAA,mBAC1B;AAAA,kBACA,KAAA,EAAO,CAAC,QAAQ;AAAA,iBACnB,CAAC,CAAA;AAAA,cACN;AAAA,YACJ,CAAA,MAAA,IACS,WAAW,QAAA,EAAU;AAC1B,cAAA,SAAA,GAAY,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,YACzC,CAAA,MACK;AACD,cAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,YAC3B;AAAA,UACJ;AAAA,QACJ;AACA,QAAA,IAAI,SAAA;AACJ,QAAA,QAAQ,OAAO,IAAA;AAAM,UACjB,KAAK,YAAA,CAAa,QAAA;AACd,YAAA,SAAA,GAAY,IAAW,QAAA,CAAS,EAAE,KAAA,EAAO,WAAW,CAAA;AACpD,YAAA;AAAA,UACJ,KAAK,YAAA,CAAa,GAAA;AACd,YAAA,SAAA,GAAY,IAAWF,IAAAA,CAAI,EAAE,KAAA,EAAO,WAAW,CAAA;AAC/C,YAAA;AAAA,UACJ,KAAK,YAAA,CAAa,MAAA;AACd,YAAA,IAAI,CAAC,SAAA,CAAU,CAAC,CAAA,EAAG;AACf,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,MAAA,CAAO,IAAI,CAAA,yCAAA,CAA2C,CAAA;AAAA,YACrF;AACA,YAAA,SAAA,GAAY,UAAU,CAAC,CAAA;AACvB,YAAA;AAAA;AAER,QAAA,OAAO,SAAA;AAAA,MACX;AAAA,MACA,OAAO,SAAA,CAAU,UAAA,EAAY,GAAA,EAAK,QAAQ,OAAA,EAAS;AAC/C,QAAA,IAAI,QAAA;AACJ,QAAA,IAAI,OAAO,UAAA,CAAW,IAAA,KAAS,QAAA,EAAU;AACrC,UAAA,MAAM,YAAY,UAAA,CAAW,SAAA;AAC7B,UAAA,IAAI,CAAC,SAAA,EAAW;AACZ,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,GAAG,CAAA,kCAAA,EAAqC,YAAA,CAAa,UAAA,CAAW,IAAI,CAAC,CAAA,YAAA,EAAe,MAAA,CAAO,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,UACnI;AACA,UAAA,IAAI,WAAW,QAAA,EAAU;AACrB,YAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AACzB,cAAA,MAAM,IAAI,UAAU,8CAA8C,CAAA;AAAA,YACtE;AACA,YAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,OAAA,EAAS,CAAC,OAAA,KAAY,SAAA,CAAU,KAAA,CAAM,OAAO,CAAC,CAAA;AACvE,YAAA,MAAM,SAAA,GAAY,UAAA,CAAW,QAAA,KAAa,UAAA,GAAoB,QAAA,GAAkBA,IAAAA;AAChF,YAAA,QAAA,GAAW,IAAI,SAAA,CAAU;AAAA,cACrB,KAAA,EAAO;AAAA,aACV,CAAA;AAAA,UACL,CAAA,MACK;AACD,YAAA,QAAA,GAAW,SAAA,CAAU,MAAM,OAAO,CAAA;AAAA,UACtC;AAAA,QACJ,CAAA,MACK;AACD,UAAA,IAAI,WAAW,QAAA,EAAU;AACrB,YAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AACzB,cAAA,MAAM,IAAI,UAAU,8CAA8C,CAAA;AAAA,YACtE;AACA,YAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,OAAA,EAAS,CAAC,OAAA,KAAY,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA;AAClE,YAAA,MAAM,SAAA,GAAY,UAAA,CAAW,QAAA,KAAa,UAAA,GAAoB,QAAA,GAAkBA,IAAAA;AAChF,YAAA,QAAA,GAAW,IAAI,SAAA,CAAU;AAAA,cACrB,KAAA,EAAO;AAAA,aACV,CAAA;AAAA,UACL,CAAA,MACK;AACD,YAAA,QAAA,GAAW,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,UACjC;AAAA,QACJ;AACA,QAAA,OAAO,QAAA;AAAA,MACX;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACzJA,IAAa,QAAA;AAAb,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,MAChC,WAAA,CAAY,KAAA,GAAQ,EAAC,EAAG;AACpB,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,UAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QACf,CAAA,MACK;AACD,UAAA,KAAA,EAAM;AACN,UAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,YAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,UAClB;AAAA,QACJ;AAAA,MACJ;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACZA,IAIa,UAAA;AAJb,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAE,cAAAA,EAAAA;AACA,IAAA,aAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,eAAA,EAAA;AACO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAW;AAAA,MACpB,OAAO,UAAU,GAAA,EAAK;AAClB,QAAA,OAAO,aAAA,CAAc,UAAU,GAAG,CAAA;AAAA,MACtC;AAAA,MACA,OAAO,KAAA,CAAM,IAAA,EAAM,MAAA,EAAQ;AACvB,QAAA,OAAO,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,MAAM,CAAA;AAAA,MACvC;AAAA,MACA,OAAO,SAAS,IAAA,EAAM;AAClB,QAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,cAAA,CAAe,IAAI,CAAA,GAC/C,qBAAA,CAAsB,aAAA,CAAc,IAAI,CAAA,GACxC,WAAA,CAAW,SAAA,CAAU,IAAI,CAAA;AAC/B,QAAA,MAAM,GAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,QAAA,IAAI,GAAA,CAAI,WAAW,EAAA,EAAI;AACnB,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,QACnE;AACA,QAAA,OAAO,GAAA,CAAI,OAAO,QAAA,EAAS;AAAA,MAC/B;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACrBA,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,eAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,eAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,eAAA,EAAA;AACA,IAAAM,YAAAA,EAAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,YAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC8CO,SAAS,UAAA,CAAW,UAAA,EAAY,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM;AACxD,EAAA,IAAI,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,CAAA,GAAI,IAAI,CAAA,GAAI,MAAA,GAA+E,IAAA,EAAM,CAAA;AAC3H,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAO,OAAA,CAAQ,QAAA,KAAa,UAAA,EAAY,CAAA,GAAI,OAAA,CAAQ,QAAA,CAAS,UAAA,EAAY,MAAA,EAAQ,KAAK,IAAI,CAAA;AAAA,OACxH,KAAA,IAAS,CAAA,GAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK,IAAI,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA,EAAG,CAAA,GAAA,CAAK,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,GAAA,EAAK,CAAC,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,GAAG,CAAA,KAAM,CAAA;AAChJ,EAAA,OAAO,CAAA,GAAI,KAAK,CAAA,IAAK,MAAA,CAAO,eAAe,MAAA,EAAQ,GAAA,EAAK,CAAC,CAAA,EAAG,CAAA;AAC9D;AA3DA,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,kCAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAA,IACa,WAAA;AADb,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,aAAA,EAAA;AACO,IAAM,cAAN,MAAkB;AAAA,MACrB,OAAO,OAAO,EAAA,EAAI;AACd,QAAA,OAAO,yBAAA,CAA0B,KAAK,EAAE,CAAA;AAAA,MAC5C;AAAA,MACA,OAAO,UAAU,EAAA,EAAI;AACjB,QAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAC1B,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACpB,UAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,QAC1C;AACA,QAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACvB,UAAA,MAAM,GAAA,GAAM,QAAA,CAAS,IAAA,EAAM,EAAE,CAAA;AAC7B,UAAA,IAAI,MAAM,GAAG,CAAA,IAAK,GAAA,GAAM,CAAA,IAAK,MAAM,GAAA,EAAK;AACpC,YAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,UAC/C;AACA,UAAA,OAAO,GAAA;AAAA,QACX,CAAC,CAAA;AAAA,MACL;AAAA,MACA,OAAO,UAAU,EAAA,EAAI;AACjB,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,EAAE,CAAA;AACrC,QAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA;AAClC,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACpB,UAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,QAC1C;AACA,QAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,KAAA,EAAO,IAAA,KAAS;AACjC,UAAA,MAAM,GAAA,GAAM,QAAA,CAAS,IAAA,EAAM,EAAE,CAAA;AAC7B,UAAA,IAAI,MAAM,GAAG,CAAA,IAAK,GAAA,GAAM,CAAA,IAAK,MAAM,KAAA,EAAQ;AACvC,YAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,UAC/C;AACA,UAAA,KAAA,CAAM,IAAA,CAAM,GAAA,IAAO,CAAA,GAAK,GAAI,CAAA;AAC5B,UAAA,KAAA,CAAM,IAAA,CAAK,MAAM,GAAI,CAAA;AACrB,UAAA,OAAO,KAAA;AAAA,QACX,CAAA,EAAG,EAAE,CAAA;AAAA,MACT;AAAA,MACA,OAAO,WAAW,EAAA,EAAI;AAClB,QAAA,IAAI,CAAC,EAAA,CAAG,QAAA,CAAS,IAAI,CAAA,EAAG;AACpB,UAAA,OAAO,EAAA;AAAA,QACX;AACA,QAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,IAAI,CAAA;AAC3B,QAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAClB,UAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,QAC1C;AACA,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,GAAI,EAAC;AAC/C,QAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,GAAI,EAAC;AAChD,QAAA,MAAM,OAAA,GAAU,CAAA,IAAK,IAAA,CAAK,MAAA,GAAS,KAAA,CAAM,MAAA,CAAA;AACzC,QAAA,IAAI,UAAU,CAAA,EAAG;AACb,UAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,QAC1C;AACA,QAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,MAAM,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,EAAG,GAAG,KAAK,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MACpE;AAAA,MACA,OAAO,WAAW,KAAA,EAAO;AACrB,QAAA,MAAM,QAAQ,EAAC;AACf,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,KAAK,CAAA,EAAG;AAC5B,UAAA,KAAA,CAAM,IAAA,CAAA,CAAO,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA,GAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,EAAG,QAAA,CAAS,EAAE,CAAC,CAAA;AAAA,QAC5D;AACA,QAAA,OAAO,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,MAC5C;AAAA,MACA,OAAO,aAAa,EAAA,EAAI;AACpB,QAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAC1B,QAAA,IAAI,gBAAA,GAAmB,EAAA;AACvB,QAAA,IAAI,iBAAA,GAAoB,CAAA;AACxB,QAAA,IAAI,gBAAA,GAAmB,EAAA;AACvB,QAAA,IAAI,iBAAA,GAAoB,CAAA;AACxB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,UAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK;AAClB,YAAA,IAAI,qBAAqB,EAAA,EAAI;AACzB,cAAA,gBAAA,GAAmB,CAAA;AAAA,YACvB;AACA,YAAA,iBAAA,EAAA;AAAA,UACJ,CAAA,MACK;AACD,YAAA,IAAI,oBAAoB,iBAAA,EAAmB;AACvC,cAAA,gBAAA,GAAmB,gBAAA;AACnB,cAAA,iBAAA,GAAoB,iBAAA;AAAA,YACxB;AACA,YAAA,gBAAA,GAAmB,EAAA;AACnB,YAAA,iBAAA,GAAoB,CAAA;AAAA,UACxB;AAAA,QACJ;AACA,QAAA,IAAI,oBAAoB,iBAAA,EAAmB;AACvC,UAAA,gBAAA,GAAmB,gBAAA;AACnB,UAAA,iBAAA,GAAoB,iBAAA;AAAA,QACxB;AACA,QAAA,IAAI,oBAAoB,CAAA,EAAG;AACvB,UAAA,MAAM,SAAS,KAAA,CAAM,KAAA,CAAM,GAAG,gBAAgB,CAAA,CAAE,KAAK,GAAG,CAAA;AACxD,UAAA,MAAM,QAAQ,KAAA,CAAM,KAAA,CAAM,mBAAmB,iBAAiB,CAAA,CAAE,KAAK,GAAG,CAAA;AACxE,UAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO,EAAA;AAAA,MACX;AAAA,MACA,OAAO,UAAU,IAAA,EAAM;AACnB,QAAA,MAAM,CAAC,IAAA,EAAM,SAAS,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AACxC,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,EAAW,EAAE,CAAA;AACrC,QAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAG;AACnB,UAAA,IAAI,MAAA,GAAS,CAAA,IAAK,MAAA,GAAS,EAAA,EAAI;AAC3B,YAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,UAChD;AACA,UAAA,OAAO,CAAC,IAAA,CAAK,SAAA,CAAU,IAAI,GAAG,MAAM,CAAA;AAAA,QACxC,CAAA,MACK;AACD,UAAA,IAAI,MAAA,GAAS,CAAA,IAAK,MAAA,GAAS,GAAA,EAAK;AAC5B,YAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,UAChD;AACA,UAAA,OAAO,CAAC,IAAA,CAAK,SAAA,CAAU,IAAI,GAAG,MAAM,CAAA;AAAA,QACxC;AAAA,MACJ;AAAA,MACA,OAAO,SAAS,KAAA,EAAO;AACnB,QAAA,IAAI,MAAM,MAAA,KAAW,EAAA,IAAM,SAAS,KAAA,EAAO,EAAE,MAAM,CAAA,EAAG;AAClD,UAAA,OAAO,MAAA;AAAA,QACX;AACA,QAAA,IAAI,KAAA,CAAM,WAAW,EAAA,EAAI;AACrB,UAAA,OAAO,KAAA;AAAA,QACX;AACA,QAAA,MAAM,IAAA,GAAO,SAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG,EAAE,EACnC,QAAA,CAAS,CAAC,EACV,KAAA,CAAM,EAAE,EACR,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAC/B,QAAA,IAAI,EAAA,GAAK,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,CAAC,UAAU,CAAA,EAAG,QAAA,CAAS,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA,CAAG,CAAA;AAClF,QAAA,EAAA,GAAK,EAAA,CAAG,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnB,QAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,MACxB;AAAA,MACA,OAAO,SAAS,GAAA,EAAK;AACjB,QAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,GAAG,CAAA;AAChC,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACpB,UAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,QACrC;AACA,QAAA,IAAI,KAAA,CAAM,WAAW,EAAA,EAAI;AACrB,UAAA,OAAO,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,QAChC;AACA,QAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,WAAW,EAAA,EAAI;AAC3C,UAAA,MAAM,IAAA,GAAO,MAAM,MAAA,GAAS,CAAA;AAC5B,UAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AACrC,UAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,UAAA,MAAM,aAAa,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KAAS,SAAS,CAAC,CAAA;AACnD,UAAA,IAAI,UAAA,EAAY;AACZ,YAAA,OAAO,KAAA,CAAM,MAAA,KAAW,CAAA,GAAI,WAAA,GAAc,MAAA;AAAA,UAC9C;AACA,UAAA,MAAM,YAAY,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,CAAA,GAAA,CAAK,CAAA,CAAE,QAAA,CAAS,CAAC,EAAE,KAAA,CAAM,IAAI,KAAK,EAAC,EAAG,QAAQ,CAAC,CAAA;AAC5F,UAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACpB,YAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,CAAE,KAAK,GAAG,CAAA;AAC9C,YAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,UAClC,CAAA,MACK;AACD,YAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AACzC,YAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,UAClC;AAAA,QACJ;AACA,QAAA,OAAO,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,MAC3C;AAAA,MACA,OAAO,WAAW,IAAA,EAAM;AACpB,QAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACpB,UAAA,MAAM,CAAC,IAAA,EAAM,MAAM,CAAA,GAAI,IAAA,CAAK,UAAU,IAAI,CAAA;AAC1C,UAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAC5C,UAAA,IAAI,QAAA,GAAW,MAAA;AACf,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACvC,YAAA,IAAI,YAAY,CAAA,EAAG;AACf,cAAA,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA;AACf,cAAA,QAAA,IAAY,CAAA;AAAA,YAChB,CAAA,MAAA,IACS,WAAW,CAAA,EAAG;AACnB,cAAA,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA,IAAS,CAAA,GAAI,QAAA;AAC5B,cAAA,QAAA,GAAW,CAAA;AAAA,YACf;AAAA,UACJ;AACA,UAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,IAAA,CAAK,SAAS,CAAC,CAAA;AAC1C,UAAA,GAAA,CAAI,GAAA,CAAI,MAAM,CAAC,CAAA;AACf,UAAA,GAAA,CAAI,GAAA,CAAI,SAAA,EAAW,IAAA,CAAK,MAAM,CAAA;AAC9B,UAAA,OAAO,GAAA,CAAI,MAAA;AAAA,QACf;AACA,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAC5E,QAAA,OAAO,IAAI,UAAA,CAAW,KAAK,CAAA,CAAE,MAAA;AAAA,MACjC;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC5KA,IAAI,6BAA6B,aAAA,EAAe,MAAA,EAI5C,iBAgCA,cAAA,EAmBS,qBAAA,EAaT,2BAUA,WAAA,EAUA,IAAA;AAxFJ,IAAA,SAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uDAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,aAAA,EAAA;AACA,IAAI,eAAA,GAAkB,MAAMC,gBAAAA,CAAgB;AAAA,MACxC,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,MACA,QAAA,GAAW;AACP,QAAA,OAAQ,IAAA,CAAK,aACT,IAAA,CAAK,eAAA,IACL,KAAK,aAAA,IACL,IAAA,CAAK,eAAA,IACL,IAAA,CAAK,UAAA,IACL,EAAA;AAAA,MACR;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,eAAe;AAAA,KAChD,EAAG,eAAA,CAAgB,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AACrD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,iBAAiB;AAAA,KAClD,EAAG,eAAA,CAAgB,SAAA,EAAW,iBAAA,EAAmB,MAAM,CAAA;AACvD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,iBAAiB;AAAA,KAClD,EAAG,eAAA,CAAgB,SAAA,EAAW,iBAAA,EAAmB,MAAM,CAAA;AACvD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,YAAY;AAAA,KAC7C,EAAG,eAAA,CAAgB,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAClD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,eAAA,CAAgB,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AACjD,IAAA,eAAA,GAAkB,UAAA,CAAW;AAAA,MACzB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,eAAe,CAAA;AAElB,IAAI,cAAA,GAAiB,MAAMC,eAAAA,SAAuB,eAAA,CAAgB;AAAA,MAC9D,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,KAAA,CAAM,MAAM,CAAA;AACZ,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,MACA,QAAA,GAAW;AACP,QAAA,OAAO,IAAA,CAAK,SAAA,KAAc,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,MAAM,IAAA,CAAK,QAAQ,CAAA,GAAI,KAAA,CAAM,QAAA,EAAS,CAAA;AAAA,MAC5F;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,cAAA,CAAe,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAChD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,KAAK;AAAA,KACtC,EAAG,cAAA,CAAe,SAAA,EAAW,UAAA,EAAY,MAAM,CAAA;AAC/C,IAAA,cAAA,GAAiB,UAAA,CAAW;AAAA,MACxB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,cAAc,CAAA;AAEV,IAAM,wBAAN,MAA4B;AAAA,MAC/B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,cAAA,EAAe;AAChC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,qBAAA,CAAsB,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAClD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,cAAA,EAAgB;AAAA,KACpC,EAAG,qBAAA,CAAsB,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AACnD,IAAI,yBAAA,GAA4B,2BAAA,GAA8B,MAAMC,0BAAAA,SAAkC,QAAA,CAAS;AAAA,MAC3G,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,2BAAA,CAA4B,SAAS,CAAA;AAAA,MACrE;AAAA,KACJ;AACA,IAAA,yBAAA,GAA4B,8BAA8B,UAAA,CAAW;AAAA,MACjE,QAAQ,EAAE,IAAA,EAAM,aAAa,GAAA,EAAK,QAAA,EAAU,uBAAuB;AAAA,OACpE,yBAAyB,CAAA;AAE5B,IAAI,WAAA,GAAc,aAAA,GAAgB,MAAMC,YAAAA,SAAoB,QAAA,CAAS;AAAA,MACjE,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,aAAA,CAAc,SAAS,CAAA;AAAA,MACvD;AAAA,KACJ;AACA,IAAA,WAAA,GAAc,gBAAgB,UAAA,CAAW;AAAA,MACrC,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,2BAA2B;AAAA,OAC7E,WAAW,CAAA;AAEd,IAAI,IAAA,GAAO,MAAA,GAAS,MAAMC,KAAAA,SAAa,WAAA,CAAY;AAAA,MAC/C,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,MAAA,CAAO,SAAS,CAAA;AAAA,MAChD;AAAA,KACJ;AACA,IAAA,IAAA,GAAO,SAAS,UAAA,CAAW;AAAA,MACvB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,UAAU;AAAA,OACxC,IAAI,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AChGP,IAIa,cAAA,EAIA,WAaA,YAAA,EAYT,WAAA;AAjCJ,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,SAAA,EAAA;AACO,IAAM,cAAA,GAAiB;AAAA,MAC1B,OAAA,EAAS,CAAC,KAAA,KAAU,WAAA,CAAY,SAAS,uBAAA,CAAwB,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAC/E,KAAA,EAAO,CAAC,KAAA,KAAU,uBAAA,CAAwB,MAAM,WAAA,CAAY,UAAA,CAAW,KAAK,CAAC;AAAA,KACjF;AACO,IAAM,YAAN,MAAgB;AAAA,MACnB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,MAAA,GAAS,EAAA;AACd,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,WAAA,CAAY,CAAC,CAAA;AAC9B,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,SAAA,CAAU,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AACxC,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,aAAa,GAAA,EAAK,OAAA,EAAS,GAAG;AAAA,KAClD,EAAG,SAAA,CAAU,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAChC,IAAM,eAAN,MAAmB;AAAA,MACtB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,eAAA,EAAgB;AACrC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,MAAM,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KACjF,EAAG,YAAA,CAAa,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAA;AACjD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KACjE,EAAG,YAAA,CAAa,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC9C,IAAI,WAAA,GAAc,MAAMC,YAAAA,CAAY;AAAA,MAChC,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KAC3D,EAAG,WAAA,CAAY,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC7C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KACxE,EAAG,WAAA,CAAY,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAC9C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KACxE,EAAG,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC3C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,KAAK,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KAClE,EAAG,WAAA,CAAY,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAC/C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,CAAA,EAAG,QAAA,EAAU,OAAO;AAAA,KACvD,EAAG,WAAA,CAAY,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AACjD,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,GAAG;AAAA,KAC9C,EAAG,WAAA,CAAY,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAA;AAChD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KACxE,EAAG,WAAA,CAAY,SAAA,EAAW,2BAAA,EAA6B,MAAM,CAAA;AAC7D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,WAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,QAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW;AAAA,OACd;AAAA,KACL,EAAG,WAAA,CAAY,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC7C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KAC/E,EAAG,WAAA,CAAY,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAA;AAChD,IAAA,WAAA,GAAc,UAAA,CAAW;AAAA,MACrB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,WAAW,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACxEd,IAAA,uBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAWqB,EAAA;AAAA,CAAA,CAAA;;;ACXrB,IAAI,2BAAA,CAAA,CAMS,iBAAA,CAAA,CAaT;AAnBJ,IAAA,iCAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0FAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEO,IAAM,oBAAN,MAAwB;AAAA,MAC3B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,YAAA,GAAe,EAAA;AACpB,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,WAAA,EAAY;AACtC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,iBAAA,CAAkB,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAA;AACtD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa;AAAA,KACjC,EAAG,iBAAA,CAAkB,SAAA,EAAW,gBAAA,EAAkB,MAAM,CAAA;AACxD,IAAI,yBAAA,GAA4B,2BAAA,GAA8B,MAAMC,0BAAAA,SAAkC,QAAA,CAAS;AAAA,MAC3G,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,2BAAA,CAA4B,SAAS,CAAA;AAAA,MACrE;AAAA,KACJ;AACA,IAAA,yBAAA,GAA4B,8BAA8B,UAAA,CAAW;AAAA,MACjE,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,mBAAmB;AAAA,OACrE,yBAAyB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC3B5B,IAKa,aAAA,CAAA,CAEA;AAPb,IAAA,6BAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEO,IAAM,aAAA,GAAN,cAA4BT,YAAAA,CAAY;AAAA,KAC/C;AACO,IAAM,yBAAN,MAA6B;AAAA,MAChC,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAI,MAAA,EAAQ;AACR,UAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,QAC9B;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,GAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM;AAAA,KAC/E,EAAG,sBAAA,CAAuB,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AAC5D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY;AAAA,KACnG,EAAG,sBAAA,CAAuB,SAAA,EAAW,qBAAA,EAAuB,MAAM,CAAA;AAClE,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,QAAA,EAAU,IAAA;AAAA,QACV,QAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW;AAAA,OACd;AAAA,KACL,EAAG,sBAAA,CAAuB,SAAA,EAAW,2BAAA,EAA6B,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC5BxE,IAIa;AAJb,IAAA,sBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEO,IAAM,mBAAN,MAAuB;AAAA,MAC1B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,EAAA,GAAK,KAAA;AACV,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,YAAA,EAAc,OAAO;AAAA,KAC/D,EAAG,gBAAA,CAAiB,SAAA,EAAW,IAAA,EAAM,MAAM,CAAA;AAC3C,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,QAAA,EAAU,MAAM;AAAA,KAC1D,EAAG,gBAAA,CAAiB,SAAA,EAAW,mBAAA,EAAqB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACf1D,IAAI,cAAA,EAKA,YAAA;AALJ,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAI,YAAA,GAAe,cAAA,GAAiB,MAAMU,aAAAA,SAAqB,QAAA,CAAS;AAAA,MACpE,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,cAAA,CAAe,SAAS,CAAA;AAAA,MACxD;AAAA,KACJ;AACA,IAAA,YAAA,GAAe,iBAAiB,UAAA,CAAW;AAAA,MACvC,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,aAAa;AAAA,OAC/D,YAAY,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACbf,IAAI,qBAMA;AANJ,IAAA,uBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEA,IAAI,iBAAA,GAAoB,mBAAA,GAAsB,MAAMC,kBAAAA,SAA0B,YAAA,CAAa;AAAA,MACvF,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,mBAAA,CAAoB,SAAS,CAAA;AAAA,MAC7D;AAAA,KACJ;AACA,IAAA,iBAAA,GAAoB,sBAAsB,UAAA,CAAW;AAAA,MACjD,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,UAAU;AAAA,OACxC,iBAAiB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdpB,IAAI,qBAAA,CAAA,CAMA,WAAA,CAAA,CAwBS,iBAaA,UAAA,CAAA,CAWT,SAAA,CAAA,CAeS,qBAaA,iBAAA,CAAA,CAYT;AA9FJ,IAAA,yBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,kFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAGA,IAAI,WAAA,GAAc,MAAMC,YAAAA,CAAY;AAAA,MAChC,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,MACA,QAAA,GAAW;AACP,QAAA,OAAO,KAAK,SAAA,IAAa,IAAA,CAAK,iBAAiB,IAAA,CAAK,SAAA,IAAa,KAAK,UAAA,IAAc,EAAA;AAAA,MACxF;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,WAAA,CAAY,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC7C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,eAAe;AAAA,KAChD,EAAG,WAAA,CAAY,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AACjD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,WAAA,CAAY,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC7C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,YAAY;AAAA,KAC7C,EAAG,WAAA,CAAY,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAC9C,IAAA,WAAA,GAAc,UAAA,CAAW;AAAA,MACrB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,WAAW,CAAA;AAEP,IAAM,kBAAN,MAAsB;AAAA,MACzB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,YAAA,GAAe,IAAI,WAAA,EAAY;AACpC,QAAA,IAAA,CAAK,gBAAgB,EAAC;AACtB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa;AAAA,KACjC,EAAG,eAAA,CAAgB,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAA;AACpD,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,QAAA,EAAU,YAAY;AAAA,KAChE,EAAG,eAAA,CAAgB,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AAC9C,IAAM,aAAN,MAAiB;AAAA,MACpB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,MAAM;AAAA,KACrD,EAAG,UAAA,CAAW,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC5C,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,MAAM;AAAA,KACjD,EAAG,UAAA,CAAW,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAA;AAC/C,IAAI,SAAA,GAAY,MAAMC,UAAAA,CAAU;AAAA,MAC5B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,SAAA,CAAU,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AACxC,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,UAAA,EAAY;AAAA,KAChC,EAAG,SAAA,CAAU,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAC5C,IAAA,SAAA,GAAY,UAAA,CAAW;AAAA,MACnB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,SAAS,CAAA;AAEL,IAAM,sBAAN,MAA0B;AAAA,MAC7B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,iBAAA,GAAoB,EAAA;AACzB,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,WAAA,CAAY,CAAC,CAAA;AAClC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,mBAAA,CAAoB,SAAA,EAAW,mBAAA,EAAqB,MAAM,CAAA;AAC7D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,KAAK;AAAA,KACtC,EAAG,mBAAA,CAAoB,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC9C,IAAM,oBAAN,MAAwB;AAAA,MAC3B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,gBAAA,GAAmB,EAAA;AACxB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,iBAAA,CAAkB,SAAA,EAAW,kBAAA,EAAoB,MAAM,CAAA;AAC1D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB,UAAU,UAAA,EAAY,QAAA,EAAU,MAAM;AAAA,KAC/E,EAAG,iBAAA,CAAkB,SAAA,EAAW,kBAAA,EAAoB,MAAM,CAAA;AAC1D,IAAI,mBAAA,GAAsB,qBAAA,GAAwB,MAAMC,oBAAAA,SAA4B,QAAA,CAAS;AAAA,MACzF,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,qBAAA,CAAsB,SAAS,CAAA;AAAA,MAC/D;AAAA,KACJ;AACA,IAAA,mBAAA,GAAsB,wBAAwB,UAAA,CAAW;AAAA,MACrD,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,mBAAmB;AAAA,OACrE,mBAAmB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtGtB,IAII;AAJJ,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEA,IAAI,SAAA,GAAY,MAAMC,UAAAA,CAAU;AAAA,MAC5B,WAAA,CAAY,QAAQ,CAAA,EAAG;AACnB,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,MACjB;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,SAAS;AAAA,KAC1C,EAAG,SAAA,CAAU,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AACvC,IAAA,SAAA,GAAY,UAAA,CAAW;AAAA,MACnB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,SAAS,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdZ,IAKI;AALJ,IAAA,wBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,iFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AACA,IAAA,eAAA,EAAA;AAEA,IAAI,aAAA,GAAgB,MAAMC,cAAAA,SAAsB,SAAA,CAAU;AAAA,KAC1D;AACA,IAAA,aAAA,GAAgB,UAAA,CAAW;AAAA,MACvB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,aAAa,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACThB,IAAI,uBAAA,CAAA,CAOO,WAAA,CAAA,CAYE,MAAA,CAAA,CAqCT,uBAeS,iBAAA,CAAA,CAcT;AArFJ,IAAA,4BAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,SAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAGA,IAAA,CAAC,SAAUC,YAAAA,EAAa;AACpB,MAAAA,YAAAA,CAAYA,YAAAA,CAAY,QAAQ,CAAA,GAAI,CAAC,CAAA,GAAI,QAAA;AACzC,MAAAA,YAAAA,CAAYA,YAAAA,CAAY,eAAe,CAAA,GAAI,CAAC,CAAA,GAAI,eAAA;AAChD,MAAAA,YAAAA,CAAYA,YAAAA,CAAY,cAAc,CAAA,GAAI,CAAC,CAAA,GAAI,cAAA;AAC/C,MAAAA,YAAAA,CAAYA,YAAAA,CAAY,oBAAoB,CAAA,GAAI,CAAC,CAAA,GAAI,oBAAA;AACrD,MAAAA,YAAAA,CAAYA,YAAAA,CAAY,YAAY,CAAA,GAAI,EAAE,CAAA,GAAI,YAAA;AAC9C,MAAAA,YAAAA,CAAYA,YAAAA,CAAY,sBAAsB,CAAA,GAAI,EAAE,CAAA,GAAI,sBAAA;AACxD,MAAAA,YAAAA,CAAYA,YAAAA,CAAY,iBAAiB,CAAA,GAAI,EAAE,CAAA,GAAI,iBAAA;AACnD,MAAAA,YAAAA,CAAYA,YAAAA,CAAY,oBAAoB,CAAA,GAAI,GAAG,CAAA,GAAI,oBAAA;AACvD,MAAAA,YAAAA,CAAYA,YAAAA,CAAY,cAAc,CAAA,GAAI,GAAG,CAAA,GAAI,cAAA;AAAA,IACrD,CAAA,EAAG,WAAA,KAAgB,WAAA,GAAc,EAAC,CAAE,CAAA;AAC7B,IAAM,MAAA,GAAN,cAAqBlB,UAAAA,CAAU;AAAA,MAClC,MAAA,GAAS;AACL,QAAA,MAAM,MAAM,EAAC;AACb,QAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,QAAA,IAAI,KAAA,GAAQ,YAAY,YAAA,EAAc;AAClC,UAAA,GAAA,CAAI,KAAK,cAAc,CAAA;AAAA,QAC3B;AACA,QAAA,IAAI,KAAA,GAAQ,YAAY,kBAAA,EAAoB;AACxC,UAAA,GAAA,CAAI,KAAK,oBAAoB,CAAA;AAAA,QACjC;AACA,QAAA,IAAI,KAAA,GAAQ,YAAY,YAAA,EAAc;AAClC,UAAA,GAAA,CAAI,KAAK,cAAc,CAAA;AAAA,QAC3B;AACA,QAAA,IAAI,KAAA,GAAQ,YAAY,eAAA,EAAiB;AACrC,UAAA,GAAA,CAAI,KAAK,iBAAiB,CAAA;AAAA,QAC9B;AACA,QAAA,IAAI,KAAA,GAAQ,YAAY,oBAAA,EAAsB;AAC1C,UAAA,GAAA,CAAI,KAAK,sBAAsB,CAAA;AAAA,QACnC;AACA,QAAA,IAAI,KAAA,GAAQ,YAAY,aAAA,EAAe;AACnC,UAAA,GAAA,CAAI,KAAK,eAAe,CAAA;AAAA,QAC5B;AACA,QAAA,IAAI,KAAA,GAAQ,YAAY,kBAAA,EAAoB;AACxC,UAAA,GAAA,CAAI,KAAK,oBAAoB,CAAA;AAAA,QACjC;AACA,QAAA,IAAI,KAAA,GAAQ,YAAY,UAAA,EAAY;AAChC,UAAA,GAAA,CAAI,KAAK,YAAY,CAAA;AAAA,QACzB;AACA,QAAA,IAAI,KAAA,GAAQ,YAAY,MAAA,EAAQ;AAC5B,UAAA,GAAA,CAAI,KAAK,QAAQ,CAAA;AAAA,QACrB;AACA,QAAA,OAAO,GAAA;AAAA,MACX;AAAA,MACA,QAAA,GAAW;AACP,QAAA,OAAO,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACvC;AAAA,KACJ;AACA,IAAI,qBAAA,GAAwB,MAAMmB,sBAAAA,CAAsB;AAAA,MACpD,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,GAAG,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM;AAAA,KACnF,EAAG,qBAAA,CAAsB,SAAA,EAAW,UAAA,EAAY,MAAM,CAAA;AACtD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,yBAAA,EAA2B,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KAC3E,EAAG,qBAAA,CAAsB,SAAA,EAAW,yBAAA,EAA2B,MAAM,CAAA;AACrE,IAAA,qBAAA,GAAwB,UAAA,CAAW;AAAA,MAC/B,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,qBAAqB,CAAA;AAEjB,IAAM,oBAAN,MAAwB;AAAA,MAC3B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,qBAAA,EAAuB,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KACvE,EAAG,iBAAA,CAAkB,SAAA,EAAW,mBAAA,EAAqB,MAAM,CAAA;AAC3D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,GAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM;AAAA,KACxE,EAAG,iBAAA,CAAkB,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AACjD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM;AAAA,KACnG,EAAG,iBAAA,CAAkB,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AACnD,IAAI,qBAAA,GAAwB,uBAAA,GAA0B,MAAMC,sBAAAA,SAA8B,QAAA,CAAS;AAAA,MAC/F,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,uBAAA,CAAwB,SAAS,CAAA;AAAA,MACjE;AAAA,KACJ;AACA,IAAA,qBAAA,GAAwB,0BAA0B,UAAA,CAAW;AAAA,MACzD,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,mBAAmB;AAAA,OACrE,qBAAqB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7FxB,IAAI,eAMA;AANJ,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AACA,IAAA,4BAAA,EAAA;AAEA,IAAI,WAAA,GAAc,aAAA,GAAgB,MAAMC,YAAAA,SAAoB,qBAAA,CAAsB;AAAA,MAC9E,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,aAAA,CAAc,SAAS,CAAA;AAAA,MACvD;AAAA,KACJ;AACA,IAAA,WAAA,GAAc,gBAAgB,UAAA,CAAW;AAAA,MACrC,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,mBAAmB;AAAA,OACrE,WAAW,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdd,IAMa;AANb,IAAA,mCAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4FAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,4BAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAEO,IAAM,wBAAA,GAAN,MAAM,yBAAA,CAAyB;AAAA,MAClC,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,wBAAwB,yBAAA,CAAyB,IAAA;AACtD,QAAA,IAAA,CAAK,sBAAsB,yBAAA,CAAyB,IAAA;AACpD,QAAA,IAAA,CAAK,cAAc,yBAAA,CAAyB,IAAA;AAC5C,QAAA,IAAA,CAAK,6BAA6B,yBAAA,CAAyB,IAAA;AAC3D,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,wBAAA,CAAyB,IAAA,GAAO,KAAA;AAChC,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,qBAAA,EAAuB,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KACvE,EAAG,wBAAA,CAAyB,SAAA,EAAW,mBAAA,EAAqB,MAAM,CAAA;AAClE,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,cAAc,wBAAA,CAAyB,IAAA;AAAA,QACvC,QAAA,EAAU;AAAA,OACb;AAAA,KACL,EAAG,wBAAA,CAAyB,SAAA,EAAW,uBAAA,EAAyB,MAAM,CAAA;AACtE,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,cAAc,wBAAA,CAAyB,IAAA;AAAA,QACvC,QAAA,EAAU;AAAA,OACb;AAAA,KACL,EAAG,wBAAA,CAAyB,SAAA,EAAW,qBAAA,EAAuB,MAAM,CAAA;AACpE,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,GAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM;AAAA,KACxE,EAAG,wBAAA,CAAyB,SAAA,EAAW,iBAAA,EAAmB,MAAM,CAAA;AAChE,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,cAAc,wBAAA,CAAyB,IAAA;AAAA,QACvC,QAAA,EAAU;AAAA,OACb;AAAA,KACL,EAAG,wBAAA,CAAyB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAC5D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,cAAc,wBAAA,CAAyB,IAAA;AAAA,QACvC,QAAA,EAAU;AAAA,OACb;AAAA,KACL,EAAG,wBAAA,CAAyB,SAAA,EAAW,4BAAA,EAA8B,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACrD3E,IAIW,UAAA,CAAA,CAaP;AAjBJ,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAGA,IAAA,CAAC,SAAUC,WAAAA,EAAY;AACnB,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,aAAa,CAAA,GAAI,CAAC,CAAA,GAAI,aAAA;AAC5C,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,eAAe,CAAA,GAAI,CAAC,CAAA,GAAI,eAAA;AAC9C,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,cAAc,CAAA,GAAI,CAAC,CAAA,GAAI,cAAA;AAC7C,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,oBAAoB,CAAA,GAAI,CAAC,CAAA,GAAI,oBAAA;AACnD,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,YAAY,CAAA,GAAI,CAAC,CAAA,GAAI,YAAA;AAC3C,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,sBAAsB,CAAA,GAAI,CAAC,CAAA,GAAI,sBAAA;AACrD,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,iBAAiB,CAAA,GAAI,CAAC,CAAA,GAAI,iBAAA;AAChD,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,eAAe,CAAA,GAAI,CAAC,CAAA,GAAI,eAAA;AAC9C,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,oBAAoB,CAAA,GAAI,CAAC,CAAA,GAAI,oBAAA;AACnD,MAAAA,WAAAA,CAAWA,WAAAA,CAAW,cAAc,CAAA,GAAI,EAAE,CAAA,GAAI,cAAA;AAAA,IAClD,CAAA,EAAG,UAAA,KAAe,UAAA,GAAa,EAAC,CAAE,CAAA;AAClC,IAAI,SAAA,GAAY,MAAMC,UAAAA,CAAU;AAAA,MAC5B,WAAA,CAAY,MAAA,GAAS,UAAA,CAAW,WAAA,EAAa;AACzC,QAAA,IAAA,CAAK,SAAS,UAAA,CAAW,WAAA;AACzB,QAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,MAClB;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,MACjC;AAAA,MACA,QAAA,GAAW;AACP,QAAA,OAAO,KAAK,MAAA,EAAO;AAAA,MACvB;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,YAAY;AAAA,KAC7C,EAAG,SAAA,CAAU,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AACxC,IAAA,SAAA,GAAY,UAAA,CAAW;AAAA,MACnB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,SAAS,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClCZ,IAAI,kBAAA,CAAA,CAKA,gBAAA;AALJ,IAAA,uBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEA,IAAI,gBAAA,GAAmB,kBAAA,GAAqB,MAAMC,iBAAAA,SAAyB,QAAA,CAAS;AAAA,MAChF,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,kBAAA,CAAmB,SAAS,CAAA;AAAA,MAC5D;AAAA,KACJ;AACA,IAAA,gBAAA,GAAmB,qBAAqB,UAAA,CAAW;AAAA,MAC/C,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,UAAU,QAAA,EAAU,YAAA,CAAa,kBAAkB;AAAA,OACjF,gBAAgB,CAAA;AAQsB,EAAA;AAAA,CAAA,CAAA;;;ACrBzC,IAII;AAJJ,IAAA,uBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEA,IAAI,gBAAA,GAAmB,MAAMC,iBAAAA,CAAiB;AAAA,MAC1C,WAAA,CAAY,KAAA,GAAQ,IAAI,WAAA,CAAY,CAAC,CAAA,EAAG;AACpC,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,MACjB;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,SAAA,EAAW,gCAAgC;AAAA,KACrF,EAAG,gBAAA,CAAiB,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAC9C,IAAA,gBAAA,GAAmB,UAAA,CAAW;AAAA,MAC1B,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,gBAAgB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdnB,IAII;AAJJ,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,6EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEA,IAAI,cAAA,GAAiB,MAAMC,eAAAA,CAAe;AAAA,MACtC,YAAY,KAAA,EAAO;AACf,QAAA,IAAA,CAAK,KAAA,uBAAY,IAAA,EAAK;AACtB,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,QACjB;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,iBAAiB;AAAA,KAClD,EAAG,cAAA,CAAe,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAC5C,IAAA,cAAA,GAAiB,UAAA,CAAW;AAAA,MACxB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,cAAc,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACjBjB,IAAI,wBAMA;AANJ,IAAA,4BAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEA,IAAI,oBAAA,GAAuB,sBAAA,GAAyB,MAAMC,qBAAAA,SAA6B,YAAA,CAAa;AAAA,MAChG,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,sBAAA,CAAuB,SAAS,CAAA;AAAA,MAChE;AAAA,KACJ;AACA,IAAA,oBAAA,GAAuB,yBAAyB,UAAA,CAAW;AAAA,MACvD,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,UAAU;AAAA,OACxC,oBAAoB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdvB,IAGW;AAHX,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAGA,IAAA,CAAC,SAAUC,cAAAA,EAAe;AACtB,MAAAA,cAAAA,CAAcA,cAAAA,CAAc,kBAAkB,CAAA,GAAI,CAAC,CAAA,GAAI,kBAAA;AACvD,MAAAA,cAAAA,CAAcA,cAAAA,CAAc,gBAAgB,CAAA,GAAI,CAAC,CAAA,GAAI,gBAAA;AACrD,MAAAA,cAAAA,CAAcA,cAAAA,CAAc,iBAAiB,CAAA,GAAI,CAAC,CAAA,GAAI,iBAAA;AACtD,MAAAA,cAAAA,CAAcA,cAAAA,CAAc,kBAAkB,CAAA,GAAI,CAAC,CAAA,GAAI,kBAAA;AACvD,MAAAA,cAAAA,CAAcA,cAAAA,CAAc,cAAc,CAAA,GAAI,EAAE,CAAA,GAAI,cAAA;AACpD,MAAAA,cAAAA,CAAcA,cAAAA,CAAc,aAAa,CAAA,GAAI,EAAE,CAAA,GAAI,aAAA;AACnD,MAAAA,cAAAA,CAAcA,cAAAA,CAAc,SAAS,CAAA,GAAI,EAAE,CAAA,GAAI,SAAA;AAC/C,MAAAA,cAAAA,CAAcA,cAAAA,CAAc,cAAc,CAAA,GAAI,GAAG,CAAA,GAAI,cAAA;AACrD,MAAAA,cAAAA,CAAcA,cAAAA,CAAc,cAAc,CAAA,GAAI,GAAG,CAAA,GAAI,cAAA;AAAA,IACzD,CAAA,EAAG,aAAA,KAAkB,aAAA,GAAgB,EAAC,CAAE,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdxC,IAAI,iBAAA,CAAA,CAMS,cAAA,CAAA,CAgBT,eAAA,CAAA,CAUS;AAhCb,IAAA,qBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,8EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEO,IAAM,iBAAN,MAAqB;AAAA,MACxB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,IAAA,GAAO,IAAI,WAAA,EAAY;AAC5B,QAAA,IAAA,CAAK,OAAA,GAAU,CAAA;AACf,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa;AAAA,KACjC,EAAG,cAAA,CAAe,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAC3C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,OAAA,EAAS,OAAA,EAAS,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KACvF,EAAG,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC9C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,OAAA,EAAS,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM;AAAA,KACtF,EAAG,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC9C,IAAI,eAAA,GAAkB,iBAAA,GAAoB,MAAMC,gBAAAA,SAAwB,QAAA,CAAS;AAAA,MAC7E,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,iBAAA,CAAkB,SAAS,CAAA;AAAA,MAC3D;AAAA,KACJ;AACA,IAAA,eAAA,GAAkB,oBAAoB,UAAA,CAAW;AAAA,MAC7C,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,gBAAgB;AAAA,OAClE,eAAe,CAAA;AAEX,IAAM,kBAAN,MAAsB;AAAA,MACzB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,eAAA,EAAiB,OAAA,EAAS,GAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM;AAAA,KACjF,EAAG,eAAA,CAAgB,SAAA,EAAW,mBAAA,EAAqB,MAAM,CAAA;AACzD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,eAAA,EAAiB,OAAA,EAAS,GAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM;AAAA,KACjF,EAAG,eAAA,CAAgB,SAAA,EAAW,kBAAA,EAAoB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC1CxD,IAIa;AAJb,IAAA,uBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEO,IAAM,oBAAN,MAAwB;AAAA,MAC3B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,QAAA,EAAU,IAAA;AAAA,QACV,QAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW;AAAA,OACd;AAAA,KACL,EAAG,iBAAA,CAAkB,SAAA,EAAW,uBAAA,EAAyB,MAAM,CAAA;AAC/D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,QAAA,EAAU,IAAA;AAAA,QACV,QAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW;AAAA,OACd;AAAA,KACL,EAAG,iBAAA,CAAkB,SAAA,EAAW,sBAAA,EAAwB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC1B9D,IAAI,gBAAA,CAAA,CAKS,aAAA,CAAA,CAaT;AAlBJ,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,6EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEO,IAAM,gBAAN,MAAoB;AAAA,MACvB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,kBAAA,GAAqB,EAAA;AAC1B,QAAA,IAAA,CAAK,mBAAA,GAAsB,EAAA;AAC3B,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,aAAA,CAAc,SAAA,EAAW,oBAAA,EAAsB,MAAM,CAAA;AACxD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,aAAA,CAAc,SAAA,EAAW,qBAAA,EAAuB,MAAM,CAAA;AACzD,IAAI,cAAA,GAAiB,gBAAA,GAAmB,MAAMC,eAAAA,SAAuB,QAAA,CAAS;AAAA,MAC1E,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,gBAAA,CAAiB,SAAS,CAAA;AAAA,MAC1D;AAAA,KACJ;AACA,IAAA,cAAA,GAAiB,mBAAmB,UAAA,CAAW;AAAA,MAC3C,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,eAAe;AAAA,OACjE,cAAc,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC1BjB,IAAI,0BAMA;AANJ,IAAA,6BAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEA,IAAI,sBAAA,GAAyB,wBAAA,GAA2B,MAAMC,uBAAAA,SAA+B,YAAA,CAAa;AAAA,MACtG,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,wBAAA,CAAyB,SAAS,CAAA;AAAA,MAClE;AAAA,KACJ;AACA,IAAA,sBAAA,GAAyB,2BAA2B,UAAA,CAAW;AAAA,MAC3D,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,UAAU;AAAA,OACxC,sBAAsB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdzB,IAEa,SAAA;AAFb,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACO,IAAM,YAAN,MAAgB;AAAA,MACnB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,QAAA,IAAA,CAAK,SAAS,EAAC;AACf,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,SAAA,CAAU,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AACtC,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,aAAa,GAAA,EAAK,QAAA,EAAU,OAAO;AAAA,KACvD,EAAG,SAAA,CAAU,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdxC,IAAI,8BAMA;AANJ,IAAA,iCAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0FAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEA,IAAI,0BAAA,GAA6B,4BAAA,GAA+B,MAAMC,2BAAAA,SAAmC,QAAA,CAAS;AAAA,MAC9G,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,4BAAA,CAA6B,SAAS,CAAA;AAAA,MACtE;AAAA,KACJ;AACA,IAAA,0BAAA,GAA6B,+BAA+B,UAAA,CAAW;AAAA,MACnE,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,WAAW;AAAA,OAC7D,0BAA0B,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACd7B,IAAA,2BAAA,GAAA,KAAA,CAAA;AAAA,EAAA,oFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,uBAAA,EAAA;AACA,IAAA,6BAAA,EAAA;AACkD,EAAA;AAAA,CAAA,CAAA;;;ACFlD,IAIa;AAJb,IAAA,6BAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AAEO,IAAM,wBAAN,MAA4B;AAAA,MAC/B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,eAAA,EAAiB,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM;AAAA,KAC9F,EAAG,qBAAA,CAAsB,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AACvD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,eAAA,EAAiB,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM;AAAA,KAC9F,EAAG,qBAAA,CAAsB,SAAA,EAAW,UAAA,EAAY,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdtD,IAGW,kBAME,WAAA,EAmBA,kBAAA;AA5Bb,IAAA,yBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,kFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAGA,IAAA,CAAC,SAAUC,iBAAAA,EAAkB;AACzB,MAAAA,iBAAAA,CAAiBA,iBAAAA,CAAiB,kBAAkB,CAAA,GAAI,CAAC,CAAA,GAAI,kBAAA;AAC7D,MAAAA,iBAAAA,CAAiBA,iBAAAA,CAAiB,eAAe,CAAA,GAAI,CAAC,CAAA,GAAI,eAAA;AAC1D,MAAAA,iBAAAA,CAAiBA,iBAAAA,CAAiB,iBAAiB,CAAA,GAAI,CAAC,CAAA,GAAI,iBAAA;AAAA,IAChE,CAAA,EAAG,gBAAA,KAAqB,gBAAA,GAAmB,EAAC,CAAE,CAAA;AACvC,IAAM,WAAA,GAAN,cAA0BjC,UAAAA,CAAU;AAAA,MACvC,MAAA,GAAS;AACL,QAAA,MAAM,MAAM,EAAC;AACb,QAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,QAAA,IAAI,KAAA,GAAQ,iBAAiB,eAAA,EAAiB;AAC1C,UAAA,GAAA,CAAI,KAAK,iBAAiB,CAAA;AAAA,QAC9B;AACA,QAAA,IAAI,KAAA,GAAQ,iBAAiB,aAAA,EAAe;AACxC,UAAA,GAAA,CAAI,KAAK,eAAe,CAAA;AAAA,QAC5B;AACA,QAAA,IAAI,KAAA,GAAQ,iBAAiB,gBAAA,EAAkB;AAC3C,UAAA,GAAA,CAAI,KAAK,kBAAkB,CAAA;AAAA,QAC/B;AACA,QAAA,OAAO,GAAA;AAAA,MACX;AAAA,MACA,QAAA,GAAW;AACP,QAAA,OAAO,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACvC;AAAA,KACJ;AACO,IAAM,qBAAN,MAAyB;AAAA,MAC5B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,WAAA,GAAc,EAAA;AACnB,QAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,WAAA,EAAY;AACxC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,eAAe;AAAA,KAChD,EAAG,kBAAA,CAAmB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AACtD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa;AAAA,KACjC,EAAG,kBAAA,CAAmB,SAAA,EAAW,kBAAA,EAAoB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACxC3D,IAAI,2BAMA;AANJ,IAAA,wBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,iFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AACA,IAAA,iCAAA,EAAA;AAEA,IAAI,uBAAA,GAA0B,yBAAA,GAA4B,MAAMkC,wBAAAA,SAAgC,QAAA,CAAS;AAAA,MACrG,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,yBAAA,CAA0B,SAAS,CAAA;AAAA,MACnE;AAAA,KACJ;AACA,IAAA,uBAAA,GAA0B,4BAA4B,UAAA,CAAW;AAAA,MAC7D,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,mBAAmB;AAAA,OACrE,uBAAuB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACd1B,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,iCAAA,EAAA;AACA,IAAA,6BAAA,EAAA;AACA,IAAA,sBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACA,IAAA,wBAAA,EAAA;AACA,IAAA,4BAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,mCAAA,EAAA;AACA,IAAA,eAAA,EAAA;AACA,IAAA,eAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AACA,IAAA,4BAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,qBAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AACA,IAAA,6BAAA,EAAA;AACA,IAAA,iCAAA,EAAA;AACA,IAAA,2BAAA,EAAA;AACA,IAAA,6BAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACA,IAAA,wBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACxBA,IAGa,mBAAA;AAHb,IAAA,yBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,aAAA,EAAA;AACO,IAAM,mBAAA,GAAN,MAAM,oBAAA,CAAoB;AAAA,MAC7B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AACjB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,MACA,QAAQ,IAAA,EAAM;AACV,QAAA,OAAQ,gBAAgB,oBAAA,IACpB,IAAA,CAAK,aAAa,IAAA,CAAK,SAAA,KACrB,KAAK,UAAA,IACH,IAAA,CAAK,UAAA,IACK,OAAA,CAAQ,KAAK,UAAA,EAAY,IAAA,CAAK,UAAU,CAAA,IAClD,IAAA,CAAK,eAAe,IAAA,CAAK,UAAA,CAAA;AAAA,MACrC;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa;AAAA,OACtB;AAAA,KACL,EAAG,mBAAA,CAAoB,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AACrD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,GAAA;AAAA,QACnB,QAAA,EAAU;AAAA,OACb;AAAA,KACL,EAAG,mBAAA,CAAoB,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC3BtD,IAGa,oBAAA;AAHb,IAAA,4BAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACO,IAAM,uBAAN,MAA2B;AAAA,MAC9B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,mBAAA,EAAoB;AACzC,QAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,WAAA,CAAY,CAAC,CAAA;AACzC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB;AAAA,KACzC,EAAG,oBAAA,CAAqB,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AACtD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,oBAAA,CAAqB,SAAA,EAAW,kBAAA,EAAoB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACf7D,IAEI,IAAA;AAFJ,IAAA,SAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uDAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAI,IAAA,GAAO,MAAMC,KAAAA,CAAK;AAAA,MAClB,YAAY,IAAA,EAAM;AACd,QAAA,IAAI,IAAA,EAAM;AACN,UAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,KAAS,QAAA,IAAY,gBAAgB,IAAA,EAAM;AAC9E,YAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAI,CAAA;AAC1B,YAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,YAAA,IAAI,IAAA,CAAK,cAAA,EAAe,GAAI,IAAA,EAAM;AAC9B,cAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,YACvB,CAAA,MACK;AACD,cAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,YACnB;AAAA,UACJ,CAAA,MACK;AACD,YAAA,MAAA,CAAO,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,UAC5B;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,OAAA,GAAU;AACN,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,WAAA;AAClC,QAAA,IAAI,CAAC,IAAA,EAAM;AACP,UAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,QACxD;AACA,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa;AAAA,OACtB;AAAA,KACL,EAAG,IAAA,CAAK,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AACpC,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa;AAAA,OACtB;AAAA,KACL,EAAG,IAAA,CAAK,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AACxC,IAAA,IAAA,GAAO,UAAA,CAAW;AAAA,MACd,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,IAAI,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACxCP,IAGa,QAAA;AAHb,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,SAAA,EAAA;AACO,IAAM,WAAN,MAAe;AAAA,MAClB,YAAY,MAAA,EAAQ;AAChB,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,IAAA,iBAAK,IAAI,MAAM,CAAA;AACpC,QAAA,IAAA,CAAK,QAAA,GAAW,IAAI,IAAA,iBAAK,IAAI,MAAM,CAAA;AACnC,QAAA,IAAI,MAAA,EAAQ;AACR,UAAA,IAAA,CAAK,SAAA,GAAY,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAC1C,UAAA,IAAA,CAAK,QAAA,GAAW,IAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,QAC5C;AAAA,MACJ;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM;AAAA,KAC1B,EAAG,QAAA,CAAS,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC1C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM;AAAA,KAC1B,EAAG,QAAA,CAAS,SAAA,EAAW,UAAA,EAAY,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClBzC,IAAI,cAGS,SAAA,EAqBT,UAAA;AAxBJ,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACO,IAAM,SAAA,GAAN,MAAM,UAAA,CAAU;AAAA,MACnB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,MAAA,GAAS,EAAA;AACd,QAAA,IAAA,CAAK,WAAW,UAAA,CAAU,QAAA;AAC1B,QAAA,IAAA,CAAK,SAAA,GAAY,IAAIlC,YAAAA,EAAY;AACjC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,SAAA,CAAU,QAAA,GAAW,KAAA;AACrB,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,SAAA,CAAU,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AACxC,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,cAAc,SAAA,CAAU;AAAA,OAC3B;AAAA,KACL,EAAG,SAAA,CAAU,SAAA,EAAW,UAAA,EAAY,MAAM,CAAA;AAC1C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAMA,YAAAA,EAAa;AAAA,KACjC,EAAG,SAAA,CAAU,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC3C,IAAI,UAAA,GAAa,YAAA,GAAe,MAAMmC,WAAAA,SAAmB,QAAA,CAAS;AAAA,MAC9D,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,YAAA,CAAa,SAAS,CAAA;AAAA,MACtD;AAAA,KACJ;AACA,IAAA,UAAA,GAAa,eAAe,UAAA,CAAW;AAAA,MACnC,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,WAAW;AAAA,OAC7D,UAAU,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AChCb,IAAW,OAAA;AAAX,IAAAC,WAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wDAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,CAAC,SAAUC,QAAAA,EAAS;AAChB,MAAAA,QAAAA,CAAQA,QAAAA,CAAQ,IAAI,CAAA,GAAI,CAAC,CAAA,GAAI,IAAA;AAC7B,MAAAA,QAAAA,CAAQA,QAAAA,CAAQ,IAAI,CAAA,GAAI,CAAC,CAAA,GAAI,IAAA;AAC7B,MAAAA,QAAAA,CAAQA,QAAAA,CAAQ,IAAI,CAAA,GAAI,CAAC,CAAA,GAAI,IAAA;AAAA,IACjC,CAAA,EAAG,OAAA,KAAY,OAAA,GAAU,EAAC,CAAE,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACL5B,IAQa,cAAA;AARb,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,kEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACA,IAAA,SAAA,EAAA;AACA,IAAA,4BAAA,EAAA;AACA,IAAA,aAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAAD,WAAAA,EAAAA;AACO,IAAM,iBAAN,MAAqB;AAAA,MACxB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,EAAA;AACvB,QAAA,IAAA,CAAK,YAAA,GAAe,IAAI,WAAA,CAAY,CAAC,CAAA;AACrC,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,mBAAA,EAAoB;AACzC,QAAA,IAAA,CAAK,MAAA,GAAS,IAAI,IAAA,EAAK;AACvB,QAAA,IAAA,CAAK,QAAA,GAAW,IAAI,QAAA,EAAS;AAC7B,QAAA,IAAA,CAAK,OAAA,GAAU,IAAI,IAAA,EAAK;AACxB,QAAA,IAAA,CAAK,oBAAA,GAAuB,IAAI,oBAAA,EAAqB;AACrD,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,cAAc,OAAA,CAAQ;AAAA,OACzB;AAAA,KACL,EAAG,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC9C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,SAAA,EAAW;AAAA,OACd;AAAA,KACL,EAAG,cAAA,CAAe,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAA;AACnD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB;AAAA,KACzC,EAAG,cAAA,CAAe,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAChD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM;AAAA,KAC1B,EAAG,cAAA,CAAe,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AAC7C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,QAAA,EAAU;AAAA,KAC9B,EAAG,cAAA,CAAe,SAAA,EAAW,UAAA,EAAY,MAAM,CAAA;AAC/C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM;AAAA,KAC1B,EAAG,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC9C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,oBAAA,EAAsB;AAAA,KAC1C,EAAG,cAAA,CAAe,SAAA,EAAW,sBAAA,EAAwB,MAAM,CAAA;AAC3D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ;AAAA,QACJ,MAAM,YAAA,CAAa,SAAA;AAAA,QACnB,OAAA,EAAS,CAAA;AAAA,QACT,QAAA,EAAU,IAAA;AAAA,QACV,QAAA,EAAU;AAAA,OACb;AAAA,KACL,EAAG,cAAA,CAAe,SAAA,EAAW,gBAAA,EAAkB,MAAM,CAAA;AACrD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,SAAA,EAAW,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM;AAAA,KACxF,EAAG,cAAA,CAAe,SAAA,EAAW,iBAAA,EAAmB,MAAM,CAAA;AACtD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KAC5D,EAAG,cAAA,CAAe,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7DjD,IAIa,WAAA;AAJb,IAAA,gBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,8DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AACO,IAAM,cAAN,MAAkB;AAAA,MACrB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,cAAA,EAAe;AACzC,QAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,mBAAA,EAAoB;AAClD,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,WAAA,CAAY,CAAC,CAAA;AACvC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,cAAA,EAAgB,GAAA,EAAK,MAAM;AAAA,KAC/C,EAAG,WAAA,CAAY,SAAA,EAAW,gBAAA,EAAkB,MAAM,CAAA;AAClD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB;AAAA,KACzC,EAAG,WAAA,CAAY,SAAA,EAAW,oBAAA,EAAsB,MAAM,CAAA;AACtD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,WAAA,CAAY,SAAA,EAAW,gBAAA,EAAkB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACpBlD,IAMa,kBAAA,EAgBA,WAAA;AAtBb,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACA,IAAA,SAAA,EAAA;AACA,IAAA,SAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACO,IAAM,qBAAN,MAAyB;AAAA,MAC5B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,WAAA,CAAY,CAAC,CAAA;AACxC,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,IAAA,EAAK;AAC/B,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,SAAA,EAAW,gCAAgC;AAAA,KACrF,EAAG,kBAAA,CAAmB,SAAA,EAAW,iBAAA,EAAmB,MAAM,CAAA;AAC1D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM;AAAA,KAC1B,EAAG,kBAAA,CAAmB,SAAA,EAAW,gBAAA,EAAkB,MAAM,CAAA;AACzD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,IAAA,EAAM,QAAA,EAAU,YAAY;AAAA,KACrE,EAAG,kBAAA,CAAmB,SAAA,EAAW,oBAAA,EAAsB,MAAM,CAAA;AACtD,IAAM,cAAN,MAAkB;AAAA,MACrB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,mBAAA,EAAoB;AACzC,QAAA,IAAA,CAAK,MAAA,GAAS,IAAI,IAAA,EAAK;AACvB,QAAA,IAAA,CAAK,UAAA,GAAa,IAAI,IAAA,EAAK;AAC3B,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,QAAA,EAAU,MAAM;AAAA,KAC1D,EAAG,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC3C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB;AAAA,KACzC,EAAG,WAAA,CAAY,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC7C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM;AAAA,KAC1B,EAAG,WAAA,CAAY,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AAC1C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM;AAAA,KAC1B,EAAG,WAAA,CAAY,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAC9C,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,MAAM;AAAA,KAC1C,EAAG,WAAA,CAAY,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAC9C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,kBAAA,EAAoB,UAAU,UAAA,EAAY,QAAA,EAAU,MAAM;AAAA,KAC9E,EAAG,WAAA,CAAY,SAAA,EAAW,qBAAA,EAAuB,MAAM,CAAA;AACvD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,MAAM,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,UAAA,EAAY;AAAA,KACjF,EAAG,WAAA,CAAY,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClDjD,IAIa,eAAA;AAJb,IAAA,qBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACO,IAAM,kBAAN,MAAsB;AAAA,MACzB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,WAAA,GAAc,IAAI,WAAA,EAAY;AACnC,QAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,mBAAA,EAAoB;AAClD,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,WAAA,CAAY,CAAC,CAAA;AAClC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,MAAM;AAAA,KAC5C,EAAG,eAAA,CAAgB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AACnD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB;AAAA,KACzC,EAAG,eAAA,CAAgB,SAAA,EAAW,oBAAA,EAAsB,MAAM,CAAA;AAC1D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,eAAA,CAAgB,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACpBjD,IAAAE,YAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wDAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,eAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,gBAAA,EAAA;AACA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,SAAA,EAAA;AACA,IAAA,uBAAA,EAAA;AACA,IAAA,4BAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AACA,IAAA,SAAA,EAAA;AACA,IAAAF,WAAAA,EAAAA;AACA,IAAA,aAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACNO,SAAS,UAAU,IAAA,EAAsC;AAC5D,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAaG,kCAA6B,CAAA;AAC3D,EAAA,OAAO,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,WAAA,EAAY,GAAI,IAAA;AAC3C;AAQO,SAAS,iBAAA,CACZ,GACA,CAAA,EACO;AACP,EAAA,MAAM,EAAA,GAAK,IAAI,UAAA,CAAW,CAAA,CAAE,OAAO,CAAA;AACnC,EAAA,MAAM,EAAA,GAAK,IAAI,UAAA,CAAW,CAAA,CAAE,OAAO,CAAA;AACnC,EAAA,IAAI,EAAA,CAAG,MAAA,KAAW,EAAA,CAAG,MAAA,EAAQ,OAAO,KAAA;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,QAAQ,CAAA,EAAA,EAAK;AAChC,IAAA,IAAI,GAAG,CAAC,CAAA,KAAM,EAAA,CAAG,CAAC,GAAG,OAAO,KAAA;AAAA,EAChC;AACA,EAAA,OAAO,IAAA;AACX;AAKO,SAAS,YAAY,IAAA,EAA0C;AAClE,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAaA,kCAA6B,CAAA;AAC3D,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,MAAM,GAAA,CAAI,KAAA;AAChB,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAA,CAAI,SAAS,CAAC,CAAA;AACzC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,GAAA;AACX;AA7CA,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;AC6SA,SAAS,qBAAqB,IAAA,EAA+B;AAG3D,EAAA,MAAM,MAAM,IAAA,CAAK,kBAAA;AAIjB,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,EAAA;AAC1B,EAAA,MAAM,IAAA,GAAO,GAAA,EAAK,IAAA,EAAM,IAAA,IAAQ,EAAA;AAChC,EAAA,IAAI,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA;AACnD,EAAA,IAAI,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA;AACnD,EAAA,IAAI,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA;AACnD,EAAA,IAAI,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,OAAA,EAAS,OAAO,OAAA;AACnD,EAAA,IAAI,IAAA,KAAS,mBAAA,IAAuB,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA;AAC/D,EAAA,IAAI,IAAA,KAAS,mBAAA,IAAuB,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA;AAC/D,EAAA,IAAI,IAAA,KAAS,mBAAA,IAAuB,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA;AAC/D,EAAA,IAAI,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA;AACrD,EAAA,IAAI,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA;AACrD,EAAA,IAAI,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA;AACrD,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACxB;AAYA,SAAS,iBAAiB,IAAA,EAAsC;AAC9D,EAAA,MAAM,GAAA,GAAqB,CAAC,EAAE,IAAA,EAAM,MAAM,KAAA,EAAO,IAAA,CAAK,SAAS,CAAA;AAC/D,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAaC,oCAA+B,CAAA;AAC7D,EAAA,IAAI,GAAA,EAAK,OAAO,KAAA,EAAO;AACrB,IAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO;AAClC,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,WAAA,IAC3D,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,WAAA,IACpE,IAAA,CAAK,IAAA,KAAS,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,IAC3E;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAOA,SAAS,gBAAgB,QAAA,EAAuD;AAC9E,EAAA,IAAI,CAAC,QAAA,EAAU,OAAO,EAAC;AACvB,EAAA,MAAM,MAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,CAAA,CAAE,IAAI,CAAA;AACxC,IAAA,IAAI,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,qBAAqB,EAAA,EAAyC;AACrE,EAAA,IAAI,GAAG,aAAA,EAAe;AAIpB,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,SAAA,CAAU,EAAA,CAAG,aAAwB,CAAA;AAC5D,IAAA,MAAM,EAAA,GAAK,IAAIC,SAAA,CAAS,IAAI,WAAW,GAAG,CAAC,EAAE,QAAA,EAAS;AACtD,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,EAAA,EAAG;AAAA,EACjC;AACA,EAAA,IAAI,OAAO,EAAA,CAAG,OAAA,KAAY,QAAA,EAAU,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,EAAA,CAAG,OAAA,EAAQ;AAC5E,EAAA,IAAI,OAAO,EAAA,CAAG,UAAA,KAAe,QAAA,EAAU,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAA,CAAG,UAAA,EAAW;AACpF,EAAA,IAAI,OAAO,EAAA,CAAG,yBAAA,KAA8B,QAAA,EAAU;AACpD,IAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,GAAG,yBAAA,EAA0B;AAAA,EAC5D;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAA,CAAe,UAAuB,OAAA,EAA+B;AAC5E,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,OAAA,CAAQ,IAAA,EAAM,OAAO,KAAA;AAC3C,EAAA,QAAQ,QAAQ,IAAA;AAAM,IACpB,KAAK,IAAA;AACH,MAAA,OAAO,SAAA,CAAU,QAAA,CAAS,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AAAA,IAChD,KAAK,KAAA;AACH,MAAA,OAAO,UAAA,CAAW,QAAA,CAAS,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AAAA,IACjD,KAAK,OAAA;AACH,MAAA,OAAO,YAAA,CAAa,QAAA,CAAS,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AAAA,IACnD,KAAK,KAAA;AACH,MAAA,OAAO,UAAA,CAAW,QAAA,CAAS,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AAAA;AAErD;AAMA,SAAS,UAAA,CAAW,SAAiB,OAAA,EAA0B;AAC7D,EAAA,MAAM,IAAA,GAAO,QAAQ,WAAA,EAAY;AACjC,EAAA,MAAM,GAAA,GAAM,QAAQ,WAAA,EAAY;AAChC,EAAA,IAAI,IAAA,KAAS,KAAK,OAAO,IAAA;AACzB,EAAA,OAAO,IAAA,CAAK,QAAA,CAAS,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAChC;AASA,SAAS,YAAA,CAAa,WAAmB,OAAA,EAA0B;AACjE,EAAA,MAAM,IAAA,GAAO,UAAU,WAAA,EAAY;AACnC,EAAA,MAAM,GAAA,GAAM,QAAQ,WAAA,EAAY;AAChC,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,SAAU,IAAA,KAAS,GAAA;AACvC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC3B,EAAA,IAAI,EAAA,GAAK,GAAG,OAAO,KAAA;AACnB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,CAAC,CAAA;AAClC,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AACxB,IAAA,OAAO,QAAA,KAAa,IAAA,IAAQ,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,QAAA,KAAa,GAAA;AACtB;AAMA,SAAS,UAAA,CAAW,SAAiB,OAAA,EAA0B;AAC7D,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAO,CAAA;AAC3B,IAAA,OAAO,UAAA,CAAW,GAAA,CAAI,QAAA,EAAU,OAAO,CAAA;AAAA,EACzC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAQA,SAAS,SAAA,CAAU,SAAiB,SAAA,EAA4B;AAC9D,EAAA,MAAM,YAAY,CAAC,EAAA,KACjB,EAAA,CACG,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAI,IAAA,EAAM,EACvB,MAAA,CAAO,OAAO,EACd,OAAA,EAAQ;AACb,EAAA,MAAM,KAAA,GAAQ,UAAU,OAAO,CAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,UAAU,SAAS,CAAA;AACnC,EAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY,KAAM,QAAQ,CAAC,CAAA,CAAE,WAAA,EAAY,EAAG,OAAO,KAAA;AAAA,EAClE;AACA,EAAA,OAAO,IAAA;AACT;AAzcA,IAqBM,sBAoBA,kBAAA,EAqBO,YAAA;AA9Db,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2BAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,WAAA,EAAA;AACA,IAAAH,YAAAA,EAAAA;AAiBA,IAAA,WAAA,EAAA;AACA,IAAA,eAAA,EAAA;AAEA,IAAM,oBAAA,GAAuB,WAAA;AAoB7B,IAAM,kBAAA,GAAqB;AAAA,MACzB,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAUO,IAAM,eAAN,MAAmB;AAAA,MACxB,WAAA,CAA6B,IAAA,GAA4B,EAAC,EAAG;AAAhC,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,MAAiC;AAAA,MAAjC,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQ7B,MAAM,KAAA,CACJ,IAAA,EACA,OAAA,EACA,aAAA,GAAmC,EAAC,EACR;AAE5B,QAAA,MAAM,SAAkB,EAAC;AACzB,QAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,UAAA,IAAI;AACF,YAAA,OAAO,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,QAAQ,aAAa,CAAA;AAAA,UACxD,SAAS,GAAA,EAAK;AACZ,YAAA,MAAA,CAAO,KAAK,GAAY,CAAA;AAAA,UAC1B;AAAA,QACF;AAEA,QAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACrC,QAAA,IAAI,IAAA,YAAgB3D,+BAAuB,MAAM,IAAA;AACjD,QAAA,MAAM,IAAIA,8BAAsB,8BAAA,EAAgC;AAAA,UAC9D,MAAA,EAAQ,WAAA;AAAA,UACR,KAAA,EAAO;AAAA,SACR,CAAA;AAAA,MACH;AAAA,MAEA,MAAc,QAAA,CACZ,IAAA,EACA,MAAA,EACA,aAAA,EAC4B;AAC5B,QAAA,IAAA,CAAK,aAAa,IAAI,CAAA;AACtB,QAAA,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAC3B,QAAA,MAAM,KAAA,GAA2B,CAAC,IAAI,CAAA;AACtC,QAAA,IAAI,OAAA,GAAU,IAAA;AACd,QAAA,MAAM,IAAA,GAAO,IAAI+D,qBAAA,CAAiB,aAAa,CAAA;AAC/C,QAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,QAAA,OAAO,OAAA,CAAQ,OAAA,KAAY,MAAA,CAAO,OAAA,EAAS;AACzC,UAAA,MAAM,MAAA,GAAS,KAAK,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,KAAY,QAAQ,MAAM,CAAA;AAC5D,UAAA,IAAI,CAAC,MAAA,EAAQ;AACX,YAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,CAAO,OAAA,EAAS;AACrC,cAAA,MAAM,IAAI/D,6BAAA,CAAsB,CAAA,gCAAA,EAAmC,OAAA,CAAQ,OAAO,CAAA,CAAA,EAAI;AAAA,gBACpF,MAAA,EAAQ;AAAA,eACT,CAAA;AAAA,YACH;AAEA,YAAA,IAAA,CAAK,aAAa,MAAM,CAAA;AACxB,YAAA,IAAA,CAAK,iBAAA,CAAkB,QAAQ,YAAY,CAAA;AAC3C,YAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,MAAM,CAAA;AACrC,YAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,MAAM,CAAA;AAC1C,YAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,YAAA,IAAA,CAAK,oBAAA,CAAqB,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAC9C,YAAA,OAAO,KAAA;AAAA,UACT;AACA,UAAA,IAAA,CAAK,aAAa,MAAM,CAAA;AACxB,UAAA,IAAA,CAAK,iBAAA,CAAkB,QAAQ,YAAY,CAAA;AAC3C,UAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,MAAM,CAAA;AACrC,UAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,MAAM,CAAA;AAC1C,UAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,UAAA,OAAA,GAAU,MAAA;AACV,UAAA,YAAA,IAAgB,CAAA;AAAA,QAClB;AAOA,QAAA,IAAI,CAAC,iBAAA,CAAkB,OAAA,EAAS,MAAM,CAAA,EAAG;AACvC,UAAA,MAAM,IAAIA,6BAAA;AAAA,YACR,CAAA,YAAA,EAAe,QAAQ,OAAO,CAAA,kFAAA,CAAA;AAAA,YAC9B,EAAE,QAAQ,WAAA;AAAY,WACxB;AAAA,QACF;AACA,QAAA,IAAA,CAAK,oBAAA,CAAqB,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAC9C,QAAA,OAAO,KAAA;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQQ,oBAAA,CAAqB,MAAuB,cAAA,EAAyC;AAC3F,QAAA,MAAM,SAAA,GAAY,iBAAiB,IAAI,CAAA;AACvC,QAAA,MAAM,KAAA,GAA+B,CAAC,IAAA,EAAM,KAAA,EAAO,SAAS,KAAK,CAAA;AACjE,QAAA,KAAA,MAAW,MAAM,cAAA,EAAgB;AAC/B,UAAA,MAAM,GAAA,GAAM,GAAG,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,oBAAoB,CAAA;AACrE,UAAA,IAAI,CAAC,GAAA,EAAK;AACV,UAAA,MAAM,EAAA,GAAK,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,OAAO,eAAe,CAAA;AACtD,UAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,EAAA,CAAG,iBAAiB,CAAA;AACtD,UAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,EAAA,CAAG,gBAAgB,CAAA;AACpD,UAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,YAAA,IAAA,CAAK,wBAAwB,IAAA,EAAM,SAAA,EAAW,WAAW,QAAA,EAAU,IAAA,EAAM,GAAG,OAAO,CAAA;AAAA,UACrF;AAAA,QACF;AAAA,MACF;AAAA,MAEQ,wBACN,IAAA,EACA,SAAA,EACA,SAAA,EACA,QAAA,EACA,MACA,WAAA,EACM;AACN,QAAA,MAAM,mBAAmB,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAChE,QAAA,MAAM,kBAAkB,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAC9D,QAAA,MAAM,cAAc,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAC3D,QAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAE/B,UAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,YAAA,MAAM,EAAA,GAAK,iBAAiB,IAAA,CAAK,CAAC,QAAQ,cAAA,CAAe,EAAA,EAAI,GAAG,CAAC,CAAA;AACjE,YAAA,IAAI,CAAC,EAAA,EAAI;AACP,cAAA,MAAM,IAAIA,6BAAA;AAAA,gBACR,CAAA,KAAA,EAAQ,KAAK,OAAO,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,EAAA,CAAG,KAAK,CAAA,4CAAA,EAA+C,WAAW,CAAA,CAAA;AAAA,gBACpG,EAAE,QAAQ,kBAAA;AAAmB,eAC/B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,QAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,UAAA,KAAA,MAAW,OAAO,eAAA,EAAiB;AACjC,YAAA,IAAI,cAAA,CAAe,EAAA,EAAI,GAAG,CAAA,EAAG;AAC3B,cAAA,MAAM,IAAIA,6BAAA;AAAA,gBACR,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,EAAA,CAAG,KAAK,CAAA,6BAAA,EAAgC,GAAA,CAAI,KAAK,CAAA,cAAA,EAAiB,WAAW,CAAA,CAAA;AAAA,gBAC/G,EAAE,QAAQ,kBAAA;AAAmB,eAC/B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEQ,iBAAA,CAAkB,MAAuB,YAAA,EAA4B;AAC3E,QAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA;AACzB,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,CAAagE,8BAAyB,CAAA;AACtD,QAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,CAAG,EAAA,EAAI;AACjB,UAAA,MAAM,IAAIhE,6BAAA;AAAA,YACR,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,kDAAA,CAAA;AAAA,YAC3B,EAAE,QAAQ,mBAAA;AAAoB,WAChC;AAAA,QACF;AACA,QAAA,IAAI,OAAO,EAAA,CAAG,UAAA,KAAe,QAAA,IAAY,YAAA,GAAe,GAAG,UAAA,EAAY;AACrE,UAAA,MAAM,IAAIA,6BAAA;AAAA,YACR,eAAe,YAAY,CAAA,2BAAA,EAA8B,GAAG,UAAU,CAAA,IAAA,EAAO,KAAK,OAAO,CAAA,CAAA;AAAA,YACzF,EAAE,QAAQ,aAAA;AAAc,WAC1B;AAAA,QACF;AAAA,MACF;AAAA,MAEQ,kBAAkB,IAAA,EAA6B;AACrD,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAaiE,uBAAkB,CAAA;AAChD,QAAA,IAAI,CAAC,GAAA,EAAK;AACV,QAAA,IAAA,CAAK,GAAA,CAAI,MAAA,GAASjB,kBAAAA,CAAc,gBAAA,MAAsB,CAAA,EAAG;AACvD,UAAA,MAAM,IAAIhD,6BAAA;AAAA,YACR,CAAA,KAAA,EAAQ,KAAK,OAAO,CAAA,2CAAA,CAAA;AAAA,YACpB,EAAE,QAAQ,WAAA;AAAY,WACxB;AAAA,QACF;AAAA,MACF;AAAA,MAEQ,gBAAgB,IAAA,EAA6B;AACnD,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAaiE,uBAAkB,CAAA;AAChD,QAAA,IAAI,CAAC,GAAA,EAAK;AACV,QAAA,IAAA,CAAK,GAAA,CAAI,MAAA,GAASjB,kBAAAA,CAAc,WAAA,MAAiB,CAAA,EAAG;AAClD,UAAA,MAAM,IAAIhD,6BAAA;AAAA,YACR,CAAA,GAAA,EAAM,KAAK,OAAO,CAAA,sCAAA,CAAA;AAAA,YAClB,EAAE,QAAQ,WAAA;AAAY,WACxB;AAAA,QACF;AAAA,MACF;AAAA,MAEQ,gBAAA,CAAiB,OAAwB,MAAA,EAA+B;AAC9E,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,YAAA,CAAakE,oCAA+B,CAAA;AAC9D,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAaN,kCAA6B,CAAA;AAC7D,QAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,EAAK;AAClB,QAAA,MAAM,WAAW,GAAA,CAAI,KAAA;AACrB,QAAA,MAAM,WAAW,GAAA,CAAI,KAAA;AACrB,QAAA,IAAI,YAAY,QAAA,IAAY,QAAA,CAAS,aAAY,KAAM,QAAA,CAAS,aAAY,EAAG;AAC7E,UAAA,MAAM,IAAI5D,6BAAA;AAAA,YACR,CAAA,OAAA,EAAU,KAAA,CAAM,OAAO,CAAA,uBAAA,EAA0B,OAAO,OAAO,CAAA,CAAA;AAAA,YAC/D,EAAE,QAAQ,kBAAA;AAAmB,WAC/B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAc,eAAA,CAAgB,KAAA,EAAwB,MAAA,EAAwC;AAG5F,QAAA,MAAM,EAAA,GAAK,MAAM,KAAA,CAAM,MAAA,CAAO,EAAE,WAAW,MAAA,CAAO,SAAA,EAAW,aAAA,EAAe,IAAA,EAAM,CAAA;AAClF,QAAA,IAAI,CAAC,EAAA,EAAI;AACP,UAAA,MAAM,IAAIA,8BAAsB,CAAA,kCAAA,EAAqC,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,WAAA,EAAa,CAAA;AAAA,QAC/G;AAAA,MACF;AAAA,MAEQ,aAAa,IAAA,EAA6B;AAChD,QAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AACvB,QAAA,IAAA,CAAK,eAAe,IAAI,CAAA;AAAA,MAC1B;AAAA,MAEQ,cAAc,IAAA,EAA6B;AACjD,QAAA,MAAM,GAAA,GAAA,CAAO,KAAK,IAAA,CAAK,GAAA,KAAQ,sBAAM,IAAI,IAAA,EAAK,CAAA,GAAI,CAAE,OAAA,EAAQ;AAC5D,QAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,IAAA,CAAK,kBAAA,IAAsB,EAAA,IAAM,GAAA;AACtD,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,OAAA,EAAQ;AACzC,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,OAAA,EAAQ;AACvC,QAAA,IAAI,GAAA,GAAM,SAAS,SAAA,EAAW;AAC5B,UAAA,MAAM,IAAIA,6BAAA;AAAA,YACR,eAAe,IAAA,CAAK,OAAO,6BAA6B,IAAA,CAAK,SAAA,CAAU,aAAa,CAAA,CAAA,CAAA;AAAA,YACpF,EAAE,QAAQ,UAAA;AAAW,WACvB;AAAA,QACF;AACA,QAAA,IAAI,GAAA,GAAM,SAAS,QAAA,EAAU;AAC3B,UAAA,MAAM,IAAIA,6BAAA;AAAA,YACR,eAAe,IAAA,CAAK,OAAO,sBAAsB,IAAA,CAAK,QAAA,CAAS,aAAa,CAAA,CAAA,CAAA;AAAA,YAC5E,EAAE,QAAQ,UAAA;AAAW,WACvB;AAAA,QACF;AAAA,MACF;AAAA,MAEQ,eAAe,IAAA,EAA6B;AAClD,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,iBAAA,IAAqB,kBAAA;AAC/C,QAAA,MAAM,OAAA,GAAU,qBAAqB,IAAI,CAAA;AACzC,QAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC9B,UAAA,MAAM,IAAIA,6BAAA;AAAA,YACR,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,qCAAA,EAAwC,OAAO,CAAA,CAAA;AAAA,YAC1E,EAAE,QAAQ,sBAAA;AAAuB,WACnC;AAAA,QACF;AAAA,MACF;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACnSO,SAAS,cAAA,CAAe,KAAiB,UAAA,EAAgC;AAC5E,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,GAAA,CAAI,KAAK,CAAA,KAAM,EAAA;AACf,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAC9D,EAAA,GAAA,EAAA;AACA,EAAA,IAAI,GAAA,CAAI,KAAK,CAAA,KAAM,CAAA;AACf,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,EAAK,CAAA;AACtB,EAAA,IAAI,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,MAAM,IAAI,CAAA;AACjC,EAAA,GAAA,IAAO,IAAA;AACP,EAAA,IAAI,GAAA,CAAI,KAAK,CAAA,KAAM,CAAA;AACf,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,EAAK,CAAA;AACtB,EAAA,IAAI,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,MAAM,IAAI,CAAA;AACjC,EAAA,IAAI,CAAA,CAAE,SAAS,UAAA,EAAY,CAAA,GAAI,EAAE,KAAA,CAAM,CAAA,CAAE,SAAS,UAAU,CAAA;AAC5D,EAAA,IAAI,CAAA,CAAE,SAAS,UAAA,EAAY,CAAA,GAAI,EAAE,KAAA,CAAM,CAAA,CAAE,SAAS,UAAU,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,UAAA,GAAa,CAAC,CAAA;AACzC,EAAA,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,UAAA,GAAa,CAAA,CAAE,MAAM,CAAA;AAChC,EAAA,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,UAAA,GAAa,CAAA,GAAI,EAAE,MAAM,CAAA;AACpC,EAAA,OAAO,GAAA;AACX;AA5BA,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC+LA,SAAS,YAAA,CAAa,QAAyB,GAAA,EAA4B;AACvE,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,OAAA,EAAQ;AACzD,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,CAAY,UAAA,CAAY,OAAA,EAAQ;AAC1D,EAAA,MAAM,iBAAA,GACF,MAAA,CAAO,WAAA,CAAY,mBAAA,EAAqB,GAAA;AAAA,IAAI,CAAC,CAAA,KACzC,uBAAA,CAAwB,UAAA,CAAW,CAAA,CAAE,eAAe,CAAC;AAAA,OACpD,EAAC;AACV,EAAA,OAAO;AAAA,IACH,UAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA,EAAK;AAAA,GACT;AACJ;AAWA,SAAS,wBAAwB,GAAA,EAAqB;AAClD,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA;AAC7C,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC/B,EAAA,OAAO,OAAO,IAAA,GAAO,KAAK,EAAE,QAAA,CAAS,EAAE,EAAE,WAAA,EAAY;AACzD;AAGA,SAAS,WAAW,KAAA,EAAyC;AACzD,EAAA,MAAM,OAAO,KAAA,YAAiB,UAAA,GAAa,KAAA,GAAQ,IAAI,WAAW,KAAK,CAAA;AACvE,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AAClC,IAAA,GAAA,IAAO,IAAA,CAAK,CAAC,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,GAAA;AACX;AAtOA,IA0Ca,UAAA;AA1Cb,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,WAAA,EAAA;AACA,IAAA2D,YAAAA,EAAAA;AAGA,IAAA,eAAA,EAAA;AAsCO,IAAM,aAAN,MAAiB;AAAA,MACH,OAAA;AAAA,MACA,KAAA;AAAA,MAEjB,WAAA,CAAY,IAAA,GAA0B,EAAC,EAAG;AACtC,QAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA,IAAW,UAAA,CAAW,KAAA,CAAM,KAAK,UAAU,CAAA;AAC/D,QAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAAA,MACtB;AAAA,MAEA,MAAM,cAAc,GAAA,EAAiC;AACjD,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,MAAA,EAAQ,OAAO,CAAA;AAC1D,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,SAAS,MAAM,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAAA;AAAA,QAC1E;AACA,QAAA,MAAM,MAAM,IAAI,UAAA,CAAW,MAAM,QAAA,CAAS,aAAa,CAAA;AACvD,QAAA,MAAM,MAAA,GAAS,UAAA,CAAW,KAAA,CAAM,GAAA,EAAK,eAAe,CAAA;AAOpD,QAAA,IAAI,CAAC,MAAA,CAAO,WAAA,CAAY,UAAA,EAAY;AAChC,UAAA,MAAM,IAAI,MAAM,CAAA,gEAAA,CAA0D,CAAA;AAAA,QAC9E;AAEA,QAAA,OAAO,YAAA,CAAa,QAAQ,GAAG,CAAA;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,MAAM,mBAAA,CAAoB,GAAA,EAAa,GAAA,mBAAY,IAAI,MAAK,EAAuB;AAC/E,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA,CAAA;AACtB,QAAA,IAAI,KAAK,KAAA,EAAO;AACZ,UAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAI,GAAG,CAAA;AACpC,UAAA,IAAI,GAAA,EAAK;AACL,YAAA,MAAMQ,OAAAA,GAAS,UAAA,CAAW,KAAA,CAAM,GAAA,EAAK,eAAe,CAAA;AACpD,YAAA,OAAO,YAAA,CAAaA,SAAQ,GAAG,CAAA;AAAA,UACnC;AAAA,QACJ;AACA,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,aAAA,CAAc,GAAG,CAAA;AAC3C,QAAA,IAAI,KAAK,KAAA,EAAO;AACZ,UAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AAAA,YACb,IAAA,CAAK,OAAO,MAAA,CAAO,UAAA,CAAW,SAAQ,GAAI,GAAA,CAAI,OAAA,EAAQ,IAAK,GAAI,CAAA;AAAA,YAC/D;AAAA,WACJ;AACA,UAAA,MAAM,KAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,QAC7C;AACA,QAAA,OAAO,MAAA;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaA,MAAM,SAAA,CAAU,MAAA,EAAmB,MAAA,EAAwC;AACvE,QAAA,MAAM,SAAS,MAAA,CAAO,GAAA,CAAI,cAAA,GACpB,IAAI,WAAW,MAAA,CAAO,GAAA,CAAI,cAAc,CAAA,GACxC,IAAI,UAAA,CAAW,UAAA,CAAW,UAAU,MAAA,CAAO,GAAA,CAAI,WAAW,CAAC,CAAA;AACjE,QAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,MAAA,CAAO,IAAI,SAAS,CAAA;AAClD,QAAA,MAAM,OAAA,GAAU,cAAA,CAAe,MAAA,EAAQ,EAAE,CAAA;AASzC,QAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,MAAA,CAAO,UAAU,OAAO,CAAA;AACpD,QAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA,UAClC,MAAA;AAAA,UACA,IAAA;AAAA,UACA,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,OAAA,EAAQ;AAAA,UACrC,KAAA;AAAA,UACA,CAAC,QAAQ;AAAA,SACb;AACA,QAAA,MAAM,EAAA,GAAK,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA;AAAA,UAC3B,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,UACjC,SAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA,SACJ;AACA,QAAA,IAAI,CAAC,EAAA,EAAI;AACL,UAAA,MAAM,IAAI,KAAA;AAAA,YACN,CAAA,iDAAA,EAAoD,OAAO,OAAO,CAAA;AAAA,WACtE;AAAA,QACJ;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaA,SAAA,CAAU,QAAmB,SAAA,EAAsC;AAC/D,QAAA,MAAM,UAAA,GAAa,wBAAwB,SAAS,CAAA;AACpD,QAAA,KAAA,MAAW,WAAW,MAAA,CAAO,GAAA,CAAI,WAAA,CAAY,mBAAA,IAAuB,EAAC,EAAG;AACpE,UAAA,MAAM,YAAA,GAAe,uBAAA;AAAA,YACjB,UAAA,CAAW,QAAQ,eAAe;AAAA,WACtC;AACA,UAAA,IAAI,iBAAiB,UAAA,EAAY;AAC7B,YAAA,OAAO;AAAA,cACH,MAAA,EAAQ,SAAA;AAAA,cACR,SAAA,EAAW,OAAA,CAAQ,cAAA,CAAe,OAAA;AAAQ,aAC9C;AAAA,UACJ;AAAA,QACJ;AACA,QAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAAA,MAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,OAAA,CAAQ,MAAA,EAAmB,GAAA,mBAAY,IAAI,MAAK,EAAY;AACxD,QAAA,OAAO,GAAA,CAAI,OAAA,EAAQ,GAAI,MAAA,CAAO,WAAW,OAAA,EAAQ;AAAA,MACrD;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACpLA,IAAI,qBAAA,EAGA,mBAAA;AAHJ,IAAA,yBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,kFAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAI,mBAAA,GAAsB,qBAAA,GAAwB,MAAMC,oBAAAA,SAA4B,QAAA,CAAS;AAAA,MACzF,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,qBAAA,CAAsB,SAAS,CAAA;AAAA,MAC/D;AAAA,KACJ;AACA,IAAA,mBAAA,GAAsB,wBAAwB,UAAA,CAAW;AAAA,MACrD,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,UAAU,QAAA,EAAU,YAAA,CAAa,kBAAkB;AAAA,OACjF,mBAAmB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACXtB,IAEI,aAAA;AAFJ,IAAA,mBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAI,aAAA,GAAgB,MAAMC,cAAAA,CAAc;AAAA,MACpC,WAAA,CAAY,KAAA,mBAAQ,IAAI,IAAA,EAAK,EAAG;AAC5B,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,MACjB;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,iBAAiB;AAAA,KAClD,EAAG,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAC3C,IAAA,aAAA,GAAgB,UAAA,CAAW;AAAA,MACvB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,aAAa,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACZhB,IAEI,cAAA;AAFJ,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,6EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAI,cAAA,GAAiB,MAAMC,eAAAA,CAAe;AAAA,MACtC,WAAA,CAAY,QAAQ,IAAA,EAAM;AACtB,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,MACjB;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,MAAM;AAAA,KACvC,EAAG,cAAA,CAAe,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAC5C,IAAA,cAAA,GAAiB,UAAA,CAAW;AAAA,MACxB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,cAAc,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACZjB,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,WAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAA,IAAI,gCAIS,2BAAA,EAYT,4BAAA;AAhBJ,IAAA,mCAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4FAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAAX,YAAAA,EAAAA;AACO,IAAM,8BAAN,MAAkC;AAAA,MACrC,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,mBAAA,EAAoB;AAC7C,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB;AAAA,KACzC,EAAG,2BAAA,CAA4B,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AACjE,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB,QAAA,EAAU,MAAM;AAAA,KACzD,EAAG,2BAAA,CAA4B,SAAA,EAAW,gBAAA,EAAkB,MAAM,CAAA;AAClE,IAAI,4BAAA,GAA+B,8BAAA,GAAiC,MAAMY,6BAAAA,SAAqC,QAAA,CAAS;AAAA,MACpH,YAAY,KAAA,EAAO;AACf,QAAA,KAAA,CAAM,KAAK,CAAA;AACX,QAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,8BAAA,CAA+B,SAAS,CAAA;AAAA,MACxE;AAAA,KACJ;AACA,IAAA,4BAAA,GAA+B,iCAAiC,UAAA,CAAW;AAAA,MACvE,QAAQ,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,QAAA,EAAU,6BAA6B;AAAA,OAC/E,4BAA4B,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACxB/B,IAGa,cAAA;AAHb,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,6EAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAAZ,YAAAA,EAAAA;AACO,IAAM,iBAAN,MAAqB;AAAA,MACxB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,MAAA,GAAS,IAAI,IAAA,EAAK;AACvB,QAAA,IAAA,CAAK,OAAA,GAAU,IAAI,yBAAA,EAA0B;AAC7C,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM;AAAA,KAC1B,EAAG,cAAA,CAAe,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AAC7C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,yBAAA,EAA2B;AAAA,KAC/C,EAAG,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACf9C,IAAAa,gBAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,yBAAA,EAAA;AACA,IAAA,mBAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,mCAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACLA,IAGa,OAAA,EAET,WAAA;AALJ,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAAb,YAAAA,EAAAA;AACO,IAAM,OAAA,GAAN,cAAsBtC,YAAAA,CAAY;AAAA,KACzC;AACA,IAAI,WAAA,GAAc,MAAMoD,YAAAA,CAAY;AAAA,MAChC,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,GAAG;AAAA,KACtC,EAAG,WAAA,CAAY,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AAC1C,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,GAAG;AAAA,KACzC,EAAG,WAAA,CAAY,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AACzC,IAAA,WAAA,GAAc,UAAA,CAAW;AAAA,MACrB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,WAAW,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClBd,IAGa,MAAA;AAHb,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAAd,YAAAA,EAAAA;AACA,IAAA,WAAA,EAAA;AACO,IAAM,SAAN,MAAa;AAAA,MAChB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,mBAAA,EAAoB;AAC7C,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAItC,YAAAA,EAAY;AACtC,QAAA,IAAA,CAAK,aAAA,GAAgB,IAAIA,YAAAA,EAAY;AACrC,QAAA,IAAA,CAAK,YAAA,GAAe,IAAI,WAAA,CAAY,CAAC,CAAA;AACrC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB;AAAA,KACzC,EAAG,MAAA,CAAO,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AAC5C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAMA,YAAAA,EAAa;AAAA,KACjC,EAAG,MAAA,CAAO,SAAA,EAAW,gBAAA,EAAkB,MAAM,CAAA;AAC7C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAMA,YAAAA,EAAa;AAAA,KACjC,EAAG,MAAA,CAAO,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AAC5C,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,SAAA,EAAW,gCAAgC;AAAA,KACrF,EAAG,MAAA,CAAO,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACvB3C,IAGa,WAAA;AAHb,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAAsC,YAAAA,EAAAA;AACO,IAAM,cAAN,MAAkB;AAAA,MACrB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,cAAA,uBAAqB,IAAA,EAAK;AAC/B,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,iBAAiB;AAAA,KAClD,EAAG,WAAA,CAAY,SAAA,EAAW,gBAAA,EAAkB,MAAM,CAAA;AAClD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KAC3D,EAAG,WAAA,CAAY,SAAA,EAAW,kBAAA,EAAoB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACdpD,IAGI,UAAA;AAHJ,IAAA,gBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,8DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAI,UAAA,GAAa,MAAMe,WAAAA,CAAW;AAAA,MAC9B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,MAAM,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KACnE,EAAG,UAAA,CAAW,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AACvC,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KAC7D,EAAG,UAAA,CAAW,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC1C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,MAAM,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KACnE,EAAG,UAAA,CAAW,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC1C,IAAA,UAAA,GAAa,UAAA,CAAW;AAAA,MACpB,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,QAAQ;AAAA,OACtC,UAAU,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACnBb,IAKa,cAAA;AALb,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,kEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAAf,YAAAA,EAAAA;AACA,IAAA,gBAAA,EAAA;AACO,IAAM,iBAAN,MAAqB;AAAA,MACxB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,MAAA,GAAS,IAAI,MAAA,EAAO;AACzB,QAAA,IAAA,CAAK,UAAA,GAAa,IAAI,UAAA,EAAW;AACjC,QAAA,IAAA,CAAK,UAAA,uBAAiB,IAAA,EAAK;AAC3B,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ;AAAA,KAC5B,EAAG,cAAA,CAAe,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AAC7C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,UAAA,EAAY;AAAA,KAChC,EAAG,cAAA,CAAe,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AACjD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,iBAAiB;AAAA,KAClD,EAAG,cAAA,CAAe,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AACjD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,iBAAiB,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KAC9E,EAAG,cAAA,CAAe,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AACjD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,GAAG,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM;AAAA,KACjF,EAAG,cAAA,CAAe,SAAA,EAAW,kBAAA,EAAoB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC3BvD,IAAWD,QAAAA;AAAX,IAAAD,WAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wDAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,CAAC,SAAUC,QAAAA,EAAS;AAChB,MAAAA,QAAAA,CAAQA,QAAAA,CAAQ,IAAI,CAAA,GAAI,CAAC,CAAA,GAAI,IAAA;AAAA,IACjC,CAAA,EAAGA,QAAAA,KAAYA,QAAAA,GAAU,EAAC,CAAE,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACH5B,IAMa,YAAA;AANb,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAAC,YAAAA,EAAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AACA,IAAAF,WAAAA,EAAAA;AACO,IAAM,eAAN,MAAmB;AAAA,MACtB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,UAAUC,QAAAA,CAAQ,EAAA;AACvB,QAAA,IAAA,CAAK,WAAA,GAAc,IAAI,WAAA,EAAY;AACnC,QAAA,IAAA,CAAK,UAAA,uBAAiB,IAAA,EAAK;AAC3B,QAAA,IAAA,CAAK,YAAY,EAAC;AAClB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,OAAA,EAAS,SAAS,CAAA,EAAG,YAAA,EAAcA,QAAAA,CAAQ,EAAA,EAAI;AAAA,KAChF,EAAG,YAAA,CAAa,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC5C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa;AAAA,KACjC,EAAG,YAAA,CAAa,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAChD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,iBAAiB;AAAA,KAClD,EAAG,YAAA,CAAa,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAC/C,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,YAAY;AAAA,KAC1D,EAAG,YAAA,CAAa,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC9C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,YAAY,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM;AAAA,KACjF,EAAG,YAAA,CAAa,SAAA,EAAW,oBAAA,EAAsB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7BvD,IAIa,iBAAA;AAJb,IAAA,wBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAAC,YAAAA,EAAAA;AACA,IAAA,kBAAA,EAAA;AACO,IAAM,oBAAN,MAAwB;AAAA,MAC3B,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,YAAA,EAAa;AACxC,QAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,mBAAA,EAAoB;AAClD,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,WAAA,CAAY,CAAC,CAAA;AAClC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,YAAA,EAAc,GAAA,EAAK,MAAM;AAAA,KAC7C,EAAG,iBAAA,CAAkB,SAAA,EAAW,iBAAA,EAAmB,MAAM,CAAA;AACzD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB;AAAA,KACzC,EAAG,iBAAA,CAAkB,SAAA,EAAW,oBAAA,EAAsB,MAAM,CAAA;AAC5D,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,iBAAA,CAAkB,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AACnD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,YAAY,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,CAAA,EAAG;AAAA,KACnF,EAAG,iBAAA,CAAkB,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACvB/C,IAAAgB,wBAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAhB,YAAAA,EAAAA;AAW2D,EAAA;AAAA,CAAA,CAAA;;;ACX3D,IAGa,SAAA;AAHb,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAAA,YAAAA,EAAAA;AACO,IAAM,YAAN,MAAgB;AAAA,MACnB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,mBAAA,EAAoB;AAClD,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,WAAA,CAAY,CAAC,CAAA;AAClC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,mBAAA,EAAqB;AAAA,KACzC,EAAG,SAAA,CAAU,SAAA,EAAW,oBAAA,EAAsB,MAAM,CAAA;AACpD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW;AAAA,KAC5C,EAAG,SAAA,CAAU,SAAA,EAAW,WAAA,EAAa,MAAM,CAAA;AAC3C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,YAAY,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,CAAA,EAAG;AAAA,KACnF,EAAG,SAAA,CAAU,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClBvC,IAIa,OAAA;AAJb,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAAA,YAAAA,EAAAA;AACO,IAAM,UAAN,MAAc;AAAA,MACjB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,OAAA,GAAU,IAAI,MAAA,EAAO;AAC1B,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ;AAAA,KAC5B,EAAG,OAAA,CAAQ,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AACvC,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,UAAA,EAAY,QAAA,EAAU,MAAM;AAAA,KACrE,EAAG,OAAA,CAAQ,SAAA,EAAW,yBAAA,EAA2B,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACfvD,IAKa,UAAA;AALb,IAAA,gBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,8DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAAA,YAAAA,EAAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAAF,WAAAA,EAAAA;AACO,IAAM,aAAN,MAAiB;AAAA,MACpB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,UAAUC,QAAAA,CAAQ,EAAA;AACvB,QAAA,IAAA,CAAK,cAAc,EAAC;AACpB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,OAAA,EAAS,SAAS,CAAA,EAAG,YAAA,EAAcA,QAAAA,CAAQ,EAAA,EAAI;AAAA,KAChF,EAAG,UAAA,CAAW,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAC1C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KAC7D,EAAG,UAAA,CAAW,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AAChD,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,YAAY;AAAA,KACnD,EAAG,UAAA,CAAW,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAC9C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,GAAG,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY;AAAA,KACjF,EAAG,UAAA,CAAW,SAAA,EAAW,mBAAA,EAAqB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACvBpD,IAIa,WAAA;AAJb,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+DAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,gBAAA,EAAA;AACO,IAAM,cAAN,MAAkB;AAAA,MACrB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,UAAA,GAAa,IAAI,UAAA,EAAW;AACjC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,QAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,MAAM;AAAA,KAC3C,EAAG,WAAA,CAAY,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAC9C,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,IAAA,EAAM,OAAA,EAAS,GAAG;AAAA,KAC3D,EAAG,WAAA,CAAY,SAAA,EAAW,mBAAA,EAAqB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACfrD,IAAW,kBAAA;AAAX,IAAA,yBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AACA,IAAA,CAAC,SAAUkB,mBAAAA,EAAoB;AAC3B,MAAAA,mBAAAA,CAAmBA,mBAAAA,CAAmB,YAAY,CAAA,GAAI,CAAC,CAAA,GAAI,YAAA;AAC3D,MAAAA,mBAAAA,CAAmBA,mBAAAA,CAAmB,kBAAkB,CAAA,GAAI,CAAC,CAAA,GAAI,kBAAA;AACjE,MAAAA,mBAAAA,CAAmBA,mBAAAA,CAAmB,eAAe,CAAA,GAAI,CAAC,CAAA,GAAI,eAAA;AAC9D,MAAAA,mBAAAA,CAAmBA,mBAAAA,CAAmB,UAAU,CAAA,GAAI,CAAC,CAAA,GAAI,UAAA;AACzD,MAAAA,mBAAAA,CAAmBA,mBAAAA,CAAmB,aAAa,CAAA,GAAI,CAAC,CAAA,GAAI,aAAA;AAC5D,MAAAA,mBAAAA,CAAmBA,mBAAAA,CAAmB,cAAc,CAAA,GAAI,CAAC,CAAA,GAAI,cAAA;AAAA,IACjE,CAAA,EAAG,kBAAA,KAAuB,kBAAA,GAAqB,EAAC,CAAE,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACRlD,IAEa,aAAA;AAFb,IAAA,mBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,iEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACO,IAAM,gBAAN,MAAoB;AAAA,MACvB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,YAAA,GAAe,EAAA;AACpB,QAAA,IAAA,CAAK,QAAA,GAAW,IAAIvD,YAAAA,EAAY;AAChC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,kBAAkB;AAAA,KACnD,EAAG,aAAA,CAAc,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAA;AAClD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAMA,YAAAA,EAAa;AAAA,KACjC,EAAG,aAAA,CAAc,SAAA,EAAW,UAAA,EAAY,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACd9C,IAIa,YAAA;AAJb,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gEAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACA,IAAA,mBAAA,EAAA;AACO,IAAM,eAAN,MAAmB;AAAA,MACtB,WAAA,CAAY,MAAA,GAAS,EAAC,EAAG;AACrB,QAAA,IAAA,CAAK,iBAAiB,kBAAA,CAAmB,UAAA;AACzC,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC9B;AAAA,KACJ;AACA,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,YAAA,CAAa,YAAY;AAAA,KAC7C,EAAG,YAAA,CAAa,SAAA,EAAW,gBAAA,EAAkB,MAAM,CAAA;AACnD,IAAA,UAAA,CAAW;AAAA,MACP,OAAA,CAAQ,EAAE,IAAA,EAAM,aAAA,EAAe,SAAS,CAAA,EAAG,QAAA,EAAU,MAAM;AAAA,KAC/D,EAAG,YAAA,CAAa,SAAA,EAAW,eAAA,EAAiB,MAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACflD,IAAAsC,YAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wDAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAa,gBAAAA,EAAAA;AACA,IAAA,wBAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,gBAAA,EAAA;AACA,IAAAG,wBAAAA,EAAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,yBAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,mBAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AACA,IAAA,gBAAA,EAAA;AACA,IAAAlB,WAAAA,EAAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACqWA,eAAe,SAAA,CACX,KAAA,EACA,MAAA,EACA,MAAA,EACa;AACb,EAAA,MAAM,UAAU,cAAA,CAAe,IAAI,WAAW,KAAA,CAAM,SAAS,GAAG,EAAE,CAAA;AAClE,EAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,MAAA,CAAO,UAAU,OAAO,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA,IAClC,MAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,OAAA,EAAQ;AAAA,IACrC,KAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACb;AACA,EAAA,MAAM,EAAA,GAAK,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA;AAAA,IAC3B,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,IACjC,SAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACJ;AACA,EAAA,IAAI,CAAC,EAAA,EAAI;AACL,IAAA,MAAM,IAAI,KAAA;AAAA,MACN,CAAA,6CAAA,EAAgD,OAAO,OAAO,CAAA;AAAA,KAClE;AAAA,EACJ;AACJ;AAQA,SAASoB,yBAAwB,GAAA,EAAqB;AAClD,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA;AAC7C,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC/B,EAAA,OAAO,OAAO,IAAA,GAAO,KAAK,EACrB,QAAA,CAAS,EAAE,EACX,WAAA,EAAY;AACrB;AAGA,SAASC,YAAW,KAAA,EAAyC;AACzD,EAAA,MAAM,OAAO,KAAA,YAAiB,UAAA,GAAa,KAAA,GAAQ,IAAI,WAAW,KAAK,CAAA;AACvE,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AAClC,IAAA,GAAA,IAAO,IAAA,CAAK,CAAC,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,GAAA;AACX;AAGA,SAAS,iBAAiB,GAAA,EAAyB;AAC/C,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA;AAC7C,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,GAAS,CAAA,KAAM,CAAA,GAAI,QAAQ,GAAA,GAAM,KAAA;AACtD,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,MAAA,CAAO,SAAS,CAAC,CAAA;AAC5C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,GAAA;AACX;AAjbA,IA2BM,2BAAA,EAkBO,UAAA;AA7Cb,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,WAAA,EAAA;AACA,IAAAnB,YAAAA,EAAAA;AAQA,IAAAA,YAAAA,EAAAA;AAGA,IAAA,iBAAA,EAAA;AACA,IAAA,eAAA,EAAA;AAcA,IAAM,2BAAA,GAA8B,CAAA,GAAI,EAAA,GAAK,IAAA,GAAO,GAAA;AAkB7C,IAAM,aAAN,MAAiB;AAAA,MACH,OAAA;AAAA,MACA,KAAA;AAAA,MAEjB,WAAA,CAAY,IAAA,GAA0B,EAAC,EAAG;AACtC,QAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA,IAAW,UAAA,CAAW,KAAA,CAAM,KAAK,UAAU,CAAA;AAC/D,QAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAAA,MACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,MAAM,YAAA,CACF,WAAA,EACA,UAAA,EACmB;AACnB,QAAA,MAAM,gBAAgB,IAAI,UAAA,CAAW,UAAA,CAAW,WAAA,CAAY,eAAe,CAAA;AAC3E,QAAA,MAAM,sBAAsB,IAAI,UAAA;AAAA,UAC5B,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,SAAS,aAAa;AAAA,SACrD;AAEA,QAAA,MAAM,kBAAA,GAAqB,MAAM,IAAA,CAAK,oBAAA,CAAqB,UAAU,CAAA;AAErE,QAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO;AAAA,UACtB,aAAA,EAAe,IAAI,mBAAA,CAAoB;AAAA,YAAE,SAAA,EAAW;AAAA;AAAA,WAA4B,CAAA;AAAA,UAChF,cAAA,EAAgB,IAAItC,YAAAA,CAAY,mBAAmB,CAAA;AAAA,UACnD,aAAA,EAAe,IAAIA,YAAAA,CAAY,kBAAkB,CAAA;AAAA,UACjD,YAAA,EAAc,gBAAA,CAAiB,WAAA,CAAY,YAAY,CAAA,CAAE;AAAA,SAC5D,CAAA;AAED,QAAA,MAAM,OAAA,GAAU,IAAI,WAAA,CAAY;AAAA,UAC5B,UAAA,EAAY,IAAI,UAAA,CAAW;AAAA,YACvB,WAAA,EAAa,CAAC,IAAI,OAAA,CAAQ,EAAE,OAAA,EAAS,MAAA,EAAQ,CAAC;AAAA,WACjD;AAAA,SACJ,CAAA;AACD,QAAA,OAAO,IAAI,UAAA,CAAW,UAAA,CAAW,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,MACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,MAAM,WAAA,CACF,GAAA,EACA,UAAA,EAC6B;AAC7B,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,UACrC,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,0BAAA,EAA2B;AAAA,UACtD,IAAA,EAAM;AAAA,SACT,CAAA;AACD,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,SAAS,MAAM,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAAA;AAAA,QAC3E;AACA,QAAA,MAAM,cAAc,IAAI,UAAA,CAAW,MAAM,QAAA,CAAS,aAAa,CAAA;AAC/D,QAAA,MAAM,MAAA,GAAS,UAAA,CAAW,KAAA,CAAM,WAAA,EAAa,YAAY,CAAA;AACzD,QAAA,IAAI,MAAA,CAAO,mBAAmB,CAAA,EAAG;AAC7B,UAAA,MAAM,IAAI,KAAA;AAAA,YACN,CAAA,mCAAA,EAAsC,MAAA,CAAO,cAAc,CAAA,KAAA,EAAQ,GAAG,CAAA;AAAA,WAC1E;AAAA,QACJ;AACA,QAAA,IACI,CAAC,MAAA,CAAO,aAAA,IACR,MAAA,CAAO,aAAA,CAAc,iBAAiB,sBAAA,EACxC;AACE,UAAA,MAAM,IAAI,MAAM,CAAA,uCAAA,CAAyC,CAAA;AAAA,QAC7D;AAIA,QAAA,MAAM,QAAQ,UAAA,CAAW,KAAA;AAAA,UACrB,IAAI,UAAA,CAAW,MAAA,CAAO,aAAA,CAAc,SAAS,MAAM,CAAA;AAAA,UACnD;AAAA,SACJ;AACA,QAAA,OAAO,EAAE,OAAO,WAAA,EAAY;AAAA,MAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,MAAM,cAAA,CACF,QAAA,EACA,UAAA,EACa;AACb,QAAA,MAAM,EAAE,OAAM,GAAI,QAAA;AAIlB,QAAA,MAAM,MAAA,GAAS,KAAA,CAAM,kBAAA,GACf,IAAI,WAAW,KAAA,CAAM,kBAAkB,CAAA,GACvC,IAAI,UAAA,CAAW,UAAA,CAAW,SAAA,CAAU,KAAA,CAAM,eAAe,CAAC,CAAA;AAGhE,QAAA,IAAI;AACA,UAAA,MAAM,SAAA,CAAU,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AACzC,UAAA;AAAA,QACJ,CAAA,CAAA,MAAQ;AAAA,QAER;AAGA,QAAA,MAAM,aAAA,GAAA,CAAoC,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG,GAAA;AAAA,UACzD,CAAC,QACG,IAAI0D,oBAAAA;AAAA,YACA,IAAI,UAAA,CAAW,UAAA,CAAW,SAAA,CAAU,GAAG,CAAC;AAAA;AAC5C,SACR;AACA,QAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC5B,UAAA,MAAM,IAAI,KAAA;AAAA,YACN;AAAA,WACJ;AAAA,QACJ;AAIA,QAAA,IAAI,wBAAA,GAA2B,KAAA;AAC/B,QAAA,MAAM,OAAA,GAAU,IAAI,YAAA,EAAa;AACjC,QAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACnC,UAAA,MAAM,GAAA,GAAM,SAAA,CAAU,YAAA,CAAaC,8BAAyB,CAAA;AAC5D,UAAA,IAAI,CAAC,GAAA,IAAO,CAAC,IAAI,MAAA,CAAO,QAAA,CAAS,mBAAmB,CAAA,EAAG;AACnD,YAAA,wBAAA,GAA2B,IAAA;AAC3B,YAAA;AAAA,UACJ;AAGA,UAAA,IAAI;AACA,YAAA,MAAM,QAAQ,KAAA,CAAM,SAAA,EAAW,CAAC,UAAU,CAAA,EAAG,EAAE,CAAA;AAAA,UACnD,CAAA,CAAA,MAAQ;AACJ,YAAA;AAAA,UACJ;AACA,UAAA,IAAI;AACA,YAAA,MAAM,SAAA,CAAU,KAAA,EAAO,MAAA,EAAQ,SAAS,CAAA;AACxC,YAAA;AAAA,UACJ,CAAA,CAAA,MAAQ;AACJ,YAAA;AAAA,UACJ;AAAA,QACJ;AACA,QAAA,IAAI,wBAAA,EAA0B;AAC1B,UAAA,MAAM,IAAI,KAAA;AAAA,YACN;AAAA,WACJ;AAAA,QACJ;AACA,QAAA,MAAM,IAAI,KAAA;AAAA,UACN;AAAA,SACJ;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,eACI,QAAA,EACA,WAAA,EACA,GAAA,EACA,IAAA,GAA2B,EAAC,EACZ;AAChB,QAAA,MAAM,MAAA,GAAS,KAAK,gBAAA,IAAoB,2BAAA;AACxC,QAAA,MAAM,iBAAA,GAAoBH,wBAAAA,CAAwB,WAAA,CAAY,YAAY,CAAA;AAE1E,QAAA,MAAM,SAAS,QAAA,CAAS,KAAA,CAAM,gBAAgB,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM;AAChE,UAAA,MAAM,SAAA,GAAYC,WAAAA,CAAW,CAAA,CAAE,MAAA,CAAO,YAAY,CAAA;AAClD,UAAA,OAAOD,wBAAAA,CAAwB,SAAS,CAAA,KAAM,iBAAA;AAAA,QAClD,CAAC,CAAA;AACD,QAAA,IAAI,CAAC,MAAA,EAAQ;AACT,UAAA,MAAM,IAAI,KAAA;AAAA,YACN,CAAA,2DAAA,EAA8D,YAAY,YAAY,CAAA;AAAA,WAC1F;AAAA,QACJ;AAEA,QAAA,MAAM,aAAa,MAAA,CAAO,UAAA;AAC1B,QAAA,IAAI,IAAI,OAAA,EAAQ,GAAI,UAAA,CAAW,OAAA,KAAY,MAAA,EAAQ;AAC/C,UAAA,MAAM,IAAI,KAAA;AAAA,YACN,sCAAsC,UAAA,CAAW,WAAA,EAAa,CAAA,MAAA,EAAS,GAAA,CAAI,aAAa,CAAA;AAAA,WAC5F;AAAA,QACJ;AAKA,QAAA,MAAM,SAAS,MAAA,CAAO,UAAA;AACtB,QAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAW;AAC3B,UAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,WAAW,GAAA,EAAI;AAAA,QAC5D;AACA,QAAA,IAAI,MAAA,CAAO,YAAY,MAAA,EAAW;AAC9B,UAAA,MAAM,MAAA,GAAS,OAAO,OAAA,CAAQ,gBAAA;AAC9B,UAAA,OAAO;AAAA,YACH,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAW,OAAO,OAAA,CAAQ,cAAA;AAAA,YAC1B,gBAAA,EAAkB,MAAA,KAAW,MAAA,GAAY,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AAAA,YAC1D,SAAA,EAAW;AAAA,WACf;AAAA,QACJ;AACA,QAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,WAAW,GAAA,EAAI;AAAA,MAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBA,MAAM,YACF,WAAA,EACA,UAAA,EACA,KACA,GAAA,mBAAY,IAAI,MAAK,EACI;AACzB,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,oBAAA,CAAqB,UAAU,CAAA;AAC1D,QAAA,MAAM,UAAA,GAAaC,YAAW,OAAO,CAAA;AACrC,QAAA,MAAM,WAAW,CAAA,KAAA,EAAQ,UAAU,IAAI,WAAA,CAAY,YAAA,CAAa,aAAa,CAAA,CAAA;AAE7E,QAAA,IAAI,KAAK,KAAA,EAAO;AACZ,UAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAI,QAAQ,CAAA;AACzC,UAAA,IAAI,GAAA,EAAK;AACL,YAAA,MAAMG,SAAAA,GAAiC;AAAA,cACnC,KAAA,EAAO,UAAA,CAAW,KAAA,CAAM,GAAA,EAAK,iBAAiB,CAAA;AAAA,cAC9C,WAAA,EAAa;AAAA,aACjB;AAEA,YAAA,MAAM,IAAA,CAAK,cAAA,CAAeA,SAAAA,EAAU,UAAU,CAAA;AAC9C,YAAA,OAAO,IAAA,CAAK,cAAA,CAAeA,SAAAA,EAAU,WAAA,EAAa,GAAG,CAAA;AAAA,UACzD;AAAA,QACJ;AAEA,QAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,YAAA,CAAa,aAAa,UAAU,CAAA;AAClE,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,UAAU,CAAA;AACvD,QAAA,MAAM,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,UAAU,CAAA;AAC9C,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,aAAa,GAAG,CAAA;AAE9D,QAAA,IAAI,KAAK,KAAA,EAAO;AACZ,UAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,eAAA,CAAgB,UAAU,CAAC,CAAA;AACzD,UAAA,MAAM,UAAA,GAAa,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAC/C,UAAA,MAAM,SAAA,GAAY,IAAA;AAClB,UAAA,MAAM,GAAA,GACF,UAAA,KAAe,MAAA,GACT,IAAA,CAAK,GAAA;AAAA,YACD,IAAA,CAAK,GAAA;AAAA,cACD,KAAK,KAAA,CAAA,CAAO,UAAA,GAAa,GAAA,CAAI,OAAA,MAAa,GAAI,CAAA;AAAA,cAC9C;AAAA,aACJ;AAAA,YACA;AAAA,WACJ,GACA,SAAA;AACV,UAAA,MAAM,KAAK,KAAA,CAAM,GAAA;AAAA,YACb,QAAA;AAAA,YACA,IAAI,UAAA,CAAW,UAAA,CAAW,SAAA,CAAU,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,YACnD;AAAA,WACJ;AAAA,QACJ;AACA,QAAA,OAAO,OAAA;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAc,qBACV,UAAA,EACmB;AACnB,QAAA,MAAM,OAAO,UAAA,CAAW,KAAA;AAAA,UACpB,IAAI,UAAA,CAAW,UAAA,CAAW,SAAA,CAAU,OAAO,CAAA;AAAA,UAC3C;AAAA,SACJ;AACA,QAAA,OAAO,IAAI,UAAA;AAAA,UACP,MAAM,OAAO,MAAA,CAAO,MAAA,CAAO,SAAS,IAAI,UAAA,CAAW,IAAA,CAAK,gBAAgB,CAAC;AAAA,SAC7E;AAAA,MACJ;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACpPA,SAAS,eAAe,IAAA,EAA2C;AAC/D,EAAA,MAAM,GAAA,GAAM,KAAK,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,mBAAmB,CAAA;AACtE,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,WAAW,KAAA,CAAM,IAAI,WAAW,GAAA,CAAI,KAAK,GAAG,yBAAyB,CAAA;AACjF,IAAA,KAAA,MAAW,QAAQ,GAAA,EAAK;AACpB,MAAA,IAAI,IAAA,CAAK,iBAAiB,oBAAA,EAAsB;AAC5C,QAAA,MAAM,GAAA,GAAM,KAAK,cAAA,CAAe,yBAAA;AAChC,QAAA,IAAI,KAAK,OAAO,GAAA;AAAA,MACpB;AAAA,IACJ;AAAA,EACJ,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,eAAe,IAAA,EAAiC;AACrD,EAAA,MAAM,GAAA,GAAM,KAAK,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,WAAW,CAAA;AAC9D,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,WAAW,KAAA,CAAM,IAAI,WAAW,GAAA,CAAI,KAAK,GAAG,qBAAqB,CAAA;AAC7E,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AAClB,MAAA,MAAM,QAAA,GAAW,GAAG,iBAAA,EAAmB,QAAA;AACvC,MAAA,IAAI,CAAC,QAAA,EAAU;AACf,MAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACvB,QAAA,IAAI,EAAA,CAAG,yBAAA,EAA2B,GAAA,CAAI,IAAA,CAAK,GAAG,yBAAyB,CAAA;AAAA,MAC3E;AAAA,IACJ;AACA,IAAA,OAAO,GAAA;AAAA,EACX,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,EAAC;AAAA,EACZ;AACJ;AAzJA,IAyBa,iBAAA;AAzBb,IAAA,sBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gCAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAAtB,YAAAA,EAAAA;AAIA,IAAA,WAAA,EAAA;AAEA,IAAA,WAAA,EAAA;AAEA,IAAA,eAAA,EAAA;AAEA,IAAA,eAAA,EAAA;AAeO,IAAM,oBAAN,MAAwB;AAAA,MACV,MAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAA;AAAA,MAEjB,YAAY,IAAA,EAAgC;AACxC,QAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,QAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW,EAAE,OAAA,EAAS,KAAK,OAAA,EAAS,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AACvE,QAAA,IAAA,CAAK,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,OAAA,EAAS,KAAK,OAAA,EAAS,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,MAC1E;AAAA,MAEA,MAAM,KAAA,CACF,WAAA,EACA,YACA,GAAA,mBAAY,IAAI,MAAK,EACI;AACzB,QAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAQ;AACxB,UAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,WAAW,GAAA,EAAI;AAAA,QAC5D;AAEA,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,WAAW,CAAA;AAE1C,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC9C,UAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC3B,YAAA,MAAM,IAAIzD,kCAAA;AAAA,cACN,CAAA,kCAAA,EAAqC,YAAY,OAAO,CAAA;AAAA,aAC5D;AAAA,UACJ;AACA,UAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,WAAW,GAAA,EAAI;AAAA,QAC/D;AAGA,QAAA,IAAI,MAAM,OAAA,EAAS;AACf,UAAA,IAAI;AACA,YAAA,OAAO,MAAM,KAAK,IAAA,CAAK,WAAA,CAAY,aAAa,UAAA,EAAY,KAAA,CAAM,SAAS,GAAG,CAAA;AAAA,UAClF,SAAS,GAAA,EAAK;AAIV,YAAA,OAAA,CAAQ,IAAA;AAAA,cACJ,CAAA,kCAAA,EAAqC,YAAY,OAAO,CAAA,KAAA,EAAQ,MAAM,OAAO,CAAA,uBAAA,EAA2B,IAAc,OAAO,CAAA;AAAA,aACjI;AAAA,UACJ;AAAA,QACJ;AAGA,QAAA,KAAA,MAAW,GAAA,IAAO,MAAM,OAAA,EAAS;AAC7B,UAAA,IAAI;AACA,YAAA,MAAM,SAAS,MAAM,IAAA,CAAK,GAAA,CAAI,mBAAA,CAAoB,KAAK,GAAG,CAAA;AAC1D,YAAA,MAAM,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,MAAA,EAAQ,UAAU,CAAA;AAC3C,YAAA,IAAI,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,EAAG;AAC/B,cAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC3B,gBAAA,MAAM,IAAIA,kCAAA;AAAA,kBACN,YAAY,GAAG,CAAA,sBAAA,EAAyB,MAAA,CAAO,UAAA,CAAW,aAAa,CAAA,CAAA;AAAA,iBAC3E;AAAA,cACJ;AACA,cAAA;AAAA,YACJ;AACA,YAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,MAAA,EAAQ,YAAY,YAAY,CAAA;AACnE,YAAA,IAAI,OAAA,CAAQ,WAAW,SAAA,EAAW;AAC9B,cAAA,OAAO;AAAA,gBACH,MAAA,EAAQ,SAAA;AAAA,gBACR,MAAA,EAAQ,KAAA;AAAA,gBACR,WAAW,OAAA,CAAQ,SAAA;AAAA,gBACnB,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,gBAC1B,SAAA,EAAW;AAAA,eACf;AAAA,YACJ;AACA,YAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,WAAW,GAAA,EAAI;AAAA,UAC3D,SAAS,GAAA,EAAK;AACV,YAAA,IAAI,GAAA,YAAeA,oCAA4B,MAAM,GAAA;AACrD,YAAA,OAAA,CAAQ,IAAA;AAAA,cACJ,oCAAoC,WAAA,CAAY,OAAO,QAAQ,GAAG,CAAA,EAAA,EAAM,IAAc,OAAO,CAAA;AAAA,aACjG;AACA,YAAA;AAAA,UACJ;AAAA,QACJ;AAGA,QAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC3B,UAAA,MAAM,IAAIA,kCAAA;AAAA,YACN,CAAA,kCAAA,EAAqC,YAAY,OAAO,CAAA;AAAA,WAC5D;AAAA,QACJ;AACA,QAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,WAAW,GAAA,EAAI;AAAA,MAC/D;AAAA,MAEQ,YAAY,IAAA,EAAgE;AAChF,QAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,QAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,QAAA,OAAO,EAAE,SAAS,OAAA,EAAQ;AAAA,MAC9B;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7FO,SAAS,OACZ,IAAA,EACkC;AAElC,EAAA,IAAI,MAAA;AACJ,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACpB,IAAA,MAAM,MAAA,GAAS,YAAY,GAAG,CAAA;AAC9B,IAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,MAAA;AAC9B,IAAA,IAAI,MAAA,KAAW,eAAe,MAAA,GAAS,aAAA;AAAA,EAC3C;AACA,EAAA,OAAO,MAAA;AACX;AAnCA,IAUa,WAAA;AAVb,IAAA,qBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+BAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAUO,IAAM,WAAA,GAAgE,OAAO,MAAA,CAAO;AAAA;AAAA;AAAA;AAAA,MAIvF,8EAAA,EACI,aAAA;AAAA,MACJ,uEAAA,EACI,MAAA;AAAA,MACJ,sEAAA,EACI,aAAA;AAAA,MACJ,+DAAA,EACI;AAAA,KACP,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACbM,SAAS,sBAAsB,OAAA,EAGpC;AACE,EAAA,MAAM,SAAA,GACF,QAAQ,qBAAA,CAAsB,QAAA,CAAS,QAAQ,CAAA,IAC/C,OAAA,CAAQ,aAAA,CAAc,QAAA,CAAS,UAAU,CAAA;AAC7C,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,gCAAgC,CAAA;AAC3D,EAAA,OAAO,QAAQ,MAAA,GAAY,EAAE,WAAW,GAAA,EAAI,GAAI,EAAE,SAAA,EAAU;AAChE;AAlBA,IAAA,qBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+BAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,IAAA,qBAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,0BAAA,GAAA,EAAA;AAAA,QAAA,CAAA,0BAAA,EAAA;AAAA,EAAA,kBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAwCA,SAAS,cAAA,CAAe,SAAqB,SAAA,EAA4B;AACrE,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,YAAA,EAAc;AACrC,IAAA,MAAM,GAAA,GAAM,UAAU,IAAI,CAAA;AAC1B,IAAA,IAAI,GAAA,IAAO,GAAA,KAAQ,SAAA,EAAW,OAAO,IAAA;AAAA,EACzC;AACA,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,eAAA,CACL,SACA,SAAA,EACkB;AAClB,EAAA,MAAM,OAAA,GAAU,sBAAsB,OAAO,CAAA;AAC7C,EAAA,MAAM,UAAA,GAA+C;AAAA,IACjD,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,GAAG;AAAA,GACP;AACA,EAAA,OAAO;AAAA,IACH,UAAA;AAAA,IACA,mBAAA,EAAqB,CAAC,SAAS;AAAA,GACnC;AACJ;AA9DA,IAsBa,kBAAA;AAtBb,IAAA,uBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,iCAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAEA,IAAA,qBAAA,EAAA;AACA,IAAA,eAAA,EAAA;AAmBO,IAAM,qBAAN,MAAyB;AAAA,MAC5B,OAAA,CACI,QACA,WAAA,EACyB;AACzB,QAAA,MAAM,SAAA,GAAY,UAAU,MAAM,CAAA;AAClC,QAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,QAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC1B,UAAA,KAAA,MAAW,OAAA,IAAW,GAAG,QAAA,EAAU;AAC/B,YAAA,IAAI,cAAA,CAAe,OAAA,EAAS,SAAS,CAAA,EAAG;AACpC,cAAA,OAAO,eAAA,CAAgB,SAAS,SAAS,CAAA;AAAA,YAC7C;AAAA,UACJ;AAAA,QACJ;AACA,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtCA,IAAA,sBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAwJA,SAAS,WAAW,IAAA,EAAuB;AACvC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAagE,oCAA+B,CAAA;AAC7D,EAAA,MAAM,WAAW,GAAA,EAAK,KAAA;AACtB,EAAA,MAAM,QAAA,GAAW,QAAA,GAAW,UAAA,CAAW,QAAQ,CAAA,GAAI,MAAA;AACnD,EAAA,OAAO;AAAA,IACH,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,GAAA,EAAK;AAAA,GACT;AACJ;AAEA,SAAS,WAAW,CAAA,EAAuB;AACvC,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AACzC,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,KAAA,CAAM,SAAS,CAAC,CAAA;AAC3C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,GAAA;AACX;AAEA,SAAS,mBAAmB,MAAA,EAAwC;AAChE,EAAA,IAAI,MAAA,CAAO,mBAAA,IAAuB,MAAA,CAAO,mBAAA,CAAoB,SAAS,CAAA,EAAG;AACrE,IAAA,OAAO,MAAA,CAAO,mBAAA;AAAA,EAClB;AAEA,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,CAAO,WAAW,CAAA;AACxC,EAAA,OAAO,GAAA,GAAM,CAAC,GAAG,CAAA,GAAI,EAAC;AAC1B;AAEA,eAAe,iBAAA,CACX,OACA,MAAA,EAC4C;AAC5C,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,EAAQ,OAAO,MAAA;AACrC,EAAA,MAAM,OAAA,GAAU,KAAA;AAGhB,EAAA,IAAI,OAAO,OAAA,CAAQ,cAAA,KAAmB,UAAA,EAAY,OAAO,MAAA;AACzD,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,EAAe;AACzC,IAAA,MAAM,EAAE,kBAAA,EAAAgB,mBAAAA,EAAmB,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,uBAAA,EAAA,EAAA,0BAAA,CAAA,CAAA;AACrC,IAAA,MAAM,WAAW,IAAIA,mBAAAA,GAAqB,OAAA,CAAQ,MAAA,CAAO,aAAa,GAAG,CAAA;AACzE,IAAA,OAAO,QAAA,EAAU,UAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACV,IAAA,OAAA,CAAQ,IAAA;AAAA,MACJ,4CAA4C,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA,QAAA,EAAO,IAAc,OAAO,CAAA;AAAA,KACtG;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AACJ;AAxMA,IAiDa,cAAA;AAjDb,IAAA,mBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,6BAAA,GAAA;AAAA,IAAA,qBAAA,EAAA;AAIA,IAAA,WAAA,EAAA;AAEA,IAAA,iBAAA,EAAA;AAEA,IAAA,sBAAA,EAAA;AAIA,IAAA,eAAA,EAAA;AAqCO,IAAM,iBAAN,MAAqB;AAAA,MAKxB,YAA6B,IAAA,EAA6B;AAA7B,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACzB,QAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,QAAA,IAAA,CAAK,YAAA,GAAe,IAAI,YAAA,CAAa,IAAI,CAAA;AACzC,QAAA,MAAM,MAAA,GAAS,KAAK,gBAAA,IAAoB,MAAA;AAExC,QAAA,IAAA,CAAK,iBAAA,GAAoB,IAAI,iBAAA,CAAkB;AAAA,UAC3C,MAAA;AAAA,UACA,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,OAAO,IAAA,CAAK;AAAA,SACf,CAAA;AAAA,MACL;AAAA,MAV6B,IAAA;AAAA,MAJZ,UAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MAcjB,MAAM,QAAA,CACF,IAAA,EACA,OAAA,GAA2B,EAAC,EACE;AAC9B,QAAA,MAAM,IAAA,GAAO,WAAW,IAAI,CAAA;AAC5B,QAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,QAAA,MAAM,UAAyB,EAAC;AAChC,QAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAyB;AACzC,UAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACnB,YAAA,MAAM,GAAA,GAAM,EAAE,WAAA,CAAY,YAAA;AAC1B,YAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,YAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,YAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,UAClB;AAAA,QACJ,CAAA;AACA,QAAA,UAAA,CAAW,MAAM,IAAA,CAAK,UAAA,CAAW,UAAA,CAAW,IAAI,CAAC,CAAA;AAIjD,QAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,aAAA,IAAiB,EAAC,EAAG;AAC7C,UAAA,UAAA,CAAW,MAAM,IAAA,CAAK,UAAA,CAAW,WAAW,UAAA,CAAW,KAAK,CAAC,CAAC,CAAA;AAAA,QAClE;AACA,QAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACtB,UAAA,MAAM,IAAInF,gCAAA;AAAA,YACN,CAAA,2BAAA,EAA8B,IAAA,CAAK,MAAA,IAAU,QAAQ,CAAA;AAAA,WACzD;AAAA,QACJ;AACA,QAAA,MAAM,cAAc,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AACpD,QAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,YAAA,CAAa,KAAA;AAAA,UAClC,IAAA;AAAA,UACA,WAAA;AAAA,UACA,OAAA,CAAQ,iBAAiB;AAAC,SAC9B;AACA,QAAA,MAAM,YAAA,GAAe,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAM3C,QAAA,MAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,UAAK,CAAC,CAAA,KACzB,iBAAA,CAAkB,CAAA,CAAE,aAAa,YAAY;AAAA,SACjD;AACA,QAAA,IAAI,CAAC,MAAA,EAAQ;AACT,UAAA,MAAM,IAAIA,gCAAA;AAAA,YACN,CAAA,eAAA,EAAkB,aAAa,OAAO,CAAA,4CAAA;AAAA,WAC1C;AAAA,QACJ;AAIA,QAAA,MAAM,sBAAsB,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,GAAI,YAAA;AAC1D,QAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,iBAAA,CAAkB,KAAA;AAAA,UAC5C,IAAA;AAAA,UACA;AAAA,SACJ;AAEA,QAAA,IAAI,UAAA,CAAW,WAAW,SAAA,EAAW;AACjC,UAAA,MAAM,IAAIE,+BAAA;AAAA,YACN,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,WAAA,CAAA;AAAA,YAC3B;AAAA,cACI,QAAQ,IAAA,CAAK,YAAA;AAAA,cACb,WAAW,UAAA,CAAW,SAAA;AAAA,cACtB,QAAQ,UAAA,CAAW;AAAA;AACvB,WACJ;AAAA,QACJ;AAEA,QAAA,MAAM,mBAAA,GAAsB,mBAAmB,MAAM,CAAA;AACrD,QAAA,MAAM,UAAA,GAAa,MAAM,iBAAA,CAAkB,IAAA,CAAK,YAAY,MAAM,CAAA;AAElE,QAAA,OAAO;AAAA,UACH,KAAA;AAAA,UACA,MAAA;AAAA;AAAA;AAAA,UAGA,gBAAA,EACI,WAAW,MAAA,KAAW,MAAA,IAAU,WAAW,MAAA,KAAW,MAAA,GAChD,YACA,UAAA,CAAW,MAAA;AAAA,UACrB,qBAAqB,UAAA,CAAW,SAAA;AAAA,UAChC,mBAAA;AAAA,UACA,GAAI,UAAA,GAAa,EAAE,UAAA,KAAe;AAAC,SACvC;AAAA,MACJ;AAAA,KACJ;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtJA,qBAAA,EAAA;AAQA,qBAAA,EAAA;;;ACRA,qBAAA,EAAA;AAKO,SAAS,0BAAA,CACZ,OACA,KAAA,EACoB;AACpB,EAAA,IAAI,CAAC,KAAA,CAAM,QAAA,EAAU,MAAM,IAAI,UAAU,sBAAsB,CAAA;AAC/D,EAAA,IAAI,CAAC,KAAA,CAAM,KAAA,EAAO,MAAM,IAAI,UAAU,mBAAmB,CAAA;AACzD,EAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAa,MAAM,IAAI,UAAU,yBAAyB,CAAA;AAErE,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAASkF,OAAA,EAAO;AACpC,EAAA,MAAM,YAAA,GAAe,MAAM,YAAA,IAAgB,aAAA;AAE3C,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,IAC/B,aAAA,EAAe,UAAA;AAAA,IACf,aAAA,EAAe,YAAA;AAAA,IACf,cAAc,KAAA,CAAM,WAAA;AAAA,IACpB,WAAW,KAAA,CAAM,QAAA;AAAA,IACjB,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,KAAA;AAAA,IACA,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,KAAK;AAAA,GACnC,CAAA;AAED,EAAA,OAAO;AAAA,IACH,GAAA,EAAK,CAAA,sBAAA,EAAyB,MAAA,CAAO,QAAA,EAAU,CAAA,CAAA;AAAA,IAC/C,SAAA,EAAW,KAAA;AAAA,IACX,OAAO,KAAA,CAAM,KAAA;AAAA,IACb;AAAA,GACJ;AACJ;;;AChCA,qBAAA,EAAA;AAKA,WAAA,EAAA;AAMA,IAAM,4BAAA,GAAkD,CAAC,SAAA,EAAW,SAAS,CAAA;AAC7E,IAAM,yCAAyB,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAC,CAAA;AAelE,eAAsB,gCAAA,CAClB,OACA,KAAA,EACmC;AACnC,EAAA,IAAI,KAAA,CAAM,gBAAA,CAAiB,MAAA,KAAW,CAAA,EAAG;AACrC,IAAA,MAAM,IAAI9E,+BAAA;AAAA,MACN,kBAAA;AAAA,MACA;AAAA,KACJ;AAAA,EACJ;AAEA,EAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,IAAoB,OAAA;AAC7C,EAAA,IAAI,CAAC,sBAAA,CAAuB,GAAA,CAAI,UAAU,CAAA,EAAG;AACzC,IAAA,MAAM,IAAIA,+BAAA;AAAA,MACN,yBAAA;AAAA,MACA,oBAAoB,UAAU,CAAA,8CAAA;AAAA,KAClC;AAAA,EACJ;AAEA,EAAA,IAAI,CAAC,MAAM,kBAAA,IAAsB,MAAA,CAAO,KAAK,KAAA,CAAM,kBAAkB,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AACjF,IAAA,MAAM,IAAIA,+BAAA;AAAA,MACN,oBAAA;AAAA,MACA;AAAA,KACJ;AAAA,EACJ;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,IAAkB,cAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,IAAI0E,oBAAA,CAAgB,aAAA,CAAc,MAAM,gBAAA,CAAiB,CAAC,CAAC,CAAC,CAAA;AAK7E,EAAA,IAAI,cAAA,KAAmB,cAAA,IAAkB,CAAC,KAAA,CAAM,QAAA,EAAU;AACtD,IAAA,MAAM,IAAI1E,+BAAA;AAAA,MACN,kBAAA;AAAA,MACA;AAAA,KACJ;AAAA,EACJ;AAMA,EAAA,IAAI,MAAM,QAAA,EAAU;AAChB,IAAA,MAAM,WAAA,GAAc,gBAAgB,QAAQ,CAAA;AAC5C,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,KAAA,CAAM,QAAQ,CAAA,EAAG;AACvC,MAAA,MAAM,IAAIA,+BAAA;AAAA,QACN,wBAAA;AAAA,QACA,iCAAiC,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,2BAAA,EAA8B,MAAM,QAAQ,CAAA,CAAA;AAAA,OACvG;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,MAAM,mBAAmB,IAAI,UAAA;AAAA,IACzB,MAAM,MAAA,CAAO,MAAA,CAAO,UAAU,MAAA,EAAQ,KAAA,CAAM,OAAO,SAAS;AAAA,GAChE;AACA,EAAA,MAAM,QAAA,GAAW,IAAI,UAAA,CAAW,QAAA,CAAS,UAAU,OAAO,CAAA;AAC1D,EAAA,IAAI,CAAC,UAAA,CAAW,gBAAA,EAAkB,QAAQ,CAAA,EAAG;AACzC,IAAA,MAAM,IAAIA,+BAAA;AAAA,MACN,2BAAA;AAAA,MACA;AAAA,KACJ;AAAA,EACJ;AAaA,EAAA,IAAI,MAAM,0BAAA,KAA+B,IAAA,IAAS,MAAM,QAAA,CAAS,cAAa,EAAI;AAC9E,IAAA,MAAM,IAAIA,+BAAA;AAAA,MACN,kBAAA;AAAA,MACA;AAAA,KAGJ;AAAA,EACJ;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,YAAA,IAAgB,iBAAA;AAE3C,EAAA,IAAI,iBAAiB,iBAAA,EAAmB;AACpC,IAAA,IAAI,CAAC,KAAA,CAAM,aAAA,EAAe,SAAA,EAAW;AACjC,MAAA,MAAM,IAAIA,+BAAA;AAAA,QACN,wBAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,aAAA,CAAc,SAAA,CAAU,GAAA,EAAK;AACpC,MAAA,MAAM,IAAIA,+BAAA;AAAA,QACN,wBAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS8E,OAAAA,EAAO;AACpC,EAAA,MAAM,QAAA,GACF,cAAA,KAAmB,WAAA,GACb,CAAA,UAAA,EAAa,MAAM,eAAA,CAAgB,KAAA,CAAM,gBAAA,CAAiB,CAAC,CAAC,CAAC,CAAA,CAAA,GAC7D,CAAA,aAAA,EAAgB,MAAM,QAAQ,CAAA,CAAA;AACxC,EAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAExC,EAAA,MAAM,cAAA,GAA0C;AAAA,IAC5C,sBAAsB,KAAA,CAAM;AAAA,GAChC;AAEA,EAAA,IAAI,YAAA,KAAiB,iBAAA,IAAqB,KAAA,CAAM,aAAA,EAAe;AAC3D,IAAA,MAAMxE,IAAAA,GAAM,MAAM,aAAA,CAAc,kBAAA;AAChC,IAAA,IAAIA,IAAAA,KAAQ,MAAA,IAAaA,IAAAA,CAAI,MAAA,KAAW,CAAA,EAAG;AACvC,MAAA,MAAM,IAAIN,+BAAA;AAAA,QACN,4BAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ;AACA,IAAA,MAAM,MAAM,EAAE,GAAG,MAAM,aAAA,CAAc,SAAA,EAAW,KAAK,KAAA,EAAM;AAC3D,IAAA,cAAA,CAAe,IAAA,GAAO,EAAE,IAAA,EAAM,CAAC,GAAG,CAAA,EAAE;AACpC,IAAA,MAAM,SAAA,GAAYM,IAAAA,IAAO,CAAC,GAAG,4BAA4B,CAAA;AACzD,IAAA,cAAA,CAAe,uCAAA,GAA0C,SAAA;AAAA,EAC7D;AAEA,EAAA,MAAM,OAAA,GAAmC;AAAA,IACrC,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,2BAAA;AAAA,IACL,aAAA,EAAe,UAAA;AAAA,IACf,aAAA,EAAe,YAAA;AAAA,IACf,SAAA,EAAW,QAAA;AAAA,IACX,cAAc,KAAA,CAAM,WAAA;AAAA,IACpB,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,KAAA;AAAA,IACA,UAAA,EAAY,KAAA;AAAA,IACZ,eAAA,EAAiB,cAAA;AAAA,IACjB,GAAA,EAAK,GAAA;AAAA,IACL,KAAK,GAAA,GAAM;AAAA,GACf;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,gBAAA,CAAiB,GAAA,CAAI,CAAC,GAAA,KAAQ,aAAA,CAAc,GAAG,CAAC,CAAA;AAElE,EAAA,MAAM,MAAM,MAAM,IAAIyE,aAAQ,OAAO,CAAA,CAChC,mBAAmB,EAAE,GAAA,EAAK,qBAAA,EAAuB,GAAA,EAAK,YAAY,GAAA,EAAK,EACvE,IAAA,CAAK,KAAA,CAAM,OAAO,UAAU,CAAA;AAEjC,EAAA,MAAM,SAAA,GAAY,IAAI,eAAA,CAAgB;AAAA,IAClC,SAAA,EAAW,QAAA;AAAA,IACX,aAAa,KAAA,CAAM;AAAA,GACtB,CAAA;AAED,EAAA,OAAO;AAAA,IACH,GAAA,EAAK,CAAA,sBAAA,EAAyB,SAAA,CAAU,QAAA,EAAU,CAAA,CAAA;AAAA,IAClD,aAAA,EAAe,GAAA;AAAA,IACf,SAAA,EAAW,KAAA;AAAA,IACX,OAAO,KAAA,CAAM,KAAA;AAAA,IACb;AAAA,GACJ;AACJ;AAEA,SAAS,gBAAgB,IAAA,EAAiC;AAItD,EAAA,MAAM,OAAA,GAAU,WAAA;AAChB,EAAA,MAAM,GAAA,GAAM,KAAK,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA;AAC1D,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAElB,EAAA,MAAM,QAAS,GAAA,CAAkF,KAAA;AACjG,EAAA,MAAM,KAAA,GAAQ,KAAA,EAAO,KAAA,IAAS,EAAC;AAC/B,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA;AACnE;AAEA,SAAS,UAAA,CAAW,GAAe,CAAA,EAAwB;AACvD,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,IAAI,EAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,OAAO,KAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA;AACX;AAKA,eAAe,gBAAgB,OAAA,EAAsC;AACjE,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,SAAA,EAAW,aAAA,CAAc,OAAO,CAAC,CAAC,CAAA;AAC3F,EAAA,OAAO,aAAA,CAAc,MAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC1F;AAEA,SAAS,cAAc,KAAA,EAA2B;AAC9C,EAAA,IAAI,CAAA,GAAI,EAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAA,EAAK,CAAA,IAAK,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AACxE,EAAA,OAAO,KAAK,CAAC,CAAA;AACjB;AAEA,SAAS,cAAc,KAAA,EAAgC;AAGnD,EAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,KAAA,CAAM,UAAU,CAAA;AAC5C,EAAA,IAAI,UAAA,CAAW,GAAG,CAAA,CAAE,GAAA,CAAI,KAAK,CAAA;AAC7B,EAAA,OAAO,GAAA;AACX;;;ACrOA,qBAAA,EAAA;AACA,WAAA,EAAA;AAGO,IAAM,uBAAA,GAAkD;AAAA,EAC3D,uBAAA,EAAyB,mBAAA;AAAA,EACzB,yBAAA,EAA2B;AAC/B;AAEO,SAAS,eAAe,KAAA,EAAkC;AAC7D,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAIvF,2BAAA;AAAA,MACN,WAAA;AAAA,MACA,CAAA,YAAA,EAAe,MAAM,YAAY,CAAA,iCAAA,CAAA;AAAA,MACjC,KAAA,CAAM;AAAA,KACV;AAAA,EACJ;AAEA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,MAAA;AAEJ,EAAA,IAAI,KAAA,CAAM,WAAW,WAAA,EAAa;AAC9B,IAAA,IAAI,CAAC,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,SAAA,CAAU,WAAW,CAAA,EAAG;AAClD,MAAA,MAAM,IAAIA,2BAAA;AAAA,QACN,oBAAA;AAAA,QACA,CAAA,YAAA,EAAe,MAAM,YAAY,CAAA,0DAAA,CAAA;AAAA,QACjC,KAAA,CAAM;AAAA,OACV;AAAA,IACJ;AACA,IAAA,IAAA,GAAO,EAAE,UAAA,EAAY,KAAA,CAAM,SAAA,EAAU;AACrC,IAAA,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,IAAA,EAAM,CAAC,CAAC,CAAA,EAAE,CAAE,CAAA;AAAA,EACpD,CAAA,MAAO;AACH,IAAA,IAAI,CAAC,MAAM,YAAA,EAAc;AACrB,MAAA,MAAM,IAAIA,2BAAA;AAAA,QACN,mBAAA;AAAA,QACA,CAAA,YAAA,EAAe,MAAM,YAAY,CAAA,kDAAA,CAAA;AAAA,QACjC,KAAA,CAAM;AAAA,OACV;AAAA,IACJ;AACA,IAAA,IAAA,GAAO,EAAE,aAAA,EAAe,KAAA,CAAM,YAAA,EAAa;AAC3C,IAAA,MAAM,SAAA,GAAY,uBAAA,CAAwB,KAAA,CAAM,YAAY,KAAK,KAAA,CAAM,YAAA;AACvE,IAAA,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,IAAA,EAAM,CAAC,SAAA,EAAW,CAAC,CAAA,EAAE,CAAE,CAAA;AAAA,EAC/D;AAEA,EAAA,MAAM,UAAA,GAA8B;AAAA,IAChC,IAAI,KAAA,CAAM,YAAA;AAAA,IACV,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,IAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,IAAI,KAAA,CAAM,kBAAA,IAAsB,KAAA,CAAM,kBAAA,CAAmB,SAAS,CAAA,EAAG;AACjE,IAAA,UAAA,CAAW,sBAAsB,KAAA,CAAM,kBAAA;AAAA,EAC3C;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,CAAC,UAAU,CAAA,EAAE;AACvC;AAEA,IAAM,+BAAe,IAAI,GAAA,CAAY,CAAC,WAAA,EAAa,UAAU,CAAC,CAAA;AAEvD,SAAS,kBAAkB,KAAA,EAAwB;AACtD,EAAA,IAAI,CAAC,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,WAAA,CAAY,WAAW,CAAA,EAAG;AACtD,IAAA,MAAM,IAAIA,2BAAA;AAAA,MACN,aAAA;AAAA,MACA;AAAA,KACJ;AAAA,EACJ;AAEA,EAAA,IAAI,KAAA,CAAM,oBAAoB,MAAA,EAAW;AACrC,IAAA,MAAM,IAAIA,2BAAA;AAAA,MACN,4BAAA;AAAA,MACA;AAAA,KACJ;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,UAAA,IAAc,MAAM,WAAA,EAAa;AACxC,IAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AACtC,MAAA,MAAM,IAAIA,2BAAA;AAAA,QACN,oBAAA;AAAA,QACA,CAAA,YAAA,EAAe,UAAA,CAAW,EAAE,CAAA,2BAAA,EAA8B,WAAW,MAAM,CAAA,gCAAA,CAAA;AAAA,QAC3E,UAAA,CAAW;AAAA,OACf;AAAA,IACJ;AAEA,IAAA,IAAI,UAAA,CAAW,WAAW,WAAA,EAAa;AACnC,MAAA,MAAM,SAAA,GAAY,WAAW,IAAA,EAAM,UAAA;AACnC,MAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AACtC,QAAA,MAAM,IAAIA,2BAAA;AAAA,UACN,oBAAA;AAAA,UACA,CAAA,YAAA,EAAe,WAAW,EAAE,CAAA,kDAAA,CAAA;AAAA,UAC5B,UAAA,CAAW;AAAA,SACf;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAI,UAAA,CAAW,WAAW,UAAA,EAAY;AAClC,MAAA,IAAI,OAAO,UAAA,CAAW,IAAA,EAAM,aAAA,KAAkB,QAAA,EAAU;AACpD,QAAA,MAAM,IAAIA,2BAAA;AAAA,UACN,mBAAA;AAAA,UACA,CAAA,YAAA,EAAe,WAAW,EAAE,CAAA,oDAAA,CAAA;AAAA,UAC5B,UAAA,CAAW;AAAA,SACf;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAI,CAAC,UAAA,CAAW,MAAA,IAAU,UAAA,CAAW,MAAA,CAAO,WAAW,CAAA,EAAG;AACtD,MAAA,MAAM,IAAIA,2BAAA;AAAA,QACN,WAAA;AAAA,QACA,CAAA,YAAA,EAAe,WAAW,EAAE,CAAA,iCAAA,CAAA;AAAA,QAC5B,UAAA,CAAW;AAAA,OACf;AAAA,IACJ;AAEA,IAAA,IAAI,UAAA,CAAW,eAAe,MAAA,EAAW;AACrC,MAAA,MAAM,IAAIA,2BAAA;AAAA,QACN,uBAAA;AAAA,QACA,CAAA,YAAA,EAAe,WAAW,EAAE,CAAA,gDAAA,CAAA;AAAA,QAC5B,UAAA,CAAW;AAAA,OACf;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,SAAS,YAAY,KAAA,EAA2B;AACnD,EAAA,IAAI;AACA,IAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACX,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;;;AClIA,qBAAA,EAAA;;;ACAA,qBAAA,EAAA;;;ACAA,qBAAA,EAAA;AAEA,WAAA,EAAA;AAUA,IAAM,OAAA,GAAU,IAAIwF,aAAA,CAAY,EAAE,aAAA,EAAe,OAAO,UAAA,EAAY,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,CAAA;AAKjG,IAAM,UAAA,GAAa,CAAA;AAKnB,IAAM,cAAA,GAAiB,EAAA;AAEvB,IAAM,gBAAA,GAA2C;AAAA,EAC7C,CAAC,EAAE,GAAG,OAAA;AAAA,EACN,CAAC,GAAG,GAAG,OAAA;AAAA,EACP,CAAC,GAAG,GAAG;AACX,CAAA;AAYO,SAAS,gBAAgB,KAAA,EAA8B;AAC1D,EAAA,IAAI,KAAA,GAAiB,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AACzC,EAAA,IAAI,KAAA,YAAiBC,SAAA,IAAO,KAAA,CAAM,GAAA,KAAQ,EAAA,EAAI;AAE1C,IAAA,MAAM,WAAW,KAAA,CAAM,KAAA;AACvB,IAAA,KAAA,GAAQ,QAAA,YAAoB,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,GAAI,QAAA;AAAA,EACxE;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAI3F,iCAAyB,6CAA6C,CAAA;AAAA,EACpF;AACA,EAAA,MAAM,CAAC,oBAAA,EAAsB,iBAAA,EAAmB,UAAA,EAAY,SAAS,CAAA,GAAI,KAAA;AACzE,EAAA,IAAI,EAAE,gCAAgC,UAAA,CAAA,EAAa;AAC/C,IAAA,MAAM,IAAIA,iCAAyB,4CAA4C,CAAA;AAAA,EACnF;AACA,EAAA,IAAI,EAAE,6BAA6B,GAAA,CAAA,EAAM;AACrC,IAAA,MAAM,IAAIA,iCAAyB,6CAA6C,CAAA;AAAA,EACpF;AACA,EAAA,IAAI,EAAE,qBAAqB,UAAA,CAAA,EAAa;AACpC,IAAA,MAAM,IAAIA,iCAAyB,qCAAqC,CAAA;AAAA,EAC5E;AAEA,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI;AACA,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,oBAAoB,CAAA;AACnD,IAAA,IAAI,EAAE,mBAAmB,GAAA,CAAA,EAAM;AAC3B,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAChD;AACA,IAAA,eAAA,GAAkB,OAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AACJ,IAAA,MAAM,IAAIA,iCAAyB,mDAAmD,CAAA;AAAA,EAC1F;AAEA,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA;AAC/C,EAAA,MAAM,MAAM,OAAO,QAAA,KAAa,QAAA,GAAW,gBAAA,CAAiB,QAAQ,CAAA,GAAI,MAAA;AACxE,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,MAAM,IAAIA,gCAAA,CAAyB,CAAA,mCAAA,EAAsC,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/F;AAGA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,sBAAsB,UAAA,EAAY;AAClC,IAAA,OAAA,GAAU,UAAA;AAAA,EACd,CAAA,MAAA,IAAW,sBAAsB2F,SAAA,IAAO,UAAA,CAAW,QAAQ,EAAA,IAAM,UAAA,CAAW,iBAAiB,UAAA,EAAY;AACrG,IAAA,OAAA,GAAU,UAAA,CAAW,KAAA;AAAA,EACzB,CAAA,MAAO;AACH,IAAA,MAAM,IAAI3F,iCAAyB,0CAA0C,CAAA;AAAA,EACjF;AAGA,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,GAAA,CAAI,cAAc,CAAA;AAClD,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,MAAM,IAAIA,iCAAyB,6DAA6D,CAAA;AAAA,EACpG;AACA,EAAA,IAAI,iBAAiB,UAAA,EAAY;AAC7B,IAAA,OAAA,GAAU,CAAC,KAAK,CAAA;AAAA,EACpB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,YAAa,UAAU,CAAA,EAAG;AAC5E,IAAA,OAAA,GAAU,KAAA;AAAA,EACd,CAAA,MAAO;AACH,IAAA,MAAM,IAAIA,iCAAyB,oDAAoD,CAAA;AAAA,EAC3F;AAEA,EAAA,OAAO;AAAA,IACH,oBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEA,IAAM,WAAA,GAAsC;AAAA,EACxC,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO;AACX,CAAA;AAMA,eAAsB,eAAA,CAClB,SAAA,EACA,SAAA,EACA,iBAAA,EACa;AACb,EAAA,IAAI,CAAC,iBAAA,CAAkB,QAAA,CAAS,SAAA,CAAU,GAAG,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAIA,gCAAA,CAAyB,CAAA,qBAAA,EAAwB,SAAA,CAAU,GAAG,CAAA,iBAAA,CAAmB,CAAA;AAAA,EAC/F;AACA,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,SAAA,CAAU,GAAG,CAAA;AACzC,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAIA,gCAAA,CAAyB,CAAA,wBAAA,EAA2B,SAAA,CAAU,GAAG,CAAA,CAAE,CAAA;AAAA,EACjF;AAKA,EAAA,MAAM,YAAA,GAAe,CAAC,YAAA,EAAc,SAAA,CAAU,oBAAA,EAAsB,IAAI,UAAA,CAAW,CAAC,CAAA,EAAG,SAAA,CAAU,OAAO,CAAA;AAGxG,EAAA,MAAM,WAAW,IAAI,UAAA,CAAW,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAC,CAAA;AAE5D,EAAA,MAAM,EAAA,GAAK,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA;AAAA,IAC3B,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAQ;AAAA,IAC/B,SAAA;AAAA,IACA,IAAI,UAAA,CAAW,SAAA,CAAU,SAAS,CAAA;AAAA,IAClC;AAAA,GACJ;AACA,EAAA,IAAI,CAAC,EAAA,EAAI;AACL,IAAA,MAAM,IAAIA,iCAAyB,0CAA0C,CAAA;AAAA,EACjF;AACJ;;;ACzJA,qBAAA,EAAA;AAEA,WAAA,EAAA;AAIA,IAAM,GAAA,GAAM,IAAI0F,aAAAA,CAAY,EAAE,aAAA,EAAe,OAAO,UAAA,EAAY,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,CAAA;AAE7F,IAAME,WAAAA,GAAa,CAAA;AACnB,IAAMC,iBAAAA,GAAgE;AAAA,EAClE,CAAC,EAAE,GAAG,OAAA;AAAA,EACN,CAAC,GAAG,GAAG,OAAA;AAAA,EACP,CAAC,GAAG,GAAG;AACX,CAAA;AACA,IAAMC,eAAsC,EAAE,KAAA,EAAO,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,SAAA,EAAU;AAGnG,IAAM,YAAA,GAAe,CAAA;AACrB,IAAM,YAAA,GAAe,EAAA;AACrB,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,YAAA,GAAe,CAAA;AACrB,IAAM,kBAA0C,EAAE,CAAA,EAAG,SAAS,CAAA,EAAG,OAAA,EAAS,GAAG,OAAA,EAAQ;AAErF,SAAS,eAAe,MAAA,EAAkC;AACtD,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,GAAA,IAAO,CAAA,CAAE,MAAA;AACjC,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAG,CAAA;AAC9B,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACpB,IAAA,GAAA,CAAI,GAAA,CAAI,GAAG,GAAG,CAAA;AACd,IAAA,GAAA,IAAO,CAAA,CAAE,MAAA;AAAA,EACb;AACA,EAAA,OAAO,GAAA;AACX;AAEA,SAAS,iBAAiB,KAAA,EAA2B;AACjD,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,GAAA,IAAO,MAAA,CAAO,aAAa,CAAC,CAAA;AACnD,EAAA,OAAO,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA,CAAE,QAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AACzF;AAGA,SAAS,YAAY,KAAA,EAA+B;AAEhD,EAAA,OAAO,WAAA,CAAY,IAAI,UAAA,CAAW,CAAC,KAAM,EAAI,CAAC,CAAA,EAAG,IAAI,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AACtF;AAkBO,SAAS,+BAA+B,MAAA,EAIhC;AACX,EAAA,MAAM,oBAAA,GAAuB,WAAA;AAAA,IACzB,IAAI,UAAA,CAAW,CAAC,GAAI,CAAC,CAAA;AAAA;AAAA,IACrB,IAAI,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,sBAAsB,CAAC,CAAA;AAAA,IACjD,MAAA,CAAO,iBAAA;AAAA,IACP,IAAI,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IACzC,WAAA,CAAY,OAAO,qBAAqB;AAAA,GAC5C;AACA,EAAA,OAAO,YAAY,oBAAoB,CAAA;AAC3C;AAGO,SAAS,wBAAA,CAAyB,gBAA4B,eAAA,EAAyC;AAC1G,EAAA,MAAM,GAAA,GAAM,CAAC,YAAA,EAAc,cAAA,EAAgB,IAAI,UAAA,CAAW,CAAC,GAAG,eAAe,CAAA;AAC7E,EAAA,OAAO,IAAI,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AACzC;AAGA,eAAsB,wBAAwB,OAAA,EAAsC;AAChF,EAAA,IAAI,EAAE,mBAAmB,GAAA,CAAA,EAAM;AAC3B,IAAA,MAAM,IAAI9F,iCAAyB,mDAAmD,CAAA;AAAA,EAC1F;AACA,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AACpC,EAAA,IAAI,QAAQ,YAAA,EAAc;AACtB,IAAA,MAAM,IAAIA,gCAAA,CAAyB,CAAA,0CAAA,EAA6C,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EACjG;AACA,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AACpC,EAAA,MAAM,UAAU,OAAO,GAAA,KAAQ,QAAA,GAAW,eAAA,CAAgB,GAAG,CAAA,GAAI,MAAA;AACjE,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAChC,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAChC,EAAA,IAAI,CAAC,OAAA,IAAW,EAAE,aAAa,UAAA,CAAA,IAAe,EAAE,aAAa,UAAA,CAAA,EAAa;AACtE,IAAA,MAAM,IAAIA,iCAAyB,6CAA6C,CAAA;AAAA,EACpF;AACA,EAAA,OAAO,OAAO,MAAA,CAAO,SAAA;AAAA,IACjB,KAAA;AAAA,IACA,EAAE,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,OAAA,EAAS,CAAA,EAAG,gBAAA,CAAiB,CAAC,CAAA,EAAG,CAAA,EAAG,gBAAA,CAAiB,CAAC,CAAA,EAAE;AAAA,IAC1E,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,OAAA,EAAQ;AAAA,IACrC,KAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACb;AACJ;AASA,eAAsB,iBAAiB,MAAA,EAMrB;AACd,EAAA,MAAM,EAAE,YAAA,EAAc,aAAA,EAAe,OAAA,EAAS,iBAAA,EAAmB,mBAAkB,GAAI,MAAA;AAEvF,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,YAAY,CAAA;AAChD,EAAA,IAAI,EAAE,sBAAsB,GAAA,CAAA,EAAM;AAC9B,IAAA,MAAM,IAAIA,iCAAyB,iDAAiD,CAAA;AAAA,EACxF;AACA,EAAA,IAAI,UAAA,CAAW,IAAI,WAAW,CAAA,IAAK,CAAC,UAAA,CAAW,GAAA,CAAI,iBAAiB,CAAA,EAAG;AACnE,IAAA,MAAM,IAAIA,iCAAyB,gDAAgD,CAAA;AAAA,EACvF;AACA,EAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,GAAA,CAAI,iBAAiB,CAAA;AACxD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAA,IAAK,eAAA,CAAgB,WAAW,CAAA,EAAG;AACjE,IAAA,MAAM,IAAIA,iCAAyB,uDAAuD,CAAA;AAAA,EAC9F;AACA,EAAA,MAAM,cAAA,GAAiB,gBAAgB,CAAC,CAAA;AACxC,EAAA,MAAM,SAAA,GAAY,gBAAgB,CAAC,CAAA;AACnC,EAAA,IAAI,EAAE,cAAA,YAA0B,UAAA,CAAA,IAAe,EAAE,qBAAqB,UAAA,CAAA,EAAa;AAC/E,IAAA,MAAM,IAAIA,iCAAyB,mEAAmE,CAAA;AAAA,EAC1G;AAEA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACA,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,MAAA,CAAO,cAAc,CAAA;AACpC,IAAA,MAAM,QAAQ,EAAA,YAAc,GAAA,GAAM,EAAA,CAAG,GAAA,CAAI4F,WAAU,CAAA,GAAI,KAAA,CAAA;AACvD,IAAA,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,GAAWC,iBAAAA,CAAiB,KAAK,CAAA,GAAI,KAAA,CAAA;AAAA,EAChE,CAAA,CAAA,MAAQ;AACJ,IAAA,MAAM,IAAI7F,iCAAyB,wDAAwD,CAAA;AAAA,EAC/F;AACA,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,iBAAA,CAAkB,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAIA,gCAAA,CAAyB,CAAA,6CAAA,EAAgD,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EACpG;AAIA,EAAA,MAAM,qBAAA,GAAwB,iBAAA,CAAkB,YAAA,CAAa,GAAA,CAAI,YAAY,CAAC,CAAA;AAE9E,EAAA,MAAM,kBAAkB,8BAAA,CAA+B,EAAE,iBAAA,EAAmB,OAAA,EAAS,uBAAuB,CAAA;AAC5G,EAAA,MAAM,QAAA,GAAW,wBAAA,CAAyB,cAAA,EAAgB,eAAe,CAAA;AAEzE,EAAA,MAAM,SAAA,GAAY,MAAM,uBAAA,CAAwB,aAAa,CAAA;AAC7D,EAAA,MAAM,EAAA,GAAK,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA;AAAA,IAC3B,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM8F,YAAAA,CAAY,GAAG,CAAA,EAAE;AAAA,IACxC,SAAA;AAAA,IACA,IAAI,WAAW,SAAS,CAAA;AAAA,IACxB;AAAA,GACJ;AACA,EAAA,IAAI,CAAC,EAAA,EAAI;AACL,IAAA,MAAM,IAAI9F,iCAAyB,+DAA+D,CAAA;AAAA,EACtG;AACJ;AAOA,SAAS,kBAAkB,KAAA,EAA4B;AACnD,EAAA,IAAI,KAAA,YAAiB,YAAY,OAAO,KAAA;AACxC,EAAA,IACI,KAAA,KAAU,QACV,OAAO,KAAA,KAAU,YACjB,OAAA,IAAY,KAAA,IACX,MAA6B,KAAA,YAAiB,UAAA;AAAA,GAE9C,KAAA,IAAU,KAAA,GAAoB,KAAA,CAA2B,GAAA,KAAQ,KAAK,IAAA,CAAA,EACzE;AACE,IAAA,OAAQ,KAAA,CAAgC,KAAA;AAAA,EAC5C;AACA,EAAA,MAAM,IAAIA,iCAAyB,qDAAqD,CAAA;AAC5F;;;AChMA,qBAAA,EAAA;AAEA,WAAA,EAAA;AAKA,IAAM+F,QAAAA,GAAU,IAAIL,aAAAA,CAAY,EAAE,eAAe,KAAA,EAAO,UAAA,EAAY,OAAO,CAAA;AAE3E,IAAM,oCAAoB,IAAI,GAAA,CAAI,CAAC,SAAA,EAAW,SAAA,EAAW,SAAS,CAAC,CAAA;AAEnE,eAAsB,iBAAA,CAAkB,WAAuB,eAAA,EAA8C;AACzG,EAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,eAAe,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI1F,gCAAA,CAAyB,CAAA,0BAAA,EAA6B,eAAe,CAAA,CAAE,CAAA;AAAA,EACrF;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,MAAA,CAAO,OAAO,eAAA,EAAiB,IAAI,UAAA,CAAW,SAAS,CAAC,CAAA;AACjF,EAAA,OAAO,IAAI,WAAW,GAAG,CAAA;AAC7B;AAEA,SAASgG,WAAAA,CAAW,GAAe,CAAA,EAAwB;AACvD,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,IAAI,EAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,OAAO,KAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA;AACX;AAWA,SAAS,cAAc,SAAA,EAA6C;AAChE,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACA,IAAA,OAAA,GAAUD,QAAAA,CAAQ,OAAO,SAAS,CAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACJ,IAAA,MAAM,IAAI/F,iCAAyB,wCAAwC,CAAA;AAAA,EAC/E;AAEA,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,mBAAmB2F,SAAAA,IAAO,OAAA,CAAQ,QAAQ,EAAA,IAAM,OAAA,CAAQ,iBAAiB,UAAA,EAAY;AAErF,IAAA,KAAA,GAAQI,QAAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,KAAmB,CAAA;AAAA,EACtD,WACI,OAAA,KAAY,IAAA,IACZ,OAAO,OAAA,KAAY,QAAA,IACnB,EAAE,OAAA,YAAmBJ,SAAAA,CAAAA,IACrB,EAAE,OAAA,YAAmB,GAAA,CAAA,IACrB,EAAE,OAAA,YAAmB,UAAA,CAAA,IACrB,WAAY,OAAA,IACX,OAAA,CAA+B,iBAAiB,UAAA,EACnD;AAEE,IAAA,KAAA,GAAQI,QAAAA,CAAQ,MAAA,CAAQ,OAAA,CAAkC,KAAK,CAAA;AAAA,EACnE,CAAA,MAAA,IAAW,mBAAmB,GAAA,EAAK;AAE/B,IAAA,KAAA,GAAQ,OAAA;AAAA,EACZ,CAAA,MAAO;AACH,IAAA,MAAM,IAAI/F,iCAAyB,oDAAoD,CAAA;AAAA,EAC3F;AAEA,EAAA,IAAI,EAAE,iBAAiB,GAAA,CAAA,EAAM;AACzB,IAAA,MAAM,IAAIA,iCAAyB,uCAAuC,CAAA;AAAA,EAC9E;AACA,EAAA,OAAO,KAAA;AACX;AAUA,eAAsB,gBAAA,CAClB,YACA,GAAA,EACa;AACb,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,UAAA,EAAY;AAClC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AACxC,IAAA,IAAI,CAAC,QAAA,EAAU;AACX,MAAA,MAAM,IAAIA,gCAAA,CAAyB,CAAA,UAAA,EAAa,EAAE,CAAA,iCAAA,CAAmC,CAAA;AAAA,IACzF;AACA,IAAA,KAAA,MAAW,aAAa,KAAA,EAAO;AAE3B,MAAA,MAAM,IAAA,GAAO,MAAM,iBAAA,CAAkB,SAAA,EAAW,IAAI,eAAe,CAAA;AAGnE,MAAA,MAAM,IAAA,GAAO,cAAc,SAAS,CAAA;AACpC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA;AACpC,MAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAC9B,QAAA,MAAM,IAAIA,iCAAyB,mCAAmC,CAAA;AAAA,MAC1E;AAEA,MAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA;AAC5C,MAAA,IAAI,CAAC,cAAA,EAAgB;AACjB,QAAA,MAAM,IAAIA,gCAAA,CAAyB,CAAA,SAAA,EAAY,QAAQ,CAAA,+BAAA,EAAkC,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,MAClG;AACA,MAAA,IAAI,CAACgG,WAAAA,CAAW,IAAA,EAAM,cAAc,CAAA,EAAG;AACnC,QAAA,MAAM,IAAIhG,gCAAA,CAAyB,CAAA,uBAAA,EAA0B,EAAE,CAAA,UAAA,EAAa,QAAQ,CAAA,CAAE,CAAA;AAAA,MAC1F;AAAA,IACJ;AAAA,EACJ;AACJ;;;AC9GA,qBAAA,EAAA;AAEA,WAAA,EAAA;AAGA,IAAM+F,QAAAA,GAAU,IAAIL,aAAAA,CAAY,EAAE,eAAe,KAAA,EAAO,UAAA,EAAY,OAAO,CAAA;AAsB3E,SAAS,eAAe,KAAA,EAAsB;AAC1C,EAAA,IAAI,KAAA,YAAiB,MAAM,OAAO,KAAA;AAClC,EAAA,IAAI,iBAAiBC,SAAAA,EAAK;AAEtB,IAAA,IAAI,MAAM,GAAA,KAAQ,CAAA,IAAK,OAAO,KAAA,CAAM,UAAU,QAAA,EAAU;AACpD,MAAA,OAAO,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,IAC/B;AACA,IAAA,IAAI,MAAM,GAAA,KAAQ,CAAA,IAAK,OAAO,KAAA,CAAM,UAAU,QAAA,EAAU;AACpD,MAAA,OAAO,IAAI,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,GAAI,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,MAAM,GAAA,KAAQ,IAAA,IAAQ,OAAO,KAAA,CAAM,UAAU,QAAA,EAAU;AACvD,MAAA,OAAO,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,IAC/B;AAAA,EACJ;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,OAAO,IAAI,KAAK,KAAK,CAAA;AAAA,EACzB;AACA,EAAA,MAAM,IAAI3F,gCAAA,CAAyB,CAAA,kCAAA,EAAqC,OAAO,KAAK,CAAA,CAAE,CAAA;AAC1F;AAEO,SAAS,UAAU,OAAA,EAA2C;AACjE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACA,IAAA,GAAA,GAAM+F,QAAAA,CAAQ,OAAO,OAAO,CAAA;AAI5B,IAAA,IAAI,eAAeJ,SAAAA,IAAO,GAAA,CAAI,QAAQ,EAAA,IAAM,GAAA,CAAI,iBAAiB,UAAA,EAAY;AACzE,MAAA,GAAA,GAAMI,QAAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,IAClC,WACI,GAAA,KAAQ,IAAA,IACR,OAAO,GAAA,KAAQ,QAAA,IACf,EAAE,GAAA,YAAeJ,SAAAA,CAAAA,IACjB,EAAE,GAAA,YAAe,GAAA,CAAA,IACjB,EAAE,GAAA,YAAe,UAAA,CAAA,IACjB,WAAY,GAAA,IACX,GAAA,CAA2B,iBAAiB,UAAA,EAC/C;AAME,MAAA,GAAA,GAAMI,QAAAA,CAAQ,MAAA,CAAQ,GAAA,CAA8B,KAAK,CAAA;AAAA,IAC7D;AAAA,EACJ,SAAS,GAAA,EAAK;AACV,IAAA,IAAI,GAAA,YAAe/F,kCAA0B,MAAM,GAAA;AACnD,IAAA,MAAM,IAAIA,iCAAyB,mCAAmC,CAAA;AAAA,EAC1E;AACA,EAAA,IAAI,EAAE,eAAe,GAAA,CAAA,EAAM;AACvB,IAAA,MAAM,IAAIA,iCAAyB,wBAAwB,CAAA;AAAA,EAC/D;AACA,EAAA,MAAM,CAAA,GAAI,GAAA;AAEV,EAAA,MAAM,OAAA,GAAU,CAAA,CAAE,GAAA,CAAI,SAAS,CAAA;AAC/B,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAIA,iCAAyB,8BAA8B,CAAA;AAAA,EACrE;AACA,EAAA,MAAM,eAAA,GAAkB,CAAA,CAAE,GAAA,CAAI,iBAAiB,CAAA;AAC/C,EAAA,IAAI,OAAO,oBAAoB,QAAA,EAAU;AACrC,IAAA,MAAM,IAAIA,iCAAyB,sCAAsC,CAAA;AAAA,EAC7E;AACA,EAAA,MAAM,OAAA,GAAU,CAAA,CAAE,GAAA,CAAI,SAAS,CAAA;AAC/B,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAIA,iCAAyB,8BAA8B,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,GAAA,CAAI,cAAc,CAAA;AAClC,EAAA,IAAI,EAAE,iBAAiB,GAAA,CAAA,EAAM;AACzB,IAAA,MAAM,IAAIA,iCAAyB,gCAAgC,CAAA;AAAA,EACvE;AACA,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAqC;AAC9D,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AACvC,IAAA,IAAI,OAAO,EAAA,KAAO,QAAA,IAAY,EAAE,iBAAiB,GAAA,CAAA,EAAM;AACnD,MAAA,MAAM,IAAIA,iCAAyB,kCAAkC,CAAA;AAAA,IACzE;AACA,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAwB;AAC1C,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,MAAM,CAAA,IAAM,KAAA,CAAgC,SAAQ,EAAG;AACnE,MAAA,IAAI,OAAO,EAAA,KAAO,QAAA,IAAY,EAAE,kBAAkB,UAAA,CAAA,EAAa;AAC3D,QAAA,MAAM,IAAIA,iCAAyB,4CAAuC,CAAA;AAAA,MAC9E;AACA,MAAA,KAAA,CAAM,GAAA,CAAI,IAAI,MAAM,CAAA;AAAA,IACxB;AACA,IAAA,YAAA,CAAa,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,EAC9B;AAGA,EAAA,IAAI,SAAA;AACJ,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,GAAA,CAAI,eAAe,CAAA;AACpC,EAAA,IAAI,kBAAkB,GAAA,EAAK;AACvB,IAAA,MAAM,EAAA,GAAM,MAAA,CAAgC,GAAA,CAAI,WAAW,CAAA;AAC3D,IAAA,IAAI,cAAc,GAAA,EAAK;AACnB,MAAA,SAAA,GAAY,EAAA;AAAA,IAChB;AAAA,EACJ;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,GAAA,CAAI,cAAc,CAAA;AAClC,EAAA,IAAI,EAAE,iBAAiB,GAAA,CAAA,EAAM;AACzB,IAAA,MAAM,IAAIA,iCAAyB,gCAAgC,CAAA;AAAA,EACvE;AACA,EAAA,MAAM,EAAA,GAAK,KAAA;AACX,EAAA,MAAM,YAAA,GAAqD;AAAA,IACvD,MAAA,EAAQ,cAAA,CAAe,EAAA,CAAG,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,IACvC,SAAA,EAAW,cAAA,CAAe,EAAA,CAAG,GAAA,CAAI,WAAW,CAAC,CAAA;AAAA,IAC7C,UAAA,EAAY,cAAA,CAAe,EAAA,CAAG,GAAA,CAAI,YAAY,CAAC;AAAA,GACnD;AACA,EAAA,IAAI,EAAA,CAAG,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAC1B,IAAA,YAAA,CAAa,cAAA,GAAiB,cAAA,CAAe,EAAA,CAAG,GAAA,CAAI,gBAAgB,CAAC,CAAA;AAAA,EACzE;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,eAAA,EAAiB,YAAA,EAAc,OAAA,EAAS,WAAW,YAAA,EAAa;AACtF;AAWO,SAAS,mBAAA,CAAoB,KAA2B,GAAA,EAAiB;AAC5E,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,UAAA,KAAe,GAAA,CAAI,YAAA;AAC9C,EAAA,IAAI,MAAA,CAAO,OAAA,EAAQ,GAAI,GAAA,CAAI,SAAQ,EAAG;AAClC,IAAA,MAAM,IAAIA,gCAAA,CAAyB,CAAA,WAAA,EAAc,MAAA,CAAO,WAAA,EAAa,CAAA,iBAAA,CAAmB,CAAA;AAAA,EAC5F;AACA,EAAA,IAAI,SAAA,CAAU,OAAA,EAAQ,GAAI,GAAA,CAAI,SAAQ,EAAG;AACrC,IAAA,MAAM,IAAIA,gCAAA,CAAyB,CAAA,cAAA,EAAiB,SAAA,CAAU,WAAA,EAAa,CAAA,iBAAA,CAAmB,CAAA;AAAA,EAClG;AACA,EAAA,IAAI,SAAA,CAAU,OAAA,EAAQ,GAAI,UAAA,CAAW,SAAQ,EAAG;AAC5C,IAAA,MAAM,IAAIA,iCAAyB,mCAAmC,CAAA;AAAA,EAC1E;AACA,EAAA,IAAI,MAAA,CAAO,OAAA,EAAQ,GAAI,SAAA,CAAU,OAAA,EAAQ,IAAK,MAAA,CAAO,OAAA,EAAQ,GAAI,UAAA,CAAW,OAAA,EAAQ,EAAG;AACnF,IAAA,MAAM,IAAIA,iCAAyB,2CAA2C,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,UAAA,CAAW,OAAA,EAAQ,GAAI,GAAA,CAAI,SAAQ,EAAG;AACtC,IAAA,MAAM,IAAIF,8BAAA,CAAuB,CAAA,eAAA,EAAkB,UAAA,CAAW,WAAA,EAAa,CAAA,eAAA,CAAiB,CAAA;AAAA,EAChG;AACJ;AAMO,SAAS,kBAAA,CAAmB,KAA2B,eAAA,EAA+B;AACzF,EAAA,IAAI,GAAA,CAAI,YAAY,eAAA,EAAiB;AACjC,IAAA,MAAM,IAAIE,gCAAA,CAAyB,CAAA,YAAA,EAAe,IAAI,OAAO,CAAA,yBAAA,EAA4B,eAAe,CAAA,CAAE,CAAA;AAAA,EAC9G;AACJ;;;AJzKA,WAAA,EAAA;AAQA,IAAM+F,QAAAA,GAAU,IAAIL,aAAAA,CAAY,EAAE,eAAe,KAAA,EAAO,UAAA,EAAY,OAAO,CAAA;AAC3E,IAAM,OAAA,GAAU,IAAIA,aAAAA,CAAY,EAAE,eAAe,KAAA,EAAO,UAAA,EAAY,OAAO,CAAA;AAE3E,IAAM,0BAAA,GAA6B,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAE7D,SAASM,WAAAA,CAAW,GAAe,CAAA,EAAwB;AACvD,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,IAAI,EAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,OAAO,KAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,SAAS,GAAA,EAAyB;AACvC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,MAAW,CAAA,IAAK,GAAA,EAAK,MAAA,IAAU,MAAA,CAAO,aAAa,CAAC,CAAA;AACpD,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,UAAU,KAAK,EAAC;AACxC,EAAA,OAAO,CAAA;AAAA,EAAgC,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,yBAAA,CAAA;AAC3D;AAEA,SAAS,2BAA2B,QAAA,EAA8B;AAE9D,EAAA,OAAO,EAAA;AACX;AAQA,SAAS,qBAAqB,MAAA,EAA4B;AACtD,EAAA,IAAI,SAAS,EAAA,EAAI,OAAO,UAAA,CAAW,EAAA,CAAG,KAAO,MAAM,CAAA;AACnD,EAAA,IAAI,SAAS,GAAA,EAAO,OAAO,UAAA,CAAW,EAAA,CAAG,IAAM,MAAM,CAAA;AACrD,EAAA,IAAI,MAAA,GAAS,KAAA,EAAS,OAAO,UAAA,CAAW,EAAA,CAAG,IAAO,MAAA,IAAU,CAAA,GAAK,GAAA,EAAM,MAAA,GAAS,GAAI,CAAA;AACpF,EAAA,IAAI,SAAS,UAAA,EAAa;AACtB,IAAA,OAAO,UAAA,CAAW,EAAA;AAAA,MACd,EAAA;AAAA,MACC,WAAW,EAAA,GAAM,GAAA;AAAA,MACjB,WAAW,EAAA,GAAM,GAAA;AAAA,MACjB,WAAW,CAAA,GAAK,GAAA;AAAA,MACjB,MAAA,GAAS;AAAA,KACb;AAAA,EACJ;AAEA,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,UAAW,CAAA;AAC1C,EAAA,MAAM,KAAK,MAAA,KAAW,CAAA;AACtB,EAAA,OAAO,UAAA,CAAW,EAAA;AAAA,IACd,EAAA;AAAA,IACC,OAAO,EAAA,GAAM,GAAA;AAAA,IACb,OAAO,EAAA,GAAM,GAAA;AAAA,IACb,OAAO,CAAA,GAAK,GAAA;AAAA,IACb,EAAA,GAAK,GAAA;AAAA,IACJ,OAAO,EAAA,GAAM,GAAA;AAAA,IACb,OAAO,EAAA,GAAM,GAAA;AAAA,IACb,OAAO,CAAA,GAAK,GAAA;AAAA,IACb,EAAA,GAAK;AAAA,GACT;AACJ;AAUO,SAAS,0BAA0B,KAAA,EAA+B;AACrE,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,KAAA,CAAM,MAAM,CAAA;AAChD,EAAA,MAAM,MAAM,IAAI,UAAA,CAAW,IAAI,MAAA,CAAO,MAAA,GAAS,MAAM,MAAM,CAAA;AAC3D,EAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA;AACT,EAAA,GAAA,CAAI,CAAC,CAAA,GAAI,EAAA;AACT,EAAA,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAC,CAAA;AACjB,EAAA,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,CAAA,GAAI,MAAA,CAAO,MAAM,CAAA;AAChC,EAAA,OAAO,GAAA;AACX;AAgBA,SAAS,oBAAoB,IAAA,EAA2B;AACpD,EAAA,IAAI,gBAAgBL,SAAAA,IAAO,IAAA,CAAK,QAAQ,EAAA,IAAM,IAAA,CAAK,iBAAiB,UAAA,EAAY;AAC5E,IAAA,OAAO,yBAAA,CAA0B,KAAK,KAAK,CAAA;AAAA,EAC/C;AACA,EAAA,IAAI,gBAAgB,UAAA,EAAY;AAC5B,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,CAAA,IAAK,IAAA,CAAK,CAAC,MAAM,GAAA,IAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,EAAA,EAAM;AAC1D,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,0BAA0B,IAAI,CAAA;AAAA,EACzC;AACA,EAAA,IACI,IAAA,KAAS,IAAA,IACT,OAAO,IAAA,KAAS,YAChB,EAAE,IAAA,YAAgBA,SAAAA,CAAAA,IAClB,EAAE,gBAAgB,GAAA,CAAA,IAClB,OAAA,IAAY,IAAA,IACX,IAAA,CAA4B,iBAAiB,UAAA,EAChD;AACE,IAAA,OAAO,yBAAA,CAA2B,KAA+B,KAAK,CAAA;AAAA,EAC1E;AACA,EAAA,MAAM,IAAI3F,iCAAyB,+CAA+C,CAAA;AACtF;AAQA,SAAS,eAAe,UAAA,EAGtB;AACE,EAAA,MAAM,OAAyB,EAAC;AAChC,EAAA,MAAM,aAAsD,EAAC;AAC7D,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,UAAA,CAAW,SAAQ,EAAG;AAC5C,IAAA,MAAM,QAAA,GAAoC,UAAA,CAAW,EAAE,CAAA,IAAK,EAAC;AAC7D,IAAA,KAAA,MAAW,aAAa,KAAA,EAAO;AAC3B,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI;AACA,QAAA,OAAA,GAAU+F,QAAAA,CAAQ,OAAO,SAAS,CAAA;AAAA,MACtC,CAAA,CAAA,MAAQ;AACJ,QAAA;AAAA,MACJ;AAGA,MAAA,IAAI,KAAA;AACJ,MAAA,IAAI,mBAAmBJ,SAAAA,IAAO,OAAA,CAAQ,QAAQ,EAAA,IAAM,OAAA,CAAQ,iBAAiB,UAAA,EAAY;AAErF,QAAA,KAAA,GAAQI,QAAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,KAAmB,CAAA;AAAA,MACtD,WACI,OAAA,KAAY,IAAA,IACZ,OAAO,OAAA,KAAY,QAAA,IACnB,EAAE,OAAA,YAAmBJ,SAAAA,CAAAA,IACrB,EAAE,OAAA,YAAmB,GAAA,CAAA,IACrB,EAAE,OAAA,YAAmB,UAAA,CAAA,IACrB,WAAY,OAAA,IACX,OAAA,CAA+B,iBAAiB,UAAA,EACnD;AAEE,QAAA,KAAA,GAAQI,QAAAA,CAAQ,MAAA,CAAQ,OAAA,CAAkC,KAAK,CAAA;AAAA,MACnE,CAAA,MAAA,IAAW,mBAAmB,GAAA,EAAK;AAE/B,QAAA,KAAA,GAAQ,OAAA;AAAA,MACZ,CAAA,MAAO;AACH,QAAA;AAAA,MACJ;AAEA,MAAA,IAAI,iBAAiB,GAAA,EAAK;AACtB,QAAA,MAAM,EAAA,GAAM,KAAA,CAA+B,GAAA,CAAI,mBAAmB,CAAA;AAClE,QAAA,MAAM,GAAA,GAAO,KAAA,CAA+B,GAAA,CAAI,cAAc,CAAA;AAC9D,QAAA,IAAI,OAAO,OAAO,QAAA,EAAU;AACxB,UAAC,IAAA,CAAiC,EAAE,CAAA,GAAI,GAAA;AACxC,UAAA,QAAA,CAAS,EAAE,CAAA,GAAI,GAAA;AAAA,QACnB;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,UAAA,CAAW,EAAE,CAAA,GAAI,QAAA;AAAA,EACrB;AACA,EAAA,OAAO,EAAE,MAAM,UAAA,EAAW;AAC9B;AAaO,IAAM,aAAN,MAA8C;AAAA,EACxC,MAAA,GAA2B,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpC,SAAS,OAAA,EAA2B;AAChC,IAAA,OAAO,OAAA,YAAmB,UAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAA,CAAM,OAAA,EAAkB,OAAA,EAAoD;AAC9E,IAAA,IAAI,EAAE,mBAAmB,UAAA,CAAA,EAAa;AAClC,MAAA,MAAM,IAAI/F,iCAAyB,mCAAmC,CAAA;AAAA,IAC1E;AACA,IAAA,MAAM,iBAAA,GAAoB,QAAQ,iBAAA,IAAqB,0BAAA;AAGvD,IAAA,IAAI,cAAA;AACJ,IAAA,IAAI;AACA,MAAA,MAAM,OAAA,GAAU+F,QAAAA,CAAQ,MAAA,CAAO,OAAO,CAAA;AACtC,MAAA,IAAI,EAAE,OAAA,YAAmB,GAAA,CAAA,EAAM,MAAM,IAAI,KAAA,EAAM;AAC/C,MAAA,cAAA,GAAiB,OAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AACJ,MAAA,MAAM,IAAI/F,iCAAyB,0CAA0C,CAAA;AAAA,IACjF;AAGA,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,GAAA,CAAI,WAAW,CAAA;AAC3C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,IAAK,IAAA,CAAK,WAAW,CAAA,EAAG;AAC3C,MAAA,MAAM,IAAIA,iCAAyB,iCAAiC,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,QAAA,GAAW,KAAK,CAAC,CAAA;AACvB,IAAA,IAAI,EAAE,oBAAoB,GAAA,CAAA,EAAM;AAC5B,MAAA,MAAM,IAAIA,iCAAyB,wBAAwB,CAAA;AAAA,IAC/D;AACA,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,cAAc,CAAA;AAChD,IAAA,IAAI,EAAE,wBAAwB,GAAA,CAAA,EAAM;AAChC,MAAA,MAAM,IAAIA,iCAAyB,qCAAqC,CAAA;AAAA,IAC5E;AACA,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,YAAY,CAAA;AAChD,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAIA,iCAAyB,uCAAuC,CAAA;AAAA,IAC9E;AAGA,IAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA;AAGjD,IAAA,MAAM,IAAA,GAAO,gBAAgB,eAAe,CAAA;AAC5C,IAAA,IAAI,CAAC,iBAAA,CAAkB,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EAAG;AACvC,MAAA,OAAO;AAAA,QACH,KAAA,EAAO,KAAA;AAAA,QACP,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAQ,EAAC;AAAA,QACT,QAAQ,EAAE,WAAA,EAAa,IAAI,UAAA,EAAW,EAAG,SAAS,EAAA,EAAG;AAAA,QACrD,KAAA,EAAO,CAAA,uBAAA,EAA0B,IAAA,CAAK,GAAG,CAAA;AAAA,OAC7C;AAAA,IACJ;AAGA,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AACtC,IAAA,IAAI,CAAC,eAAA,EAAiB;AAClB,MAAA,MAAM,IAAIA,iCAAyB,uCAAuC,CAAA;AAAA,IAC9E;AAEA,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAI,QAAQ,UAAA,EAAY;AAGpB,MAAA,MAAM,EAAE,cAAA,EAAAiG,eAAAA,EAAe,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,mBAAA,EAAA,EAAA,sBAAA,CAAA,CAAA;AACjC,MAAA,MAAM,SAAA,GAAY,IAAIA,eAAAA,CAAe;AAAA,QACjC,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,gBAAA,EAAkB,QAAQ,gBAAA,IAAoB,MAAA;AAAA,QAC9C,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,oBAAoB,OAAA,CAAQ;AAAA,OAC/B,CAAA;AACD,MAAA,MAAM,EAAE,eAAA,EAAAb,gBAAAA,EAAgB,GAAI,MAAM,OAAO,gBAAgB,CAAA;AACzD,MAAA,MAAM,IAAA,GAAO,IAAIA,gBAAAA,CAAgB,eAA0C,CAAA;AAC3E,MAAA,WAAA,GAAc,MAAM,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA;AAAA,IAC/C,CAAA,MAAO;AAEH,MAAA,IAAI,OAAA,CAAQ,mBAAA,CAAoB,MAAA,KAAW,CAAA,EAAG;AAC1C,QAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACjC,UAAA,MAAM,IAAIpF,gCAAA;AAAA,YACN;AAAA,WACJ;AAAA,QACJ;AAAA,MACJ,CAAA,MAAO;AACH,QAAA,MAAM,OAAA,GAAU,QAAQ,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAA,KAAMgG,WAAAA,CAAW,CAAA,EAAG,eAAe,CAAC,CAAA;AACtF,QAAA,IAAI,CAAC,OAAA,EAAS;AACV,UAAA,OAAO;AAAA,YACH,KAAA,EAAO,KAAA;AAAA,YACP,QAAQ,IAAA,CAAK,MAAA;AAAA,YACb,QAAQ,EAAC;AAAA,YACT,MAAA,EAAQ,EAAE,WAAA,EAAa,eAAA,EAAiB,SAAS,EAAA,EAAG;AAAA,YACpD,KAAA,EAAO;AAAA,WACX;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAGA,IAAA,MAAM,YAAY,MAAME,eAAA,CAAW,SAAS,eAAe,CAAA,EAAG,KAAK,GAAG,CAAA;AACtE,IAAA,IAAI;AACA,MAAA,MAAM,eAAA,CAAgB,IAAA,EAAM,SAAA,EAAW,iBAAiB,CAAA;AAAA,IAC5D,SAAS,GAAA,EAAK;AACV,MAAA,IAAI,eAAelG,gCAAA,EAA0B;AACzC,QAAA,OAAO;AAAA,UACH,KAAA,EAAO,KAAA;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAQ,EAAC;AAAA,UACT,MAAA,EAAQ,EAAE,WAAA,EAAa,eAAA,EAAiB,SAAS,EAAA,EAAG;AAAA,UACpD,OAAO,GAAA,CAAI;AAAA,SACf;AAAA,MACJ;AACA,MAAA,MAAM,GAAA;AAAA,IACV;AAGA,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,OAAO,CAAA;AAClC,IAAA,IAAI;AACA,MAAA,mBAAA,CAAoB,GAAA,kBAAK,IAAI,IAAA,EAAM,CAAA;AAAA,IACvC,SAAS,GAAA,EAAK;AACV,MAAA,IAAI,eAAeF,8BAAA,EAAwB;AACvC,QAAA,OAAO;AAAA,UACH,KAAA,EAAO,KAAA;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAQ,EAAC;AAAA,UACT,MAAA,EAAQ,EAAE,WAAA,EAAa,eAAA,EAAiB,SAAS,EAAA,EAAG;AAAA,UACpD,KAAA,EAAO;AAAA,SACX;AAAA,MACJ;AACA,MAAA,MAAM,GAAA;AAAA,IACV;AAEA,IAAA,IAAI,OAAA,CAAQ,oBAAoB,MAAA,EAAW;AACvC,MAAA,IAAI;AACA,QAAA,kBAAA,CAAmB,GAAA,EAAK,QAAQ,eAAe,CAAA;AAAA,MACnD,SAAS,GAAA,EAAK;AACV,QAAA,IAAI,eAAeE,gCAAA,EAA0B;AACzC,UAAA,OAAO;AAAA,YACH,KAAA,EAAO,KAAA;AAAA,YACP,QAAQ,IAAA,CAAK,MAAA;AAAA,YACb,QAAQ,EAAC;AAAA,YACT,MAAA,EAAQ,EAAE,WAAA,EAAa,eAAA,EAAiB,SAAS,EAAA,EAAG;AAAA,YACpD,OAAO,GAAA,CAAI;AAAA,WACf;AAAA,QACJ;AACA,QAAA,MAAM,GAAA;AAAA,MACV;AAAA,IACJ;AAGA,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,YAAY,CAAA;AAC3C,IAAA,IAAI,EAAE,iBAAiB,GAAA,CAAA,EAAM;AACzB,MAAA,MAAM,IAAIA,iCAAyB,uCAAuC,CAAA;AAAA,IAC9E;AACA,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAA0B;AACjD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAM,KAAA,CAAgC,SAAQ,EAAG;AAClE,MAAA,IAAI,OAAO,EAAA,KAAO,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACjD,QAAA,MAAM,IAAIA,iCAAyB,4BAA4B,CAAA;AAAA,MACnE;AACA,MAAA,UAAA,CAAW,GAAA,CAAI,EAAA,EAAI,KAAA,CAAM,GAAA,CAAI,mBAAmB,CAAC,CAAA;AAAA,IACrD;AACA,IAAA,MAAM,gBAAA,CAAiB,YAAY,GAAG,CAAA;AAOtC,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,cAAc,CAAA;AAChD,IAAA,IAAI,EAAE,wBAAwB,GAAA,CAAA,EAAM;AAChC,MAAA,OAAO;AAAA,QACH,KAAA,EAAO,KAAA;AAAA,QACP,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAQ,EAAC;AAAA,QACT,MAAA,EAAQ,EAAE,WAAA,EAAa,eAAA,EAAiB,SAAS,EAAA,EAAG;AAAA,QACpD,KAAA,EAAO;AAAA,OACX;AAAA,IACJ;AACA,IAAA,IAAI,EAAE,OAAA,CAAQ,qBAAA,YAAiC,eAAe,OAAA,CAAQ,qBAAA,CAAsB,WAAW,CAAA,EAAG;AACtG,MAAA,OAAO;AAAA,QACH,KAAA,EAAO,KAAA;AAAA,QACP,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAQ,EAAC;AAAA,QACT,MAAA,EAAQ,EAAE,WAAA,EAAa,eAAA,EAAiB,SAAS,EAAA,EAAG;AAAA,QACpD,KAAA,EAAO;AAAA,OACX;AAAA,IACJ;AACA,IAAA,IAAI,CAAC,IAAI,SAAA,EAAW;AAChB,MAAA,OAAO;AAAA,QACH,KAAA,EAAO,KAAA;AAAA,QACP,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAQ,EAAC;AAAA,QACT,MAAA,EAAQ,EAAE,WAAA,EAAa,eAAA,EAAiB,SAAS,EAAA,EAAG;AAAA,QACpD,KAAA,EAAO;AAAA,OACX;AAAA,IACJ;AACA,IAAA,IAAI;AACA,MAAA,MAAM,gBAAA,CAAiB;AAAA,QACnB,YAAA;AAAA,QACA,eAAe,GAAA,CAAI,SAAA;AAAA,QACnB,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,mBAAmB,OAAA,CAAQ,qBAAA;AAAA,QAC3B;AAAA,OACH,CAAA;AAAA,IACL,SAAS,GAAA,EAAK;AACV,MAAA,IAAI,eAAeA,gCAAA,EAA0B;AACzC,QAAA,OAAO;AAAA,UACH,KAAA,EAAO,KAAA;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAQ,EAAC;AAAA,UACT,MAAA,EAAQ,EAAE,WAAA,EAAa,eAAA,EAAiB,SAAS,EAAA,EAAG;AAAA,UACpD,OAAO,GAAA,CAAI;AAAA,SACf;AAAA,MACJ;AACA,MAAA,MAAM,GAAA;AAAA,IACV;AAGA,IAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAY,gBAAA,EAAiB,GAAI,eAAe,UAAU,CAAA;AAEhF,IAAA,MAAM,MAAA,GAAqB;AAAA,MACvB,WAAA,EAAa,eAAA;AAAA,MACb,OAAA,EAAS,2BAA0C;AAAA,KACvD;AACA,IAAA,MAAM,MAAA,GAA6B;AAAA,MAC/B,KAAA,EAAO,IAAA;AAAA,MACP,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAS,GAAA,CAAI,OAAA;AAAA,MACb;AAAA,KACJ;AACA,IAAA,IAAI,WAAA,SAAoB,KAAA,GAAQ,WAAA;AAChC,IAAA,OAAO,MAAA;AAAA,EACX;AACJ;;;AKjcA,qBAAA,EAAA;AAGA,WAAA,EAAA;AAaA,IAAMmG,2BAAAA,GAA6B,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAM7D,IAAM,YAAA,GAA4B,OAAO,IAAA,EAA4B,IAAA,KAAsC;AACvG,EAAA,MAAMC,QAAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,MAAM,QAAQ,OAAO,IAAA,KAAS,WAAWA,QAAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AAChE,EAAA,MAAM,aAAa,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,WAAW,KAAK,CAAA;AAC9D,EAAA,OAAO,IAAI,WAAW,UAAU,CAAA;AACpC,CAAA;AAGA,IAAM,YAAA,GAAe,kEAAA;AAMrB,SAAS,cAAc,MAAA,EAAyC;AAC5D,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACxC,EAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,IAAK,CAAC,CAAA;AACtD,EAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,UAAU,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAM,CAAA;AAEnC,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxC,IAAA,MAAM,CAAA,GAAI,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AACzC,IAAA,MAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,OAAA,CAAQ,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,CAAA;AAC1E,IAAA,MAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,OAAA,CAAQ,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,CAAA;AAC1E,IAAA,MAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,OAAA,CAAQ,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,CAAA;AAE1E,IAAA,KAAA,CAAM,SAAA,EAAW,CAAA,GAAK,CAAA,IAAK,CAAA,GAAM,CAAA,IAAK,CAAA;AACtC,IAAA,IAAI,SAAA,GAAY,YAAY,KAAA,CAAM,SAAA,EAAW,KAAM,CAAA,GAAI,EAAA,KAAS,IAAM,CAAA,IAAK,CAAA;AAC3E,IAAA,IAAI,YAAY,UAAA,EAAY,KAAA,CAAM,WAAW,CAAA,GAAA,CAAM,CAAA,GAAI,MAAS,CAAA,GAAK,CAAA;AAAA,EACzE;AAEA,EAAA,OAAO,KAAA;AACX;AAKA,SAASJ,WAAAA,CAAW,GAAe,CAAA,EAAwB;AACvD,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,IAAI,EAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,OAAO,KAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA;AACX;AAKA,SAASK,UAAS,SAAA,EAA2B;AACzC,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,UAAU,KAAK,EAAC;AAC9C,EAAA,OAAO,CAAA;AAAA,EAAgC,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,yBAAA,CAAA;AAC3D;AAMA,SAAS,iBAAiB,KAAA,EAA2B;AACjD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,IAAA,MAAA,IAAU,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA,CAAE,QAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC5F;AAMA,SAAS,sBAAsB,GAAA,EAAgD;AAC3E,EAAA,MAAM,SAA2B,EAAC;AAElC,EAAA,IAAI,OAAO,GAAA,CAAI,aAAa,CAAA,KAAM,SAAA,EAAW;AACzC,IAAA,MAAA,CAAO,WAAA,GAAc,IAAI,aAAa,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,OAAO,GAAA,CAAI,aAAa,CAAA,KAAM,SAAA,EAAW;AACzC,IAAA,MAAA,CAAO,WAAA,GAAc,IAAI,aAAa,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,OAAO,GAAA,CAAI,kBAAkB,CAAA,KAAM,QAAA,EAAU;AAC7C,IAAA,MAAA,CAAO,gBAAA,GAAmB,IAAI,kBAAkB,CAAA;AAAA,EACpD;AACA,EAAA,IAAI,OAAO,GAAA,CAAI,aAAa,CAAA,KAAM,QAAA,EAAU;AACxC,IAAA,MAAA,CAAO,WAAA,GAAc,IAAI,aAAa,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,OAAO,GAAA,CAAI,mBAAmB,CAAA,KAAM,QAAA,EAAU;AAC9C,IAAA,MAAA,CAAO,iBAAA,GAAoB,IAAI,mBAAmB,CAAA;AAAA,EACtD;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC5C,IAAA,IACI,EAAE,GAAA,IAAO,MAAA,CAAA,IACT,CAAC,GAAA,CAAI,WAAW,KAAK,CAAA,IACrB,GAAA,KAAQ,KAAA,IACR,QAAQ,KAAA,IACR,GAAA,KAAQ,SACR,GAAA,KAAQ,KAAA,IACR,QAAQ,KAAA,EACV;AACE,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAClB;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAKA,SAAS,mBAAmB,MAAA,EAAwB;AAChD,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,MAAM,CAAA;AAC1B,IAAA,MAAM,GAAA,GAAM,IAAI,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,IAAO,WAAA,EAAY;AACvD,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG;AACzB,MAAA,OAAO,GAAA;AAAA,IACX;AAAA,EACJ,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,EAAA;AACX;AAYO,IAAM,cAAN,MAA+C;AAAA,EACzC,MAAA,GAA2B,WAAA;AAAA,EAEpC,SAAS,OAAA,EAA2B;AAChC,IAAA,OAAO,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,SAAS,GAAG,CAAA;AAAA,EAC9D;AAAA,EAEA,MAAM,KAAA,CAAM,OAAA,EAAkB,OAAA,EAAoD;AAC9E,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAIrG,iCAAyB,2BAA2B,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,iBAAA,GAAoB,QAAQ,iBAAA,IAAqBmG,2BAAAA;AAEvD,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,MAAuC;AAAA,MAC1D,KAAA,EAAO,KAAA;AAAA,MACP,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,QAAQ,EAAC;AAAA,MACT,QAAQ,EAAE,WAAA,EAAa,IAAI,UAAA,EAAW,EAAG,SAAS,EAAA,EAAG;AAAA,MACrD;AAAA,KACJ,CAAA;AAGA,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI;AACA,MAAA,KAAA,GAAQG,kBAAW,OAAO,CAAA;AAAA,IAC9B,CAAA,CAAA,MAAQ;AACJ,MAAA,MAAM,IAAItG,iCAAyB,kCAAkC,CAAA;AAAA,IACzE;AAGA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACA,MAAA,MAAA,GAASuG,0BAAA,CAAsB,MAAM,GAAG,CAAA;AAAA,IAC5C,CAAA,CAAA,MAAQ;AACJ,MAAA,MAAM,IAAIvG,iCAAyB,2CAA2C,CAAA;AAAA,IAClF;AAGA,IAAA,MAAM,MAAM,MAAA,CAAO,GAAA;AACnB,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,iBAAA,CAAkB,QAAA,CAAS,GAAG,CAAA,EAAG;AAC7D,MAAA,OAAO,aAAA,CAAc,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAE,CAAA;AAAA,IACxD;AAIA,IAAA,MAAM,WAAW,MAAA,CAAO,GAAA;AACxB,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,OAAO,QAAA,CAAS,CAAC,CAAA,KAAM,QAAA;AAExF,IAAA,IAAI,SAAA;AAEJ,IAAA,IAAI,eAAA;AAEJ,IAAA,IAAI,MAAA,EAAQ;AAER,MAAA,IAAI;AACA,QAAA,SAAA,GAAY,MAAMkG,eAAAA,CAAWG,SAAAA,CAAS,SAAS,CAAC,CAAC,GAAG,GAAG,CAAA;AACvD,QAAA,eAAA,GAAkB,aAAA,CAAc,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,MAC/C,SAAS,GAAA,EAAK;AACV,QAAA,IAAI,GAAA,YAAerG,kCAA0B,MAAM,GAAA;AACnD,QAAA,MAAM,IAAIA,iCAAyB,qCAAqC,CAAA;AAAA,MAC5E;AAAA,IACJ,WAAW,OAAA,CAAQ,iBAAA,IAAqB,OAAA,CAAQ,iBAAA,CAAkB,SAAS,CAAA,EAAG;AAK1E,MAAA,SAAA,GAAY,MAAA;AAAA,IAChB,CAAA,MAAO;AAEH,MAAA,MAAM,IAAIA,iCAAyB,sCAAsC,CAAA;AAAA,IAC7E;AAOA,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,SAAA,EAAW;AACX,MAAA,IAAI;AACA,QAAA,MAAMwG,OAAAA,GAAS,MAAMC,cAAA,CAAU,KAAA,CAAM,KAAK,SAAA,EAAW,EAAE,UAAA,EAAY,iBAAA,EAAmB,CAAA;AACtF,QAAA,OAAA,GAAUD,OAAAA,CAAO,OAAA;AAAA,MACrB,CAAA,CAAA,MAAQ;AACJ,QAAA,OAAO,cAAc,0CAA0C,CAAA;AAAA,MACnE;AAAA,IACJ,CAAA,MAAO;AAEH,MAAA,MAAM,OAAO,OAAA,CAAQ,iBAAA;AACrB,MAAA,MAAM,SAAA,GAAa,OAAmC,KAAK,CAAA;AAC3D,MAAA,IAAI,UAAA;AACJ,MAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AAC/B,QAAA,MAAM,OAAA,GAAU,KAAK,IAAA,CAAK,CAAC,MAAO,CAAA,CAA8B,KAAK,MAAM,SAAS,CAAA;AACpF,QAAA,IAAI,CAAC,OAAA,EAAS;AACV,UAAA,OAAO,aAAA;AAAA,YACH,sDAAsD,SAAS,CAAA;AAAA,WACnE;AAAA,QACJ;AACA,QAAA,UAAA,GAAa,CAAC,OAAO,CAAA;AAAA,MACzB,CAAA,MAAO;AACH,QAAA,UAAA,GAAa,IAAA;AAAA,MACjB;AACA,MAAA,IAAI,eAAA;AACJ,MAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC1B,QAAA,IAAI,YAAA;AACJ,QAAA,IAAI;AACA,UAAA,YAAA,GAAe,MAAME,cAAA,CAAU,GAAA,EAAK,GAAG,CAAA;AAAA,QAC3C,CAAA,CAAA,MAAQ;AAEJ,UAAA;AAAA,QACJ;AACA,QAAA,IAAI;AACA,UAAA,MAAMF,OAAAA,GAAS,MAAMC,cAAA,CAAU,KAAA,CAAM,KAAK,YAAA,EAAc;AAAA,YACpD,UAAA,EAAY;AAAA,WACf,CAAA;AACD,UAAA,eAAA,GAAkBD,OAAAA,CAAO,OAAA;AACzB,UAAA;AAAA,QACJ,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACJ;AACA,MAAA,IAAI,CAAC,eAAA,EAAiB;AAClB,QAAA,OAAO,cAAc,0CAA0C,CAAA;AAAA,MACnE;AACA,MAAA,OAAA,GAAU,eAAA;AAAA,IACd;AAIA,IAAA,MAAM,YAAA,GAAe,OAAO,OAAA,CAAQ,KAAK,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAK,CAAA,GAAI,EAAA;AAC3E,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC3B,WAAA,EAAa,eAAA,IAAmB,IAAI,UAAA,EAAW;AAAA,MAC/C,OAAA,EAAS,mBAAmB,YAAY;AAAA,KAC5C;AAEA,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAI,oBAAoB,MAAA,EAAW,CAInC,MAAA,IAAW,QAAQ,UAAA,EAAY;AAG3B,MAAA,MAAM,EAAE,cAAA,EAAAP,eAAAA,EAAe,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,mBAAA,EAAA,EAAA,sBAAA,CAAA,CAAA;AACjC,MAAA,MAAM,SAAA,GAAY,IAAIA,eAAAA,CAAe;AAAA,QACjC,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,gBAAA,EAAkB,QAAQ,gBAAA,IAAoB,MAAA;AAAA,QAC9C,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,oBAAoB,OAAA,CAAQ;AAAA,OAC/B,CAAA;AACD,MAAA,MAAM,EAAE,eAAA,EAAAb,gBAAAA,EAAgB,GAAI,MAAM,OAAO,gBAAgB,CAAA;AACzD,MAAA,MAAM,IAAA,GAAO,IAAIA,gBAAAA,CAAgB,eAA0C,CAAA;AAC3E,MAAA,WAAA,GAAc,MAAM,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA;AAAA,IAC/C,CAAA,MAAO;AAEH,MAAA,IAAI,OAAA,CAAQ,mBAAA,CAAoB,MAAA,KAAW,CAAA,EAAG;AAC1C,QAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACjC,UAAA,MAAM,IAAIpF,gCAAA;AAAA,YACN;AAAA,WACJ;AAAA,QACJ;AAAA,MACJ,CAAA,MAAO;AACH,QAAA,MAAM,SAAA,GAAY,QAAQ,mBAAA,CAAoB,IAAA;AAAA,UAAK,CAAC,OAAA,KAChDgG,WAAAA,CAAW,OAAA,EAAS,eAAgB;AAAA,SACxC;AACA,QAAA,IAAI,CAAC,SAAA,EAAW;AACZ,UAAA,OAAO,cAAc,mCAAmC,CAAA;AAAA,QAC5D;AAAA,MACJ;AAAA,IACJ;AAWA,IAAA,IAAI,KAAA,CAAM,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAQ9B,MAAA,MAAM,qBAA0C,EAAC;AACjD,MAAA,KAAA,MAAW,UAAA,IAAc,MAAM,WAAA,EAAa;AACxC,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI;AACA,UAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,WAAA,GAAc,MAAA,CAAO,aAAA,CAAc,UAAU,CAAC,CAAC,CAAA;AAAA,QAC3E,CAAA,CAAA,MAAQ;AACJ,UAAA,OAAO,cAAc,gDAAgD,CAAA;AAAA,QACzE;AACA,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IAAM,OAAO,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,MAAA,KAAW,CAAA,EAAI;AACxE,UAAA,OAAO,cAAc,4CAA4C,CAAA;AAAA,QACrE;AACA,QAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,UAAqB,CAAA;AAC1D,QAAA,kBAAA,CAAmB,IAAA,CAAK;AAAA,UACpB,GAAA,EAAK,UAAA;AAAA,UACL,IAAA,EAAM,iBAAiB,SAAS,CAAA;AAAA,UAChC,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,KAAA,EAAO,OAAO,MAAA,KAAW,CAAA,GAAI,OAAO,CAAC,CAAA,GAAI,OAAO,CAAC;AAAA,SACpD,CAAA;AAAA,MACL;AAGA,MAAA,MAAM,IAAA,GAAO,oBAAoB,OAAO,CAAA;AACxC,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,MAAA,MAAM,kBAAkB,IAAA,CAAK,eAAA;AAK7B,MAAA,MAAM,SAAA,GAAY,CAAC,GAAG,kBAAkB,CAAA;AACxC,MAAA,WAAS;AACL,QAAA,MAAM,WAAgC,EAAC;AACvC,QAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACvB,UAAA,MAAM,KAAA,GACF,CAAA,CAAE,MAAA,KAAW,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,GAAI,eAAA,CAAgB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACtE,UAAA,IAAI,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA;AAAA,QAC9B;AACA,QAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3B,QAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACtB,UAAA,MAAM,GAAA,GAAM,mBAAA,CAAoB,CAAA,CAAE,KAAK,CAAA;AACvC,UAAA,KAAA,MAAW,CAAA,IAAK,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,IAAI,CAAC,CAAA;AAC5C,UAAA,KAAA,MAAW,CAAA,IAAK,GAAA,CAAI,eAAA,EAAiB,eAAA,CAAgB,IAAI,CAAC,CAAA;AAC1D,UAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA;AAC/B,UAAA,IAAI,GAAA,IAAO,CAAA,EAAG,SAAA,CAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QACzC;AAAA,MACJ;AAEA,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,OAAO,cAAc,0BAA0B,CAAA;AAAA,MACnD;AAAA,IACJ;AASA,IAAA,MAAM,GAAA,GAAM,QAAQ,KAAK,CAAA;AACzB,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAC,GAAA,IAAO,OAAO,QAAQ,QAAA,IAAY,CAAC,CAAC,GAAA,CAAI,KAAK,CAAA;AACrE,IAAA,MAAM,kBAAA,GAAqB,aAAA,IAAiB,OAAA,CAAQ,iBAAA,KAAsB,IAAA;AAE1E,IAAA,IAAI,kBAAA,IAAsB,CAAC,KAAA,CAAM,KAAA,EAAO;AACpC,MAAA,OAAO,aAAA;AAAA,QACH;AAAA,OACJ;AAAA,IACJ;AAEA,IAAA,IAAI,MAAM,KAAA,EAAO;AACb,MAAA,IAAI,CAAC,aAAA,EAAe;AAChB,QAAA,MAAM,IAAIhG,iCAAyB,+CAA+C,CAAA;AAAA,MACtF;AAKA,MAAA,IAAI,OAAO,OAAA,CAAQ,KAAA,KAAU,YAAY,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,EAAG;AACjE,QAAA,OAAO,cAAc,mDAAmD,CAAA;AAAA,MAC5E;AAEA,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI;AACA,QAAA,MAAM,QAAA,GAAWuG,0BAAA,CAAsB,KAAA,CAAM,KAAK,CAAA;AAClD,QAAA,MAAM,QAAQ,QAAA,CAAS,GAAA;AACvB,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,iBAAA,CAAkB,QAAA,CAAS,KAAK,CAAA,EAAG;AACjE,UAAA,OAAO,aAAA,CAAc,CAAA,8BAAA,EAAiC,KAAK,CAAA,CAAE,CAAA;AAAA,QACjE;AACA,QAAA,SAAA,GAAY,MAAMG,cAAA,CAAU,GAAA,CAAK,KAAK,GAA8B,KAAK,CAAA;AAAA,MAC7E,SAAS,GAAA,EAAK;AACV,QAAA,IAAI,GAAA,YAAe1G,kCAA0B,MAAM,GAAA;AACnD,QAAA,MAAM,IAAIA,iCAAyB,0CAA0C,CAAA;AAAA,MACjF;AAGA,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI;AACA,QAAA,MAAM,QAAA,GAAW,MAAMyG,cAAA,CAAU,KAAA,CAAM,OAAO,SAAA,EAAW;AAAA,UACrD,UAAA,EAAY,iBAAA;AAAA,UACZ,GAAI,QAAQ,QAAA,GAAW,EAAE,UAAU,OAAA,CAAQ,QAAA,KAAa;AAAC,SAC5D,CAAA;AACD,QAAA,SAAA,GAAY,QAAA,CAAS,OAAA;AAAA,MACzB,CAAA,CAAA,MAAQ;AACJ,QAAA,OAAO,cAAc,+CAA+C,CAAA;AAAA,MACxE;AAGA,MAAA,IAAI,SAAA,CAAU,OAAO,CAAA,KAAM,OAAA,CAAQ,KAAA,EAAO;AACtC,QAAA,OAAO,cAAc,sCAAsC,CAAA;AAAA,MAC/D;AAGA,MAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,MAAM,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA,GAAI,GAAA,GAAM,EAAA;AAC1F,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,GAAA,GAAM,GAAA,GAAM,cAAA;AACvC,MAAA,MAAM,WAAA,GAAc,MAAM,YAAA,CAAa,YAAuB,CAAA;AAC9D,MAAA,MAAM,cAAA,GAAiB,iBAAiB,WAAW,CAAA;AACnD,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,KAAM,cAAA,EAAgB;AACzC,QAAA,OAAO,cAAc,wCAAwC,CAAA;AAAA,MACjE;AAAA,IACJ;AAGA,IAAA,IAAI,cAAA;AACJ,IAAA,IAAI;AACA,MAAA,MAAM,OAAA,GAAU,MAAME,kBAAA,CAAY,OAAA,EAAS,YAAY,CAAA;AACvD,MAAA,cAAA,GAAiB,MAAMC,gBAAA;AAAA,QACnB,QAAQ,GAAA,CAAI,OAAA;AAAA,QACZ,OAAA,CAAQ,WAAA;AAAA,QACR;AAAA,OACJ;AAAA,IACJ,CAAA,CAAA,MAAQ;AACJ,MAAA,MAAM,IAAI5G,iCAAyB,qCAAqC,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,GAAA,GAAM,OAAO,OAAA,CAAQ,KAAK,MAAM,QAAA,GAAY,OAAA,CAAQ,KAAK,CAAA,GAAe,MAAA;AAE9E,IAAA,MAAM,MAAA,GAA6B;AAAA,MAC/B,KAAA,EAAO,IAAA;AAAA,MACP,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,MAAA,EAAQ,sBAAsB,cAAc,CAAA;AAAA,MAC5C,MAAA,EAAQ,UAAA;AAAA,MACR,GAAI,GAAA,KAAQ,MAAA,GAAY,EAAE,GAAA,KAAQ;AAAC,KACvC;AACA,IAAA,IAAI,WAAA,SAAoB,KAAA,GAAQ,WAAA;AAChC,IAAA,OAAO,MAAA;AAAA,EACX;AACJ;AAWA,SAAS,oBAAoB,IAAA,EAAwE;AACjG,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAY;AACxC,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,KAAyB;AACpC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,QAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC1D,UAAA,MAAM,GAAA,GAAM,IAAA;AACZ,UAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAC5B,UAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,IAAS,OAAO,GAAA,CAAI,KAAK,CAAA,KAAM,QAAA,EAAU;AAC1E,YAAA,eAAA,CAAgB,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC9B,YAAA;AAAA,UACJ;AAAA,QACJ;AACA,QAAA,KAAA,CAAM,IAAI,CAAA;AAAA,MACd;AAAA,IACJ,CAAA,MAAA,IAAW,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AAC3C,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,EAAG;AACnE,QAAA,IAAI,CAAA,KAAM,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACjC,UAAA,KAAA,MAAW,CAAA,IAAK,GAAG,IAAI,OAAO,MAAM,QAAA,EAAU,QAAA,CAAS,IAAI,CAAC,CAAA;AAC5D,UAAA;AAAA,QACJ;AACA,QAAA,KAAA,CAAM,CAAC,CAAA;AAAA,MACX;AAAA,IACJ;AAAA,EACJ,CAAA;AACA,EAAA,KAAA,CAAM,IAAI,CAAA;AACV,EAAA,OAAO,EAAE,UAAU,eAAA,EAAgB;AACvC;;;AN3gBA,IAAM,UAA+B,CAAC,IAAI,aAAY,EAAG,IAAI,YAAY,CAAA;AAEzE,eAAsB,iBAAA,CAAkB,SAAkB,OAAA,EAAoD;AAC1G,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC1B,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,EAAG;AAC1B,MAAA,OAAO,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAAA,IACxC;AAAA,EACJ;AAEA,EAAA,OAAO;AAAA,IACH,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,WAAA;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,QAAQ,EAAE,WAAA,EAAa,IAAI,UAAA,EAAW,EAAG,SAAS,EAAA,EAAG;AAAA,IACrD,KAAA,EAAO;AAAA,GACX;AACJ;;;AOrBA,qBAAA,EAAA;;;ACAA,qBAAA,EAAA;AAEA,WAAA,EAAA;AAGA,IAAM,aAAA,GAAgB,SAAA;AACtB,IAAM,gCAAgB,IAAI,GAAA,CAAI,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA;AAapD,eAAsB,4BAAA,CAClB,KACA,UAAA,EAC8B;AAC9B,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACA,IAAA,MAAA,GAASuG,2BAAsB,GAAG,CAAA;AAAA,EACtC,SAAS,GAAA,EAAK;AACV,IAAA,MAAM,IAAI3F,8BAAsB,sBAAA,EAAwB;AAAA,MACpD,KAAA,EAAO;AAAA,KACV,CAAA;AAAA,EACL;AAEA,EAAA,MAAM,MAAM,OAAO,MAAA,CAAO,GAAA,KAAQ,QAAA,GAAW,OAAO,GAAA,GAAM,EAAA;AAC1D,EAAA,MAAMI,OAAM,OAAO,MAAA,CAAO,GAAA,KAAQ,QAAA,GAAW,OAAO,GAAA,GAAM,EAAA;AAE1D,EAAA,IAAI,QAAQ,aAAA,IAAiB,CAAC,aAAA,CAAc,GAAA,CAAIA,IAAG,CAAA,EAAG;AAClD,IAAA,MAAM,IAAIL,2BAAA,CAAoB,GAAA,EAAKK,IAAG,CAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI;AACA,IAAA,MAAM,MAAA,GAAS,MAAM6F,mBAAA,CAAe,GAAA,EAAK,UAAU,CAAA;AACnD,IAAA,SAAA,GAAY,MAAA,CAAO,SAAA;AAAA,EACvB,SAAS,GAAA,EAAK;AACV,IAAA,MAAM,IAAIjG,6BAAA,CAAsB,MAAA,EAAW,EAAE,KAAA,EAAO,KAAc,CAAA;AAAA,EACtE;AAEA,EAAA,IAAI;AACA,IAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAY,CAAE,OAAO,SAAS,CAAA;AAC/C,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EAC1B,SAAS,GAAA,EAAK;AACV,IAAA,MAAM,IAAIA,8BAAsB,uCAAA,EAAyC;AAAA,MACrE,KAAA,EAAO;AAAA,KACV,CAAA;AAAA,EACL;AACJ;;;ACvDA,qBAAA,EAAA;AAIA,IAAMI,IAAAA,GAAM,IAAI0E,aAAAA,CAAY,EAAE,aAAA,EAAe,OAAO,UAAA,EAAY,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,CAAA;AAE7F,eAAe,OAAO,KAAA,EAAwC;AAC1D,EAAA,OAAO,IAAI,WAAW,MAAM,MAAA,CAAO,OAAO,MAAA,CAAO,SAAA,EAAW,KAAgC,CAAC,CAAA;AACjG;AAaA,eAAsB,6BAA6B,MAAA,EAK3B;AACpB,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAa,KAAA,EAAO,oBAAmB,GAAI,MAAA;AAC7D,EAAA,MAAM,YAAA,GAAe,MAAM,MAAA,CAAO,IAAI,UAAA,CAAW1E,IAAAA,CAAI,MAAA,CAAO,CAAC,QAAA,EAAU,kBAAkB,CAAC,CAAC,CAAC,CAAA;AAC5F,EAAA,MAAM,eAAA,GAAkB,MAAM,MAAA,CAAO,IAAI,UAAA,CAAWA,IAAAA,CAAI,MAAA,CAAO,CAAC,WAAA,EAAa,kBAAkB,CAAC,CAAC,CAAC,CAAA;AAClG,EAAA,OAAO,IAAI,UAAA,CAAWA,IAAAA,CAAI,MAAA,CAAO,CAAC,IAAA,EAAM,IAAA,EAAM,CAAC,YAAA,EAAc,eAAA,EAAiB,KAAK,CAAC,CAAC,CAAC,CAAA;AAC1F;AAeA,eAAe,oBAAoB,GAAA,EAAsC;AACrE,EAAA,IAAI,GAAA,CAAI,QAAQ,IAAA,EAAM;AAClB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,GAAA,CAAI,GAAG,CAAA,CAAE,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,CAAC,IAAI,GAAA,IAAO,CAAC,IAAI,CAAA,IAAK,CAAC,IAAI,CAAA,EAAG;AAC9B,IAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,EACvF;AACA,EAAA,MAAM,SAAA,GAAY,WAAW,GAAA,CAAI,GAAG,qBAAqB,GAAA,CAAI,CAAC,CAAA,OAAA,EAAU,GAAA,CAAI,CAAC,CAAA,EAAA,CAAA;AAC7E,EAAA,OAAO,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,SAAS,CAAC,CAAA;AACrD;AA2BA,eAAsB,wCAAwC,MAAA,EAKtC;AACpB,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,uBAAsB,GAAI,MAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,qBAAA,GAAwB,MAAM,mBAAA,CAAoB,qBAAqB,CAAA,GAAI,IAAA;AACzF,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,IAAI,WAAWA,IAAAA,CAAI,MAAA,CAAO,CAAC,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO,WAAW,CAAC,CAAC,CAAC,CAAA;AAC/F,EAAA,OAAO,IAAI,UAAA,CAAWA,IAAAA,CAAI,MAAA,CAAO,CAAC,IAAA,EAAM,IAAA,EAAM,CAAC,mBAAA,EAAqB,QAAQ,CAAC,CAAC,CAAC,CAAA;AACnF;;;AFlFA,WAAA,EAAA;AAoBA,IAAM,uBAAA,GAA4D;AAAA,EAC9D,WAAA,EAAa,WAAA;AAAA,EACb,IAAA,EAAM;AACV,CAAA;AAaA,eAAsB,kBAAA,CAClB,OAAA,EACA,KAAA,EACA,OAAA,EACqB;AACrB,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,OAAA,EAAS,OAAO,CAAA;AAEvD,EAAA,MAAM,UAAA,GAAa,uBAAA,CAAwB,MAAA,CAAO,MAAM,KAAK,MAAA,CAAO,MAAA;AAIpE,EAAA,MAAM,aAAA,GACF,OAAO,MAAA,KAAW,MAAA,IAAU,OAAO,gBAAA,KAAqB,MAAA,GACjD,MAAA,CAAO,gBAAA,GACP,MAAA,CAAO,MAAA;AAYlB,EAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,UAAU,CAAA;AAC1E,EAAA,MAAM,wBAAA,GACF,UAAA,CAAW,IAAA,CAAK,CAAC,MAAM,qBAAA,CAAsB,CAAA,EAAG,MAAM,CAAC,KACvD,UAAA,CAAW,CAAC,CAAA,IACZ,KAAA,CAAM,YAAY,CAAC,CAAA;AAEvB,EAAA,MAAM,OAAA,GAA6B;AAAA,IAC/B,EAAA,EAAI,0BAA0B,EAAA,IAAM,WAAA;AAAA,IACpC,MAAA,EAAQ,UAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACZ;AAEA,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,MAAA,CAAO,QAAQ,QAAA,EAAU;AACjE,IAAA,OAAA,CAAQ,MAAM,MAAA,CAAO,GAAA;AAAA,EACzB;AACA,EAAA,IAAI,OAAO,MAAA,KAAW,MAAA,IAAU,OAAO,MAAA,CAAO,YAAY,QAAA,EAAU;AAChE,IAAA,OAAA,CAAQ,UAAU,MAAA,CAAO,OAAA;AAAA,EAC7B;AAKA,EAAA,IACI,OAAO,KAAA,EAAO,mBAAA,IACd,OAAO,KAAA,CAAM,mBAAA,CAAoB,SAAS,CAAA,EAC5C;AACE,IAAA,OAAA,CAAQ,qBAAA,GAAwB,CAAC,GAAG,MAAA,CAAO,MAAM,mBAAmB,CAAA;AAAA,EACxE;AAEA,EAAA,MAAM,KAAA,GAAQ8F,eAAA,CAAW,KAAA,EAAO,CAAC,OAAO,CAAC,CAAA;AACzC,EAAA,MAAM,aAAa,KAAA,CAAM,SAAA,GAAYC,oBAAA,CAAgB,KAAA,EAAO,KAAK,CAAA,GAAI,IAAA;AAErE,EAAA,OAAO;AAAA,IACH,MAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,KAAA,CAAM;AAAA,GACjC;AACJ;AAWA,SAAS,qBAAA,CACL,iBACA,MAAA,EACO;AACP,EAAA,IAAI,MAAA,CAAO,WAAW,WAAA,EAAa;AAC/B,IAAA,MAAM,SAAA,GAAY,gBAAgB,IAAA,EAAM,UAAA;AACxC,IAAA,OACI,OAAO,MAAA,CAAO,GAAA,KAAQ,QAAA,IACtB,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,IACvB,SAAA,CAAU,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA;AAAA,EAErC;AACA,EAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAQ;AAC1B,IAAA,MAAM,OAAA,GAAU,gBAAgB,IAAA,EAAM,aAAA;AACtC,IAAA,OAAO,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,IAAY,YAAY,MAAA,CAAO,OAAA;AAAA,EACpE;AACA,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,oBAAoB,CAAA,EAAoC;AAC7D,EAAA,OACI,OAAO,CAAA,KAAM,QAAA,IACb,CAAA,KAAM,QACN,UAAA,IAAc,CAAA,IACd,OAAQ,CAAA,CAA8B,aAAa,QAAA,IACnD,MAAA,CAAO,IAAA,CAAK,CAAC,EAAE,MAAA,KAAW,CAAA;AAElC;AAKA,IAAM,eAAA,GAAkB,kEAAA;AAExB,SAAS,iBAAiB,KAAA,EAA2B;AACjD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACvC,EAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,IAAK,CAAC,CAAA;AACtD,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,UAAU,CAAA;AACvC,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxC,IAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC5C,IAAA,MAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,OAAA,CAAQ,MAAA,GAAS,eAAA,CAAgB,OAAA,CAAQ,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,CAAA;AAC7E,IAAA,MAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,OAAA,CAAQ,MAAA,GAAS,eAAA,CAAgB,OAAA,CAAQ,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,CAAA;AAC7E,IAAA,MAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,OAAA,CAAQ,MAAA,GAAS,eAAA,CAAgB,OAAA,CAAQ,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,CAAA;AAC7E,IAAA,IAAI,MAAM,EAAA,IAAM,CAAA,KAAM,MAAM,CAAA,KAAM,EAAA,IAAM,MAAM,EAAA,EAAI;AAC9C,MAAA,MAAM,IAAI,UAAU,6CAA6C,CAAA;AAAA,IACrE;AACA,IAAA,KAAA,CAAM,SAAA,EAAW,CAAA,GAAK,CAAA,IAAK,CAAA,GAAM,CAAA,IAAK,CAAA;AACtC,IAAA,IAAI,SAAA,GAAY,YAAY,KAAA,CAAM,SAAA,EAAW,KAAM,CAAA,GAAI,EAAA,KAAS,IAAM,CAAA,IAAK,CAAA;AAC3E,IAAA,IAAI,YAAY,UAAA,EAAY,KAAA,CAAM,WAAW,CAAA,GAAA,CAAM,CAAA,GAAI,MAAS,CAAA,GAAK,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,KAAA;AACX;AAUA,SAAS,0BAA0B,GAAA,EAAiC;AAChE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACA,IAAA,GAAA,GAAMR,0BAAAA,CAAsB,GAAG,CAAA,CAAE,GAAA;AAAA,EACrC,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,WAAW,CAAA,EAAG;AAC7C,IAAA,OAAO,MAAA;AAAA,EACX;AAKA,EAAA,IAAI;AACA,IAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,gBAAA,CAAiB,GAAG,CAAC,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,MAAA;AAAA,EACX;AACJ;AAEA,SAAS,wBAAwB,CAAA,EAAwC;AACrE,EAAA,OACI,OAAO,CAAA,KAAM,QAAA,IACb,CAAA,KAAM,IAAA,IACN,UAAA,IAAc,CAAA,IACd,OAAQ,CAAA,CAA8B,QAAA,KAAa,QAAA,IAClD,CAAA,CAA8B,QAAA,KAAa,IAAA;AAEpD;AAgBA,eAAsB,2BAAA,CAClB,QAAA,EACA,KAAA,EACA,OAAA,EACqB;AACrB,EAAA,IAAI,mBAAA,CAAoB,QAAQ,CAAA,EAAG;AAC/B,IAAA,IAAI,CAAC,QAAQ,aAAA,EAAe;AACxB,MAAA,MAAM,IAAI1F,iCAAA,EAA0B;AAAA,IACxC;AAeA,IAAA,MAAM,WAAA,GAAkD,EAAE,GAAG,OAAA,EAAQ;AACrE,IAAA,IACI,OAAA,CAAQ,qBAAA,KAA0B,MAAA,IAClC,OAAA,CAAQ,QAAA,KAAa,MAAA,IACrB,OAAA,CAAQ,WAAA,KAAgB,MAAA,IACxB,OAAA,CAAQ,KAAA,KAAU,MAAA,EACpB;AACE,MAAA,IAAI,OAAA,CAAQ,6BAA6B,eAAA,EAAiB;AAOtD,QAAA,IAAI,OAAA,CAAQ,0BAA0B,MAAA,EAAW;AAC7C,UAAA,MAAM,IAAIC,yCAAA,EAAkC;AAAA,QAChD;AACA,QAAA,WAAA,CAAY,qBAAA,GAAwB,MAAM,uCAAA,CAAwC;AAAA,UAC9E,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,aAAa,OAAA,CAAQ,WAAA;AAAA,UACrB,uBAAuB,OAAA,CAAQ;AAAA,SAClC,CAAA;AAAA,MACL,CAAA,MAAO;AACH,QAAA,MAAM,kBAAA,GAAqB,yBAAA,CAA0B,QAAA,CAAS,QAAQ,CAAA;AACtE,QAAA,IAAI,uBAAuB,MAAA,EAAW;AAClC,UAAA,WAAA,CAAY,qBAAA,GAAwB,MAAM,4BAAA,CAA6B;AAAA,YACnE,UAAU,OAAA,CAAQ,QAAA;AAAA,YAClB,aAAa,OAAA,CAAQ,WAAA;AAAA,YACrB,OAAO,OAAA,CAAQ,KAAA;AAAA,YACf;AAAA,WACH,CAAA;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,MAAM,YAAY,MAAM,4BAAA;AAAA,MACpB,QAAA,CAAS,QAAA;AAAA,MACT,OAAA,CAAQ;AAAA,KACZ;AACA,IAAA,OAAO,2BAAA,CAA4B,SAAA,EAAW,KAAA,EAAO,WAAW,CAAA;AAAA,EACpE;AAEA,EAAA,IAAI,CAAC,uBAAA,CAAwB,QAAQ,CAAA,EAAG;AACpC,IAAA,MAAM,IAAI,UAAU,2EAAwE,CAAA;AAAA,EAChG;AAEA,EAAA,MAAM,UAAU,QAAA,CAAS,QAAA;AACzB,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAEpC,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,UAAU,oDAAiD,CAAA;AAAA,EACzE;AAEA,EAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACvB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,EAAE,CAAC,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,SAAA;AAAA,QACN,mBAAmB,EAAE,CAAA,6DAAA;AAAA,OACzB;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,MAAM,oBAAoB,QAAA,CAAS,MAAA;AAAA,IAC/B,CAAC,GAAA,EAAK,EAAA,KAAO,GAAA,GAAM,OAAA,CAAQ,EAAE,CAAA,CAAE,MAAA;AAAA,IAC/B;AAAA,GACJ;AACA,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,iBAAA,GAAoB,CAAA,EAAG;AAC9C,IAAA,MAAM,IAAIC,4CAAA,CAAqC,QAAA,CAAS,MAAA,EAAQ,iBAAiB,CAAA;AAAA,EACrF;AAEA,EAAA,MAAM,gBAAA,GAAmB,SAAS,CAAC,CAAA;AACnC,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,gBAAgB,CAAA,CAAE,CAAC,CAAA;AAWhD,EAAA,MAAM,wBAAA,GAA2B,MAAM,WAAA,CAAY,IAAA;AAAA,IAC/C,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO;AAAA,GACpB;AACA,EAAA,MAAM,mBAAA,GACF,0BAA0B,MAAA,KAAW,UAAA,IAAc,OAAO,YAAA,KAAiB,QAAA,GACrE,gBAAA,CAAiB,YAAY,CAAA,GAC7B,YAAA;AAEV,EAAA,OAAO,kBAAA,CAAmB,mBAAA,EAAqB,KAAA,EAAO,OAAO,CAAA;AACjE;;;AXnTA,WAAA,EAAA;;;AcnCA,qBAAA,EAAA;AAqBO,IAAM,gBAAN,MAAqC;AAAA,EACvB,OAAA,uBAAc,GAAA,EAAmB;AAAA,EACjC,UAAA;AAAA,EAEjB,YAAY,IAAA,EAAgC;AACxC,IAAA,IAAA,CAAK,UAAA,GAAa,MAAM,UAAA,IAAc,GAAA;AAAA,EAC1C;AAAA,EAEA,MAAM,IAAI,GAAA,EAAyC;AAC/C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,IAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,CAAM,SAAA,EAAW;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAC3B,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACjB;AAAA,EAEA,MAAM,GAAA,CAAI,GAAA,EAAa,KAAA,EAAmB,UAAA,EAAmC;AAEzE,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAI,GAAA,EAAK;AAAA,MAClB,KAAA;AAAA,MACA,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,GAAI,UAAA,GAAa;AAAA,KACxC,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,GAAO,IAAA,CAAK,UAAA,EAAY;AACxC,MAAA,MAAM,SAAS,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AAC1C,MAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,IAC9B;AAAA,EACJ;AACJ;;;ACvDA,qBAAA,EAAA;;;ACAA,qBAAA,EAAA;AAGA,eAAA,EAAA;AA8BO,IAAM,mBAAN,MAA6C;AAAA,EAC/B,UAAyB,EAAC;AAAA,EAC1B,QAAA,uBAA2C,GAAA,EAAI;AAAA,EAC/C,YAAA,uBAA+C,GAAA,EAAI;AAAA,EAEpE,YAAY,KAAA,EAAkC;AAC1C,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACvB,MAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,MAAA,MAAM,MAAA,GAAsB,EAAE,WAAA,EAAa,IAAA,EAAM,QAAQ,QAAA,EAAS;AAClE,MAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAM,CAAA;AACxB,MAAA,QAAA,CAAS,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAChD,MAAA,MAAM,GAAA,GAAM,UAAU,IAAI,CAAA;AAC1B,MAAA,IAAI,GAAA,EAAK,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,KAAK,MAAM,CAAA;AAAA,IAChD;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,IAAA,EAA8C;AAC3D,IAAA,MAAM,UAAyB,EAAC;AAChC,IAAA,IAAI,KAAK,GAAA,EAAK;AACV,MAAA,MAAM,GAAA,GAAMoE,WAAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAC/B,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AACrC,MAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,IAAA,CAAK,GAAG,OAAO,CAAA;AAAA,IACxC;AACA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACb,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,KAAK,MAAM,CAAA;AACjD,MAAA,IAAI,OAAA,EAAS;AACT,QAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACrB,UAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAC5C;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,OAAO,OAAA;AAAA,EACX;AACJ;AAOO,IAAM,sBAAN,MAAgD;AAAA,EACnD,YAA6B,MAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAuB;AAAA,EAAvB,MAAA;AAAA,EAE7B,MAAM,WAAW,IAAA,EAA8C;AAC3D,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC1B,IAAA,CAAK,OAAO,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,UAAA,CAAW,IAAI,CAAC;AAAA,KACrD;AACA,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,MAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AACzB,MAAA,KAAA,MAAW,UAAU,KAAA,EAAO;AACxB,QAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,CAAO,WAAW,CAAA;AACxC,QAAA,MAAM,GAAA,GAAM,GAAA,IAAO,MAAA,CAAO,WAAA,CAAY,YAAA;AACtC,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,QAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,QAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,MACnB;AAAA,IACJ;AACA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,MAAM,cAAA,GAAyD;AAC3D,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAQ;AAC7B,MAAA,MAAM,CAAA,GAAI,KAAA;AAGV,MAAA,IAAI,OAAO,CAAA,CAAE,cAAA,KAAmB,UAAA,EAAY;AACxC,QAAA,OAAO,EAAE,cAAA,EAAe;AAAA,MAC5B;AAAA,IACJ;AACA,IAAA,OAAO,EAAC;AAAA,EACZ;AACJ;AAEA,SAAS,cAAc,KAAA,EAAyC;AAC5D,EAAA,IAAI,KAAA,YAAiBC,sBAAiB,OAAO,KAAA;AAC7C,EAAA,IAAI,KAAA,YAAiB,UAAA,EAAY,OAAO,IAAIA,qBAAgB,KAAgC,CAAA;AAC5F,EAAA,OAAO,IAAIA,qBAAgB,KAAK,CAAA;AACpC;AAEA,SAAS,QAAA,CAAY,GAAA,EAA4B,GAAA,EAAQ,MAAA,EAA2B;AAChF,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACxB,EAAA,IAAI,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,OACrB,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,CAAC,MAAM,CAAC,CAAA;AAC9B;AAEA,SAASD,YAAW,KAAA,EAA2B;AAC3C,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAC5E;;;ACzHA,qBAAA,EAAA;;;ACAA,qBAAA,EAAA;AA6BA,IAAM,WAAA,GAAiC;AAAA,EACnC,CAAA;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,yBAAA;AAiDJ,CAAA;AAEO,IAAM,0BAAsD,MAAA,CAAO,MAAA;AAAA,EACtE,YAAY,GAAA,CAAI,CAAC,QAAQ,IAAIC,oBAAAA,CAAgB,GAAG,CAAC;AACrD,CAAA;;;ACnFA,qBAAA,EAAA;AAIA,WAAA,EAAA;AAGA,IAAM,UAAA,GAAa,oCAAA;AAaZ,IAAM,cAAN,MAAkB;AAAA,EACJ,OAAA;AAAA,EAEjB,WAAA,CAAY,IAAA,GAA2B,EAAC,EAAG;AACvC,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA,IAAW,UAAA,CAAW,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,EACnE;AAAA,EAEA,MAAM,WAAA,CACF,GAAA,EACA,cAAA,EACoB;AACpB,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,MAAA,EAAQ,OAAO,CAAA;AAC1D,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,IAAI5E,sBAAA;AAAA,UACN,CAAA,wBAAA,EAA2B,QAAA,CAAS,MAAM,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA;AAAA,UACrD,EAAE,GAAA;AAAI,SACV;AAAA,MACJ;AACA,MAAA,OAAA,GAAU,MAAM,SAAS,IAAA,EAAK;AAAA,IAClC,SAAS,GAAA,EAAK;AACV,MAAA,IAAI,GAAA,YAAeA,wBAAgB,MAAM,GAAA;AACzC,MAAA,MAAM,IAAIA,sBAAA,CAAe,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAA,EAAI;AAAA,QACrD,GAAA;AAAA,QACA,KAAA,EAAO,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC;AAAA,OAC5D,CAAA;AAAA,IACL;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI;AACA,MAAA,MAAM,MAAA,GAAS,IAAIwG,gBAAA,EAAU,CAAE,eAAA;AAAA,QAC3B,OAAA;AAAA,QACA;AAAA,OACJ;AAEA,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,oBAAA,CAAqB,aAAa,EAAE,CAAC,CAAA;AAC/D,MAAA,IAAI,UAAA,EAAY;AACZ,QAAA,MAAM,IAAI,KAAA;AAAA,UACN,CAAA,iBAAA,EAAoB,UAAA,CAAW,WAAA,IAAe,SAAS,CAAA;AAAA,SAC3D;AAAA,MACJ;AACA,MAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AACzB,QAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,MACxC;AACA,MAAA,GAAA,GAAM,MAAA;AAAA,IACV,SAAS,GAAA,EAAK;AACV,MAAA,MAAM,IAAIxG,sBAAA,CAAe,CAAA,0BAAA,EAA6B,GAAG,CAAA,CAAA,EAAI;AAAA,QACzD,GAAA;AAAA,QACA,KAAA,EAAO,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC;AAAA,OAC5D,CAAA;AAAA,IACL;AAEA,IAAA,MAAM,QAAQ,GAAA,CAAI,sBAAA,CAAuB,YAAY,WAAW,CAAA,CAAE,KAAK,CAAC,CAAA;AACxE,IAAA,IAAI,CAAC,KAAA,EAAO;AACR,MAAA,MAAM,IAAIC,0BAAA,CAAmB,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE,CAAA;AAAA,IACpE;AAEA,IAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACjC,MAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,GAAA,EAAK,OAA6B,MAAM,CAAA;AAC7E,MAAA,IAAI,UAAU,OAAO,GAAA;AAAA,IACzB;AACA,IAAA,MAAM,IAAIA,0BAAA;AAAA,MACN,+CAA+C,GAAG,CAAA;AAAA,KACtD;AAAA,EACJ;AACJ,CAAA;AAuBA,eAAe,aAAA,CACX,GAAA,EACA,KAAA,EACA,MAAA,EACgB;AAChB,EAAA,IAAI;AACA,IAAA,MAAM,MAAA,GAAS,IAAYwG,kBAAA,CAAA,SAAA,CAAU,GAA0B,CAAA;AAC/D,IAAA,MAAA,CAAO,QAAQ,KAA2B,CAAA;AAG1C,IAAA,MAAM,QAAQ,GAAA,CAAI,eAAA;AAClB,IAAA,MAAM,MAAA,GAAS,KAAA,EAAO,SAAA,CAAU,IAAI,CAAA;AAIpC,IAAA,MAAM,SAAA,GAAY,MAAA;AAIlB,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,kBAAA,CAAmB,MAAM,CAAA;AACxD,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAMpB,IAAA,MAAM,YAAoBA,kBAAA,CAAA,WAAA,CAAY,MAAA;AACtC,IAAA,MAAM,OAAA,GAAU,OAAO,SAAA,CAAU,OAAA;AAEjC,IAAA,MAAM,SAAA,GAAa,OAAO,SAAA,CAAmH,SAAA;AAC7I,IAAA,MAAM,OAAA,GAAU,WAAW,IAAA,IAAQ,EAAA;AACnC,IAAA,MAAM,SAAA,GAA6E,oBAAA,CAAqB,OAAA,EAAS,SAAS,CAAA;AAE1H,IAAA,MAAM,WAAA,GAAc,MAAM,SAAA,CAAU,MAAA,CAAO,SAAA;AAAA,MACvC,MAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA;AAAA,MACA,CAAC,QAAQ;AAAA,KACb;AAEA,IAAA,OAAO,MAAM,SAAA,CAAU,sBAAA,CAAuB,CAAC,WAAW,CAAC,CAAA;AAAA,EAC/D,SAAS,GAAA,EAAK;AAMV,IAAA,IAAI,eAAe,KAAA,EAAO;AACtB,MAAA,OAAA,CAAQ,IAAA;AAAA,QACJ,CAAA,gCAAA,EAAmC,OAAO,OAAO,CAAA,yBAAA,EAAuB,IAAI,IAAI,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA;AAAA,OACpG;AAAA,IACJ;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;AAWA,SAAS,oBAAA,CACL,SACA,SAAA,EAC+D;AAC/D,EAAA,IAAI,QAAQ,QAAA,CAAS,IAAI,KAAK,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AACrD,IAAA,MAAM,UAAA,GAAa,WAAW,UAAA,IAAc,OAAA;AAC5C,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAW;AAAA,EACvC;AAIA,EAAA,MAAM,UAAU,SAAA,EAAW,IAAA;AAC3B,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC7B,IAAA,QAAA,GAAW,OAAA;AAAA,EACf,WAAW,OAAO,OAAA,KAAY,YAAY,OAAA,KAAY,IAAA,IAAQ,QAAQ,IAAA,EAAM;AACxE,IAAA,QAAA,GAAW,OAAA,CAAQ,IAAA;AAAA,EACvB,CAAA,MAAO;AACH,IAAA,QAAA,GAAW,SAAA;AAAA,EACf;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,mBAAA;AAAA,IACN,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA;AAAS,GAC3B;AACJ;;;ACxMA,qBAAA,EAAA;;;ACAA,qBAAA,EAAA;AAQO,SAAS,UAAA,CACZ,MAAA,EACA,EAAA,EACA,IAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,sBAAA,CAAuB,EAAA,EAAI,IAAI,CAAA;AACnD,EAAA,OAAO,KAAK,MAAA,GAAS,CAAA,GAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,GAAmB,IAAA;AAC5D;AAOO,SAAS,UAAA,CACZ,MAAA,EACA,EAAA,EACA,IAAA,EACa;AACb,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,sBAAA,CAAuB,EAAA,EAAI,IAAI,CAAA;AACnD,EAAA,OAAO,IAAA,CAAK,MAAA,GAAS,CAAA,GACf,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAG,WAAA,EAAa,IAAA,EAAK,IAAK,IAAA,GACrC,IAAA;AACV;AAKO,SAAS,gBAAgB,MAAA,EAAwC;AACpE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACzC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAO,UAAA,CAA+C,IAAA,CAAK,OAAO,CAAA;AACxE,IAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACrC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC9D,IAAA,OAAO,IAAI7B,qBAAgB,GAA8B,CAAA;AAAA,EAC7D,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;;;AD1CA,IAAM,MAAA,GAAS,+BAAA;AAQR,IAAM,aAAN,MAAiB;AAAA,EACpB,MAAM,GAAA,EAAgC;AAClC,IAAA,MAAM,OAAO,GAAA,CAAI,eAAA;AACjB,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,EAAM,MAAA,EAAQ,mBAAmB,CAAA;AAC3D,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OACJ;AAAA,IACJ;AACA,IAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,MAAA,EAAQ,MAAA,EAAQ,mBAAmB,CAAA;AACpE,IAAA,IAAI,CAAC,aAAA,EAAe;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OACJ;AAAA,IACJ;AACA,IAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,aAAa,CAAA;AACxC,IAAA,IAAI,KAAA,CAAM,SAAA,CAAU,OAAA,EAAS,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA;AAAA,QACN,wCAAwC,aAAa,CAAA,CAAA;AAAA,OACzD;AAAA,IACJ;AACA,IAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AACzC,IAAA,MAAM,iBAAA,GAAoB,UAAA;AAAA,MACtB,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACJ;AACA,IAAA,MAAM,WAA8B,EAAC;AACrC,IAAA,IAAI,iBAAA,EAAmB;AACnB,MAAA,MAAM,QAAQ,iBAAA,CAAkB,sBAAA;AAAA,QAC5B,MAAA;AAAA,QACA;AAAA,OACJ;AACA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,QAAA,MAAM,CAAA,GAAI,YAAA,CAAa,KAAA,CAAM,IAAA,CAAK,CAAC,CAAE,CAAA;AACrC,QAAA,IAAI,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA;AAAA,MAC1B;AAAA,IACJ;AACA,IAAA,OAAO,EAAE,SAAA,EAAW,UAAA,EAAY,QAAA,EAAS;AAAA,EAC7C;AACJ,CAAA;AAEA,SAAS,gBAAgB,MAAA,EAAiC;AACtD,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,MAAA,EAAQ,MAAA,EAAQ,YAAY,CAAA;AAClD,EAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,EAAA,EAAI,MAAA,EAAQ,UAAU,CAAA;AAC5C,EAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,EAAE,CAAA;AACrB,EAAA,OAAO,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS,IAAI,IAAA,GAAO,CAAA;AACvC;AAEA,SAAS,aAAa,EAAA,EAAwC;AAC1D,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,EAAA,EAAI,MAAA,EAAQ,aAAa,CAAA;AACxD,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,EAAA,MAAM,SAAA,GACF,UAAA,CAAW,EAAA,EAAI,MAAA,EAAQ,iBAAiB,CAAA,IAAK,IAAA;AACjD,EAAA,MAAM,QAA2B,EAAC;AAClC,EAAA,MAAM,OAAA,GAAU,EAAA,CAAG,sBAAA,CAAuB,MAAA,EAAQ,iBAAiB,CAAA;AACnE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,OAAO,eAAA,CAAgB,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAG,eAAe,EAAE,CAAA;AAC/D,IAAA,IAAI,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO;AAAA,IACH,OAAA,EAAS,SAAA;AAAA,IACT,WAAA;AAAA,IACA,mBAAA,EAAqB;AAAA,GACzB;AACJ;;;AEjFA,qBAAA,EAAA;AAUA,IAAM8B,OAAAA,GAAS,+BAAA;AAYR,IAAM,qBAAN,MAAyB;AAAA,EAC5B,YAA6B,IAAA,EAAiC;AAAjC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAkC;AAAA,EAAlC,IAAA;AAAA,EAE7B,MAAM,QAAQ,IAAA,EAAmD;AAC7D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,OAAA,KAAY;AAC/C,MAAA,IAAI;AACA,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,WAAA;AAAA,UAChC,OAAA,CAAQ,WAAA;AAAA,UACR,OAAA,CAAQ;AAAA,SACZ;AACA,QAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,OAAA,CAAQ,OAAO,CAAA;AAAA,MAC/C,SAAS,GAAA,EAAK;AACV,QAAA,OAAA,CAAQ,IAAA;AAAA,UACJ,CAAA,4BAAA,EAA+B,OAAA,CAAQ,OAAO,CAAA,SAAA,EAAa,IAAc,OAAO,CAAA;AAAA,SACpF;AACA,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,IACJ,CAAC,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AACvC,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAA+B,MAAM,IAAI,CAAA;AAAA,EACpE;AACJ,CAAA;AAEA,SAAS,eAAA,CAAgB,KAAkB,OAAA,EAAqC;AAC5E,EAAA,MAAM,OAAO,GAAA,CAAI,eAAA;AACjB,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,EAAMA,OAAAA,EAAQ,mBAAmB,CAAA;AAC3D,EAAA,IAAI,CAAC,MAAA,EAAQ;AACT,IAAA,MAAM,IAAI,KAAA;AAAA,MACN,mBAAmB,OAAO,CAAA,mCAAA;AAAA,KAC9B;AAAA,EACJ;AACA,EAAA,MAAM,YAAY,UAAA,CAAW,MAAA,EAAQA,SAAQ,mBAAmB,CAAA,EAC1D,aAAa,IAAA,EAAK;AACxB,EAAA,IAAI,CAAC,SAAA,EAAW;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACN,mBAAmB,OAAO,CAAA,mCAAA;AAAA,KAC9B;AAAA,EACJ;AACA,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,SAAS,CAAA;AACpC,EAAA,IAAI,KAAA,CAAM,SAAA,CAAU,OAAA,EAAS,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,KAAA;AAAA,MACN,CAAA,gBAAA,EAAmB,OAAO,CAAA,6BAAA,EAAgC,SAAS,CAAA,CAAA;AAAA,KACvE;AAAA,EACJ;AACA,EAAA,MAAM,UAAA,GAAaC,iBAAgB,MAAM,CAAA;AACzC,EAAA,MAAM,WAAyB,EAAC;AAChC,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,IAAA,EAAMD,OAAAA,EAAQ,0BAA0B,CAAA;AACrE,EAAA,IAAI,SAAA,EAAW;AACX,IAAA,MAAM,YAAY,SAAA,CAAU,sBAAA;AAAA,MACxBA,OAAAA;AAAA,MACA;AAAA,KACJ;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,MAAM,QAAA,GAAW,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA;AAGjC,MAAA,MAAM,YAAA,GACF,UAAA,CAAW,QAAA,EAAwBA,OAAAA,EAAQ,MAAM,CAAA,IACjD,SAAA;AACJ,MAAA,MAAM,iBAAA,GAAoB,UAAA,CAAW,QAAA,EAAwBA,OAAAA,EAAQ,aAAa,CAAA;AAClF,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACxB,MAAA,MAAM,aAAa,iBAAA,CAAkB,sBAAA;AAAA,QACjCA,OAAAA;AAAA,QACA;AAAA,OACJ;AACA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AACxC,QAAA,MAAM,CAAA,GAAI,YAAA;AAAA,UACN,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,UACjB,YAAA;AAAA,UACA;AAAA,SACJ;AACA,QAAA,IAAI,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,SAAA,EAAW,UAAA,EAAY,QAAA,EAAS;AACtD;AAEA,SAAS,YAAA,CACL,EAAA,EACA,YAAA,EACA,OAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,EAAIA,OAAAA,EAAQ,oBAAoB,CAAA;AACxD,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,SAAS,UAAA,CAAW,IAAA,EAAMA,SAAQ,uBAAuB,CAAA,EACzD,aAAa,IAAA,EAAK;AACxB,EAAA,MAAM,SAAS,UAAA,CAAW,IAAA,EAAMA,SAAQ,eAAe,CAAA,EACjD,aAAa,IAAA,EAAK;AACxB,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,EAAQ,OAAO,IAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,EAAMA,OAAAA,EAAQ,aAAa,CAAA;AACrD,EAAA,MAAM,WAAA,GACD,MAAA,IACG,MAAA,CAAO,sBAAA,CAAuBA,OAAAA,EAAQ,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,WAAA,EAAa,IAAA,EAAK,IAC7E,iBAAA;AACJ,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,IAAA,EAAMA,OAAAA,EAAQ,wBAAwB,CAAA;AACnE,EAAA,MAAM,QAA2B,EAAC;AAClC,EAAA,IAAI,SAAA,EAAW;AACX,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,sBAAA,CAAuBA,OAAAA,EAAQ,iBAAiB,CAAA;AAC1E,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,OAAO,eAAA,CAAgB,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAG,eAAe,EAAE,CAAA;AAC/D,MAAA,IAAI,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,IAC7B;AAAA,EACJ;AACA,EAAA,MAAM,YAAA,GAAe,UAAA,CAAW,IAAA,EAAMA,OAAAA,EAAQ,8BAA8B,CAAA;AAC5E,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,YAAA,EAAc;AACd,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,sBAAA,CAAuBA,OAAAA,EAAQ,KAAK,CAAA;AAC9D,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAG,aAAa,IAAA,EAAK;AAC1C,MAAA,IAAI,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAAA,IACzB;AAAA,EACJ;AACA,EAAA,OAAO;AAAA,IACH,YAAA;AAAA,IACA,OAAA;AAAA,IACA,qBAAA,EAAuB,MAAA;AAAA,IACvB,aAAA,EAAe,MAAA;AAAA,IACf,WAAA;AAAA,IACA,YAAA,EAAc,KAAA;AAAA,IACd,gCAAA,EAAkC;AAAA,GACtC;AACJ;AAEA,SAASC,iBAAgB,MAAA,EAAwC;AAC7D,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,MAAA,EAAQD,OAAAA,EAAQ,YAAY,CAAA;AAClD,EAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,EAAA,MAAM,KAAK,UAAA,CAAW,EAAA,EAAIA,SAAQ,UAAU,CAAA,EAAG,aAAa,IAAA,EAAK;AACjE,EAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,EAAE,CAAA;AACrB,EAAA,OAAO,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS,IAAI,IAAA,GAAO,CAAA;AACvC;;;AL5IA,qBAAA,EAAA;AACA,eAAA,EAAA;AAEA,IAAM,gBAAA,GAAmB,6CAAA;AACzB,IAAM,2BAAA,GAA8B,KAAK,IAAA,GAAO,GAAA;AA0BzC,IAAM,iBAAN,MAA2C;AAAA,EAC7B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACT,QAAA,GAA4B,IAAA;AAAA,EAC5B,QAAA,GAAqC,IAAA;AAAA,EAE7C,WAAA,CAAY,IAAA,GAA8B,EAAC,EAAG;AAC1C,IAAA,MAAM,OAAA,GACF,KAAK,cAAA,IAAkB,IAAA,CAAK,eAAe,MAAA,GAAS,CAAA,GAC9C,KAAK,cAAA,GACL,uBAAA;AACV,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OACJ;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AACtB,IAAA,IAAA,CAAK,UAAU,IAAI,WAAA,CAAY,EAAE,OAAA,EAAS,IAAA,CAAK,SAAS,CAAA;AACxD,IAAA,IAAA,CAAK,WAAW,IAAI,kBAAA,CAAmB,EAAE,OAAA,EAAS,IAAA,CAAK,SAAS,CAAA;AAChE,IAAA,IAAA,CAAK,eAAA,GACD,KAAK,eAAA,IAAmB,2BAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,GAAU,KAAK,OAAA,IAAW,gBAAA;AAC/B,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAAA,EACtB;AAAA,EAEA,MAAM,WAAW,IAAA,EAA8C;AAC3D,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,WAAA,EAAY;AACpC,IAAA,MAAM,MAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,WAAA,EAAa;AAC/B,MAAA,KAAA,MAAW,OAAA,IAAW,GAAG,QAAA,EAAU;AAC/B,QAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,YAAA,EAAc;AACrC,UAAA,IAAI,CAAC,WAAA,CAAY,IAAA,EAAM,IAAI,CAAA,EAAG;AAC9B,UAAA,GAAA,CAAI,IAAA,CAAK,WAAA,CAAY,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,QACvC;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAA,GAAyD;AAC3D,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,WAAA,EAAY;AACpC,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EAChB;AAAA,EAEA,MAAc,WAAA,GAAiC;AAC3C,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IACI,KAAK,QAAA,IACL,GAAA,GAAM,KAAK,QAAA,CAAS,SAAA,GAAY,KAAK,eAAA,EACvC;AACE,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IAChB;AACA,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,MAAc,OAAA,GAA6B;AACvC,IAAA,IAAI,IAAA,CAAK,QAAA,EAAU,OAAO,IAAA,CAAK,QAAA;AAC/B,IAAA,IAAA,CAAK,YAAY,YAAY;AACzB,MAAA,IAAI;AACA,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,WAAA;AAAA,UAC3B,IAAA,CAAK,OAAA;AAAA,UACL,IAAA,CAAK;AAAA,SACT;AACA,QAAA,MAAM,IAAA,GAAO,IAAI,UAAA,EAAW,CAAE,MAAM,GAAG,CAAA;AACvC,QAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,QAAA,CAAS,QAAQ,IAAI,CAAA;AACpD,QAAA,IAAA,CAAK,QAAA,GAAW;AAAA,UACZ,IAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA,EAAW,KAAK,GAAA;AAAI,SACxB;AACA,QAAA,OAAO,IAAA,CAAK,QAAA;AAAA,MAChB,SAAS,GAAA,EAAK;AACV,QAAA,IAAI,KAAK,QAAA,EAAU;AACf,UAAA,OAAA,CAAQ,IAAA;AAAA,YACJ,CAAA,0DAAA,EAA8D,IAAc,OAAO,CAAA,CAAA;AAAA,WACvF;AACA,UAAA,OAAO,IAAA,CAAK,QAAA;AAAA,QAChB;AACA,QAAA,MAAM,GAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,MACpB;AAAA,IACJ,CAAA,GAAG;AACH,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AACJ;AAEA,SAAS,WAAA,CAAY,MAAuB,IAAA,EAA+B;AACvE,EAAA,IAAI,KAAK,GAAA,EAAK;AACV,IAAA,MAAM,GAAA,GAAM,YAAY,IAAI,CAAA;AAC5B,IAAA,IAAI,OAAO,UAAA,CAAW,GAAA,EAAK,IAAA,CAAK,GAAG,GAAG,OAAO,IAAA;AAAA,EACjD;AACA,EAAA,IAAI,KAAK,MAAA,IAAU,IAAA,CAAK,OAAA,KAAY,IAAA,CAAK,QAAQ,OAAO,IAAA;AACxD,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,WAAA,CAAY,SAAqB,IAAA,EAAoC;AAC1E,EAAA,MAAM,OAAA,GAAU,sBAAsB,OAAO,CAAA;AAC7C,EAAA,MAAM,QAAA,GAA+B;AAAA,IACjC,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,uBAAuB,OAAA,CAAQ,qBAAA;AAAA,IAC/B,eAAe,OAAA,CAAQ,aAAA;AAAA,IACvB,GAAG;AAAA,GACP;AACA,EAAA,MAAM,GAAA,GAAM,UAAU,IAAI,CAAA;AAC1B,EAAA,OAAO;AAAA,IACH,WAAA,EAAa,IAAA;AAAA,IACb,MAAA,EAAQ,MAAA;AAAA,IACR,QAAA;AAAA,IACA,mBAAA,EAAqB,GAAA,GAAM,CAAC,GAAG,IAAI;AAAC,GACxC;AACJ;AAEA,SAAS,UAAA,CAAW,GAAe,CAAA,EAAwB;AACvD,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,OAAO,KAAA;AAC7D,EAAA,OAAO,IAAA;AACX;;;AjBnFA,WAAA,EAAA;AA7EO,IAAM,OAAA,GAAU","file":"index.cjs","sourcesContent":["// Injected ahead of the entry module by tsup (`inject` in tsup.config.ts) so the\n// reflect-metadata polyfill is installed before anything that pulls in\n// @peculiar/x509 → tsyringe, which reads decorator metadata while its own module\n// body evaluates. `src/index.ts` imports this polyfill too, for consumers that\n// build from source rather than from dist.\n//\n// Keep this file side-effect-only: `inject` evaluates it for its side effects.\nimport 'reflect-metadata';\n","export class InvalidSignatureError extends Error {\n constructor(message = 'Credential signature validation failed') {\n super(message);\n this.name = 'InvalidSignatureError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class ExpiredCredentialError extends Error {\n constructor(message = 'Credential has expired') {\n super(message);\n this.name = 'ExpiredCredentialError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class UnsupportedFormatError extends Error {\n constructor(format: string) {\n super(`Unsupported credential format: ${format}`);\n this.name = 'UnsupportedFormatError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class MalformedCredentialError extends Error {\n constructor(message = 'Credential structure is malformed') {\n super(message);\n this.name = 'MalformedCredentialError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class NonceValidationError extends Error {\n constructor(message = 'Nonce does not match expected value') {\n super(message);\n this.name = 'NonceValidationError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport type HaipValidationCode =\n | 'EMPTY_QUERY'\n | 'UNSUPPORTED_FORMAT'\n | 'MISSING_SDJWT_META'\n | 'MISSING_MDOC_META'\n | 'NO_CLAIMS'\n | 'CLAIM_SETS_DISALLOWED'\n | 'CREDENTIAL_SETS_DISALLOWED';\n\nexport class HaipValidationError extends Error {\n readonly code: HaipValidationCode;\n readonly credentialId?: string;\n\n constructor(code: HaipValidationCode, message: string, credentialId?: string) {\n super(message);\n this.name = 'HaipValidationError';\n this.code = code;\n this.credentialId = credentialId;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n// ---------------------------------------------------------------------------\n// New in 0.5.0: OpenID4VPError base + trust-module error classes\n// ---------------------------------------------------------------------------\n\nexport abstract class OpenID4VPError extends Error {\n abstract readonly code: string;\n\n constructor(message: string, options?: { cause?: Error }) {\n super(message);\n this.name = new.target.name;\n if (options?.cause !== undefined) {\n (this as { cause?: unknown }).cause = options.cause;\n }\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class TrustAnchorNotFoundError extends OpenID4VPError {\n readonly code = 'trust_anchor_not_found' as const;\n}\n\nexport type ChainErrorReason =\n | 'signature'\n | 'validity'\n | 'name_constraints'\n | 'key_usage'\n | 'basic_constraints'\n | 'path_length'\n | 'algorithm_disallowed'\n | 'aki_ski_mismatch';\n\nexport class CertificateChainError extends OpenID4VPError {\n readonly code = 'chain_invalid' as const;\n readonly reason: ChainErrorReason;\n\n constructor(\n message: string,\n options: { reason: ChainErrorReason; cause?: Error }\n ) {\n super(message, { cause: options.cause });\n this.reason = options.reason;\n }\n}\n\nexport class RevokedCertificateError extends OpenID4VPError {\n readonly code = 'certificate_revoked' as const;\n readonly serial: string;\n readonly revokedAt: Date;\n readonly reason?: string;\n\n constructor(\n message: string,\n options: { serial: string; revokedAt: Date; reason?: string; cause?: Error }\n ) {\n super(message, { cause: options.cause });\n this.serial = options.serial;\n this.revokedAt = options.revokedAt;\n this.reason = options.reason;\n }\n}\n\nexport class RevocationCheckFailedError extends OpenID4VPError {\n readonly code = 'revocation_check_failed' as const;\n}\n\nexport class LotlFetchError extends OpenID4VPError {\n readonly code = 'lotl_fetch_failed' as const;\n readonly url: string;\n\n constructor(\n message: string,\n options: { url: string; cause?: Error }\n ) {\n super(message, { cause: options.cause });\n this.url = options.url;\n }\n}\n\nexport class LotlSignatureError extends OpenID4VPError {\n readonly code = 'lotl_signature_invalid' as const;\n}\n\n// ---------------------------------------------------------------------------\n// New in 0.7.0: workstream B-remaining (signed requests + direct_post.jwt)\n// ---------------------------------------------------------------------------\n\nexport type SignedRequestBuildErrorCode =\n | 'empty_cert_chain'\n | 'hostname_cert_mismatch'\n | 'signing_key_cert_mismatch'\n | 'missing_encryption_jwk'\n | 'missing_encryption_alg'\n | 'missing_vp_formats'\n | 'unsupported_signing_alg'\n | 'empty_supported_enc_values'\n | 'missing_hostname'\n | 'self_signed_leaf';\n\nexport class SignedRequestBuildError extends OpenID4VPError {\n readonly code: SignedRequestBuildErrorCode;\n constructor(code: SignedRequestBuildErrorCode, message: string) {\n super(message);\n this.code = code;\n }\n}\n\nexport class UnsupportedJweError extends OpenID4VPError {\n readonly code = 'unsupported_jwe' as const;\n readonly alg: string;\n readonly enc: string;\n constructor(alg: string, enc: string) {\n super(`Unsupported JWE algorithms: alg=${alg}, enc=${enc}`);\n this.alg = alg;\n this.enc = enc;\n }\n}\n\nexport class DecryptionFailedError extends OpenID4VPError {\n readonly code = 'decryption_failed' as const;\n constructor(message = 'Failed to decrypt authorization response', options?: { cause?: Error }) {\n super(message, options);\n }\n}\n\nexport class MissingDecryptionKeyError extends OpenID4VPError {\n readonly code = 'missing_decryption_key' as const;\n constructor(message = 'decryptionKey is required to verify a direct_post.jwt response') {\n super(message);\n }\n}\n\nexport class MissingVerifierEncryptionKeyError extends OpenID4VPError {\n readonly code = 'missing_verifier_encryption_key' as const;\n constructor(\n message = 'verifierEncryptionJwk is required to build the OID4VP 1.0 OpenID4VPHandover SessionTranscript for an encrypted response'\n ) {\n super(message);\n }\n}\n\nexport class MultipleCredentialsNotSupportedError extends OpenID4VPError {\n readonly code = 'multi_credential_unsupported' as const;\n readonly entryCount: number;\n readonly presentationCount: number;\n constructor(entryCount: number, presentationCount: number) {\n super(\n `Multi-credential presentations are not yet supported: ` +\n `${entryCount} queryId entries, ${presentationCount} presentations`\n );\n this.entryCount = entryCount;\n this.presentationCount = presentationCount;\n }\n}\n","/*!\n * MIT License\n * \n * Copyright (c) 2017-2024 Peculiar Ventures, LLC\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n * \n */\n\nconst ARRAY_BUFFER_NAME = \"[object ArrayBuffer]\";\nclass BufferSourceConverter {\n static isArrayBuffer(data) {\n return Object.prototype.toString.call(data) === ARRAY_BUFFER_NAME;\n }\n static toArrayBuffer(data) {\n if (this.isArrayBuffer(data)) {\n return data;\n }\n if (data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n return this.toUint8Array(data.buffer)\n .slice(data.byteOffset, data.byteOffset + data.byteLength)\n .buffer;\n }\n static toUint8Array(data) {\n return this.toView(data, Uint8Array);\n }\n static toView(data, type) {\n if (data.constructor === type) {\n return data;\n }\n if (this.isArrayBuffer(data)) {\n return new type(data);\n }\n if (this.isArrayBufferView(data)) {\n return new type(data.buffer, data.byteOffset, data.byteLength);\n }\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n static isBufferSource(data) {\n return this.isArrayBufferView(data)\n || this.isArrayBuffer(data);\n }\n static isArrayBufferView(data) {\n return ArrayBuffer.isView(data)\n || (data && this.isArrayBuffer(data.buffer));\n }\n static isEqual(a, b) {\n const aView = BufferSourceConverter.toUint8Array(a);\n const bView = BufferSourceConverter.toUint8Array(b);\n if (aView.length !== bView.byteLength) {\n return false;\n }\n for (let i = 0; i < aView.length; i++) {\n if (aView[i] !== bView[i]) {\n return false;\n }\n }\n return true;\n }\n static concat(...args) {\n let buffers;\n if (Array.isArray(args[0]) && !(args[1] instanceof Function)) {\n buffers = args[0];\n }\n else if (Array.isArray(args[0]) && args[1] instanceof Function) {\n buffers = args[0];\n }\n else {\n if (args[args.length - 1] instanceof Function) {\n buffers = args.slice(0, args.length - 1);\n }\n else {\n buffers = args;\n }\n }\n let size = 0;\n for (const buffer of buffers) {\n size += buffer.byteLength;\n }\n const res = new Uint8Array(size);\n let offset = 0;\n for (const buffer of buffers) {\n const view = this.toUint8Array(buffer);\n res.set(view, offset);\n offset += view.length;\n }\n if (args[args.length - 1] instanceof Function) {\n return this.toView(res, args[args.length - 1]);\n }\n return res.buffer;\n }\n}\n\nconst STRING_TYPE = \"string\";\nconst HEX_REGEX = /^[0-9a-f\\s]+$/i;\nconst BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst BASE64URL_REGEX = /^[a-zA-Z0-9-_]+$/;\nclass Utf8Converter {\n static fromString(text) {\n const s = unescape(encodeURIComponent(text));\n const uintArray = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) {\n uintArray[i] = s.charCodeAt(i);\n }\n return uintArray.buffer;\n }\n static toString(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let encodedString = \"\";\n for (let i = 0; i < buf.length; i++) {\n encodedString += String.fromCharCode(buf[i]);\n }\n const decodedString = decodeURIComponent(escape(encodedString));\n return decodedString;\n }\n}\nclass Utf16Converter {\n static toString(buffer, littleEndian = false) {\n const arrayBuffer = BufferSourceConverter.toArrayBuffer(buffer);\n const dataView = new DataView(arrayBuffer);\n let res = \"\";\n for (let i = 0; i < arrayBuffer.byteLength; i += 2) {\n const code = dataView.getUint16(i, littleEndian);\n res += String.fromCharCode(code);\n }\n return res;\n }\n static fromString(text, littleEndian = false) {\n const res = new ArrayBuffer(text.length * 2);\n const dataView = new DataView(res);\n for (let i = 0; i < text.length; i++) {\n dataView.setUint16(i * 2, text.charCodeAt(i), littleEndian);\n }\n return res;\n }\n}\nclass Convert {\n static isHex(data) {\n return typeof data === STRING_TYPE\n && HEX_REGEX.test(data);\n }\n static isBase64(data) {\n return typeof data === STRING_TYPE\n && BASE64_REGEX.test(data);\n }\n static isBase64Url(data) {\n return typeof data === STRING_TYPE\n && BASE64URL_REGEX.test(data);\n }\n static ToString(buffer, enc = \"utf8\") {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.ToUtf8String(buf);\n case \"binary\":\n return this.ToBinary(buf);\n case \"hex\":\n return this.ToHex(buf);\n case \"base64\":\n return this.ToBase64(buf);\n case \"base64url\":\n return this.ToBase64Url(buf);\n case \"utf16le\":\n return Utf16Converter.toString(buf, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buf);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static FromString(str, enc = \"utf8\") {\n if (!str) {\n return new ArrayBuffer(0);\n }\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.FromUtf8String(str);\n case \"binary\":\n return this.FromBinary(str);\n case \"hex\":\n return this.FromHex(str);\n case \"base64\":\n return this.FromBase64(str);\n case \"base64url\":\n return this.FromBase64Url(str);\n case \"utf16le\":\n return Utf16Converter.fromString(str, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(str);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static ToBase64(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n if (typeof btoa !== \"undefined\") {\n const binary = this.ToString(buf, \"binary\");\n return btoa(binary);\n }\n else {\n return Buffer.from(buf).toString(\"base64\");\n }\n }\n static FromBase64(base64) {\n const formatted = this.formatString(base64);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64(formatted)) {\n throw new TypeError(\"Argument 'base64Text' is not Base64 encoded\");\n }\n if (typeof atob !== \"undefined\") {\n return this.FromBinary(atob(formatted));\n }\n else {\n return new Uint8Array(Buffer.from(formatted, \"base64\")).buffer;\n }\n }\n static FromBase64Url(base64url) {\n const formatted = this.formatString(base64url);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64Url(formatted)) {\n throw new TypeError(\"Argument 'base64url' is not Base64Url encoded\");\n }\n return this.FromBase64(this.Base64Padding(formatted.replace(/\\-/g, \"+\").replace(/\\_/g, \"/\")));\n }\n static ToBase64Url(data) {\n return this.ToBase64(data).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/\\=/g, \"\");\n }\n static FromUtf8String(text, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.FromBinary(text);\n case \"utf8\":\n return Utf8Converter.fromString(text);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(text);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.fromString(text, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static ToUtf8String(buffer, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.ToBinary(buffer);\n case \"utf8\":\n return Utf8Converter.toString(buffer);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buffer);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.toString(buffer, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static FromBinary(text) {\n const stringLength = text.length;\n const resultView = new Uint8Array(stringLength);\n for (let i = 0; i < stringLength; i++) {\n resultView[i] = text.charCodeAt(i);\n }\n return resultView.buffer;\n }\n static ToBinary(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let res = \"\";\n for (let i = 0; i < buf.length; i++) {\n res += String.fromCharCode(buf[i]);\n }\n return res;\n }\n static ToHex(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let result = \"\";\n const len = buf.length;\n for (let i = 0; i < len; i++) {\n const byte = buf[i];\n if (byte < 16) {\n result += \"0\";\n }\n result += byte.toString(16);\n }\n return result;\n }\n static FromHex(hexString) {\n let formatted = this.formatString(hexString);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isHex(formatted)) {\n throw new TypeError(\"Argument 'hexString' is not HEX encoded\");\n }\n if (formatted.length % 2) {\n formatted = `0${formatted}`;\n }\n const res = new Uint8Array(formatted.length / 2);\n for (let i = 0; i < formatted.length; i = i + 2) {\n const c = formatted.slice(i, i + 2);\n res[i / 2] = parseInt(c, 16);\n }\n return res.buffer;\n }\n static ToUtf16String(buffer, littleEndian = false) {\n return Utf16Converter.toString(buffer, littleEndian);\n }\n static FromUtf16String(text, littleEndian = false) {\n return Utf16Converter.fromString(text, littleEndian);\n }\n static Base64Padding(base64) {\n const padCount = 4 - (base64.length % 4);\n if (padCount < 4) {\n for (let i = 0; i < padCount; i++) {\n base64 += \"=\";\n }\n }\n return base64;\n }\n static formatString(data) {\n return (data === null || data === void 0 ? void 0 : data.replace(/[\\n\\r\\t ]/g, \"\")) || \"\";\n }\n}\nConvert.DEFAULT_UTF8_ENCODING = \"utf8\";\n\nfunction assign(target, ...sources) {\n const res = arguments[0];\n for (let i = 1; i < arguments.length; i++) {\n const obj = arguments[i];\n for (const prop in obj) {\n res[prop] = obj[prop];\n }\n }\n return res;\n}\nfunction combine(...buf) {\n const totalByteLength = buf.map((item) => item.byteLength).reduce((prev, cur) => prev + cur);\n const res = new Uint8Array(totalByteLength);\n let currentPos = 0;\n buf.map((item) => new Uint8Array(item)).forEach((arr) => {\n for (const item2 of arr) {\n res[currentPos++] = item2;\n }\n });\n return res.buffer;\n}\nfunction isEqual(bytes1, bytes2) {\n if (!(bytes1 && bytes2)) {\n return false;\n }\n if (bytes1.byteLength !== bytes2.byteLength) {\n return false;\n }\n const b1 = new Uint8Array(bytes1);\n const b2 = new Uint8Array(bytes2);\n for (let i = 0; i < bytes1.byteLength; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport { BufferSourceConverter, Convert, assign, combine, isEqual };\n","/*!\n Copyright (c) Peculiar Ventures, LLC\n*/\n\nfunction getUTCDate(date) {\r\n return new Date(date.getTime() + (date.getTimezoneOffset() * 60000));\r\n}\r\nfunction getParametersValue(parameters, name, defaultValue) {\r\n var _a;\r\n if ((parameters instanceof Object) === false) {\r\n return defaultValue;\r\n }\r\n return (_a = parameters[name]) !== null && _a !== void 0 ? _a : defaultValue;\r\n}\r\nfunction bufferToHexCodes(inputBuffer, inputOffset = 0, inputLength = (inputBuffer.byteLength - inputOffset), insertSpace = false) {\r\n let result = \"\";\r\n for (const item of (new Uint8Array(inputBuffer, inputOffset, inputLength))) {\r\n const str = item.toString(16).toUpperCase();\r\n if (str.length === 1) {\r\n result += \"0\";\r\n }\r\n result += str;\r\n if (insertSpace) {\r\n result += \" \";\r\n }\r\n }\r\n return result.trim();\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n if (!(inputBuffer instanceof ArrayBuffer)) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer must be \\\"ArrayBuffer\\\"\";\r\n return false;\r\n }\r\n if (!inputBuffer.byteLength) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n return false;\r\n }\r\n if (inputOffset < 0) {\r\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n return false;\r\n }\r\n if (inputLength < 0) {\r\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n return false;\r\n }\r\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction utilFromBase(inputBuffer, inputBase) {\r\n let result = 0;\r\n if (inputBuffer.length === 1) {\r\n return inputBuffer[0];\r\n }\r\n for (let i = (inputBuffer.length - 1); i >= 0; i--) {\r\n result += inputBuffer[(inputBuffer.length - 1) - i] * Math.pow(2, inputBase * i);\r\n }\r\n return result;\r\n}\r\nfunction utilToBase(value, base, reserved = (-1)) {\r\n const internalReserved = reserved;\r\n let internalValue = value;\r\n let result = 0;\r\n let biggest = Math.pow(2, base);\r\n for (let i = 1; i < 8; i++) {\r\n if (value < biggest) {\r\n let retBuf;\r\n if (internalReserved < 0) {\r\n retBuf = new ArrayBuffer(i);\r\n result = i;\r\n }\r\n else {\r\n if (internalReserved < i) {\r\n return (new ArrayBuffer(0));\r\n }\r\n retBuf = new ArrayBuffer(internalReserved);\r\n result = internalReserved;\r\n }\r\n const retView = new Uint8Array(retBuf);\r\n for (let j = (i - 1); j >= 0; j--) {\r\n const basis = Math.pow(2, j * base);\r\n retView[result - j - 1] = Math.floor(internalValue / basis);\r\n internalValue -= (retView[result - j - 1]) * basis;\r\n }\r\n return retBuf;\r\n }\r\n biggest *= Math.pow(2, base);\r\n }\r\n return new ArrayBuffer(0);\r\n}\r\nfunction utilConcatBuf(...buffers) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const buffer of buffers) {\r\n outputLength += buffer.byteLength;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const buffer of buffers) {\r\n retView.set(new Uint8Array(buffer), prevLength);\r\n prevLength += buffer.byteLength;\r\n }\r\n return retBuf;\r\n}\r\nfunction utilConcatView(...views) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const view of views) {\r\n outputLength += view.length;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const view of views) {\r\n retView.set(view, prevLength);\r\n prevLength += view.length;\r\n }\r\n return retView;\r\n}\r\nfunction utilDecodeTC() {\r\n const buf = new Uint8Array(this.valueHex);\r\n if (this.valueHex.byteLength >= 2) {\r\n const condition1 = (buf[0] === 0xFF) && (buf[1] & 0x80);\r\n const condition2 = (buf[0] === 0x00) && ((buf[1] & 0x80) === 0x00);\r\n if (condition1 || condition2) {\r\n this.warnings.push(\"Needlessly long format\");\r\n }\r\n }\r\n const bigIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const bigIntView = new Uint8Array(bigIntBuffer);\r\n for (let i = 0; i < this.valueHex.byteLength; i++) {\r\n bigIntView[i] = 0;\r\n }\r\n bigIntView[0] = (buf[0] & 0x80);\r\n const bigInt = utilFromBase(bigIntView, 8);\r\n const smallIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const smallIntView = new Uint8Array(smallIntBuffer);\r\n for (let j = 0; j < this.valueHex.byteLength; j++) {\r\n smallIntView[j] = buf[j];\r\n }\r\n smallIntView[0] &= 0x7F;\r\n const smallInt = utilFromBase(smallIntView, 8);\r\n return (smallInt - bigInt);\r\n}\r\nfunction utilEncodeTC(value) {\r\n const modValue = (value < 0) ? (value * (-1)) : value;\r\n let bigInt = 128;\r\n for (let i = 1; i < 8; i++) {\r\n if (modValue <= bigInt) {\r\n if (value < 0) {\r\n const smallInt = bigInt - modValue;\r\n const retBuf = utilToBase(smallInt, 8, i);\r\n const retView = new Uint8Array(retBuf);\r\n retView[0] |= 0x80;\r\n return retBuf;\r\n }\r\n let retBuf = utilToBase(modValue, 8, i);\r\n let retView = new Uint8Array(retBuf);\r\n if (retView[0] & 0x80) {\r\n const tempBuf = retBuf.slice(0);\r\n const tempView = new Uint8Array(tempBuf);\r\n retBuf = new ArrayBuffer(retBuf.byteLength + 1);\r\n retView = new Uint8Array(retBuf);\r\n for (let k = 0; k < tempBuf.byteLength; k++) {\r\n retView[k + 1] = tempView[k];\r\n }\r\n retView[0] = 0x00;\r\n }\r\n return retBuf;\r\n }\r\n bigInt *= Math.pow(2, 8);\r\n }\r\n return (new ArrayBuffer(0));\r\n}\r\nfunction isEqualBuffer(inputBuffer1, inputBuffer2) {\r\n if (inputBuffer1.byteLength !== inputBuffer2.byteLength) {\r\n return false;\r\n }\r\n const view1 = new Uint8Array(inputBuffer1);\r\n const view2 = new Uint8Array(inputBuffer2);\r\n for (let i = 0; i < view1.length; i++) {\r\n if (view1[i] !== view2[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction padNumber(inputNumber, fullLength) {\r\n const str = inputNumber.toString(10);\r\n if (fullLength < str.length) {\r\n return \"\";\r\n }\r\n const dif = fullLength - str.length;\r\n const padding = new Array(dif);\r\n for (let i = 0; i < dif; i++) {\r\n padding[i] = \"0\";\r\n }\r\n const paddingString = padding.join(\"\");\r\n return paddingString.concat(str);\r\n}\r\nconst base64Template = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\nconst base64UrlTemplate = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=\";\r\nfunction toBase64(input, useUrlTemplate = false, skipPadding = false, skipLeadingZeros = false) {\r\n let i = 0;\r\n let flag1 = 0;\r\n let flag2 = 0;\r\n let output = \"\";\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n if (skipLeadingZeros) {\r\n let nonZeroPosition = 0;\r\n for (let i = 0; i < input.length; i++) {\r\n if (input.charCodeAt(i) !== 0) {\r\n nonZeroPosition = i;\r\n break;\r\n }\r\n }\r\n input = input.slice(nonZeroPosition);\r\n }\r\n while (i < input.length) {\r\n const chr1 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag1 = 1;\r\n }\r\n const chr2 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag2 = 1;\r\n }\r\n const chr3 = input.charCodeAt(i++);\r\n const enc1 = chr1 >> 2;\r\n const enc2 = ((chr1 & 0x03) << 4) | (chr2 >> 4);\r\n let enc3 = ((chr2 & 0x0F) << 2) | (chr3 >> 6);\r\n let enc4 = chr3 & 0x3F;\r\n if (flag1 === 1) {\r\n enc3 = enc4 = 64;\r\n }\r\n else {\r\n if (flag2 === 1) {\r\n enc4 = 64;\r\n }\r\n }\r\n if (skipPadding) {\r\n if (enc3 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}`;\r\n }\r\n else {\r\n if (enc4 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}`;\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n return output;\r\n}\r\nfunction fromBase64(input, useUrlTemplate = false, cutTailZeros = false) {\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n function indexOf(toSearch) {\r\n for (let i = 0; i < 64; i++) {\r\n if (template.charAt(i) === toSearch)\r\n return i;\r\n }\r\n return 64;\r\n }\r\n function test(incoming) {\r\n return ((incoming === 64) ? 0x00 : incoming);\r\n }\r\n let i = 0;\r\n let output = \"\";\r\n while (i < input.length) {\r\n const enc1 = indexOf(input.charAt(i++));\r\n const enc2 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc3 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc4 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const chr1 = (test(enc1) << 2) | (test(enc2) >> 4);\r\n const chr2 = ((test(enc2) & 0x0F) << 4) | (test(enc3) >> 2);\r\n const chr3 = ((test(enc3) & 0x03) << 6) | test(enc4);\r\n output += String.fromCharCode(chr1);\r\n if (enc3 !== 64) {\r\n output += String.fromCharCode(chr2);\r\n }\r\n if (enc4 !== 64) {\r\n output += String.fromCharCode(chr3);\r\n }\r\n }\r\n if (cutTailZeros) {\r\n const outputLength = output.length;\r\n let nonZeroStart = (-1);\r\n for (let i = (outputLength - 1); i >= 0; i--) {\r\n if (output.charCodeAt(i) !== 0) {\r\n nonZeroStart = i;\r\n break;\r\n }\r\n }\r\n if (nonZeroStart !== (-1)) {\r\n output = output.slice(0, nonZeroStart + 1);\r\n }\r\n else {\r\n output = \"\";\r\n }\r\n }\r\n return output;\r\n}\r\nfunction arrayBufferToString(buffer) {\r\n let resultString = \"\";\r\n const view = new Uint8Array(buffer);\r\n for (const element of view) {\r\n resultString += String.fromCharCode(element);\r\n }\r\n return resultString;\r\n}\r\nfunction stringToArrayBuffer(str) {\r\n const stringLength = str.length;\r\n const resultBuffer = new ArrayBuffer(stringLength);\r\n const resultView = new Uint8Array(resultBuffer);\r\n for (let i = 0; i < stringLength; i++) {\r\n resultView[i] = str.charCodeAt(i);\r\n }\r\n return resultBuffer;\r\n}\r\nconst log2 = Math.log(2);\r\nfunction nearestPowerOf2(length) {\r\n const base = (Math.log(length) / log2);\r\n const floor = Math.floor(base);\r\n const round = Math.round(base);\r\n return ((floor === round) ? floor : round);\r\n}\r\nfunction clearProps(object, propsArray) {\r\n for (const prop of propsArray) {\r\n delete object[prop];\r\n }\r\n}\n\nexport { arrayBufferToString, bufferToHexCodes, checkBufferParams, clearProps, fromBase64, getParametersValue, getUTCDate, isEqualBuffer, nearestPowerOf2, padNumber, stringToArrayBuffer, toBase64, utilConcatBuf, utilConcatView, utilDecodeTC, utilEncodeTC, utilFromBase, utilToBase };\n","/*!\n * Copyright (c) 2014, GMO GlobalSign\n * Copyright (c) 2015-2022, Peculiar Ventures\n * All rights reserved.\n * \n * Author 2014-2019, Yury Strozhevsky\n * \n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * \n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * \n * * Redistributions in binary form must reproduce the above copyright notice, this\n * list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * \n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n */\n\nimport * as pvtsutils from 'pvtsutils';\nimport * as pvutils from 'pvutils';\n\nfunction assertBigInt() {\n if (typeof BigInt === \"undefined\") {\n throw new Error(\"BigInt is not defined. Your environment doesn't implement BigInt.\");\n }\n}\nfunction concat(buffers) {\n let outputLength = 0;\n let prevLength = 0;\n for (let i = 0; i < buffers.length; i++) {\n const buffer = buffers[i];\n outputLength += buffer.byteLength;\n }\n const retView = new Uint8Array(outputLength);\n for (let i = 0; i < buffers.length; i++) {\n const buffer = buffers[i];\n retView.set(new Uint8Array(buffer), prevLength);\n prevLength += buffer.byteLength;\n }\n return retView.buffer;\n}\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\n if (!(inputBuffer instanceof Uint8Array)) {\n baseBlock.error = \"Wrong parameter: inputBuffer must be 'Uint8Array'\";\n return false;\n }\n if (!inputBuffer.byteLength) {\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\n return false;\n }\n if (inputOffset < 0) {\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\n return false;\n }\n if (inputLength < 0) {\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\n return false;\n }\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\n return false;\n }\n return true;\n}\n\nclass ViewWriter {\n constructor() {\n this.items = [];\n }\n write(buf) {\n this.items.push(buf);\n }\n final() {\n return concat(this.items);\n }\n}\n\nconst powers2 = [new Uint8Array([1])];\nconst digitsString = \"0123456789\";\nconst NAME = \"name\";\nconst VALUE_HEX_VIEW = \"valueHexView\";\nconst IS_HEX_ONLY = \"isHexOnly\";\nconst ID_BLOCK = \"idBlock\";\nconst TAG_CLASS = \"tagClass\";\nconst TAG_NUMBER = \"tagNumber\";\nconst IS_CONSTRUCTED = \"isConstructed\";\nconst FROM_BER = \"fromBER\";\nconst TO_BER = \"toBER\";\nconst LOCAL = \"local\";\nconst EMPTY_STRING = \"\";\nconst EMPTY_BUFFER = new ArrayBuffer(0);\nconst EMPTY_VIEW = new Uint8Array(0);\nconst END_OF_CONTENT_NAME = \"EndOfContent\";\nconst OCTET_STRING_NAME = \"OCTET STRING\";\nconst BIT_STRING_NAME = \"BIT STRING\";\n\nfunction HexBlock(BaseClass) {\n var _a;\n return _a = class Some extends BaseClass {\n get valueHex() {\n return this.valueHexView.slice().buffer;\n }\n set valueHex(value) {\n this.valueHexView = new Uint8Array(value);\n }\n constructor(...args) {\n var _b;\n super(...args);\n const params = args[0] || {};\n this.isHexOnly = (_b = params.isHexOnly) !== null && _b !== void 0 ? _b : false;\n this.valueHexView = params.valueHex ? pvtsutils.BufferSourceConverter.toUint8Array(params.valueHex) : EMPTY_VIEW;\n }\n fromBER(inputBuffer, inputOffset, inputLength, _context) {\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\n return -1;\n }\n const endLength = inputOffset + inputLength;\n this.valueHexView = view.subarray(inputOffset, endLength);\n if (!this.valueHexView.length) {\n this.warnings.push(\"Zero buffer length\");\n return inputOffset;\n }\n this.blockLength = inputLength;\n return endLength;\n }\n toBER(sizeOnly = false) {\n if (!this.isHexOnly) {\n this.error = \"Flag 'isHexOnly' is not set, abort\";\n return EMPTY_BUFFER;\n }\n if (sizeOnly) {\n return new ArrayBuffer(this.valueHexView.byteLength);\n }\n return (this.valueHexView.byteLength === this.valueHexView.buffer.byteLength)\n ? this.valueHexView.buffer\n : this.valueHexView.slice().buffer;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n isHexOnly: this.isHexOnly,\n valueHex: pvtsutils.Convert.ToHex(this.valueHexView),\n };\n }\n },\n _a.NAME = \"hexBlock\",\n _a;\n}\n\nclass LocalBaseBlock {\n static blockName() {\n return this.NAME;\n }\n get valueBeforeDecode() {\n return this.valueBeforeDecodeView.slice().buffer;\n }\n set valueBeforeDecode(value) {\n this.valueBeforeDecodeView = new Uint8Array(value);\n }\n constructor({ blockLength = 0, error = EMPTY_STRING, warnings = [], valueBeforeDecode = EMPTY_VIEW, } = {}) {\n this.blockLength = blockLength;\n this.error = error;\n this.warnings = warnings;\n this.valueBeforeDecodeView = pvtsutils.BufferSourceConverter.toUint8Array(valueBeforeDecode);\n }\n toJSON() {\n return {\n blockName: this.constructor.NAME,\n blockLength: this.blockLength,\n error: this.error,\n warnings: this.warnings,\n valueBeforeDecode: pvtsutils.Convert.ToHex(this.valueBeforeDecodeView),\n };\n }\n}\nLocalBaseBlock.NAME = \"baseBlock\";\n\nclass ValueBlock extends LocalBaseBlock {\n fromBER(_inputBuffer, _inputOffset, _inputLength, _context) {\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\n }\n toBER(_sizeOnly, _writer) {\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\n }\n}\nValueBlock.NAME = \"valueBlock\";\n\nclass LocalIdentificationBlock extends HexBlock(LocalBaseBlock) {\n constructor({ idBlock = {} } = {}) {\n var _a, _b, _c, _d;\n super();\n if (idBlock) {\n this.isHexOnly = (_a = idBlock.isHexOnly) !== null && _a !== void 0 ? _a : false;\n this.valueHexView = idBlock.valueHex\n ? pvtsutils.BufferSourceConverter.toUint8Array(idBlock.valueHex)\n : EMPTY_VIEW;\n this.tagClass = (_b = idBlock.tagClass) !== null && _b !== void 0 ? _b : -1;\n this.tagNumber = (_c = idBlock.tagNumber) !== null && _c !== void 0 ? _c : -1;\n this.isConstructed = (_d = idBlock.isConstructed) !== null && _d !== void 0 ? _d : false;\n }\n else {\n this.tagClass = -1;\n this.tagNumber = -1;\n this.isConstructed = false;\n }\n }\n toBER(sizeOnly = false) {\n let firstOctet = 0;\n switch (this.tagClass) {\n case 1:\n firstOctet |= 0x00;\n break;\n case 2:\n firstOctet |= 0x40;\n break;\n case 3:\n firstOctet |= 0x80;\n break;\n case 4:\n firstOctet |= 0xC0;\n break;\n default:\n this.error = \"Unknown tag class\";\n return EMPTY_BUFFER;\n }\n if (this.isConstructed)\n firstOctet |= 0x20;\n if (this.tagNumber < 31 && !this.isHexOnly) {\n const retView = new Uint8Array(1);\n if (!sizeOnly) {\n let number = this.tagNumber;\n number &= 0x1F;\n firstOctet |= number;\n retView[0] = firstOctet;\n }\n return retView.buffer;\n }\n if (!this.isHexOnly) {\n const encodedBuf = pvutils.utilToBase(this.tagNumber, 7);\n const encodedView = new Uint8Array(encodedBuf);\n const size = encodedBuf.byteLength;\n const retView = new Uint8Array(size + 1);\n retView[0] = (firstOctet | 0x1F);\n if (!sizeOnly) {\n for (let i = 0; i < (size - 1); i++)\n retView[i + 1] = encodedView[i] | 0x80;\n retView[size] = encodedView[size - 1];\n }\n return retView.buffer;\n }\n const retView = new Uint8Array(this.valueHexView.byteLength + 1);\n retView[0] = (firstOctet | 0x1F);\n if (!sizeOnly) {\n const curView = this.valueHexView;\n for (let i = 0; i < (curView.length - 1); i++)\n retView[i + 1] = curView[i] | 0x80;\n retView[this.valueHexView.byteLength] = curView[curView.length - 1];\n }\n return retView.buffer;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\n return -1;\n }\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\n if (intBuffer.length === 0) {\n this.error = \"Zero buffer length\";\n return -1;\n }\n const tagClassMask = intBuffer[0] & 0xC0;\n switch (tagClassMask) {\n case 0x00:\n this.tagClass = (1);\n break;\n case 0x40:\n this.tagClass = (2);\n break;\n case 0x80:\n this.tagClass = (3);\n break;\n case 0xC0:\n this.tagClass = (4);\n break;\n default:\n this.error = \"Unknown tag class\";\n return -1;\n }\n this.isConstructed = (intBuffer[0] & 0x20) === 0x20;\n this.isHexOnly = false;\n const tagNumberMask = intBuffer[0] & 0x1F;\n if (tagNumberMask !== 0x1F) {\n this.tagNumber = (tagNumberMask);\n this.blockLength = 1;\n }\n else {\n let count = 0;\n while (true) {\n const tagByteIndex = count + 1;\n if (tagByteIndex >= intBuffer.length) {\n this.error = \"End of input reached before message was fully decoded\";\n return -1;\n }\n count++;\n if ((intBuffer[tagByteIndex] & 0x80) === 0x00)\n break;\n }\n this.blockLength = (count + 1);\n const intTagNumberBuffer = this.valueHexView = new Uint8Array(count);\n for (let i = 0; i < count; i++)\n intTagNumberBuffer[i] = intBuffer[i + 1] & 0x7F;\n if (this.blockLength <= 9)\n this.tagNumber = pvutils.utilFromBase(intTagNumberBuffer, 7);\n else {\n this.isHexOnly = true;\n this.warnings.push(\"Tag too long, represented as hex-coded\");\n }\n }\n if (((this.tagClass === 1))\n && (this.isConstructed)) {\n switch (this.tagNumber) {\n case 1:\n case 2:\n case 5:\n case 6:\n case 9:\n case 13:\n case 14:\n case 23:\n case 24:\n case 31:\n case 32:\n case 33:\n case 34:\n this.error = \"Constructed encoding used for primitive type\";\n return -1;\n }\n }\n return (inputOffset + this.blockLength);\n }\n toJSON() {\n return {\n ...super.toJSON(),\n tagClass: this.tagClass,\n tagNumber: this.tagNumber,\n isConstructed: this.isConstructed,\n };\n }\n}\nLocalIdentificationBlock.NAME = \"identificationBlock\";\n\nclass LocalLengthBlock extends LocalBaseBlock {\n constructor({ lenBlock = {} } = {}) {\n var _a, _b, _c;\n super();\n this.isIndefiniteForm = (_a = lenBlock.isIndefiniteForm) !== null && _a !== void 0 ? _a : false;\n this.longFormUsed = (_b = lenBlock.longFormUsed) !== null && _b !== void 0 ? _b : false;\n this.length = (_c = lenBlock.length) !== null && _c !== void 0 ? _c : 0;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\n return -1;\n }\n const intBuffer = view.subarray(inputOffset, inputOffset + inputLength);\n if (intBuffer.length === 0) {\n this.error = \"Zero buffer length\";\n return -1;\n }\n if (intBuffer[0] === 0xFF) {\n this.error = \"Length block 0xFF is reserved by standard\";\n return -1;\n }\n this.isIndefiniteForm = intBuffer[0] === 0x80;\n if (this.isIndefiniteForm) {\n this.blockLength = 1;\n return (inputOffset + this.blockLength);\n }\n this.longFormUsed = !!(intBuffer[0] & 0x80);\n if (this.longFormUsed === false) {\n this.length = (intBuffer[0]);\n this.blockLength = 1;\n return (inputOffset + this.blockLength);\n }\n const count = intBuffer[0] & 0x7F;\n if (count > 8) {\n this.error = \"Too big integer\";\n return -1;\n }\n if ((count + 1) > intBuffer.length) {\n this.error = \"End of input reached before message was fully decoded\";\n return -1;\n }\n const lenOffset = inputOffset + 1;\n const lengthBufferView = view.subarray(lenOffset, lenOffset + count);\n if (lengthBufferView[count - 1] === 0x00)\n this.warnings.push(\"Needlessly long encoded length\");\n this.length = pvutils.utilFromBase(lengthBufferView, 8);\n if (this.longFormUsed && (this.length <= 127))\n this.warnings.push(\"Unnecessary usage of long length form\");\n this.blockLength = count + 1;\n return (inputOffset + this.blockLength);\n }\n toBER(sizeOnly = false) {\n let retBuf;\n let retView;\n if (this.length > 127)\n this.longFormUsed = true;\n if (this.isIndefiniteForm) {\n retBuf = new ArrayBuffer(1);\n if (sizeOnly === false) {\n retView = new Uint8Array(retBuf);\n retView[0] = 0x80;\n }\n return retBuf;\n }\n if (this.longFormUsed) {\n const encodedBuf = pvutils.utilToBase(this.length, 8);\n if (encodedBuf.byteLength > 127) {\n this.error = \"Too big length\";\n return (EMPTY_BUFFER);\n }\n retBuf = new ArrayBuffer(encodedBuf.byteLength + 1);\n if (sizeOnly)\n return retBuf;\n const encodedView = new Uint8Array(encodedBuf);\n retView = new Uint8Array(retBuf);\n retView[0] = encodedBuf.byteLength | 0x80;\n for (let i = 0; i < encodedBuf.byteLength; i++)\n retView[i + 1] = encodedView[i];\n return retBuf;\n }\n retBuf = new ArrayBuffer(1);\n if (sizeOnly === false) {\n retView = new Uint8Array(retBuf);\n retView[0] = this.length;\n }\n return retBuf;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n isIndefiniteForm: this.isIndefiniteForm,\n longFormUsed: this.longFormUsed,\n length: this.length,\n };\n }\n}\nLocalLengthBlock.NAME = \"lengthBlock\";\n\nconst typeStore = {};\n\nclass BaseBlock extends LocalBaseBlock {\n constructor({ name = EMPTY_STRING, optional = false, primitiveSchema, ...parameters } = {}, valueBlockType) {\n super(parameters);\n this.name = name;\n this.optional = optional;\n if (primitiveSchema) {\n this.primitiveSchema = primitiveSchema;\n }\n this.idBlock = new LocalIdentificationBlock(parameters);\n this.lenBlock = new LocalLengthBlock(parameters);\n this.valueBlock = valueBlockType ? new valueBlockType(parameters) : new ValueBlock(parameters);\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm)\n ? inputLength\n : this.lenBlock.length, context);\n if (resultOffset === -1) {\n this.error = this.valueBlock.error;\n return resultOffset;\n }\n if (!this.idBlock.error.length)\n this.blockLength += this.idBlock.blockLength;\n if (!this.lenBlock.error.length)\n this.blockLength += this.lenBlock.blockLength;\n if (!this.valueBlock.error.length)\n this.blockLength += this.valueBlock.blockLength;\n return resultOffset;\n }\n toBER(sizeOnly, writer) {\n const _writer = writer || new ViewWriter();\n if (!writer) {\n prepareIndefiniteForm(this);\n }\n const idBlockBuf = this.idBlock.toBER(sizeOnly);\n _writer.write(idBlockBuf);\n if (this.lenBlock.isIndefiniteForm) {\n _writer.write(new Uint8Array([0x80]).buffer);\n this.valueBlock.toBER(sizeOnly, _writer);\n _writer.write(new ArrayBuffer(2));\n }\n else {\n const valueBlockBuf = this.valueBlock.toBER(sizeOnly);\n this.lenBlock.length = valueBlockBuf.byteLength;\n const lenBlockBuf = this.lenBlock.toBER(sizeOnly);\n _writer.write(lenBlockBuf);\n _writer.write(valueBlockBuf);\n }\n if (!writer) {\n return _writer.final();\n }\n return EMPTY_BUFFER;\n }\n toJSON() {\n const object = {\n ...super.toJSON(),\n idBlock: this.idBlock.toJSON(),\n lenBlock: this.lenBlock.toJSON(),\n valueBlock: this.valueBlock.toJSON(),\n name: this.name,\n optional: this.optional,\n };\n if (this.primitiveSchema)\n object.primitiveSchema = this.primitiveSchema.toJSON();\n return object;\n }\n toString(encoding = \"ascii\") {\n if (encoding === \"ascii\") {\n return this.onAsciiEncoding();\n }\n return pvtsutils.Convert.ToHex(this.toBER());\n }\n onAsciiEncoding() {\n const name = this.constructor.NAME;\n const value = pvtsutils.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);\n return `${name} : ${value}`;\n }\n isEqual(other) {\n if (this === other) {\n return true;\n }\n if (!(other instanceof this.constructor)) {\n return false;\n }\n const thisRaw = this.toBER();\n const otherRaw = other.toBER();\n return pvutils.isEqualBuffer(thisRaw, otherRaw);\n }\n}\nBaseBlock.NAME = \"BaseBlock\";\nfunction prepareIndefiniteForm(baseBlock) {\n var _a;\n if (baseBlock instanceof typeStore.Constructed) {\n for (const value of baseBlock.valueBlock.value) {\n if (prepareIndefiniteForm(value)) {\n baseBlock.lenBlock.isIndefiniteForm = true;\n }\n }\n }\n return !!((_a = baseBlock.lenBlock) === null || _a === void 0 ? void 0 : _a.isIndefiniteForm);\n}\n\nclass BaseStringBlock extends BaseBlock {\n getValue() {\n return this.valueBlock.value;\n }\n setValue(value) {\n this.valueBlock.value = value;\n }\n constructor({ value = EMPTY_STRING, ...parameters } = {}, stringValueBlockType) {\n super(parameters, stringValueBlockType);\n if (value) {\n this.fromString(value);\n }\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm)\n ? inputLength\n : this.lenBlock.length);\n if (resultOffset === -1) {\n this.error = this.valueBlock.error;\n return resultOffset;\n }\n this.fromBuffer(this.valueBlock.valueHexView);\n if (!this.idBlock.error.length)\n this.blockLength += this.idBlock.blockLength;\n if (!this.lenBlock.error.length)\n this.blockLength += this.lenBlock.blockLength;\n if (!this.valueBlock.error.length)\n this.blockLength += this.valueBlock.blockLength;\n return resultOffset;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : '${this.valueBlock.value}'`;\n }\n}\nBaseStringBlock.NAME = \"BaseStringBlock\";\n\nclass LocalPrimitiveValueBlock extends HexBlock(ValueBlock) {\n constructor({ isHexOnly = true, ...parameters } = {}) {\n super(parameters);\n this.isHexOnly = isHexOnly;\n }\n}\nLocalPrimitiveValueBlock.NAME = \"PrimitiveValueBlock\";\n\nvar _a$w;\nclass Primitive extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, LocalPrimitiveValueBlock);\n this.idBlock.isConstructed = false;\n }\n}\n_a$w = Primitive;\n(() => {\n typeStore.Primitive = _a$w;\n})();\nPrimitive.NAME = \"PRIMITIVE\";\n\nconst DEFAULT_MAX_DEPTH = 100;\nconst DEFAULT_MAX_NODES = 10000;\nconst DEFAULT_MAX_CONTENT_LENGTH = 16 * 1024 * 1024;\nconst MAX_DEPTH_EXCEEDED_ERROR = \"Maximum ASN.1 nesting depth exceeded\";\nconst MAX_NODES_EXCEEDED_ERROR = \"Maximum ASN.1 node count exceeded\";\nconst MAX_CONTENT_LENGTH_EXCEEDED_ERROR = \"Maximum ASN.1 content length exceeded\";\nfunction createFromBerContext(options = {}) {\n var _a, _b, _c;\n return {\n depth: 0,\n maxDepth: (_a = options.maxDepth) !== null && _a !== void 0 ? _a : DEFAULT_MAX_DEPTH,\n nodesCount: 0,\n maxNodes: (_b = options.maxNodes) !== null && _b !== void 0 ? _b : DEFAULT_MAX_NODES,\n maxContentLength: (_c = options.maxContentLength) !== null && _c !== void 0 ? _c : DEFAULT_MAX_CONTENT_LENGTH,\n };\n}\nfunction createErrorResult(error) {\n const result = new BaseBlock({}, ValueBlock);\n result.error = error;\n return {\n offset: -1,\n result,\n };\n}\nfunction checkNodesLimit(context) {\n context.nodesCount += 1;\n if (context.nodesCount > context.maxNodes) {\n return MAX_NODES_EXCEEDED_ERROR;\n }\n return undefined;\n}\nfunction checkContentLengthLimit(inputLength, context) {\n if (inputLength > context.maxContentLength) {\n return MAX_CONTENT_LENGTH_EXCEEDED_ERROR;\n }\n return undefined;\n}\nfunction localFromBERWithChildContext(inputBuffer, inputOffset, inputLength, context) {\n const childDepth = context.depth + 1;\n if (childDepth > context.maxDepth) {\n return createErrorResult(MAX_DEPTH_EXCEEDED_ERROR);\n }\n context.depth = childDepth;\n try {\n return localFromBER(inputBuffer, inputOffset, inputLength, context);\n }\n finally {\n context.depth -= 1;\n }\n}\nfunction localChangeType(inputObject, newType) {\n if (inputObject instanceof newType) {\n return inputObject;\n }\n const newObject = new newType();\n newObject.idBlock = inputObject.idBlock;\n newObject.lenBlock = inputObject.lenBlock;\n newObject.warnings = inputObject.warnings;\n newObject.valueBeforeDecodeView = inputObject.valueBeforeDecodeView;\n return newObject;\n}\nfunction localFromBER(inputBuffer, inputOffset = 0, inputLength = inputBuffer.length, context = createFromBerContext()) {\n const incomingOffset = inputOffset;\n let returnObject = new BaseBlock({}, ValueBlock);\n const baseBlock = new LocalBaseBlock();\n if (!checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength)) {\n returnObject.error = baseBlock.error;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n const intBuffer = inputBuffer.subarray(inputOffset, inputOffset + inputLength);\n if (!intBuffer.length) {\n returnObject.error = \"Zero buffer length\";\n return {\n offset: -1,\n result: returnObject,\n };\n }\n const nodesLimitError = checkNodesLimit(context);\n if (nodesLimitError) {\n returnObject.error = nodesLimitError;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n let resultOffset = returnObject.idBlock.fromBER(inputBuffer, inputOffset, inputLength);\n if (returnObject.idBlock.warnings.length) {\n returnObject.warnings.concat(returnObject.idBlock.warnings);\n }\n if (resultOffset === -1) {\n returnObject.error = returnObject.idBlock.error;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n inputOffset = resultOffset;\n inputLength -= returnObject.idBlock.blockLength;\n resultOffset = returnObject.lenBlock.fromBER(inputBuffer, inputOffset, inputLength);\n if (returnObject.lenBlock.warnings.length) {\n returnObject.warnings.concat(returnObject.lenBlock.warnings);\n }\n if (resultOffset === -1) {\n returnObject.error = returnObject.lenBlock.error;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n inputOffset = resultOffset;\n inputLength -= returnObject.lenBlock.blockLength;\n const valueLength = returnObject.lenBlock.isIndefiniteForm ? inputLength : returnObject.lenBlock.length;\n const contentLengthError = checkContentLengthLimit(valueLength, context);\n if (contentLengthError) {\n returnObject.error = contentLengthError;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n if (!returnObject.idBlock.isConstructed\n && returnObject.lenBlock.isIndefiniteForm) {\n returnObject.error = \"Indefinite length form used for primitive encoding form\";\n return {\n offset: -1,\n result: returnObject,\n };\n }\n let newASN1Type = BaseBlock;\n switch (returnObject.idBlock.tagClass) {\n case 1:\n if ((returnObject.idBlock.tagNumber >= 37)\n && (returnObject.idBlock.isHexOnly === false)) {\n returnObject.error = \"UNIVERSAL 37 and upper tags are reserved by ASN.1 standard\";\n return {\n offset: -1,\n result: returnObject,\n };\n }\n switch (returnObject.idBlock.tagNumber) {\n case 0:\n if ((returnObject.idBlock.isConstructed)\n && (returnObject.lenBlock.length > 0)) {\n returnObject.error = \"Type [UNIVERSAL 0] is reserved\";\n return {\n offset: -1,\n result: returnObject,\n };\n }\n newASN1Type = typeStore.EndOfContent;\n break;\n case 1:\n newASN1Type = typeStore.Boolean;\n break;\n case 2:\n newASN1Type = typeStore.Integer;\n break;\n case 3:\n newASN1Type = typeStore.BitString;\n break;\n case 4:\n newASN1Type = typeStore.OctetString;\n break;\n case 5:\n newASN1Type = typeStore.Null;\n break;\n case 6:\n newASN1Type = typeStore.ObjectIdentifier;\n break;\n case 10:\n newASN1Type = typeStore.Enumerated;\n break;\n case 12:\n newASN1Type = typeStore.Utf8String;\n break;\n case 13:\n newASN1Type = typeStore.RelativeObjectIdentifier;\n break;\n case 14:\n newASN1Type = typeStore.TIME;\n break;\n case 15:\n returnObject.error = \"[UNIVERSAL 15] is reserved by ASN.1 standard\";\n return {\n offset: -1,\n result: returnObject,\n };\n case 16:\n newASN1Type = typeStore.Sequence;\n break;\n case 17:\n newASN1Type = typeStore.Set;\n break;\n case 18:\n newASN1Type = typeStore.NumericString;\n break;\n case 19:\n newASN1Type = typeStore.PrintableString;\n break;\n case 20:\n newASN1Type = typeStore.TeletexString;\n break;\n case 21:\n newASN1Type = typeStore.VideotexString;\n break;\n case 22:\n newASN1Type = typeStore.IA5String;\n break;\n case 23:\n newASN1Type = typeStore.UTCTime;\n break;\n case 24:\n newASN1Type = typeStore.GeneralizedTime;\n break;\n case 25:\n newASN1Type = typeStore.GraphicString;\n break;\n case 26:\n newASN1Type = typeStore.VisibleString;\n break;\n case 27:\n newASN1Type = typeStore.GeneralString;\n break;\n case 28:\n newASN1Type = typeStore.UniversalString;\n break;\n case 29:\n newASN1Type = typeStore.CharacterString;\n break;\n case 30:\n newASN1Type = typeStore.BmpString;\n break;\n case 31:\n newASN1Type = typeStore.DATE;\n break;\n case 32:\n newASN1Type = typeStore.TimeOfDay;\n break;\n case 33:\n newASN1Type = typeStore.DateTime;\n break;\n case 34:\n newASN1Type = typeStore.Duration;\n break;\n default: {\n const newObject = returnObject.idBlock.isConstructed\n ? new typeStore.Constructed()\n : new typeStore.Primitive();\n newObject.idBlock = returnObject.idBlock;\n newObject.lenBlock = returnObject.lenBlock;\n newObject.warnings = returnObject.warnings;\n returnObject = newObject;\n }\n }\n break;\n case 2:\n case 3:\n case 4:\n default: {\n newASN1Type = returnObject.idBlock.isConstructed\n ? typeStore.Constructed\n : typeStore.Primitive;\n }\n }\n returnObject = localChangeType(returnObject, newASN1Type);\n resultOffset = returnObject.fromBER(inputBuffer, inputOffset, valueLength, context);\n returnObject.valueBeforeDecodeView = inputBuffer.subarray(incomingOffset, incomingOffset + returnObject.blockLength);\n return {\n offset: resultOffset,\n result: returnObject,\n };\n}\nfunction fromBER(inputBuffer, options = {}) {\n if (!inputBuffer.byteLength) {\n const result = new BaseBlock({}, ValueBlock);\n result.error = \"Input buffer has zero length\";\n return {\n offset: -1,\n result,\n };\n }\n return localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).slice(), 0, inputBuffer.byteLength, createFromBerContext(options));\n}\n\nfunction checkLen(indefiniteLength, length) {\n if (indefiniteLength) {\n return 1;\n }\n return length;\n}\nclass LocalConstructedValueBlock extends ValueBlock {\n constructor({ value = [], isIndefiniteForm = false, ...parameters } = {}) {\n super(parameters);\n this.value = value;\n this.isIndefiniteForm = isIndefiniteForm;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n const parseContext = context !== null && context !== void 0 ? context : createFromBerContext();\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\n return -1;\n }\n this.valueBeforeDecodeView = view.subarray(inputOffset, inputOffset + inputLength);\n if (this.valueBeforeDecodeView.length === 0) {\n this.warnings.push(\"Zero buffer length\");\n return inputOffset;\n }\n let currentOffset = inputOffset;\n while (checkLen(this.isIndefiniteForm, inputLength) > 0) {\n const returnObject = localFromBERWithChildContext(view, currentOffset, inputLength, parseContext);\n if (returnObject.offset === -1) {\n this.error = returnObject.result.error;\n this.warnings.concat(returnObject.result.warnings);\n return -1;\n }\n currentOffset = returnObject.offset;\n this.blockLength += returnObject.result.blockLength;\n inputLength -= returnObject.result.blockLength;\n this.value.push(returnObject.result);\n if (this.isIndefiniteForm && returnObject.result.constructor.NAME === END_OF_CONTENT_NAME) {\n break;\n }\n }\n if (this.isIndefiniteForm) {\n if (this.value[this.value.length - 1].constructor.NAME === END_OF_CONTENT_NAME) {\n this.value.pop();\n }\n else {\n this.warnings.push(\"No EndOfContent block encoded\");\n }\n }\n return currentOffset;\n }\n toBER(sizeOnly, writer) {\n const _writer = writer || new ViewWriter();\n for (let i = 0; i < this.value.length; i++) {\n this.value[i].toBER(sizeOnly, _writer);\n }\n if (!writer) {\n return _writer.final();\n }\n return EMPTY_BUFFER;\n }\n toJSON() {\n const object = {\n ...super.toJSON(),\n isIndefiniteForm: this.isIndefiniteForm,\n value: [],\n };\n for (const value of this.value) {\n object.value.push(value.toJSON());\n }\n return object;\n }\n}\nLocalConstructedValueBlock.NAME = \"ConstructedValueBlock\";\n\nvar _a$v;\nclass Constructed extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, LocalConstructedValueBlock);\n this.idBlock.isConstructed = true;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length, context);\n if (resultOffset === -1) {\n this.error = this.valueBlock.error;\n return resultOffset;\n }\n if (!this.idBlock.error.length)\n this.blockLength += this.idBlock.blockLength;\n if (!this.lenBlock.error.length)\n this.blockLength += this.lenBlock.blockLength;\n if (!this.valueBlock.error.length)\n this.blockLength += this.valueBlock.blockLength;\n return resultOffset;\n }\n onAsciiEncoding() {\n const values = [];\n for (const value of this.valueBlock.value) {\n values.push(value.toString(\"ascii\").split(\"\\n\").map((o) => ` ${o}`).join(\"\\n\"));\n }\n const blockName = this.idBlock.tagClass === 3\n ? `[${this.idBlock.tagNumber}]`\n : this.constructor.NAME;\n return values.length\n ? `${blockName} :\\n${values.join(\"\\n\")}`\n : `${blockName} :`;\n }\n}\n_a$v = Constructed;\n(() => {\n typeStore.Constructed = _a$v;\n})();\nConstructed.NAME = \"CONSTRUCTED\";\n\nclass LocalEndOfContentValueBlock extends ValueBlock {\n fromBER(inputBuffer, inputOffset, _inputLength) {\n return inputOffset;\n }\n toBER(_sizeOnly) {\n return EMPTY_BUFFER;\n }\n}\nLocalEndOfContentValueBlock.override = \"EndOfContentValueBlock\";\n\nvar _a$u;\nclass EndOfContent extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, LocalEndOfContentValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 0;\n }\n}\n_a$u = EndOfContent;\n(() => {\n typeStore.EndOfContent = _a$u;\n})();\nEndOfContent.NAME = END_OF_CONTENT_NAME;\n\nvar _a$t;\nclass Null extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, ValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 5;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n if (this.lenBlock.length > 0)\n this.warnings.push(\"Non-zero length of value block for Null type\");\n if (!this.idBlock.error.length)\n this.blockLength += this.idBlock.blockLength;\n if (!this.lenBlock.error.length)\n this.blockLength += this.lenBlock.blockLength;\n this.blockLength += inputLength;\n if ((inputOffset + inputLength) > inputBuffer.byteLength) {\n this.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\n return -1;\n }\n return (inputOffset + inputLength);\n }\n toBER(sizeOnly, writer) {\n const retBuf = new ArrayBuffer(2);\n if (!sizeOnly) {\n const retView = new Uint8Array(retBuf);\n retView[0] = 0x05;\n retView[1] = 0x00;\n }\n if (writer) {\n writer.write(retBuf);\n }\n return retBuf;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME}`;\n }\n}\n_a$t = Null;\n(() => {\n typeStore.Null = _a$t;\n})();\nNull.NAME = \"NULL\";\n\nclass LocalBooleanValueBlock extends HexBlock(ValueBlock) {\n get value() {\n for (const octet of this.valueHexView) {\n if (octet > 0) {\n return true;\n }\n }\n return false;\n }\n set value(value) {\n this.valueHexView[0] = value ? 0xFF : 0x00;\n }\n constructor({ value, ...parameters } = {}) {\n super(parameters);\n if (parameters.valueHex) {\n this.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(parameters.valueHex);\n }\n else {\n this.valueHexView = new Uint8Array(1);\n }\n if (value) {\n this.value = value;\n }\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\n return -1;\n }\n this.valueHexView = inputView.subarray(inputOffset, inputOffset + inputLength);\n if (inputLength > 1)\n this.warnings.push(\"Boolean value encoded in more then 1 octet\");\n this.isHexOnly = true;\n pvutils.utilDecodeTC.call(this);\n this.blockLength = inputLength;\n return (inputOffset + inputLength);\n }\n toBER() {\n return this.valueHexView.slice();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n value: this.value,\n };\n }\n}\nLocalBooleanValueBlock.NAME = \"BooleanValueBlock\";\n\nvar _a$s;\nclass Boolean extends BaseBlock {\n getValue() {\n return this.valueBlock.value;\n }\n setValue(value) {\n this.valueBlock.value = value;\n }\n constructor(parameters = {}) {\n super(parameters, LocalBooleanValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 1;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.getValue}`;\n }\n}\n_a$s = Boolean;\n(() => {\n typeStore.Boolean = _a$s;\n})();\nBoolean.NAME = \"BOOLEAN\";\n\nclass LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\n constructor({ isConstructed = false, ...parameters } = {}) {\n super(parameters);\n this.isConstructed = isConstructed;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n let resultOffset = 0;\n if (this.isConstructed) {\n this.isHexOnly = false;\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength, context);\n if (resultOffset === -1)\n return resultOffset;\n for (let i = 0; i < this.value.length; i++) {\n const currentBlockName = this.value[i].constructor.NAME;\n if (currentBlockName === END_OF_CONTENT_NAME) {\n if (this.isIndefiniteForm)\n break;\n else {\n this.error = \"EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only\";\n return -1;\n }\n }\n if (currentBlockName !== OCTET_STRING_NAME) {\n this.error = \"OCTET STRING may consists of OCTET STRINGs only\";\n return -1;\n }\n }\n }\n else {\n this.isHexOnly = true;\n resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\n this.blockLength = inputLength;\n }\n return resultOffset;\n }\n toBER(sizeOnly, writer) {\n if (this.isConstructed)\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\n return sizeOnly\n ? new ArrayBuffer(this.valueHexView.byteLength)\n : this.valueHexView.slice().buffer;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n isConstructed: this.isConstructed,\n };\n }\n}\nLocalOctetStringValueBlock.NAME = \"OctetStringValueBlock\";\n\nvar _a$r;\nclass OctetString extends BaseBlock {\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\n var _b, _c;\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\n super({\n idBlock: {\n isConstructed: parameters.isConstructed,\n ...idBlock,\n },\n lenBlock: {\n ...lenBlock,\n isIndefiniteForm: !!parameters.isIndefiniteForm,\n },\n ...parameters,\n }, LocalOctetStringValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 4;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\n if (inputLength === 0) {\n if (this.idBlock.error.length === 0)\n this.blockLength += this.idBlock.blockLength;\n if (this.lenBlock.error.length === 0)\n this.blockLength += this.lenBlock.blockLength;\n return inputOffset;\n }\n if (!this.valueBlock.isConstructed) {\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\n const buf = view.subarray(inputOffset, inputOffset + inputLength);\n try {\n if (buf.byteLength) {\n const parseContext = context !== null && context !== void 0 ? context : createFromBerContext();\n const asn = localFromBERWithChildContext(buf, 0, buf.byteLength, parseContext);\n if (asn.offset !== -1 && asn.offset === inputLength) {\n this.valueBlock.value = [asn.result];\n }\n }\n }\n catch {\n }\n }\n return super.fromBER(inputBuffer, inputOffset, inputLength, context);\n }\n onAsciiEncoding() {\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\n return Constructed.prototype.onAsciiEncoding.call(this);\n }\n const name = this.constructor.NAME;\n const value = pvtsutils.Convert.ToHex(this.valueBlock.valueHexView);\n return `${name} : ${value}`;\n }\n getValue() {\n if (!this.idBlock.isConstructed) {\n return this.valueBlock.valueHexView.slice().buffer;\n }\n const array = [];\n for (const content of this.valueBlock.value) {\n if (content instanceof _a$r) {\n array.push(content.valueBlock.valueHexView);\n }\n }\n return pvtsutils.BufferSourceConverter.concat(array);\n }\n}\n_a$r = OctetString;\n(() => {\n typeStore.OctetString = _a$r;\n})();\nOctetString.NAME = OCTET_STRING_NAME;\n\nclass LocalBitStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\n constructor({ unusedBits = 0, isConstructed = false, ...parameters } = {}) {\n super(parameters);\n this.unusedBits = unusedBits;\n this.isConstructed = isConstructed;\n this.blockLength = this.valueHexView.byteLength;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n if (!inputLength) {\n return inputOffset;\n }\n let resultOffset = -1;\n if (this.isConstructed) {\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength, context);\n if (resultOffset === -1)\n return resultOffset;\n for (const value of this.value) {\n const currentBlockName = value.constructor.NAME;\n if (currentBlockName === END_OF_CONTENT_NAME) {\n if (this.isIndefiniteForm)\n break;\n else {\n this.error = \"EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only\";\n return -1;\n }\n }\n if (currentBlockName !== BIT_STRING_NAME) {\n this.error = \"BIT STRING may consists of BIT STRINGs only\";\n return -1;\n }\n const valueBlock = value.valueBlock;\n if ((this.unusedBits > 0) && (valueBlock.unusedBits > 0)) {\n this.error = \"Using of \\\"unused bits\\\" inside constructive BIT STRING allowed for least one only\";\n return -1;\n }\n this.unusedBits = valueBlock.unusedBits;\n }\n return resultOffset;\n }\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\n return -1;\n }\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\n this.unusedBits = intBuffer[0];\n if (this.unusedBits > 7) {\n this.error = \"Unused bits for BitString must be in range 0-7\";\n return -1;\n }\n if (!this.unusedBits) {\n const buf = intBuffer.subarray(1);\n try {\n if (buf.byteLength) {\n const parseContext = context !== null && context !== void 0 ? context : createFromBerContext();\n const asn = localFromBERWithChildContext(buf, 0, buf.byteLength, parseContext);\n if (asn.offset !== -1 && asn.offset === (inputLength - 1)) {\n this.value = [asn.result];\n }\n }\n }\n catch {\n }\n }\n this.valueHexView = intBuffer.subarray(1);\n this.blockLength = intBuffer.length;\n return (inputOffset + inputLength);\n }\n toBER(sizeOnly, writer) {\n if (this.isConstructed) {\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\n }\n if (sizeOnly) {\n return new ArrayBuffer(this.valueHexView.byteLength + 1);\n }\n if (!this.valueHexView.byteLength) {\n const empty = new Uint8Array(1);\n empty[0] = 0;\n return empty.buffer;\n }\n const retView = new Uint8Array(this.valueHexView.length + 1);\n retView[0] = this.unusedBits;\n retView.set(this.valueHexView, 1);\n return retView.buffer;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n unusedBits: this.unusedBits,\n isConstructed: this.isConstructed,\n };\n }\n}\nLocalBitStringValueBlock.NAME = \"BitStringValueBlock\";\n\nvar _a$q;\nclass BitString extends BaseBlock {\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\n var _b, _c;\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\n super({\n idBlock: {\n isConstructed: parameters.isConstructed,\n ...idBlock,\n },\n lenBlock: {\n ...lenBlock,\n isIndefiniteForm: !!parameters.isIndefiniteForm,\n },\n ...parameters,\n }, LocalBitStringValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 3;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\n return super.fromBER(inputBuffer, inputOffset, inputLength, context);\n }\n onAsciiEncoding() {\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\n return Constructed.prototype.onAsciiEncoding.call(this);\n }\n else {\n const bits = [];\n const valueHex = this.valueBlock.valueHexView;\n for (const byte of valueHex) {\n bits.push(byte.toString(2).padStart(8, \"0\"));\n }\n const bitsStr = bits.join(\"\");\n const name = this.constructor.NAME;\n const value = bitsStr.substring(0, bitsStr.length - this.valueBlock.unusedBits);\n return `${name} : ${value}`;\n }\n }\n}\n_a$q = BitString;\n(() => {\n typeStore.BitString = _a$q;\n})();\nBitString.NAME = BIT_STRING_NAME;\n\nvar _a$p;\nfunction viewAdd(first, second) {\n const c = new Uint8Array([0]);\n const firstView = new Uint8Array(first);\n const secondView = new Uint8Array(second);\n let firstViewCopy = firstView.slice(0);\n const firstViewCopyLength = firstViewCopy.length - 1;\n const secondViewCopy = secondView.slice(0);\n const secondViewCopyLength = secondViewCopy.length - 1;\n let value = 0;\n const max = (secondViewCopyLength < firstViewCopyLength) ? firstViewCopyLength : secondViewCopyLength;\n let counter = 0;\n for (let i = max; i >= 0; i--, counter++) {\n switch (true) {\n case (counter < secondViewCopy.length):\n value = firstViewCopy[firstViewCopyLength - counter] + secondViewCopy[secondViewCopyLength - counter] + c[0];\n break;\n default:\n value = firstViewCopy[firstViewCopyLength - counter] + c[0];\n }\n c[0] = value / 10;\n switch (true) {\n case (counter >= firstViewCopy.length):\n firstViewCopy = pvutils.utilConcatView(new Uint8Array([value % 10]), firstViewCopy);\n break;\n default:\n firstViewCopy[firstViewCopyLength - counter] = value % 10;\n }\n }\n if (c[0] > 0)\n firstViewCopy = pvutils.utilConcatView(c, firstViewCopy);\n return firstViewCopy;\n}\nfunction power2(n) {\n if (n >= powers2.length) {\n for (let p = powers2.length; p <= n; p++) {\n const c = new Uint8Array([0]);\n let digits = (powers2[p - 1]).slice(0);\n for (let i = (digits.length - 1); i >= 0; i--) {\n const newValue = new Uint8Array([(digits[i] << 1) + c[0]]);\n c[0] = newValue[0] / 10;\n digits[i] = newValue[0] % 10;\n }\n if (c[0] > 0)\n digits = pvutils.utilConcatView(c, digits);\n powers2.push(digits);\n }\n }\n return powers2[n];\n}\nfunction viewSub(first, second) {\n let b = 0;\n const firstView = new Uint8Array(first);\n const secondView = new Uint8Array(second);\n const firstViewCopy = firstView.slice(0);\n const firstViewCopyLength = firstViewCopy.length - 1;\n const secondViewCopy = secondView.slice(0);\n const secondViewCopyLength = secondViewCopy.length - 1;\n let value;\n let counter = 0;\n for (let i = secondViewCopyLength; i >= 0; i--, counter++) {\n value = firstViewCopy[firstViewCopyLength - counter] - secondViewCopy[secondViewCopyLength - counter] - b;\n switch (true) {\n case (value < 0):\n b = 1;\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\n break;\n default:\n b = 0;\n firstViewCopy[firstViewCopyLength - counter] = value;\n }\n }\n if (b > 0) {\n for (let i = (firstViewCopyLength - secondViewCopyLength + 1); i >= 0; i--, counter++) {\n value = firstViewCopy[firstViewCopyLength - counter] - b;\n if (value < 0) {\n b = 1;\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\n }\n else {\n b = 0;\n firstViewCopy[firstViewCopyLength - counter] = value;\n break;\n }\n }\n }\n return firstViewCopy.slice();\n}\nclass LocalIntegerValueBlock extends HexBlock(ValueBlock) {\n setValueHex() {\n if (this.valueHexView.length >= 4) {\n this.warnings.push(\"Too big Integer for decoding, hex only\");\n this.isHexOnly = true;\n this._valueDec = 0;\n }\n else {\n this.isHexOnly = false;\n if (this.valueHexView.length > 0) {\n this._valueDec = pvutils.utilDecodeTC.call(this);\n }\n }\n }\n constructor({ value, ...parameters } = {}) {\n super(parameters);\n this._valueDec = 0;\n if (parameters.valueHex) {\n this.setValueHex();\n }\n if (value !== undefined) {\n this.valueDec = value;\n }\n }\n set valueDec(v) {\n this._valueDec = v;\n this.isHexOnly = false;\n this.valueHexView = new Uint8Array(pvutils.utilEncodeTC(v));\n }\n get valueDec() {\n return this._valueDec;\n }\n fromDER(inputBuffer, inputOffset, inputLength, expectedLength = 0) {\n const offset = this.fromBER(inputBuffer, inputOffset, inputLength);\n if (offset === -1)\n return offset;\n const view = this.valueHexView;\n if ((view[0] === 0x00) && ((view[1] & 0x80) !== 0)) {\n this.valueHexView = view.subarray(1);\n }\n else {\n if (expectedLength !== 0) {\n if (view.length < expectedLength) {\n if ((expectedLength - view.length) > 1)\n expectedLength = view.length + 1;\n this.valueHexView = view.subarray(expectedLength - view.length);\n }\n }\n }\n return offset;\n }\n toDER(sizeOnly = false) {\n const view = this.valueHexView;\n switch (true) {\n case ((view[0] & 0x80) !== 0):\n {\n const updatedView = new Uint8Array(this.valueHexView.length + 1);\n updatedView[0] = 0x00;\n updatedView.set(view, 1);\n this.valueHexView = updatedView;\n }\n break;\n case ((view[0] === 0x00) && ((view[1] & 0x80) === 0)):\n {\n this.valueHexView = this.valueHexView.subarray(1);\n }\n break;\n }\n return this.toBER(sizeOnly);\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\n if (resultOffset === -1) {\n return resultOffset;\n }\n this.setValueHex();\n return resultOffset;\n }\n toBER(sizeOnly) {\n return sizeOnly\n ? new ArrayBuffer(this.valueHexView.length)\n : this.valueHexView.slice().buffer;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n valueDec: this.valueDec,\n };\n }\n toString() {\n const firstBit = (this.valueHexView.length * 8) - 1;\n let digits = new Uint8Array((this.valueHexView.length * 8) / 3);\n let bitNumber = 0;\n let currentByte;\n const asn1View = this.valueHexView;\n let result = \"\";\n let flag = false;\n for (let byteNumber = (asn1View.byteLength - 1); byteNumber >= 0; byteNumber--) {\n currentByte = asn1View[byteNumber];\n for (let i = 0; i < 8; i++) {\n if ((currentByte & 1) === 1) {\n switch (bitNumber) {\n case firstBit:\n digits = viewSub(power2(bitNumber), digits);\n result = \"-\";\n break;\n default:\n digits = viewAdd(digits, power2(bitNumber));\n }\n }\n bitNumber++;\n currentByte >>= 1;\n }\n }\n for (let i = 0; i < digits.length; i++) {\n if (digits[i])\n flag = true;\n if (flag)\n result += digitsString.charAt(digits[i]);\n }\n if (flag === false)\n result += digitsString.charAt(0);\n return result;\n }\n}\n_a$p = LocalIntegerValueBlock;\nLocalIntegerValueBlock.NAME = \"IntegerValueBlock\";\n(() => {\n Object.defineProperty(_a$p.prototype, \"valueHex\", {\n set: function (v) {\n this.valueHexView = new Uint8Array(v);\n this.setValueHex();\n },\n get: function () {\n return this.valueHexView.slice().buffer;\n },\n });\n})();\n\nvar _a$o;\nclass Integer extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, LocalIntegerValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 2;\n }\n toBigInt() {\n assertBigInt();\n return BigInt(this.valueBlock.toString());\n }\n static fromBigInt(value) {\n assertBigInt();\n const bigIntValue = BigInt(value);\n const writer = new ViewWriter();\n const hex = bigIntValue.toString(16).replace(/^-/, \"\");\n const view = new Uint8Array(pvtsutils.Convert.FromHex(hex));\n if (bigIntValue < 0) {\n const first = new Uint8Array(view.length + (view[0] & 0x80 ? 1 : 0));\n first[0] |= 0x80;\n const firstInt = BigInt(`0x${pvtsutils.Convert.ToHex(first)}`);\n const secondInt = firstInt + bigIntValue;\n const second = pvtsutils.BufferSourceConverter.toUint8Array(pvtsutils.Convert.FromHex(secondInt.toString(16)));\n second[0] |= 0x80;\n writer.write(second);\n }\n else {\n if (view[0] & 0x80) {\n writer.write(new Uint8Array([0]));\n }\n writer.write(view);\n }\n const res = new _a$o({ valueHex: writer.final() });\n return res;\n }\n convertToDER() {\n const integer = new _a$o({ valueHex: this.valueBlock.valueHexView });\n integer.valueBlock.toDER();\n return integer;\n }\n convertFromDER() {\n return new _a$o({\n valueHex: this.valueBlock.valueHexView[0] === 0\n ? this.valueBlock.valueHexView.subarray(1)\n : this.valueBlock.valueHexView,\n });\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.valueBlock.toString()}`;\n }\n}\n_a$o = Integer;\n(() => {\n typeStore.Integer = _a$o;\n})();\nInteger.NAME = \"INTEGER\";\n\nvar _a$n;\nclass Enumerated extends Integer {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 10;\n }\n}\n_a$n = Enumerated;\n(() => {\n typeStore.Enumerated = _a$n;\n})();\nEnumerated.NAME = \"ENUMERATED\";\n\nclass LocalSidValueBlock extends HexBlock(ValueBlock) {\n constructor({ valueDec = -1, isFirstSid = false, ...parameters } = {}) {\n super(parameters);\n this.valueDec = valueDec;\n this.isFirstSid = isFirstSid;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n if (!inputLength) {\n return inputOffset;\n }\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\n return -1;\n }\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\n this.valueHexView = new Uint8Array(inputLength);\n for (let i = 0; i < inputLength; i++) {\n this.valueHexView[i] = intBuffer[i] & 0x7F;\n this.blockLength++;\n if ((intBuffer[i] & 0x80) === 0x00)\n break;\n }\n const tempView = new Uint8Array(this.blockLength);\n for (let i = 0; i < this.blockLength; i++) {\n tempView[i] = this.valueHexView[i];\n }\n this.valueHexView = tempView;\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\n this.error = \"End of input reached before message was fully decoded\";\n return -1;\n }\n if (this.valueHexView[0] === 0x00)\n this.warnings.push(\"Needlessly long format of SID encoding\");\n if (this.blockLength <= 8)\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\n else {\n this.isHexOnly = true;\n this.warnings.push(\"Too big SID for decoding, hex only\");\n }\n return (inputOffset + this.blockLength);\n }\n set valueBigInt(value) {\n assertBigInt();\n let bits = BigInt(value).toString(2);\n while (bits.length % 7) {\n bits = \"0\" + bits;\n }\n const bytes = new Uint8Array(bits.length / 7);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(bits.slice(i * 7, i * 7 + 7), 2) + (i + 1 < bytes.length ? 0x80 : 0);\n }\n this.fromBER(bytes.buffer, 0, bytes.length);\n }\n toBER(sizeOnly) {\n if (this.isHexOnly) {\n if (sizeOnly)\n return (new ArrayBuffer(this.valueHexView.byteLength));\n const curView = this.valueHexView;\n const retView = new Uint8Array(this.blockLength);\n for (let i = 0; i < (this.blockLength - 1); i++)\n retView[i] = curView[i] | 0x80;\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\n return retView.buffer;\n }\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\n if (encodedBuf.byteLength === 0) {\n this.error = \"Error during encoding SID value\";\n return EMPTY_BUFFER;\n }\n const retView = new Uint8Array(encodedBuf.byteLength);\n if (!sizeOnly) {\n const encodedView = new Uint8Array(encodedBuf);\n const len = encodedBuf.byteLength - 1;\n for (let i = 0; i < len; i++)\n retView[i] = encodedView[i] | 0x80;\n retView[len] = encodedView[len];\n }\n return retView;\n }\n toString() {\n let result = \"\";\n if (this.isHexOnly)\n result = pvtsutils.Convert.ToHex(this.valueHexView);\n else {\n if (this.isFirstSid) {\n let sidValue = this.valueDec;\n if (this.valueDec <= 39)\n result = \"0.\";\n else {\n if (this.valueDec <= 79) {\n result = \"1.\";\n sidValue -= 40;\n }\n else {\n result = \"2.\";\n sidValue -= 80;\n }\n }\n result += sidValue.toString();\n }\n else\n result = this.valueDec.toString();\n }\n return result;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n valueDec: this.valueDec,\n isFirstSid: this.isFirstSid,\n };\n }\n}\nLocalSidValueBlock.NAME = \"sidBlock\";\n\nclass LocalObjectIdentifierValueBlock extends ValueBlock {\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\n super(parameters);\n this.value = [];\n if (value) {\n this.fromString(value);\n }\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n let resultOffset = inputOffset;\n while (inputLength > 0) {\n const sidBlock = new LocalSidValueBlock();\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\n if (resultOffset === -1) {\n this.blockLength = 0;\n this.error = sidBlock.error;\n return resultOffset;\n }\n if (this.value.length === 0)\n sidBlock.isFirstSid = true;\n this.blockLength += sidBlock.blockLength;\n inputLength -= sidBlock.blockLength;\n this.value.push(sidBlock);\n }\n return resultOffset;\n }\n toBER(sizeOnly) {\n const retBuffers = [];\n for (let i = 0; i < this.value.length; i++) {\n const valueBuf = this.value[i].toBER(sizeOnly);\n if (valueBuf.byteLength === 0) {\n this.error = this.value[i].error;\n return EMPTY_BUFFER;\n }\n retBuffers.push(valueBuf);\n }\n return concat(retBuffers);\n }\n fromString(string) {\n this.value = [];\n let pos1 = 0;\n let pos2 = 0;\n let sid = \"\";\n let flag = false;\n do {\n pos2 = string.indexOf(\".\", pos1);\n if (pos2 === -1)\n sid = string.substring(pos1);\n else\n sid = string.substring(pos1, pos2);\n pos1 = pos2 + 1;\n if (flag) {\n const sidBlock = this.value[0];\n let plus = 0;\n switch (sidBlock.valueDec) {\n case 0:\n break;\n case 1:\n plus = 40;\n break;\n case 2:\n plus = 80;\n break;\n default:\n this.value = [];\n return;\n }\n const parsedSID = parseInt(sid, 10);\n if (isNaN(parsedSID))\n return;\n sidBlock.valueDec = parsedSID + plus;\n flag = false;\n }\n else {\n const sidBlock = new LocalSidValueBlock();\n if (sid > Number.MAX_SAFE_INTEGER) {\n assertBigInt();\n const sidValue = BigInt(sid);\n sidBlock.valueBigInt = sidValue;\n }\n else {\n sidBlock.valueDec = parseInt(sid, 10);\n if (isNaN(sidBlock.valueDec))\n return;\n }\n if (!this.value.length) {\n sidBlock.isFirstSid = true;\n flag = true;\n }\n this.value.push(sidBlock);\n }\n } while (pos2 !== -1);\n }\n toString() {\n let result = \"\";\n let isHexOnly = false;\n for (let i = 0; i < this.value.length; i++) {\n isHexOnly = this.value[i].isHexOnly;\n let sidStr = this.value[i].toString();\n if (i !== 0)\n result = `${result}.`;\n if (isHexOnly) {\n sidStr = `{${sidStr}}`;\n if (this.value[i].isFirstSid)\n result = `2.{${sidStr} - 80}`;\n else\n result += sidStr;\n }\n else\n result += sidStr;\n }\n return result;\n }\n toJSON() {\n const object = {\n ...super.toJSON(),\n value: this.toString(),\n sidArray: [],\n };\n for (let i = 0; i < this.value.length; i++) {\n object.sidArray.push(this.value[i].toJSON());\n }\n return object;\n }\n}\nLocalObjectIdentifierValueBlock.NAME = \"ObjectIdentifierValueBlock\";\n\nvar _a$m;\nclass ObjectIdentifier extends BaseBlock {\n getValue() {\n return this.valueBlock.toString();\n }\n setValue(value) {\n this.valueBlock.fromString(value);\n }\n constructor(parameters = {}) {\n super(parameters, LocalObjectIdentifierValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 6;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n value: this.getValue(),\n };\n }\n}\n_a$m = ObjectIdentifier;\n(() => {\n typeStore.ObjectIdentifier = _a$m;\n})();\nObjectIdentifier.NAME = \"OBJECT IDENTIFIER\";\n\nclass LocalRelativeSidValueBlock extends HexBlock(LocalBaseBlock) {\n constructor({ valueDec = 0, ...parameters } = {}) {\n super(parameters);\n this.valueDec = valueDec;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n if (inputLength === 0)\n return inputOffset;\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength))\n return -1;\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\n this.valueHexView = new Uint8Array(inputLength);\n for (let i = 0; i < inputLength; i++) {\n this.valueHexView[i] = intBuffer[i] & 0x7F;\n this.blockLength++;\n if ((intBuffer[i] & 0x80) === 0x00)\n break;\n }\n const tempView = new Uint8Array(this.blockLength);\n for (let i = 0; i < this.blockLength; i++)\n tempView[i] = this.valueHexView[i];\n this.valueHexView = tempView;\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\n this.error = \"End of input reached before message was fully decoded\";\n return -1;\n }\n if (this.valueHexView[0] === 0x00)\n this.warnings.push(\"Needlessly long format of SID encoding\");\n if (this.blockLength <= 8)\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\n else {\n this.isHexOnly = true;\n this.warnings.push(\"Too big SID for decoding, hex only\");\n }\n return (inputOffset + this.blockLength);\n }\n toBER(sizeOnly) {\n if (this.isHexOnly) {\n if (sizeOnly)\n return (new ArrayBuffer(this.valueHexView.byteLength));\n const curView = this.valueHexView;\n const retView = new Uint8Array(this.blockLength);\n for (let i = 0; i < (this.blockLength - 1); i++)\n retView[i] = curView[i] | 0x80;\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\n return retView.buffer;\n }\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\n if (encodedBuf.byteLength === 0) {\n this.error = \"Error during encoding SID value\";\n return EMPTY_BUFFER;\n }\n const retView = new Uint8Array(encodedBuf.byteLength);\n if (!sizeOnly) {\n const encodedView = new Uint8Array(encodedBuf);\n const len = encodedBuf.byteLength - 1;\n for (let i = 0; i < len; i++)\n retView[i] = encodedView[i] | 0x80;\n retView[len] = encodedView[len];\n }\n return retView.buffer;\n }\n toString() {\n let result = \"\";\n if (this.isHexOnly)\n result = pvtsutils.Convert.ToHex(this.valueHexView);\n else {\n result = this.valueDec.toString();\n }\n return result;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n valueDec: this.valueDec,\n };\n }\n}\nLocalRelativeSidValueBlock.NAME = \"relativeSidBlock\";\n\nclass LocalRelativeObjectIdentifierValueBlock extends ValueBlock {\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\n super(parameters);\n this.value = [];\n if (value) {\n this.fromString(value);\n }\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n let resultOffset = inputOffset;\n while (inputLength > 0) {\n const sidBlock = new LocalRelativeSidValueBlock();\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\n if (resultOffset === -1) {\n this.blockLength = 0;\n this.error = sidBlock.error;\n return resultOffset;\n }\n this.blockLength += sidBlock.blockLength;\n inputLength -= sidBlock.blockLength;\n this.value.push(sidBlock);\n }\n return resultOffset;\n }\n toBER(sizeOnly, _writer) {\n const retBuffers = [];\n for (let i = 0; i < this.value.length; i++) {\n const valueBuf = this.value[i].toBER(sizeOnly);\n if (valueBuf.byteLength === 0) {\n this.error = this.value[i].error;\n return EMPTY_BUFFER;\n }\n retBuffers.push(valueBuf);\n }\n return concat(retBuffers);\n }\n fromString(string) {\n this.value = [];\n let pos1 = 0;\n let pos2 = 0;\n let sid = \"\";\n do {\n pos2 = string.indexOf(\".\", pos1);\n if (pos2 === -1)\n sid = string.substring(pos1);\n else\n sid = string.substring(pos1, pos2);\n pos1 = pos2 + 1;\n const sidBlock = new LocalRelativeSidValueBlock();\n sidBlock.valueDec = parseInt(sid, 10);\n if (isNaN(sidBlock.valueDec))\n return true;\n this.value.push(sidBlock);\n } while (pos2 !== -1);\n return true;\n }\n toString() {\n let result = \"\";\n let isHexOnly = false;\n for (let i = 0; i < this.value.length; i++) {\n isHexOnly = this.value[i].isHexOnly;\n let sidStr = this.value[i].toString();\n if (i !== 0)\n result = `${result}.`;\n if (isHexOnly) {\n sidStr = `{${sidStr}}`;\n result += sidStr;\n }\n else\n result += sidStr;\n }\n return result;\n }\n toJSON() {\n const object = {\n ...super.toJSON(),\n value: this.toString(),\n sidArray: [],\n };\n for (let i = 0; i < this.value.length; i++)\n object.sidArray.push(this.value[i].toJSON());\n return object;\n }\n}\nLocalRelativeObjectIdentifierValueBlock.NAME = \"RelativeObjectIdentifierValueBlock\";\n\nvar _a$l;\nclass RelativeObjectIdentifier extends BaseBlock {\n getValue() {\n return this.valueBlock.toString();\n }\n setValue(value) {\n this.valueBlock.fromString(value);\n }\n constructor(parameters = {}) {\n super(parameters, LocalRelativeObjectIdentifierValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 13;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n value: this.getValue(),\n };\n }\n}\n_a$l = RelativeObjectIdentifier;\n(() => {\n typeStore.RelativeObjectIdentifier = _a$l;\n})();\nRelativeObjectIdentifier.NAME = \"RelativeObjectIdentifier\";\n\nvar _a$k;\nclass Sequence extends Constructed {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 16;\n }\n}\n_a$k = Sequence;\n(() => {\n typeStore.Sequence = _a$k;\n})();\nSequence.NAME = \"SEQUENCE\";\n\nvar _a$j;\nclass Set extends Constructed {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 17;\n }\n}\n_a$j = Set;\n(() => {\n typeStore.Set = _a$j;\n})();\nSet.NAME = \"SET\";\n\nclass LocalStringValueBlock extends HexBlock(ValueBlock) {\n constructor({ ...parameters } = {}) {\n super(parameters);\n this.isHexOnly = true;\n this.value = EMPTY_STRING;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n value: this.value,\n };\n }\n}\nLocalStringValueBlock.NAME = \"StringValueBlock\";\n\nclass LocalSimpleStringValueBlock extends LocalStringValueBlock {\n}\nLocalSimpleStringValueBlock.NAME = \"SimpleStringValueBlock\";\n\nclass LocalSimpleStringBlock extends BaseStringBlock {\n constructor({ ...parameters } = {}) {\n super(parameters, LocalSimpleStringValueBlock);\n }\n fromBuffer(inputBuffer) {\n this.valueBlock.value = String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\n }\n fromString(inputString) {\n const strLen = inputString.length;\n const view = this.valueBlock.valueHexView = new Uint8Array(strLen);\n for (let i = 0; i < strLen; i++)\n view[i] = inputString.charCodeAt(i);\n this.valueBlock.value = inputString;\n }\n}\nLocalSimpleStringBlock.NAME = \"SIMPLE STRING\";\n\nclass LocalUtf8StringValueBlock extends LocalSimpleStringBlock {\n fromBuffer(inputBuffer) {\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n try {\n this.valueBlock.value = pvtsutils.Convert.ToUtf8String(inputBuffer);\n }\n catch (ex) {\n this.warnings.push(`Error during \"decodeURIComponent\": ${ex}, using raw string`);\n this.valueBlock.value = pvtsutils.Convert.ToBinary(inputBuffer);\n }\n }\n fromString(inputString) {\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf8String(inputString));\n this.valueBlock.value = inputString;\n }\n}\nLocalUtf8StringValueBlock.NAME = \"Utf8StringValueBlock\";\n\nvar _a$i;\nclass Utf8String extends LocalUtf8StringValueBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 12;\n }\n}\n_a$i = Utf8String;\n(() => {\n typeStore.Utf8String = _a$i;\n})();\nUtf8String.NAME = \"UTF8String\";\n\nclass LocalBmpStringValueBlock extends LocalSimpleStringBlock {\n fromBuffer(inputBuffer) {\n this.valueBlock.value = pvtsutils.Convert.ToUtf16String(inputBuffer);\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n }\n fromString(inputString) {\n this.valueBlock.value = inputString;\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf16String(inputString));\n }\n}\nLocalBmpStringValueBlock.NAME = \"BmpStringValueBlock\";\n\nvar _a$h;\nclass BmpString extends LocalBmpStringValueBlock {\n constructor({ ...parameters } = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 30;\n }\n}\n_a$h = BmpString;\n(() => {\n typeStore.BmpString = _a$h;\n})();\nBmpString.NAME = \"BMPString\";\n\nclass LocalUniversalStringValueBlock extends LocalSimpleStringBlock {\n fromBuffer(inputBuffer) {\n const copyBuffer = ArrayBuffer.isView(inputBuffer) ? inputBuffer.slice().buffer : inputBuffer.slice(0);\n const valueView = new Uint8Array(copyBuffer);\n for (let i = 0; i < valueView.length; i += 4) {\n valueView[i] = valueView[i + 3];\n valueView[i + 1] = valueView[i + 2];\n valueView[i + 2] = 0x00;\n valueView[i + 3] = 0x00;\n }\n this.valueBlock.value = String.fromCharCode.apply(null, new Uint32Array(copyBuffer));\n }\n fromString(inputString) {\n const strLength = inputString.length;\n const valueHexView = this.valueBlock.valueHexView = new Uint8Array(strLength * 4);\n for (let i = 0; i < strLength; i++) {\n const codeBuf = pvutils.utilToBase(inputString.charCodeAt(i), 8);\n const codeView = new Uint8Array(codeBuf);\n if (codeView.length > 4)\n continue;\n const dif = 4 - codeView.length;\n for (let j = (codeView.length - 1); j >= 0; j--)\n valueHexView[i * 4 + j + dif] = codeView[j];\n }\n this.valueBlock.value = inputString;\n }\n}\nLocalUniversalStringValueBlock.NAME = \"UniversalStringValueBlock\";\n\nvar _a$g;\nclass UniversalString extends LocalUniversalStringValueBlock {\n constructor({ ...parameters } = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 28;\n }\n}\n_a$g = UniversalString;\n(() => {\n typeStore.UniversalString = _a$g;\n})();\nUniversalString.NAME = \"UniversalString\";\n\nvar _a$f;\nclass NumericString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 18;\n }\n}\n_a$f = NumericString;\n(() => {\n typeStore.NumericString = _a$f;\n})();\nNumericString.NAME = \"NumericString\";\n\nvar _a$e;\nclass PrintableString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 19;\n }\n}\n_a$e = PrintableString;\n(() => {\n typeStore.PrintableString = _a$e;\n})();\nPrintableString.NAME = \"PrintableString\";\n\nvar _a$d;\nclass TeletexString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 20;\n }\n}\n_a$d = TeletexString;\n(() => {\n typeStore.TeletexString = _a$d;\n})();\nTeletexString.NAME = \"TeletexString\";\n\nvar _a$c;\nclass VideotexString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 21;\n }\n}\n_a$c = VideotexString;\n(() => {\n typeStore.VideotexString = _a$c;\n})();\nVideotexString.NAME = \"VideotexString\";\n\nvar _a$b;\nclass IA5String extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 22;\n }\n}\n_a$b = IA5String;\n(() => {\n typeStore.IA5String = _a$b;\n})();\nIA5String.NAME = \"IA5String\";\n\nvar _a$a;\nclass GraphicString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 25;\n }\n}\n_a$a = GraphicString;\n(() => {\n typeStore.GraphicString = _a$a;\n})();\nGraphicString.NAME = \"GraphicString\";\n\nvar _a$9;\nclass VisibleString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 26;\n }\n}\n_a$9 = VisibleString;\n(() => {\n typeStore.VisibleString = _a$9;\n})();\nVisibleString.NAME = \"VisibleString\";\n\nvar _a$8;\nclass GeneralString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 27;\n }\n}\n_a$8 = GeneralString;\n(() => {\n typeStore.GeneralString = _a$8;\n})();\nGeneralString.NAME = \"GeneralString\";\n\nvar _a$7;\nclass CharacterString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 29;\n }\n}\n_a$7 = CharacterString;\n(() => {\n typeStore.CharacterString = _a$7;\n})();\nCharacterString.NAME = \"CharacterString\";\n\nvar _a$6;\nclass UTCTime extends VisibleString {\n constructor({ value, valueDate, ...parameters } = {}) {\n super(parameters);\n this.year = 0;\n this.month = 0;\n this.day = 0;\n this.hour = 0;\n this.minute = 0;\n this.second = 0;\n if (value) {\n this.fromString(value);\n this.valueBlock.valueHexView = new Uint8Array(value.length);\n for (let i = 0; i < value.length; i++)\n this.valueBlock.valueHexView[i] = value.charCodeAt(i);\n }\n if (valueDate) {\n this.fromDate(valueDate);\n this.valueBlock.valueHexView = new Uint8Array(this.toBuffer());\n }\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 23;\n }\n fromBuffer(inputBuffer) {\n this.fromString(String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer)));\n }\n toBuffer() {\n const str = this.toString();\n const buffer = new ArrayBuffer(str.length);\n const view = new Uint8Array(buffer);\n for (let i = 0; i < str.length; i++)\n view[i] = str.charCodeAt(i);\n return buffer;\n }\n fromDate(inputDate) {\n this.year = inputDate.getUTCFullYear();\n this.month = inputDate.getUTCMonth() + 1;\n this.day = inputDate.getUTCDate();\n this.hour = inputDate.getUTCHours();\n this.minute = inputDate.getUTCMinutes();\n this.second = inputDate.getUTCSeconds();\n }\n toDate() {\n return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second)));\n }\n fromString(inputString) {\n const parser = /(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})Z/ig;\n const parserArray = parser.exec(inputString);\n if (parserArray === null) {\n this.error = \"Wrong input string for conversion\";\n return;\n }\n const year = parseInt(parserArray[1], 10);\n if (year >= 50)\n this.year = 1900 + year;\n else\n this.year = 2000 + year;\n this.month = parseInt(parserArray[2], 10);\n this.day = parseInt(parserArray[3], 10);\n this.hour = parseInt(parserArray[4], 10);\n this.minute = parseInt(parserArray[5], 10);\n this.second = parseInt(parserArray[6], 10);\n }\n toString(encoding = \"iso\") {\n if (encoding === \"iso\") {\n const outputArray = new Array(7);\n outputArray[0] = pvutils.padNumber(((this.year < 2000) ? (this.year - 1900) : (this.year - 2000)), 2);\n outputArray[1] = pvutils.padNumber(this.month, 2);\n outputArray[2] = pvutils.padNumber(this.day, 2);\n outputArray[3] = pvutils.padNumber(this.hour, 2);\n outputArray[4] = pvutils.padNumber(this.minute, 2);\n outputArray[5] = pvutils.padNumber(this.second, 2);\n outputArray[6] = \"Z\";\n return outputArray.join(\"\");\n }\n return super.toString(encoding);\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.toDate().toISOString()}`;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n year: this.year,\n month: this.month,\n day: this.day,\n hour: this.hour,\n minute: this.minute,\n second: this.second,\n };\n }\n}\n_a$6 = UTCTime;\n(() => {\n typeStore.UTCTime = _a$6;\n})();\nUTCTime.NAME = \"UTCTime\";\n\nvar _a$5;\nclass GeneralizedTime extends UTCTime {\n constructor(parameters = {}) {\n var _b;\n super(parameters);\n (_b = this.millisecond) !== null && _b !== void 0 ? _b : (this.millisecond = 0);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 24;\n }\n fromDate(inputDate) {\n super.fromDate(inputDate);\n this.millisecond = inputDate.getUTCMilliseconds();\n }\n toDate() {\n const utcDate = Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, this.millisecond);\n return (new Date(utcDate));\n }\n fromString(inputString) {\n let isUTC = false;\n let timeString = \"\";\n let dateTimeString = \"\";\n let fractionPart = 0;\n let parser;\n let hourDifference = 0;\n let minuteDifference = 0;\n if (inputString[inputString.length - 1] === \"Z\") {\n timeString = inputString.substring(0, inputString.length - 1);\n isUTC = true;\n }\n else {\n const number = new Number(inputString[inputString.length - 1]);\n if (isNaN(number.valueOf()))\n throw new Error(\"Wrong input string for conversion\");\n timeString = inputString;\n }\n if (isUTC) {\n if (timeString.indexOf(\"+\") !== -1)\n throw new Error(\"Wrong input string for conversion\");\n if (timeString.indexOf(\"-\") !== -1)\n throw new Error(\"Wrong input string for conversion\");\n }\n else {\n let multiplier = 1;\n let differencePosition = timeString.indexOf(\"+\");\n let differenceString = \"\";\n if (differencePosition === -1) {\n differencePosition = timeString.indexOf(\"-\");\n multiplier = -1;\n }\n if (differencePosition !== -1) {\n differenceString = timeString.substring(differencePosition + 1);\n timeString = timeString.substring(0, differencePosition);\n if ((differenceString.length !== 2) && (differenceString.length !== 4))\n throw new Error(\"Wrong input string for conversion\");\n let number = parseInt(differenceString.substring(0, 2), 10);\n if (isNaN(number.valueOf()))\n throw new Error(\"Wrong input string for conversion\");\n hourDifference = multiplier * number;\n if (differenceString.length === 4) {\n number = parseInt(differenceString.substring(2, 4), 10);\n if (isNaN(number.valueOf()))\n throw new Error(\"Wrong input string for conversion\");\n minuteDifference = multiplier * number;\n }\n }\n }\n let fractionPointPosition = timeString.indexOf(\".\");\n if (fractionPointPosition === -1)\n fractionPointPosition = timeString.indexOf(\",\");\n if (fractionPointPosition !== -1) {\n const fractionPartCheck = new Number(`0${timeString.substring(fractionPointPosition)}`);\n if (isNaN(fractionPartCheck.valueOf()))\n throw new Error(\"Wrong input string for conversion\");\n fractionPart = fractionPartCheck.valueOf();\n dateTimeString = timeString.substring(0, fractionPointPosition);\n }\n else\n dateTimeString = timeString;\n switch (true) {\n case (dateTimeString.length === 8):\n parser = /(\\d{4})(\\d{2})(\\d{2})/ig;\n if (fractionPointPosition !== -1)\n throw new Error(\"Wrong input string for conversion\");\n break;\n case (dateTimeString.length === 10):\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})/ig;\n if (fractionPointPosition !== -1) {\n let fractionResult = 60 * fractionPart;\n this.minute = Math.floor(fractionResult);\n fractionResult = 60 * (fractionResult - this.minute);\n this.second = Math.floor(fractionResult);\n fractionResult = 1000 * (fractionResult - this.second);\n this.millisecond = Math.floor(fractionResult);\n }\n break;\n case (dateTimeString.length === 12):\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\n if (fractionPointPosition !== -1) {\n let fractionResult = 60 * fractionPart;\n this.second = Math.floor(fractionResult);\n fractionResult = 1000 * (fractionResult - this.second);\n this.millisecond = Math.floor(fractionResult);\n }\n break;\n case (dateTimeString.length === 14):\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\n if (fractionPointPosition !== -1) {\n const fractionResult = 1000 * fractionPart;\n this.millisecond = Math.floor(fractionResult);\n }\n break;\n default:\n throw new Error(\"Wrong input string for conversion\");\n }\n const parserArray = parser.exec(dateTimeString);\n if (parserArray === null)\n throw new Error(\"Wrong input string for conversion\");\n for (let j = 1; j < parserArray.length; j++) {\n switch (j) {\n case 1:\n this.year = parseInt(parserArray[j], 10);\n break;\n case 2:\n this.month = parseInt(parserArray[j], 10);\n break;\n case 3:\n this.day = parseInt(parserArray[j], 10);\n break;\n case 4:\n this.hour = parseInt(parserArray[j], 10) + hourDifference;\n break;\n case 5:\n this.minute = parseInt(parserArray[j], 10) + minuteDifference;\n break;\n case 6:\n this.second = parseInt(parserArray[j], 10);\n break;\n default:\n throw new Error(\"Wrong input string for conversion\");\n }\n }\n if (isUTC === false) {\n const tempDate = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n this.year = tempDate.getUTCFullYear();\n this.month = tempDate.getUTCMonth();\n this.day = tempDate.getUTCDay();\n this.hour = tempDate.getUTCHours();\n this.minute = tempDate.getUTCMinutes();\n this.second = tempDate.getUTCSeconds();\n this.millisecond = tempDate.getUTCMilliseconds();\n }\n }\n toString(encoding = \"iso\") {\n if (encoding === \"iso\") {\n const outputArray = [];\n outputArray.push(pvutils.padNumber(this.year, 4));\n outputArray.push(pvutils.padNumber(this.month, 2));\n outputArray.push(pvutils.padNumber(this.day, 2));\n outputArray.push(pvutils.padNumber(this.hour, 2));\n outputArray.push(pvutils.padNumber(this.minute, 2));\n outputArray.push(pvutils.padNumber(this.second, 2));\n if (this.millisecond !== 0) {\n outputArray.push(\".\");\n outputArray.push(pvutils.padNumber(this.millisecond, 3));\n }\n outputArray.push(\"Z\");\n return outputArray.join(\"\");\n }\n return super.toString(encoding);\n }\n toJSON() {\n return {\n ...super.toJSON(),\n millisecond: this.millisecond,\n };\n }\n}\n_a$5 = GeneralizedTime;\n(() => {\n typeStore.GeneralizedTime = _a$5;\n})();\nGeneralizedTime.NAME = \"GeneralizedTime\";\n\nvar _a$4;\nclass DATE extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 31;\n }\n}\n_a$4 = DATE;\n(() => {\n typeStore.DATE = _a$4;\n})();\nDATE.NAME = \"DATE\";\n\nvar _a$3;\nclass TimeOfDay extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 32;\n }\n}\n_a$3 = TimeOfDay;\n(() => {\n typeStore.TimeOfDay = _a$3;\n})();\nTimeOfDay.NAME = \"TimeOfDay\";\n\nvar _a$2;\nclass DateTime extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 33;\n }\n}\n_a$2 = DateTime;\n(() => {\n typeStore.DateTime = _a$2;\n})();\nDateTime.NAME = \"DateTime\";\n\nvar _a$1;\nclass Duration extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 34;\n }\n}\n_a$1 = Duration;\n(() => {\n typeStore.Duration = _a$1;\n})();\nDuration.NAME = \"Duration\";\n\nvar _a;\nclass TIME extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 14;\n }\n}\n_a = TIME;\n(() => {\n typeStore.TIME = _a;\n})();\nTIME.NAME = \"TIME\";\n\nclass Any {\n constructor({ name = EMPTY_STRING, optional = false } = {}) {\n this.name = name;\n this.optional = optional;\n }\n}\n\nclass Choice extends Any {\n constructor({ value = [], ...parameters } = {}) {\n super(parameters);\n this.value = value;\n }\n}\n\nclass Repeated extends Any {\n constructor({ value = new Any(), local = false, ...parameters } = {}) {\n super(parameters);\n this.value = value;\n this.local = local;\n }\n}\n\nclass RawData {\n get data() {\n return this.dataView.slice().buffer;\n }\n set data(value) {\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(value);\n }\n constructor({ data = EMPTY_VIEW } = {}) {\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(data);\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const endLength = inputOffset + inputLength;\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).subarray(inputOffset, endLength);\n return endLength;\n }\n toBER(_sizeOnly) {\n return this.dataView.slice().buffer;\n }\n}\n\nfunction compareSchema(root, inputData, inputSchema) {\n if (inputSchema instanceof Choice) {\n for (const element of inputSchema.value) {\n const result = compareSchema(root, inputData, element);\n if (result.verified) {\n return {\n verified: true,\n result: root,\n };\n }\n }\n {\n const _result = {\n verified: false,\n result: { error: \"Wrong values for Choice type\" },\n };\n if (inputSchema.hasOwnProperty(NAME))\n _result.name = inputSchema.name;\n return _result;\n }\n }\n if (inputSchema instanceof Any) {\n if (inputSchema.hasOwnProperty(NAME))\n root[inputSchema.name] = inputData;\n return {\n verified: true,\n result: root,\n };\n }\n if ((root instanceof Object) === false) {\n return {\n verified: false,\n result: { error: \"Wrong root object\" },\n };\n }\n if ((inputData instanceof Object) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 data\" },\n };\n }\n if ((inputSchema instanceof Object) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if ((ID_BLOCK in inputSchema) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if ((FROM_BER in inputSchema.idBlock) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if ((TO_BER in inputSchema.idBlock) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n const encodedId = inputSchema.idBlock.toBER(false);\n if (encodedId.byteLength === 0) {\n return {\n verified: false,\n result: { error: \"Error encoding idBlock for ASN.1 schema\" },\n };\n }\n const decodedOffset = inputSchema.idBlock.fromBER(encodedId, 0, encodedId.byteLength);\n if (decodedOffset === -1) {\n return {\n verified: false,\n result: { error: \"Error decoding idBlock for ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.hasOwnProperty(TAG_CLASS) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.tagClass !== inputData.idBlock.tagClass) {\n return {\n verified: false,\n result: root,\n };\n }\n if (inputSchema.idBlock.hasOwnProperty(TAG_NUMBER) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.tagNumber !== inputData.idBlock.tagNumber) {\n return {\n verified: false,\n result: root,\n };\n }\n if (inputSchema.idBlock.hasOwnProperty(IS_CONSTRUCTED) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.isConstructed !== inputData.idBlock.isConstructed) {\n return {\n verified: false,\n result: root,\n };\n }\n if (!(IS_HEX_ONLY in inputSchema.idBlock)) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.isHexOnly !== inputData.idBlock.isHexOnly) {\n return {\n verified: false,\n result: root,\n };\n }\n if (inputSchema.idBlock.isHexOnly) {\n if ((VALUE_HEX_VIEW in inputSchema.idBlock) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n const schemaView = inputSchema.idBlock.valueHexView;\n const asn1View = inputData.idBlock.valueHexView;\n if (schemaView.length !== asn1View.length) {\n return {\n verified: false,\n result: root,\n };\n }\n for (let i = 0; i < schemaView.length; i++) {\n if (schemaView[i] !== asn1View[1]) {\n return {\n verified: false,\n result: root,\n };\n }\n }\n }\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name)\n root[inputSchema.name] = inputData;\n }\n if (inputSchema instanceof typeStore.Constructed) {\n let admission = 0;\n let result = {\n verified: false,\n result: { error: \"Unknown error\" },\n };\n let maxLength = inputSchema.valueBlock.value.length;\n if (maxLength > 0) {\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\n maxLength = inputData.valueBlock.value.length;\n }\n }\n if (maxLength === 0) {\n return {\n verified: true,\n result: root,\n };\n }\n if ((inputData.valueBlock.value.length === 0)\n && (inputSchema.valueBlock.value.length !== 0)) {\n let _optional = true;\n for (let i = 0; i < inputSchema.valueBlock.value.length; i++)\n _optional = _optional && (inputSchema.valueBlock.value[i].optional || false);\n if (_optional) {\n return {\n verified: true,\n result: root,\n };\n }\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name)\n delete root[inputSchema.name];\n }\n root.error = \"Inconsistent object length\";\n return {\n verified: false,\n result: root,\n };\n }\n for (let i = 0; i < maxLength; i++) {\n if ((i - admission) >= inputData.valueBlock.value.length) {\n if (inputSchema.valueBlock.value[i].optional === false) {\n const _result = {\n verified: false,\n result: root,\n };\n root.error = \"Inconsistent length between ASN.1 data and schema\";\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name) {\n delete root[inputSchema.name];\n _result.name = inputSchema.name;\n }\n }\n return _result;\n }\n }\n else {\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\n result = compareSchema(root, inputData.valueBlock.value[i], inputSchema.valueBlock.value[0].value);\n if (result.verified === false) {\n if (inputSchema.valueBlock.value[0].optional)\n admission++;\n else {\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name)\n delete root[inputSchema.name];\n }\n return result;\n }\n }\n if ((NAME in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].name.length > 0)) {\n let arrayRoot = {};\n if ((LOCAL in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].local))\n arrayRoot = inputData;\n else\n arrayRoot = root;\n if (typeof arrayRoot[inputSchema.valueBlock.value[0].name] === \"undefined\")\n arrayRoot[inputSchema.valueBlock.value[0].name] = [];\n arrayRoot[inputSchema.valueBlock.value[0].name].push(inputData.valueBlock.value[i]);\n }\n }\n else {\n result = compareSchema(root, inputData.valueBlock.value[i - admission], inputSchema.valueBlock.value[i]);\n if (result.verified === false) {\n if (inputSchema.valueBlock.value[i].optional)\n admission++;\n else {\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name)\n delete root[inputSchema.name];\n }\n return result;\n }\n }\n }\n }\n }\n if (result.verified === false) {\n const _result = {\n verified: false,\n result: root,\n };\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name) {\n delete root[inputSchema.name];\n _result.name = inputSchema.name;\n }\n }\n return _result;\n }\n return {\n verified: true,\n result: root,\n };\n }\n if (inputSchema.primitiveSchema\n && (VALUE_HEX_VIEW in inputData.valueBlock)) {\n const asn1 = localFromBER(inputData.valueBlock.valueHexView);\n if (asn1.offset === -1) {\n const _result = {\n verified: false,\n result: asn1.result,\n };\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name) {\n delete root[inputSchema.name];\n _result.name = inputSchema.name;\n }\n }\n return _result;\n }\n return compareSchema(root, asn1.result, inputSchema.primitiveSchema);\n }\n return {\n verified: true,\n result: root,\n };\n}\nfunction verifySchema(inputBuffer, inputSchema) {\n if ((inputSchema instanceof Object) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema type\" },\n };\n }\n const asn1 = localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\n if (asn1.offset === -1) {\n return {\n verified: false,\n result: asn1.result,\n };\n }\n return compareSchema(asn1.result, asn1.result, inputSchema);\n}\n\nexport { Any, BaseBlock, BaseStringBlock, BitString, BmpString, Boolean, CharacterString, Choice, Constructed, DATE, DEFAULT_MAX_CONTENT_LENGTH, DEFAULT_MAX_DEPTH, DEFAULT_MAX_NODES, DateTime, Duration, EndOfContent, Enumerated, GeneralString, GeneralizedTime, GraphicString, HexBlock, IA5String, Integer, Null, NumericString, ObjectIdentifier, OctetString, Primitive, PrintableString, RawData, RelativeObjectIdentifier, Repeated, Sequence, Set, TIME, TeletexString, TimeOfDay, UTCTime, UniversalString, Utf8String, ValueBlock, VideotexString, ViewWriter, VisibleString, compareSchema, fromBER, verifySchema };\n","export var AsnTypeTypes;\n(function (AsnTypeTypes) {\n AsnTypeTypes[AsnTypeTypes[\"Sequence\"] = 0] = \"Sequence\";\n AsnTypeTypes[AsnTypeTypes[\"Set\"] = 1] = \"Set\";\n AsnTypeTypes[AsnTypeTypes[\"Choice\"] = 2] = \"Choice\";\n})(AsnTypeTypes || (AsnTypeTypes = {}));\nexport var AsnPropTypes;\n(function (AsnPropTypes) {\n AsnPropTypes[AsnPropTypes[\"Any\"] = 1] = \"Any\";\n AsnPropTypes[AsnPropTypes[\"Boolean\"] = 2] = \"Boolean\";\n AsnPropTypes[AsnPropTypes[\"OctetString\"] = 3] = \"OctetString\";\n AsnPropTypes[AsnPropTypes[\"BitString\"] = 4] = \"BitString\";\n AsnPropTypes[AsnPropTypes[\"Integer\"] = 5] = \"Integer\";\n AsnPropTypes[AsnPropTypes[\"Enumerated\"] = 6] = \"Enumerated\";\n AsnPropTypes[AsnPropTypes[\"ObjectIdentifier\"] = 7] = \"ObjectIdentifier\";\n AsnPropTypes[AsnPropTypes[\"Utf8String\"] = 8] = \"Utf8String\";\n AsnPropTypes[AsnPropTypes[\"BmpString\"] = 9] = \"BmpString\";\n AsnPropTypes[AsnPropTypes[\"UniversalString\"] = 10] = \"UniversalString\";\n AsnPropTypes[AsnPropTypes[\"NumericString\"] = 11] = \"NumericString\";\n AsnPropTypes[AsnPropTypes[\"PrintableString\"] = 12] = \"PrintableString\";\n AsnPropTypes[AsnPropTypes[\"TeletexString\"] = 13] = \"TeletexString\";\n AsnPropTypes[AsnPropTypes[\"VideotexString\"] = 14] = \"VideotexString\";\n AsnPropTypes[AsnPropTypes[\"IA5String\"] = 15] = \"IA5String\";\n AsnPropTypes[AsnPropTypes[\"GraphicString\"] = 16] = \"GraphicString\";\n AsnPropTypes[AsnPropTypes[\"VisibleString\"] = 17] = \"VisibleString\";\n AsnPropTypes[AsnPropTypes[\"GeneralString\"] = 18] = \"GeneralString\";\n AsnPropTypes[AsnPropTypes[\"CharacterString\"] = 19] = \"CharacterString\";\n AsnPropTypes[AsnPropTypes[\"UTCTime\"] = 20] = \"UTCTime\";\n AsnPropTypes[AsnPropTypes[\"GeneralizedTime\"] = 21] = \"GeneralizedTime\";\n AsnPropTypes[AsnPropTypes[\"DATE\"] = 22] = \"DATE\";\n AsnPropTypes[AsnPropTypes[\"TimeOfDay\"] = 23] = \"TimeOfDay\";\n AsnPropTypes[AsnPropTypes[\"DateTime\"] = 24] = \"DateTime\";\n AsnPropTypes[AsnPropTypes[\"Duration\"] = 25] = \"Duration\";\n AsnPropTypes[AsnPropTypes[\"TIME\"] = 26] = \"TIME\";\n AsnPropTypes[AsnPropTypes[\"Null\"] = 27] = \"Null\";\n})(AsnPropTypes || (AsnPropTypes = {}));\n","import * as asn1js from \"asn1js\";\nimport { BufferSourceConverter } from \"pvtsutils\";\nexport class BitString {\n constructor(params, unusedBits = 0) {\n this.unusedBits = 0;\n this.value = new ArrayBuffer(0);\n if (params) {\n if (typeof params === \"number\") {\n this.fromNumber(params);\n }\n else if (BufferSourceConverter.isBufferSource(params)) {\n this.unusedBits = unusedBits;\n this.value = BufferSourceConverter.toArrayBuffer(params);\n }\n else {\n throw TypeError(\"Unsupported type of 'params' argument for BitString\");\n }\n }\n }\n fromASN(asn) {\n if (!(asn instanceof asn1js.BitString)) {\n throw new TypeError(\"Argument 'asn' is not instance of ASN.1 BitString\");\n }\n this.unusedBits = asn.valueBlock.unusedBits;\n this.value = asn.valueBlock.valueHex;\n return this;\n }\n toASN() {\n return new asn1js.BitString({ unusedBits: this.unusedBits, valueHex: this.value });\n }\n toSchema(name) {\n return new asn1js.BitString({ name });\n }\n toNumber() {\n let res = \"\";\n const uintArray = new Uint8Array(this.value);\n for (const octet of uintArray) {\n res += octet.toString(2).padStart(8, \"0\");\n }\n res = res.split(\"\").reverse().join(\"\");\n if (this.unusedBits) {\n res = res.slice(this.unusedBits).padStart(this.unusedBits, \"0\");\n }\n return parseInt(res, 2);\n }\n fromNumber(value) {\n let bits = value.toString(2);\n const octetSize = (bits.length + 7) >> 3;\n this.unusedBits = (octetSize << 3) - bits.length;\n const octets = new Uint8Array(octetSize);\n bits = bits\n .padStart(octetSize << 3, \"0\")\n .split(\"\")\n .reverse()\n .join(\"\");\n let index = 0;\n while (index < octetSize) {\n octets[index] = parseInt(bits.slice(index << 3, (index << 3) + 8), 2);\n index++;\n }\n this.value = octets.buffer;\n }\n}\n","import * as asn1js from \"asn1js\";\nimport { BufferSourceConverter } from \"pvtsutils\";\nexport class OctetString {\n get byteLength() {\n return this.buffer.byteLength;\n }\n get byteOffset() {\n return 0;\n }\n constructor(param) {\n if (typeof param === \"number\") {\n this.buffer = new ArrayBuffer(param);\n }\n else {\n if (BufferSourceConverter.isBufferSource(param)) {\n this.buffer = BufferSourceConverter.toArrayBuffer(param);\n }\n else if (Array.isArray(param)) {\n this.buffer = new Uint8Array(param);\n }\n else {\n this.buffer = new ArrayBuffer(0);\n }\n }\n }\n fromASN(asn) {\n if (!(asn instanceof asn1js.OctetString)) {\n throw new TypeError(\"Argument 'asn' is not instance of ASN.1 OctetString\");\n }\n this.buffer = asn.valueBlock.valueHex;\n return this;\n }\n toASN() {\n return new asn1js.OctetString({ valueHex: this.buffer });\n }\n toSchema(name) {\n return new asn1js.OctetString({ name });\n }\n}\n","export * from \"./bit_string\";\nexport * from \"./octet_string\";\n","import * as asn1js from \"asn1js\";\nimport { AsnPropTypes } from \"./enums\";\nimport { OctetString } from \"./types/index\";\nexport const AsnAnyConverter = {\n fromASN: (value) => value instanceof asn1js.Null ? null : value.valueBeforeDecodeView,\n toASN: (value) => {\n if (value === null) {\n return new asn1js.Null();\n }\n const schema = asn1js.fromBER(value);\n if (schema.result.error) {\n throw new Error(schema.result.error);\n }\n return schema.result;\n },\n};\nexport const AsnIntegerConverter = {\n fromASN: (value) => value.valueBlock.valueHexView.byteLength >= 4\n ? value.valueBlock.toString()\n : value.valueBlock.valueDec,\n toASN: (value) => new asn1js.Integer({ value: +value }),\n};\nexport const AsnEnumeratedConverter = {\n fromASN: (value) => value.valueBlock.valueDec,\n toASN: (value) => new asn1js.Enumerated({ value }),\n};\nexport const AsnIntegerArrayBufferConverter = {\n fromASN: (value) => value.valueBlock.valueHexView,\n toASN: (value) => new asn1js.Integer({ valueHex: value }),\n};\nexport const AsnIntegerBigIntConverter = {\n fromASN: (value) => value.toBigInt(),\n toASN: (value) => asn1js.Integer.fromBigInt(value),\n};\nexport const AsnBitStringConverter = {\n fromASN: (value) => value.valueBlock.valueHexView,\n toASN: (value) => new asn1js.BitString({ valueHex: value }),\n};\nexport const AsnObjectIdentifierConverter = {\n fromASN: (value) => value.valueBlock.toString(),\n toASN: (value) => new asn1js.ObjectIdentifier({ value }),\n};\nexport const AsnBooleanConverter = {\n fromASN: (value) => value.valueBlock.value,\n toASN: (value) => new asn1js.Boolean({ value }),\n};\nexport const AsnOctetStringConverter = {\n fromASN: (value) => value.valueBlock.valueHexView,\n toASN: (value) => new asn1js.OctetString({ valueHex: value }),\n};\nexport const AsnConstructedOctetStringConverter = {\n fromASN: (value) => new OctetString(value.getValue()),\n toASN: (value) => value.toASN(),\n};\nfunction createStringConverter(Asn1Type) {\n return {\n fromASN: (value) => value.valueBlock.value,\n toASN: (value) => new Asn1Type({ value }),\n };\n}\nexport const AsnUtf8StringConverter = createStringConverter(asn1js.Utf8String);\nexport const AsnBmpStringConverter = createStringConverter(asn1js.BmpString);\nexport const AsnUniversalStringConverter = createStringConverter(asn1js.UniversalString);\nexport const AsnNumericStringConverter = createStringConverter(asn1js.NumericString);\nexport const AsnPrintableStringConverter = createStringConverter(asn1js.PrintableString);\nexport const AsnTeletexStringConverter = createStringConverter(asn1js.TeletexString);\nexport const AsnVideotexStringConverter = createStringConverter(asn1js.VideotexString);\nexport const AsnIA5StringConverter = createStringConverter(asn1js.IA5String);\nexport const AsnGraphicStringConverter = createStringConverter(asn1js.GraphicString);\nexport const AsnVisibleStringConverter = createStringConverter(asn1js.VisibleString);\nexport const AsnGeneralStringConverter = createStringConverter(asn1js.GeneralString);\nexport const AsnCharacterStringConverter = createStringConverter(asn1js.CharacterString);\nexport const AsnUTCTimeConverter = {\n fromASN: (value) => value.toDate(),\n toASN: (value) => new asn1js.UTCTime({ valueDate: value }),\n};\nexport const AsnGeneralizedTimeConverter = {\n fromASN: (value) => value.toDate(),\n toASN: (value) => new asn1js.GeneralizedTime({ valueDate: value }),\n};\nexport const AsnNullConverter = {\n fromASN: () => null,\n toASN: () => {\n return new asn1js.Null();\n },\n};\nexport function defaultConverter(type) {\n switch (type) {\n case AsnPropTypes.Any:\n return AsnAnyConverter;\n case AsnPropTypes.BitString:\n return AsnBitStringConverter;\n case AsnPropTypes.BmpString:\n return AsnBmpStringConverter;\n case AsnPropTypes.Boolean:\n return AsnBooleanConverter;\n case AsnPropTypes.CharacterString:\n return AsnCharacterStringConverter;\n case AsnPropTypes.Enumerated:\n return AsnEnumeratedConverter;\n case AsnPropTypes.GeneralString:\n return AsnGeneralStringConverter;\n case AsnPropTypes.GeneralizedTime:\n return AsnGeneralizedTimeConverter;\n case AsnPropTypes.GraphicString:\n return AsnGraphicStringConverter;\n case AsnPropTypes.IA5String:\n return AsnIA5StringConverter;\n case AsnPropTypes.Integer:\n return AsnIntegerConverter;\n case AsnPropTypes.Null:\n return AsnNullConverter;\n case AsnPropTypes.NumericString:\n return AsnNumericStringConverter;\n case AsnPropTypes.ObjectIdentifier:\n return AsnObjectIdentifierConverter;\n case AsnPropTypes.OctetString:\n return AsnOctetStringConverter;\n case AsnPropTypes.PrintableString:\n return AsnPrintableStringConverter;\n case AsnPropTypes.TeletexString:\n return AsnTeletexStringConverter;\n case AsnPropTypes.UTCTime:\n return AsnUTCTimeConverter;\n case AsnPropTypes.UniversalString:\n return AsnUniversalStringConverter;\n case AsnPropTypes.Utf8String:\n return AsnUtf8StringConverter;\n case AsnPropTypes.VideotexString:\n return AsnVideotexStringConverter;\n case AsnPropTypes.VisibleString:\n return AsnVisibleStringConverter;\n default:\n return null;\n }\n}\n","export function isConvertible(target) {\n if (typeof target === \"function\" && target.prototype) {\n if (target.prototype.toASN && target.prototype.fromASN) {\n return true;\n }\n else {\n return isConvertible(target.prototype);\n }\n }\n else {\n return !!(target && typeof target === \"object\" && \"toASN\" in target && \"fromASN\" in target);\n }\n}\nexport function isTypeOfArray(target) {\n var _a;\n if (target) {\n const proto = Object.getPrototypeOf(target);\n if (((_a = proto === null || proto === void 0 ? void 0 : proto.prototype) === null || _a === void 0 ? void 0 : _a.constructor) === Array) {\n return true;\n }\n return isTypeOfArray(proto);\n }\n return false;\n}\nexport function isArrayEqual(bytes1, bytes2) {\n if (!(bytes1 && bytes2)) {\n return false;\n }\n if (bytes1.byteLength !== bytes2.byteLength) {\n return false;\n }\n const b1 = new Uint8Array(bytes1);\n const b2 = new Uint8Array(bytes2);\n for (let i = 0; i < bytes1.byteLength; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\n","import * as asn1js from \"asn1js\";\nimport { AsnPropTypes, AsnTypeTypes } from \"./enums\";\nimport { isConvertible } from \"./helper\";\nexport class AsnSchemaStorage {\n constructor() {\n this.items = new WeakMap();\n }\n has(target) {\n return this.items.has(target);\n }\n get(target, checkSchema = false) {\n const schema = this.items.get(target);\n if (!schema) {\n throw new Error(`Cannot get schema for '${target.prototype.constructor.name}' target`);\n }\n if (checkSchema && !schema.schema) {\n throw new Error(`Schema '${target.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);\n }\n return schema;\n }\n cache(target) {\n const schema = this.get(target);\n if (!schema.schema) {\n schema.schema = this.create(target, true);\n }\n }\n createDefault(target) {\n const schema = { type: AsnTypeTypes.Sequence, items: {} };\n const parentSchema = this.findParentSchema(target);\n if (parentSchema) {\n Object.assign(schema, parentSchema);\n schema.items = Object.assign({}, schema.items, parentSchema.items);\n }\n return schema;\n }\n create(target, useNames) {\n const schema = this.items.get(target) || this.createDefault(target);\n const asn1Value = [];\n for (const key in schema.items) {\n const item = schema.items[key];\n const name = useNames ? key : \"\";\n let asn1Item;\n if (typeof item.type === \"number\") {\n const Asn1TypeName = AsnPropTypes[item.type];\n const Asn1Type = asn1js[Asn1TypeName];\n if (!Asn1Type) {\n throw new Error(`Cannot get ASN1 class by name '${Asn1TypeName}'`);\n }\n asn1Item = new Asn1Type({ name });\n }\n else if (isConvertible(item.type)) {\n const instance = new item.type();\n asn1Item = instance.toSchema(name);\n }\n else if (item.optional) {\n const itemSchema = this.get(item.type);\n if (itemSchema.type === AsnTypeTypes.Choice) {\n asn1Item = new asn1js.Any({ name });\n }\n else {\n asn1Item = this.create(item.type, false);\n asn1Item.name = name;\n }\n }\n else {\n asn1Item = new asn1js.Any({ name });\n }\n const optional = !!item.optional || item.defaultValue !== undefined;\n if (item.repeated) {\n asn1Item.name = \"\";\n const Container = item.repeated === \"set\" ? asn1js.Set : asn1js.Sequence;\n asn1Item = new Container({\n name: \"\",\n value: [new asn1js.Repeated({ name, value: asn1Item })],\n });\n }\n if (item.context !== null && item.context !== undefined) {\n if (item.implicit) {\n if (typeof item.type === \"number\" || isConvertible(item.type)) {\n const Container = item.repeated ? asn1js.Constructed : asn1js.Primitive;\n asn1Value.push(new Container({ name, optional, idBlock: { tagClass: 3, tagNumber: item.context } }));\n }\n else {\n this.cache(item.type);\n const isRepeated = !!item.repeated;\n let value = !isRepeated ? this.get(item.type, true).schema : asn1Item;\n value =\n \"valueBlock\" in value\n ? value.valueBlock.value\n :\n value.value;\n asn1Value.push(new asn1js.Constructed({\n name: !isRepeated ? name : \"\",\n optional,\n idBlock: { tagClass: 3, tagNumber: item.context },\n value: value,\n }));\n }\n }\n else {\n asn1Value.push(new asn1js.Constructed({\n optional,\n idBlock: { tagClass: 3, tagNumber: item.context },\n value: [asn1Item],\n }));\n }\n }\n else {\n asn1Item.optional = optional;\n asn1Value.push(asn1Item);\n }\n }\n switch (schema.type) {\n case AsnTypeTypes.Sequence:\n return new asn1js.Sequence({ value: asn1Value, name: \"\" });\n case AsnTypeTypes.Set:\n return new asn1js.Set({ value: asn1Value, name: \"\" });\n case AsnTypeTypes.Choice:\n return new asn1js.Choice({ value: asn1Value, name: \"\" });\n default:\n throw new Error(`Unsupported ASN1 type in use`);\n }\n }\n set(target, schema) {\n this.items.set(target, schema);\n return this;\n }\n findParentSchema(target) {\n const parent = Object.getPrototypeOf(target);\n if (parent) {\n const schema = this.items.get(parent);\n return schema || this.findParentSchema(parent);\n }\n return null;\n }\n}\n","import { AsnSchemaStorage } from \"./schema\";\nexport const schemaStorage = new AsnSchemaStorage();\n","import * as converters from \"./converters\";\nimport { AsnTypeTypes } from \"./enums\";\nimport { schemaStorage } from \"./storage\";\nexport const AsnType = (options) => (target) => {\n let schema;\n if (!schemaStorage.has(target)) {\n schema = schemaStorage.createDefault(target);\n schemaStorage.set(target, schema);\n }\n else {\n schema = schemaStorage.get(target);\n }\n Object.assign(schema, options);\n};\nexport const AsnChoiceType = () => AsnType({ type: AsnTypeTypes.Choice });\nexport const AsnSetType = (options) => AsnType({ type: AsnTypeTypes.Set, ...options });\nexport const AsnSequenceType = (options) => AsnType({ type: AsnTypeTypes.Sequence, ...options });\nexport const AsnProp = (options) => (target, propertyKey) => {\n let schema;\n if (!schemaStorage.has(target.constructor)) {\n schema = schemaStorage.createDefault(target.constructor);\n schemaStorage.set(target.constructor, schema);\n }\n else {\n schema = schemaStorage.get(target.constructor);\n }\n const copyOptions = Object.assign({}, options);\n if (typeof copyOptions.type === \"number\" && !copyOptions.converter) {\n const defaultConverter = converters.defaultConverter(options.type);\n if (!defaultConverter) {\n throw new Error(`Cannot get default converter for property '${propertyKey}' of ${target.constructor.name}`);\n }\n copyOptions.converter = defaultConverter;\n }\n copyOptions.raw = options.raw;\n schema.items[propertyKey] = copyOptions;\n};\n","export class AsnSchemaValidationError extends Error {\n constructor() {\n super(...arguments);\n this.schemas = [];\n }\n}\n","export * from \"./schema_validation\";\n","import * as asn1js from \"asn1js\";\nimport { AsnPropTypes, AsnTypeTypes } from \"./enums\";\nimport * as converters from \"./converters\";\nimport { AsnSchemaValidationError } from \"./errors\";\nimport { isConvertible, isTypeOfArray } from \"./helper\";\nimport { schemaStorage } from \"./storage\";\nexport class AsnParser {\n static parse(data, target) {\n const asn1Parsed = asn1js.fromBER(data);\n if (asn1Parsed.result.error) {\n throw new Error(asn1Parsed.result.error);\n }\n const res = this.fromASN(asn1Parsed.result, target);\n return res;\n }\n static fromASN(asn1Schema, target) {\n try {\n if (isConvertible(target)) {\n const value = new target();\n return value.fromASN(asn1Schema);\n }\n const schema = schemaStorage.get(target);\n schemaStorage.cache(target);\n let targetSchema = schema.schema;\n const choiceResult = this.handleChoiceTypes(asn1Schema, schema, target, targetSchema);\n if (choiceResult === null || choiceResult === void 0 ? void 0 : choiceResult.result) {\n return choiceResult.result;\n }\n if (choiceResult === null || choiceResult === void 0 ? void 0 : choiceResult.targetSchema) {\n targetSchema = choiceResult.targetSchema;\n }\n const sequenceResult = this.handleSequenceTypes(asn1Schema, schema, target, targetSchema);\n const res = new target();\n if (isTypeOfArray(target)) {\n return this.handleArrayTypes(asn1Schema, schema, target);\n }\n this.processSchemaItems(schema, sequenceResult, res);\n return res;\n }\n catch (error) {\n if (error instanceof AsnSchemaValidationError) {\n error.schemas.push(target.name);\n }\n throw error;\n }\n }\n static handleChoiceTypes(asn1Schema, schema, target, targetSchema) {\n if (asn1Schema.constructor === asn1js.Constructed &&\n schema.type === AsnTypeTypes.Choice &&\n asn1Schema.idBlock.tagClass === 3) {\n for (const key in schema.items) {\n const schemaItem = schema.items[key];\n if (schemaItem.context === asn1Schema.idBlock.tagNumber && schemaItem.implicit) {\n if (typeof schemaItem.type === \"function\" &&\n schemaStorage.has(schemaItem.type)) {\n const fieldSchema = schemaStorage.get(schemaItem.type);\n if (fieldSchema && fieldSchema.type === AsnTypeTypes.Sequence) {\n const newSeq = new asn1js.Sequence();\n if (\"value\" in asn1Schema.valueBlock &&\n Array.isArray(asn1Schema.valueBlock.value) &&\n \"value\" in newSeq.valueBlock) {\n newSeq.valueBlock.value = asn1Schema.valueBlock.value;\n const fieldValue = this.fromASN(newSeq, schemaItem.type);\n const res = new target();\n res[key] = fieldValue;\n return { result: res };\n }\n }\n }\n }\n }\n }\n else if (asn1Schema.constructor === asn1js.Constructed &&\n schema.type !== AsnTypeTypes.Choice) {\n const newTargetSchema = new asn1js.Constructed({\n idBlock: {\n tagClass: 3,\n tagNumber: asn1Schema.idBlock.tagNumber,\n },\n value: schema.schema.valueBlock.value,\n });\n for (const key in schema.items) {\n delete asn1Schema[key];\n }\n return { targetSchema: newTargetSchema };\n }\n return null;\n }\n static handleSequenceTypes(asn1Schema, schema, target, targetSchema) {\n if (schema.type === AsnTypeTypes.Sequence) {\n const asn1ComparedSchema = asn1js.compareSchema({}, asn1Schema, targetSchema);\n if (!asn1ComparedSchema.verified) {\n throw new AsnSchemaValidationError(`Data does not match to ${target.name} ASN1 schema.${asn1ComparedSchema.result.error ? ` ${asn1ComparedSchema.result.error}` : \"\"}`);\n }\n return asn1ComparedSchema;\n }\n else {\n const asn1ComparedSchema = asn1js.compareSchema({}, asn1Schema, targetSchema);\n if (!asn1ComparedSchema.verified) {\n throw new AsnSchemaValidationError(`Data does not match to ${target.name} ASN1 schema.${asn1ComparedSchema.result.error ? ` ${asn1ComparedSchema.result.error}` : \"\"}`);\n }\n return asn1ComparedSchema;\n }\n }\n static processRepeatedField(asn1Elements, asn1Index, schemaItem) {\n let elementsToProcess = asn1Elements.slice(asn1Index);\n if (elementsToProcess.length === 1 && elementsToProcess[0].constructor.name === \"Sequence\") {\n const seq = elementsToProcess[0];\n if (seq.valueBlock && seq.valueBlock.value && Array.isArray(seq.valueBlock.value)) {\n elementsToProcess = seq.valueBlock.value;\n }\n }\n if (typeof schemaItem.type === \"number\") {\n const converter = converters.defaultConverter(schemaItem.type);\n if (!converter)\n throw new Error(`No converter for ASN.1 type ${schemaItem.type}`);\n return elementsToProcess\n .filter((el) => el && el.valueBlock)\n .map((el) => {\n try {\n return converter.fromASN(el);\n }\n catch {\n return undefined;\n }\n })\n .filter((v) => v !== undefined);\n }\n else {\n return elementsToProcess\n .filter((el) => el && el.valueBlock)\n .map((el) => {\n try {\n return this.fromASN(el, schemaItem.type);\n }\n catch {\n return undefined;\n }\n })\n .filter((v) => v !== undefined);\n }\n }\n static processPrimitiveField(asn1Element, schemaItem) {\n const converter = converters.defaultConverter(schemaItem.type);\n if (!converter)\n throw new Error(`No converter for ASN.1 type ${schemaItem.type}`);\n return converter.fromASN(asn1Element);\n }\n static isOptionalChoiceField(schemaItem) {\n return (schemaItem.optional &&\n typeof schemaItem.type === \"function\" &&\n schemaStorage.has(schemaItem.type) &&\n schemaStorage.get(schemaItem.type).type === AsnTypeTypes.Choice);\n }\n static processOptionalChoiceField(asn1Element, schemaItem) {\n try {\n const value = this.fromASN(asn1Element, schemaItem.type);\n return { processed: true, value };\n }\n catch (err) {\n if (err instanceof AsnSchemaValidationError &&\n /Wrong values for Choice type/.test(err.message)) {\n return { processed: false };\n }\n throw err;\n }\n }\n static handleArrayTypes(asn1Schema, schema, target) {\n if (!(\"value\" in asn1Schema.valueBlock && Array.isArray(asn1Schema.valueBlock.value))) {\n throw new Error(`Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.`);\n }\n const itemType = schema.itemType;\n if (typeof itemType === \"number\") {\n const converter = converters.defaultConverter(itemType);\n if (!converter) {\n throw new Error(`Cannot get default converter for array item of ${target.name} ASN1 schema`);\n }\n return target.from(asn1Schema.valueBlock.value, (element) => converter.fromASN(element));\n }\n else {\n return target.from(asn1Schema.valueBlock.value, (element) => this.fromASN(element, itemType));\n }\n }\n static processSchemaItems(schema, asn1ComparedSchema, res) {\n for (const key in schema.items) {\n const asn1SchemaValue = asn1ComparedSchema.result[key];\n if (!asn1SchemaValue) {\n continue;\n }\n const schemaItem = schema.items[key];\n const schemaItemType = schemaItem.type;\n let parsedValue;\n if (typeof schemaItemType === \"number\" || isConvertible(schemaItemType)) {\n parsedValue = this.processPrimitiveSchemaItem(asn1SchemaValue, schemaItem, schemaItemType);\n }\n else {\n parsedValue = this.processComplexSchemaItem(asn1SchemaValue, schemaItem, schemaItemType);\n }\n if (parsedValue &&\n typeof parsedValue === \"object\" &&\n \"value\" in parsedValue &&\n \"raw\" in parsedValue) {\n res[key] = parsedValue.value;\n res[`${key}Raw`] = parsedValue.raw;\n }\n else {\n res[key] = parsedValue;\n }\n }\n }\n static processPrimitiveSchemaItem(asn1SchemaValue, schemaItem, schemaItemType) {\n var _a;\n const converter = (_a = schemaItem.converter) !== null && _a !== void 0 ? _a : (isConvertible(schemaItemType)\n ? new schemaItemType()\n : null);\n if (!converter) {\n throw new Error(\"Converter is empty\");\n }\n if (schemaItem.repeated) {\n return this.processRepeatedPrimitiveItem(asn1SchemaValue, schemaItem, converter);\n }\n else {\n return this.processSinglePrimitiveItem(asn1SchemaValue, schemaItem, schemaItemType, converter);\n }\n }\n static processRepeatedPrimitiveItem(asn1SchemaValue, schemaItem, converter) {\n if (schemaItem.implicit) {\n const Container = schemaItem.repeated === \"sequence\" ? asn1js.Sequence : asn1js.Set;\n const newItem = new Container();\n newItem.valueBlock = asn1SchemaValue.valueBlock;\n const newItemAsn = asn1js.fromBER(newItem.toBER(false));\n if (newItemAsn.offset === -1) {\n throw new Error(`Cannot parse the child item. ${newItemAsn.result.error}`);\n }\n if (!(\"value\" in newItemAsn.result.valueBlock &&\n Array.isArray(newItemAsn.result.valueBlock.value))) {\n throw new Error(\"Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.\");\n }\n const value = newItemAsn.result.valueBlock.value;\n return Array.from(value, (element) => converter.fromASN(element));\n }\n else {\n return Array.from(asn1SchemaValue, (element) => converter.fromASN(element));\n }\n }\n static processSinglePrimitiveItem(asn1SchemaValue, schemaItem, schemaItemType, converter) {\n let value = asn1SchemaValue;\n if (schemaItem.implicit) {\n let newItem;\n if (isConvertible(schemaItemType)) {\n newItem = new schemaItemType().toSchema(\"\");\n }\n else {\n const Asn1TypeName = AsnPropTypes[schemaItemType];\n const Asn1Type = asn1js[Asn1TypeName];\n if (!Asn1Type) {\n throw new Error(`Cannot get '${Asn1TypeName}' class from asn1js module`);\n }\n newItem = new Asn1Type();\n }\n newItem.valueBlock = value.valueBlock;\n value = asn1js.fromBER(newItem.toBER(false)).result;\n }\n return converter.fromASN(value);\n }\n static processComplexSchemaItem(asn1SchemaValue, schemaItem, schemaItemType) {\n if (schemaItem.repeated) {\n if (!Array.isArray(asn1SchemaValue)) {\n throw new Error(\"Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.\");\n }\n return Array.from(asn1SchemaValue, (element) => this.fromASN(element, schemaItemType));\n }\n else {\n const valueToProcess = this.handleImplicitTagging(asn1SchemaValue, schemaItem, schemaItemType);\n if (this.isOptionalChoiceField(schemaItem)) {\n try {\n return this.fromASN(valueToProcess, schemaItemType);\n }\n catch (err) {\n if (err instanceof AsnSchemaValidationError &&\n /Wrong values for Choice type/.test(err.message)) {\n return undefined;\n }\n throw err;\n }\n }\n else {\n const parsedValue = this.fromASN(valueToProcess, schemaItemType);\n if (schemaItem.raw) {\n return {\n value: parsedValue,\n raw: asn1SchemaValue.valueBeforeDecodeView,\n };\n }\n return parsedValue;\n }\n }\n }\n static handleImplicitTagging(asn1SchemaValue, schemaItem, schemaItemType) {\n if (schemaItem.implicit && typeof schemaItem.context === \"number\") {\n const schema = schemaStorage.get(schemaItemType);\n if (schema.type === AsnTypeTypes.Sequence) {\n const newSeq = new asn1js.Sequence();\n if (\"value\" in asn1SchemaValue.valueBlock &&\n Array.isArray(asn1SchemaValue.valueBlock.value) &&\n \"value\" in newSeq.valueBlock) {\n newSeq.valueBlock.value = asn1SchemaValue.valueBlock.value;\n return newSeq;\n }\n }\n else if (schema.type === AsnTypeTypes.Set) {\n const newSet = new asn1js.Set();\n if (\"value\" in asn1SchemaValue.valueBlock &&\n Array.isArray(asn1SchemaValue.valueBlock.value) &&\n \"value\" in newSet.valueBlock) {\n newSet.valueBlock.value = asn1SchemaValue.valueBlock.value;\n return newSet;\n }\n }\n }\n return asn1SchemaValue;\n }\n}\n","import * as asn1js from \"asn1js\";\nimport * as converters from \"./converters\";\nimport { AsnPropTypes, AsnTypeTypes } from \"./enums\";\nimport { isConvertible, isArrayEqual } from \"./helper\";\nimport { schemaStorage } from \"./storage\";\nexport class AsnSerializer {\n static serialize(obj) {\n if (obj instanceof asn1js.BaseBlock) {\n return obj.toBER(false);\n }\n return this.toASN(obj).toBER(false);\n }\n static toASN(obj) {\n if (obj && typeof obj === \"object\" && isConvertible(obj)) {\n return obj.toASN();\n }\n if (!(obj && typeof obj === \"object\")) {\n throw new TypeError(\"Parameter 1 should be type of Object.\");\n }\n const target = obj.constructor;\n const schema = schemaStorage.get(target);\n schemaStorage.cache(target);\n let asn1Value = [];\n if (schema.itemType) {\n if (!Array.isArray(obj)) {\n throw new TypeError(\"Parameter 1 should be type of Array.\");\n }\n if (typeof schema.itemType === \"number\") {\n const converter = converters.defaultConverter(schema.itemType);\n if (!converter) {\n throw new Error(`Cannot get default converter for array item of ${target.name} ASN1 schema`);\n }\n asn1Value = obj.map((o) => converter.toASN(o));\n }\n else {\n asn1Value = obj.map((o) => this.toAsnItem({ type: schema.itemType }, \"[]\", target, o));\n }\n }\n else {\n for (const key in schema.items) {\n const schemaItem = schema.items[key];\n const objProp = obj[key];\n if (objProp === undefined ||\n schemaItem.defaultValue === objProp ||\n (typeof schemaItem.defaultValue === \"object\" &&\n typeof objProp === \"object\" &&\n isArrayEqual(this.serialize(schemaItem.defaultValue), this.serialize(objProp)))) {\n continue;\n }\n const asn1Item = AsnSerializer.toAsnItem(schemaItem, key, target, objProp);\n if (typeof schemaItem.context === \"number\") {\n if (schemaItem.implicit) {\n if (!schemaItem.repeated &&\n (typeof schemaItem.type === \"number\" || isConvertible(schemaItem.type))) {\n const value = {};\n value.valueHex =\n asn1Item instanceof asn1js.Null\n ? asn1Item.valueBeforeDecodeView\n : asn1Item.valueBlock.toBER();\n asn1Value.push(new asn1js.Primitive({\n optional: schemaItem.optional,\n idBlock: {\n tagClass: 3,\n tagNumber: schemaItem.context,\n },\n ...value,\n }));\n }\n else {\n asn1Value.push(new asn1js.Constructed({\n optional: schemaItem.optional,\n idBlock: {\n tagClass: 3,\n tagNumber: schemaItem.context,\n },\n value: asn1Item.valueBlock.value,\n }));\n }\n }\n else {\n asn1Value.push(new asn1js.Constructed({\n optional: schemaItem.optional,\n idBlock: {\n tagClass: 3,\n tagNumber: schemaItem.context,\n },\n value: [asn1Item],\n }));\n }\n }\n else if (schemaItem.repeated) {\n asn1Value = asn1Value.concat(asn1Item);\n }\n else {\n asn1Value.push(asn1Item);\n }\n }\n }\n let asnSchema;\n switch (schema.type) {\n case AsnTypeTypes.Sequence:\n asnSchema = new asn1js.Sequence({ value: asn1Value });\n break;\n case AsnTypeTypes.Set:\n asnSchema = new asn1js.Set({ value: asn1Value });\n break;\n case AsnTypeTypes.Choice:\n if (!asn1Value[0]) {\n throw new Error(`Schema '${target.name}' has wrong data. Choice cannot be empty.`);\n }\n asnSchema = asn1Value[0];\n break;\n }\n return asnSchema;\n }\n static toAsnItem(schemaItem, key, target, objProp) {\n let asn1Item;\n if (typeof schemaItem.type === \"number\") {\n const converter = schemaItem.converter;\n if (!converter) {\n throw new Error(`Property '${key}' doesn't have converter for type ${AsnPropTypes[schemaItem.type]} in schema '${target.name}'`);\n }\n if (schemaItem.repeated) {\n if (!Array.isArray(objProp)) {\n throw new TypeError(\"Parameter 'objProp' should be type of Array.\");\n }\n const items = Array.from(objProp, (element) => converter.toASN(element));\n const Container = schemaItem.repeated === \"sequence\" ? asn1js.Sequence : asn1js.Set;\n asn1Item = new Container({\n value: items,\n });\n }\n else {\n asn1Item = converter.toASN(objProp);\n }\n }\n else {\n if (schemaItem.repeated) {\n if (!Array.isArray(objProp)) {\n throw new TypeError(\"Parameter 'objProp' should be type of Array.\");\n }\n const items = Array.from(objProp, (element) => this.toASN(element));\n const Container = schemaItem.repeated === \"sequence\" ? asn1js.Sequence : asn1js.Set;\n asn1Item = new Container({\n value: items,\n });\n }\n else {\n asn1Item = this.toASN(objProp);\n }\n }\n return asn1Item;\n }\n}\n","export class AsnArray extends Array {\n constructor(items = []) {\n if (typeof items === \"number\") {\n super(items);\n }\n else {\n super();\n for (const item of items) {\n this.push(item);\n }\n }\n }\n}\n","import * as asn1js from \"asn1js\";\nimport { BufferSourceConverter } from \"pvtsutils\";\nimport { AsnParser } from \"./parser\";\nimport { AsnSerializer } from \"./serializer\";\nexport class AsnConvert {\n static serialize(obj) {\n return AsnSerializer.serialize(obj);\n }\n static parse(data, target) {\n return AsnParser.parse(data, target);\n }\n static toString(data) {\n const buf = BufferSourceConverter.isBufferSource(data)\n ? BufferSourceConverter.toArrayBuffer(data)\n : AsnConvert.serialize(data);\n const asn = asn1js.fromBER(buf);\n if (asn.offset === -1) {\n throw new Error(`Cannot decode ASN.1 data. ${asn.result.error}`);\n }\n return asn.result.toString();\n }\n}\n","export * from \"./converters\";\nexport * from \"./types/index\";\nexport { AsnProp, AsnType, AsnChoiceType, AsnSequenceType, AsnSetType } from \"./decorators\";\nexport { AsnTypeTypes, AsnPropTypes } from \"./enums\";\nexport { AsnParser } from \"./parser\";\nexport { AsnSerializer } from \"./serializer\";\nexport * from \"./errors\";\nexport * from \"./objects\";\nexport * from \"./convert\";\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { Convert } from \"pvtsutils\";\nexport class IpConverter {\n static isIPv4(ip) {\n return /^(\\d{1,3}\\.){3}\\d{1,3}$/.test(ip);\n }\n static parseIPv4(ip) {\n const parts = ip.split(\".\");\n if (parts.length !== 4) {\n throw new Error(\"Invalid IPv4 address\");\n }\n return parts.map((part) => {\n const num = parseInt(part, 10);\n if (isNaN(num) || num < 0 || num > 255) {\n throw new Error(\"Invalid IPv4 address part\");\n }\n return num;\n });\n }\n static parseIPv6(ip) {\n const expandedIP = this.expandIPv6(ip);\n const parts = expandedIP.split(\":\");\n if (parts.length !== 8) {\n throw new Error(\"Invalid IPv6 address\");\n }\n return parts.reduce((bytes, part) => {\n const num = parseInt(part, 16);\n if (isNaN(num) || num < 0 || num > 0xffff) {\n throw new Error(\"Invalid IPv6 address part\");\n }\n bytes.push((num >> 8) & 0xff);\n bytes.push(num & 0xff);\n return bytes;\n }, []);\n }\n static expandIPv6(ip) {\n if (!ip.includes(\"::\")) {\n return ip;\n }\n const parts = ip.split(\"::\");\n if (parts.length > 2) {\n throw new Error(\"Invalid IPv6 address\");\n }\n const left = parts[0] ? parts[0].split(\":\") : [];\n const right = parts[1] ? parts[1].split(\":\") : [];\n const missing = 8 - (left.length + right.length);\n if (missing < 0) {\n throw new Error(\"Invalid IPv6 address\");\n }\n return [...left, ...Array(missing).fill(\"0\"), ...right].join(\":\");\n }\n static formatIPv6(bytes) {\n const parts = [];\n for (let i = 0; i < 16; i += 2) {\n parts.push(((bytes[i] << 8) | bytes[i + 1]).toString(16));\n }\n return this.compressIPv6(parts.join(\":\"));\n }\n static compressIPv6(ip) {\n const parts = ip.split(\":\");\n let longestZeroStart = -1;\n let longestZeroLength = 0;\n let currentZeroStart = -1;\n let currentZeroLength = 0;\n for (let i = 0; i < parts.length; i++) {\n if (parts[i] === \"0\") {\n if (currentZeroStart === -1) {\n currentZeroStart = i;\n }\n currentZeroLength++;\n }\n else {\n if (currentZeroLength > longestZeroLength) {\n longestZeroStart = currentZeroStart;\n longestZeroLength = currentZeroLength;\n }\n currentZeroStart = -1;\n currentZeroLength = 0;\n }\n }\n if (currentZeroLength > longestZeroLength) {\n longestZeroStart = currentZeroStart;\n longestZeroLength = currentZeroLength;\n }\n if (longestZeroLength > 1) {\n const before = parts.slice(0, longestZeroStart).join(\":\");\n const after = parts.slice(longestZeroStart + longestZeroLength).join(\":\");\n return `${before}::${after}`;\n }\n return ip;\n }\n static parseCIDR(text) {\n const [addr, prefixStr] = text.split(\"/\");\n const prefix = parseInt(prefixStr, 10);\n if (this.isIPv4(addr)) {\n if (prefix < 0 || prefix > 32) {\n throw new Error(\"Invalid IPv4 prefix length\");\n }\n return [this.parseIPv4(addr), prefix];\n }\n else {\n if (prefix < 0 || prefix > 128) {\n throw new Error(\"Invalid IPv6 prefix length\");\n }\n return [this.parseIPv6(addr), prefix];\n }\n }\n static decodeIP(value) {\n if (value.length === 64 && parseInt(value, 16) === 0) {\n return \"::/0\";\n }\n if (value.length !== 16) {\n return value;\n }\n const mask = parseInt(value.slice(8), 16)\n .toString(2)\n .split(\"\")\n .reduce((a, k) => a + +k, 0);\n let ip = value.slice(0, 8).replace(/(.{2})/g, (match) => `${parseInt(match, 16)}.`);\n ip = ip.slice(0, -1);\n return `${ip}/${mask}`;\n }\n static toString(buf) {\n const uint8 = new Uint8Array(buf);\n if (uint8.length === 4) {\n return Array.from(uint8).join(\".\");\n }\n if (uint8.length === 16) {\n return this.formatIPv6(uint8);\n }\n if (uint8.length === 8 || uint8.length === 32) {\n const half = uint8.length / 2;\n const addrBytes = uint8.slice(0, half);\n const maskBytes = uint8.slice(half);\n const isAllZeros = uint8.every((byte) => byte === 0);\n if (isAllZeros) {\n return uint8.length === 8 ? \"0.0.0.0/0\" : \"::/0\";\n }\n const prefixLen = maskBytes.reduce((a, b) => a + (b.toString(2).match(/1/g) || []).length, 0);\n if (uint8.length === 8) {\n const addrStr = Array.from(addrBytes).join(\".\");\n return `${addrStr}/${prefixLen}`;\n }\n else {\n const addrStr = this.formatIPv6(addrBytes);\n return `${addrStr}/${prefixLen}`;\n }\n }\n return this.decodeIP(Convert.ToHex(buf));\n }\n static fromString(text) {\n if (text.includes(\"/\")) {\n const [addr, prefix] = this.parseCIDR(text);\n const maskBytes = new Uint8Array(addr.length);\n let bitsLeft = prefix;\n for (let i = 0; i < maskBytes.length; i++) {\n if (bitsLeft >= 8) {\n maskBytes[i] = 0xff;\n bitsLeft -= 8;\n }\n else if (bitsLeft > 0) {\n maskBytes[i] = 0xff << (8 - bitsLeft);\n bitsLeft = 0;\n }\n }\n const out = new Uint8Array(addr.length * 2);\n out.set(addr, 0);\n out.set(maskBytes, addr.length);\n return out.buffer;\n }\n const bytes = this.isIPv4(text) ? this.parseIPv4(text) : this.parseIPv6(text);\n return new Uint8Array(bytes).buffer;\n }\n}\n","var RelativeDistinguishedName_1, RDNSequence_1, Name_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes, AsnArray } from \"@peculiar/asn1-schema\";\nimport { Convert } from \"pvtsutils\";\nlet DirectoryString = class DirectoryString {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n toString() {\n return (this.bmpString ||\n this.printableString ||\n this.teletexString ||\n this.universalString ||\n this.utf8String ||\n \"\");\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.TeletexString })\n], DirectoryString.prototype, \"teletexString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.PrintableString })\n], DirectoryString.prototype, \"printableString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.UniversalString })\n], DirectoryString.prototype, \"universalString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Utf8String })\n], DirectoryString.prototype, \"utf8String\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BmpString })\n], DirectoryString.prototype, \"bmpString\", void 0);\nDirectoryString = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], DirectoryString);\nexport { DirectoryString };\nlet AttributeValue = class AttributeValue extends DirectoryString {\n constructor(params = {}) {\n super(params);\n Object.assign(this, params);\n }\n toString() {\n return this.ia5String || (this.anyValue ? Convert.ToHex(this.anyValue) : super.toString());\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String })\n], AttributeValue.prototype, \"ia5String\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any })\n], AttributeValue.prototype, \"anyValue\", void 0);\nAttributeValue = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], AttributeValue);\nexport { AttributeValue };\nexport class AttributeTypeAndValue {\n constructor(params = {}) {\n this.type = \"\";\n this.value = new AttributeValue();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], AttributeTypeAndValue.prototype, \"type\", void 0);\n__decorate([\n AsnProp({ type: AttributeValue })\n], AttributeTypeAndValue.prototype, \"value\", void 0);\nlet RelativeDistinguishedName = RelativeDistinguishedName_1 = class RelativeDistinguishedName extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, RelativeDistinguishedName_1.prototype);\n }\n};\nRelativeDistinguishedName = RelativeDistinguishedName_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Set, itemType: AttributeTypeAndValue })\n], RelativeDistinguishedName);\nexport { RelativeDistinguishedName };\nlet RDNSequence = RDNSequence_1 = class RDNSequence extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, RDNSequence_1.prototype);\n }\n};\nRDNSequence = RDNSequence_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: RelativeDistinguishedName })\n], RDNSequence);\nexport { RDNSequence };\nlet Name = Name_1 = class Name extends RDNSequence {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, Name_1.prototype);\n }\n};\nName = Name_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence })\n], Name);\nexport { Name };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes, AsnOctetStringConverter, } from \"@peculiar/asn1-schema\";\nimport { IpConverter } from \"./ip_converter\";\nimport { DirectoryString, Name } from \"./name\";\nexport const AsnIpConverter = {\n fromASN: (value) => IpConverter.toString(AsnOctetStringConverter.fromASN(value)),\n toASN: (value) => AsnOctetStringConverter.toASN(IpConverter.fromString(value)),\n};\nexport class OtherName {\n constructor(params = {}) {\n this.typeId = \"\";\n this.value = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], OtherName.prototype, \"typeId\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any, context: 0 })\n], OtherName.prototype, \"value\", void 0);\nexport class EDIPartyName {\n constructor(params = {}) {\n this.partyName = new DirectoryString();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: DirectoryString, optional: true, context: 0, implicit: true })\n], EDIPartyName.prototype, \"nameAssigner\", void 0);\n__decorate([\n AsnProp({ type: DirectoryString, context: 1, implicit: true })\n], EDIPartyName.prototype, \"partyName\", void 0);\nlet GeneralName = class GeneralName {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: OtherName, context: 0, implicit: true })\n], GeneralName.prototype, \"otherName\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String, context: 1, implicit: true })\n], GeneralName.prototype, \"rfc822Name\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String, context: 2, implicit: true })\n], GeneralName.prototype, \"dNSName\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any, context: 3, implicit: true })\n], GeneralName.prototype, \"x400Address\", void 0);\n__decorate([\n AsnProp({ type: Name, context: 4, implicit: false })\n], GeneralName.prototype, \"directoryName\", void 0);\n__decorate([\n AsnProp({ type: EDIPartyName, context: 5 })\n], GeneralName.prototype, \"ediPartyName\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String, context: 6, implicit: true })\n], GeneralName.prototype, \"uniformResourceIdentifier\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.OctetString,\n context: 7,\n implicit: true,\n converter: AsnIpConverter,\n })\n], GeneralName.prototype, \"iPAddress\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier, context: 8, implicit: true })\n], GeneralName.prototype, \"registeredID\", void 0);\nGeneralName = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], GeneralName);\nexport { GeneralName };\n","export const id_pkix = \"1.3.6.1.5.5.7\";\nexport const id_pe = `${id_pkix}.1`;\nexport const id_qt = `${id_pkix}.2`;\nexport const id_kp = `${id_pkix}.3`;\nexport const id_ad = `${id_pkix}.48`;\nexport const id_qt_csp = `${id_qt}.1`;\nexport const id_qt_unotice = `${id_qt}.2`;\nexport const id_ad_ocsp = `${id_ad}.1`;\nexport const id_ad_caIssuers = `${id_ad}.2`;\nexport const id_ad_timeStamping = `${id_ad}.3`;\nexport const id_ad_caRepository = `${id_ad}.5`;\nexport const id_ce = \"2.5.29\";\n","var AuthorityInfoAccessSyntax_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralName } from \"../general_name\";\nimport { id_pe } from \"../object_identifiers\";\nexport const id_pe_authorityInfoAccess = `${id_pe}.1`;\nexport class AccessDescription {\n constructor(params = {}) {\n this.accessMethod = \"\";\n this.accessLocation = new GeneralName();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], AccessDescription.prototype, \"accessMethod\", void 0);\n__decorate([\n AsnProp({ type: GeneralName })\n], AccessDescription.prototype, \"accessLocation\", void 0);\nlet AuthorityInfoAccessSyntax = AuthorityInfoAccessSyntax_1 = class AuthorityInfoAccessSyntax extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, AuthorityInfoAccessSyntax_1.prototype);\n }\n};\nAuthorityInfoAccessSyntax = AuthorityInfoAccessSyntax_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: AccessDescription })\n], AuthorityInfoAccessSyntax);\nexport { AuthorityInfoAccessSyntax };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter, OctetString, } from \"@peculiar/asn1-schema\";\nimport { GeneralName } from \"../general_name\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_authorityKeyIdentifier = `${id_ce}.35`;\nexport class KeyIdentifier extends OctetString {\n}\nexport class AuthorityKeyIdentifier {\n constructor(params = {}) {\n if (params) {\n Object.assign(this, params);\n }\n }\n}\n__decorate([\n AsnProp({ type: KeyIdentifier, context: 0, optional: true, implicit: true })\n], AuthorityKeyIdentifier.prototype, \"keyIdentifier\", void 0);\n__decorate([\n AsnProp({ type: GeneralName, context: 1, optional: true, implicit: true, repeated: \"sequence\" })\n], AuthorityKeyIdentifier.prototype, \"authorityCertIssuer\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n context: 2,\n optional: true,\n implicit: true,\n converter: AsnIntegerArrayBufferConverter,\n })\n], AuthorityKeyIdentifier.prototype, \"authorityCertSerialNumber\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_basicConstraints = `${id_ce}.19`;\nexport class BasicConstraints {\n constructor(params = {}) {\n this.cA = false;\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Boolean, defaultValue: false })\n], BasicConstraints.prototype, \"cA\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, optional: true })\n], BasicConstraints.prototype, \"pathLenConstraint\", void 0);\n","var GeneralNames_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralName } from \"./general_name\";\nimport { AsnArray } from \"@peculiar/asn1-schema\";\nlet GeneralNames = GeneralNames_1 = class GeneralNames extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, GeneralNames_1.prototype);\n }\n};\nGeneralNames = GeneralNames_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: GeneralName })\n], GeneralNames);\nexport { GeneralNames };\n","var CertificateIssuer_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralNames } from \"../general_names\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_certificateIssuer = `${id_ce}.29`;\nlet CertificateIssuer = CertificateIssuer_1 = class CertificateIssuer extends GeneralNames {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, CertificateIssuer_1.prototype);\n }\n};\nCertificateIssuer = CertificateIssuer_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence })\n], CertificateIssuer);\nexport { CertificateIssuer };\n","var CertificatePolicies_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes, AsnArray } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_certificatePolicies = `${id_ce}.32`;\nexport const id_ce_certificatePolicies_anyPolicy = `${id_ce_certificatePolicies}.0`;\nlet DisplayText = class DisplayText {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n toString() {\n return this.ia5String || this.visibleString || this.bmpString || this.utf8String || \"\";\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String })\n], DisplayText.prototype, \"ia5String\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.VisibleString })\n], DisplayText.prototype, \"visibleString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BmpString })\n], DisplayText.prototype, \"bmpString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Utf8String })\n], DisplayText.prototype, \"utf8String\", void 0);\nDisplayText = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], DisplayText);\nexport { DisplayText };\nexport class NoticeReference {\n constructor(params = {}) {\n this.organization = new DisplayText();\n this.noticeNumbers = [];\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: DisplayText })\n], NoticeReference.prototype, \"organization\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, repeated: \"sequence\" })\n], NoticeReference.prototype, \"noticeNumbers\", void 0);\nexport class UserNotice {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: NoticeReference, optional: true })\n], UserNotice.prototype, \"noticeRef\", void 0);\n__decorate([\n AsnProp({ type: DisplayText, optional: true })\n], UserNotice.prototype, \"explicitText\", void 0);\nlet Qualifier = class Qualifier {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String })\n], Qualifier.prototype, \"cPSuri\", void 0);\n__decorate([\n AsnProp({ type: UserNotice })\n], Qualifier.prototype, \"userNotice\", void 0);\nQualifier = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], Qualifier);\nexport { Qualifier };\nexport class PolicyQualifierInfo {\n constructor(params = {}) {\n this.policyQualifierId = \"\";\n this.qualifier = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], PolicyQualifierInfo.prototype, \"policyQualifierId\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any })\n], PolicyQualifierInfo.prototype, \"qualifier\", void 0);\nexport class PolicyInformation {\n constructor(params = {}) {\n this.policyIdentifier = \"\";\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], PolicyInformation.prototype, \"policyIdentifier\", void 0);\n__decorate([\n AsnProp({ type: PolicyQualifierInfo, repeated: \"sequence\", optional: true })\n], PolicyInformation.prototype, \"policyQualifiers\", void 0);\nlet CertificatePolicies = CertificatePolicies_1 = class CertificatePolicies extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, CertificatePolicies_1.prototype);\n }\n};\nCertificatePolicies = CertificatePolicies_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: PolicyInformation })\n], CertificatePolicies);\nexport { CertificatePolicies };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_cRLNumber = `${id_ce}.20`;\nlet CRLNumber = class CRLNumber {\n constructor(value = 0) {\n this.value = value;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer })\n], CRLNumber.prototype, \"value\", void 0);\nCRLNumber = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], CRLNumber);\nexport { CRLNumber };\n","import { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nimport { CRLNumber } from \"./crl_number\";\nexport const id_ce_deltaCRLIndicator = `${id_ce}.27`;\nlet BaseCRLNumber = class BaseCRLNumber extends CRLNumber {\n};\nBaseCRLNumber = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], BaseCRLNumber);\nexport { BaseCRLNumber };\n","var CRLDistributionPoints_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, AsnArray, BitString } from \"@peculiar/asn1-schema\";\nimport { RelativeDistinguishedName } from \"../name\";\nimport { GeneralName } from \"../general_name\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_cRLDistributionPoints = `${id_ce}.31`;\nexport var ReasonFlags;\n(function (ReasonFlags) {\n ReasonFlags[ReasonFlags[\"unused\"] = 1] = \"unused\";\n ReasonFlags[ReasonFlags[\"keyCompromise\"] = 2] = \"keyCompromise\";\n ReasonFlags[ReasonFlags[\"cACompromise\"] = 4] = \"cACompromise\";\n ReasonFlags[ReasonFlags[\"affiliationChanged\"] = 8] = \"affiliationChanged\";\n ReasonFlags[ReasonFlags[\"superseded\"] = 16] = \"superseded\";\n ReasonFlags[ReasonFlags[\"cessationOfOperation\"] = 32] = \"cessationOfOperation\";\n ReasonFlags[ReasonFlags[\"certificateHold\"] = 64] = \"certificateHold\";\n ReasonFlags[ReasonFlags[\"privilegeWithdrawn\"] = 128] = \"privilegeWithdrawn\";\n ReasonFlags[ReasonFlags[\"aACompromise\"] = 256] = \"aACompromise\";\n})(ReasonFlags || (ReasonFlags = {}));\nexport class Reason extends BitString {\n toJSON() {\n const res = [];\n const flags = this.toNumber();\n if (flags & ReasonFlags.aACompromise) {\n res.push(\"aACompromise\");\n }\n if (flags & ReasonFlags.affiliationChanged) {\n res.push(\"affiliationChanged\");\n }\n if (flags & ReasonFlags.cACompromise) {\n res.push(\"cACompromise\");\n }\n if (flags & ReasonFlags.certificateHold) {\n res.push(\"certificateHold\");\n }\n if (flags & ReasonFlags.cessationOfOperation) {\n res.push(\"cessationOfOperation\");\n }\n if (flags & ReasonFlags.keyCompromise) {\n res.push(\"keyCompromise\");\n }\n if (flags & ReasonFlags.privilegeWithdrawn) {\n res.push(\"privilegeWithdrawn\");\n }\n if (flags & ReasonFlags.superseded) {\n res.push(\"superseded\");\n }\n if (flags & ReasonFlags.unused) {\n res.push(\"unused\");\n }\n return res;\n }\n toString() {\n return `[${this.toJSON().join(\", \")}]`;\n }\n}\nlet DistributionPointName = class DistributionPointName {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: GeneralName, context: 0, repeated: \"sequence\", implicit: true })\n], DistributionPointName.prototype, \"fullName\", void 0);\n__decorate([\n AsnProp({ type: RelativeDistinguishedName, context: 1, implicit: true })\n], DistributionPointName.prototype, \"nameRelativeToCRLIssuer\", void 0);\nDistributionPointName = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], DistributionPointName);\nexport { DistributionPointName };\nexport class DistributionPoint {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: DistributionPointName, context: 0, optional: true })\n], DistributionPoint.prototype, \"distributionPoint\", void 0);\n__decorate([\n AsnProp({ type: Reason, context: 1, optional: true, implicit: true })\n], DistributionPoint.prototype, \"reasons\", void 0);\n__decorate([\n AsnProp({ type: GeneralName, context: 2, optional: true, repeated: \"sequence\", implicit: true })\n], DistributionPoint.prototype, \"cRLIssuer\", void 0);\nlet CRLDistributionPoints = CRLDistributionPoints_1 = class CRLDistributionPoints extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, CRLDistributionPoints_1.prototype);\n }\n};\nCRLDistributionPoints = CRLDistributionPoints_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: DistributionPoint })\n], CRLDistributionPoints);\nexport { CRLDistributionPoints };\n","var FreshestCRL_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nimport { CRLDistributionPoints, DistributionPoint } from \"./crl_distribution_points\";\nexport const id_ce_freshestCRL = `${id_ce}.46`;\nlet FreshestCRL = FreshestCRL_1 = class FreshestCRL extends CRLDistributionPoints {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, FreshestCRL_1.prototype);\n }\n};\nFreshestCRL = FreshestCRL_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: DistributionPoint })\n], FreshestCRL);\nexport { FreshestCRL };\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { DistributionPointName, Reason } from \"./crl_distribution_points\";\nimport { id_ce } from \"../object_identifiers\";\nimport { AsnPropTypes } from \"@peculiar/asn1-schema\";\nexport const id_ce_issuingDistributionPoint = `${id_ce}.28`;\nexport class IssuingDistributionPoint {\n constructor(params = {}) {\n this.onlyContainsUserCerts = IssuingDistributionPoint.ONLY;\n this.onlyContainsCACerts = IssuingDistributionPoint.ONLY;\n this.indirectCRL = IssuingDistributionPoint.ONLY;\n this.onlyContainsAttributeCerts = IssuingDistributionPoint.ONLY;\n Object.assign(this, params);\n }\n}\nIssuingDistributionPoint.ONLY = false;\n__decorate([\n AsnProp({ type: DistributionPointName, context: 0, optional: true })\n], IssuingDistributionPoint.prototype, \"distributionPoint\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n context: 1,\n defaultValue: IssuingDistributionPoint.ONLY,\n implicit: true,\n })\n], IssuingDistributionPoint.prototype, \"onlyContainsUserCerts\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n context: 2,\n defaultValue: IssuingDistributionPoint.ONLY,\n implicit: true,\n })\n], IssuingDistributionPoint.prototype, \"onlyContainsCACerts\", void 0);\n__decorate([\n AsnProp({ type: Reason, context: 3, optional: true, implicit: true })\n], IssuingDistributionPoint.prototype, \"onlySomeReasons\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n context: 4,\n defaultValue: IssuingDistributionPoint.ONLY,\n implicit: true,\n })\n], IssuingDistributionPoint.prototype, \"indirectCRL\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n context: 5,\n defaultValue: IssuingDistributionPoint.ONLY,\n implicit: true,\n })\n], IssuingDistributionPoint.prototype, \"onlyContainsAttributeCerts\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_cRLReasons = `${id_ce}.21`;\nexport var CRLReasons;\n(function (CRLReasons) {\n CRLReasons[CRLReasons[\"unspecified\"] = 0] = \"unspecified\";\n CRLReasons[CRLReasons[\"keyCompromise\"] = 1] = \"keyCompromise\";\n CRLReasons[CRLReasons[\"cACompromise\"] = 2] = \"cACompromise\";\n CRLReasons[CRLReasons[\"affiliationChanged\"] = 3] = \"affiliationChanged\";\n CRLReasons[CRLReasons[\"superseded\"] = 4] = \"superseded\";\n CRLReasons[CRLReasons[\"cessationOfOperation\"] = 5] = \"cessationOfOperation\";\n CRLReasons[CRLReasons[\"certificateHold\"] = 6] = \"certificateHold\";\n CRLReasons[CRLReasons[\"removeFromCRL\"] = 8] = \"removeFromCRL\";\n CRLReasons[CRLReasons[\"privilegeWithdrawn\"] = 9] = \"privilegeWithdrawn\";\n CRLReasons[CRLReasons[\"aACompromise\"] = 10] = \"aACompromise\";\n})(CRLReasons || (CRLReasons = {}));\nlet CRLReason = class CRLReason {\n constructor(reason = CRLReasons.unspecified) {\n this.reason = CRLReasons.unspecified;\n this.reason = reason;\n }\n toJSON() {\n return CRLReasons[this.reason];\n }\n toString() {\n return this.toJSON();\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Enumerated })\n], CRLReason.prototype, \"reason\", void 0);\nCRLReason = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], CRLReason);\nexport { CRLReason };\n","var ExtendedKeyUsage_1;\nimport { __decorate } from \"tslib\";\nimport { AsnPropTypes, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce, id_kp } from \"../object_identifiers\";\nexport const id_ce_extKeyUsage = `${id_ce}.37`;\nlet ExtendedKeyUsage = ExtendedKeyUsage_1 = class ExtendedKeyUsage extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, ExtendedKeyUsage_1.prototype);\n }\n};\nExtendedKeyUsage = ExtendedKeyUsage_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: AsnPropTypes.ObjectIdentifier })\n], ExtendedKeyUsage);\nexport { ExtendedKeyUsage };\nexport const anyExtendedKeyUsage = `${id_ce_extKeyUsage}.0`;\nexport const id_kp_serverAuth = `${id_kp}.1`;\nexport const id_kp_clientAuth = `${id_kp}.2`;\nexport const id_kp_codeSigning = `${id_kp}.3`;\nexport const id_kp_emailProtection = `${id_kp}.4`;\nexport const id_kp_timeStamping = `${id_kp}.8`;\nexport const id_kp_OCSPSigning = `${id_kp}.9`;\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes, AsnIntegerArrayBufferConverter, } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_inhibitAnyPolicy = `${id_ce}.54`;\nlet InhibitAnyPolicy = class InhibitAnyPolicy {\n constructor(value = new ArrayBuffer(0)) {\n this.value = value;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter })\n], InhibitAnyPolicy.prototype, \"value\", void 0);\nInhibitAnyPolicy = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], InhibitAnyPolicy);\nexport { InhibitAnyPolicy };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_invalidityDate = `${id_ce}.24`;\nlet InvalidityDate = class InvalidityDate {\n constructor(value) {\n this.value = new Date();\n if (value) {\n this.value = value;\n }\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], InvalidityDate.prototype, \"value\", void 0);\nInvalidityDate = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], InvalidityDate);\nexport { InvalidityDate };\n","var IssueAlternativeName_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralNames } from \"../general_names\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_issuerAltName = `${id_ce}.18`;\nlet IssueAlternativeName = IssueAlternativeName_1 = class IssueAlternativeName extends GeneralNames {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, IssueAlternativeName_1.prototype);\n }\n};\nIssueAlternativeName = IssueAlternativeName_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence })\n], IssueAlternativeName);\nexport { IssueAlternativeName };\n","import { BitString } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_keyUsage = `${id_ce}.15`;\nexport var KeyUsageFlags;\n(function (KeyUsageFlags) {\n KeyUsageFlags[KeyUsageFlags[\"digitalSignature\"] = 1] = \"digitalSignature\";\n KeyUsageFlags[KeyUsageFlags[\"nonRepudiation\"] = 2] = \"nonRepudiation\";\n KeyUsageFlags[KeyUsageFlags[\"keyEncipherment\"] = 4] = \"keyEncipherment\";\n KeyUsageFlags[KeyUsageFlags[\"dataEncipherment\"] = 8] = \"dataEncipherment\";\n KeyUsageFlags[KeyUsageFlags[\"keyAgreement\"] = 16] = \"keyAgreement\";\n KeyUsageFlags[KeyUsageFlags[\"keyCertSign\"] = 32] = \"keyCertSign\";\n KeyUsageFlags[KeyUsageFlags[\"cRLSign\"] = 64] = \"cRLSign\";\n KeyUsageFlags[KeyUsageFlags[\"encipherOnly\"] = 128] = \"encipherOnly\";\n KeyUsageFlags[KeyUsageFlags[\"decipherOnly\"] = 256] = \"decipherOnly\";\n})(KeyUsageFlags || (KeyUsageFlags = {}));\nexport class KeyUsage extends BitString {\n toJSON() {\n const flag = this.toNumber();\n const res = [];\n if (flag & KeyUsageFlags.cRLSign) {\n res.push(\"crlSign\");\n }\n if (flag & KeyUsageFlags.dataEncipherment) {\n res.push(\"dataEncipherment\");\n }\n if (flag & KeyUsageFlags.decipherOnly) {\n res.push(\"decipherOnly\");\n }\n if (flag & KeyUsageFlags.digitalSignature) {\n res.push(\"digitalSignature\");\n }\n if (flag & KeyUsageFlags.encipherOnly) {\n res.push(\"encipherOnly\");\n }\n if (flag & KeyUsageFlags.keyAgreement) {\n res.push(\"keyAgreement\");\n }\n if (flag & KeyUsageFlags.keyCertSign) {\n res.push(\"keyCertSign\");\n }\n if (flag & KeyUsageFlags.keyEncipherment) {\n res.push(\"keyEncipherment\");\n }\n if (flag & KeyUsageFlags.nonRepudiation) {\n res.push(\"nonRepudiation\");\n }\n return res;\n }\n toString() {\n return `[${this.toJSON().join(\", \")}]`;\n }\n}\n","var GeneralSubtrees_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralName } from \"../general_name\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_nameConstraints = `${id_ce}.30`;\nexport class GeneralSubtree {\n constructor(params = {}) {\n this.base = new GeneralName();\n this.minimum = 0;\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: GeneralName })\n], GeneralSubtree.prototype, \"base\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, context: 0, defaultValue: 0, implicit: true })\n], GeneralSubtree.prototype, \"minimum\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, context: 1, optional: true, implicit: true })\n], GeneralSubtree.prototype, \"maximum\", void 0);\nlet GeneralSubtrees = GeneralSubtrees_1 = class GeneralSubtrees extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, GeneralSubtrees_1.prototype);\n }\n};\nGeneralSubtrees = GeneralSubtrees_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: GeneralSubtree })\n], GeneralSubtrees);\nexport { GeneralSubtrees };\nexport class NameConstraints {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: GeneralSubtrees, context: 0, optional: true, implicit: true })\n], NameConstraints.prototype, \"permittedSubtrees\", void 0);\n__decorate([\n AsnProp({ type: GeneralSubtrees, context: 1, optional: true, implicit: true })\n], NameConstraints.prototype, \"excludedSubtrees\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_policyConstraints = `${id_ce}.36`;\nexport class PolicyConstraints {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n context: 0,\n implicit: true,\n optional: true,\n converter: AsnIntegerArrayBufferConverter,\n })\n], PolicyConstraints.prototype, \"requireExplicitPolicy\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n context: 1,\n implicit: true,\n optional: true,\n converter: AsnIntegerArrayBufferConverter,\n })\n], PolicyConstraints.prototype, \"inhibitPolicyMapping\", void 0);\n","var PolicyMappings_1;\nimport { __decorate } from \"tslib\";\nimport { AsnArray, AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_policyMappings = `${id_ce}.33`;\nexport class PolicyMapping {\n constructor(params = {}) {\n this.issuerDomainPolicy = \"\";\n this.subjectDomainPolicy = \"\";\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], PolicyMapping.prototype, \"issuerDomainPolicy\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], PolicyMapping.prototype, \"subjectDomainPolicy\", void 0);\nlet PolicyMappings = PolicyMappings_1 = class PolicyMappings extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, PolicyMappings_1.prototype);\n }\n};\nPolicyMappings = PolicyMappings_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: PolicyMapping })\n], PolicyMappings);\nexport { PolicyMappings };\n","var SubjectAlternativeName_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralNames } from \"../general_names\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_subjectAltName = `${id_ce}.17`;\nlet SubjectAlternativeName = SubjectAlternativeName_1 = class SubjectAlternativeName extends GeneralNames {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, SubjectAlternativeName_1.prototype);\n }\n};\nSubjectAlternativeName = SubjectAlternativeName_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence })\n], SubjectAlternativeName);\nexport { SubjectAlternativeName };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nexport class Attribute {\n constructor(params = {}) {\n this.type = \"\";\n this.values = [];\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], Attribute.prototype, \"type\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any, repeated: \"set\" })\n], Attribute.prototype, \"values\", void 0);\n","var SubjectDirectoryAttributes_1;\nimport { __decorate } from \"tslib\";\nimport { AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { Attribute } from \"../attribute\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_subjectDirectoryAttributes = `${id_ce}.9`;\nlet SubjectDirectoryAttributes = SubjectDirectoryAttributes_1 = class SubjectDirectoryAttributes extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, SubjectDirectoryAttributes_1.prototype);\n }\n};\nSubjectDirectoryAttributes = SubjectDirectoryAttributes_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: Attribute })\n], SubjectDirectoryAttributes);\nexport { SubjectDirectoryAttributes };\n","import { id_ce } from \"../object_identifiers\";\nimport { KeyIdentifier } from \"./authority_key_identifier\";\nexport const id_ce_subjectKeyIdentifier = `${id_ce}.14`;\nexport class SubjectKeyIdentifier extends KeyIdentifier {\n}\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_privateKeyUsagePeriod = `${id_ce}.16`;\nexport class PrivateKeyUsagePeriod {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime, context: 0, implicit: true, optional: true })\n], PrivateKeyUsagePeriod.prototype, \"notBefore\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime, context: 1, implicit: true, optional: true })\n], PrivateKeyUsagePeriod.prototype, \"notAfter\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, BitString } from \"@peculiar/asn1-schema\";\nexport const id_entrust_entrustVersInfo = \"1.2.840.113533.7.65.0\";\nexport var EntrustInfoFlags;\n(function (EntrustInfoFlags) {\n EntrustInfoFlags[EntrustInfoFlags[\"keyUpdateAllowed\"] = 1] = \"keyUpdateAllowed\";\n EntrustInfoFlags[EntrustInfoFlags[\"newExtensions\"] = 2] = \"newExtensions\";\n EntrustInfoFlags[EntrustInfoFlags[\"pKIXCertificate\"] = 4] = \"pKIXCertificate\";\n})(EntrustInfoFlags || (EntrustInfoFlags = {}));\nexport class EntrustInfo extends BitString {\n toJSON() {\n const res = [];\n const flags = this.toNumber();\n if (flags & EntrustInfoFlags.pKIXCertificate) {\n res.push(\"pKIXCertificate\");\n }\n if (flags & EntrustInfoFlags.newExtensions) {\n res.push(\"newExtensions\");\n }\n if (flags & EntrustInfoFlags.keyUpdateAllowed) {\n res.push(\"keyUpdateAllowed\");\n }\n return res;\n }\n toString() {\n return `[${this.toJSON().join(\", \")}]`;\n }\n}\nexport class EntrustVersionInfo {\n constructor(params = {}) {\n this.entrustVers = \"\";\n this.entrustInfoFlags = new EntrustInfo();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralString })\n], EntrustVersionInfo.prototype, \"entrustVers\", void 0);\n__decorate([\n AsnProp({ type: EntrustInfo })\n], EntrustVersionInfo.prototype, \"entrustInfoFlags\", void 0);\n","var SubjectInfoAccessSyntax_1;\nimport { __decorate } from \"tslib\";\nimport { AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_pe } from \"../object_identifiers\";\nimport { AccessDescription } from \"./authority_information_access\";\nexport const id_pe_subjectInfoAccess = `${id_pe}.11`;\nlet SubjectInfoAccessSyntax = SubjectInfoAccessSyntax_1 = class SubjectInfoAccessSyntax extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, SubjectInfoAccessSyntax_1.prototype);\n }\n};\nSubjectInfoAccessSyntax = SubjectInfoAccessSyntax_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: AccessDescription })\n], SubjectInfoAccessSyntax);\nexport { SubjectInfoAccessSyntax };\n","export * from \"./authority_information_access\";\nexport * from \"./authority_key_identifier\";\nexport * from \"./basic_constraints\";\nexport * from \"./certificate_issuer\";\nexport * from \"./certificate_policies\";\nexport * from \"./crl_delta_indicator\";\nexport * from \"./crl_distribution_points\";\nexport * from \"./crl_freshest\";\nexport * from \"./crl_issuing_distribution_point\";\nexport * from \"./crl_number\";\nexport * from \"./crl_reason\";\nexport * from \"./extended_key_usage\";\nexport * from \"./inhibit_any_policy\";\nexport * from \"./invalidity_date\";\nexport * from \"./issuer_alternative_name\";\nexport * from \"./key_usage\";\nexport * from \"./name_constraints\";\nexport * from \"./policy_constraints\";\nexport * from \"./policy_mappings\";\nexport * from \"./subject_alternative_name\";\nexport * from \"./subject_directory_attributes\";\nexport * from \"./subject_key_identifier\";\nexport * from \"./private_key_usage_period\";\nexport * from \"./entrust_version_info\";\nexport * from \"./subject_info_access\";\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport * as pvtsutils from \"pvtsutils\";\nexport class AlgorithmIdentifier {\n constructor(params = {}) {\n this.algorithm = \"\";\n Object.assign(this, params);\n }\n isEqual(data) {\n return (data instanceof AlgorithmIdentifier &&\n data.algorithm == this.algorithm &&\n ((data.parameters &&\n this.parameters &&\n pvtsutils.isEqual(data.parameters, this.parameters)) ||\n data.parameters === this.parameters));\n }\n}\n__decorate([\n AsnProp({\n type: AsnPropTypes.ObjectIdentifier,\n })\n], AlgorithmIdentifier.prototype, \"algorithm\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Any,\n optional: true,\n })\n], AlgorithmIdentifier.prototype, \"parameters\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nexport class SubjectPublicKeyInfo {\n constructor(params = {}) {\n this.algorithm = new AlgorithmIdentifier();\n this.subjectPublicKey = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], SubjectPublicKeyInfo.prototype, \"algorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], SubjectPublicKeyInfo.prototype, \"subjectPublicKey\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nlet Time = class Time {\n constructor(time) {\n if (time) {\n if (typeof time === \"string\" || typeof time === \"number\" || time instanceof Date) {\n const date = new Date(time);\n date.setMilliseconds(0);\n if (date.getUTCFullYear() > 2049) {\n this.generalTime = date;\n }\n else {\n this.utcTime = date;\n }\n }\n else {\n Object.assign(this, time);\n }\n }\n }\n getTime() {\n const time = this.utcTime || this.generalTime;\n if (!time) {\n throw new Error(\"Cannot get time from CHOICE object\");\n }\n return time;\n }\n};\n__decorate([\n AsnProp({\n type: AsnPropTypes.UTCTime,\n })\n], Time.prototype, \"utcTime\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.GeneralizedTime,\n })\n], Time.prototype, \"generalTime\", void 0);\nTime = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], Time);\nexport { Time };\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { Time } from \"./time\";\nexport class Validity {\n constructor(params) {\n this.notBefore = new Time(new Date());\n this.notAfter = new Time(new Date());\n if (params) {\n this.notBefore = new Time(params.notBefore);\n this.notAfter = new Time(params.notAfter);\n }\n }\n}\n__decorate([\n AsnProp({ type: Time })\n], Validity.prototype, \"notBefore\", void 0);\n__decorate([\n AsnProp({ type: Time })\n], Validity.prototype, \"notAfter\", void 0);\n","var Extensions_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnArray, AsnType, AsnTypeTypes, OctetString, } from \"@peculiar/asn1-schema\";\nexport class Extension {\n constructor(params = {}) {\n this.extnID = \"\";\n this.critical = Extension.CRITICAL;\n this.extnValue = new OctetString();\n Object.assign(this, params);\n }\n}\nExtension.CRITICAL = false;\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], Extension.prototype, \"extnID\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n defaultValue: Extension.CRITICAL,\n })\n], Extension.prototype, \"critical\", void 0);\n__decorate([\n AsnProp({ type: OctetString })\n], Extension.prototype, \"extnValue\", void 0);\nlet Extensions = Extensions_1 = class Extensions extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, Extensions_1.prototype);\n }\n};\nExtensions = Extensions_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: Extension })\n], Extensions);\nexport { Extensions };\n","export var Version;\n(function (Version) {\n Version[Version[\"v1\"] = 0] = \"v1\";\n Version[Version[\"v2\"] = 1] = \"v2\";\n Version[Version[\"v3\"] = 2] = \"v3\";\n})(Version || (Version = {}));\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nimport { Name } from \"./name\";\nimport { SubjectPublicKeyInfo } from \"./subject_public_key_info\";\nimport { Validity } from \"./validity\";\nimport { Extensions } from \"./extension\";\nimport { Version } from \"./types\";\nexport class TBSCertificate {\n constructor(params = {}) {\n this.version = Version.v1;\n this.serialNumber = new ArrayBuffer(0);\n this.signature = new AlgorithmIdentifier();\n this.issuer = new Name();\n this.validity = new Validity();\n this.subject = new Name();\n this.subjectPublicKeyInfo = new SubjectPublicKeyInfo();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n context: 0,\n defaultValue: Version.v1,\n })\n], TBSCertificate.prototype, \"version\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n converter: AsnIntegerArrayBufferConverter,\n })\n], TBSCertificate.prototype, \"serialNumber\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], TBSCertificate.prototype, \"signature\", void 0);\n__decorate([\n AsnProp({ type: Name })\n], TBSCertificate.prototype, \"issuer\", void 0);\n__decorate([\n AsnProp({ type: Validity })\n], TBSCertificate.prototype, \"validity\", void 0);\n__decorate([\n AsnProp({ type: Name })\n], TBSCertificate.prototype, \"subject\", void 0);\n__decorate([\n AsnProp({ type: SubjectPublicKeyInfo })\n], TBSCertificate.prototype, \"subjectPublicKeyInfo\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.BitString,\n context: 1,\n implicit: true,\n optional: true,\n })\n], TBSCertificate.prototype, \"issuerUniqueID\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString, context: 2, implicit: true, optional: true })\n], TBSCertificate.prototype, \"subjectUniqueID\", void 0);\n__decorate([\n AsnProp({ type: Extensions, context: 3, optional: true })\n], TBSCertificate.prototype, \"extensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nimport { TBSCertificate } from \"./tbs_certificate\";\nexport class Certificate {\n constructor(params = {}) {\n this.tbsCertificate = new TBSCertificate();\n this.signatureAlgorithm = new AlgorithmIdentifier();\n this.signatureValue = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: TBSCertificate, raw: true })\n], Certificate.prototype, \"tbsCertificate\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], Certificate.prototype, \"signatureAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], Certificate.prototype, \"signatureValue\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nimport { Name } from \"./name\";\nimport { Time } from \"./time\";\nimport { Extension } from \"./extension\";\nexport class RevokedCertificate {\n constructor(params = {}) {\n this.userCertificate = new ArrayBuffer(0);\n this.revocationDate = new Time();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter })\n], RevokedCertificate.prototype, \"userCertificate\", void 0);\n__decorate([\n AsnProp({ type: Time })\n], RevokedCertificate.prototype, \"revocationDate\", void 0);\n__decorate([\n AsnProp({ type: Extension, optional: true, repeated: \"sequence\" })\n], RevokedCertificate.prototype, \"crlEntryExtensions\", void 0);\nexport class TBSCertList {\n constructor(params = {}) {\n this.signature = new AlgorithmIdentifier();\n this.issuer = new Name();\n this.thisUpdate = new Time();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, optional: true })\n], TBSCertList.prototype, \"version\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], TBSCertList.prototype, \"signature\", void 0);\n__decorate([\n AsnProp({ type: Name })\n], TBSCertList.prototype, \"issuer\", void 0);\n__decorate([\n AsnProp({ type: Time })\n], TBSCertList.prototype, \"thisUpdate\", void 0);\n__decorate([\n AsnProp({ type: Time, optional: true })\n], TBSCertList.prototype, \"nextUpdate\", void 0);\n__decorate([\n AsnProp({ type: RevokedCertificate, repeated: \"sequence\", optional: true })\n], TBSCertList.prototype, \"revokedCertificates\", void 0);\n__decorate([\n AsnProp({ type: Extension, optional: true, context: 0, repeated: \"sequence\" })\n], TBSCertList.prototype, \"crlExtensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nimport { TBSCertList } from \"./tbs_cert_list\";\nexport class CertificateList {\n constructor(params = {}) {\n this.tbsCertList = new TBSCertList();\n this.signatureAlgorithm = new AlgorithmIdentifier();\n this.signature = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: TBSCertList, raw: true })\n], CertificateList.prototype, \"tbsCertList\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], CertificateList.prototype, \"signatureAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], CertificateList.prototype, \"signature\", void 0);\n","export * from \"./extensions\";\nexport * from \"./algorithm_identifier\";\nexport * from \"./attribute\";\nexport * from \"./certificate\";\nexport * from \"./certificate_list\";\nexport * from \"./extension\";\nexport * from \"./general_name\";\nexport * from \"./general_names\";\nexport * from \"./name\";\nexport * from \"./object_identifiers\";\nexport * from \"./subject_public_key_info\";\nexport * from \"./tbs_cert_list\";\nexport * from \"./tbs_certificate\";\nexport * from \"./time\";\nexport * from \"./types\";\nexport * from \"./validity\";\n","import {\n SubjectKeyIdentifierExtension,\n X509Certificate,\n} from '@peculiar/x509';\n\n/**\n * Return the hex-encoded Subject Key Identifier of the given cert, or\n * null if the cert has no SKI extension. Always lowercase.\n */\nexport function getSkiHex(cert: X509Certificate): string | null {\n const ext = cert.getExtension(SubjectKeyIdentifierExtension);\n return ext ? ext.keyId.toLowerCase() : null;\n}\n\n/**\n * Byte-identity check on two certificates' DER encodings. Used to confirm a\n * chain actually terminates at a trust anchor rather than at a certificate\n * that merely reuses the anchor's Subject DN string — Subject-DN string\n * equality is NOT cryptographic identity.\n */\nexport function certificatesEqual(\n a: X509Certificate,\n b: X509Certificate\n): boolean {\n const ab = new Uint8Array(a.rawData);\n const bb = new Uint8Array(b.rawData);\n if (ab.length !== bb.length) return false;\n for (let i = 0; i < ab.length; i++) {\n if (ab[i] !== bb[i]) return false;\n }\n return true;\n}\n\n/**\n * Return the raw bytes of the Subject Key Identifier, or null.\n */\nexport function getSkiBytes(cert: X509Certificate): Uint8Array | null {\n const ext = cert.getExtension(SubjectKeyIdentifierExtension);\n if (!ext) return null;\n const hex = ext.keyId;\n const out = new Uint8Array(hex.length / 2);\n for (let i = 0; i < out.length; i++) {\n out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n","import { AsnConvert } from \"@peculiar/asn1-schema\";\nimport {\n GeneralName as Asn1GeneralName,\n GeneralSubtree,\n Name as AsnName,\n NameConstraints,\n} from \"@peculiar/asn1-x509\";\nimport {\n AuthorityKeyIdentifierExtension,\n BasicConstraintsExtension,\n KeyUsageFlags,\n KeyUsagesExtension,\n Name as X509Name,\n SubjectAlternativeNameExtension,\n SubjectKeyIdentifierExtension,\n X509Certificate,\n X509Certificates,\n} from \"@peculiar/x509\";\nimport { CertificateChainError } from \"../errors.js\";\nimport { certificatesEqual } from \"./x509-utils.js\";\n\nconst NAME_CONSTRAINTS_OID = \"2.5.29.30\";\n\ntype SubtreeName =\n | { type: \"dn\"; value: string }\n | { type: \"dns\"; value: string }\n | { type: \"email\"; value: string }\n | { type: \"uri\"; value: string };\n\nexport interface ChainBuilderOptions {\n /** Clock-skew tolerance in seconds applied to `notBefore`/`notAfter`. Default 60. */\n clockSkewTolerance?: number;\n /**\n * Certificate signature algorithms accepted for chain links.\n * Defaults to ES256, ES384, EdDSA, RS256, PS256.\n */\n allowedAlgorithms?: string[];\n /** Override \"now\" (used by tests). Defaults to `new Date()`. */\n now?: () => Date;\n}\n\nconst DEFAULT_ALGORITHMS = [\n \"ES256\",\n \"ES384\",\n \"ES512\",\n \"EdDSA\",\n \"RS256\",\n \"RS384\",\n \"RS512\",\n \"PS256\",\n \"PS384\",\n \"PS512\",\n];\n\n/**\n * Pragmatic RFC 5280 chain validator. Private — consumed only by\n * `TrustEvaluator`. Not exported from the package root.\n *\n * Scope: signature, validity period, algorithm allowlist, DN chaining,\n * AKI/SKI match, basicConstraints, keyUsage, nameConstraints. Explicitly\n * omits policy mapping / policy constraints / anyPolicy handling.\n */\nexport class ChainBuilder {\n constructor(private readonly opts: ChainBuilderOptions = {}) {}\n\n /**\n * Build and validate a chain from `leaf` to one of the `anchors`,\n * optionally using additional intermediates. Returns the ordered chain\n * (leaf → anchor). Throws `CertificateChainError` on any validation\n * failure.\n */\n async build(\n leaf: X509Certificate,\n anchors: X509Certificate[],\n intermediates: X509Certificate[] = []\n ): Promise<X509Certificate[]> {\n // Try each anchor; first one that closes a valid chain wins.\n const errors: Error[] = [];\n for (const anchor of anchors) {\n try {\n return await this.tryBuild(leaf, anchor, intermediates);\n } catch (err) {\n errors.push(err as Error);\n }\n }\n // All anchors failed — rethrow the most informative error.\n const last = errors[errors.length - 1];\n if (last instanceof CertificateChainError) throw last;\n throw new CertificateChainError(\"no valid chain to any anchor\", {\n reason: \"signature\",\n cause: last,\n });\n }\n\n private async tryBuild(\n leaf: X509Certificate,\n anchor: X509Certificate,\n intermediates: X509Certificate[]\n ): Promise<X509Certificate[]> {\n this.checkPerCert(leaf);\n this.checkLeafKeyUsage(leaf);\n const chain: X509Certificate[] = [leaf];\n let current = leaf;\n const pool = new X509Certificates(intermediates);\n let nonLeafDepth = 0; // how many non-self-issued CAs above leaf\n\n while (current.subject !== anchor.subject) {\n const issuer = pool.find((c) => c.subject === current.issuer);\n if (!issuer) {\n if (current.issuer !== anchor.subject) {\n throw new CertificateChainError(`no issuer certificate found for ${current.subject}`, {\n reason: \"signature\",\n });\n }\n // climbed to the anchor\n this.checkPerCert(anchor);\n this.checkCaAndPathLen(anchor, nonLeafDepth);\n this.checkAkiSkiMatch(current, anchor);\n await this.verifySignature(current, anchor);\n chain.push(anchor);\n this.checkNameConstraints(leaf, chain.slice(1));\n return chain;\n }\n this.checkPerCert(issuer);\n this.checkCaAndPathLen(issuer, nonLeafDepth);\n this.checkAkiSkiMatch(current, issuer);\n await this.verifySignature(current, issuer);\n chain.push(issuer);\n current = issuer;\n nonLeafDepth += 1;\n }\n // The loop terminated because `current.subject === anchor.subject`. That is\n // a valid chain closure ONLY if `current` IS the anchor (byte-identical) —\n // a certificate that merely reuses the anchor's Subject DN string was never\n // signed by the anchor's key and must not be trusted. Subject-DN equality is\n // not cryptographic closure. (The signature-verified closure path is the\n // `!issuer` branch above, which calls `verifySignature(current, anchor)`.)\n if (!certificatesEqual(current, anchor)) {\n throw new CertificateChainError(\n `certificate ${current.subject} shares the trust anchor's Subject DN but is not the anchor (no signature closure)`,\n { reason: \"signature\" }\n );\n }\n this.checkNameConstraints(leaf, chain.slice(1));\n return chain;\n }\n\n /**\n * Enforce nameConstraints asserted by any CA above the leaf against the\n * leaf's identities. RFC 5280 §4.2.1.10 requires both permitted (leaf must\n * match at least one) and excluded (leaf must match none) to hold for each\n * name type that appears in the constraint.\n */\n private checkNameConstraints(leaf: X509Certificate, chainAboveLeaf: X509Certificate[]): void {\n const leafNames = collectLeafNames(leaf);\n const types: SubtreeName[\"type\"][] = [\"dn\", \"dns\", \"email\", \"uri\"];\n for (const ca of chainAboveLeaf) {\n const ext = ca.extensions.find((e) => e.type === NAME_CONSTRAINTS_OID);\n if (!ext) continue;\n const nc = AsnConvert.parse(ext.value, NameConstraints);\n const permitted = extractSubtrees(nc.permittedSubtrees);\n const excluded = extractSubtrees(nc.excludedSubtrees);\n for (const type of types) {\n this.applyConstraintsForType(leaf, leafNames, permitted, excluded, type, ca.subject);\n }\n }\n }\n\n private applyConstraintsForType(\n leaf: X509Certificate,\n leafNames: SubtreeName[],\n permitted: SubtreeName[],\n excluded: SubtreeName[],\n type: SubtreeName[\"type\"],\n enforcingCa: string\n ): void {\n const permittedForType = permitted.filter((p) => p.type === type);\n const excludedForType = excluded.filter((p) => p.type === type);\n const leafForType = leafNames.filter((n) => n.type === type);\n if (permittedForType.length > 0) {\n // Every leaf name of this type must fall under at least one permitted subtree.\n for (const ln of leafForType) {\n const ok = permittedForType.some((sub) => matchesSubtree(ln, sub));\n if (!ok) {\n throw new CertificateChainError(\n `leaf ${leaf.subject}: ${type} \"${ln.value}\" is outside permitted subtrees asserted by ${enforcingCa}`,\n { reason: \"name_constraints\" }\n );\n }\n }\n }\n for (const ln of leafForType) {\n for (const sub of excludedForType) {\n if (matchesSubtree(ln, sub)) {\n throw new CertificateChainError(\n `leaf ${leaf.subject}: ${type} \"${ln.value}\" is under excluded subtree \"${sub.value}\" asserted by ${enforcingCa}`,\n { reason: \"name_constraints\" }\n );\n }\n }\n }\n }\n\n private checkCaAndPathLen(cert: X509Certificate, nonLeafDepth: number): void {\n this.checkCaKeyUsage(cert);\n const bc = cert.getExtension(BasicConstraintsExtension);\n if (!bc || !bc.ca) {\n throw new CertificateChainError(\n `certificate ${cert.subject} is not a CA (BasicConstraints cA=false or absent)`,\n { reason: \"basic_constraints\" }\n );\n }\n if (typeof bc.pathLength === \"number\" && nonLeafDepth > bc.pathLength) {\n throw new CertificateChainError(\n `path length ${nonLeafDepth} exceeds pathLenConstraint ${bc.pathLength} on ${cert.subject}`,\n { reason: \"path_length\" }\n );\n }\n }\n\n private checkLeafKeyUsage(leaf: X509Certificate): void {\n const ext = leaf.getExtension(KeyUsagesExtension);\n if (!ext) return; // no keyUsage → no restriction\n if ((ext.usages & KeyUsageFlags.digitalSignature) === 0) {\n throw new CertificateChainError(\n `leaf ${leaf.subject} does not assert digitalSignature key usage`,\n { reason: \"key_usage\" }\n );\n }\n }\n\n private checkCaKeyUsage(cert: X509Certificate): void {\n const ext = cert.getExtension(KeyUsagesExtension);\n if (!ext) return;\n if ((ext.usages & KeyUsageFlags.keyCertSign) === 0) {\n throw new CertificateChainError(\n `CA ${cert.subject} does not assert keyCertSign key usage`,\n { reason: \"key_usage\" }\n );\n }\n }\n\n private checkAkiSkiMatch(child: X509Certificate, issuer: X509Certificate): void {\n const aki = child.getExtension(AuthorityKeyIdentifierExtension);\n const ski = issuer.getExtension(SubjectKeyIdentifierExtension);\n if (!aki || !ski) return; // extension-less certs permitted\n const akiKeyId = aki.keyId;\n const skiKeyId = ski.keyId;\n if (akiKeyId && skiKeyId && akiKeyId.toLowerCase() !== skiKeyId.toLowerCase()) {\n throw new CertificateChainError(\n `AKI of ${child.subject} does not match SKI of ${issuer.subject}`,\n { reason: \"aki_ski_mismatch\" }\n );\n }\n }\n\n private async verifySignature(child: X509Certificate, issuer: X509Certificate): Promise<void> {\n // `signatureOnly: true` skips @peculiar/x509's internal validity check —\n // we own validity enforcement via `checkValidity` with clock-skew tolerance.\n const ok = await child.verify({ publicKey: issuer.publicKey, signatureOnly: true });\n if (!ok) {\n throw new CertificateChainError(`signature verification failed for ${child.subject}`, { reason: \"signature\" });\n }\n }\n\n private checkPerCert(cert: X509Certificate): void {\n this.checkValidity(cert);\n this.checkAlgorithm(cert);\n }\n\n private checkValidity(cert: X509Certificate): void {\n const now = (this.opts.now ?? (() => new Date()))().getTime();\n const skewMs = (this.opts.clockSkewTolerance ?? 60) * 1000;\n const notBefore = cert.notBefore.getTime();\n const notAfter = cert.notAfter.getTime();\n if (now + skewMs < notBefore) {\n throw new CertificateChainError(\n `certificate ${cert.subject} not yet valid (notBefore=${cert.notBefore.toISOString()})`,\n { reason: \"validity\" }\n );\n }\n if (now - skewMs > notAfter) {\n throw new CertificateChainError(\n `certificate ${cert.subject} expired (notAfter=${cert.notAfter.toISOString()})`,\n { reason: \"validity\" }\n );\n }\n }\n\n private checkAlgorithm(cert: X509Certificate): void {\n const allowed = this.opts.allowedAlgorithms ?? DEFAULT_ALGORITHMS;\n const algName = mapX509AlgoToJwaName(cert);\n if (!allowed.includes(algName)) {\n throw new CertificateChainError(\n `certificate ${cert.subject} uses disallowed signature algorithm ${algName}`,\n { reason: \"algorithm_disallowed\" }\n );\n }\n }\n}\n\nfunction mapX509AlgoToJwaName(cert: X509Certificate): string {\n // `@peculiar/x509` surfaces the signature alg via `signatureAlgorithm.name`\n // plus hash on ECDSA/RSA-PSS. We map to JWA names per RFC 7518 + RFC 8037.\n const alg = cert.signatureAlgorithm as unknown as {\n name?: string;\n hash?: { name?: string };\n };\n const name = alg?.name ?? \"\";\n const hash = alg?.hash?.name ?? \"\";\n if (name === \"ECDSA\" && hash === \"SHA-256\") return \"ES256\";\n if (name === \"ECDSA\" && hash === \"SHA-384\") return \"ES384\";\n if (name === \"ECDSA\" && hash === \"SHA-512\") return \"ES512\";\n if (name === \"Ed25519\" || name === \"EdDSA\") return \"EdDSA\";\n if (name === \"RSASSA-PKCS1-v1_5\" && hash === \"SHA-256\") return \"RS256\";\n if (name === \"RSASSA-PKCS1-v1_5\" && hash === \"SHA-384\") return \"RS384\";\n if (name === \"RSASSA-PKCS1-v1_5\" && hash === \"SHA-512\") return \"RS512\";\n if (name === \"RSA-PSS\" && hash === \"SHA-256\") return \"PS256\";\n if (name === \"RSA-PSS\" && hash === \"SHA-384\") return \"PS384\";\n if (name === \"RSA-PSS\" && hash === \"SHA-512\") return \"PS512\";\n return `${name}-${hash}`;\n}\n\n/**\n * Collect all identities asserted by the leaf that name constraints can\n * apply to: subject DN plus any SAN entries of supported types.\n *\n * Note: `@peculiar/x509`'s `GeneralName.type` uses the literal `'url'` for\n * URIs (URL constant), while the constraint side in `@peculiar/asn1-x509`\n * uses `uniformResourceIdentifier`, which `generalNameToSubtree` maps to\n * `{type: 'uri', ...}`. We normalize SAN entries here to `'uri'` so both\n * read paths agree on one canonical type tag.\n */\nfunction collectLeafNames(leaf: X509Certificate): SubtreeName[] {\n const out: SubtreeName[] = [{ type: \"dn\", value: leaf.subject }];\n const san = leaf.getExtension(SubjectAlternativeNameExtension);\n if (san?.names?.items) {\n for (const name of san.names.items) {\n if (name.type === \"dns\") out.push({ type: \"dns\", value: name.value });\n else if (name.type === \"email\") out.push({ type: \"email\", value: name.value });\n else if (name.type === \"url\") out.push({ type: \"uri\", value: name.value });\n }\n }\n return out;\n}\n\n/**\n * Collapse a parsed `GeneralSubtrees` into the simple shape used by\n * the synthetic-ca helpers: `{type, value}`. Any name kind we do not yet\n * enforce is returned as-is so later tasks can extend this.\n */\nfunction extractSubtrees(subtrees: GeneralSubtree[] | undefined): SubtreeName[] {\n if (!subtrees) return [];\n const out: SubtreeName[] = [];\n for (const s of subtrees) {\n const name = generalNameToSubtree(s.base);\n if (name) out.push(name);\n }\n return out;\n}\n\nfunction generalNameToSubtree(gn: Asn1GeneralName): SubtreeName | null {\n if (gn.directoryName) {\n // `directoryName` is an ASN.1 `Name`. Serialize to DER and parse with\n // @peculiar/x509's `Name` to get a canonical RFC 4514 string — same\n // path the synthetic-ca helper uses on the write side.\n const der = AsnConvert.serialize(gn.directoryName as AsnName);\n const dn = new X509Name(new Uint8Array(der)).toString();\n return { type: \"dn\", value: dn };\n }\n if (typeof gn.dNSName === \"string\") return { type: \"dns\", value: gn.dNSName };\n if (typeof gn.rfc822Name === \"string\") return { type: \"email\", value: gn.rfc822Name };\n if (typeof gn.uniformResourceIdentifier === \"string\") {\n return { type: \"uri\", value: gn.uniformResourceIdentifier };\n }\n return null;\n}\n\nfunction matchesSubtree(leafName: SubtreeName, subtree: SubtreeName): boolean {\n if (leafName.type !== subtree.type) return false;\n switch (subtree.type) {\n case \"dn\":\n return dnIsUnder(leafName.value, subtree.value);\n case \"dns\":\n return dnsIsUnder(leafName.value, subtree.value);\n case \"email\":\n return emailIsUnder(leafName.value, subtree.value);\n case \"uri\":\n return uriIsUnder(leafName.value, subtree.value);\n }\n}\n\n/**\n * DNS subtree match per RFC 5280 §4.2.1.10: case-insensitive exact match,\n * or left-side label(s) extension (`api.example.com` is under `example.com`).\n */\nfunction dnsIsUnder(leafDns: string, subtree: string): boolean {\n const leaf = leafDns.toLowerCase();\n const sub = subtree.toLowerCase();\n if (leaf === sub) return true;\n return leaf.endsWith(`.${sub}`);\n}\n\n/**\n * rfc822Name subtree match per RFC 5280 §4.2.1.10. Three shapes:\n * - full mailbox (`user@host`): exact match;\n * - host (`host.example`): match by leaf's domain part;\n * - dot-prefixed (`.example.com`): any descendant host, including the\n * bare domain (`example.com`) per §4.2.1.6 conventions.\n */\nfunction emailIsUnder(leafEmail: string, subtree: string): boolean {\n const leaf = leafEmail.toLowerCase();\n const sub = subtree.toLowerCase();\n if (sub.includes(\"@\")) return leaf === sub;\n const at = leaf.indexOf(\"@\");\n if (at < 0) return false;\n const leafHost = leaf.slice(at + 1);\n if (sub.startsWith(\".\")) {\n const bare = sub.slice(1);\n return leafHost === bare || leafHost.endsWith(sub);\n }\n return leafHost === sub;\n}\n\n/**\n * URI subtree match per RFC 5280 §4.2.1.10: parse the leaf URI and run the\n * DNS subtree comparison on its hostname.\n */\nfunction uriIsUnder(leafUri: string, subtree: string): boolean {\n try {\n const url = new URL(leafUri);\n return dnsIsUnder(url.hostname, subtree);\n } catch {\n return false;\n }\n}\n\n/**\n * RDN-level suffix match per RFC 5280 §4.2.1.10. This is a pragmatic\n * comparison — case-insensitive on attribute values, matching on whole\n * RDN tokens after splitting on `,`. It is not a full DN canonicalization\n * but handles EU TSP certificates correctly.\n */\nfunction dnIsUnder(childDn: string, subtreeDn: string): boolean {\n const normalize = (dn: string) =>\n dn\n .split(\",\")\n .map((rdn) => rdn.trim())\n .filter(Boolean)\n .reverse();\n const child = normalize(childDn);\n const subtree = normalize(subtreeDn);\n if (subtree.length > child.length) return false;\n for (let i = 0; i < subtree.length; i++) {\n if (child[i].toLowerCase() !== subtree[i].toLowerCase()) return false;\n }\n return true;\n}\n","/**\n * Internal ECDSA encoding helpers. `@peculiar/x509` + WebCrypto use\n * different wire formats for ECDSA signatures; these helpers bridge\n * DER (ASN.1 SEQUENCE { r, s }) and IEEE P1363 (r||s fixed-width).\n *\n * NOT exported from the package root.\n */\n\nexport function ecdsaDerToIeee(der: Uint8Array, coordBytes: number): Uint8Array {\n let pos = 0;\n if (der[pos++] !== 0x30)\n throw new Error('invalid DER signature: expected SEQUENCE');\n pos++; // skip seq-length\n if (der[pos++] !== 0x02)\n throw new Error('invalid DER signature: expected INTEGER r');\n const rLen = der[pos++];\n let r = der.slice(pos, pos + rLen);\n pos += rLen;\n if (der[pos++] !== 0x02)\n throw new Error('invalid DER signature: expected INTEGER s');\n const sLen = der[pos++];\n let s = der.slice(pos, pos + sLen);\n if (r.length > coordBytes) r = r.slice(r.length - coordBytes);\n if (s.length > coordBytes) s = s.slice(s.length - coordBytes);\n const out = new Uint8Array(coordBytes * 2);\n out.set(r, coordBytes - r.length);\n out.set(s, coordBytes * 2 - s.length);\n return out;\n}\n","import { AsnConvert } from '@peculiar/asn1-schema';\nimport { CertificateList } from '@peculiar/asn1-x509';\nimport { X509Certificate } from '@peculiar/x509';\nimport type { Cache } from './Cache.js';\nimport { ecdsaDerToIeee } from './ecdsa-util.js';\nimport type { Fetcher } from './Fetcher.js';\n\nexport interface CrlFetcherOptions {\n fetcher?: Fetcher;\n cache?: Cache;\n}\n\nexport interface ParsedCrl {\n thisUpdate: Date;\n nextUpdate: Date;\n /** Uppercase hex serials from the CRL's revokedCertificates list. */\n revokedSerialsHex: string[];\n /**\n * Original DER bytes — retained so the caller can verify the CRL\n * signature against the issuer's public key without re-serializing.\n */\n der: Uint8Array;\n /** Parsed asn1 CertificateList for signature verification. */\n raw: CertificateList;\n}\n\n/**\n * Outcome of a serial-number lookup against a parsed CRL. Kept decoupled\n * from `RevocationResult` so `CrlFetcher` stays a pure sub-component;\n * `RevocationChecker` (Task 17) maps this into the public `RevocationResult`.\n */\nexport type CrlRevokedOutcome =\n | { status: 'good' }\n | { status: 'revoked'; revokedAt: Date; revocationReason?: string };\n\n/**\n * Private — NOT exported from the package root. Fetches a CRL from an\n * HTTP(S) URL via the injected `Fetcher`, parses `CertificateList`,\n * and returns normalized metadata. Signature verification happens in\n * Task 7 via `verifyCrl(parsed, issuerCert)` — kept separate so tests\n * can drive parsing and signature concerns independently.\n */\nexport class CrlFetcher {\n private readonly fetcher: Fetcher;\n private readonly cache: Cache | undefined;\n\n constructor(opts: CrlFetcherOptions = {}) {\n this.fetcher = opts.fetcher ?? globalThis.fetch.bind(globalThis);\n this.cache = opts.cache;\n }\n\n async fetchAndParse(url: string): Promise<ParsedCrl> {\n const response = await this.fetcher(url, { method: 'GET' });\n if (!response.ok) {\n throw new Error(`CRL fetch failed: HTTP ${response.status} for ${url}`);\n }\n const der = new Uint8Array(await response.arrayBuffer());\n const parsed = AsnConvert.parse(der, CertificateList);\n\n // `fetchAndParse` enforces RFC 5280 §5.1.2.5 — a CRL without\n // nextUpdate is not usable. The cache-hit path in\n // `fetchAndParseCached` deliberately skips this check: anything\n // that made it into the cache was valid when stored, and freshness\n // is enforced separately via `isStale`.\n if (!parsed.tbsCertList.nextUpdate) {\n throw new Error(`CRL missing nextUpdate — unsupported (RFC 5280 §5.1.2.5)`);\n }\n\n return normalizeCrl(parsed, der);\n }\n\n /**\n * Caching wrapper around `fetchAndParse`. On cache hit, re-parses the\n * stored DER bytes and returns a fresh `ParsedCrl` (parsing is idempotent\n * on DER). On miss, delegates to `fetchAndParse` and stores `parsed.der`\n * under key `crl:{url}` with `TTL = max(floor((nextUpdate - now) / 1000), 60)`\n * seconds — never less than 60s even if the CRL is already near/past\n * expiry, to avoid cache thrash while `isStale` handles the verdict.\n */\n async fetchAndParseCached(url: string, now: Date = new Date()): Promise<ParsedCrl> {\n const key = `crl:${url}`;\n if (this.cache) {\n const hit = await this.cache.get(key);\n if (hit) {\n const parsed = AsnConvert.parse(hit, CertificateList);\n return normalizeCrl(parsed, hit);\n }\n }\n const parsed = await this.fetchAndParse(url);\n if (this.cache) {\n const ttl = Math.max(\n Math.floor((parsed.nextUpdate.getTime() - now.getTime()) / 1000),\n 60\n );\n await this.cache.set(key, parsed.der, ttl);\n }\n return parsed;\n }\n\n /**\n * Verify the CRL signature against the issuer CA's public key.\n * RFC 5280 §5.1.1.3: signature is computed over the DER encoding of\n * `tbsCertList`. We prefer `tbsCertListRaw` when `@peculiar/asn1-schema`\n * exposes it (avoids a re-serialization roundtrip); fall back to\n * `AsnConvert.serialize(tbsCertList)` otherwise.\n *\n * ECDSA signatures in `CertificateList.signature` are DER-encoded\n * SEQUENCE { r, s } — WebCrypto `verify()` expects IEEE P1363 (r||s\n * fixed-width), so we convert first.\n */\n async verifyCrl(parsed: ParsedCrl, issuer: X509Certificate): Promise<void> {\n const tbsDer = parsed.raw.tbsCertListRaw\n ? new Uint8Array(parsed.raw.tbsCertListRaw)\n : new Uint8Array(AsnConvert.serialize(parsed.raw.tbsCertList));\n const sigDer = new Uint8Array(parsed.raw.signature);\n const sigIeee = ecdsaDerToIeee(sigDer, 32); // 32 bytes per coord for P-256\n\n // Re-import the issuer's public key via Node's global SubtleCrypto from\n // raw SPKI bytes. The `@peculiar/x509`-exported CryptoKey may belong to\n // a non-global provider (e.g. `@peculiar/webcrypto` in tests), and\n // Node's global `crypto.subtle.verify` rejects foreign-provider keys\n // with \"2nd argument is not of type CryptoKey\". Importing from SPKI\n // produces a key owned by the global provider — production-correct\n // and works under test.\n const spki = new Uint8Array(issuer.publicKey.rawData);\n const publicKey = await crypto.subtle.importKey(\n 'spki',\n spki,\n { name: 'ECDSA', namedCurve: 'P-256' },\n false,\n ['verify']\n );\n const ok = await crypto.subtle.verify(\n { name: 'ECDSA', hash: 'SHA-256' },\n publicKey,\n sigIeee as Uint8Array<ArrayBuffer>,\n tbsDer as Uint8Array<ArrayBuffer>\n );\n if (!ok) {\n throw new Error(\n `CRL signature verification failed against issuer ${issuer.subject}`\n );\n }\n }\n\n /**\n * Look up a certificate serial number against the CRL's revokedCertificates\n * list. Returns `{ status: 'revoked', revokedAt }` when found, `{ status: 'good' }`\n * otherwise. Hex comparison is normalized via `normalizeHexUnsignedInt` on\n * both sides so that ASN.1 sign padding and input formatting differences\n * (case, leading zeros) don't yield false negatives.\n *\n * `revocationReason` is intentionally omitted in 0.5.0 — decoding the\n * optional CRLReason extension on each `RevokedCertificate` is non-blocking\n * for a verdict and can be added without breaking the return shape.\n */\n isRevoked(parsed: ParsedCrl, serialHex: string): CrlRevokedOutcome {\n const normalized = normalizeHexUnsignedInt(serialHex);\n for (const revoked of parsed.raw.tbsCertList.revokedCertificates ?? []) {\n const candidateHex = normalizeHexUnsignedInt(\n bytesToHex(revoked.userCertificate)\n );\n if (candidateHex === normalized) {\n return {\n status: 'revoked',\n revokedAt: revoked.revocationDate.getTime(),\n };\n }\n }\n return { status: 'good' };\n }\n\n /**\n * True when `now` is past the CRL's `nextUpdate` — the CA has published\n * a new CRL (or should have) and this one should not be relied on.\n * RFC 5280 §5.1.2.5.\n */\n isStale(parsed: ParsedCrl, now: Date = new Date()): boolean {\n return now.getTime() > parsed.nextUpdate.getTime();\n }\n}\n\n/**\n * Derive the `ParsedCrl` shape from a decoded `CertificateList` plus its\n * original DER bytes. Extracted so both `fetchAndParse` and the cache-hit\n * branch of `fetchAndParseCached` produce identical results — DRY.\n *\n * `nextUpdate` is assumed present here; callers are responsible for the\n * RFC 5280 §5.1.2.5 check before invoking (the cache-hit path intentionally\n * skips it, since cached entries were validated at store time).\n */\nfunction normalizeCrl(parsed: CertificateList, der: Uint8Array): ParsedCrl {\n const thisUpdate = parsed.tbsCertList.thisUpdate.getTime();\n const nextUpdate = parsed.tbsCertList.nextUpdate!.getTime();\n const revokedSerialsHex =\n parsed.tbsCertList.revokedCertificates?.map((r) =>\n normalizeHexUnsignedInt(bytesToHex(r.userCertificate))\n ) ?? [];\n return {\n thisUpdate,\n nextUpdate,\n revokedSerialsHex,\n der,\n raw: parsed,\n };\n}\n\n/**\n * Normalize a hex-encoded unsigned integer to canonical uppercase form\n * without the ASN.1-mandated leading 0x00 sign byte. Using `BigInt` strips\n * *only* the leading zeros that would make the value larger than itself —\n * so `00AF01` → `AF01` but `0B01` stays `B01` and `0A` stays `A`. The prior\n * `.replace(/^0+/, '')` over-stripped any run of leading zeros including\n * legitimate nibble-level zeros, yielding intermittent compare misses when\n * a serial happened to begin with `0x0X` for non-zero X.\n */\nfunction normalizeHexUnsignedInt(hex: string): string {\n const clean = hex.replace(/[^0-9a-fA-F]/g, '');\n if (clean.length === 0) return '';\n return BigInt('0x' + clean).toString(16).toUpperCase();\n}\n\n/** Hex-encode raw bytes. Node's `Buffer` would work but isn't in the TS lib without `@types/node`. */\nfunction bytesToHex(bytes: ArrayBuffer | Uint8Array): string {\n const view = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n let out = '';\n for (let i = 0; i < view.length; i++) {\n out += view[i].toString(16).padStart(2, '0');\n }\n return out;\n}\n","var AcceptableResponses_1;\nimport { __decorate } from \"tslib\";\nimport { AsnPropTypes, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nlet AcceptableResponses = AcceptableResponses_1 = class AcceptableResponses extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, AcceptableResponses_1.prototype);\n }\n};\nAcceptableResponses = AcceptableResponses_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: AsnPropTypes.ObjectIdentifier })\n], AcceptableResponses);\nexport { AcceptableResponses };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, AsnPropTypes } from \"@peculiar/asn1-schema\";\nlet ArchiveCutoff = class ArchiveCutoff {\n constructor(value = new Date()) {\n this.value = value;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], ArchiveCutoff.prototype, \"value\", void 0);\nArchiveCutoff = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], ArchiveCutoff);\nexport { ArchiveCutoff };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, AsnPropTypes } from \"@peculiar/asn1-schema\";\nlet ExtendedRevoke = class ExtendedRevoke {\n constructor(value = null) {\n this.value = value;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Null })\n], ExtendedRevoke.prototype, \"value\", void 0);\nExtendedRevoke = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], ExtendedRevoke);\nexport { ExtendedRevoke };\n","import { OctetString } from \"@peculiar/asn1-schema\";\nexport class Nonce extends OctetString {\n}\n","var PreferredSignatureAlgorithms_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"@peculiar/asn1-x509\";\nexport class PreferredSignatureAlgorithm {\n constructor(params = {}) {\n this.sigIdentifier = new AlgorithmIdentifier();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], PreferredSignatureAlgorithm.prototype, \"sigIdentifier\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier, optional: true })\n], PreferredSignatureAlgorithm.prototype, \"certIdentifier\", void 0);\nlet PreferredSignatureAlgorithms = PreferredSignatureAlgorithms_1 = class PreferredSignatureAlgorithms extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, PreferredSignatureAlgorithms_1.prototype);\n }\n};\nPreferredSignatureAlgorithms = PreferredSignatureAlgorithms_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: PreferredSignatureAlgorithm })\n], PreferredSignatureAlgorithms);\nexport { PreferredSignatureAlgorithms };\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { AuthorityInfoAccessSyntax, Name } from \"@peculiar/asn1-x509\";\nexport class ServiceLocator {\n constructor(params = {}) {\n this.issuer = new Name();\n this.locator = new AuthorityInfoAccessSyntax();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: Name })\n], ServiceLocator.prototype, \"issuer\", void 0);\n__decorate([\n AsnProp({ type: AuthorityInfoAccessSyntax })\n], ServiceLocator.prototype, \"locator\", void 0);\n","export * from \"./acceptable_responses\";\nexport * from \"./archive_cutoff\";\nexport * from \"./extended_revoke\";\nexport * from \"./nonce\";\nexport * from \"./preferred_signature_algorithms\";\nexport * from \"./service_locator\";\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, OctetString } from \"@peculiar/asn1-schema\";\nimport { Name } from \"@peculiar/asn1-x509\";\nexport class KeyHash extends OctetString {\n}\nlet ResponderID = class ResponderID {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: Name, context: 1 })\n], ResponderID.prototype, \"byName\", void 0);\n__decorate([\n AsnProp({ type: KeyHash, context: 2 })\n], ResponderID.prototype, \"byKey\", void 0);\nResponderID = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], ResponderID);\nexport { ResponderID };\n","import { __decorate } from \"tslib\";\nimport { AlgorithmIdentifier } from \"@peculiar/asn1-x509\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter, OctetString, } from \"@peculiar/asn1-schema\";\nexport class CertID {\n constructor(params = {}) {\n this.hashAlgorithm = new AlgorithmIdentifier();\n this.issuerNameHash = new OctetString();\n this.issuerKeyHash = new OctetString();\n this.serialNumber = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], CertID.prototype, \"hashAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: OctetString })\n], CertID.prototype, \"issuerNameHash\", void 0);\n__decorate([\n AsnProp({ type: OctetString })\n], CertID.prototype, \"issuerKeyHash\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter })\n], CertID.prototype, \"serialNumber\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { CRLReason } from \"@peculiar/asn1-x509\";\nexport class RevokedInfo {\n constructor(params = {}) {\n this.revocationTime = new Date();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], RevokedInfo.prototype, \"revocationTime\", void 0);\n__decorate([\n AsnProp({ type: CRLReason, context: 0, optional: true })\n], RevokedInfo.prototype, \"revocationReason\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { RevokedInfo } from \"./revoked_info\";\nlet CertStatus = class CertStatus {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Null, context: 0, implicit: true })\n], CertStatus.prototype, \"good\", void 0);\n__decorate([\n AsnProp({ type: RevokedInfo, context: 1, implicit: true })\n], CertStatus.prototype, \"revoked\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Null, context: 2, implicit: true })\n], CertStatus.prototype, \"unknown\", void 0);\nCertStatus = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], CertStatus);\nexport { CertStatus };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { CertID } from \"./cert_id\";\nimport { Extension } from \"@peculiar/asn1-x509\";\nimport { CertStatus } from \"./cert_status\";\nexport class SingleResponse {\n constructor(params = {}) {\n this.certID = new CertID();\n this.certStatus = new CertStatus();\n this.thisUpdate = new Date();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: CertID })\n], SingleResponse.prototype, \"certID\", void 0);\n__decorate([\n AsnProp({ type: CertStatus })\n], SingleResponse.prototype, \"certStatus\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], SingleResponse.prototype, \"thisUpdate\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime, context: 0, optional: true })\n], SingleResponse.prototype, \"nextUpdate\", void 0);\n__decorate([\n AsnProp({ type: Extension, context: 1, repeated: \"sequence\", optional: true })\n], SingleResponse.prototype, \"singleExtensions\", void 0);\n","export var Version;\n(function (Version) {\n Version[Version[\"v1\"] = 0] = \"v1\";\n})(Version || (Version = {}));\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { Extension } from \"@peculiar/asn1-x509\";\nimport { ResponderID } from \"./responder_id\";\nimport { SingleResponse } from \"./single_response\";\nimport { Version } from \"./types\";\nexport class ResponseData {\n constructor(params = {}) {\n this.version = Version.v1;\n this.responderID = new ResponderID();\n this.producedAt = new Date();\n this.responses = [];\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, context: 0, defaultValue: Version.v1 })\n], ResponseData.prototype, \"version\", void 0);\n__decorate([\n AsnProp({ type: ResponderID })\n], ResponseData.prototype, \"responderID\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], ResponseData.prototype, \"producedAt\", void 0);\n__decorate([\n AsnProp({ type: SingleResponse, repeated: \"sequence\" })\n], ResponseData.prototype, \"responses\", void 0);\n__decorate([\n AsnProp({ type: Extension, repeated: \"sequence\", context: 1, optional: true })\n], ResponseData.prototype, \"responseExtensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier, Certificate } from \"@peculiar/asn1-x509\";\nimport { ResponseData } from \"./response_data\";\nexport class BasicOCSPResponse {\n constructor(params = {}) {\n this.tbsResponseData = new ResponseData();\n this.signatureAlgorithm = new AlgorithmIdentifier();\n this.signature = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: ResponseData, raw: true })\n], BasicOCSPResponse.prototype, \"tbsResponseData\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], BasicOCSPResponse.prototype, \"signatureAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], BasicOCSPResponse.prototype, \"signature\", void 0);\n__decorate([\n AsnProp({ type: Certificate, repeated: \"sequence\", optional: true, context: 0 })\n], BasicOCSPResponse.prototype, \"certs\", void 0);\n","import { id_kp, id_ad_ocsp } from \"@peculiar/asn1-x509\";\nexport const id_kp_OCSPSigning = `${id_kp}.9`;\nexport const id_pkix_ocsp = `${id_ad_ocsp}`;\nexport const id_pkix_ocsp_basic = `${id_pkix_ocsp}.1`;\nexport const id_pkix_ocsp_nonce = `${id_pkix_ocsp}.2`;\nexport const id_pkix_ocsp_crl = `${id_pkix_ocsp}.3`;\nexport const id_pkix_ocsp_response = `${id_pkix_ocsp}.4`;\nexport const id_pkix_ocsp_nocheck = `${id_pkix_ocsp}.5`;\nexport const id_pkix_ocsp_archive_cutoff = `${id_pkix_ocsp}.6`;\nexport const id_pkix_ocsp_service_locator = `${id_pkix_ocsp}.7`;\nexport const id_pkix_ocsp_pref_sig_algs = `${id_pkix_ocsp}.8`;\nexport const id_pkix_ocsp_extended_revoke = `${id_pkix_ocsp}.9`;\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier, Certificate } from \"@peculiar/asn1-x509\";\nexport class Signature {\n constructor(params = {}) {\n this.signatureAlgorithm = new AlgorithmIdentifier();\n this.signature = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], Signature.prototype, \"signatureAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], Signature.prototype, \"signature\", void 0);\n__decorate([\n AsnProp({ type: Certificate, repeated: \"sequence\", optional: true, context: 0 })\n], Signature.prototype, \"certs\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { CertID } from \"./cert_id\";\nimport { Extension } from \"@peculiar/asn1-x509\";\nexport class Request {\n constructor(params = {}) {\n this.reqCert = new CertID();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: CertID })\n], Request.prototype, \"reqCert\", void 0);\n__decorate([\n AsnProp({ type: Extension, repeated: \"sequence\", optional: true })\n], Request.prototype, \"singleRequestExtensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralName, Extension } from \"@peculiar/asn1-x509\";\nimport { Request } from \"./request\";\nimport { Version } from \"./types\";\nexport class TBSRequest {\n constructor(params = {}) {\n this.version = Version.v1;\n this.requestList = [];\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, context: 0, defaultValue: Version.v1 })\n], TBSRequest.prototype, \"version\", void 0);\n__decorate([\n AsnProp({ type: GeneralName, context: 1, optional: true })\n], TBSRequest.prototype, \"requestorName\", void 0);\n__decorate([\n AsnProp({ type: Request, repeated: \"sequence\" })\n], TBSRequest.prototype, \"requestList\", void 0);\n__decorate([\n AsnProp({ type: Extension, context: 2, optional: true, repeated: \"sequence\" })\n], TBSRequest.prototype, \"requestExtensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { Signature } from \"./signature\";\nimport { TBSRequest } from \"./tbs_request\";\nexport class OCSPRequest {\n constructor(params = {}) {\n this.tbsRequest = new TBSRequest();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: TBSRequest, raw: true })\n], OCSPRequest.prototype, \"tbsRequest\", void 0);\n__decorate([\n AsnProp({ type: Signature, optional: true, context: 0 })\n], OCSPRequest.prototype, \"optionalSignature\", void 0);\n","export var OCSPResponseStatus;\n(function (OCSPResponseStatus) {\n OCSPResponseStatus[OCSPResponseStatus[\"successful\"] = 0] = \"successful\";\n OCSPResponseStatus[OCSPResponseStatus[\"malformedRequest\"] = 1] = \"malformedRequest\";\n OCSPResponseStatus[OCSPResponseStatus[\"internalError\"] = 2] = \"internalError\";\n OCSPResponseStatus[OCSPResponseStatus[\"tryLater\"] = 3] = \"tryLater\";\n OCSPResponseStatus[OCSPResponseStatus[\"sigRequired\"] = 5] = \"sigRequired\";\n OCSPResponseStatus[OCSPResponseStatus[\"unauthorized\"] = 6] = \"unauthorized\";\n})(OCSPResponseStatus || (OCSPResponseStatus = {}));\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, OctetString } from \"@peculiar/asn1-schema\";\nexport class ResponseBytes {\n constructor(params = {}) {\n this.responseType = \"\";\n this.response = new OctetString();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], ResponseBytes.prototype, \"responseType\", void 0);\n__decorate([\n AsnProp({ type: OctetString })\n], ResponseBytes.prototype, \"response\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { OCSPResponseStatus } from \"./ocsp_response_status\";\nimport { ResponseBytes } from \"./response_bytes\";\nexport class OCSPResponse {\n constructor(params = {}) {\n this.responseStatus = OCSPResponseStatus.successful;\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Enumerated })\n], OCSPResponse.prototype, \"responseStatus\", void 0);\n__decorate([\n AsnProp({ type: ResponseBytes, context: 0, optional: true })\n], OCSPResponse.prototype, \"responseBytes\", void 0);\n","export * from \"./extensions\";\nexport * from \"./basic_ocsp_response\";\nexport * from \"./cert_id\";\nexport * from \"./cert_status\";\nexport * from \"./object_identifiers\";\nexport * from \"./ocsp_request\";\nexport * from \"./ocsp_response_status\";\nexport * from \"./ocsp_response\";\nexport * from \"./request\";\nexport * from \"./responder_id\";\nexport * from \"./response_bytes\";\nexport * from \"./response_data\";\nexport * from \"./revoked_info\";\nexport * from \"./signature\";\nexport * from \"./single_response\";\nexport * from \"./tbs_request\";\nexport * from \"./types\";\n","import { AsnConvert, OctetString } from '@peculiar/asn1-schema';\nimport {\n BasicOCSPResponse,\n CertID,\n OCSPRequest,\n OCSPResponse,\n Request,\n TBSRequest,\n} from '@peculiar/asn1-ocsp';\nimport { AlgorithmIdentifier, SubjectPublicKeyInfo } from '@peculiar/asn1-x509';\nimport { ExtendedKeyUsageExtension, X509Certificate } from '@peculiar/x509';\nimport type { Cache } from './Cache.js';\nimport { ChainBuilder } from './ChainBuilder.js';\nimport { ecdsaDerToIeee } from './ecdsa-util.js';\nimport type { Fetcher } from './Fetcher.js';\nimport type { RevocationResult } from './revocation-types.js';\n\nexport interface OcspClientOptions {\n fetcher?: Fetcher;\n cache?: Cache;\n}\n\nexport interface ExtractVerdictOpts {\n /** Maximum allowed age of the OCSP response's `thisUpdate`. Default: 7 days. */\n maxResponseAgeMs?: number;\n}\n\nconst DEFAULT_MAX_RESPONSE_AGE_MS = 7 * 24 * 3600 * 1000;\n\n/**\n * Parsed OCSP response envelope. Holds both the decoded `BasicOCSPResponse`\n * (for verification and verdict extraction) and the raw DER bytes (used by\n * the Task 16 caching path). NOT exported from the package root.\n */\nexport interface OcspResponseEnvelope {\n basic: BasicOCSPResponse;\n responseDer: Uint8Array;\n}\n\n/**\n * Private — NOT exported from the package root. Builds OCSP requests, POSTs\n * them to the responder URL via the injected `Fetcher`, parses and verifies\n * `BasicOCSPResponse`. Request-verify logic ships across Tasks 11–16; this\n * module currently exposes `buildRequest` only.\n */\nexport class OcspClient {\n private readonly fetcher: Fetcher;\n private readonly cache: Cache | undefined;\n\n constructor(opts: OcspClientOptions = {}) {\n this.fetcher = opts.fetcher ?? globalThis.fetch.bind(globalThis);\n this.cache = opts.cache;\n }\n\n /**\n * Build a DER-encoded OCSPRequest for (subjectCert, issuerCert).\n * `optionalSignature` is omitted (RFC 6960 §4.1 — responders MUST accept\n * unsigned requests; signing is an interop footgun).\n *\n * CertID uses SHA-1 by default because every real-world OCSP responder\n * still accepts it (RFC 6960 default). issuerNameHash covers the DER-\n * encoded Name; issuerKeyHash covers the raw BIT STRING value of the\n * issuer's SubjectPublicKeyInfo.subjectPublicKey — NOT the full SPKI.\n */\n async buildRequest(\n subjectCert: X509Certificate,\n issuerCert: X509Certificate\n ): Promise<Uint8Array> {\n const issuerNameDer = new Uint8Array(issuerCert.subjectName.toArrayBuffer());\n const issuerNameHashBytes = new Uint8Array(\n await crypto.subtle.digest('SHA-1', issuerNameDer)\n );\n\n const issuerKeyHashBytes = await this.computeIssuerKeyHash(issuerCert);\n\n const certId = new CertID({\n hashAlgorithm: new AlgorithmIdentifier({ algorithm: '1.3.14.3.2.26' /* sha1 */ }),\n issuerNameHash: new OctetString(issuerNameHashBytes),\n issuerKeyHash: new OctetString(issuerKeyHashBytes),\n serialNumber: hexToBigIntBytes(subjectCert.serialNumber).buffer as ArrayBuffer,\n });\n\n const request = new OCSPRequest({\n tbsRequest: new TBSRequest({\n requestList: [new Request({ reqCert: certId })],\n }),\n });\n return new Uint8Array(AsnConvert.serialize(request));\n }\n\n /**\n * POST a DER-encoded OCSP request to the responder URL, parse the reply,\n * and return the decoded `BasicOCSPResponse` plus the raw DER (for later\n * caching).\n *\n * Throws on non-ok HTTP, on non-successful `responseStatus`, or on any\n * `responseType` other than `id-pkix-ocsp-basic` (1.3.6.1.5.5.7.48.1.1).\n * Signature verification is deferred to `verifyResponse` (Task 13).\n */\n async sendRequest(\n url: string,\n requestDer: Uint8Array\n ): Promise<OcspResponseEnvelope> {\n const response = await this.fetcher(url, {\n method: 'POST',\n headers: { 'content-type': 'application/ocsp-request' },\n body: requestDer as Uint8Array<ArrayBuffer>,\n });\n if (!response.ok) {\n throw new Error(`OCSP fetch failed: HTTP ${response.status} for ${url}`);\n }\n const responseDer = new Uint8Array(await response.arrayBuffer());\n const parsed = AsnConvert.parse(responseDer, OCSPResponse);\n if (parsed.responseStatus !== 0) {\n throw new Error(\n `OCSP non-successful responseStatus=${parsed.responseStatus} for ${url}`\n );\n }\n if (\n !parsed.responseBytes ||\n parsed.responseBytes.responseType !== '1.3.6.1.5.5.7.48.1.1'\n ) {\n throw new Error(`OCSP response is not id-pkix-ocsp-basic`);\n }\n // `responseBytes.response` is an `OctetString` (ArrayBufferView).\n // Copy through `.buffer` so the DER bytes are unwrapped regardless of\n // the view's byteOffset/byteLength.\n const basic = AsnConvert.parse(\n new Uint8Array(parsed.responseBytes.response.buffer),\n BasicOCSPResponse\n );\n return { basic, responseDer };\n }\n\n /**\n * Verify the OCSP response signature per RFC 6960 §4.2.2.2. Two allowed\n * signer cases:\n *\n * 1. Directly issuer-signed — signature verifies against `issuerCert`.\n * 2. Responder sub-cert — one of the embedded `BasicOCSPResponse.certs`\n * chains to `issuerCert` (via `ChainBuilder`) AND asserts the\n * `id-kp-OCSPSigning` EKU (OID `1.3.6.1.5.5.7.3.9`).\n *\n * If neither path closes, throw. Responder sub-cert revocation is NOT\n * checked in A.2 (per spec §7.5) — the `id-pkix-ocsp-nocheck` extension\n * is irrelevant here because we never recurse.\n */\n async verifyResponse(\n envelope: OcspResponseEnvelope,\n issuerCert: X509Certificate\n ): Promise<void> {\n const { basic } = envelope;\n // Prefer the raw DER bytes captured at parse time (avoids a\n // re-serialization roundtrip). Mirrors the `tbsCertListRaw` pattern\n // in `CrlFetcher.verifyCrl`.\n const tbsDer = basic.tbsResponseDataRaw\n ? new Uint8Array(basic.tbsResponseDataRaw)\n : new Uint8Array(AsnConvert.serialize(basic.tbsResponseData));\n\n // Case 1: direct issuer signature.\n try {\n await verifySig(basic, tbsDer, issuerCert);\n return;\n } catch {\n // fall through to responder sub-cert case\n }\n\n // Case 2: responder sub-cert. Build candidate set from embedded certs.\n const embeddedCerts: X509Certificate[] = (basic.certs ?? []).map(\n (asn) =>\n new X509Certificate(\n new Uint8Array(AsnConvert.serialize(asn)) as Uint8Array<ArrayBuffer>\n )\n );\n if (embeddedCerts.length === 0) {\n throw new Error(\n 'OCSP response signature did not match issuer and no responder certs were embedded'\n );\n }\n\n // Track whether we saw an embedded cert but rejected it for missing\n // OCSPSigning EKU — so we can surface that specific reason.\n let sawNonResponderCandidate = false;\n const builder = new ChainBuilder();\n for (const candidate of embeddedCerts) {\n const eku = candidate.getExtension(ExtendedKeyUsageExtension);\n if (!eku || !eku.usages.includes('1.3.6.1.5.5.7.3.9')) {\n sawNonResponderCandidate = true;\n continue;\n }\n // Candidate MUST chain to the issuer. No intermediates in A.2 —\n // OCSP responder sub-certs are issued directly by the CA.\n try {\n await builder.build(candidate, [issuerCert], []);\n } catch {\n continue;\n }\n try {\n await verifySig(basic, tbsDer, candidate);\n return;\n } catch {\n continue;\n }\n }\n if (sawNonResponderCandidate) {\n throw new Error(\n 'OCSP response signed by a cert lacking id-kp-OCSPSigning EKU'\n );\n }\n throw new Error(\n 'OCSP response signature could not be verified by any responder candidate'\n );\n }\n\n /**\n * Extract a `RevocationResult` from a verified `OcspResponseEnvelope` for\n * `subjectCert`. Locates the matching `SingleResponse` by serial number,\n * enforces an `opts.maxResponseAgeMs` staleness bound against `thisUpdate`\n * (default 7 days per RFC 6960 guidance), then maps the three-way\n * `CertStatus` CHOICE into `RevocationResult`.\n *\n * Signature/chain verification is `verifyResponse`'s job — this method\n * assumes the envelope has already been verified.\n *\n * Throws when no matching SingleResponse is found or when the response is\n * stale. Callers (e.g. `RevocationChecker`) map stale errors into\n * `RevocationCheckFailedError` per policy.\n */\n extractVerdict(\n envelope: OcspResponseEnvelope,\n subjectCert: X509Certificate,\n now: Date,\n opts: ExtractVerdictOpts = {}\n ): RevocationResult {\n const maxAge = opts.maxResponseAgeMs ?? DEFAULT_MAX_RESPONSE_AGE_MS;\n const subjectSerialNorm = normalizeHexUnsignedInt(subjectCert.serialNumber);\n\n const single = envelope.basic.tbsResponseData.responses.find((r) => {\n const serialHex = bytesToHex(r.certID.serialNumber);\n return normalizeHexUnsignedInt(serialHex) === subjectSerialNorm;\n });\n if (!single) {\n throw new Error(\n `OCSP response does not contain an entry for subject serial ${subjectCert.serialNumber}`\n );\n }\n\n const thisUpdate = single.thisUpdate;\n if (now.getTime() - thisUpdate.getTime() > maxAge) {\n throw new Error(\n `OCSP response is stale: thisUpdate=${thisUpdate.toISOString()}, now=${now.toISOString()}`\n );\n }\n\n // CertStatus is a CHOICE — exactly one of `good`, `revoked`, `unknown`\n // is populated. `good` and `unknown` are `null` values so the presence\n // check MUST use `!== undefined` (truthy-check would miss them).\n const status = single.certStatus;\n if (status.good !== undefined) {\n return { status: 'good', source: 'ocsp', checkedAt: now };\n }\n if (status.revoked !== undefined) {\n const reason = status.revoked.revocationReason;\n return {\n status: 'revoked',\n source: 'ocsp',\n revokedAt: status.revoked.revocationTime,\n revocationReason: reason !== undefined ? String(reason) : undefined,\n checkedAt: now,\n };\n }\n return { status: 'unknown', source: 'ocsp', checkedAt: now };\n }\n\n /**\n * End-to-end OCSP check with caching per spec §7.4.\n *\n * Cache key: `ocsp:{hex(issuerKeyHash)}:{UPPERCASE subjectSerial}`. The\n * key-hash component matches RFC 6960 CertID.issuerKeyHash (SHA-1 over\n * `SubjectPublicKeyInfo.subjectPublicKey`), so the same subject+issuer\n * pair always maps to the same key regardless of issuer-cert reissuance.\n *\n * Cache hits are re-verified and re-extracted — never trust stored bytes\n * blindly. Only the inner `BasicOCSPResponse` DER is cached (not the\n * outer `OCSPResponse` envelope), matching the parsed form `verifyResponse`\n * consumes.\n *\n * TTL: `clamp(floor((nextUpdate - now) / 1000), 60, 3600)` seconds when\n * `nextUpdate` is present; otherwise 3600s. The 1-hour ceiling caps how\n * stale a cached verdict can be, and the 60s floor avoids immediate\n * re-fetch storms when a responder publishes very short validity windows.\n *\n * Single-flight concurrency is NOT implemented (A.2 spec: naive re-check\n * on concurrent miss is acceptable for the in-process `InMemoryCache`).\n */\n async checkCached(\n subjectCert: X509Certificate,\n issuerCert: X509Certificate,\n url: string,\n now: Date = new Date()\n ): Promise<RevocationResult> {\n const keyHash = await this.computeIssuerKeyHash(issuerCert);\n const keyHashHex = bytesToHex(keyHash);\n const cacheKey = `ocsp:${keyHashHex}:${subjectCert.serialNumber.toUpperCase()}`;\n\n if (this.cache) {\n const hit = await this.cache.get(cacheKey);\n if (hit) {\n const envelope: OcspResponseEnvelope = {\n basic: AsnConvert.parse(hit, BasicOCSPResponse),\n responseDer: hit,\n };\n // Still verify + extract on cache hit — never trust stored bytes blindly.\n await this.verifyResponse(envelope, issuerCert);\n return this.extractVerdict(envelope, subjectCert, now);\n }\n }\n\n const requestDer = await this.buildRequest(subjectCert, issuerCert);\n const envelope = await this.sendRequest(url, requestDer);\n await this.verifyResponse(envelope, issuerCert);\n const verdict = this.extractVerdict(envelope, subjectCert, now);\n\n if (this.cache) {\n const single = envelope.basic.tbsResponseData.responses[0];\n const nextUpdate = single?.nextUpdate?.getTime();\n const maxTtlSec = 3600;\n const ttl =\n nextUpdate !== undefined\n ? Math.max(\n Math.min(\n Math.floor((nextUpdate - now.getTime()) / 1000),\n maxTtlSec\n ),\n 60\n )\n : maxTtlSec;\n await this.cache.set(\n cacheKey,\n new Uint8Array(AsnConvert.serialize(envelope.basic)),\n ttl\n );\n }\n return verdict;\n }\n\n /**\n * SHA-1 hash of the issuer's `SubjectPublicKeyInfo.subjectPublicKey` BIT\n * STRING value — the same key hash `buildRequest` embeds in `CertID`. Used\n * as a stable component of the cache key so reissuing an issuer cert with\n * the same key doesn't invalidate cached verdicts.\n */\n private async computeIssuerKeyHash(\n issuerCert: X509Certificate\n ): Promise<Uint8Array> {\n const spki = AsnConvert.parse(\n new Uint8Array(issuerCert.publicKey.rawData),\n SubjectPublicKeyInfo\n );\n return new Uint8Array(\n await crypto.subtle.digest('SHA-1', new Uint8Array(spki.subjectPublicKey))\n );\n }\n}\n\n/**\n * Verify `BasicOCSPResponse.signature` against `signer.publicKey`. Uses the\n * SPKI re-import dance so the WebCrypto key is owned by the global provider\n * (Node rejects foreign-provider CryptoKeys in `crypto.subtle.verify`).\n *\n * ECDSA signatures are DER-encoded SEQUENCE { r, s } in the ASN.1 structure\n * — WebCrypto `verify()` wants IEEE P1363 r||s fixed-width, so we convert.\n */\nasync function verifySig(\n basic: BasicOCSPResponse,\n tbsDer: Uint8Array,\n signer: X509Certificate\n): Promise<void> {\n const sigIeee = ecdsaDerToIeee(new Uint8Array(basic.signature), 32);\n const spki = new Uint8Array(signer.publicKey.rawData);\n const publicKey = await crypto.subtle.importKey(\n 'spki',\n spki,\n { name: 'ECDSA', namedCurve: 'P-256' },\n false,\n ['verify']\n );\n const ok = await crypto.subtle.verify(\n { name: 'ECDSA', hash: 'SHA-256' },\n publicKey,\n sigIeee as Uint8Array<ArrayBuffer>,\n tbsDer as Uint8Array<ArrayBuffer>\n );\n if (!ok) {\n throw new Error(\n `OCSP signature did not verify against signer ${signer.subject}`\n );\n }\n}\n\n/**\n * Normalize a hex-encoded unsigned integer to canonical uppercase form\n * without the ASN.1-mandated leading 0x00 sign byte. Mirrors the helper in\n * `CrlFetcher.ts` so OCSP and CRL paths apply identical serial-compare\n * semantics — DRY-by-convention to keep this sub-module self-contained.\n */\nfunction normalizeHexUnsignedInt(hex: string): string {\n const clean = hex.replace(/[^0-9a-fA-F]/g, '');\n if (clean.length === 0) return '';\n return BigInt('0x' + clean)\n .toString(16)\n .toUpperCase();\n}\n\n/** Hex-encode raw bytes. Node's `Buffer` would work but isn't in the TS lib without `@types/node`. */\nfunction bytesToHex(bytes: ArrayBuffer | Uint8Array): string {\n const view = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n let out = '';\n for (let i = 0; i < view.length; i++) {\n out += view[i].toString(16).padStart(2, '0');\n }\n return out;\n}\n\n/** Convert a hex string (optionally with leading zeros) into the big-endian BigInteger bytes the ASN.1 layer wants. */\nfunction hexToBigIntBytes(hex: string): Uint8Array {\n const clean = hex.replace(/[^0-9a-fA-F]/g, '');\n const padded = clean.length % 2 === 0 ? clean : '0' + clean;\n const out = new Uint8Array(padded.length / 2);\n for (let i = 0; i < out.length; i++) {\n out[i] = parseInt(padded.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\n","import {\n AuthorityInfoAccessSyntax,\n CRLDistributionPoints,\n} from '@peculiar/asn1-x509';\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport { X509Certificate } from '@peculiar/x509';\nimport { RevocationCheckFailedError } from '../errors.js';\nimport type { Cache } from './Cache.js';\nimport { CrlFetcher } from './CrlFetcher.js';\nimport type { Fetcher } from './Fetcher.js';\nimport { OcspClient } from './OcspClient.js';\nimport type { RevocationResult } from './revocation-types.js';\n\nexport type RevocationPolicy = 'skip' | 'prefer' | 'require';\n\nexport interface RevocationCheckerOptions {\n policy: RevocationPolicy;\n fetcher?: Fetcher;\n cache?: Cache;\n}\n\n/**\n * Private — NOT exported from the package root. Coordinates OCSP + CRL\n * revocation checking per spec §7. Used only by `TrustEvaluator`.\n */\nexport class RevocationChecker {\n private readonly policy: RevocationPolicy;\n private readonly ocsp: OcspClient;\n private readonly crl: CrlFetcher;\n\n constructor(opts: RevocationCheckerOptions) {\n this.policy = opts.policy;\n this.ocsp = new OcspClient({ fetcher: opts.fetcher, cache: opts.cache });\n this.crl = new CrlFetcher({ fetcher: opts.fetcher, cache: opts.cache });\n }\n\n async check(\n subjectCert: X509Certificate,\n issuerCert: X509Certificate,\n now: Date = new Date()\n ): Promise<RevocationResult> {\n if (this.policy === 'skip') {\n return { status: 'good', source: 'none', checkedAt: now };\n }\n\n const hints = this.extractUrls(subjectCert);\n\n if (!hints.ocspUrl && hints.crlUrls.length === 0) {\n if (this.policy === 'require') {\n throw new RevocationCheckFailedError(\n `no revocation sources declared on ${subjectCert.subject}`\n );\n }\n return { status: 'unknown', source: 'none', checkedAt: now };\n }\n\n // OCSP first.\n if (hints.ocspUrl) {\n try {\n return await this.ocsp.checkCached(subjectCert, issuerCert, hints.ocspUrl, now);\n } catch (err) {\n // Fall through to CRL — but surface why, so a genuinely broken\n // OCSP path (bad signature, stale response, parse failure) is\n // diagnosable instead of silently downgrading to source='none'.\n console.warn(\n `[openid4vp] OCSP check failed for ${subjectCert.subject} via ${hints.ocspUrl}, falling back to CRL: ${(err as Error).message}`\n );\n }\n }\n\n // CRL fallback.\n for (const url of hints.crlUrls) {\n try {\n const parsed = await this.crl.fetchAndParseCached(url, now);\n await this.crl.verifyCrl(parsed, issuerCert);\n if (this.crl.isStale(parsed, now)) {\n if (this.policy === 'require') {\n throw new RevocationCheckFailedError(\n `CRL from ${url} is stale (nextUpdate=${parsed.nextUpdate.toISOString()})`\n );\n }\n continue;\n }\n const outcome = this.crl.isRevoked(parsed, subjectCert.serialNumber);\n if (outcome.status === 'revoked') {\n return {\n status: 'revoked',\n source: 'crl',\n revokedAt: outcome.revokedAt,\n revocationReason: outcome.revocationReason,\n checkedAt: now,\n };\n }\n return { status: 'good', source: 'crl', checkedAt: now };\n } catch (err) {\n if (err instanceof RevocationCheckFailedError) throw err;\n console.warn(\n `[openid4vp] CRL check failed for ${subjectCert.subject} via ${url}: ${(err as Error).message}`\n );\n continue;\n }\n }\n\n // All sources failed.\n if (this.policy === 'require') {\n throw new RevocationCheckFailedError(\n `all revocation sources failed for ${subjectCert.subject}`\n );\n }\n return { status: 'unknown', source: 'none', checkedAt: now };\n }\n\n private extractUrls(cert: X509Certificate): { ocspUrl?: string; crlUrls: string[] } {\n const ocspUrl = extractOcspUrl(cert);\n const crlUrls = extractCrlUrls(cert);\n return { ocspUrl, crlUrls };\n }\n}\n\nfunction extractOcspUrl(cert: X509Certificate): string | undefined {\n const ext = cert.extensions.find((e) => e.type === '1.3.6.1.5.5.7.1.1');\n if (!ext) return undefined;\n try {\n const aia = AsnConvert.parse(new Uint8Array(ext.value), AuthorityInfoAccessSyntax);\n for (const desc of aia) {\n if (desc.accessMethod === '1.3.6.1.5.5.7.48.1') {\n const uri = desc.accessLocation.uniformResourceIdentifier;\n if (uri) return uri;\n }\n }\n } catch {\n return undefined;\n }\n return undefined;\n}\n\nfunction extractCrlUrls(cert: X509Certificate): string[] {\n const ext = cert.extensions.find((e) => e.type === '2.5.29.31');\n if (!ext) return [];\n try {\n const cdp = AsnConvert.parse(new Uint8Array(ext.value), CRLDistributionPoints);\n const out: string[] = [];\n for (const dp of cdp) {\n const fullName = dp.distributionPoint?.fullName;\n if (!fullName) continue;\n for (const gn of fullName) {\n if (gn.uniformResourceIdentifier) out.push(gn.uniformResourceIdentifier);\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n","/**\n * Map ETSI `AdditionalServiceInformation` URIs to eIDAS Regulation\n * (EU 910/2014) Article 8 levels of assurance. Per spec §8.5, absence\n * of a mapping means `loa` is omitted from the provenance block\n * (NOT mapped to 'low' — we never synthesize LoAs we did not observe).\n *\n * Source: ETSI TS 119 612 v2.2.1 Annex D + Commission Implementing\n * Decision (EU) 2015/1505.\n */\n\nexport const LOA_MAPPING: Readonly<Record<string, 'substantial' | 'high'>> = Object.freeze({\n // Qualified electronic signature / seal — substantial + high are both\n // expressed via `qualified` in ETSI, not LoA. The LoA URIs below apply to\n // electronic-identification services (eIDAS Article 8 notified schemes).\n 'http://uri.etsi.org/TrstSvc/TrustedList/SvcInfoExt/eIDASnotified-substantial':\n 'substantial',\n 'http://uri.etsi.org/TrstSvc/TrustedList/SvcInfoExt/eIDASnotified-high':\n 'high',\n 'http://uri.etsi.org/TrstSvc/TrustedList/SvcInfoExt/eIDAS-substantial':\n 'substantial',\n 'http://uri.etsi.org/TrstSvc/TrustedList/SvcInfoExt/eIDAS-high':\n 'high',\n});\n\nexport function mapLoA(\n uris: readonly string[]\n): 'substantial' | 'high' | undefined {\n // `high` wins over `substantial` when both are present.\n let result: 'substantial' | 'high' | undefined;\n for (const uri of uris) {\n const mapped = LOA_MAPPING[uri];\n if (mapped === 'high') return 'high';\n if (mapped === 'substantial') result = 'substantial';\n }\n return result;\n}\n","import { mapLoA } from './lotl-loa-mapping.js';\nimport type { TspService } from './lotl-types.js';\n\n/**\n * Derive the `qualified` + `loa` fields from a `TspService` per spec §8.5.\n * Returned by `LotlTrustStore` when it builds `LotlAnchorMetadata` and by\n * `ProvenanceResolver` when it builds the provenance block — keeping the\n * derivation in one place guarantees the two views agree.\n */\nexport function deriveServiceMetadata(service: TspService): {\n qualified: boolean;\n loa?: 'substantial' | 'high';\n} {\n const qualified =\n service.serviceTypeIdentifier.endsWith('/CA/QC') &&\n service.serviceStatus.endsWith('/granted');\n const loa = mapLoA(service.additionalServiceInformationUris);\n return loa !== undefined ? { qualified, loa } : { qualified };\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport type { NationalTlSnapshot, TspService } from './lotl-types.js';\nimport { deriveServiceMetadata } from './service-metadata.js';\nimport { getSkiHex } from './x509-utils.js';\n\nexport interface ResolvedProvenance {\n readonly provenance: {\n readonly loa?: 'substantial' | 'high';\n readonly qualified: boolean;\n readonly country: string;\n readonly serviceName: string;\n };\n readonly trustedAuthorityIds: readonly string[];\n}\n\n/**\n * Private — NOT exported from the package root. Maps a LOTL-sourced anchor\n * cert to its ETSI TS 119 612 `TSPService` entry across all national TLs.\n * Spec §8.5 qualified derivation is deterministic; loa derivation falls\n * back to `undefined` when the service's `AdditionalServiceInformation`\n * URIs don't map to a known LoA.\n */\nexport class ProvenanceResolver {\n resolve(\n anchor: X509Certificate,\n nationalTls: readonly NationalTlSnapshot[]\n ): ResolvedProvenance | null {\n const anchorSki = getSkiHex(anchor);\n if (!anchorSki) return null;\n for (const tl of nationalTls) {\n for (const service of tl.services) {\n if (serviceMatches(service, anchorSki)) {\n return buildProvenance(service, anchorSki);\n }\n }\n }\n return null;\n }\n}\n\nfunction serviceMatches(service: TspService, anchorSki: string): boolean {\n for (const cert of service.certificates) {\n const ski = getSkiHex(cert);\n if (ski && ski === anchorSki) return true;\n }\n return false;\n}\n\nfunction buildProvenance(\n service: TspService,\n anchorSki: string\n): ResolvedProvenance {\n const derived = deriveServiceMetadata(service);\n const provenance: ResolvedProvenance['provenance'] = {\n country: service.country,\n serviceName: service.serviceName,\n ...derived,\n };\n return {\n provenance,\n trustedAuthorityIds: [anchorSki],\n };\n}\n","import {\n AuthorityKeyIdentifierExtension,\n X509Certificate,\n} from '@peculiar/x509';\nimport { RevokedCertificateError, TrustAnchorNotFoundError } from '../errors.js';\nimport type { Cache } from './Cache.js';\nimport { ChainBuilder, type ChainBuilderOptions } from './ChainBuilder.js';\nimport type { Fetcher } from './Fetcher.js';\nimport { RevocationChecker } from './RevocationChecker.js';\nimport type { TrustAnchor } from './TrustAnchor.js';\nimport type { TrustStore } from './TrustStore.js';\nimport type { NationalTlSnapshot } from './lotl-types.js';\nimport { certificatesEqual, getSkiHex } from './x509-utils.js';\n\nexport type RevocationPolicy = 'skip' | 'prefer' | 'require';\n\nexport interface TrustEvaluatorOptions extends ChainBuilderOptions {\n trustStore: TrustStore;\n revocationPolicy?: RevocationPolicy;\n fetcher?: Fetcher;\n cache?: Cache;\n}\n\nexport interface EvaluateContext {\n intermediates?: X509Certificate[];\n}\n\nexport interface TrustEvaluationResult {\n chain: X509Certificate[];\n anchor: TrustAnchor;\n revocationStatus: 'good' | 'revoked' | 'unknown' | 'skipped';\n revocationCheckedAt?: Date;\n revokedAt?: Date;\n revocationReason?: string;\n trustedAuthorityIds?: readonly string[];\n provenance?: {\n loa?: 'substantial' | 'high';\n qualified?: boolean;\n country?: string;\n serviceName?: string;\n };\n}\n\n/**\n * Private internal coordinator — NOT exported from the package root.\n * Orchestrates `TrustStore` + `ChainBuilder` + `RevocationChecker` (A.2)\n * (+ `ProvenanceResolver` in A.3). Signature is stable across A.1/A.2/A.3\n * so parsers don't need to change when later workstreams land.\n */\nexport class TrustEvaluator {\n private readonly trustStore: TrustStore;\n private readonly chainBuilder: ChainBuilder;\n private readonly revocationChecker: RevocationChecker;\n\n constructor(private readonly opts: TrustEvaluatorOptions) {\n this.trustStore = opts.trustStore;\n this.chainBuilder = new ChainBuilder(opts);\n const policy = opts.revocationPolicy ?? 'skip';\n // A.2: policy='prefer'/'require' now supported.\n this.revocationChecker = new RevocationChecker({\n policy,\n fetcher: opts.fetcher,\n cache: opts.cache,\n });\n }\n\n async evaluate(\n leaf: X509Certificate,\n context: EvaluateContext = {}\n ): Promise<TrustEvaluationResult> {\n const hint = deriveHint(leaf);\n const seen = new Set<string>();\n const anchors: TrustAnchor[] = [];\n const pushUnique = (batch: TrustAnchor[]) => {\n for (const a of batch) {\n const key = a.certificate.serialNumber;\n if (seen.has(key)) continue;\n seen.add(key);\n anchors.push(a);\n }\n };\n pushUnique(await this.trustStore.getAnchors(hint));\n // When the leaf points to an intermediate (not a root in the store),\n // the direct leaf hint won't resolve. Ask the store about each\n // supplied intermediate too so a chain can close through them.\n for (const inter of context.intermediates ?? []) {\n pushUnique(await this.trustStore.getAnchors(deriveHint(inter)));\n }\n if (anchors.length === 0) {\n throw new TrustAnchorNotFoundError(\n `no trust anchor for issuer=${hint.issuer ?? '(none)'}`\n );\n }\n const anchorCerts = anchors.map((a) => a.certificate);\n const chain = await this.chainBuilder.build(\n leaf,\n anchorCerts,\n context.intermediates ?? []\n );\n const terminusCert = chain[chain.length - 1];\n // Select the anchor the chain actually closed at by DER byte-identity —\n // NOT by serialNumber (collidable across CAs) and NOT by a silent\n // fallback to anchors[0], which would attribute a chain to an anchor it\n // did not terminate at. `ChainBuilder` guarantees the terminus is one of\n // `anchorCerts`, so a miss here is a broken invariant, not a valid input.\n const anchor = anchors.find((a) =>\n certificatesEqual(a.certificate, terminusCert)\n );\n if (!anchor) {\n throw new TrustAnchorNotFoundError(\n `chain terminus ${terminusCert.subject} does not match any trust anchor certificate`\n );\n }\n\n // Revocation check — runs against the leaf (chain[0]) with the\n // leaf's direct issuer (chain[1]) as the signing CA.\n const issuerForRevocation = chain.length > 1 ? chain[1] : terminusCert;\n const revocation = await this.revocationChecker.check(\n leaf,\n issuerForRevocation\n );\n\n if (revocation.status === 'revoked') {\n throw new RevokedCertificateError(\n `certificate ${leaf.subject} is revoked`,\n {\n serial: leaf.serialNumber,\n revokedAt: revocation.revokedAt!,\n reason: revocation.revocationReason,\n }\n );\n }\n\n const trustedAuthorityIds = deriveAuthorityIds(anchor);\n const provenance = await resolveProvenance(this.trustStore, anchor);\n\n return {\n chain,\n anchor,\n // skip-policy yields source='none'/status='good' — keep the A.1\n // 'skipped' contract. Otherwise surface 'good' | 'unknown' as-is.\n revocationStatus:\n revocation.source === 'none' && revocation.status === 'good'\n ? 'skipped'\n : revocation.status,\n revocationCheckedAt: revocation.checkedAt,\n trustedAuthorityIds,\n ...(provenance ? { provenance } : {}),\n };\n }\n}\n\nfunction deriveHint(leaf: X509Certificate) {\n const aki = leaf.getExtension(AuthorityKeyIdentifierExtension);\n const keyIdHex = aki?.keyId;\n const akiBytes = keyIdHex ? hexToBytes(keyIdHex) : undefined;\n return {\n issuer: leaf.issuer,\n aki: akiBytes,\n };\n}\n\nfunction hexToBytes(s: string): Uint8Array {\n const clean = s.replace(/[^0-9a-f]/gi, '');\n const out = new Uint8Array(clean.length / 2);\n for (let i = 0; i < out.length; i++) {\n out[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\nfunction deriveAuthorityIds(anchor: TrustAnchor): readonly string[] {\n if (anchor.trustedAuthorityIds && anchor.trustedAuthorityIds.length > 0) {\n return anchor.trustedAuthorityIds;\n }\n // Static-store fallback: synthesize from the anchor's SKI.\n const ski = getSkiHex(anchor.certificate);\n return ski ? [ski] : [];\n}\n\nasync function resolveProvenance(\n store: TrustStore,\n anchor: TrustAnchor\n): Promise<TrustEvaluationResult['provenance']> {\n if (anchor.source !== 'lotl') return undefined;\n const withTls = store as TrustStore & {\n getNationalTls?: () => Promise<readonly NationalTlSnapshot[]>;\n };\n if (typeof withTls.getNationalTls !== 'function') return undefined;\n try {\n const tls = await withTls.getNationalTls();\n const { ProvenanceResolver } = await import('./ProvenanceResolver.js');\n const resolved = new ProvenanceResolver().resolve(anchor.certificate, tls);\n return resolved?.provenance;\n } catch (err) {\n console.warn(\n `[openid4vp] provenance lookup failed for ${anchor.certificate.subject} — ${(err as Error).message}`\n );\n return undefined;\n }\n}\n","// Load the reflect-metadata polyfill before any module that transitively pulls\n// in @peculiar/x509 (→ tsyringe), which reads decorator metadata while its\n// module body evaluates.\n//\n// Being first in this file is NOT sufficient for the published bundles — the\n// bundler hoists external named imports above bare side-effect imports. The\n// build therefore also injects this same module ahead of the entry; see\n// `inject` in tsup.config.ts and tests/bundle-polyfill-order.test.ts.\nimport './reflect-polyfill';\n\nexport const VERSION = '0.11.1';\n\n// Builders\nexport { createAuthorizationRequest } from './authorization.js';\nexport { createSignedAuthorizationRequest } from './signed-authorization.js';\nexport {\n buildHaipQuery,\n validateHaipQuery,\n isHaipQuery,\n HAIP_DOCTYPE_NAMESPACES,\n} from './haip.js';\n\n// Parsers / verifiers\nexport { parsePresentation } from './presentation.js';\nexport { verifyPresentation, verifyAuthorizationResponse } from './verify.js';\nexport { decryptAuthorizationResponse } from './decrypt-response.js';\nexport {\n buildOid4vpSessionTranscript,\n buildOpenID4VPHandoverSessionTranscript,\n} from './crypto/session-transcript.js';\nexport { SdJwtParser } from './parsers/sd-jwt.parser.js';\nexport { MdocParser } from './parsers/mdoc.parser.js';\nexport type { ICredentialParser, ParseOptions } from './parsers/parser.interface.js';\n\n// Own errors\nexport {\n InvalidSignatureError,\n ExpiredCredentialError,\n UnsupportedFormatError,\n MalformedCredentialError,\n NonceValidationError,\n HaipValidationError,\n} from './errors.js';\nexport type { HaipValidationCode } from './errors.js';\n\n// Re-exports from @openeudi/dcql\nexport { DcqlValidationError, DcqlMatchError } from '@openeudi/dcql';\nexport type { DcqlValidationErrorCode } from '@openeudi/dcql';\nexport type { DcqlQuery, DcqlMatchResult, DcqlSubmission } from '@openeudi/dcql';\n\n// Own types\nexport type {\n CredentialFormat,\n CredentialClaims,\n PresentationResult,\n IssuerInfo,\n AuthorizationRequestInput,\n AuthorizationRequest,\n SignedAuthorizationRequestInput,\n SignedAuthorizationRequest,\n AuthorizationResponse,\n EncryptedResponse,\n VerifyOptions,\n VerifyAuthorizationResponseOptions,\n VerifyResult,\n HaipQueryInput,\n} from './types/index.js';\n\n// -------------------------------------------------------------------\n// 0.5.0 trust module — public plug interfaces and implementations.\n// TrustEvaluator, ChainBuilder, and EU_LOTL_SIGNING_ANCHORS are\n// intentionally NOT exported — they are internal.\n// -------------------------------------------------------------------\nexport type { TrustAnchor, LotlAnchorMetadata } from './trust/TrustAnchor.js';\nexport type { Fetcher } from './trust/Fetcher.js';\nexport { InMemoryCache, type Cache } from './trust/Cache.js';\nexport {\n StaticTrustStore,\n CompositeTrustStore,\n LotlTrustStore,\n type TrustStore,\n type TrustStoreHint,\n type TrustStoreInput,\n type LotlTrustStoreOptions,\n} from './trust/index.js';\n\n// Error classes added in 0.5.0\nexport {\n OpenID4VPError,\n TrustAnchorNotFoundError,\n CertificateChainError,\n RevokedCertificateError,\n RevocationCheckFailedError,\n LotlFetchError,\n LotlSignatureError,\n SignedRequestBuildError,\n UnsupportedJweError,\n DecryptionFailedError,\n MissingDecryptionKeyError,\n MissingVerifierEncryptionKeyError,\n MultipleCredentialsNotSupportedError,\n type ChainErrorReason,\n type SignedRequestBuildErrorCode,\n} from './errors.js';\n","import { v4 as uuidv4 } from 'uuid';\nimport type { DcqlQuery } from '@openeudi/dcql';\n\nimport type { AuthorizationRequestInput, AuthorizationRequest } from './types/authorization.js';\n\nexport function createAuthorizationRequest(\n input: AuthorizationRequestInput,\n query: DcqlQuery,\n): AuthorizationRequest {\n if (!input.clientId) throw new TypeError('clientId is required');\n if (!input.nonce) throw new TypeError('nonce is required');\n if (!input.responseUri) throw new TypeError('responseUri is required');\n\n const state = input.state ?? uuidv4();\n const responseMode = input.responseMode ?? 'direct_post';\n\n const params = new URLSearchParams({\n response_type: 'vp_token',\n response_mode: responseMode,\n response_uri: input.responseUri,\n client_id: input.clientId,\n nonce: input.nonce,\n state,\n dcql_query: JSON.stringify(query),\n });\n\n return {\n uri: `openid4vp://authorize?${params.toString()}`,\n dcqlQuery: query,\n nonce: input.nonce,\n state,\n };\n}\n","import { v4 as uuidv4 } from 'uuid';\nimport { SignJWT } from 'jose';\nimport { X509Certificate } from '@peculiar/x509';\nimport type { DcqlQuery } from '@openeudi/dcql';\n\nimport { SignedRequestBuildError } from './errors.js';\nimport type {\n SignedAuthorizationRequestInput,\n SignedAuthorizationRequest,\n} from './types/authorization.js';\n\nconst DEFAULT_SUPPORTED_ENC_VALUES: readonly string[] = ['A128GCM', 'A256GCM'];\nconst SUPPORTED_SIGNING_ALGS = new Set(['ES256', 'ES384', 'RS256']);\n\n/**\n * Build a signed authorization request (JAR) per OpenID4VP 1.0 §5.10 / RFC 9101.\n *\n * Validates that the signing key is bound to the leaf certificate and that the\n * leaf cert's SAN DNSName equals the declared hostname. Emits a short URI\n * carrying only `client_id` + `request_uri`, plus the JWS string the caller\n * must host at `requestUri` with Content-Type `application/oauth-authz-req+jwt`.\n *\n * Client Identifier Prefix defaults to `x509_san_dns`; pass\n * `clientIdPrefix: 'x509_hash'` to use the leaf certificate's SHA-256 hash\n * instead (OpenID4VP 1.0 §5.9.3). `hostname` is required only for\n * `x509_san_dns`.\n */\nexport async function createSignedAuthorizationRequest(\n input: SignedAuthorizationRequestInput,\n query: DcqlQuery,\n): Promise<SignedAuthorizationRequest> {\n if (input.certificateChain.length === 0) {\n throw new SignedRequestBuildError(\n 'empty_cert_chain',\n 'certificateChain must contain at least the leaf certificate',\n );\n }\n\n const signingAlg = input.signingAlgorithm ?? 'ES256';\n if (!SUPPORTED_SIGNING_ALGS.has(signingAlg)) {\n throw new SignedRequestBuildError(\n 'unsupported_signing_alg',\n `signingAlgorithm ${signingAlg} is not supported (expected ES256/ES384/RS256)`,\n );\n }\n\n if (!input.vpFormatsSupported || Object.keys(input.vpFormatsSupported).length === 0) {\n throw new SignedRequestBuildError(\n 'missing_vp_formats',\n 'vpFormatsSupported is required and must be non-empty',\n );\n }\n\n const clientIdPrefix = input.clientIdPrefix ?? 'x509_san_dns';\n const leafCert = new X509Certificate(toArrayBuffer(input.certificateChain[0]));\n\n // `x509_san_dns` puts the hostname *in* the client_id, so it is mandatory\n // there. `x509_hash` derives the client_id from the certificate instead and\n // does not need one.\n if (clientIdPrefix === 'x509_san_dns' && !input.hostname) {\n throw new SignedRequestBuildError(\n 'missing_hostname',\n 'hostname is required for clientIdPrefix \"x509_san_dns\"',\n );\n }\n\n // Whenever a hostname IS supplied, bind it to the leaf SAN — for\n // `x509_san_dns` because the client_id asserts it, and for `x509_hash`\n // because silently ignoring a hostname the caller went out of their way to\n // provide would hide a misconfigured certificate.\n if (input.hostname) {\n const sanDnsNames = extractDnsNames(leafCert);\n if (!sanDnsNames.includes(input.hostname)) {\n throw new SignedRequestBuildError(\n 'hostname_cert_mismatch',\n `leaf cert SAN DNSName values [${sanDnsNames.join(', ')}] do not include hostname \"${input.hostname}\"`,\n );\n }\n }\n\n const signerPublicSpki = new Uint8Array(\n await crypto.subtle.exportKey('spki', input.signer.publicKey),\n );\n const leafSpki = new Uint8Array(leafCert.publicKey.rawData);\n if (!bytesEqual(signerPublicSpki, leafSpki)) {\n throw new SignedRequestBuildError(\n 'signing_key_cert_mismatch',\n 'signer.publicKey SPKI does not match leaf certificate SPKI',\n );\n }\n\n // HAIP 1.0 Final requires the verifier certificate to chain to a trust\n // anchor the wallet recognises. A self-signed leaf asserts an identity\n // nothing vouches for, so a wallet enforcing the profile rejects the request\n // object — better to fail here, at build time, than to ship a request no\n // conforming wallet will honour.\n //\n // isSelfSigned() verifies the signature against the certificate's own public\n // key rather than comparing Subject and Issuer DN strings. That distinction\n // matters: GHSA-4c2f-96cf-f5fc was a DN-string-equality bug, and a DN check\n // here would both miss a re-signed certificate and misjudge a legitimate\n // cross-signed one.\n if (input.allowSelfSignedCertificate !== true && (await leafCert.isSelfSigned())) {\n throw new SignedRequestBuildError(\n 'self_signed_leaf',\n 'leaf certificate is self-signed; HAIP 1.0 Final requires a certificate ' +\n 'chaining to a trust anchor. Pass allowSelfSignedCertificate: true to ' +\n 'override for local development or tests.',\n );\n }\n\n const responseMode = input.responseMode ?? 'direct_post.jwt';\n\n if (responseMode === 'direct_post.jwt') {\n if (!input.encryptionKey?.publicJwk) {\n throw new SignedRequestBuildError(\n 'missing_encryption_jwk',\n 'direct_post.jwt response mode requires encryptionKey.publicJwk',\n );\n }\n if (!input.encryptionKey.publicJwk.alg) {\n throw new SignedRequestBuildError(\n 'missing_encryption_alg',\n 'encryptionKey.publicJwk must carry alg (OpenID4VP 1.0 §8.3)',\n );\n }\n }\n\n const state = input.state ?? uuidv4();\n const clientId =\n clientIdPrefix === 'x509_hash'\n ? `x509_hash:${await sha256Base64Url(input.certificateChain[0])}`\n : `x509_san_dns:${input.hostname}`;\n const now = Math.floor(Date.now() / 1000);\n\n const clientMetadata: Record<string, unknown> = {\n vp_formats_supported: input.vpFormatsSupported,\n };\n\n if (responseMode === 'direct_post.jwt' && input.encryptionKey) {\n const enc = input.encryptionKey.supportedEncValues;\n if (enc !== undefined && enc.length === 0) {\n throw new SignedRequestBuildError(\n 'empty_supported_enc_values',\n 'encryptionKey.supportedEncValues must not be empty (omit to use defaults [A128GCM, A256GCM])',\n );\n }\n const jwk = { ...input.encryptionKey.publicJwk, use: 'enc' };\n clientMetadata.jwks = { keys: [jwk] };\n const encValues = enc ?? [...DEFAULT_SUPPORTED_ENC_VALUES];\n clientMetadata.encrypted_response_enc_values_supported = encValues;\n }\n\n const payload: Record<string, unknown> = {\n iss: clientId,\n aud: 'https://self-issued.me/v2',\n response_type: 'vp_token',\n response_mode: responseMode,\n client_id: clientId,\n response_uri: input.responseUri,\n nonce: input.nonce,\n state,\n dcql_query: query,\n client_metadata: clientMetadata,\n iat: now,\n exp: now + 120,\n };\n\n const x5c = input.certificateChain.map((der) => bytesToBase64(der));\n\n const jws = await new SignJWT(payload)\n .setProtectedHeader({ typ: 'oauth-authz-req+jwt', alg: signingAlg, x5c })\n .sign(input.signer.privateKey);\n\n const uriParams = new URLSearchParams({\n client_id: clientId,\n request_uri: input.requestUri,\n });\n\n return {\n uri: `openid4vp://authorize?${uriParams.toString()}`,\n requestObject: jws,\n dcqlQuery: query,\n nonce: input.nonce,\n state,\n };\n}\n\nfunction extractDnsNames(cert: X509Certificate): string[] {\n // The @peculiar/x509 SubjectAlternativeName extension is identified by OID\n // 2.5.29.17. Its `.names.items` (a GeneralNames collection) yields entries\n // with { type, value } — where `type: 'dns'` entries are DNSNames.\n const SAN_OID = '2.5.29.17';\n const ext = cert.extensions.find((e) => e.type === SAN_OID);\n if (!ext) return [];\n // Dynamic narrowing: the extension carries a `names` GeneralNames object.\n const names = (ext as unknown as { names?: { items?: Array<{ type: string; value: string }> } }).names;\n const items = names?.items ?? [];\n return items.filter((e) => e.type === 'dns').map((e) => e.value);\n}\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n// OpenID4VP 1.0 §5.9.3 (referenced by HAIP 1.0 Final for the x509_hash Client\n// Identifier Prefix): \"the base64url-encoded value of the SHA-256 hash of the\n// DER-encoded X.509 certificate\" of the leaf cert. Unpadded, per RFC 7515 §2.\nasync function sha256Base64Url(derCert: Uint8Array): Promise<string> {\n const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', toArrayBuffer(derCert)));\n return bytesToBase64(digest).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n}\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n // @peculiar/x509 expects ArrayBuffer (not ArrayBufferLike). Copy bytes to\n // a fresh ArrayBuffer to satisfy the type and handle any buffer backing.\n const out = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(out).set(bytes);\n return out;\n}\n","import type { DcqlQuery, CredentialQuery, ClaimsQuery } from '@openeudi/dcql';\nimport { HaipValidationError } from './errors.js';\nimport type { HaipQueryInput } from './types/haip.js';\n\nexport const HAIP_DOCTYPE_NAMESPACES: Record<string, string> = {\n 'org.iso.18013.5.1.mDL': 'org.iso.18013.5.1',\n 'eu.europa.ec.eudi.pid.1': 'eu.europa.ec.eudi.pid.1',\n};\n\nexport function buildHaipQuery(input: HaipQueryInput): DcqlQuery {\n if (input.claims.length === 0) {\n throw new HaipValidationError(\n 'NO_CLAIMS',\n `credential '${input.credentialId}' must declare at least one claim`,\n input.credentialId,\n );\n }\n\n let meta: CredentialQuery['meta'];\n let claims: ClaimsQuery[];\n\n if (input.format === 'dc+sd-jwt') {\n if (!input.vctValues || input.vctValues.length === 0) {\n throw new HaipValidationError(\n 'MISSING_SDJWT_META',\n `credential '${input.credentialId}' with format 'dc+sd-jwt' must provide non-empty vctValues`,\n input.credentialId,\n );\n }\n meta = { vct_values: input.vctValues };\n claims = input.claims.map((c) => ({ path: [c] }));\n } else {\n if (!input.doctypeValue) {\n throw new HaipValidationError(\n 'MISSING_MDOC_META',\n `credential '${input.credentialId}' with format 'mso_mdoc' must provide doctypeValue`,\n input.credentialId,\n );\n }\n meta = { doctype_value: input.doctypeValue };\n const namespace = HAIP_DOCTYPE_NAMESPACES[input.doctypeValue] ?? input.doctypeValue;\n claims = input.claims.map((c) => ({ path: [namespace, c] }));\n }\n\n const credential: CredentialQuery = {\n id: input.credentialId,\n format: input.format,\n meta,\n claims,\n };\n\n if (input.trustedAuthorities && input.trustedAuthorities.length > 0) {\n credential.trusted_authorities = input.trustedAuthorities;\n }\n\n return { credentials: [credential] };\n}\n\nconst HAIP_FORMATS = new Set<string>(['dc+sd-jwt', 'mso_mdoc']);\n\nexport function validateHaipQuery(query: DcqlQuery): void {\n if (!query.credentials || query.credentials.length === 0) {\n throw new HaipValidationError(\n 'EMPTY_QUERY',\n 'query.credentials must have at least one entry',\n );\n }\n\n if (query.credential_sets !== undefined) {\n throw new HaipValidationError(\n 'CREDENTIAL_SETS_DISALLOWED',\n 'credential_sets are not permitted in HAIP-minimal',\n );\n }\n\n for (const credential of query.credentials) {\n if (!HAIP_FORMATS.has(credential.format)) {\n throw new HaipValidationError(\n 'UNSUPPORTED_FORMAT',\n `credential '${credential.id}' uses unsupported format '${credential.format}' (allowed: dc+sd-jwt, mso_mdoc)`,\n credential.id,\n );\n }\n\n if (credential.format === 'dc+sd-jwt') {\n const vctValues = credential.meta?.vct_values;\n if (!vctValues || vctValues.length === 0) {\n throw new HaipValidationError(\n 'MISSING_SDJWT_META',\n `credential '${credential.id}' with format 'dc+sd-jwt' must set meta.vct_values`,\n credential.id,\n );\n }\n }\n\n if (credential.format === 'mso_mdoc') {\n if (typeof credential.meta?.doctype_value !== 'string') {\n throw new HaipValidationError(\n 'MISSING_MDOC_META',\n `credential '${credential.id}' with format 'mso_mdoc' must set meta.doctype_value`,\n credential.id,\n );\n }\n }\n\n if (!credential.claims || credential.claims.length === 0) {\n throw new HaipValidationError(\n 'NO_CLAIMS',\n `credential '${credential.id}' must declare at least one claim`,\n credential.id,\n );\n }\n\n if (credential.claim_sets !== undefined) {\n throw new HaipValidationError(\n 'CLAIM_SETS_DISALLOWED',\n `credential '${credential.id}' uses claim_sets, not permitted in HAIP-minimal`,\n credential.id,\n );\n }\n }\n}\n\nexport function isHaipQuery(query: DcqlQuery): boolean {\n try {\n validateHaipQuery(query);\n return true;\n } catch {\n return false;\n }\n}\n","import { MdocParser } from './parsers/mdoc.parser.js';\nimport type { ParseOptions, ICredentialParser } from './parsers/parser.interface.js';\nimport { SdJwtParser } from './parsers/sd-jwt.parser.js';\nimport type { PresentationResult } from './types/presentation.js';\n\nconst parsers: ICredentialParser[] = [new SdJwtParser(), new MdocParser()];\n\nexport async function parsePresentation(vpToken: unknown, options: ParseOptions): Promise<PresentationResult> {\n for (const parser of parsers) {\n if (parser.canParse(vpToken)) {\n return parser.parse(vpToken, options);\n }\n }\n\n return {\n valid: false,\n format: 'sd-jwt-vc',\n claims: {},\n issuer: { certificate: new Uint8Array(), country: '' },\n error: 'Unsupported credential format',\n };\n}\n\nexport type { ParseOptions } from './parsers/parser.interface.js';\n","import { Encoder as CborEncoder, Tag } from 'cbor-x';\nimport { importX509 } from 'jose';\n\nimport { decodeCoseSign1, verifyCoseSign1 } from '../crypto/cose-sign1.js';\nimport { verifyDeviceAuth } from '../crypto/device-auth.js';\nimport { verifyAllDigests } from '../crypto/digest.js';\nimport { decodeMso, validateMsoValidity, validateMsoDocType } from '../crypto/mso.js';\nimport { MalformedCredentialError, ExpiredCredentialError } from '../errors.js';\nimport type { TrustEvaluationResult } from '../trust/TrustEvaluator.js';\nimport type { IssuerInfo } from '../types/issuer.js';\nimport type { CredentialFormat, CredentialClaims, PresentationResult } from '../types/presentation.js';\n\nimport type { ICredentialParser, ParseOptions } from './parser.interface.js';\n\n// Decoder that preserves CBOR maps as JS Maps (cbor-x default converts them to objects).\nconst decoder = new CborEncoder({ mapsAsObjects: false, useRecords: false });\nconst encoder = new CborEncoder({ mapsAsObjects: false, useRecords: false });\n\nconst DEFAULT_ALLOWED_ALGORITHMS = ['ES256', 'ES384', 'ES512'];\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction derToPem(der: Uint8Array): string {\n let binary = '';\n for (const b of der) binary += String.fromCharCode(b);\n const b64 = globalThis.btoa(binary);\n const lines = b64.match(/.{1,64}/g) || [];\n return `-----BEGIN CERTIFICATE-----\\n${lines.join('\\n')}\\n-----END CERTIFICATE-----`;\n}\n\nfunction extractCountryHintFromCert(_certDer: Uint8Array): string {\n // Placeholder — full X.509 subject parsing is workstream 3.\n return '';\n}\n\n/**\n * Reconstructs the canonical CBOR byte-string header (major type 2) for a bstr of\n * the given length, using the shortest (deterministic) length encoding — matching\n * how wallets/issuers serialize IssuerSignedItemBytes. Content bytes are appended\n * verbatim by the caller.\n */\nfunction cborByteStringHeader(length: number): Uint8Array {\n if (length < 24) return Uint8Array.of(0x40 | length);\n if (length < 0x100) return Uint8Array.of(0x58, length);\n if (length < 0x10000) return Uint8Array.of(0x59, (length >> 8) & 0xff, length & 0xff);\n if (length < 0x100000000) {\n return Uint8Array.of(\n 0x5a,\n (length >>> 24) & 0xff,\n (length >>> 16) & 0xff,\n (length >>> 8) & 0xff,\n length & 0xff\n );\n }\n // 64-bit lengths (>4 GiB) never occur for a single IssuerSignedItem.\n const hi = Math.floor(length / 0x100000000);\n const lo = length >>> 0;\n return Uint8Array.of(\n 0x5b,\n (hi >>> 24) & 0xff,\n (hi >>> 16) & 0xff,\n (hi >>> 8) & 0xff,\n hi & 0xff,\n (lo >>> 24) & 0xff,\n (lo >>> 16) & 0xff,\n (lo >>> 8) & 0xff,\n lo & 0xff\n );\n}\n\n/**\n * Wraps inner IssuerSignedItem CBOR into IssuerSignedItemBytes = #6.24(bstr .cbor IssuerSignedItem):\n * 0xD8 0x18 ++ <bstr-header(inner.length)> ++ inner\n *\n * The inner content is copied verbatim (never re-encoded), so no map-key reordering\n * or int/bstr re-serialization can occur — only the deterministic tag+length header\n * is prepended. This reproduces the exact on-wire bytes the issuer hashed.\n */\nexport function wrapIssuerSignedItemBytes(inner: Uint8Array): Uint8Array {\n const header = cborByteStringHeader(inner.length);\n const out = new Uint8Array(2 + header.length + inner.length);\n out[0] = 0xd8;\n out[1] = 0x18;\n out.set(header, 2);\n out.set(inner, 2 + header.length);\n return out;\n}\n\n/**\n * Returns the full IssuerSignedItemBytes — the tag-24 encoding #6.24(bstr .cbor IssuerSignedItem)\n * — for a decoded nameSpaces element. This is the exact byte sequence ISO 18013-5 §9.1.2.4\n * commits in MSO.valueDigests, so it (not the inner CBOR) is what must be hashed.\n *\n * cbor-x decodes the single tag-24 wrapper to its inner content, so we reconstruct the\n * tag-24 header around that inner content. Three decode shapes arise:\n * A) Tag(24, Uint8Array) — production cbor-x path (no addExtension); .value = inner CBOR\n * B) EmbeddedCbor-like obj — test-fixture path (mdoc-helpers.ts registers a tag-24\n * addExtension globally); .value = inner CBOR\n * C) Plain Uint8Array — a bare bstr. If it already starts with the tag-24 prefix\n * (0xD8 0x18) it is IssuerSignedItemBytes as-is; otherwise it\n * is inner CBOR to be wrapped.\n */\nfunction extractRawItemBytes(item: unknown): Uint8Array {\n if (item instanceof Tag && item.tag === 24 && item.value instanceof Uint8Array) {\n return wrapIssuerSignedItemBytes(item.value);\n }\n if (item instanceof Uint8Array) {\n if (item.length >= 2 && item[0] === 0xd8 && item[1] === 0x18) {\n return item;\n }\n return wrapIssuerSignedItemBytes(item);\n }\n if (\n item !== null &&\n typeof item === 'object' &&\n !(item instanceof Tag) &&\n !(item instanceof Map) &&\n 'value' in (item as object) &&\n (item as { value: unknown }).value instanceof Uint8Array\n ) {\n return wrapIssuerSignedItemBytes((item as { value: Uint8Array }).value);\n }\n throw new MalformedCredentialError('IssuerSignedItem must be a tag-24 byte string');\n}\n\n/**\n * Maps raw IssuerSignedItem bytes (from all namespaces) to CredentialClaims\n * plus a namespace-grouped structure (for DCQL path addressing).\n *\n * Handles all three tag-24 shapes (Tag(24,bytes), EmbeddedCbor-like object, plain bytes).\n */\nfunction mapRawToClaims(nameSpaces: Map<string, Uint8Array[]>): {\n flat: CredentialClaims;\n namespaced: Record<string, Record<string, unknown>>;\n} {\n const flat: CredentialClaims = {};\n const namespaced: Record<string, Record<string, unknown>> = {};\n for (const [ns, items] of nameSpaces.entries()) {\n const nsBucket: Record<string, unknown> = namespaced[ns] ?? {};\n for (const itemBytes of items) {\n let decoded: unknown;\n try {\n decoded = decoder.decode(itemBytes);\n } catch {\n continue;\n }\n\n // Unwrap all three tag-24 shapes to get the inner CBOR bytes\n let inner: unknown;\n if (decoded instanceof Tag && decoded.tag === 24 && decoded.value instanceof Uint8Array) {\n // Path A: Tag(24, bytes)\n inner = decoder.decode(decoded.value as Uint8Array);\n } else if (\n decoded !== null &&\n typeof decoded === 'object' &&\n !(decoded instanceof Tag) &&\n !(decoded instanceof Map) &&\n !(decoded instanceof Uint8Array) &&\n 'value' in (decoded as object) &&\n (decoded as { value: unknown }).value instanceof Uint8Array\n ) {\n // Path B: EmbeddedCbor-like object from test fixture's addExtension\n inner = decoder.decode((decoded as { value: Uint8Array }).value);\n } else if (decoded instanceof Map) {\n // Path C: already a Map\n inner = decoded;\n } else {\n continue;\n }\n\n if (inner instanceof Map) {\n const id = (inner as Map<string, unknown>).get('elementIdentifier');\n const val = (inner as Map<string, unknown>).get('elementValue');\n if (typeof id === 'string') {\n (flat as Record<string, unknown>)[id] = val;\n nsBucket[id] = val;\n }\n }\n }\n namespaced[ns] = nsBucket;\n }\n return { flat, namespaced };\n}\n\n/**\n * mDOC / mDL credential parser.\n *\n * Decodes and validates mDOC (Mobile Document) credentials as specified in\n * ISO 18013-5 and the EUDI Wallet ecosystem. Composes the crypto modules\n * to perform full verification:\n * - COSE_Sign1 decode + signature verification\n * - MSO decode + validity + docType validation\n * - Digest verification for all IssuerSignedItems\n * - Issuer certificate trust chain check\n */\nexport class MdocParser implements ICredentialParser {\n readonly format: CredentialFormat = 'mdoc';\n\n /**\n * Returns true when the token is binary data (Uint8Array or Buffer),\n * indicating a CBOR-encoded mDOC DeviceResponse.\n * Buffer extends Uint8Array, so `instanceof Uint8Array` catches both.\n */\n canParse(vpToken: unknown): boolean {\n return vpToken instanceof Uint8Array;\n }\n\n /**\n * Parses and validates an mDOC DeviceResponse token.\n *\n * @throws {MalformedCredentialError} when the CBOR structure cannot be decoded\n * or does not match the expected DeviceResponse format\n */\n async parse(vpToken: unknown, options: ParseOptions): Promise<PresentationResult> {\n if (!(vpToken instanceof Uint8Array)) {\n throw new MalformedCredentialError('mDOC vpToken must be a Uint8Array');\n }\n const allowedAlgorithms = options.allowedAlgorithms ?? DEFAULT_ALLOWED_ALGORITHMS;\n\n // Step 1: Decode DeviceResponse\n let deviceResponse: Map<unknown, unknown>;\n try {\n const decoded = decoder.decode(vpToken);\n if (!(decoded instanceof Map)) throw new Error();\n deviceResponse = decoded as Map<unknown, unknown>;\n } catch {\n throw new MalformedCredentialError('vpToken is not a CBOR DeviceResponse Map');\n }\n\n // Step 2: Extract first document\n const docs = deviceResponse.get('documents');\n if (!Array.isArray(docs) || docs.length === 0) {\n throw new MalformedCredentialError('DeviceResponse has no documents');\n }\n const document = docs[0];\n if (!(document instanceof Map)) {\n throw new MalformedCredentialError('document must be a Map');\n }\n const issuerSigned = document.get('issuerSigned');\n if (!(issuerSigned instanceof Map)) {\n throw new MalformedCredentialError('document.issuerSigned must be a Map');\n }\n const issuerAuth = issuerSigned.get('issuerAuth');\n if (!Array.isArray(issuerAuth)) {\n throw new MalformedCredentialError('issuerAuth must be a COSE_Sign1 array');\n }\n\n // Re-encode issuerAuth as bytes so we can pass to decodeCoseSign1\n const issuerAuthBytes = encoder.encode(issuerAuth);\n\n // Step 3: Decode COSE_Sign1 + algorithm check\n const cose = decodeCoseSign1(issuerAuthBytes);\n if (!allowedAlgorithms.includes(cose.alg)) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: new Uint8Array(), country: '' },\n error: `Unsupported algorithm: ${cose.alg}`,\n };\n }\n\n // Step 4: Trust check (reuse 0.2.1 skipTrustCheck semantics)\n const issuerCertBytes = cose.x5chain[0];\n if (!issuerCertBytes) {\n throw new MalformedCredentialError('Missing issuer certificate in x5chain');\n }\n\n let trustResult: TrustEvaluationResult | undefined;\n\n if (options.trustStore) {\n // 0.5.0 path: RFC 5280 chain validation via TrustEvaluator.\n // Dynamic import keeps the evaluator out of 0.4.0-style callers' bundles.\n const { TrustEvaluator } = await import('../trust/TrustEvaluator.js');\n const evaluator = new TrustEvaluator({\n trustStore: options.trustStore,\n revocationPolicy: options.revocationPolicy ?? 'skip',\n fetcher: options.fetcher,\n cache: options.cache,\n clockSkewTolerance: options.clockSkewTolerance,\n });\n const { X509Certificate } = await import('@peculiar/x509');\n const leaf = new X509Certificate(issuerCertBytes as Uint8Array<ArrayBuffer>);\n trustResult = await evaluator.evaluate(leaf);\n } else {\n // 0.4.0 byte-equality path — preserved verbatim for backward compatibility.\n if (options.trustedCertificates.length === 0) {\n if (options.skipTrustCheck !== true) {\n throw new MalformedCredentialError(\n 'trustedCertificates must not be empty unless skipTrustCheck is true'\n );\n }\n } else {\n const trusted = options.trustedCertificates.some((t) => bytesEqual(t, issuerCertBytes));\n if (!trusted) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'Issuer certificate is not trusted',\n };\n }\n }\n }\n\n // Step 5: Import public key + verify signature\n const publicKey = await importX509(derToPem(issuerCertBytes), cose.alg);\n try {\n await verifyCoseSign1(cose, publicKey, allowedAlgorithms);\n } catch (err) {\n if (err instanceof MalformedCredentialError) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: err.message,\n };\n }\n throw err;\n }\n\n // Step 6: Decode + validate MSO\n const mso = decodeMso(cose.payload);\n try {\n validateMsoValidity(mso, new Date());\n } catch (err) {\n if (err instanceof ExpiredCredentialError) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'Credential expired',\n };\n }\n throw err;\n }\n\n if (options.expectedDocType !== undefined) {\n try {\n validateMsoDocType(mso, options.expectedDocType);\n } catch (err) {\n if (err instanceof MalformedCredentialError) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: err.message,\n };\n }\n throw err;\n }\n }\n\n // Step 7: Extract items from nameSpaces, verify all digests\n const nsRaw = issuerSigned.get('nameSpaces');\n if (!(nsRaw instanceof Map)) {\n throw new MalformedCredentialError('issuerSigned.nameSpaces must be a Map');\n }\n const nameSpaces = new Map<string, Uint8Array[]>();\n for (const [ns, items] of (nsRaw as Map<unknown, unknown>).entries()) {\n if (typeof ns !== 'string' || !Array.isArray(items)) {\n throw new MalformedCredentialError('nameSpaces entry malformed');\n }\n nameSpaces.set(ns, items.map(extractRawItemBytes));\n }\n await verifyAllDigests(nameSpaces, mso);\n\n // Step 7.5: Device authentication (ISO 18013-5 §9.1.3) — holder proof-of-\n // possession. Without this an attacker who captures another holder's\n // `issuerSigned` structure can replay it, because issuerAuth alone carries\n // no binding to the presenter or the current session/nonce. Fail closed.\n // (CWE-294 capture-replay · CWE-345 insufficient authenticity verification)\n const deviceSigned = document.get('deviceSigned');\n if (!(deviceSigned instanceof Map)) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'Missing deviceSigned — mDOC device authentication is required',\n };\n }\n if (!(options.mdocSessionTranscript instanceof Uint8Array) || options.mdocSessionTranscript.length === 0) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'mdocSessionTranscript is required to verify mDOC device authentication',\n };\n }\n if (!mso.deviceKey) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'MSO is missing deviceKeyInfo.deviceKey; cannot verify device authentication',\n };\n }\n try {\n await verifyDeviceAuth({\n deviceSigned: deviceSigned as Map<unknown, unknown>,\n deviceKeyCose: mso.deviceKey,\n docType: mso.docType,\n sessionTranscript: options.mdocSessionTranscript,\n allowedAlgorithms,\n });\n } catch (err) {\n if (err instanceof MalformedCredentialError) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: err.message,\n };\n }\n throw err;\n }\n\n // Step 8: Map to claims\n const { flat: claims, namespaced: namespacedClaims } = mapRawToClaims(nameSpaces);\n\n const issuer: IssuerInfo = {\n certificate: issuerCertBytes,\n country: extractCountryHintFromCert(issuerCertBytes),\n };\n const result: PresentationResult = {\n valid: true,\n format: this.format,\n claims,\n issuer,\n docType: mso.docType,\n namespacedClaims,\n };\n if (trustResult) result.trust = trustResult;\n return result;\n }\n}\n","import { Encoder as CborEncoder, Tag } from 'cbor-x';\n\nimport { MalformedCredentialError } from '../errors.js';\n\n// Decoder that preserves CBOR maps as JS Maps (cbor-x default converts them to\n// objects). `tagUint8Array: false` is REQUIRED for COSE correctness: cbor-x\n// otherwise encodes a plain `Uint8Array` with the typed-array tag 64 (0xd8 0x40)\n// instead of a plain CBOR byte string (major type 2). The COSE `Sig_structure`'s\n// empty `external_aad` must be a plain bstr per RFC 9052 §4.4 — with the default\n// tagging our recomputed Sig_input did not match what conformant issuers sign,\n// so real-world mdocs failed verification. Only affects encoding; decoding of\n// already-plain byte strings is unchanged.\nconst decoder = new CborEncoder({ mapsAsObjects: false, useRecords: false, tagUint8Array: false });\n\n/**\n * COSE label for the `alg` header parameter.\n */\nconst HEADER_ALG = 1;\n\n/**\n * COSE label for the `x5chain` header parameter (RFC 9360).\n */\nconst HEADER_X5CHAIN = 33;\n\nconst COSE_ALG_TO_NAME: Record<number, string> = {\n [-7]: 'ES256',\n [-35]: 'ES384',\n [-36]: 'ES512',\n};\n\nexport interface CoseSign1 {\n protectedHeaderBytes: Uint8Array;\n protectedHeader: Map<number, unknown>;\n unprotectedHeader: Map<number, unknown>;\n payload: Uint8Array;\n signature: Uint8Array;\n x5chain: Uint8Array[];\n alg: 'ES256' | 'ES384' | 'ES512';\n}\n\nexport function decodeCoseSign1(bytes: Uint8Array): CoseSign1 {\n let outer: unknown = decoder.decode(bytes);\n if (outer instanceof Tag && outer.tag === 18) {\n // tag-18 value may be the raw bytes of the COSE_Sign1 structure — decode again\n const tagValue = outer.value;\n outer = tagValue instanceof Uint8Array ? decoder.decode(tagValue) : tagValue;\n }\n if (!Array.isArray(outer) || outer.length !== 4) {\n throw new MalformedCredentialError('COSE_Sign1 must be a CBOR array of length 4');\n }\n const [protectedHeaderBytes, unprotectedHeader, payloadRaw, signature] = outer;\n if (!(protectedHeaderBytes instanceof Uint8Array)) {\n throw new MalformedCredentialError('COSE_Sign1 protected header must be a bstr');\n }\n if (!(unprotectedHeader instanceof Map)) {\n throw new MalformedCredentialError('COSE_Sign1 unprotected header must be a Map');\n }\n if (!(signature instanceof Uint8Array)) {\n throw new MalformedCredentialError('COSE_Sign1 signature must be a bstr');\n }\n\n let protectedHeader: Map<number, unknown>;\n try {\n const decoded = decoder.decode(protectedHeaderBytes);\n if (!(decoded instanceof Map)) {\n throw new Error('protected header not a Map');\n }\n protectedHeader = decoded as Map<number, unknown>;\n } catch {\n throw new MalformedCredentialError('COSE_Sign1 protected header is not decodable CBOR');\n }\n\n const algLabel = protectedHeader.get(HEADER_ALG);\n const alg = typeof algLabel === 'number' ? COSE_ALG_TO_NAME[algLabel] : undefined;\n if (!alg) {\n throw new MalformedCredentialError(`COSE_Sign1 uses unknown alg label: ${String(algLabel)}`);\n }\n\n // Payload may be a bstr, tag-24 bstr (embedded CBOR), or absent (detached — not supported here)\n let payload: Uint8Array;\n if (payloadRaw instanceof Uint8Array) {\n payload = payloadRaw;\n } else if (payloadRaw instanceof Tag && payloadRaw.tag === 24 && payloadRaw.value instanceof Uint8Array) {\n payload = payloadRaw.value;\n } else {\n throw new MalformedCredentialError('COSE_Sign1 payload must be a byte string');\n }\n\n // x5chain may be a single cert bstr or an array of bstrs\n const x5raw = unprotectedHeader.get(HEADER_X5CHAIN);\n let x5chain: Uint8Array[];\n if (x5raw === undefined) {\n throw new MalformedCredentialError('COSE_Sign1 missing x5chain in unprotected header (label 33)');\n }\n if (x5raw instanceof Uint8Array) {\n x5chain = [x5raw];\n } else if (Array.isArray(x5raw) && x5raw.every((v) => v instanceof Uint8Array)) {\n x5chain = x5raw as Uint8Array[];\n } else {\n throw new MalformedCredentialError('COSE_Sign1 x5chain must be a bstr or array of bstr');\n }\n\n return {\n protectedHeaderBytes,\n protectedHeader,\n unprotectedHeader: unprotectedHeader as Map<number, unknown>,\n payload,\n signature,\n x5chain,\n alg: alg as 'ES256' | 'ES384' | 'ES512',\n };\n}\n\nconst ALG_TO_HASH: Record<string, string> = {\n ES256: 'SHA-256',\n ES384: 'SHA-384',\n ES512: 'SHA-512',\n};\n\n/**\n * Verifies the COSE_Sign1 signature using the provided public key.\n * Throws when the algorithm is not in the allowlist or the signature is invalid.\n */\nexport async function verifyCoseSign1(\n coseSign1: CoseSign1,\n publicKey: CryptoKey,\n allowedAlgorithms: string[]\n): Promise<void> {\n if (!allowedAlgorithms.includes(coseSign1.alg)) {\n throw new MalformedCredentialError(`COSE_Sign1 algorithm ${coseSign1.alg} not in allowlist`);\n }\n const hashAlg = ALG_TO_HASH[coseSign1.alg];\n if (!hashAlg) {\n throw new MalformedCredentialError(`no hash mapping for alg ${coseSign1.alg}`);\n }\n\n // Sig_structure1 = [\"Signature1\", protected_header_bytes, external_aad (empty bstr), payload]\n // coseSign1.payload is the raw bstr from the COSE array — it already contains the tag-24\n // encoded MSO bytes as stored by the signer, so we use it directly without re-wrapping.\n const sigStructure = ['Signature1', coseSign1.protectedHeaderBytes, new Uint8Array(0), coseSign1.payload];\n // cbor-x's encode() returns a Buffer<ArrayBufferLike>; copy into a Uint8Array<ArrayBuffer>\n // so the strict BufferSource shape (post-@types/node) is satisfied.\n const sigInput = new Uint8Array(decoder.encode(sigStructure)) as Uint8Array<ArrayBuffer>;\n\n const ok = await crypto.subtle.verify(\n { name: 'ECDSA', hash: hashAlg },\n publicKey,\n new Uint8Array(coseSign1.signature) as Uint8Array<ArrayBuffer>,\n sigInput\n );\n if (!ok) {\n throw new MalformedCredentialError('COSE_Sign1 signature verification failed');\n }\n}\n","import { Encoder as CborEncoder } from 'cbor-x';\n\nimport { MalformedCredentialError } from '../errors.js';\n\n// Plain-bstr encoder (tagUint8Array:false → byte strings are major-type-2, not\n// the typed-array tag 64), matching how conformant issuers/holders encode COSE.\nconst enc = new CborEncoder({ mapsAsObjects: false, useRecords: false, tagUint8Array: false });\n\nconst HEADER_ALG = 1;\nconst COSE_ALG_TO_NAME: Record<number, 'ES256' | 'ES384' | 'ES512'> = {\n [-7]: 'ES256',\n [-35]: 'ES384',\n [-36]: 'ES512',\n};\nconst ALG_TO_HASH: Record<string, string> = { ES256: 'SHA-256', ES384: 'SHA-384', ES512: 'SHA-512' };\n\n// COSE_Key (EC2) label map and curve labels (RFC 9052 / RFC 9053).\nconst COSE_KEY_KTY = 1;\nconst COSE_KEY_CRV = -1;\nconst COSE_KEY_X = -2;\nconst COSE_KEY_Y = -3;\nconst COSE_KTY_EC2 = 2;\nconst COSE_CRV_TO_JWK: Record<number, string> = { 1: 'P-256', 2: 'P-384', 3: 'P-521' };\n\nfunction concatBytes(...chunks: Uint8Array[]): Uint8Array {\n let len = 0;\n for (const c of chunks) len += c.length;\n const out = new Uint8Array(len);\n let off = 0;\n for (const c of chunks) {\n out.set(c, off);\n off += c.length;\n }\n return out;\n}\n\nfunction bytesToBase64Url(bytes: Uint8Array): string {\n let bin = '';\n for (const b of bytes) bin += String.fromCharCode(b);\n return globalThis.btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/** Encode a CBOR tag-24 (embedded CBOR) wrapping `inner` as a byte string. */\nfunction encodeTag24(inner: Uint8Array): Uint8Array {\n // 0xD8 0x18 = tag(24); enc.encode(Uint8Array) yields the bstr encoding of `inner`.\n return concatBytes(new Uint8Array([0xd8, 0x18]), new Uint8Array(enc.encode(inner)));\n}\n\n/**\n * Deterministically build `DeviceAuthenticationBytes` per ISO 18013-5 §9.1.3.4:\n *\n * DeviceAuthentication = [ \"DeviceAuthentication\", SessionTranscript, DocType,\n * DeviceNameSpacesBytes ]\n * DeviceAuthenticationBytes = #6.24(bstr .cbor DeviceAuthentication)\n *\n * The SessionTranscript is spliced in as its exact caller-supplied bytes (never\n * decoded/re-encoded) so the digest input is byte-identical to what the holder\n * signed. Shared by the verifier and the test fixture to guarantee that.\n *\n * @param sessionTranscript CBOR bytes of the SessionTranscript data item.\n * @param docType mDOC docType string.\n * @param deviceNameSpacesInner CBOR bytes of the DeviceNameSpaces map (the\n * content wrapped by the tag-24 DeviceNameSpacesBytes).\n */\nexport function buildDeviceAuthenticationBytes(params: {\n sessionTranscript: Uint8Array;\n docType: string;\n deviceNameSpacesInner: Uint8Array;\n}): Uint8Array {\n const deviceAuthentication = concatBytes(\n new Uint8Array([0x84]), // array(4)\n new Uint8Array(enc.encode('DeviceAuthentication')),\n params.sessionTranscript,\n new Uint8Array(enc.encode(params.docType)),\n encodeTag24(params.deviceNameSpacesInner),\n );\n return encodeTag24(deviceAuthentication);\n}\n\n/** Encode the COSE `Sig_structure` for a detached-payload Signature1. */\nexport function encodeDeviceSigStructure(protectedBytes: Uint8Array, deviceAuthBytes: Uint8Array): Uint8Array {\n const sig = ['Signature1', protectedBytes, new Uint8Array(0), deviceAuthBytes];\n return new Uint8Array(enc.encode(sig));\n}\n\n/** Import an mdoc device public key from its COSE_Key (EC2) representation. */\nexport async function importDeviceKeyFromCose(coseKey: unknown): Promise<CryptoKey> {\n if (!(coseKey instanceof Map)) {\n throw new MalformedCredentialError('MSO deviceKeyInfo.deviceKey is not a COSE_Key map');\n }\n const kty = coseKey.get(COSE_KEY_KTY);\n if (kty !== COSE_KTY_EC2) {\n throw new MalformedCredentialError(`Unsupported COSE key type for device key: ${String(kty)}`);\n }\n const crv = coseKey.get(COSE_KEY_CRV);\n const crvName = typeof crv === 'number' ? COSE_CRV_TO_JWK[crv] : undefined;\n const x = coseKey.get(COSE_KEY_X);\n const y = coseKey.get(COSE_KEY_Y);\n if (!crvName || !(x instanceof Uint8Array) || !(y instanceof Uint8Array)) {\n throw new MalformedCredentialError('Malformed EC2 COSE_Key in MSO deviceKeyInfo');\n }\n return crypto.subtle.importKey(\n 'jwk',\n { kty: 'EC', crv: crvName, x: bytesToBase64Url(x), y: bytesToBase64Url(y) },\n { name: 'ECDSA', namedCurve: crvName },\n false,\n ['verify'],\n );\n}\n\n/**\n * Verify mdoc device authentication (ISO 18013-5 §9.1.3): the holder proves\n * possession of the MSO-committed device key by signing the DeviceAuthentication\n * (which binds the SessionTranscript/nonce). Throws {@link MalformedCredentialError}\n * when the DeviceSignature is missing, malformed, uses a disallowed algorithm, or\n * fails to verify. DeviceMac (COSE_Mac0) is not supported and is rejected.\n */\nexport async function verifyDeviceAuth(params: {\n deviceSigned: Map<unknown, unknown>;\n deviceKeyCose: unknown;\n docType: string;\n sessionTranscript: Uint8Array;\n allowedAlgorithms: string[];\n}): Promise<void> {\n const { deviceSigned, deviceKeyCose, docType, sessionTranscript, allowedAlgorithms } = params;\n\n const deviceAuth = deviceSigned.get('deviceAuth');\n if (!(deviceAuth instanceof Map)) {\n throw new MalformedCredentialError('deviceSigned.deviceAuth is missing or malformed');\n }\n if (deviceAuth.has('deviceMac') && !deviceAuth.has('deviceSignature')) {\n throw new MalformedCredentialError('mDOC DeviceMac authentication is not supported');\n }\n const deviceSignature = deviceAuth.get('deviceSignature');\n if (!Array.isArray(deviceSignature) || deviceSignature.length !== 4) {\n throw new MalformedCredentialError('deviceAuth.deviceSignature must be a COSE_Sign1 array');\n }\n const protectedBytes = deviceSignature[0];\n const signature = deviceSignature[3];\n if (!(protectedBytes instanceof Uint8Array) || !(signature instanceof Uint8Array)) {\n throw new MalformedCredentialError('DeviceSignature protected header / signature must be byte strings');\n }\n\n let alg: 'ES256' | 'ES384' | 'ES512' | undefined;\n try {\n const ph = enc.decode(protectedBytes);\n const label = ph instanceof Map ? ph.get(HEADER_ALG) : undefined;\n alg = typeof label === 'number' ? COSE_ALG_TO_NAME[label] : undefined;\n } catch {\n throw new MalformedCredentialError('DeviceSignature protected header is not decodable CBOR');\n }\n if (!alg || !allowedAlgorithms.includes(alg)) {\n throw new MalformedCredentialError(`DeviceSignature uses a disallowed algorithm: ${String(alg)}`);\n }\n\n // DeviceNameSpacesBytes = deviceSigned[\"nameSpaces\"] (a tag-24 wrapped map).\n // Extract the inner CBOR bytes so we can rebuild the digest input identically.\n const deviceNameSpacesInner = extractTag24Inner(deviceSigned.get('nameSpaces'));\n\n const deviceAuthBytes = buildDeviceAuthenticationBytes({ sessionTranscript, docType, deviceNameSpacesInner });\n const sigInput = encodeDeviceSigStructure(protectedBytes, deviceAuthBytes);\n\n const deviceKey = await importDeviceKeyFromCose(deviceKeyCose);\n const ok = await crypto.subtle.verify(\n { name: 'ECDSA', hash: ALG_TO_HASH[alg] },\n deviceKey,\n new Uint8Array(signature) as Uint8Array<ArrayBuffer>,\n sigInput as Uint8Array<ArrayBuffer>,\n );\n if (!ok) {\n throw new MalformedCredentialError('mDOC device authentication (DeviceSignature) failed to verify');\n }\n}\n\n/**\n * Extract the inner CBOR bytes of a tag-24 wrapped value across the three shapes\n * that arise (Tag(24,bytes) in production, EmbeddedCbor-like in tests, or a plain\n * bstr already holding the inner bytes).\n */\nfunction extractTag24Inner(value: unknown): Uint8Array {\n if (value instanceof Uint8Array) return value;\n if (\n value !== null &&\n typeof value === 'object' &&\n 'value' in (value as object) &&\n (value as { value: unknown }).value instanceof Uint8Array &&\n // Tag(24,bytes) and EmbeddedCbor both expose .value; both are fine here.\n ('tag' in (value as object) ? (value as { tag: unknown }).tag === 24 : true)\n ) {\n return (value as { value: Uint8Array }).value;\n }\n throw new MalformedCredentialError('deviceSigned.nameSpaces must be tag-24 wrapped CBOR');\n}\n","import { Encoder as CborEncoder, Tag } from 'cbor-x';\n\nimport { MalformedCredentialError } from '../errors.js';\n\nimport type { MobileSecurityObject } from './mso.js';\n\n// Decoder that preserves CBOR maps as JS Maps (cbor-x default converts them to objects).\nconst decoder = new CborEncoder({ mapsAsObjects: false, useRecords: false });\n\nconst ALLOWED_HASH_ALGS = new Set(['SHA-256', 'SHA-384', 'SHA-512']);\n\nexport async function computeItemDigest(itemBytes: Uint8Array, digestAlgorithm: string): Promise<Uint8Array> {\n if (!ALLOWED_HASH_ALGS.has(digestAlgorithm)) {\n throw new MalformedCredentialError(`Unknown digest algorithm: ${digestAlgorithm}`);\n }\n // Copy into a plain Uint8Array<ArrayBuffer> to satisfy TypeScript's BufferSource constraint.\n const buf = await crypto.subtle.digest(digestAlgorithm, new Uint8Array(itemBytes));\n return new Uint8Array(buf);\n}\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n/**\n * Unwrap an IssuerSignedItem from its tag-24 encoding and return the inner Map.\n *\n * Three shapes arise depending on test vs. production paths:\n * A) Tag(24, Uint8Array) — production cbor-x path (no addExtension)\n * B) EmbeddedCbor-like obj — test-fixture path (addExtension in mdoc-helpers.ts registers a\n * custom class whose instances have `.value: Uint8Array`)\n * C) Plain Map — if cbor-x auto-unwraps deeper than expected\n */\nfunction unwrapItemMap(itemBytes: Uint8Array): Map<string, unknown> {\n let decoded: unknown;\n try {\n decoded = decoder.decode(itemBytes);\n } catch {\n throw new MalformedCredentialError('IssuerSignedItem is not decodable CBOR');\n }\n\n let inner: unknown;\n if (decoded instanceof Tag && decoded.tag === 24 && decoded.value instanceof Uint8Array) {\n // Path A: tag-24 Tag object\n inner = decoder.decode(decoded.value as Uint8Array);\n } else if (\n decoded !== null &&\n typeof decoded === 'object' &&\n !(decoded instanceof Tag) &&\n !(decoded instanceof Map) &&\n !(decoded instanceof Uint8Array) &&\n 'value' in (decoded as object) &&\n (decoded as { value: unknown }).value instanceof Uint8Array\n ) {\n // Path B: EmbeddedCbor-like object from test fixture's addExtension\n inner = decoder.decode((decoded as { value: Uint8Array }).value);\n } else if (decoded instanceof Map) {\n // Path C: already a Map\n inner = decoded;\n } else {\n throw new MalformedCredentialError('IssuerSignedItem must be a tag-24 wrapped CBOR Map');\n }\n\n if (!(inner instanceof Map)) {\n throw new MalformedCredentialError('IssuerSignedItem must decode to a Map');\n }\n return inner as Map<string, unknown>;\n}\n\n/**\n * Verifies every IssuerSignedItem across every namespace against the MSO's valueDigests.\n * All items must match — no partial acceptance.\n *\n * @param nameSpaces Per-namespace arrays of tag-24-wrapped IssuerSignedItem bytes\n * (exactly the bytes used as digest input during issuance).\n * @param mso Decoded MobileSecurityObject carrying the expected valueDigests.\n */\nexport async function verifyAllDigests(\n nameSpaces: Map<string, Uint8Array[]>,\n mso: MobileSecurityObject\n): Promise<void> {\n for (const [ns, items] of nameSpaces) {\n const expected = mso.valueDigests.get(ns);\n if (!expected) {\n throw new MalformedCredentialError(`namespace ${ns} has no valueDigests entry in MSO`);\n }\n for (const itemBytes of items) {\n // Hash the raw tag-24 bytes — this is what the issuer hashed during issuance.\n const hash = await computeItemDigest(itemBytes, mso.digestAlgorithm);\n\n // Decode to extract digestID for lookup.\n const item = unwrapItemMap(itemBytes);\n const digestID = item.get('digestID');\n if (typeof digestID !== 'number') {\n throw new MalformedCredentialError('IssuerSignedItem missing digestID');\n }\n\n const expectedDigest = expected.get(digestID);\n if (!expectedDigest) {\n throw new MalformedCredentialError(`digestID ${digestID} missing from MSO valueDigests[${ns}]`);\n }\n if (!bytesEqual(hash, expectedDigest)) {\n throw new MalformedCredentialError(`digest mismatch for ns=${ns} digestID=${digestID}`);\n }\n }\n }\n}\n","import { Encoder as CborEncoder, Tag } from 'cbor-x';\n\nimport { MalformedCredentialError, ExpiredCredentialError } from '../errors.js';\n\n// Decoder that preserves CBOR maps as JS Maps (cbor-x default converts them to objects).\nconst decoder = new CborEncoder({ mapsAsObjects: false, useRecords: false });\n\nexport interface MobileSecurityObject {\n version: string;\n digestAlgorithm: string;\n valueDigests: Map<string, Map<number, Uint8Array>>;\n docType: string;\n /**\n * The holder device public key committed by the issuer\n * (`deviceKeyInfo.deviceKey`), as its raw COSE_Key map. Required to verify\n * mdoc device authentication (ISO 18013-5 §9.1.3). Undefined only for\n * malformed MSOs that omit it.\n */\n deviceKey?: Map<number, unknown>;\n validityInfo: {\n signed: Date;\n validFrom: Date;\n validUntil: Date;\n expectedUpdate?: Date;\n };\n}\n\nfunction decodeDateLike(value: unknown): Date {\n if (value instanceof Date) return value;\n if (value instanceof Tag) {\n // Tag 0 = RFC 3339 string; Tag 1 = epoch seconds; Tag 1004 = full-date (YYYY-MM-DD)\n if (value.tag === 0 && typeof value.value === 'string') {\n return new Date(value.value);\n }\n if (value.tag === 1 && typeof value.value === 'number') {\n return new Date(value.value * 1000);\n }\n if (value.tag === 1004 && typeof value.value === 'string') {\n return new Date(value.value);\n }\n }\n if (typeof value === 'string') {\n return new Date(value);\n }\n throw new MalformedCredentialError(`unsupported date encoding in MSO: ${typeof value}`);\n}\n\nexport function decodeMso(payload: Uint8Array): MobileSecurityObject {\n let raw: unknown;\n try {\n raw = decoder.decode(payload);\n // Unwrap tag-24 (embedded CBOR): COSE payload may be tag-24 wrapped MSO bytes.\n // In production cbor-x decodes tag-24 as Tag(24, bytes); in test fixtures that register\n // a custom addExtension for tag-24 it decodes to an EmbeddedCbor-like object with .value.\n if (raw instanceof Tag && raw.tag === 24 && raw.value instanceof Uint8Array) {\n raw = decoder.decode(raw.value);\n } else if (\n raw !== null &&\n typeof raw === 'object' &&\n !(raw instanceof Tag) &&\n !(raw instanceof Map) &&\n !(raw instanceof Uint8Array) &&\n 'value' in (raw as object) &&\n (raw as { value: unknown }).value instanceof Uint8Array\n ) {\n // TEST-FIXTURE COMPATIBILITY: tests/fixtures/mdoc-helpers.ts registers a custom\n // tag-24 addExtension globally, so cbor-x returns an EmbeddedCbor-like object\n // (with `.value: Uint8Array`) instead of Tag(24, bytes) during tests. The `!(raw\n // instanceof Tag)` guard ensures we don't misinterpret arbitrary Tag(N, bytes)\n // values as embedded CBOR in production.\n raw = decoder.decode((raw as { value: Uint8Array }).value);\n }\n } catch (err) {\n if (err instanceof MalformedCredentialError) throw err;\n throw new MalformedCredentialError('MSO payload is not decodable CBOR');\n }\n if (!(raw instanceof Map)) {\n throw new MalformedCredentialError('MSO must be a CBOR Map');\n }\n const m = raw as Map<string, unknown>;\n\n const version = m.get('version');\n if (typeof version !== 'string') {\n throw new MalformedCredentialError('MSO.version must be a string');\n }\n const digestAlgorithm = m.get('digestAlgorithm');\n if (typeof digestAlgorithm !== 'string') {\n throw new MalformedCredentialError('MSO.digestAlgorithm must be a string');\n }\n const docType = m.get('docType');\n if (typeof docType !== 'string') {\n throw new MalformedCredentialError('MSO.docType must be a string');\n }\n\n const vdRaw = m.get('valueDigests');\n if (!(vdRaw instanceof Map)) {\n throw new MalformedCredentialError('MSO.valueDigests must be a Map');\n }\n const valueDigests = new Map<string, Map<number, Uint8Array>>();\n for (const [ns, inner] of vdRaw.entries()) {\n if (typeof ns !== 'string' || !(inner instanceof Map)) {\n throw new MalformedCredentialError('MSO.valueDigests entry malformed');\n }\n const perNs = new Map<number, Uint8Array>();\n for (const [id, digest] of (inner as Map<unknown, unknown>).entries()) {\n if (typeof id !== 'number' || !(digest instanceof Uint8Array)) {\n throw new MalformedCredentialError('MSO digest entry must map number→bstr');\n }\n perNs.set(id, digest);\n }\n valueDigests.set(ns, perNs);\n }\n\n // deviceKeyInfo.deviceKey — the COSE_Key the holder must authenticate with.\n let deviceKey: Map<number, unknown> | undefined;\n const dkiRaw = m.get('deviceKeyInfo');\n if (dkiRaw instanceof Map) {\n const dk = (dkiRaw as Map<string, unknown>).get('deviceKey');\n if (dk instanceof Map) {\n deviceKey = dk as Map<number, unknown>;\n }\n }\n\n const viRaw = m.get('validityInfo');\n if (!(viRaw instanceof Map)) {\n throw new MalformedCredentialError('MSO.validityInfo must be a Map');\n }\n const vi = viRaw as Map<string, unknown>;\n const validityInfo: MobileSecurityObject['validityInfo'] = {\n signed: decodeDateLike(vi.get('signed')),\n validFrom: decodeDateLike(vi.get('validFrom')),\n validUntil: decodeDateLike(vi.get('validUntil')),\n };\n if (vi.has('expectedUpdate')) {\n validityInfo.expectedUpdate = decodeDateLike(vi.get('expectedUpdate'));\n }\n\n return { version, digestAlgorithm, valueDigests, docType, deviceKey, validityInfo };\n}\n\n/**\n * Validates the MSO's validityInfo block against a reference time.\n * Enforces strict ISO 18013-5 rules:\n * - signed <= now\n * - validFrom <= now\n * - validFrom <= validUntil\n * - signed within [validFrom, validUntil]\n * - validUntil >= now (else ExpiredCredentialError)\n */\nexport function validateMsoValidity(mso: MobileSecurityObject, now: Date): void {\n const { signed, validFrom, validUntil } = mso.validityInfo;\n if (signed.getTime() > now.getTime()) {\n throw new MalformedCredentialError(`MSO signed=${signed.toISOString()} is in the future`);\n }\n if (validFrom.getTime() > now.getTime()) {\n throw new MalformedCredentialError(`MSO validFrom=${validFrom.toISOString()} is in the future`);\n }\n if (validFrom.getTime() > validUntil.getTime()) {\n throw new MalformedCredentialError('MSO validFrom is after validUntil');\n }\n if (signed.getTime() < validFrom.getTime() || signed.getTime() > validUntil.getTime()) {\n throw new MalformedCredentialError('MSO signed is outside the validity window');\n }\n if (validUntil.getTime() < now.getTime()) {\n throw new ExpiredCredentialError(`MSO validUntil=${validUntil.toISOString()} is in the past`);\n }\n}\n\n/**\n * Validates that the MSO's docType matches the expected one.\n * Used by callers who want to lock the accepted credential type.\n */\nexport function validateMsoDocType(mso: MobileSecurityObject, expectedDocType: string): void {\n if (mso.docType !== expectedDocType) {\n throw new MalformedCredentialError(`MSO docType=${mso.docType} does not match expected ${expectedDocType}`);\n }\n}\n","import { splitSdJwt, decodeSdJwt, getClaims } from '@sd-jwt/decode';\nimport { decodeProtectedHeader, jwtVerify, importX509, importJWK } from 'jose';\n\nimport { MalformedCredentialError } from '../errors.js';\nimport type { TrustEvaluationResult } from '../trust/TrustEvaluator.js';\nimport type { IssuerInfo } from '../types/issuer.js';\nimport type { CredentialFormat, CredentialClaims, PresentationResult } from '../types/presentation.js';\n\nimport type { ICredentialParser, ParseOptions } from './parser.interface.js';\n\n/**\n * Hasher function signature expected by @sd-jwt/decode.\n * Inlined here to avoid a direct dependency on @sd-jwt/types.\n */\ntype SdJwtHasher = (data: string | ArrayBuffer, alg: string) => Promise<Uint8Array>;\n\nconst DEFAULT_ALLOWED_ALGORITHMS = ['ES256', 'ES384', 'ES512'];\n\n/**\n * SHA-256 hasher implementation using the Web Crypto API.\n * Compatible with the @sd-jwt/decode Hasher signature.\n */\nconst sha256Hasher: SdJwtHasher = async (data: string | ArrayBuffer, _alg: string): Promise<Uint8Array> => {\n const encoder = new TextEncoder();\n const input = typeof data === 'string' ? encoder.encode(data) : data;\n const hashBuffer = await crypto.subtle.digest('SHA-256', input);\n return new Uint8Array(hashBuffer);\n};\n\n// Standard base64 alphabet for decoding x5c certificate entries\nconst BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n/**\n * Decodes a standard base64-encoded string into raw bytes.\n * Does not depend on Node.js Buffer or browser atob.\n */\nfunction base64ToBytes(base64: string): Uint8Array<ArrayBuffer> {\n const cleaned = base64.replace(/=+$/, '');\n const byteLength = Math.floor((cleaned.length * 3) / 4);\n const buffer = new ArrayBuffer(byteLength);\n const bytes = new Uint8Array(buffer);\n\n let byteIndex = 0;\n for (let i = 0; i < cleaned.length; i += 4) {\n const a = BASE64_CHARS.indexOf(cleaned[i]);\n const b = i + 1 < cleaned.length ? BASE64_CHARS.indexOf(cleaned[i + 1]) : 0;\n const c = i + 2 < cleaned.length ? BASE64_CHARS.indexOf(cleaned[i + 2]) : 0;\n const d = i + 3 < cleaned.length ? BASE64_CHARS.indexOf(cleaned[i + 3]) : 0;\n\n bytes[byteIndex++] = (a << 2) | (b >> 4);\n if (byteIndex < byteLength) bytes[byteIndex++] = ((b & 0x0f) << 4) | (c >> 2);\n if (byteIndex < byteLength) bytes[byteIndex++] = ((c & 0x03) << 6) | d;\n }\n\n return bytes;\n}\n\n/**\n * Checks whether two Uint8Array instances contain identical bytes.\n */\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n/**\n * Converts a base64-encoded DER certificate to PEM format for jose.importX509.\n */\nfunction derToPem(base64Der: string): string {\n const lines = base64Der.match(/.{1,64}/g) || [];\n return `-----BEGIN CERTIFICATE-----\\n${lines.join('\\n')}\\n-----END CERTIFICATE-----`;\n}\n\n/**\n * Encodes a Uint8Array to base64url (no padding).\n * Used by disclosure hash verification (Task 5) and KB-JWT verification (Task 6).\n */\nfunction bytesToBase64url(bytes: Uint8Array): string {\n let binary = '';\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return globalThis.btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/**\n * Maps raw decoded claims to the CredentialClaims structure,\n * picking known age/residency fields and preserving any extra keys.\n */\nfunction mapToCredentialClaims(raw: Record<string, unknown>): CredentialClaims {\n const claims: CredentialClaims = {};\n\n if (typeof raw['age_over_18'] === 'boolean') {\n claims.age_over_18 = raw['age_over_18'];\n }\n if (typeof raw['age_over_21'] === 'boolean') {\n claims.age_over_21 = raw['age_over_21'];\n }\n if (typeof raw['resident_country'] === 'string') {\n claims.resident_country = raw['resident_country'];\n }\n if (typeof raw['nationality'] === 'string') {\n claims.nationality = raw['nationality'];\n }\n if (typeof raw['family_name_birth'] === 'string') {\n claims.family_name_birth = raw['family_name_birth'];\n }\n\n for (const [key, value] of Object.entries(raw)) {\n if (\n !(key in claims) &&\n !key.startsWith('_sd') &&\n key !== 'iss' &&\n key !== 'exp' &&\n key !== 'iat' &&\n key !== 'cnf' &&\n key !== 'vct'\n ) {\n claims[key] = value;\n }\n }\n\n return claims;\n}\n\n/**\n * Best-effort extraction of a country code hint from an issuer URL or string.\n */\nfunction extractCountryHint(issuer: string): string {\n try {\n const url = new URL(issuer);\n const tld = url.hostname.split('.').pop()?.toUpperCase();\n if (tld && tld.length === 2) {\n return tld;\n }\n } catch {\n // Not a valid URL\n }\n return '';\n}\n\n/**\n * SD-JWT VC credential parser.\n *\n * Decodes and cryptographically validates SD-JWT Verifiable Credentials:\n * - JWT signature verification via x5c public key (jose)\n * - Issuer certificate trust chain verification\n * - Disclosure hash integrity verification\n * - Key binding JWT signature and sd_hash verification\n * - Selective disclosure claim extraction\n */\nexport class SdJwtParser implements ICredentialParser {\n readonly format: CredentialFormat = 'sd-jwt-vc';\n\n canParse(vpToken: unknown): boolean {\n return typeof vpToken === 'string' && vpToken.includes('~');\n }\n\n async parse(vpToken: unknown, options: ParseOptions): Promise<PresentationResult> {\n if (typeof vpToken !== 'string') {\n throw new MalformedCredentialError('VP token must be a string');\n }\n\n const allowedAlgorithms = options.allowedAlgorithms ?? DEFAULT_ALLOWED_ALGORITHMS;\n\n const invalidResult = (error: string): PresentationResult => ({\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: new Uint8Array(), country: '' },\n error,\n });\n\n // Step 1: Split the SD-JWT into components\n let parts: ReturnType<typeof splitSdJwt>;\n try {\n parts = splitSdJwt(vpToken);\n } catch {\n throw new MalformedCredentialError('Failed to split SD-JWT structure');\n }\n\n // Step 2: Peek at issuer JWT header (need alg and x5c before verification)\n let header: ReturnType<typeof decodeProtectedHeader>;\n try {\n header = decodeProtectedHeader(parts.jwt);\n } catch {\n throw new MalformedCredentialError('Failed to decode SD-JWT issuer JWT header');\n }\n\n // Step 3: Check algorithm against allowlist\n const alg = header.alg;\n if (typeof alg !== 'string' || !allowedAlgorithms.includes(alg)) {\n return invalidResult(`Unsupported algorithm: ${alg}`);\n }\n\n // Step 4: Extract public key — either from x5c certificate or, when x5c is absent\n // and the caller has provided trustedIssuerJwks, from the matched JWK directly.\n const x5cArray = header.x5c;\n const hasX5c = Array.isArray(x5cArray) && x5cArray.length > 0 && typeof x5cArray[0] === 'string';\n\n let issuerKey: Awaited<ReturnType<typeof importX509>> | Awaited<ReturnType<typeof importJWK>> | undefined;\n // issuerCertBytes is undefined when the JWK path is used — cert trust check is skipped.\n let issuerCertBytes: Uint8Array | undefined;\n\n if (hasX5c) {\n // Primary path: import issuer key from x5c leaf certificate.\n try {\n issuerKey = await importX509(derToPem(x5cArray[0]), alg);\n issuerCertBytes = base64ToBytes(x5cArray[0]);\n } catch (err) {\n if (err instanceof MalformedCredentialError) throw err;\n throw new MalformedCredentialError('Failed to import issuer certificate');\n }\n } else if (options.trustedIssuerJwks && options.trustedIssuerJwks.length > 0) {\n // Alternate trust path: no x5c — caller supplies trusted JWKs out-of-band.\n // The actual signing key is selected in step 5 (signature verify) so that\n // a kid-less header with multiple candidate JWKs picks the one that\n // actually verifies, not just the first kty/crv match.\n issuerKey = undefined;\n } else {\n // No x5c and no trustedIssuerJwks — preserve existing strict behaviour.\n throw new MalformedCredentialError('Missing or invalid x5c in JWT header');\n }\n\n // Step 5: Verify issuer JWT signature (also validates exp, iat via jose).\n // The x5c path has a single key fixed at step 4. The trustedIssuerJwks path\n // narrows by `kid` when present, otherwise tries every candidate until one\n // verifies — required because RFC 7517 does not mandate `kid` and a caller\n // may pass multiple trusted issuer keys.\n let payload: Record<string, unknown>;\n if (issuerKey) {\n try {\n const result = await jwtVerify(parts.jwt, issuerKey, { algorithms: allowedAlgorithms });\n payload = result.payload as unknown as Record<string, unknown>;\n } catch {\n return invalidResult('Issuer JWT signature verification failed');\n }\n } else {\n // trustedIssuerJwks branch: select candidates and try each.\n const jwks = options.trustedIssuerJwks!;\n const headerKid = (header as Record<string, unknown>)['kid'];\n let candidates: JsonWebKey[];\n if (typeof headerKid === 'string') {\n const matched = jwks.find((k) => (k as Record<string, unknown>)['kid'] === headerKid);\n if (!matched) {\n return invalidResult(\n `No matching JWK found in trustedIssuerJwks for kid=${headerKid}`\n );\n }\n candidates = [matched];\n } else {\n candidates = jwks;\n }\n let verifiedPayload: Record<string, unknown> | undefined;\n for (const jwk of candidates) {\n let candidateKey: Awaited<ReturnType<typeof importJWK>>;\n try {\n candidateKey = await importJWK(jwk, alg);\n } catch {\n // Incompatible JWK for the requested alg — skip rather than fail.\n continue;\n }\n try {\n const result = await jwtVerify(parts.jwt, candidateKey, {\n algorithms: allowedAlgorithms,\n });\n verifiedPayload = result.payload as unknown as Record<string, unknown>;\n break;\n } catch {\n // Wrong candidate — try the next one.\n }\n }\n if (!verifiedPayload) {\n return invalidResult('Issuer JWT signature verification failed');\n }\n payload = verifiedPayload;\n }\n\n // Step 6: Trust check — certificate must be in the trusted set\n // unless the caller explicitly opts out via skipTrustCheck, or the JWK path is used.\n const issuerString = typeof payload['iss'] === 'string' ? payload['iss'] : '';\n const issuerInfo: IssuerInfo = {\n certificate: issuerCertBytes ?? new Uint8Array(),\n country: extractCountryHint(issuerString),\n };\n\n let trustResult: TrustEvaluationResult | undefined;\n\n if (issuerCertBytes === undefined) {\n // JWK-based trust path: the caller has explicitly opted in by supplying\n // trustedIssuerJwks — cert-chain evaluation is intentionally skipped.\n // No further trust check is performed here.\n } else if (options.trustStore) {\n // 0.5.0 path: RFC 5280 chain validation via TrustEvaluator.\n // Dynamic import keeps the evaluator out of 0.4.0-style callers' bundles.\n const { TrustEvaluator } = await import('../trust/TrustEvaluator.js');\n const evaluator = new TrustEvaluator({\n trustStore: options.trustStore,\n revocationPolicy: options.revocationPolicy ?? 'skip',\n fetcher: options.fetcher,\n cache: options.cache,\n clockSkewTolerance: options.clockSkewTolerance,\n });\n const { X509Certificate } = await import('@peculiar/x509');\n const leaf = new X509Certificate(issuerCertBytes as Uint8Array<ArrayBuffer>);\n trustResult = await evaluator.evaluate(leaf);\n } else {\n // 0.4.0 byte-equality path — preserved verbatim for backward compatibility.\n if (options.trustedCertificates.length === 0) {\n if (options.skipTrustCheck !== true) {\n throw new MalformedCredentialError(\n 'trustedCertificates must not be empty unless skipTrustCheck is true'\n );\n }\n } else {\n const isTrusted = options.trustedCertificates.some((trusted) =>\n bytesEqual(trusted, issuerCertBytes!)\n );\n if (!isTrusted) {\n return invalidResult('Issuer certificate is not trusted');\n }\n }\n }\n\n // Step 7: Verify disclosure hashes. Per SD-JWT spec §5.2.1:\n // - 3-element `[salt, name, value]` (object-property) → hash MUST be in some `_sd`\n // - 2-element `[salt, value]` (array-element) → hash MUST be referenced\n // by some `{\"...\": \"<hash>\"}` placeholder\n // Both can nest: a disclosed value may itself contain `_sd` or placeholders\n // for further disclosures (e.g. PID's `place_of_birth.country`,\n // `nationalities`). The check is therefore transitive — once a disclosure is\n // anchored, any anchor hashes found inside its disclosed value become valid\n // anchors for OTHER disclosures.\n if (parts.disclosures.length > 0) {\n // Pre-decode disclosures so we can do the transitive closure.\n type DecodedDisclosure = {\n raw: string;\n hash: string;\n length: 2 | 3;\n value: unknown;\n };\n const decodedDisclosures: DecodedDisclosure[] = [];\n for (const disclosure of parts.disclosures) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(new TextDecoder().decode(base64ToBytes(disclosure)));\n } catch {\n return invalidResult('Disclosure is not valid base64url-encoded JSON');\n }\n if (!Array.isArray(parsed) || (parsed.length !== 2 && parsed.length !== 3)) {\n return invalidResult('Disclosure must be a 2- or 3-element array');\n }\n const hashBytes = await sha256Hasher(disclosure, 'sha-256');\n decodedDisclosures.push({\n raw: disclosure,\n hash: bytesToBase64url(hashBytes),\n length: parsed.length as 2 | 3,\n value: parsed.length === 3 ? parsed[2] : parsed[1],\n });\n }\n\n // Seed the anchor sets from the issuer JWT payload itself.\n const seed = collectAnchorHashes(payload);\n const kvHashes = seed.kvHashes;\n const arrayElemHashes = seed.arrayElemHashes;\n\n // Transitive expansion: each pass tries to anchor every still-pending\n // disclosure; when one anchors, its disclosed VALUE feeds new anchor\n // hashes back into the sets, potentially unlocking later disclosures.\n const remaining = [...decodedDisclosures];\n for (;;) {\n const anchored: DecodedDisclosure[] = [];\n for (const d of remaining) {\n const valid =\n d.length === 3 ? kvHashes.has(d.hash) : arrayElemHashes.has(d.hash);\n if (valid) anchored.push(d);\n }\n if (anchored.length === 0) break;\n for (const a of anchored) {\n const sub = collectAnchorHashes(a.value);\n for (const h of sub.kvHashes) kvHashes.add(h);\n for (const h of sub.arrayElemHashes) arrayElemHashes.add(h);\n const idx = remaining.indexOf(a);\n if (idx >= 0) remaining.splice(idx, 1);\n }\n }\n\n if (remaining.length > 0) {\n return invalidResult('Disclosure hash mismatch');\n }\n }\n\n // Step 8: Verify key binding (holder proof-of-possession).\n //\n // Holder binding is MANDATORY when the issuer bound the credential to a\n // holder key via `cnf` (or the caller sets `requireKeyBinding`). Failing\n // closed here is what stops an attacker from stripping the trailing\n // KB-JWT to bypass proof-of-possession AND the nonce / replay check.\n // (CWE-294 capture-replay · CWE-303 missing proof-of-possession)\n const cnf = payload['cnf'] as Record<string, unknown> | undefined;\n const isHolderBound = !!cnf && typeof cnf === 'object' && !!cnf['jwk'];\n const keyBindingRequired = isHolderBound || options.requireKeyBinding === true;\n\n if (keyBindingRequired && !parts.kbJwt) {\n return invalidResult(\n 'Key binding JWT is required for holder-bound credentials but was not presented',\n );\n }\n\n if (parts.kbJwt) {\n if (!isHolderBound) {\n throw new MalformedCredentialError('Missing cnf.jwk in issuer JWT for key binding');\n }\n\n // A KB-JWT proves possession only if bound to THIS verifier's fresh\n // challenge; require the caller-supplied nonce so a missing/empty\n // nonce cannot slip through an `undefined === undefined` comparison.\n if (typeof options.nonce !== 'string' || options.nonce.length === 0) {\n return invalidResult('A nonce is required to verify the key binding JWT');\n }\n\n let holderKey: Awaited<ReturnType<typeof importJWK>>;\n try {\n const kbHeader = decodeProtectedHeader(parts.kbJwt);\n const kbAlg = kbHeader.alg;\n if (typeof kbAlg !== 'string' || !allowedAlgorithms.includes(kbAlg)) {\n return invalidResult(`Unsupported KB-JWT algorithm: ${kbAlg}`);\n }\n holderKey = await importJWK(cnf!['jwk'] as Record<string, unknown>, kbAlg);\n } catch (err) {\n if (err instanceof MalformedCredentialError) throw err;\n throw new MalformedCredentialError('Failed to import holder key from cnf.jwk');\n }\n\n // Verify KB-JWT signature\n let kbPayload: Record<string, unknown>;\n try {\n const kbResult = await jwtVerify(parts.kbJwt, holderKey, {\n algorithms: allowedAlgorithms,\n ...(options.audience ? { audience: options.audience } : {}),\n });\n kbPayload = kbResult.payload as unknown as Record<string, unknown>;\n } catch {\n return invalidResult('Key binding JWT signature verification failed');\n }\n\n // Validate nonce — must be present and match when KB-JWT is used\n if (kbPayload['nonce'] !== options.nonce) {\n return invalidResult('Key binding JWT nonce does not match');\n }\n\n // Verify sd_hash — hash of the SD-JWT content before the KB-JWT\n const disclosurePart = parts.disclosures.length > 0 ? parts.disclosures.join('~') + '~' : '';\n const sdJwtForHash = parts.jwt + '~' + disclosurePart;\n const sdHashBytes = await sha256Hasher(sdJwtForHash, 'sha-256');\n const expectedSdHash = bytesToBase64url(sdHashBytes);\n if (kbPayload['sd_hash'] !== expectedSdHash) {\n return invalidResult('Key binding JWT sd_hash does not match');\n }\n }\n\n // Step 9: Decode disclosures and extract claims\n let resolvedClaims: Record<string, unknown>;\n try {\n const decoded = await decodeSdJwt(vpToken, sha256Hasher);\n resolvedClaims = await getClaims<Record<string, unknown>>(\n decoded.jwt.payload,\n decoded.disclosures,\n sha256Hasher\n );\n } catch {\n throw new MalformedCredentialError('Failed to decode SD-JWT disclosures');\n }\n\n const vct = typeof payload['vct'] === 'string' ? (payload['vct'] as string) : undefined;\n\n const result: PresentationResult = {\n valid: true,\n format: this.format,\n claims: mapToCredentialClaims(resolvedClaims),\n issuer: issuerInfo,\n ...(vct !== undefined ? { vct } : {}),\n };\n if (trustResult) result.trust = trustResult;\n return result;\n }\n}\n\n/**\n * Walks a value and collects every `_sd` array entry plus every\n * `{\"...\": \"<hash>\"}` array-element placeholder hash reachable from it. SD-JWT\n * disclosures can nest — a disclosed object may itself carry a fresh `_sd`\n * array, and a disclosed array may contain `{\"...\": \"<hash>\"}` placeholders\n * for further (2-element) disclosures. The hand-rolled hash check must resolve\n * the full transitive set, otherwise nested disclosures (e.g. PID's\n * `place_of_birth.country`, `nationalities` array) false-reject.\n */\nfunction collectAnchorHashes(node: unknown): { kvHashes: Set<string>; arrayElemHashes: Set<string> } {\n const kvHashes = new Set<string>();\n const arrayElemHashes = new Set<string>();\n const visit = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item && typeof item === 'object' && !Array.isArray(item)) {\n const obj = item as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 1 && keys[0] === '...' && typeof obj['...'] === 'string') {\n arrayElemHashes.add(obj['...']);\n continue;\n }\n }\n visit(item);\n }\n } else if (value && typeof value === 'object') {\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (k === '_sd' && Array.isArray(v)) {\n for (const h of v) if (typeof h === 'string') kvHashes.add(h);\n continue;\n }\n visit(v);\n }\n }\n };\n visit(node);\n return { kvHashes, arrayElemHashes };\n}\n","import { matchQuery, buildSubmission } from '@openeudi/dcql';\nimport type { DcqlQuery, DecodedCredential } from '@openeudi/dcql';\nimport { decodeProtectedHeader } from 'jose';\n\nimport { parsePresentation } from './presentation.js';\nimport { decryptAuthorizationResponse } from './decrypt-response.js';\nimport {\n buildOid4vpSessionTranscript,\n buildOpenID4VPHandoverSessionTranscript,\n} from './crypto/session-transcript.js';\nimport {\n MissingDecryptionKeyError,\n MissingVerifierEncryptionKeyError,\n MultipleCredentialsNotSupportedError,\n} from './errors.js';\nimport type { CredentialFormat, PresentationResult } from './types/presentation.js';\nimport type { AuthorizationResponse } from './types/authorization.js';\nimport type {\n EncryptedResponse,\n VerifyAuthorizationResponseOptions,\n VerifyOptions,\n VerifyResult,\n} from './types/verify.js';\n\n/**\n * Maps the internal `CredentialFormat` to the DCQL wire-level format string\n * as defined by OpenID4VP 1.0 final. The internal `sd-jwt-vc` value predates\n * the DCQL `dc+sd-jwt` identifier; we translate here so the parser contract\n * stays stable.\n */\nconst INTERNAL_TO_DCQL_FORMAT: Record<CredentialFormat, string> = {\n 'sd-jwt-vc': 'dc+sd-jwt',\n mdoc: 'mso_mdoc',\n};\n\n/**\n * Parses a VP token, then matches it against a DCQL query.\n *\n * Cryptographic / structural parser failures still throw (via `parsePresentation`).\n * Query-level mismatches are surfaced as `match.unmatched` entries so callers can\n * show per-claim diagnostics.\n *\n * @param vpToken raw VP token (SD-JWT string or mDOC Uint8Array)\n * @param query DCQL query describing the required credential(s)\n * @param options parse + verify options (nonce, trusted issuers, etc.)\n */\nexport async function verifyPresentation(\n vpToken: unknown,\n query: DcqlQuery,\n options: VerifyOptions\n): Promise<VerifyResult> {\n const parsed = await parsePresentation(vpToken, options);\n\n const dcqlFormat = INTERNAL_TO_DCQL_FORMAT[parsed.format] ?? parsed.format;\n\n // For mDOC, DCQL claim paths address namespace-grouped values (e.g. ['ns', 'attr']).\n // For SD-JWT, the flat claim bag is addressed directly.\n const decodedClaims: Record<string, unknown> =\n parsed.format === 'mdoc' && parsed.namespacedClaims !== undefined\n ? (parsed.namespacedClaims as Record<string, unknown>)\n : (parsed.claims as unknown as Record<string, unknown>);\n\n // Resolve which query credential this presentation actually is. `decoded.id`\n // is what DCQL matching attributes the presentation to, so getting it wrong\n // reports a credential the wallet never presented.\n //\n // This entry point has no `queryIds` — unlike verifyAuthorizationResponse,\n // which reads the id the wallet keyed the vp_token with — so the credential\n // has to be identified from its own contents. Format alone is not enough: a\n // query can list several entries of the same format distinguished only by\n // vct or doctype. Narrow by format, then by credential type, and only fall\n // back to first-listed when nothing identifies it.\n const sameFormat = query.credentials.filter((c) => c.format === dcqlFormat);\n const presentedCredentialQuery =\n sameFormat.find((c) => matchesCredentialType(c, parsed)) ??\n sameFormat[0] ??\n query.credentials[0];\n\n const decoded: DecodedCredential = {\n id: presentedCredentialQuery?.id ?? 'presented',\n format: dcqlFormat,\n claims: decodedClaims,\n };\n\n if (parsed.format === 'sd-jwt-vc' && typeof parsed.vct === 'string') {\n decoded.vct = parsed.vct;\n }\n if (parsed.format === 'mdoc' && typeof parsed.docType === 'string') {\n decoded.doctype = parsed.docType;\n }\n\n // Forward trust-evaluation authority ids into the decoded credential so\n // DCQL's trusted_authorities filter can match them. Populated by\n // TrustEvaluator when a trustStore is provided (Task 16/17).\n if (\n parsed.trust?.trustedAuthorityIds &&\n parsed.trust.trustedAuthorityIds.length > 0\n ) {\n decoded.trusted_authority_ids = [...parsed.trust.trustedAuthorityIds];\n }\n\n const match = matchQuery(query, [decoded]);\n const submission = match.satisfied ? buildSubmission(query, match) : null;\n\n return {\n parsed,\n match,\n submission,\n valid: parsed.valid && match.satisfied,\n };\n}\n\n/**\n * Does this query credential's type constraint match what was actually presented?\n *\n * `vct_values` / `doctype_value` are the only things distinguishing two query\n * entries of the same format, so they are what identifies the presented\n * credential when no query id is available. Returns false when the query states\n * no constraint — an unconstrained entry matches anything, which makes it useless\n * for telling two entries apart, so it should not win over a specific one.\n */\nfunction matchesCredentialType(\n credentialQuery: DcqlQuery['credentials'][number],\n parsed: PresentationResult\n): boolean {\n if (parsed.format === 'sd-jwt-vc') {\n const vctValues = credentialQuery.meta?.vct_values;\n return (\n typeof parsed.vct === 'string' &&\n Array.isArray(vctValues) &&\n vctValues.includes(parsed.vct)\n );\n }\n if (parsed.format === 'mdoc') {\n const doctype = credentialQuery.meta?.doctype_value;\n return typeof parsed.docType === 'string' && doctype === parsed.docType;\n }\n return false;\n}\n\nfunction isEncryptedResponse(x: unknown): x is EncryptedResponse {\n return (\n typeof x === 'object' &&\n x !== null &&\n 'response' in x &&\n typeof (x as Record<string, unknown>).response === 'string' &&\n Object.keys(x).length === 1\n );\n}\n\n// base64url alphabet (RFC 4648 §5): URL-safe, unpadded. Decoded here without\n// Node's Buffer or the browser's atob, matching the parser layer's approach so\n// the library stays runtime-agnostic.\nconst BASE64URL_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\nfunction base64UrlToBytes(input: string): Uint8Array {\n const cleaned = input.replace(/=+$/, '');\n const byteLength = Math.floor((cleaned.length * 3) / 4);\n const bytes = new Uint8Array(byteLength);\n let byteIndex = 0;\n for (let i = 0; i < cleaned.length; i += 4) {\n const a = BASE64URL_CHARS.indexOf(cleaned[i]);\n const b = i + 1 < cleaned.length ? BASE64URL_CHARS.indexOf(cleaned[i + 1]) : 0;\n const c = i + 2 < cleaned.length ? BASE64URL_CHARS.indexOf(cleaned[i + 2]) : 0;\n const d = i + 3 < cleaned.length ? BASE64URL_CHARS.indexOf(cleaned[i + 3]) : 0;\n if (a === -1 || b === -1 || c === -1 || d === -1) {\n throw new TypeError('Invalid base64url character in vp_token/apu');\n }\n bytes[byteIndex++] = (a << 2) | (b >> 4);\n if (byteIndex < byteLength) bytes[byteIndex++] = ((b & 0x0f) << 4) | (c >> 2);\n if (byteIndex < byteLength) bytes[byteIndex++] = ((c & 0x03) << 6) | d;\n }\n return bytes;\n}\n\n/**\n * Extract the `mdoc-generated-nonce` from a JWE's `apu` protected header\n * (ISO 18013-7 Annex B). `apu` is a base64url string whose decoded bytes are the\n * UTF-8 nonce. Returns undefined when the header is malformed or carries no `apu`\n * (the caller then leaves the SessionTranscript unset and the mDOC parser fails\n * closed). The actual JWE validation/decryption is left to\n * {@link decryptAuthorizationResponse}, which raises the canonical errors.\n */\nfunction extractMdocGeneratedNonce(jwe: string): string | undefined {\n let apu: unknown;\n try {\n apu = decodeProtectedHeader(jwe).apu;\n } catch {\n return undefined;\n }\n if (typeof apu !== 'string' || apu.length === 0) {\n return undefined;\n }\n // apu is an attacker-influenceable header nonce: a malformed value must fall\n // through to the documented graceful fail-closed path (transcript left unset,\n // mDOC parser rejects), NOT surface base64UrlToBytes's loud TypeError — which\n // is reserved for the vp_token DeviceResponse decode.\n try {\n return new TextDecoder().decode(base64UrlToBytes(apu));\n } catch {\n return undefined;\n }\n}\n\nfunction isAuthorizationResponse(x: unknown): x is AuthorizationResponse {\n return (\n typeof x === 'object' &&\n x !== null &&\n 'vp_token' in x &&\n typeof (x as Record<string, unknown>).vp_token === 'object' &&\n (x as Record<string, unknown>).vp_token !== null\n );\n}\n\n/**\n * Verify an OpenID4VP 1.0 §8.1 Authorization Response envelope.\n *\n * Accepts either the unencrypted envelope (object-keyed `vp_token`) or a\n * JWE-wrapped envelope `{ response: '<JWE>' }` for response_mode =\n * direct_post.jwt. When encrypted, decrypts with `options.decryptionKey`\n * first. For this release only single-credential single-presentation is\n * supported — multi-credential envelopes throw\n * {@link MultipleCredentialsNotSupportedError}. Otherwise delegates the\n * extracted single presentation to the existing {@link verifyPresentation}.\n *\n * Callers MUST compare the envelope's `state` against the value they issued\n * themselves — library is stateless and does not track state.\n */\nexport async function verifyAuthorizationResponse(\n envelope: AuthorizationResponse | EncryptedResponse,\n query: DcqlQuery,\n options: VerifyAuthorizationResponseOptions,\n): Promise<VerifyResult> {\n if (isEncryptedResponse(envelope)) {\n if (!options.decryptionKey) {\n throw new MissingDecryptionKeyError();\n }\n\n // Auto-build the mDOC SessionTranscript. A caller-supplied transcript\n // always wins. Otherwise the layout depends on `sessionTranscriptProfile`\n // (default 'iso-18013-7' preserves prior behavior):\n // - 'iso-18013-7': ISO 18013-7 Annex B OID4VPHandover, derived from the\n // mdoc-generated-nonce carried in the JWE `apu` header — which only\n // exists on the encrypted response, so this is the sole place we can\n // derive it.\n // - 'openid4vp-1.0': OpenID4VP 1.0 (Final) OpenID4VPHandover (§B.2.6),\n // derived from `verifierEncryptionJwk`'s thumbprint instead — no `apu`\n // needed.\n // When the request config or apu/JWK is missing, we leave the transcript\n // unset and the mDOC parser fails closed (SD-JWT flows are unaffected\n // either way).\n const nextOptions: VerifyAuthorizationResponseOptions = { ...options };\n if (\n options.mdocSessionTranscript === undefined &&\n options.clientId !== undefined &&\n options.responseUri !== undefined &&\n options.nonce !== undefined\n ) {\n if (options.sessionTranscriptProfile === 'openid4vp-1.0') {\n // An encrypted response always implies the verifier advertised a\n // response-encryption JWK, so a missing `verifierEncryptionJwk` here\n // is a caller misconfiguration, not a legitimate \"unencrypted\"\n // scenario — fail loud instead of silently binding a\n // null-thumbprint transcript that would only surface later as an\n // opaque device-auth failure.\n if (options.verifierEncryptionJwk === undefined) {\n throw new MissingVerifierEncryptionKeyError();\n }\n nextOptions.mdocSessionTranscript = await buildOpenID4VPHandoverSessionTranscript({\n clientId: options.clientId,\n nonce: options.nonce,\n responseUri: options.responseUri,\n verifierEncryptionJwk: options.verifierEncryptionJwk,\n });\n } else {\n const mdocGeneratedNonce = extractMdocGeneratedNonce(envelope.response);\n if (mdocGeneratedNonce !== undefined) {\n nextOptions.mdocSessionTranscript = await buildOid4vpSessionTranscript({\n clientId: options.clientId,\n responseUri: options.responseUri,\n nonce: options.nonce,\n mdocGeneratedNonce,\n });\n }\n }\n }\n\n const decrypted = await decryptAuthorizationResponse(\n envelope.response,\n options.decryptionKey,\n );\n return verifyAuthorizationResponse(decrypted, query, nextOptions);\n }\n\n if (!isAuthorizationResponse(envelope)) {\n throw new TypeError('envelope must contain vp_token as a JSON object per OpenID4VP 1.0 §8.1');\n }\n\n const vpToken = envelope.vp_token;\n const queryIds = Object.keys(vpToken);\n\n if (queryIds.length === 0) {\n throw new TypeError('vp_token cannot be empty per OpenID4VP 1.0 §8.1');\n }\n\n for (const id of queryIds) {\n if (!Array.isArray(vpToken[id])) {\n throw new TypeError(\n `vp_token entry \"${id}\" must be an array of presentations per OpenID4VP 1.0 §8.1`,\n );\n }\n }\n\n const presentationCount = queryIds.reduce(\n (sum, id) => sum + vpToken[id].length,\n 0,\n );\n if (queryIds.length > 1 || presentationCount > 1) {\n throw new MultipleCredentialsNotSupportedError(queryIds.length, presentationCount);\n }\n\n const presentedQueryId = queryIds[0];\n const presentation = vpToken[presentedQueryId][0];\n\n // OpenID4VP 1.0 / ISO 18013-7: an `mso_mdoc` VP token is a base64url-encoded\n // CBOR DeviceResponse. Once carried through a JWE-decrypted JSON envelope it is\n // a string, so decode it back to the Uint8Array the mDOC parser expects. SD-JWT\n // (string) and any already-binary presentation pass through unchanged.\n //\n // Dispatch on the credential the wallet actually presented (queryIds[0], per\n // §8.1) rather than query.credentials[0], the first entry in the DCQL query —\n // for a dual-format query built with credential_sets those can differ, and the\n // wrong one always decodes as if it were the first-listed format.\n const presentedCredentialQuery = query.credentials.find(\n (c) => c.id === presentedQueryId,\n );\n const decodedPresentation =\n presentedCredentialQuery?.format === 'mso_mdoc' && typeof presentation === 'string'\n ? base64UrlToBytes(presentation)\n : presentation;\n\n return verifyPresentation(decodedPresentation, query, options);\n}\n","import { compactDecrypt, decodeProtectedHeader } from 'jose';\n\nimport { UnsupportedJweError, DecryptionFailedError } from './errors.js';\nimport type { AuthorizationResponse } from './types/authorization.js';\n\nconst SUPPORTED_ALG = 'ECDH-ES';\nconst SUPPORTED_ENC = new Set(['A128GCM', 'A256GCM']);\n\n/**\n * Decrypt a JWE-wrapped OpenID4VP Authorization Response (response_mode =\n * direct_post.jwt). Returns the inner §8.1 envelope.\n *\n * Supported JWE algorithms (others throw UnsupportedJweError):\n * - alg: ECDH-ES\n * - enc: A128GCM, A256GCM (HAIP requires both)\n *\n * Cryptographic failures (wrong key, tampered ciphertext) throw\n * DecryptionFailedError.\n */\nexport async function decryptAuthorizationResponse(\n jwe: string,\n privateKey: CryptoKey,\n): Promise<AuthorizationResponse> {\n let header: ReturnType<typeof decodeProtectedHeader>;\n try {\n header = decodeProtectedHeader(jwe);\n } catch (err) {\n throw new DecryptionFailedError('Malformed JWE header', {\n cause: err as Error,\n });\n }\n\n const alg = typeof header.alg === 'string' ? header.alg : '';\n const enc = typeof header.enc === 'string' ? header.enc : '';\n\n if (alg !== SUPPORTED_ALG || !SUPPORTED_ENC.has(enc)) {\n throw new UnsupportedJweError(alg, enc);\n }\n\n let plaintext: Uint8Array;\n try {\n const result = await compactDecrypt(jwe, privateKey);\n plaintext = result.plaintext;\n } catch (err) {\n throw new DecryptionFailedError(undefined, { cause: err as Error });\n }\n\n try {\n const text = new TextDecoder().decode(plaintext);\n return JSON.parse(text) as AuthorizationResponse;\n } catch (err) {\n throw new DecryptionFailedError('Decrypted plaintext is not valid JSON', {\n cause: err as Error,\n });\n }\n}\n","import { Encoder as CborEncoder } from 'cbor-x';\n\n// Plain-bstr encoder (tagUint8Array:false → byte strings are major-type-2, not\n// the typed-array tag 64), matching how conformant issuers/holders encode COSE.\nconst enc = new CborEncoder({ mapsAsObjects: false, useRecords: false, tagUint8Array: false });\n\nasync function sha256(bytes: Uint8Array): Promise<Uint8Array> {\n return new Uint8Array(await crypto.subtle.digest('SHA-256', bytes as Uint8Array<ArrayBuffer>));\n}\n\n/**\n * Build the ISO 18013-7 Annex B `OID4VPHandover` SessionTranscript:\n *\n * SessionTranscript = [ null, null, OID4VPHandover ]\n * OID4VPHandover = [ clientIdHash, responseUriHash, nonce ]\n * clientIdHash = SHA-256(cbor([clientId, mdocGeneratedNonce]))\n * responseUriHash = SHA-256(cbor([responseUri, mdocGeneratedNonce]))\n *\n * Used to bind an mdoc DeviceAuthentication to the OpenID4VP authorization\n * request/response exchange it was presented in.\n */\nexport async function buildOid4vpSessionTranscript(params: {\n clientId: string;\n responseUri: string;\n nonce: string;\n mdocGeneratedNonce: string;\n}): Promise<Uint8Array> {\n const { clientId, responseUri, nonce, mdocGeneratedNonce } = params;\n const clientIdHash = await sha256(new Uint8Array(enc.encode([clientId, mdocGeneratedNonce])));\n const responseUriHash = await sha256(new Uint8Array(enc.encode([responseUri, mdocGeneratedNonce])));\n return new Uint8Array(enc.encode([null, null, [clientIdHash, responseUriHash, nonce]]));\n}\n\n/**\n * RFC 7638 JWK SHA-256 thumbprint as RAW digest bytes (not base64url).\n *\n * The thumbprint is SHA-256 over the canonical JWK JSON containing ONLY the\n * required members in lexicographic key order, with no whitespace. For EC keys\n * (RFC 7638 §3.2) that is exactly `{\"crv\":..,\"kty\":\"EC\",\"x\":..,\"y\":..}`.\n *\n * Returns the 32 raw hash bytes because the OpenID4VPHandover embeds the raw\n * thumbprint bytes in CBOR — mirroring the OIDF suite, which calls\n * `jwk.computeThumbprint().decode()` (base64url → raw bytes). See\n * AbstractCreateVP1FinalIsoMdocRedirectSessionTranscript in the conformance\n * suite (openid-certification/conformance-suite@release-v5.1.42).\n */\nasync function jwkSha256Thumbprint(jwk: JsonWebKey): Promise<Uint8Array> {\n if (jwk.kty !== 'EC') {\n throw new Error(`Unsupported JWK kty for thumbprint: ${jwk.kty}`);\n }\n if (!jwk.crv || !jwk.x || !jwk.y) {\n throw new Error('EC JWK for thumbprint is missing a required member (crv, x, or y)');\n }\n const canonical = `{\"crv\":\"${jwk.crv}\",\"kty\":\"EC\",\"x\":\"${jwk.x}\",\"y\":\"${jwk.y}\"}`;\n return sha256(new TextEncoder().encode(canonical));\n}\n\n/**\n * Build the OpenID for Verifiable Presentations 1.0 (Final) `OpenID4VPHandover`\n * SessionTranscript (OID4VP 1.0 §B.2.6, `response_uri` flavour):\n *\n * SessionTranscript = [ null, null, OpenID4VPHandover ]\n * OpenID4VPHandover = [ \"OpenID4VPHandover\", SHA-256(cbor(OpenID4VPHandoverInfo)) ]\n * OpenID4VPHandoverInfo = [ clientId, nonce, jwkThumbprint | null, responseUri ]\n *\n * `jwkThumbprint` is the RFC 7638 SHA-256 thumbprint of the verifier's response\n * ENCRYPTION public JWK as RAW 32 bytes, or CBOR `null` for an unencrypted\n * response. `clientId` is passed verbatim and is expected to already carry its\n * client-id-prefix (e.g. `x509_san_dns:v.example`) — the suite hashes the same\n * `client_id` string it received in the request.\n *\n * This is a DIFFERENT structure from the ISO 18013-7 Annex B `OID4VPHandover`\n * built by `buildOid4vpSessionTranscript` above (which uses an mdoc-generated\n * nonce and separate client_id/response_uri hashes). 1.0-Final wallets tested\n * by the OIDF `oid4vp-1final-verifier-*` modules require THIS layout.\n *\n * Layout confirmed against OID4VP 1.0 Final §B.2.6 and the suite class\n * net.openid.conformance.condition.client.AbstractCreateVP1FinalIsoMdocRedirectSessionTranscript\n * at tag release-v5.1.42: element order [clientId, nonce, thumb|null, responseUri];\n * thumbprint embedded as raw bytes; outer hash is SHA-256 over the CBOR of the\n * 4-element info array.\n */\nexport async function buildOpenID4VPHandoverSessionTranscript(params: {\n clientId: string;\n nonce: string;\n responseUri: string;\n verifierEncryptionJwk?: JsonWebKey;\n}): Promise<Uint8Array> {\n const { clientId, nonce, responseUri, verifierEncryptionJwk } = params;\n const thumb = verifierEncryptionJwk ? await jwkSha256Thumbprint(verifierEncryptionJwk) : null;\n const infoHash = await sha256(new Uint8Array(enc.encode([clientId, nonce, thumb, responseUri])));\n return new Uint8Array(enc.encode([null, null, ['OpenID4VPHandover', infoHash]]));\n}\n","/**\n * Content-addressed cache for CRL responses, OCSP responses, and LOTL\n * snapshots. Keys are library-defined strings; values are raw bytes.\n *\n * Implementations MUST be safe to call concurrently.\n */\nexport interface Cache {\n get(key: string): Promise<Uint8Array | null>;\n set(key: string, value: Uint8Array, ttlSeconds: number): Promise<void>;\n}\n\ninterface Entry {\n value: Uint8Array;\n expiresAt: number; // epoch ms\n}\n\n/**\n * Default `Cache` implementation — bounded-size LRU with wall-clock TTL.\n * Cache dies with the process; inject a persistent `Cache` impl for\n * servers that should survive restarts.\n */\nexport class InMemoryCache implements Cache {\n private readonly entries = new Map<string, Entry>();\n private readonly maxEntries: number;\n\n constructor(opts?: { maxEntries?: number }) {\n this.maxEntries = opts?.maxEntries ?? 1000;\n }\n\n async get(key: string): Promise<Uint8Array | null> {\n const entry = this.entries.get(key);\n if (!entry) return null;\n if (Date.now() > entry.expiresAt) {\n this.entries.delete(key);\n return null;\n }\n // refresh LRU position\n this.entries.delete(key);\n this.entries.set(key, entry);\n return entry.value;\n }\n\n async set(key: string, value: Uint8Array, ttlSeconds: number): Promise<void> {\n // delete-then-set so overwrites move the key to MRU position\n this.entries.delete(key);\n this.entries.set(key, {\n value,\n expiresAt: Date.now() + ttlSeconds * 1000,\n });\n while (this.entries.size > this.maxEntries) {\n const oldest = this.entries.keys().next().value;\n if (oldest === undefined) break;\n this.entries.delete(oldest);\n }\n }\n}\n","export type { TrustAnchor, LotlAnchorMetadata } from './TrustAnchor.js';\nexport type { Fetcher } from './Fetcher.js';\nexport { InMemoryCache, type Cache } from './Cache.js';\nexport {\n StaticTrustStore,\n CompositeTrustStore,\n type TrustStore,\n type TrustStoreHint,\n type TrustStoreInput,\n} from './TrustStore.js';\nexport { LotlTrustStore, type LotlTrustStoreOptions } from './LotlTrustStore.js';\n","import { X509Certificate } from '@peculiar/x509';\nimport type { TrustAnchor } from './TrustAnchor.js';\nimport type { NationalTlSnapshot } from './lotl-types.js';\nimport { getSkiHex } from './x509-utils.js';\n\n/**\n * Resolves trust anchors for a given leaf credential. The library calls\n * `getAnchors()` once per verification after extracting the leaf's issuer\n * hints (DN, Authority Key Identifier, JWT/COSE key ID).\n *\n * Implementations MUST be safe to call concurrently. Stores that cannot\n * satisfy the hint MUST return `[]`, not throw.\n */\nexport interface TrustStore {\n getAnchors(hint: TrustStoreHint): Promise<TrustAnchor[]>;\n}\n\nexport interface TrustStoreHint {\n /** Leaf cert's Issuer DN (RFC 4514 string). */\n issuer?: string;\n /** Leaf cert's Authority Key Identifier extension bytes. */\n aki?: Uint8Array;\n /** JWT/COSE key ID, used by LOTL-backed stores. */\n kid?: string;\n}\n\nexport type TrustStoreInput = X509Certificate | Uint8Array | string;\n\n/**\n * Trust store backed by a fixed list of certificates supplied at construction\n * time. No I/O, no refresh. Suitable for development, testing, and consumers\n * with a static issuer allowlist.\n */\nexport class StaticTrustStore implements TrustStore {\n private readonly anchors: TrustAnchor[] = [];\n private readonly skiIndex: Map<string, TrustAnchor[]> = new Map();\n private readonly subjectIndex: Map<string, TrustAnchor[]> = new Map();\n\n constructor(certs: Iterable<TrustStoreInput>) {\n for (const input of certs) {\n const cert = toCertificate(input);\n const anchor: TrustAnchor = { certificate: cert, source: 'static' };\n this.anchors.push(anchor);\n pushInto(this.subjectIndex, cert.subject, anchor);\n const ski = getSkiHex(cert);\n if (ski) pushInto(this.skiIndex, ski, anchor);\n }\n }\n\n async getAnchors(hint: TrustStoreHint): Promise<TrustAnchor[]> {\n const results: TrustAnchor[] = [];\n if (hint.aki) {\n const key = bytesToHex(hint.aki);\n const matches = this.skiIndex.get(key);\n if (matches) results.push(...matches);\n }\n if (hint.issuer) {\n const matches = this.subjectIndex.get(hint.issuer);\n if (matches) {\n for (const m of matches) {\n if (!results.includes(m)) results.push(m);\n }\n }\n }\n return results;\n }\n}\n\n/**\n * Combines multiple `TrustStore` instances. Children are queried in parallel;\n * results concatenate in child-order; duplicate anchors are dropped by\n * Subject Key Identifier.\n */\nexport class CompositeTrustStore implements TrustStore {\n constructor(private readonly stores: TrustStore[]) {}\n\n async getAnchors(hint: TrustStoreHint): Promise<TrustAnchor[]> {\n const results = await Promise.all(\n this.stores.map((store) => store.getAnchors(hint))\n );\n const seen = new Set<string>();\n const out: TrustAnchor[] = [];\n for (const batch of results) {\n for (const anchor of batch) {\n const ski = getSkiHex(anchor.certificate);\n const key = ski ?? anchor.certificate.serialNumber;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(anchor);\n }\n }\n return out;\n }\n\n async getNationalTls(): Promise<readonly NationalTlSnapshot[]> {\n for (const store of this.stores) {\n const s = store as TrustStore & {\n getNationalTls?: () => Promise<readonly NationalTlSnapshot[]>;\n };\n if (typeof s.getNationalTls === 'function') {\n return s.getNationalTls();\n }\n }\n return [];\n }\n}\n\nfunction toCertificate(input: TrustStoreInput): X509Certificate {\n if (input instanceof X509Certificate) return input;\n if (input instanceof Uint8Array) return new X509Certificate(input as Uint8Array<ArrayBuffer>);\n return new X509Certificate(input); // PEM string path\n}\n\nfunction pushInto<K>(map: Map<K, TrustAnchor[]>, key: K, anchor: TrustAnchor): void {\n const list = map.get(key);\n if (list) list.push(anchor);\n else map.set(key, [anchor]);\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport type { Cache } from './Cache.js';\nimport type { Fetcher } from './Fetcher.js';\nimport { EU_LOTL_SIGNING_ANCHORS } from './lotl-signing-anchors.js';\nimport type {\n LotlSnapshot,\n NationalTlSnapshot,\n TspService,\n} from './lotl-types.js';\nimport { LotlFetcher } from './LotlFetcher.js';\nimport { LotlParser } from './LotlParser.js';\nimport { NationalTlResolver } from './NationalTlResolver.js';\nimport type { LotlAnchorMetadata, TrustAnchor } from './TrustAnchor.js';\nimport type { TrustStore, TrustStoreHint } from './TrustStore.js';\nimport { deriveServiceMetadata } from './service-metadata.js';\nimport { getSkiBytes, getSkiHex } from './x509-utils.js';\n\nconst DEFAULT_LOTL_URL = 'https://ec.europa.eu/tools/lotl/eu-lotl.xml';\nconst DEFAULT_REFRESH_INTERVAL_MS = 24 * 3600 * 1000;\n\nexport interface LotlTrustStoreOptions {\n /** Override the bundled signing anchors. Empty is rejected. */\n signingAnchors?: readonly X509Certificate[];\n fetcher?: Fetcher;\n cache?: Cache;\n /** ms between snapshot refreshes. Default: 24h. */\n refreshInterval?: number;\n /** Override the LOTL URL. Defaults to the EC production URL. */\n lotlUrl?: string;\n}\n\ninterface Snapshot {\n readonly lotl: LotlSnapshot;\n readonly nationalTls: readonly NationalTlSnapshot[];\n readonly fetchedAt: number;\n}\n\n/**\n * Public TrustStore backed by the EU LOTL + national TLs. Loads lazily on\n * the first `getAnchors()` call; subsequent calls within `refreshInterval`\n * hit the in-memory snapshot. Graceful degradation: refresh failures serve\n * the prior snapshot with a `console.warn`. Single-flight: concurrent\n * refreshes share one in-flight promise.\n */\nexport class LotlTrustStore implements TrustStore {\n private readonly fetcher: LotlFetcher;\n private readonly resolver: NationalTlResolver;\n private readonly signingAnchors: readonly X509Certificate[];\n private readonly refreshInterval: number;\n private readonly lotlUrl: string;\n private readonly cache: Cache | undefined;\n private snapshot: Snapshot | null = null;\n private inFlight: Promise<Snapshot> | null = null;\n\n constructor(opts: LotlTrustStoreOptions = {}) {\n const anchors =\n opts.signingAnchors && opts.signingAnchors.length > 0\n ? opts.signingAnchors\n : EU_LOTL_SIGNING_ANCHORS;\n if (anchors.length === 0) {\n throw new Error(\n 'LotlTrustStore: no signing anchors available — supply signingAnchors or populate EU_LOTL_SIGNING_ANCHORS'\n );\n }\n this.signingAnchors = anchors;\n this.fetcher = new LotlFetcher({ fetcher: opts.fetcher });\n this.resolver = new NationalTlResolver({ fetcher: this.fetcher });\n this.refreshInterval =\n opts.refreshInterval ?? DEFAULT_REFRESH_INTERVAL_MS;\n this.lotlUrl = opts.lotlUrl ?? DEFAULT_LOTL_URL;\n this.cache = opts.cache;\n }\n\n async getAnchors(hint: TrustStoreHint): Promise<TrustAnchor[]> {\n const snap = await this.getSnapshot();\n const out: TrustAnchor[] = [];\n for (const tl of snap.nationalTls) {\n for (const service of tl.services) {\n for (const cert of service.certificates) {\n if (!matchesHint(cert, hint)) continue;\n out.push(buildAnchor(service, cert));\n }\n }\n }\n return out;\n }\n\n /**\n * Internal accessor — used by `TrustEvaluator` for `ProvenanceResolver`.\n * Not part of the public `TrustStore` contract.\n */\n async getNationalTls(): Promise<readonly NationalTlSnapshot[]> {\n const snap = await this.getSnapshot();\n return snap.nationalTls;\n }\n\n private async getSnapshot(): Promise<Snapshot> {\n const now = Date.now();\n if (\n this.snapshot &&\n now - this.snapshot.fetchedAt < this.refreshInterval\n ) {\n return this.snapshot;\n }\n return this.refresh();\n }\n\n private async refresh(): Promise<Snapshot> {\n if (this.inFlight) return this.inFlight;\n this.inFlight = (async () => {\n try {\n const doc = await this.fetcher.fetchSigned(\n this.lotlUrl,\n this.signingAnchors\n );\n const lotl = new LotlParser().parse(doc);\n const nationalTls = await this.resolver.resolve(lotl);\n this.snapshot = {\n lotl,\n nationalTls,\n fetchedAt: Date.now(),\n };\n return this.snapshot;\n } catch (err) {\n if (this.snapshot) {\n console.warn(\n `[openid4vp] LOTL refresh failed; serving cached snapshot (${(err as Error).message})`\n );\n return this.snapshot;\n }\n throw err;\n } finally {\n this.inFlight = null;\n }\n })();\n return this.inFlight;\n }\n}\n\nfunction matchesHint(cert: X509Certificate, hint: TrustStoreHint): boolean {\n if (hint.aki) {\n const ski = getSkiBytes(cert);\n if (ski && equalBytes(ski, hint.aki)) return true;\n }\n if (hint.issuer && cert.subject === hint.issuer) return true;\n return false;\n}\n\nfunction buildAnchor(service: TspService, cert: X509Certificate): TrustAnchor {\n const derived = deriveServiceMetadata(service);\n const metadata: LotlAnchorMetadata = {\n country: service.country,\n serviceName: service.serviceName,\n serviceTypeIdentifier: service.serviceTypeIdentifier,\n serviceStatus: service.serviceStatus,\n ...derived,\n };\n const ski = getSkiHex(cert);\n return {\n certificate: cert,\n source: 'lotl',\n metadata,\n trustedAuthorityIds: ski ? [ski] : [],\n };\n}\n\nfunction equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n","import { X509Certificate } from '@peculiar/x509';\n\n/**\n * EU LOTL signing anchors, bundled at release time. Sourced from the\n * European Commission's LOTL at\n * https://ec.europa.eu/tools/lotl/eu-lotl.xml (retrieved 2026-04-23,\n * sequence number 385, issued 2026-04-15T06:30:37Z).\n *\n * The Commission rotates these roughly every 2-3 years. When a rotation\n * happens:\n * 1. Fetch the current LOTL and extract the <ds:X509Certificate> from the\n * <ds:Signature> block at the end of the document.\n * 2. Append the new cert to this array (retain the old one for one release\n * cycle so consumers with cached LOTL snapshots signed by the prior\n * cert can continue verifying).\n * 3. Cut a patch release (0.5.N) with the new anchors.\n *\n * Consumers may also override via `new LotlTrustStore({ signingAnchors: ... })`\n * for test / emergency-rotation scenarios.\n *\n * Current anchor:\n * Subject : CN=EUROPEAN COMMISSION, O=EUROPEAN COMMISSION,\n * OU=Directorate-General for Digital Services (DIGIT),\n * organizationIdentifier=LEIXG-254900ZNYA1FLUQ9U393, C=LU\n * Issuer : CN=DIGITALSIGN QUALIFIED CA G1,\n * O=DigitalSign Certificadora Digital, C=PT\n * Serial : 73:C2:1C:49:4B:55:10:A0:0C:32:F1:E6:F5:05:94:D3:99:17:B0:F5\n * notAfter: 2027-11-17\n */\nconst PEM_ANCHORS: readonly string[] = [\n `-----BEGIN CERTIFICATE-----\nMIIIoDCCBoigAwIBAgIUc8IcSUtVEKAMMvHm9QWU05kXsPUwDQYJKoZIhvcNAQEN\nBQAwXzELMAkGA1UEBhMCUFQxKjAoBgNVBAoMIURpZ2l0YWxTaWduIENlcnRpZmlj\nYWRvcmEgRGlnaXRhbDEkMCIGA1UEAwwbRElHSVRBTFNJR04gUVVBTElGSUVEIENB\nIEcxMB4XDTIzMTExNzEwMTE0NloXDTI3MTExNzEwMTE0NlowggEVMQswCQYDVQQG\nEwJMVTFDMEEGA1UECww6Q2VydGlmaWNhdGUgUHJvZmlsZSAtIFF1YWxpZmllZCBD\nZXJ0aWZpY2F0ZSAtIE9yZ2FuaXphdGlvbjE5MDcGA1UECwwwRGlyZWN0b3JhdGUt\nR2VuZXJhbCBmb3IgRGlnaXRhbCBTZXJ2aWNlcyAoRElHSVQpMSMwIQYDVQRhDBpM\nRUlYRy0yNTQ5MDBaTllBMUZMVVE5VTM5MzEcMBoGA1UECgwTRVVST1BFQU4gQ09N\nTUlTU0lPTjElMCMGCSqGSIb3DQEJARYWZGlnaXQtZG1vQGVjLmV1cm9wYS5ldTEc\nMBoGA1UEAwwTRVVST1BFQU4gQ09NTUlTU0lPTjCCAiIwDQYJKoZIhvcNAQEBBQAD\nggIPADCCAgoCggIBAKWYeBA9kYARElGnHoJRNpbby44G+TSJcgHI9QtyXlYjB234\nhSAYyJvW+gKvoownskrogfUP6GOmQgEFZX335Y0sBwfppVemEoe9H9Aj/cpT14Iq\ndB05V4a88ASRfR0Va1xmQJrDsBZWqZHx0EEHBctIF5BjyTMAcQybha+4AOIotp3d\nF/7ZA3Cu4GYbN9BuQyyqfqrjMduDzzDjVwKC17aEsLev60C1FnIJ/FVEda3lJSGi\nlD5JyUceTaRcot1rw6gjKrOVhwP/UHfevJ3JCsQsuAzkf7ivzHzYuPPPR9Ussecw\nr7O95Fr4wbPYIyX2AOTlieAC7GMVXHN1/+4LH74ndvoJYEScXwmN9Skib3+G6Tqu\nOCQxvNXzHPZb95btCoSnVprCn14O3CXUTZMEKkhPuKW8dI6pR2JSGbtT+xBkcc1w\nYVlUnzE3d+YK5SSevUT2COwJM+AcjSoUaRTBINsD/ezDDvv7vtbF1XccaJjoCNku\nrzayTsMszGDvAF171LY69lNY6yK0uzrS+3c/hEHctXa5KIC3PpWrBGQ5mw73KerR\nvnAhzDZemVquPk1D59aJNfHoHXmy1bS52rHWYOwHH+2qbODdh8GkHwHXBzSpFit1\nKg2brpavhztNaGlj6GsLFAbr8okCUJllOOLQ8Tfy9Vnn5Rq0+7VTdd8dAxg9AgMB\nAAGjggKaMIICljAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFHNJ8UAcFAR8mhJ/\n+i/NXGcjGOkUMIGGBggrBgEFBQcBAQR6MHgwRgYIKwYBBQUHMAKGOmh0dHBzOi8v\ncWNhLWcxLmRpZ2l0YWxzaWduLnB0L0RJR0lUQUxTSUdOUVVBTElGSUVEQ0FHMS5w\nN2IwLgYIKwYBBQUHMAGGImh0dHBzOi8vcWNhLWcxLmRpZ2l0YWxzaWduLnB0L29j\nc3AwIQYDVR0RBBowGIEWZGlnaXQtZG1vQGVjLmV1cm9wYS5ldTBfBgNVHSAEWDBW\nMDcGCysGAQQBgcd8BAEBMCgwJgYIKwYBBQUHAgEWGmh0dHBzOi8vcGtpLmRpZ2l0\nYWxzaWduLnB0MBAGDisGAQQBgcd8BAIBAQEGMAkGBwQAi+xAAQMwHQYDVR0lBBYw\nFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIG8BggrBgEFBQcBAwSBrzCBrDAVBggrBgEF\nBQcLAjAJBgcEAIvsSQECMAgGBgQAjkYBATAIBgYEAI5GAQQwEwYGBACORgEGMAkG\nBwQAjkYBBgIwagYGBACORgEFMGAwLhYoaHR0cHM6Ly9xY2EtZzEuZGlnaXRhbHNp\nZ24ucHQvUERTX2VuLnBkZhMCZW4wLhYoaHR0cHM6Ly9xY2EtZzEuZGlnaXRhbHNp\nZ24ucHQvUERTX3B0LnBkZhMCcHQwSwYDVR0fBEQwQjBAoD6gPIY6aHR0cHM6Ly9x\nY2EtZzEuZGlnaXRhbHNpZ24ucHQvRElHSVRBTFNJR05RVUFMSUZJRURDQUcxLmNy\nbDAdBgNVHQ4EFgQUlO5hwcl9/63issm59r+TIHeJSZwwDgYDVR0PAQH/BAQDAgZA\nMA0GCSqGSIb3DQEBDQUAA4ICAQCn8qjJhTe3SsD7cB8S8kDzt+CBnJJm7bOFc9t9\nIU6iKntVtjPU4T+cYiPk8TnT+/w7dBphRzjZCL1sDfSJGQ5JPBw+hBPuvzEqP4xV\ni5i4Jhg/GpYSaa2+dkFXlKe6Sd+ii/RnwBSnfqVfNZtasj7yX+oujGau5LSUPIkQ\nxDrMie8KjsNtlkFjQDoioGAx8b0u6WyhAuqwEacCznft20Dim3sC7XJw8GHumrnW\n52rUzl4sbXoTBAt8F1zPCbEbjU0oc8SbFNPIChh+9sHUorEmHIlcg30LBHihkDCx\n4mK8J60Jybk57D4U2RO29VsJfDmnvNxfJZxfLHEJ2tkh+AMqlJXPDlvXQ+rZ1NmL\nHrbXkcHOlqR3F8BakTi2Mi5AZZfkfjZjkigEStN6Enaq6gwF7EsslqEKmhSQ8Xlh\nxWSRqljK/cnEUw+NhrvR4WuKlvYmxlCLQj6q89Hh121aUGUhL2L2WCVBjVXqux7s\n4mvECDzrucl5ilaVT32HO3g8qNLGD5lum53U5v/Nv68ItyHH96unztwBebmgox8g\niVRdzPhmPrpSfbmeNNDKj1p9SCeOvd3P9jCUvChVvH2P2ZUjc24tWe+tzclsCJi7\nGbKr6kjHc1jFudjehflAbm1IZAYdDNrhXamnsRVsz7iSH20eygCArlwSQ//WIQZP\nFrRffg==\n-----END CERTIFICATE-----`,\n];\n\nexport const EU_LOTL_SIGNING_ANCHORS: readonly X509Certificate[] = Object.freeze(\n PEM_ANCHORS.map((pem) => new X509Certificate(pem))\n);\n","import { X509Certificate } from '@peculiar/x509';\nimport { DOMParser } from '@xmldom/xmldom';\nimport type { Document as XmlDocument } from '@xmldom/xmldom';\nimport * as xmldsig from 'xmldsigjs';\nimport { LotlFetchError, LotlSignatureError } from '../errors.js';\nimport type { Fetcher } from './Fetcher.js';\n\nconst XMLDSIG_NS = 'http://www.w3.org/2000/09/xmldsig#';\n\nexport interface LotlFetcherOptions {\n fetcher?: Fetcher;\n}\n\n/**\n * Private — NOT exported from the package root. Fetches a TSL XML document\n * from HTTP(S) and verifies its enveloped XML-DSig against a caller-supplied\n * set of signing anchors. Any anchor that verifies wins; the remainder are\n * ignored. Consumed by `LotlTrustStore` (for the EU LOTL) and\n * `NationalTlResolver` (for per-country TLs).\n */\nexport class LotlFetcher {\n private readonly fetcher: Fetcher;\n\n constructor(opts: LotlFetcherOptions = {}) {\n this.fetcher = opts.fetcher ?? globalThis.fetch.bind(globalThis);\n }\n\n async fetchSigned(\n url: string,\n signingAnchors: readonly X509Certificate[]\n ): Promise<XmlDocument> {\n let xmlText: string;\n try {\n const response = await this.fetcher(url, { method: 'GET' });\n if (!response.ok) {\n throw new LotlFetchError(\n `LOTL fetch failed: HTTP ${response.status} for ${url}`,\n { url }\n );\n }\n xmlText = await response.text();\n } catch (err) {\n if (err instanceof LotlFetchError) throw err;\n throw new LotlFetchError(`LOTL fetch failed for ${url}`, {\n url,\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n }\n\n let doc: XmlDocument;\n try {\n const parsed = new DOMParser().parseFromString(\n xmlText,\n 'application/xml'\n );\n // @xmldom/xmldom signals parse failures via a <parsererror> element.\n const parseError = parsed.getElementsByTagName('parsererror')[0];\n if (parseError) {\n throw new Error(\n `XML parse error: ${parseError.textContent ?? 'unknown'}`\n );\n }\n if (!parsed.documentElement) {\n throw new Error('empty XML document');\n }\n doc = parsed;\n } catch (err) {\n throw new LotlFetchError(`LOTL XML parse failed for ${url}`, {\n url,\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n }\n\n const sigEl = doc.getElementsByTagNameNS(XMLDSIG_NS, 'Signature').item(0);\n if (!sigEl) {\n throw new LotlSignatureError(`no ds:Signature element in ${url}`);\n }\n\n for (const anchor of signingAnchors) {\n const verified = await verifyAgainst(doc, sigEl as unknown as Element, anchor);\n if (verified) return doc;\n }\n throw new LotlSignatureError(\n `no signing anchor verified the signature on ${url}`\n );\n }\n}\n\n/**\n * Verify an enveloped XML-DSig against a specific anchor certificate.\n *\n * Deviation from the reference snippet: `Verify(key)` in xmldsigjs 2.8.7\n * resolves the key for `ValidateSignatureValue` by calling `reimportKey`, which\n * re-imports via `Application.crypto`. If no crypto engine was registered this\n * path throws. Instead we bypass `Verify()` entirely and call the two\n * sub-operations directly:\n * 1. `ValidateReferences` — checks digests (document integrity).\n * 2. `ValidateSignatureValue([key])` — verifies the cryptographic signature.\n *\n * This guarantees the anchor key is the one used for verification — the\n * `Verify(key)` shortcut falls back to embedded `<X509Data>` when no key is\n * supplied, which would let any self-signed cert in the XML pass. That is\n * unacceptable for a trust-anchor-constrained verification.\n *\n * Keys MUST be imported using `xmldsig.Application.crypto.subtle` (the\n * registered provider, e.g. @peculiar/webcrypto) so that `ValidateSignatureValue`\n * receives a compatible CryptoKey instance. Native `crypto.subtle` keys are\n * rejected by webcrypto-core's type guard.\n */\nasync function verifyAgainst(\n doc: XmlDocument,\n sigEl: Element,\n anchor: X509Certificate\n): Promise<boolean> {\n try {\n const signed = new xmldsig.SignedXml(doc as unknown as Document);\n signed.LoadXml(sigEl as unknown as Element);\n\n // Clone the content element for ValidateReferences (it mutates internally).\n const docEl = doc.documentElement;\n const cloned = docEl?.cloneNode(true);\n // ValidateReferences and ValidateSignatureValue are protected in the\n // xmldsigjs type declarations but accessible at runtime. Cast through\n // unknown to bypass the visibility restriction.\n const signedAny = signed as unknown as {\n ValidateReferences(el: unknown): Promise<boolean>;\n ValidateSignatureValue(keys: CryptoKey[]): Promise<boolean>;\n };\n const refsOk = await signedAny.ValidateReferences(cloned);\n if (!refsOk) return false;\n\n // Import the anchor's SPKI DER bytes using the registered crypto provider\n // so that ValidateSignatureValue receives a compatible CryptoKey.\n // Detect algorithm + curve from the anchor certificate's public key to\n // support P-256, P-384, P-521, and RSA variants without hardcoding.\n const appCrypto = xmldsig.Application.crypto;\n const spkiDer = anchor.publicKey.rawData as ArrayBuffer;\n\n const pubKeyAlg = (anchor.publicKey as unknown as { algorithm?: { name?: string; namedCurve?: string; hash?: { name?: string } | string } }).algorithm;\n const algName = pubKeyAlg?.name ?? '';\n const importAlg: AlgorithmIdentifier | EcKeyImportParams | RsaHashedImportParams = buildImportAlgorithm(algName, pubKeyAlg);\n\n const providerKey = await appCrypto.subtle.importKey(\n 'spki',\n spkiDer,\n importAlg,\n true,\n ['verify']\n );\n\n return await signedAny.ValidateSignatureValue([providerKey]);\n } catch (err) {\n // Signature-value mismatches return `false` cleanly from\n // ValidateSignatureValue. Exceptions here indicate either a key-import\n // failure (wrong curve / malformed SPKI) or a DOM-walk failure. Those\n // are not signature mismatches — log them so a misconfigured anchor\n // doesn't silently exhaust the list.\n if (err instanceof Error) {\n console.warn(\n `[openid4vp] LotlFetcher: anchor ${anchor.subject} failed to verify — ${err.name}: ${err.message}`\n );\n }\n return false;\n }\n}\n\n/**\n * Build the algorithm descriptor for `importKey('spki', ...)` by inspecting\n * the `publicKey.algorithm` property populated by `@peculiar/x509`.\n *\n * For EC keys the algorithm looks like `{ name: 'ECDSA', namedCurve: 'P-256' }`.\n * For RSA keys it looks like `{ name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-256' } }`\n * (or with the hash as a plain string). We map the curve to its conventional\n * matching hash so that the import parameters are correct for the key material.\n */\nfunction buildImportAlgorithm(\n algName: string,\n pubKeyAlg: { name?: string; namedCurve?: string; hash?: { name?: string } | string } | undefined\n): AlgorithmIdentifier | EcKeyImportParams | RsaHashedImportParams {\n if (algName.includes('EC') || algName.includes('ECDSA')) {\n const namedCurve = pubKeyAlg?.namedCurve ?? 'P-256';\n return { name: 'ECDSA', namedCurve } as EcKeyImportParams;\n }\n\n // RSA family: extract hash from the algorithm descriptor if available,\n // otherwise default to SHA-256.\n const rawHash = pubKeyAlg?.hash;\n let hashName: string;\n if (typeof rawHash === 'string') {\n hashName = rawHash;\n } else if (typeof rawHash === 'object' && rawHash !== null && rawHash.name) {\n hashName = rawHash.name;\n } else {\n hashName = 'SHA-256';\n }\n\n return {\n name: 'RSASSA-PKCS1-v1_5',\n hash: { name: hashName },\n } as RsaHashedImportParams;\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport type { Document as XmlDocument, Element as XmlElement } from '@xmldom/xmldom';\nimport type { LotlSnapshot, OtherTslPointer } from './lotl-types.js';\nimport { base64DerToCert, firstChild, textOfDeep } from './xml-util.js';\n\nconst TSL_NS = 'http://uri.etsi.org/02231/v2#';\n\n/**\n * Private — NOT exported from the package root. Parses a verified LOTL\n * XML `Document` into the normalized `LotlSnapshot` used by the rest of\n * the module. Does not fetch; does not verify signatures (that is the\n * `LotlFetcher`'s job). Pure XML-to-value conversion.\n */\nexport class LotlParser {\n parse(doc: XmlDocument): LotlSnapshot {\n const root = doc.documentElement!;\n const scheme = firstChild(root, TSL_NS, 'SchemeInformation');\n if (!scheme) {\n throw new Error(\n 'LOTL XML: missing SchemeInformation element'\n );\n }\n const issueDateText = textOfDeep(scheme, TSL_NS, 'ListIssueDateTime');\n if (!issueDateText) {\n throw new Error(\n 'LOTL XML: missing ListIssueDateTime element'\n );\n }\n const issueDate = new Date(issueDateText);\n if (isNaN(issueDate.getTime())) {\n throw new Error(\n `LOTL XML: invalid ListIssueDateTime \"${issueDateText}\"`\n );\n }\n const nextUpdate = parseNextUpdate(scheme);\n const pointersContainer = firstChild(\n scheme,\n TSL_NS,\n 'PointersToOtherTSL'\n );\n const pointers: OtherTslPointer[] = [];\n if (pointersContainer) {\n const items = pointersContainer.getElementsByTagNameNS(\n TSL_NS,\n 'OtherTSLPointer'\n );\n for (let i = 0; i < items.length; i++) {\n const p = parsePointer(items.item(i)!);\n if (p) pointers.push(p);\n }\n }\n return { issueDate, nextUpdate, pointers };\n }\n}\n\nfunction parseNextUpdate(scheme: XmlElement): Date | null {\n const nu = firstChild(scheme, TSL_NS, 'NextUpdate');\n if (!nu) return null;\n const dt = textOfDeep(nu, TSL_NS, 'dateTime');\n if (!dt) return null;\n const d = new Date(dt);\n return isNaN(d.getTime()) ? null : d;\n}\n\nfunction parsePointer(el: XmlElement): OtherTslPointer | null {\n const tslLocation = textOfDeep(el, TSL_NS, 'TSLLocation');\n if (!tslLocation) return null;\n // SchemeTerritory can be nested under AdditionalInformation/OtherInformation.\n const territory =\n textOfDeep(el, TSL_NS, 'SchemeTerritory') ?? 'XX';\n const certs: X509Certificate[] = [];\n const certEls = el.getElementsByTagNameNS(TSL_NS, 'X509Certificate');\n for (let i = 0; i < certEls.length; i++) {\n const cert = base64DerToCert(certEls.item(i)!.textContent ?? '');\n if (cert) certs.push(cert);\n }\n return {\n country: territory,\n tslLocation,\n signingCertificates: certs,\n };\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport type { Element as XmlElement } from '@xmldom/xmldom';\n\n/**\n * Returns the first element with the given namespace + local name that is a\n * descendant of `parent` (including direct children).\n * Equivalent to getElementsByTagNameNS(ns, name).item(0).\n */\nexport function firstChild(\n parent: XmlElement,\n ns: string,\n name: string\n): XmlElement | null {\n const list = parent.getElementsByTagNameNS(ns, name);\n return list.length > 0 ? (list.item(0) as XmlElement) : null;\n}\n\n/**\n * Returns the trimmed text content of the first element with the given\n * namespace + local name anywhere under `parent`, or null if not found.\n * Works for both direct children and deeper descendants.\n */\nexport function textOfDeep(\n parent: XmlElement,\n ns: string,\n name: string\n): string | null {\n const list = parent.getElementsByTagNameNS(ns, name);\n return list.length > 0\n ? list.item(0)!.textContent?.trim() ?? null\n : null;\n}\n\n/**\n * Parse a base64-encoded DER certificate. Returns null on any parse failure.\n */\nexport function base64DerToCert(base64: string): X509Certificate | null {\n const cleaned = base64.replace(/\\s+/g, '');\n if (!cleaned) return null;\n try {\n const bin = (globalThis as { atob: (s: string) => string }).atob(cleaned);\n const der = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) der[i] = bin.charCodeAt(i);\n return new X509Certificate(der as Uint8Array<ArrayBuffer>);\n } catch {\n return null;\n }\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport type { Document as XmlDocument, Element as XmlElement } from '@xmldom/xmldom';\nimport type { LotlFetcher } from './LotlFetcher.js';\nimport type {\n LotlSnapshot,\n NationalTlSnapshot,\n TspService,\n} from './lotl-types.js';\nimport { base64DerToCert, firstChild, textOfDeep } from './xml-util.js';\n\nconst TSL_NS = 'http://uri.etsi.org/02231/v2#';\n\nexport interface NationalTlResolverOptions {\n fetcher: LotlFetcher;\n}\n\n/**\n * Private — NOT exported from the package root. Given a verified\n * `LotlSnapshot`, fetches + parses every national TL it points to.\n * Fetches run in parallel; individual failures are logged via\n * `console.warn` and skipped (spec §8.4 graceful degradation).\n */\nexport class NationalTlResolver {\n constructor(private readonly opts: NationalTlResolverOptions) {}\n\n async resolve(lotl: LotlSnapshot): Promise<NationalTlSnapshot[]> {\n const tasks = lotl.pointers.map(async (pointer) => {\n try {\n const doc = await this.opts.fetcher.fetchSigned(\n pointer.tslLocation,\n pointer.signingCertificates\n );\n return parseNationalTl(doc, pointer.country);\n } catch (err) {\n console.warn(\n `[openid4vp] national TL for ${pointer.country} failed: ${(err as Error).message}`\n );\n return null;\n }\n });\n const results = await Promise.all(tasks);\n return results.filter((r): r is NationalTlSnapshot => r !== null);\n }\n}\n\nfunction parseNationalTl(doc: XmlDocument, country: string): NationalTlSnapshot {\n const root = doc.documentElement!;\n const scheme = firstChild(root, TSL_NS, 'SchemeInformation');\n if (!scheme) {\n throw new Error(\n `national TL for ${country}: missing SchemeInformation element`\n );\n }\n const issueText = firstChild(scheme, TSL_NS, 'ListIssueDateTime')\n ?.textContent?.trim();\n if (!issueText) {\n throw new Error(\n `national TL for ${country}: missing ListIssueDateTime element`\n );\n }\n const issueDate = new Date(issueText);\n if (isNaN(issueDate.getTime())) {\n throw new Error(\n `national TL for ${country}: invalid ListIssueDateTime \"${issueText}\"`\n );\n }\n const nextUpdate = parseNextUpdate(scheme);\n const services: TspService[] = [];\n const tspListEl = firstChild(root, TSL_NS, 'TrustServiceProviderList');\n if (tspListEl) {\n const providers = tspListEl.getElementsByTagNameNS(\n TSL_NS,\n 'TrustServiceProvider'\n );\n for (let i = 0; i < providers.length; i++) {\n const provider = providers.item(i)!;\n // Provider name may be under TSPInformation/TSPName/Name or TSPName/Name.\n // Use deep search to handle both structures.\n const providerName =\n textOfDeep(provider as XmlElement, TSL_NS, 'Name') ??\n 'Unknown';\n const servicesContainer = firstChild(provider as XmlElement, TSL_NS, 'TSPServices');\n if (!servicesContainer) continue;\n const serviceEls = servicesContainer.getElementsByTagNameNS(\n TSL_NS,\n 'TSPService'\n );\n for (let j = 0; j < serviceEls.length; j++) {\n const s = parseService(\n serviceEls.item(j)! as XmlElement,\n providerName,\n country\n );\n if (s) services.push(s);\n }\n }\n }\n return { country, issueDate, nextUpdate, services };\n}\n\nfunction parseService(\n el: XmlElement,\n providerName: string,\n country: string\n): TspService | null {\n const info = firstChild(el, TSL_NS, 'ServiceInformation');\n if (!info) return null;\n const typeId = firstChild(info, TSL_NS, 'ServiceTypeIdentifier')\n ?.textContent?.trim();\n const status = firstChild(info, TSL_NS, 'ServiceStatus')\n ?.textContent?.trim();\n if (!typeId || !status) return null;\n const nameEl = firstChild(info, TSL_NS, 'ServiceName');\n const serviceName =\n (nameEl &&\n nameEl.getElementsByTagNameNS(TSL_NS, 'Name').item(0)?.textContent?.trim()) ||\n 'Unknown Service';\n const digitalId = firstChild(info, TSL_NS, 'ServiceDigitalIdentity');\n const certs: X509Certificate[] = [];\n if (digitalId) {\n const certEls = digitalId.getElementsByTagNameNS(TSL_NS, 'X509Certificate');\n for (let i = 0; i < certEls.length; i++) {\n const cert = base64DerToCert(certEls.item(i)!.textContent ?? '');\n if (cert) certs.push(cert);\n }\n }\n const asiContainer = firstChild(info, TSL_NS, 'ServiceInformationExtensions');\n const asiUris: string[] = [];\n if (asiContainer) {\n const uris = asiContainer.getElementsByTagNameNS(TSL_NS, 'URI');\n for (let i = 0; i < uris.length; i++) {\n const u = uris.item(i)!.textContent?.trim();\n if (u) asiUris.push(u);\n }\n }\n return {\n providerName,\n country,\n serviceTypeIdentifier: typeId,\n serviceStatus: status,\n serviceName,\n certificates: certs,\n additionalServiceInformationUris: asiUris,\n };\n}\n\nfunction parseNextUpdate(scheme: XmlElement | null): Date | null {\n if (!scheme) return null;\n const nu = firstChild(scheme, TSL_NS, 'NextUpdate');\n if (!nu) return null;\n const dt = firstChild(nu, TSL_NS, 'dateTime')?.textContent?.trim();\n if (!dt) return null;\n const d = new Date(dt);\n return isNaN(d.getTime()) ? null : d;\n}\n\n"]}
1
+ {"version":3,"sources":["../src/reflect-polyfill.ts","../src/errors.ts","../node_modules/pvtsutils/build/index.es.js","../node_modules/pvutils/build/utils.es.js","../node_modules/asn1js/build/index.es.js","../node_modules/@peculiar/asn1-schema/build/es2015/enums.js","../node_modules/@peculiar/asn1-schema/build/es2015/types/bit_string.js","../node_modules/@peculiar/asn1-schema/build/es2015/types/octet_string.js","../node_modules/@peculiar/asn1-schema/build/es2015/types/index.js","../node_modules/@peculiar/asn1-schema/build/es2015/converters.js","../node_modules/@peculiar/asn1-schema/build/es2015/helper.js","../node_modules/@peculiar/asn1-schema/build/es2015/schema.js","../node_modules/@peculiar/asn1-schema/build/es2015/storage.js","../node_modules/@peculiar/asn1-schema/build/es2015/decorators.js","../node_modules/@peculiar/asn1-schema/build/es2015/errors/schema_validation.js","../node_modules/@peculiar/asn1-schema/build/es2015/errors/index.js","../node_modules/@peculiar/asn1-schema/build/es2015/parser.js","../node_modules/@peculiar/asn1-schema/build/es2015/serializer.js","../node_modules/@peculiar/asn1-schema/build/es2015/objects.js","../node_modules/@peculiar/asn1-schema/build/es2015/convert.js","../node_modules/@peculiar/asn1-schema/build/es2015/index.js","../node_modules/tslib/tslib.es6.mjs","../node_modules/@peculiar/asn1-x509/build/es2015/ip_converter.js","../node_modules/@peculiar/asn1-x509/build/es2015/name.js","../node_modules/@peculiar/asn1-x509/build/es2015/general_name.js","../node_modules/@peculiar/asn1-x509/build/es2015/object_identifiers.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/authority_information_access.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/authority_key_identifier.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/basic_constraints.js","../node_modules/@peculiar/asn1-x509/build/es2015/general_names.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/certificate_issuer.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/certificate_policies.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_number.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_delta_indicator.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_distribution_points.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_freshest.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_issuing_distribution_point.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_reason.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/extended_key_usage.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/inhibit_any_policy.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/invalidity_date.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/issuer_alternative_name.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/key_usage.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/name_constraints.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/policy_constraints.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/policy_mappings.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_alternative_name.js","../node_modules/@peculiar/asn1-x509/build/es2015/attribute.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_directory_attributes.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_key_identifier.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/private_key_usage_period.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/entrust_version_info.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_info_access.js","../node_modules/@peculiar/asn1-x509/build/es2015/extensions/index.js","../node_modules/@peculiar/asn1-x509/build/es2015/algorithm_identifier.js","../node_modules/@peculiar/asn1-x509/build/es2015/subject_public_key_info.js","../node_modules/@peculiar/asn1-x509/build/es2015/time.js","../node_modules/@peculiar/asn1-x509/build/es2015/validity.js","../node_modules/@peculiar/asn1-x509/build/es2015/extension.js","../node_modules/@peculiar/asn1-x509/build/es2015/types.js","../node_modules/@peculiar/asn1-x509/build/es2015/tbs_certificate.js","../node_modules/@peculiar/asn1-x509/build/es2015/certificate.js","../node_modules/@peculiar/asn1-x509/build/es2015/tbs_cert_list.js","../node_modules/@peculiar/asn1-x509/build/es2015/certificate_list.js","../node_modules/@peculiar/asn1-x509/build/es2015/index.js","../src/trust/x509-utils.ts","../src/trust/ChainBuilder.ts","../src/trust/ecdsa-util.ts","../src/trust/CrlFetcher.ts","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/acceptable_responses.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/archive_cutoff.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/extended_revoke.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/nonce.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/preferred_signature_algorithms.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/service_locator.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/extensions/index.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/responder_id.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/cert_id.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/revoked_info.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/cert_status.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/single_response.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/types.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/response_data.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/basic_ocsp_response.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/object_identifiers.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/signature.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/request.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/tbs_request.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/ocsp_request.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/ocsp_response_status.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/response_bytes.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/ocsp_response.js","../node_modules/@peculiar/asn1-ocsp/build/es2015/index.js","../src/trust/OcspClient.ts","../src/trust/RevocationChecker.ts","../src/trust/lotl-loa-mapping.ts","../src/trust/service-metadata.ts","../src/trust/ProvenanceResolver.ts","../src/trust/TrustEvaluator.ts","../src/index.ts","../src/authorization.ts","../src/signed-authorization.ts","../src/haip.ts","../src/presentation.ts","../src/parsers/mdoc.parser.ts","../src/crypto/cose-sign1.ts","../src/crypto/device-auth.ts","../src/crypto/digest.ts","../src/crypto/mso.ts","../src/parsers/sd-jwt.parser.ts","../src/verify.ts","../src/decrypt-response.ts","../src/crypto/session-transcript.ts","../src/trust/Cache.ts","../src/trust/index.ts","../src/trust/TrustStore.ts","../src/trust/LotlTrustStore.ts","../src/trust/lotl-signing-anchors.ts","../src/trust/LotlFetcher.ts","../src/trust/LotlParser.ts","../src/trust/xml-util.ts","../src/trust/NationalTlResolver.ts"],"names":["InvalidSignatureError","ExpiredCredentialError","UnsupportedFormatError","MalformedCredentialError","NonceValidationError","HaipValidationError","OpenID4VPError","TrustAnchorNotFoundError","CertificateChainError","RevokedCertificateError","RevocationCheckFailedError","LotlFetchError","LotlSignatureError","LotlConfigurationError","SignedRequestBuildError","UnsupportedJweError","DecryptionFailedError","MissingDecryptionKeyError","MissingVerifierEncryptionKeyError","MultipleCredentialsNotSupportedError","enc","retBuf","retView","Boolean","Set","_a","init_index_es","AsnTypeTypes","AsnPropTypes","BitString","OctetString","defaultConverter","init_errors","DirectoryString","AttributeValue","RelativeDistinguishedName","RDNSequence","Name","GeneralName","AuthorityInfoAccessSyntax","GeneralNames","CertificateIssuer","DisplayText","Qualifier","CertificatePolicies","CRLNumber","BaseCRLNumber","ReasonFlags","DistributionPointName","CRLDistributionPoints","FreshestCRL","CRLReasons","CRLReason","ExtendedKeyUsage","InhibitAnyPolicy","InvalidityDate","IssueAlternativeName","KeyUsageFlags","GeneralSubtrees","PolicyMappings","SubjectAlternativeName","SubjectDirectoryAttributes","EntrustInfoFlags","SubjectInfoAccessSyntax","Time","Extensions","init_types","Version","init_es2015","SubjectKeyIdentifierExtension","SubjectAlternativeNameExtension","X509Name","X509Certificates","BasicConstraintsExtension","KeyUsagesExtension","AuthorityKeyIdentifierExtension","parsed","AcceptableResponses","ArchiveCutoff","ExtendedRevoke","PreferredSignatureAlgorithms","init_extensions","ResponderID","CertStatus","init_object_identifiers","OCSPResponseStatus","normalizeHexUnsignedInt","bytesToHex","X509Certificate","ExtendedKeyUsageExtension","envelope","ProvenanceResolver","uuidv4","SignJWT","CborEncoder","Tag","HEADER_ALG","COSE_ALG_TO_NAME","ALG_TO_HASH","decoder","bytesEqual","TrustEvaluator","importX509","DEFAULT_ALLOWED_ALGORITHMS","encoder","derToPem","splitSdJwt","decodeProtectedHeader","result","jwtVerify","importJWK","decodeSdJwt","getClaims","compactDecrypt","matchQuery","buildSubmission","DOMParser","xmldsig","TSL_NS","parseNextUpdate"],"mappings":"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","file":"index.cjs","sourcesContent":["// Injected ahead of the entry module by tsup (`inject` in tsup.config.ts) so the\n// reflect-metadata polyfill is installed before anything that pulls in\n// @peculiar/x509 → tsyringe, which reads decorator metadata while its own module\n// body evaluates. `src/index.ts` imports this polyfill too, for consumers that\n// build from source rather than from dist.\n//\n// Keep this file side-effect-only: `inject` evaluates it for its side effects.\nimport 'reflect-metadata';\n","export class InvalidSignatureError extends Error {\n constructor(message = 'Credential signature validation failed') {\n super(message);\n this.name = 'InvalidSignatureError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class ExpiredCredentialError extends Error {\n constructor(message = 'Credential has expired') {\n super(message);\n this.name = 'ExpiredCredentialError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class UnsupportedFormatError extends Error {\n constructor(format: string) {\n super(`Unsupported credential format: ${format}`);\n this.name = 'UnsupportedFormatError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class MalformedCredentialError extends Error {\n constructor(message = 'Credential structure is malformed') {\n super(message);\n this.name = 'MalformedCredentialError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class NonceValidationError extends Error {\n constructor(message = 'Nonce does not match expected value') {\n super(message);\n this.name = 'NonceValidationError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport type HaipValidationCode =\n | 'EMPTY_QUERY'\n | 'UNSUPPORTED_FORMAT'\n | 'MISSING_SDJWT_META'\n | 'MISSING_MDOC_META'\n | 'NO_CLAIMS'\n | 'CLAIM_SETS_DISALLOWED'\n | 'CREDENTIAL_SETS_DISALLOWED'\n // Added in 0.12.0 for the credential_sets disjunction profile.\n | 'EMPTY_OPTIONS'\n | 'DUPLICATE_CREDENTIAL_ID'\n | 'MISSING_CREDENTIAL_SETS'\n | 'UNKNOWN_OPTION_REFERENCE';\n\nexport class HaipValidationError extends Error {\n readonly code: HaipValidationCode;\n readonly credentialId?: string;\n\n constructor(code: HaipValidationCode, message: string, credentialId?: string) {\n super(message);\n this.name = 'HaipValidationError';\n this.code = code;\n this.credentialId = credentialId;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n// ---------------------------------------------------------------------------\n// New in 0.5.0: OpenID4VPError base + trust-module error classes\n// ---------------------------------------------------------------------------\n\nexport abstract class OpenID4VPError extends Error {\n abstract readonly code: string;\n\n constructor(message: string, options?: { cause?: Error }) {\n super(message);\n this.name = new.target.name;\n if (options?.cause !== undefined) {\n (this as { cause?: unknown }).cause = options.cause;\n }\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class TrustAnchorNotFoundError extends OpenID4VPError {\n readonly code = 'trust_anchor_not_found' as const;\n}\n\nexport type ChainErrorReason =\n | 'signature'\n | 'validity'\n | 'name_constraints'\n | 'key_usage'\n | 'basic_constraints'\n | 'path_length'\n | 'algorithm_disallowed'\n | 'aki_ski_mismatch';\n\nexport class CertificateChainError extends OpenID4VPError {\n readonly code = 'chain_invalid' as const;\n readonly reason: ChainErrorReason;\n\n constructor(\n message: string,\n options: { reason: ChainErrorReason; cause?: Error }\n ) {\n super(message, { cause: options.cause });\n this.reason = options.reason;\n }\n}\n\nexport class RevokedCertificateError extends OpenID4VPError {\n readonly code = 'certificate_revoked' as const;\n readonly serial: string;\n readonly revokedAt: Date;\n readonly reason?: string;\n\n constructor(\n message: string,\n options: { serial: string; revokedAt: Date; reason?: string; cause?: Error }\n ) {\n super(message, { cause: options.cause });\n this.serial = options.serial;\n this.revokedAt = options.revokedAt;\n this.reason = options.reason;\n }\n}\n\nexport class RevocationCheckFailedError extends OpenID4VPError {\n readonly code = 'revocation_check_failed' as const;\n}\n\nexport class LotlFetchError extends OpenID4VPError {\n readonly code = 'lotl_fetch_failed' as const;\n readonly url: string;\n\n constructor(\n message: string,\n options: { url: string; cause?: Error }\n ) {\n super(message, { cause: options.cause });\n this.url = options.url;\n }\n}\n\nexport class LotlSignatureError extends OpenID4VPError {\n readonly code = 'lotl_signature_invalid' as const;\n}\n\n/**\n * The environment is not configured to verify trusted-list signatures at all —\n * distinct from a list whose signature did not verify.\n *\n * `xmldsigjs` needs a WebCrypto engine registered once per process, and this\n * library deliberately leaves that to the consumer rather than picking a\n * provider on their behalf. Without it, no trusted list can ever verify, so\n * this is raised eagerly instead of degrading per-list: a configuration fault\n * reported as a trust failure sends people bisecting valid XML.\n */\nexport class LotlConfigurationError extends OpenID4VPError {\n readonly code = 'lotl_configuration_invalid' as const;\n}\n\n// ---------------------------------------------------------------------------\n// New in 0.7.0: workstream B-remaining (signed requests + direct_post.jwt)\n// ---------------------------------------------------------------------------\n\nexport type SignedRequestBuildErrorCode =\n | 'empty_cert_chain'\n | 'hostname_cert_mismatch'\n | 'signing_key_cert_mismatch'\n | 'missing_encryption_jwk'\n | 'missing_encryption_alg'\n | 'missing_vp_formats'\n | 'unsupported_signing_alg'\n | 'empty_supported_enc_values'\n | 'missing_hostname'\n | 'self_signed_leaf';\n\nexport class SignedRequestBuildError extends OpenID4VPError {\n readonly code: SignedRequestBuildErrorCode;\n constructor(code: SignedRequestBuildErrorCode, message: string) {\n super(message);\n this.code = code;\n }\n}\n\nexport class UnsupportedJweError extends OpenID4VPError {\n readonly code = 'unsupported_jwe' as const;\n readonly alg: string;\n readonly enc: string;\n constructor(alg: string, enc: string) {\n super(`Unsupported JWE algorithms: alg=${alg}, enc=${enc}`);\n this.alg = alg;\n this.enc = enc;\n }\n}\n\nexport class DecryptionFailedError extends OpenID4VPError {\n readonly code = 'decryption_failed' as const;\n constructor(message = 'Failed to decrypt authorization response', options?: { cause?: Error }) {\n super(message, options);\n }\n}\n\nexport class MissingDecryptionKeyError extends OpenID4VPError {\n readonly code = 'missing_decryption_key' as const;\n constructor(message = 'decryptionKey is required to verify a direct_post.jwt response') {\n super(message);\n }\n}\n\nexport class MissingVerifierEncryptionKeyError extends OpenID4VPError {\n readonly code = 'missing_verifier_encryption_key' as const;\n constructor(\n message = 'verifierEncryptionJwk is required to build the OID4VP 1.0 OpenID4VPHandover SessionTranscript for an encrypted response'\n ) {\n super(message);\n }\n}\n\nexport class MultipleCredentialsNotSupportedError extends OpenID4VPError {\n readonly code = 'multi_credential_unsupported' as const;\n readonly entryCount: number;\n readonly presentationCount: number;\n constructor(entryCount: number, presentationCount: number) {\n super(\n `Multi-credential presentations are not yet supported: ` +\n `${entryCount} queryId entries, ${presentationCount} presentations`\n );\n this.entryCount = entryCount;\n this.presentationCount = presentationCount;\n }\n}\n","/*!\n * MIT License\n * \n * Copyright (c) 2017-2024 Peculiar Ventures, LLC\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n * \n */\n\nconst ARRAY_BUFFER_NAME = \"[object ArrayBuffer]\";\nclass BufferSourceConverter {\n static isArrayBuffer(data) {\n return Object.prototype.toString.call(data) === ARRAY_BUFFER_NAME;\n }\n static toArrayBuffer(data) {\n if (this.isArrayBuffer(data)) {\n return data;\n }\n if (data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n return this.toUint8Array(data.buffer)\n .slice(data.byteOffset, data.byteOffset + data.byteLength)\n .buffer;\n }\n static toUint8Array(data) {\n return this.toView(data, Uint8Array);\n }\n static toView(data, type) {\n if (data.constructor === type) {\n return data;\n }\n if (this.isArrayBuffer(data)) {\n return new type(data);\n }\n if (this.isArrayBufferView(data)) {\n return new type(data.buffer, data.byteOffset, data.byteLength);\n }\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n static isBufferSource(data) {\n return this.isArrayBufferView(data)\n || this.isArrayBuffer(data);\n }\n static isArrayBufferView(data) {\n return ArrayBuffer.isView(data)\n || (data && this.isArrayBuffer(data.buffer));\n }\n static isEqual(a, b) {\n const aView = BufferSourceConverter.toUint8Array(a);\n const bView = BufferSourceConverter.toUint8Array(b);\n if (aView.length !== bView.byteLength) {\n return false;\n }\n for (let i = 0; i < aView.length; i++) {\n if (aView[i] !== bView[i]) {\n return false;\n }\n }\n return true;\n }\n static concat(...args) {\n let buffers;\n if (Array.isArray(args[0]) && !(args[1] instanceof Function)) {\n buffers = args[0];\n }\n else if (Array.isArray(args[0]) && args[1] instanceof Function) {\n buffers = args[0];\n }\n else {\n if (args[args.length - 1] instanceof Function) {\n buffers = args.slice(0, args.length - 1);\n }\n else {\n buffers = args;\n }\n }\n let size = 0;\n for (const buffer of buffers) {\n size += buffer.byteLength;\n }\n const res = new Uint8Array(size);\n let offset = 0;\n for (const buffer of buffers) {\n const view = this.toUint8Array(buffer);\n res.set(view, offset);\n offset += view.length;\n }\n if (args[args.length - 1] instanceof Function) {\n return this.toView(res, args[args.length - 1]);\n }\n return res.buffer;\n }\n}\n\nconst STRING_TYPE = \"string\";\nconst HEX_REGEX = /^[0-9a-f\\s]+$/i;\nconst BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst BASE64URL_REGEX = /^[a-zA-Z0-9-_]+$/;\nclass Utf8Converter {\n static fromString(text) {\n const s = unescape(encodeURIComponent(text));\n const uintArray = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) {\n uintArray[i] = s.charCodeAt(i);\n }\n return uintArray.buffer;\n }\n static toString(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let encodedString = \"\";\n for (let i = 0; i < buf.length; i++) {\n encodedString += String.fromCharCode(buf[i]);\n }\n const decodedString = decodeURIComponent(escape(encodedString));\n return decodedString;\n }\n}\nclass Utf16Converter {\n static toString(buffer, littleEndian = false) {\n const arrayBuffer = BufferSourceConverter.toArrayBuffer(buffer);\n const dataView = new DataView(arrayBuffer);\n let res = \"\";\n for (let i = 0; i < arrayBuffer.byteLength; i += 2) {\n const code = dataView.getUint16(i, littleEndian);\n res += String.fromCharCode(code);\n }\n return res;\n }\n static fromString(text, littleEndian = false) {\n const res = new ArrayBuffer(text.length * 2);\n const dataView = new DataView(res);\n for (let i = 0; i < text.length; i++) {\n dataView.setUint16(i * 2, text.charCodeAt(i), littleEndian);\n }\n return res;\n }\n}\nclass Convert {\n static isHex(data) {\n return typeof data === STRING_TYPE\n && HEX_REGEX.test(data);\n }\n static isBase64(data) {\n return typeof data === STRING_TYPE\n && BASE64_REGEX.test(data);\n }\n static isBase64Url(data) {\n return typeof data === STRING_TYPE\n && BASE64URL_REGEX.test(data);\n }\n static ToString(buffer, enc = \"utf8\") {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.ToUtf8String(buf);\n case \"binary\":\n return this.ToBinary(buf);\n case \"hex\":\n return this.ToHex(buf);\n case \"base64\":\n return this.ToBase64(buf);\n case \"base64url\":\n return this.ToBase64Url(buf);\n case \"utf16le\":\n return Utf16Converter.toString(buf, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buf);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static FromString(str, enc = \"utf8\") {\n if (!str) {\n return new ArrayBuffer(0);\n }\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.FromUtf8String(str);\n case \"binary\":\n return this.FromBinary(str);\n case \"hex\":\n return this.FromHex(str);\n case \"base64\":\n return this.FromBase64(str);\n case \"base64url\":\n return this.FromBase64Url(str);\n case \"utf16le\":\n return Utf16Converter.fromString(str, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(str);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static ToBase64(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n if (typeof btoa !== \"undefined\") {\n const binary = this.ToString(buf, \"binary\");\n return btoa(binary);\n }\n else {\n return Buffer.from(buf).toString(\"base64\");\n }\n }\n static FromBase64(base64) {\n const formatted = this.formatString(base64);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64(formatted)) {\n throw new TypeError(\"Argument 'base64Text' is not Base64 encoded\");\n }\n if (typeof atob !== \"undefined\") {\n return this.FromBinary(atob(formatted));\n }\n else {\n return new Uint8Array(Buffer.from(formatted, \"base64\")).buffer;\n }\n }\n static FromBase64Url(base64url) {\n const formatted = this.formatString(base64url);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64Url(formatted)) {\n throw new TypeError(\"Argument 'base64url' is not Base64Url encoded\");\n }\n return this.FromBase64(this.Base64Padding(formatted.replace(/\\-/g, \"+\").replace(/\\_/g, \"/\")));\n }\n static ToBase64Url(data) {\n return this.ToBase64(data).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/\\=/g, \"\");\n }\n static FromUtf8String(text, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.FromBinary(text);\n case \"utf8\":\n return Utf8Converter.fromString(text);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(text);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.fromString(text, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static ToUtf8String(buffer, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.ToBinary(buffer);\n case \"utf8\":\n return Utf8Converter.toString(buffer);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buffer);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.toString(buffer, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static FromBinary(text) {\n const stringLength = text.length;\n const resultView = new Uint8Array(stringLength);\n for (let i = 0; i < stringLength; i++) {\n resultView[i] = text.charCodeAt(i);\n }\n return resultView.buffer;\n }\n static ToBinary(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let res = \"\";\n for (let i = 0; i < buf.length; i++) {\n res += String.fromCharCode(buf[i]);\n }\n return res;\n }\n static ToHex(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let result = \"\";\n const len = buf.length;\n for (let i = 0; i < len; i++) {\n const byte = buf[i];\n if (byte < 16) {\n result += \"0\";\n }\n result += byte.toString(16);\n }\n return result;\n }\n static FromHex(hexString) {\n let formatted = this.formatString(hexString);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isHex(formatted)) {\n throw new TypeError(\"Argument 'hexString' is not HEX encoded\");\n }\n if (formatted.length % 2) {\n formatted = `0${formatted}`;\n }\n const res = new Uint8Array(formatted.length / 2);\n for (let i = 0; i < formatted.length; i = i + 2) {\n const c = formatted.slice(i, i + 2);\n res[i / 2] = parseInt(c, 16);\n }\n return res.buffer;\n }\n static ToUtf16String(buffer, littleEndian = false) {\n return Utf16Converter.toString(buffer, littleEndian);\n }\n static FromUtf16String(text, littleEndian = false) {\n return Utf16Converter.fromString(text, littleEndian);\n }\n static Base64Padding(base64) {\n const padCount = 4 - (base64.length % 4);\n if (padCount < 4) {\n for (let i = 0; i < padCount; i++) {\n base64 += \"=\";\n }\n }\n return base64;\n }\n static formatString(data) {\n return (data === null || data === void 0 ? void 0 : data.replace(/[\\n\\r\\t ]/g, \"\")) || \"\";\n }\n}\nConvert.DEFAULT_UTF8_ENCODING = \"utf8\";\n\nfunction assign(target, ...sources) {\n const res = arguments[0];\n for (let i = 1; i < arguments.length; i++) {\n const obj = arguments[i];\n for (const prop in obj) {\n res[prop] = obj[prop];\n }\n }\n return res;\n}\nfunction combine(...buf) {\n const totalByteLength = buf.map((item) => item.byteLength).reduce((prev, cur) => prev + cur);\n const res = new Uint8Array(totalByteLength);\n let currentPos = 0;\n buf.map((item) => new Uint8Array(item)).forEach((arr) => {\n for (const item2 of arr) {\n res[currentPos++] = item2;\n }\n });\n return res.buffer;\n}\nfunction isEqual(bytes1, bytes2) {\n if (!(bytes1 && bytes2)) {\n return false;\n }\n if (bytes1.byteLength !== bytes2.byteLength) {\n return false;\n }\n const b1 = new Uint8Array(bytes1);\n const b2 = new Uint8Array(bytes2);\n for (let i = 0; i < bytes1.byteLength; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport { BufferSourceConverter, Convert, assign, combine, isEqual };\n","/*!\n Copyright (c) Peculiar Ventures, LLC\n*/\n\nfunction getUTCDate(date) {\r\n return new Date(date.getTime() + (date.getTimezoneOffset() * 60000));\r\n}\r\nfunction getParametersValue(parameters, name, defaultValue) {\r\n var _a;\r\n if ((parameters instanceof Object) === false) {\r\n return defaultValue;\r\n }\r\n return (_a = parameters[name]) !== null && _a !== void 0 ? _a : defaultValue;\r\n}\r\nfunction bufferToHexCodes(inputBuffer, inputOffset = 0, inputLength = (inputBuffer.byteLength - inputOffset), insertSpace = false) {\r\n let result = \"\";\r\n for (const item of (new Uint8Array(inputBuffer, inputOffset, inputLength))) {\r\n const str = item.toString(16).toUpperCase();\r\n if (str.length === 1) {\r\n result += \"0\";\r\n }\r\n result += str;\r\n if (insertSpace) {\r\n result += \" \";\r\n }\r\n }\r\n return result.trim();\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n if (!(inputBuffer instanceof ArrayBuffer)) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer must be \\\"ArrayBuffer\\\"\";\r\n return false;\r\n }\r\n if (!inputBuffer.byteLength) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n return false;\r\n }\r\n if (inputOffset < 0) {\r\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n return false;\r\n }\r\n if (inputLength < 0) {\r\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n return false;\r\n }\r\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction utilFromBase(inputBuffer, inputBase) {\r\n let result = 0;\r\n if (inputBuffer.length === 1) {\r\n return inputBuffer[0];\r\n }\r\n for (let i = (inputBuffer.length - 1); i >= 0; i--) {\r\n result += inputBuffer[(inputBuffer.length - 1) - i] * Math.pow(2, inputBase * i);\r\n }\r\n return result;\r\n}\r\nfunction utilToBase(value, base, reserved = (-1)) {\r\n const internalReserved = reserved;\r\n let internalValue = value;\r\n let result = 0;\r\n let biggest = Math.pow(2, base);\r\n for (let i = 1; i < 8; i++) {\r\n if (value < biggest) {\r\n let retBuf;\r\n if (internalReserved < 0) {\r\n retBuf = new ArrayBuffer(i);\r\n result = i;\r\n }\r\n else {\r\n if (internalReserved < i) {\r\n return (new ArrayBuffer(0));\r\n }\r\n retBuf = new ArrayBuffer(internalReserved);\r\n result = internalReserved;\r\n }\r\n const retView = new Uint8Array(retBuf);\r\n for (let j = (i - 1); j >= 0; j--) {\r\n const basis = Math.pow(2, j * base);\r\n retView[result - j - 1] = Math.floor(internalValue / basis);\r\n internalValue -= (retView[result - j - 1]) * basis;\r\n }\r\n return retBuf;\r\n }\r\n biggest *= Math.pow(2, base);\r\n }\r\n return new ArrayBuffer(0);\r\n}\r\nfunction utilConcatBuf(...buffers) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const buffer of buffers) {\r\n outputLength += buffer.byteLength;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const buffer of buffers) {\r\n retView.set(new Uint8Array(buffer), prevLength);\r\n prevLength += buffer.byteLength;\r\n }\r\n return retBuf;\r\n}\r\nfunction utilConcatView(...views) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const view of views) {\r\n outputLength += view.length;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const view of views) {\r\n retView.set(view, prevLength);\r\n prevLength += view.length;\r\n }\r\n return retView;\r\n}\r\nfunction utilDecodeTC() {\r\n const buf = new Uint8Array(this.valueHex);\r\n if (this.valueHex.byteLength >= 2) {\r\n const condition1 = (buf[0] === 0xFF) && (buf[1] & 0x80);\r\n const condition2 = (buf[0] === 0x00) && ((buf[1] & 0x80) === 0x00);\r\n if (condition1 || condition2) {\r\n this.warnings.push(\"Needlessly long format\");\r\n }\r\n }\r\n const bigIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const bigIntView = new Uint8Array(bigIntBuffer);\r\n for (let i = 0; i < this.valueHex.byteLength; i++) {\r\n bigIntView[i] = 0;\r\n }\r\n bigIntView[0] = (buf[0] & 0x80);\r\n const bigInt = utilFromBase(bigIntView, 8);\r\n const smallIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const smallIntView = new Uint8Array(smallIntBuffer);\r\n for (let j = 0; j < this.valueHex.byteLength; j++) {\r\n smallIntView[j] = buf[j];\r\n }\r\n smallIntView[0] &= 0x7F;\r\n const smallInt = utilFromBase(smallIntView, 8);\r\n return (smallInt - bigInt);\r\n}\r\nfunction utilEncodeTC(value) {\r\n const modValue = (value < 0) ? (value * (-1)) : value;\r\n let bigInt = 128;\r\n for (let i = 1; i < 8; i++) {\r\n if (modValue <= bigInt) {\r\n if (value < 0) {\r\n const smallInt = bigInt - modValue;\r\n const retBuf = utilToBase(smallInt, 8, i);\r\n const retView = new Uint8Array(retBuf);\r\n retView[0] |= 0x80;\r\n return retBuf;\r\n }\r\n let retBuf = utilToBase(modValue, 8, i);\r\n let retView = new Uint8Array(retBuf);\r\n if (retView[0] & 0x80) {\r\n const tempBuf = retBuf.slice(0);\r\n const tempView = new Uint8Array(tempBuf);\r\n retBuf = new ArrayBuffer(retBuf.byteLength + 1);\r\n retView = new Uint8Array(retBuf);\r\n for (let k = 0; k < tempBuf.byteLength; k++) {\r\n retView[k + 1] = tempView[k];\r\n }\r\n retView[0] = 0x00;\r\n }\r\n return retBuf;\r\n }\r\n bigInt *= Math.pow(2, 8);\r\n }\r\n return (new ArrayBuffer(0));\r\n}\r\nfunction isEqualBuffer(inputBuffer1, inputBuffer2) {\r\n if (inputBuffer1.byteLength !== inputBuffer2.byteLength) {\r\n return false;\r\n }\r\n const view1 = new Uint8Array(inputBuffer1);\r\n const view2 = new Uint8Array(inputBuffer2);\r\n for (let i = 0; i < view1.length; i++) {\r\n if (view1[i] !== view2[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction padNumber(inputNumber, fullLength) {\r\n const str = inputNumber.toString(10);\r\n if (fullLength < str.length) {\r\n return \"\";\r\n }\r\n const dif = fullLength - str.length;\r\n const padding = new Array(dif);\r\n for (let i = 0; i < dif; i++) {\r\n padding[i] = \"0\";\r\n }\r\n const paddingString = padding.join(\"\");\r\n return paddingString.concat(str);\r\n}\r\nconst base64Template = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\nconst base64UrlTemplate = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=\";\r\nfunction toBase64(input, useUrlTemplate = false, skipPadding = false, skipLeadingZeros = false) {\r\n let i = 0;\r\n let flag1 = 0;\r\n let flag2 = 0;\r\n let output = \"\";\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n if (skipLeadingZeros) {\r\n let nonZeroPosition = 0;\r\n for (let i = 0; i < input.length; i++) {\r\n if (input.charCodeAt(i) !== 0) {\r\n nonZeroPosition = i;\r\n break;\r\n }\r\n }\r\n input = input.slice(nonZeroPosition);\r\n }\r\n while (i < input.length) {\r\n const chr1 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag1 = 1;\r\n }\r\n const chr2 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag2 = 1;\r\n }\r\n const chr3 = input.charCodeAt(i++);\r\n const enc1 = chr1 >> 2;\r\n const enc2 = ((chr1 & 0x03) << 4) | (chr2 >> 4);\r\n let enc3 = ((chr2 & 0x0F) << 2) | (chr3 >> 6);\r\n let enc4 = chr3 & 0x3F;\r\n if (flag1 === 1) {\r\n enc3 = enc4 = 64;\r\n }\r\n else {\r\n if (flag2 === 1) {\r\n enc4 = 64;\r\n }\r\n }\r\n if (skipPadding) {\r\n if (enc3 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}`;\r\n }\r\n else {\r\n if (enc4 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}`;\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n return output;\r\n}\r\nfunction fromBase64(input, useUrlTemplate = false, cutTailZeros = false) {\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n function indexOf(toSearch) {\r\n for (let i = 0; i < 64; i++) {\r\n if (template.charAt(i) === toSearch)\r\n return i;\r\n }\r\n return 64;\r\n }\r\n function test(incoming) {\r\n return ((incoming === 64) ? 0x00 : incoming);\r\n }\r\n let i = 0;\r\n let output = \"\";\r\n while (i < input.length) {\r\n const enc1 = indexOf(input.charAt(i++));\r\n const enc2 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc3 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc4 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const chr1 = (test(enc1) << 2) | (test(enc2) >> 4);\r\n const chr2 = ((test(enc2) & 0x0F) << 4) | (test(enc3) >> 2);\r\n const chr3 = ((test(enc3) & 0x03) << 6) | test(enc4);\r\n output += String.fromCharCode(chr1);\r\n if (enc3 !== 64) {\r\n output += String.fromCharCode(chr2);\r\n }\r\n if (enc4 !== 64) {\r\n output += String.fromCharCode(chr3);\r\n }\r\n }\r\n if (cutTailZeros) {\r\n const outputLength = output.length;\r\n let nonZeroStart = (-1);\r\n for (let i = (outputLength - 1); i >= 0; i--) {\r\n if (output.charCodeAt(i) !== 0) {\r\n nonZeroStart = i;\r\n break;\r\n }\r\n }\r\n if (nonZeroStart !== (-1)) {\r\n output = output.slice(0, nonZeroStart + 1);\r\n }\r\n else {\r\n output = \"\";\r\n }\r\n }\r\n return output;\r\n}\r\nfunction arrayBufferToString(buffer) {\r\n let resultString = \"\";\r\n const view = new Uint8Array(buffer);\r\n for (const element of view) {\r\n resultString += String.fromCharCode(element);\r\n }\r\n return resultString;\r\n}\r\nfunction stringToArrayBuffer(str) {\r\n const stringLength = str.length;\r\n const resultBuffer = new ArrayBuffer(stringLength);\r\n const resultView = new Uint8Array(resultBuffer);\r\n for (let i = 0; i < stringLength; i++) {\r\n resultView[i] = str.charCodeAt(i);\r\n }\r\n return resultBuffer;\r\n}\r\nconst log2 = Math.log(2);\r\nfunction nearestPowerOf2(length) {\r\n const base = (Math.log(length) / log2);\r\n const floor = Math.floor(base);\r\n const round = Math.round(base);\r\n return ((floor === round) ? floor : round);\r\n}\r\nfunction clearProps(object, propsArray) {\r\n for (const prop of propsArray) {\r\n delete object[prop];\r\n }\r\n}\n\nexport { arrayBufferToString, bufferToHexCodes, checkBufferParams, clearProps, fromBase64, getParametersValue, getUTCDate, isEqualBuffer, nearestPowerOf2, padNumber, stringToArrayBuffer, toBase64, utilConcatBuf, utilConcatView, utilDecodeTC, utilEncodeTC, utilFromBase, utilToBase };\n","/*!\n * Copyright (c) 2014, GMO GlobalSign\n * Copyright (c) 2015-2022, Peculiar Ventures\n * All rights reserved.\n * \n * Author 2014-2019, Yury Strozhevsky\n * \n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * \n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * \n * * Redistributions in binary form must reproduce the above copyright notice, this\n * list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * \n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n */\n\nimport * as pvtsutils from 'pvtsutils';\nimport * as pvutils from 'pvutils';\n\nfunction assertBigInt() {\n if (typeof BigInt === \"undefined\") {\n throw new Error(\"BigInt is not defined. Your environment doesn't implement BigInt.\");\n }\n}\nfunction concat(buffers) {\n let outputLength = 0;\n let prevLength = 0;\n for (let i = 0; i < buffers.length; i++) {\n const buffer = buffers[i];\n outputLength += buffer.byteLength;\n }\n const retView = new Uint8Array(outputLength);\n for (let i = 0; i < buffers.length; i++) {\n const buffer = buffers[i];\n retView.set(new Uint8Array(buffer), prevLength);\n prevLength += buffer.byteLength;\n }\n return retView.buffer;\n}\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\n if (!(inputBuffer instanceof Uint8Array)) {\n baseBlock.error = \"Wrong parameter: inputBuffer must be 'Uint8Array'\";\n return false;\n }\n if (!inputBuffer.byteLength) {\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\n return false;\n }\n if (inputOffset < 0) {\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\n return false;\n }\n if (inputLength < 0) {\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\n return false;\n }\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\n return false;\n }\n return true;\n}\n\nclass ViewWriter {\n constructor() {\n this.items = [];\n }\n write(buf) {\n this.items.push(buf);\n }\n final() {\n return concat(this.items);\n }\n}\n\nconst powers2 = [new Uint8Array([1])];\nconst digitsString = \"0123456789\";\nconst NAME = \"name\";\nconst VALUE_HEX_VIEW = \"valueHexView\";\nconst IS_HEX_ONLY = \"isHexOnly\";\nconst ID_BLOCK = \"idBlock\";\nconst TAG_CLASS = \"tagClass\";\nconst TAG_NUMBER = \"tagNumber\";\nconst IS_CONSTRUCTED = \"isConstructed\";\nconst FROM_BER = \"fromBER\";\nconst TO_BER = \"toBER\";\nconst LOCAL = \"local\";\nconst EMPTY_STRING = \"\";\nconst EMPTY_BUFFER = new ArrayBuffer(0);\nconst EMPTY_VIEW = new Uint8Array(0);\nconst END_OF_CONTENT_NAME = \"EndOfContent\";\nconst OCTET_STRING_NAME = \"OCTET STRING\";\nconst BIT_STRING_NAME = \"BIT STRING\";\n\nfunction HexBlock(BaseClass) {\n var _a;\n return _a = class Some extends BaseClass {\n get valueHex() {\n return this.valueHexView.slice().buffer;\n }\n set valueHex(value) {\n this.valueHexView = new Uint8Array(value);\n }\n constructor(...args) {\n var _b;\n super(...args);\n const params = args[0] || {};\n this.isHexOnly = (_b = params.isHexOnly) !== null && _b !== void 0 ? _b : false;\n this.valueHexView = params.valueHex ? pvtsutils.BufferSourceConverter.toUint8Array(params.valueHex) : EMPTY_VIEW;\n }\n fromBER(inputBuffer, inputOffset, inputLength, _context) {\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\n return -1;\n }\n const endLength = inputOffset + inputLength;\n this.valueHexView = view.subarray(inputOffset, endLength);\n if (!this.valueHexView.length) {\n this.warnings.push(\"Zero buffer length\");\n return inputOffset;\n }\n this.blockLength = inputLength;\n return endLength;\n }\n toBER(sizeOnly = false) {\n if (!this.isHexOnly) {\n this.error = \"Flag 'isHexOnly' is not set, abort\";\n return EMPTY_BUFFER;\n }\n if (sizeOnly) {\n return new ArrayBuffer(this.valueHexView.byteLength);\n }\n return (this.valueHexView.byteLength === this.valueHexView.buffer.byteLength)\n ? this.valueHexView.buffer\n : this.valueHexView.slice().buffer;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n isHexOnly: this.isHexOnly,\n valueHex: pvtsutils.Convert.ToHex(this.valueHexView),\n };\n }\n },\n _a.NAME = \"hexBlock\",\n _a;\n}\n\nclass LocalBaseBlock {\n static blockName() {\n return this.NAME;\n }\n get valueBeforeDecode() {\n return this.valueBeforeDecodeView.slice().buffer;\n }\n set valueBeforeDecode(value) {\n this.valueBeforeDecodeView = new Uint8Array(value);\n }\n constructor({ blockLength = 0, error = EMPTY_STRING, warnings = [], valueBeforeDecode = EMPTY_VIEW, } = {}) {\n this.blockLength = blockLength;\n this.error = error;\n this.warnings = warnings;\n this.valueBeforeDecodeView = pvtsutils.BufferSourceConverter.toUint8Array(valueBeforeDecode);\n }\n toJSON() {\n return {\n blockName: this.constructor.NAME,\n blockLength: this.blockLength,\n error: this.error,\n warnings: this.warnings,\n valueBeforeDecode: pvtsutils.Convert.ToHex(this.valueBeforeDecodeView),\n };\n }\n}\nLocalBaseBlock.NAME = \"baseBlock\";\n\nclass ValueBlock extends LocalBaseBlock {\n fromBER(_inputBuffer, _inputOffset, _inputLength, _context) {\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\n }\n toBER(_sizeOnly, _writer) {\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\n }\n}\nValueBlock.NAME = \"valueBlock\";\n\nclass LocalIdentificationBlock extends HexBlock(LocalBaseBlock) {\n constructor({ idBlock = {} } = {}) {\n var _a, _b, _c, _d;\n super();\n if (idBlock) {\n this.isHexOnly = (_a = idBlock.isHexOnly) !== null && _a !== void 0 ? _a : false;\n this.valueHexView = idBlock.valueHex\n ? pvtsutils.BufferSourceConverter.toUint8Array(idBlock.valueHex)\n : EMPTY_VIEW;\n this.tagClass = (_b = idBlock.tagClass) !== null && _b !== void 0 ? _b : -1;\n this.tagNumber = (_c = idBlock.tagNumber) !== null && _c !== void 0 ? _c : -1;\n this.isConstructed = (_d = idBlock.isConstructed) !== null && _d !== void 0 ? _d : false;\n }\n else {\n this.tagClass = -1;\n this.tagNumber = -1;\n this.isConstructed = false;\n }\n }\n toBER(sizeOnly = false) {\n let firstOctet = 0;\n switch (this.tagClass) {\n case 1:\n firstOctet |= 0x00;\n break;\n case 2:\n firstOctet |= 0x40;\n break;\n case 3:\n firstOctet |= 0x80;\n break;\n case 4:\n firstOctet |= 0xC0;\n break;\n default:\n this.error = \"Unknown tag class\";\n return EMPTY_BUFFER;\n }\n if (this.isConstructed)\n firstOctet |= 0x20;\n if (this.tagNumber < 31 && !this.isHexOnly) {\n const retView = new Uint8Array(1);\n if (!sizeOnly) {\n let number = this.tagNumber;\n number &= 0x1F;\n firstOctet |= number;\n retView[0] = firstOctet;\n }\n return retView.buffer;\n }\n if (!this.isHexOnly) {\n const encodedBuf = pvutils.utilToBase(this.tagNumber, 7);\n const encodedView = new Uint8Array(encodedBuf);\n const size = encodedBuf.byteLength;\n const retView = new Uint8Array(size + 1);\n retView[0] = (firstOctet | 0x1F);\n if (!sizeOnly) {\n for (let i = 0; i < (size - 1); i++)\n retView[i + 1] = encodedView[i] | 0x80;\n retView[size] = encodedView[size - 1];\n }\n return retView.buffer;\n }\n const retView = new Uint8Array(this.valueHexView.byteLength + 1);\n retView[0] = (firstOctet | 0x1F);\n if (!sizeOnly) {\n const curView = this.valueHexView;\n for (let i = 0; i < (curView.length - 1); i++)\n retView[i + 1] = curView[i] | 0x80;\n retView[this.valueHexView.byteLength] = curView[curView.length - 1];\n }\n return retView.buffer;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\n return -1;\n }\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\n if (intBuffer.length === 0) {\n this.error = \"Zero buffer length\";\n return -1;\n }\n const tagClassMask = intBuffer[0] & 0xC0;\n switch (tagClassMask) {\n case 0x00:\n this.tagClass = (1);\n break;\n case 0x40:\n this.tagClass = (2);\n break;\n case 0x80:\n this.tagClass = (3);\n break;\n case 0xC0:\n this.tagClass = (4);\n break;\n default:\n this.error = \"Unknown tag class\";\n return -1;\n }\n this.isConstructed = (intBuffer[0] & 0x20) === 0x20;\n this.isHexOnly = false;\n const tagNumberMask = intBuffer[0] & 0x1F;\n if (tagNumberMask !== 0x1F) {\n this.tagNumber = (tagNumberMask);\n this.blockLength = 1;\n }\n else {\n let count = 0;\n while (true) {\n const tagByteIndex = count + 1;\n if (tagByteIndex >= intBuffer.length) {\n this.error = \"End of input reached before message was fully decoded\";\n return -1;\n }\n count++;\n if ((intBuffer[tagByteIndex] & 0x80) === 0x00)\n break;\n }\n this.blockLength = (count + 1);\n const intTagNumberBuffer = this.valueHexView = new Uint8Array(count);\n for (let i = 0; i < count; i++)\n intTagNumberBuffer[i] = intBuffer[i + 1] & 0x7F;\n if (this.blockLength <= 9)\n this.tagNumber = pvutils.utilFromBase(intTagNumberBuffer, 7);\n else {\n this.isHexOnly = true;\n this.warnings.push(\"Tag too long, represented as hex-coded\");\n }\n }\n if (((this.tagClass === 1))\n && (this.isConstructed)) {\n switch (this.tagNumber) {\n case 1:\n case 2:\n case 5:\n case 6:\n case 9:\n case 13:\n case 14:\n case 23:\n case 24:\n case 31:\n case 32:\n case 33:\n case 34:\n this.error = \"Constructed encoding used for primitive type\";\n return -1;\n }\n }\n return (inputOffset + this.blockLength);\n }\n toJSON() {\n return {\n ...super.toJSON(),\n tagClass: this.tagClass,\n tagNumber: this.tagNumber,\n isConstructed: this.isConstructed,\n };\n }\n}\nLocalIdentificationBlock.NAME = \"identificationBlock\";\n\nclass LocalLengthBlock extends LocalBaseBlock {\n constructor({ lenBlock = {} } = {}) {\n var _a, _b, _c;\n super();\n this.isIndefiniteForm = (_a = lenBlock.isIndefiniteForm) !== null && _a !== void 0 ? _a : false;\n this.longFormUsed = (_b = lenBlock.longFormUsed) !== null && _b !== void 0 ? _b : false;\n this.length = (_c = lenBlock.length) !== null && _c !== void 0 ? _c : 0;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\n return -1;\n }\n const intBuffer = view.subarray(inputOffset, inputOffset + inputLength);\n if (intBuffer.length === 0) {\n this.error = \"Zero buffer length\";\n return -1;\n }\n if (intBuffer[0] === 0xFF) {\n this.error = \"Length block 0xFF is reserved by standard\";\n return -1;\n }\n this.isIndefiniteForm = intBuffer[0] === 0x80;\n if (this.isIndefiniteForm) {\n this.blockLength = 1;\n return (inputOffset + this.blockLength);\n }\n this.longFormUsed = !!(intBuffer[0] & 0x80);\n if (this.longFormUsed === false) {\n this.length = (intBuffer[0]);\n this.blockLength = 1;\n return (inputOffset + this.blockLength);\n }\n const count = intBuffer[0] & 0x7F;\n if (count > 8) {\n this.error = \"Too big integer\";\n return -1;\n }\n if ((count + 1) > intBuffer.length) {\n this.error = \"End of input reached before message was fully decoded\";\n return -1;\n }\n const lenOffset = inputOffset + 1;\n const lengthBufferView = view.subarray(lenOffset, lenOffset + count);\n if (lengthBufferView[count - 1] === 0x00)\n this.warnings.push(\"Needlessly long encoded length\");\n this.length = pvutils.utilFromBase(lengthBufferView, 8);\n if (this.longFormUsed && (this.length <= 127))\n this.warnings.push(\"Unnecessary usage of long length form\");\n this.blockLength = count + 1;\n return (inputOffset + this.blockLength);\n }\n toBER(sizeOnly = false) {\n let retBuf;\n let retView;\n if (this.length > 127)\n this.longFormUsed = true;\n if (this.isIndefiniteForm) {\n retBuf = new ArrayBuffer(1);\n if (sizeOnly === false) {\n retView = new Uint8Array(retBuf);\n retView[0] = 0x80;\n }\n return retBuf;\n }\n if (this.longFormUsed) {\n const encodedBuf = pvutils.utilToBase(this.length, 8);\n if (encodedBuf.byteLength > 127) {\n this.error = \"Too big length\";\n return (EMPTY_BUFFER);\n }\n retBuf = new ArrayBuffer(encodedBuf.byteLength + 1);\n if (sizeOnly)\n return retBuf;\n const encodedView = new Uint8Array(encodedBuf);\n retView = new Uint8Array(retBuf);\n retView[0] = encodedBuf.byteLength | 0x80;\n for (let i = 0; i < encodedBuf.byteLength; i++)\n retView[i + 1] = encodedView[i];\n return retBuf;\n }\n retBuf = new ArrayBuffer(1);\n if (sizeOnly === false) {\n retView = new Uint8Array(retBuf);\n retView[0] = this.length;\n }\n return retBuf;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n isIndefiniteForm: this.isIndefiniteForm,\n longFormUsed: this.longFormUsed,\n length: this.length,\n };\n }\n}\nLocalLengthBlock.NAME = \"lengthBlock\";\n\nconst typeStore = {};\n\nclass BaseBlock extends LocalBaseBlock {\n constructor({ name = EMPTY_STRING, optional = false, primitiveSchema, ...parameters } = {}, valueBlockType) {\n super(parameters);\n this.name = name;\n this.optional = optional;\n if (primitiveSchema) {\n this.primitiveSchema = primitiveSchema;\n }\n this.idBlock = new LocalIdentificationBlock(parameters);\n this.lenBlock = new LocalLengthBlock(parameters);\n this.valueBlock = valueBlockType ? new valueBlockType(parameters) : new ValueBlock(parameters);\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm)\n ? inputLength\n : this.lenBlock.length, context);\n if (resultOffset === -1) {\n this.error = this.valueBlock.error;\n return resultOffset;\n }\n if (!this.idBlock.error.length)\n this.blockLength += this.idBlock.blockLength;\n if (!this.lenBlock.error.length)\n this.blockLength += this.lenBlock.blockLength;\n if (!this.valueBlock.error.length)\n this.blockLength += this.valueBlock.blockLength;\n return resultOffset;\n }\n toBER(sizeOnly, writer) {\n const _writer = writer || new ViewWriter();\n if (!writer) {\n prepareIndefiniteForm(this);\n }\n const idBlockBuf = this.idBlock.toBER(sizeOnly);\n _writer.write(idBlockBuf);\n if (this.lenBlock.isIndefiniteForm) {\n _writer.write(new Uint8Array([0x80]).buffer);\n this.valueBlock.toBER(sizeOnly, _writer);\n _writer.write(new ArrayBuffer(2));\n }\n else {\n const valueBlockBuf = this.valueBlock.toBER(sizeOnly);\n this.lenBlock.length = valueBlockBuf.byteLength;\n const lenBlockBuf = this.lenBlock.toBER(sizeOnly);\n _writer.write(lenBlockBuf);\n _writer.write(valueBlockBuf);\n }\n if (!writer) {\n return _writer.final();\n }\n return EMPTY_BUFFER;\n }\n toJSON() {\n const object = {\n ...super.toJSON(),\n idBlock: this.idBlock.toJSON(),\n lenBlock: this.lenBlock.toJSON(),\n valueBlock: this.valueBlock.toJSON(),\n name: this.name,\n optional: this.optional,\n };\n if (this.primitiveSchema)\n object.primitiveSchema = this.primitiveSchema.toJSON();\n return object;\n }\n toString(encoding = \"ascii\") {\n if (encoding === \"ascii\") {\n return this.onAsciiEncoding();\n }\n return pvtsutils.Convert.ToHex(this.toBER());\n }\n onAsciiEncoding() {\n const name = this.constructor.NAME;\n const value = pvtsutils.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);\n return `${name} : ${value}`;\n }\n isEqual(other) {\n if (this === other) {\n return true;\n }\n if (!(other instanceof this.constructor)) {\n return false;\n }\n const thisRaw = this.toBER();\n const otherRaw = other.toBER();\n return pvutils.isEqualBuffer(thisRaw, otherRaw);\n }\n}\nBaseBlock.NAME = \"BaseBlock\";\nfunction prepareIndefiniteForm(baseBlock) {\n var _a;\n if (baseBlock instanceof typeStore.Constructed) {\n for (const value of baseBlock.valueBlock.value) {\n if (prepareIndefiniteForm(value)) {\n baseBlock.lenBlock.isIndefiniteForm = true;\n }\n }\n }\n return !!((_a = baseBlock.lenBlock) === null || _a === void 0 ? void 0 : _a.isIndefiniteForm);\n}\n\nclass BaseStringBlock extends BaseBlock {\n getValue() {\n return this.valueBlock.value;\n }\n setValue(value) {\n this.valueBlock.value = value;\n }\n constructor({ value = EMPTY_STRING, ...parameters } = {}, stringValueBlockType) {\n super(parameters, stringValueBlockType);\n if (value) {\n this.fromString(value);\n }\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm)\n ? inputLength\n : this.lenBlock.length);\n if (resultOffset === -1) {\n this.error = this.valueBlock.error;\n return resultOffset;\n }\n this.fromBuffer(this.valueBlock.valueHexView);\n if (!this.idBlock.error.length)\n this.blockLength += this.idBlock.blockLength;\n if (!this.lenBlock.error.length)\n this.blockLength += this.lenBlock.blockLength;\n if (!this.valueBlock.error.length)\n this.blockLength += this.valueBlock.blockLength;\n return resultOffset;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : '${this.valueBlock.value}'`;\n }\n}\nBaseStringBlock.NAME = \"BaseStringBlock\";\n\nclass LocalPrimitiveValueBlock extends HexBlock(ValueBlock) {\n constructor({ isHexOnly = true, ...parameters } = {}) {\n super(parameters);\n this.isHexOnly = isHexOnly;\n }\n}\nLocalPrimitiveValueBlock.NAME = \"PrimitiveValueBlock\";\n\nvar _a$w;\nclass Primitive extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, LocalPrimitiveValueBlock);\n this.idBlock.isConstructed = false;\n }\n}\n_a$w = Primitive;\n(() => {\n typeStore.Primitive = _a$w;\n})();\nPrimitive.NAME = \"PRIMITIVE\";\n\nconst DEFAULT_MAX_DEPTH = 100;\nconst DEFAULT_MAX_NODES = 10000;\nconst DEFAULT_MAX_CONTENT_LENGTH = 16 * 1024 * 1024;\nconst MAX_DEPTH_EXCEEDED_ERROR = \"Maximum ASN.1 nesting depth exceeded\";\nconst MAX_NODES_EXCEEDED_ERROR = \"Maximum ASN.1 node count exceeded\";\nconst MAX_CONTENT_LENGTH_EXCEEDED_ERROR = \"Maximum ASN.1 content length exceeded\";\nfunction createFromBerContext(options = {}) {\n var _a, _b, _c;\n return {\n depth: 0,\n maxDepth: (_a = options.maxDepth) !== null && _a !== void 0 ? _a : DEFAULT_MAX_DEPTH,\n nodesCount: 0,\n maxNodes: (_b = options.maxNodes) !== null && _b !== void 0 ? _b : DEFAULT_MAX_NODES,\n maxContentLength: (_c = options.maxContentLength) !== null && _c !== void 0 ? _c : DEFAULT_MAX_CONTENT_LENGTH,\n };\n}\nfunction createErrorResult(error) {\n const result = new BaseBlock({}, ValueBlock);\n result.error = error;\n return {\n offset: -1,\n result,\n };\n}\nfunction checkNodesLimit(context) {\n context.nodesCount += 1;\n if (context.nodesCount > context.maxNodes) {\n return MAX_NODES_EXCEEDED_ERROR;\n }\n return undefined;\n}\nfunction checkContentLengthLimit(inputLength, context) {\n if (inputLength > context.maxContentLength) {\n return MAX_CONTENT_LENGTH_EXCEEDED_ERROR;\n }\n return undefined;\n}\nfunction localFromBERWithChildContext(inputBuffer, inputOffset, inputLength, context) {\n const childDepth = context.depth + 1;\n if (childDepth > context.maxDepth) {\n return createErrorResult(MAX_DEPTH_EXCEEDED_ERROR);\n }\n context.depth = childDepth;\n try {\n return localFromBER(inputBuffer, inputOffset, inputLength, context);\n }\n finally {\n context.depth -= 1;\n }\n}\nfunction localChangeType(inputObject, newType) {\n if (inputObject instanceof newType) {\n return inputObject;\n }\n const newObject = new newType();\n newObject.idBlock = inputObject.idBlock;\n newObject.lenBlock = inputObject.lenBlock;\n newObject.warnings = inputObject.warnings;\n newObject.valueBeforeDecodeView = inputObject.valueBeforeDecodeView;\n return newObject;\n}\nfunction localFromBER(inputBuffer, inputOffset = 0, inputLength = inputBuffer.length, context = createFromBerContext()) {\n const incomingOffset = inputOffset;\n let returnObject = new BaseBlock({}, ValueBlock);\n const baseBlock = new LocalBaseBlock();\n if (!checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength)) {\n returnObject.error = baseBlock.error;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n const intBuffer = inputBuffer.subarray(inputOffset, inputOffset + inputLength);\n if (!intBuffer.length) {\n returnObject.error = \"Zero buffer length\";\n return {\n offset: -1,\n result: returnObject,\n };\n }\n const nodesLimitError = checkNodesLimit(context);\n if (nodesLimitError) {\n returnObject.error = nodesLimitError;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n let resultOffset = returnObject.idBlock.fromBER(inputBuffer, inputOffset, inputLength);\n if (returnObject.idBlock.warnings.length) {\n returnObject.warnings.concat(returnObject.idBlock.warnings);\n }\n if (resultOffset === -1) {\n returnObject.error = returnObject.idBlock.error;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n inputOffset = resultOffset;\n inputLength -= returnObject.idBlock.blockLength;\n resultOffset = returnObject.lenBlock.fromBER(inputBuffer, inputOffset, inputLength);\n if (returnObject.lenBlock.warnings.length) {\n returnObject.warnings.concat(returnObject.lenBlock.warnings);\n }\n if (resultOffset === -1) {\n returnObject.error = returnObject.lenBlock.error;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n inputOffset = resultOffset;\n inputLength -= returnObject.lenBlock.blockLength;\n const valueLength = returnObject.lenBlock.isIndefiniteForm ? inputLength : returnObject.lenBlock.length;\n const contentLengthError = checkContentLengthLimit(valueLength, context);\n if (contentLengthError) {\n returnObject.error = contentLengthError;\n return {\n offset: -1,\n result: returnObject,\n };\n }\n if (!returnObject.idBlock.isConstructed\n && returnObject.lenBlock.isIndefiniteForm) {\n returnObject.error = \"Indefinite length form used for primitive encoding form\";\n return {\n offset: -1,\n result: returnObject,\n };\n }\n let newASN1Type = BaseBlock;\n switch (returnObject.idBlock.tagClass) {\n case 1:\n if ((returnObject.idBlock.tagNumber >= 37)\n && (returnObject.idBlock.isHexOnly === false)) {\n returnObject.error = \"UNIVERSAL 37 and upper tags are reserved by ASN.1 standard\";\n return {\n offset: -1,\n result: returnObject,\n };\n }\n switch (returnObject.idBlock.tagNumber) {\n case 0:\n if ((returnObject.idBlock.isConstructed)\n && (returnObject.lenBlock.length > 0)) {\n returnObject.error = \"Type [UNIVERSAL 0] is reserved\";\n return {\n offset: -1,\n result: returnObject,\n };\n }\n newASN1Type = typeStore.EndOfContent;\n break;\n case 1:\n newASN1Type = typeStore.Boolean;\n break;\n case 2:\n newASN1Type = typeStore.Integer;\n break;\n case 3:\n newASN1Type = typeStore.BitString;\n break;\n case 4:\n newASN1Type = typeStore.OctetString;\n break;\n case 5:\n newASN1Type = typeStore.Null;\n break;\n case 6:\n newASN1Type = typeStore.ObjectIdentifier;\n break;\n case 10:\n newASN1Type = typeStore.Enumerated;\n break;\n case 12:\n newASN1Type = typeStore.Utf8String;\n break;\n case 13:\n newASN1Type = typeStore.RelativeObjectIdentifier;\n break;\n case 14:\n newASN1Type = typeStore.TIME;\n break;\n case 15:\n returnObject.error = \"[UNIVERSAL 15] is reserved by ASN.1 standard\";\n return {\n offset: -1,\n result: returnObject,\n };\n case 16:\n newASN1Type = typeStore.Sequence;\n break;\n case 17:\n newASN1Type = typeStore.Set;\n break;\n case 18:\n newASN1Type = typeStore.NumericString;\n break;\n case 19:\n newASN1Type = typeStore.PrintableString;\n break;\n case 20:\n newASN1Type = typeStore.TeletexString;\n break;\n case 21:\n newASN1Type = typeStore.VideotexString;\n break;\n case 22:\n newASN1Type = typeStore.IA5String;\n break;\n case 23:\n newASN1Type = typeStore.UTCTime;\n break;\n case 24:\n newASN1Type = typeStore.GeneralizedTime;\n break;\n case 25:\n newASN1Type = typeStore.GraphicString;\n break;\n case 26:\n newASN1Type = typeStore.VisibleString;\n break;\n case 27:\n newASN1Type = typeStore.GeneralString;\n break;\n case 28:\n newASN1Type = typeStore.UniversalString;\n break;\n case 29:\n newASN1Type = typeStore.CharacterString;\n break;\n case 30:\n newASN1Type = typeStore.BmpString;\n break;\n case 31:\n newASN1Type = typeStore.DATE;\n break;\n case 32:\n newASN1Type = typeStore.TimeOfDay;\n break;\n case 33:\n newASN1Type = typeStore.DateTime;\n break;\n case 34:\n newASN1Type = typeStore.Duration;\n break;\n default: {\n const newObject = returnObject.idBlock.isConstructed\n ? new typeStore.Constructed()\n : new typeStore.Primitive();\n newObject.idBlock = returnObject.idBlock;\n newObject.lenBlock = returnObject.lenBlock;\n newObject.warnings = returnObject.warnings;\n returnObject = newObject;\n }\n }\n break;\n case 2:\n case 3:\n case 4:\n default: {\n newASN1Type = returnObject.idBlock.isConstructed\n ? typeStore.Constructed\n : typeStore.Primitive;\n }\n }\n returnObject = localChangeType(returnObject, newASN1Type);\n resultOffset = returnObject.fromBER(inputBuffer, inputOffset, valueLength, context);\n returnObject.valueBeforeDecodeView = inputBuffer.subarray(incomingOffset, incomingOffset + returnObject.blockLength);\n return {\n offset: resultOffset,\n result: returnObject,\n };\n}\nfunction fromBER(inputBuffer, options = {}) {\n if (!inputBuffer.byteLength) {\n const result = new BaseBlock({}, ValueBlock);\n result.error = \"Input buffer has zero length\";\n return {\n offset: -1,\n result,\n };\n }\n return localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).slice(), 0, inputBuffer.byteLength, createFromBerContext(options));\n}\n\nfunction checkLen(indefiniteLength, length) {\n if (indefiniteLength) {\n return 1;\n }\n return length;\n}\nclass LocalConstructedValueBlock extends ValueBlock {\n constructor({ value = [], isIndefiniteForm = false, ...parameters } = {}) {\n super(parameters);\n this.value = value;\n this.isIndefiniteForm = isIndefiniteForm;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n const parseContext = context !== null && context !== void 0 ? context : createFromBerContext();\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\n return -1;\n }\n this.valueBeforeDecodeView = view.subarray(inputOffset, inputOffset + inputLength);\n if (this.valueBeforeDecodeView.length === 0) {\n this.warnings.push(\"Zero buffer length\");\n return inputOffset;\n }\n let currentOffset = inputOffset;\n while (checkLen(this.isIndefiniteForm, inputLength) > 0) {\n const returnObject = localFromBERWithChildContext(view, currentOffset, inputLength, parseContext);\n if (returnObject.offset === -1) {\n this.error = returnObject.result.error;\n this.warnings.concat(returnObject.result.warnings);\n return -1;\n }\n currentOffset = returnObject.offset;\n this.blockLength += returnObject.result.blockLength;\n inputLength -= returnObject.result.blockLength;\n this.value.push(returnObject.result);\n if (this.isIndefiniteForm && returnObject.result.constructor.NAME === END_OF_CONTENT_NAME) {\n break;\n }\n }\n if (this.isIndefiniteForm) {\n if (this.value[this.value.length - 1].constructor.NAME === END_OF_CONTENT_NAME) {\n this.value.pop();\n }\n else {\n this.warnings.push(\"No EndOfContent block encoded\");\n }\n }\n return currentOffset;\n }\n toBER(sizeOnly, writer) {\n const _writer = writer || new ViewWriter();\n for (let i = 0; i < this.value.length; i++) {\n this.value[i].toBER(sizeOnly, _writer);\n }\n if (!writer) {\n return _writer.final();\n }\n return EMPTY_BUFFER;\n }\n toJSON() {\n const object = {\n ...super.toJSON(),\n isIndefiniteForm: this.isIndefiniteForm,\n value: [],\n };\n for (const value of this.value) {\n object.value.push(value.toJSON());\n }\n return object;\n }\n}\nLocalConstructedValueBlock.NAME = \"ConstructedValueBlock\";\n\nvar _a$v;\nclass Constructed extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, LocalConstructedValueBlock);\n this.idBlock.isConstructed = true;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length, context);\n if (resultOffset === -1) {\n this.error = this.valueBlock.error;\n return resultOffset;\n }\n if (!this.idBlock.error.length)\n this.blockLength += this.idBlock.blockLength;\n if (!this.lenBlock.error.length)\n this.blockLength += this.lenBlock.blockLength;\n if (!this.valueBlock.error.length)\n this.blockLength += this.valueBlock.blockLength;\n return resultOffset;\n }\n onAsciiEncoding() {\n const values = [];\n for (const value of this.valueBlock.value) {\n values.push(value.toString(\"ascii\").split(\"\\n\").map((o) => ` ${o}`).join(\"\\n\"));\n }\n const blockName = this.idBlock.tagClass === 3\n ? `[${this.idBlock.tagNumber}]`\n : this.constructor.NAME;\n return values.length\n ? `${blockName} :\\n${values.join(\"\\n\")}`\n : `${blockName} :`;\n }\n}\n_a$v = Constructed;\n(() => {\n typeStore.Constructed = _a$v;\n})();\nConstructed.NAME = \"CONSTRUCTED\";\n\nclass LocalEndOfContentValueBlock extends ValueBlock {\n fromBER(inputBuffer, inputOffset, _inputLength) {\n return inputOffset;\n }\n toBER(_sizeOnly) {\n return EMPTY_BUFFER;\n }\n}\nLocalEndOfContentValueBlock.override = \"EndOfContentValueBlock\";\n\nvar _a$u;\nclass EndOfContent extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, LocalEndOfContentValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 0;\n }\n}\n_a$u = EndOfContent;\n(() => {\n typeStore.EndOfContent = _a$u;\n})();\nEndOfContent.NAME = END_OF_CONTENT_NAME;\n\nvar _a$t;\nclass Null extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, ValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 5;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n if (this.lenBlock.length > 0)\n this.warnings.push(\"Non-zero length of value block for Null type\");\n if (!this.idBlock.error.length)\n this.blockLength += this.idBlock.blockLength;\n if (!this.lenBlock.error.length)\n this.blockLength += this.lenBlock.blockLength;\n this.blockLength += inputLength;\n if ((inputOffset + inputLength) > inputBuffer.byteLength) {\n this.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\n return -1;\n }\n return (inputOffset + inputLength);\n }\n toBER(sizeOnly, writer) {\n const retBuf = new ArrayBuffer(2);\n if (!sizeOnly) {\n const retView = new Uint8Array(retBuf);\n retView[0] = 0x05;\n retView[1] = 0x00;\n }\n if (writer) {\n writer.write(retBuf);\n }\n return retBuf;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME}`;\n }\n}\n_a$t = Null;\n(() => {\n typeStore.Null = _a$t;\n})();\nNull.NAME = \"NULL\";\n\nclass LocalBooleanValueBlock extends HexBlock(ValueBlock) {\n get value() {\n for (const octet of this.valueHexView) {\n if (octet > 0) {\n return true;\n }\n }\n return false;\n }\n set value(value) {\n this.valueHexView[0] = value ? 0xFF : 0x00;\n }\n constructor({ value, ...parameters } = {}) {\n super(parameters);\n if (parameters.valueHex) {\n this.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(parameters.valueHex);\n }\n else {\n this.valueHexView = new Uint8Array(1);\n }\n if (value) {\n this.value = value;\n }\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\n return -1;\n }\n this.valueHexView = inputView.subarray(inputOffset, inputOffset + inputLength);\n if (inputLength > 1)\n this.warnings.push(\"Boolean value encoded in more then 1 octet\");\n this.isHexOnly = true;\n pvutils.utilDecodeTC.call(this);\n this.blockLength = inputLength;\n return (inputOffset + inputLength);\n }\n toBER() {\n return this.valueHexView.slice();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n value: this.value,\n };\n }\n}\nLocalBooleanValueBlock.NAME = \"BooleanValueBlock\";\n\nvar _a$s;\nclass Boolean extends BaseBlock {\n getValue() {\n return this.valueBlock.value;\n }\n setValue(value) {\n this.valueBlock.value = value;\n }\n constructor(parameters = {}) {\n super(parameters, LocalBooleanValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 1;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.getValue}`;\n }\n}\n_a$s = Boolean;\n(() => {\n typeStore.Boolean = _a$s;\n})();\nBoolean.NAME = \"BOOLEAN\";\n\nclass LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\n constructor({ isConstructed = false, ...parameters } = {}) {\n super(parameters);\n this.isConstructed = isConstructed;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n let resultOffset = 0;\n if (this.isConstructed) {\n this.isHexOnly = false;\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength, context);\n if (resultOffset === -1)\n return resultOffset;\n for (let i = 0; i < this.value.length; i++) {\n const currentBlockName = this.value[i].constructor.NAME;\n if (currentBlockName === END_OF_CONTENT_NAME) {\n if (this.isIndefiniteForm)\n break;\n else {\n this.error = \"EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only\";\n return -1;\n }\n }\n if (currentBlockName !== OCTET_STRING_NAME) {\n this.error = \"OCTET STRING may consists of OCTET STRINGs only\";\n return -1;\n }\n }\n }\n else {\n this.isHexOnly = true;\n resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\n this.blockLength = inputLength;\n }\n return resultOffset;\n }\n toBER(sizeOnly, writer) {\n if (this.isConstructed)\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\n return sizeOnly\n ? new ArrayBuffer(this.valueHexView.byteLength)\n : this.valueHexView.slice().buffer;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n isConstructed: this.isConstructed,\n };\n }\n}\nLocalOctetStringValueBlock.NAME = \"OctetStringValueBlock\";\n\nvar _a$r;\nclass OctetString extends BaseBlock {\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\n var _b, _c;\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\n super({\n idBlock: {\n isConstructed: parameters.isConstructed,\n ...idBlock,\n },\n lenBlock: {\n ...lenBlock,\n isIndefiniteForm: !!parameters.isIndefiniteForm,\n },\n ...parameters,\n }, LocalOctetStringValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 4;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\n if (inputLength === 0) {\n if (this.idBlock.error.length === 0)\n this.blockLength += this.idBlock.blockLength;\n if (this.lenBlock.error.length === 0)\n this.blockLength += this.lenBlock.blockLength;\n return inputOffset;\n }\n if (!this.valueBlock.isConstructed) {\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\n const buf = view.subarray(inputOffset, inputOffset + inputLength);\n try {\n if (buf.byteLength) {\n const parseContext = context !== null && context !== void 0 ? context : createFromBerContext();\n const asn = localFromBERWithChildContext(buf, 0, buf.byteLength, parseContext);\n if (asn.offset !== -1 && asn.offset === inputLength) {\n this.valueBlock.value = [asn.result];\n }\n }\n }\n catch {\n }\n }\n return super.fromBER(inputBuffer, inputOffset, inputLength, context);\n }\n onAsciiEncoding() {\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\n return Constructed.prototype.onAsciiEncoding.call(this);\n }\n const name = this.constructor.NAME;\n const value = pvtsutils.Convert.ToHex(this.valueBlock.valueHexView);\n return `${name} : ${value}`;\n }\n getValue() {\n if (!this.idBlock.isConstructed) {\n return this.valueBlock.valueHexView.slice().buffer;\n }\n const array = [];\n for (const content of this.valueBlock.value) {\n if (content instanceof _a$r) {\n array.push(content.valueBlock.valueHexView);\n }\n }\n return pvtsutils.BufferSourceConverter.concat(array);\n }\n}\n_a$r = OctetString;\n(() => {\n typeStore.OctetString = _a$r;\n})();\nOctetString.NAME = OCTET_STRING_NAME;\n\nclass LocalBitStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\n constructor({ unusedBits = 0, isConstructed = false, ...parameters } = {}) {\n super(parameters);\n this.unusedBits = unusedBits;\n this.isConstructed = isConstructed;\n this.blockLength = this.valueHexView.byteLength;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n if (!inputLength) {\n return inputOffset;\n }\n let resultOffset = -1;\n if (this.isConstructed) {\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength, context);\n if (resultOffset === -1)\n return resultOffset;\n for (const value of this.value) {\n const currentBlockName = value.constructor.NAME;\n if (currentBlockName === END_OF_CONTENT_NAME) {\n if (this.isIndefiniteForm)\n break;\n else {\n this.error = \"EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only\";\n return -1;\n }\n }\n if (currentBlockName !== BIT_STRING_NAME) {\n this.error = \"BIT STRING may consists of BIT STRINGs only\";\n return -1;\n }\n const valueBlock = value.valueBlock;\n if ((this.unusedBits > 0) && (valueBlock.unusedBits > 0)) {\n this.error = \"Using of \\\"unused bits\\\" inside constructive BIT STRING allowed for least one only\";\n return -1;\n }\n this.unusedBits = valueBlock.unusedBits;\n }\n return resultOffset;\n }\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\n return -1;\n }\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\n this.unusedBits = intBuffer[0];\n if (this.unusedBits > 7) {\n this.error = \"Unused bits for BitString must be in range 0-7\";\n return -1;\n }\n if (!this.unusedBits) {\n const buf = intBuffer.subarray(1);\n try {\n if (buf.byteLength) {\n const parseContext = context !== null && context !== void 0 ? context : createFromBerContext();\n const asn = localFromBERWithChildContext(buf, 0, buf.byteLength, parseContext);\n if (asn.offset !== -1 && asn.offset === (inputLength - 1)) {\n this.value = [asn.result];\n }\n }\n }\n catch {\n }\n }\n this.valueHexView = intBuffer.subarray(1);\n this.blockLength = intBuffer.length;\n return (inputOffset + inputLength);\n }\n toBER(sizeOnly, writer) {\n if (this.isConstructed) {\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\n }\n if (sizeOnly) {\n return new ArrayBuffer(this.valueHexView.byteLength + 1);\n }\n if (!this.valueHexView.byteLength) {\n const empty = new Uint8Array(1);\n empty[0] = 0;\n return empty.buffer;\n }\n const retView = new Uint8Array(this.valueHexView.length + 1);\n retView[0] = this.unusedBits;\n retView.set(this.valueHexView, 1);\n return retView.buffer;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n unusedBits: this.unusedBits,\n isConstructed: this.isConstructed,\n };\n }\n}\nLocalBitStringValueBlock.NAME = \"BitStringValueBlock\";\n\nvar _a$q;\nclass BitString extends BaseBlock {\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\n var _b, _c;\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\n super({\n idBlock: {\n isConstructed: parameters.isConstructed,\n ...idBlock,\n },\n lenBlock: {\n ...lenBlock,\n isIndefiniteForm: !!parameters.isIndefiniteForm,\n },\n ...parameters,\n }, LocalBitStringValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 3;\n }\n fromBER(inputBuffer, inputOffset, inputLength, context) {\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\n return super.fromBER(inputBuffer, inputOffset, inputLength, context);\n }\n onAsciiEncoding() {\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\n return Constructed.prototype.onAsciiEncoding.call(this);\n }\n else {\n const bits = [];\n const valueHex = this.valueBlock.valueHexView;\n for (const byte of valueHex) {\n bits.push(byte.toString(2).padStart(8, \"0\"));\n }\n const bitsStr = bits.join(\"\");\n const name = this.constructor.NAME;\n const value = bitsStr.substring(0, bitsStr.length - this.valueBlock.unusedBits);\n return `${name} : ${value}`;\n }\n }\n}\n_a$q = BitString;\n(() => {\n typeStore.BitString = _a$q;\n})();\nBitString.NAME = BIT_STRING_NAME;\n\nvar _a$p;\nfunction viewAdd(first, second) {\n const c = new Uint8Array([0]);\n const firstView = new Uint8Array(first);\n const secondView = new Uint8Array(second);\n let firstViewCopy = firstView.slice(0);\n const firstViewCopyLength = firstViewCopy.length - 1;\n const secondViewCopy = secondView.slice(0);\n const secondViewCopyLength = secondViewCopy.length - 1;\n let value = 0;\n const max = (secondViewCopyLength < firstViewCopyLength) ? firstViewCopyLength : secondViewCopyLength;\n let counter = 0;\n for (let i = max; i >= 0; i--, counter++) {\n switch (true) {\n case (counter < secondViewCopy.length):\n value = firstViewCopy[firstViewCopyLength - counter] + secondViewCopy[secondViewCopyLength - counter] + c[0];\n break;\n default:\n value = firstViewCopy[firstViewCopyLength - counter] + c[0];\n }\n c[0] = value / 10;\n switch (true) {\n case (counter >= firstViewCopy.length):\n firstViewCopy = pvutils.utilConcatView(new Uint8Array([value % 10]), firstViewCopy);\n break;\n default:\n firstViewCopy[firstViewCopyLength - counter] = value % 10;\n }\n }\n if (c[0] > 0)\n firstViewCopy = pvutils.utilConcatView(c, firstViewCopy);\n return firstViewCopy;\n}\nfunction power2(n) {\n if (n >= powers2.length) {\n for (let p = powers2.length; p <= n; p++) {\n const c = new Uint8Array([0]);\n let digits = (powers2[p - 1]).slice(0);\n for (let i = (digits.length - 1); i >= 0; i--) {\n const newValue = new Uint8Array([(digits[i] << 1) + c[0]]);\n c[0] = newValue[0] / 10;\n digits[i] = newValue[0] % 10;\n }\n if (c[0] > 0)\n digits = pvutils.utilConcatView(c, digits);\n powers2.push(digits);\n }\n }\n return powers2[n];\n}\nfunction viewSub(first, second) {\n let b = 0;\n const firstView = new Uint8Array(first);\n const secondView = new Uint8Array(second);\n const firstViewCopy = firstView.slice(0);\n const firstViewCopyLength = firstViewCopy.length - 1;\n const secondViewCopy = secondView.slice(0);\n const secondViewCopyLength = secondViewCopy.length - 1;\n let value;\n let counter = 0;\n for (let i = secondViewCopyLength; i >= 0; i--, counter++) {\n value = firstViewCopy[firstViewCopyLength - counter] - secondViewCopy[secondViewCopyLength - counter] - b;\n switch (true) {\n case (value < 0):\n b = 1;\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\n break;\n default:\n b = 0;\n firstViewCopy[firstViewCopyLength - counter] = value;\n }\n }\n if (b > 0) {\n for (let i = (firstViewCopyLength - secondViewCopyLength + 1); i >= 0; i--, counter++) {\n value = firstViewCopy[firstViewCopyLength - counter] - b;\n if (value < 0) {\n b = 1;\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\n }\n else {\n b = 0;\n firstViewCopy[firstViewCopyLength - counter] = value;\n break;\n }\n }\n }\n return firstViewCopy.slice();\n}\nclass LocalIntegerValueBlock extends HexBlock(ValueBlock) {\n setValueHex() {\n if (this.valueHexView.length >= 4) {\n this.warnings.push(\"Too big Integer for decoding, hex only\");\n this.isHexOnly = true;\n this._valueDec = 0;\n }\n else {\n this.isHexOnly = false;\n if (this.valueHexView.length > 0) {\n this._valueDec = pvutils.utilDecodeTC.call(this);\n }\n }\n }\n constructor({ value, ...parameters } = {}) {\n super(parameters);\n this._valueDec = 0;\n if (parameters.valueHex) {\n this.setValueHex();\n }\n if (value !== undefined) {\n this.valueDec = value;\n }\n }\n set valueDec(v) {\n this._valueDec = v;\n this.isHexOnly = false;\n this.valueHexView = new Uint8Array(pvutils.utilEncodeTC(v));\n }\n get valueDec() {\n return this._valueDec;\n }\n fromDER(inputBuffer, inputOffset, inputLength, expectedLength = 0) {\n const offset = this.fromBER(inputBuffer, inputOffset, inputLength);\n if (offset === -1)\n return offset;\n const view = this.valueHexView;\n if ((view[0] === 0x00) && ((view[1] & 0x80) !== 0)) {\n this.valueHexView = view.subarray(1);\n }\n else {\n if (expectedLength !== 0) {\n if (view.length < expectedLength) {\n if ((expectedLength - view.length) > 1)\n expectedLength = view.length + 1;\n this.valueHexView = view.subarray(expectedLength - view.length);\n }\n }\n }\n return offset;\n }\n toDER(sizeOnly = false) {\n const view = this.valueHexView;\n switch (true) {\n case ((view[0] & 0x80) !== 0):\n {\n const updatedView = new Uint8Array(this.valueHexView.length + 1);\n updatedView[0] = 0x00;\n updatedView.set(view, 1);\n this.valueHexView = updatedView;\n }\n break;\n case ((view[0] === 0x00) && ((view[1] & 0x80) === 0)):\n {\n this.valueHexView = this.valueHexView.subarray(1);\n }\n break;\n }\n return this.toBER(sizeOnly);\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\n if (resultOffset === -1) {\n return resultOffset;\n }\n this.setValueHex();\n return resultOffset;\n }\n toBER(sizeOnly) {\n return sizeOnly\n ? new ArrayBuffer(this.valueHexView.length)\n : this.valueHexView.slice().buffer;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n valueDec: this.valueDec,\n };\n }\n toString() {\n const firstBit = (this.valueHexView.length * 8) - 1;\n let digits = new Uint8Array((this.valueHexView.length * 8) / 3);\n let bitNumber = 0;\n let currentByte;\n const asn1View = this.valueHexView;\n let result = \"\";\n let flag = false;\n for (let byteNumber = (asn1View.byteLength - 1); byteNumber >= 0; byteNumber--) {\n currentByte = asn1View[byteNumber];\n for (let i = 0; i < 8; i++) {\n if ((currentByte & 1) === 1) {\n switch (bitNumber) {\n case firstBit:\n digits = viewSub(power2(bitNumber), digits);\n result = \"-\";\n break;\n default:\n digits = viewAdd(digits, power2(bitNumber));\n }\n }\n bitNumber++;\n currentByte >>= 1;\n }\n }\n for (let i = 0; i < digits.length; i++) {\n if (digits[i])\n flag = true;\n if (flag)\n result += digitsString.charAt(digits[i]);\n }\n if (flag === false)\n result += digitsString.charAt(0);\n return result;\n }\n}\n_a$p = LocalIntegerValueBlock;\nLocalIntegerValueBlock.NAME = \"IntegerValueBlock\";\n(() => {\n Object.defineProperty(_a$p.prototype, \"valueHex\", {\n set: function (v) {\n this.valueHexView = new Uint8Array(v);\n this.setValueHex();\n },\n get: function () {\n return this.valueHexView.slice().buffer;\n },\n });\n})();\n\nvar _a$o;\nclass Integer extends BaseBlock {\n constructor(parameters = {}) {\n super(parameters, LocalIntegerValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 2;\n }\n toBigInt() {\n assertBigInt();\n return BigInt(this.valueBlock.toString());\n }\n static fromBigInt(value) {\n assertBigInt();\n const bigIntValue = BigInt(value);\n const writer = new ViewWriter();\n const hex = bigIntValue.toString(16).replace(/^-/, \"\");\n const view = new Uint8Array(pvtsutils.Convert.FromHex(hex));\n if (bigIntValue < 0) {\n const first = new Uint8Array(view.length + (view[0] & 0x80 ? 1 : 0));\n first[0] |= 0x80;\n const firstInt = BigInt(`0x${pvtsutils.Convert.ToHex(first)}`);\n const secondInt = firstInt + bigIntValue;\n const second = pvtsutils.BufferSourceConverter.toUint8Array(pvtsutils.Convert.FromHex(secondInt.toString(16)));\n second[0] |= 0x80;\n writer.write(second);\n }\n else {\n if (view[0] & 0x80) {\n writer.write(new Uint8Array([0]));\n }\n writer.write(view);\n }\n const res = new _a$o({ valueHex: writer.final() });\n return res;\n }\n convertToDER() {\n const integer = new _a$o({ valueHex: this.valueBlock.valueHexView });\n integer.valueBlock.toDER();\n return integer;\n }\n convertFromDER() {\n return new _a$o({\n valueHex: this.valueBlock.valueHexView[0] === 0\n ? this.valueBlock.valueHexView.subarray(1)\n : this.valueBlock.valueHexView,\n });\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.valueBlock.toString()}`;\n }\n}\n_a$o = Integer;\n(() => {\n typeStore.Integer = _a$o;\n})();\nInteger.NAME = \"INTEGER\";\n\nvar _a$n;\nclass Enumerated extends Integer {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 10;\n }\n}\n_a$n = Enumerated;\n(() => {\n typeStore.Enumerated = _a$n;\n})();\nEnumerated.NAME = \"ENUMERATED\";\n\nclass LocalSidValueBlock extends HexBlock(ValueBlock) {\n constructor({ valueDec = -1, isFirstSid = false, ...parameters } = {}) {\n super(parameters);\n this.valueDec = valueDec;\n this.isFirstSid = isFirstSid;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n if (!inputLength) {\n return inputOffset;\n }\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\n return -1;\n }\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\n this.valueHexView = new Uint8Array(inputLength);\n for (let i = 0; i < inputLength; i++) {\n this.valueHexView[i] = intBuffer[i] & 0x7F;\n this.blockLength++;\n if ((intBuffer[i] & 0x80) === 0x00)\n break;\n }\n const tempView = new Uint8Array(this.blockLength);\n for (let i = 0; i < this.blockLength; i++) {\n tempView[i] = this.valueHexView[i];\n }\n this.valueHexView = tempView;\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\n this.error = \"End of input reached before message was fully decoded\";\n return -1;\n }\n if (this.valueHexView[0] === 0x00)\n this.warnings.push(\"Needlessly long format of SID encoding\");\n if (this.blockLength <= 8)\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\n else {\n this.isHexOnly = true;\n this.warnings.push(\"Too big SID for decoding, hex only\");\n }\n return (inputOffset + this.blockLength);\n }\n set valueBigInt(value) {\n assertBigInt();\n let bits = BigInt(value).toString(2);\n while (bits.length % 7) {\n bits = \"0\" + bits;\n }\n const bytes = new Uint8Array(bits.length / 7);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(bits.slice(i * 7, i * 7 + 7), 2) + (i + 1 < bytes.length ? 0x80 : 0);\n }\n this.fromBER(bytes.buffer, 0, bytes.length);\n }\n toBER(sizeOnly) {\n if (this.isHexOnly) {\n if (sizeOnly)\n return (new ArrayBuffer(this.valueHexView.byteLength));\n const curView = this.valueHexView;\n const retView = new Uint8Array(this.blockLength);\n for (let i = 0; i < (this.blockLength - 1); i++)\n retView[i] = curView[i] | 0x80;\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\n return retView.buffer;\n }\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\n if (encodedBuf.byteLength === 0) {\n this.error = \"Error during encoding SID value\";\n return EMPTY_BUFFER;\n }\n const retView = new Uint8Array(encodedBuf.byteLength);\n if (!sizeOnly) {\n const encodedView = new Uint8Array(encodedBuf);\n const len = encodedBuf.byteLength - 1;\n for (let i = 0; i < len; i++)\n retView[i] = encodedView[i] | 0x80;\n retView[len] = encodedView[len];\n }\n return retView;\n }\n toString() {\n let result = \"\";\n if (this.isHexOnly)\n result = pvtsutils.Convert.ToHex(this.valueHexView);\n else {\n if (this.isFirstSid) {\n let sidValue = this.valueDec;\n if (this.valueDec <= 39)\n result = \"0.\";\n else {\n if (this.valueDec <= 79) {\n result = \"1.\";\n sidValue -= 40;\n }\n else {\n result = \"2.\";\n sidValue -= 80;\n }\n }\n result += sidValue.toString();\n }\n else\n result = this.valueDec.toString();\n }\n return result;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n valueDec: this.valueDec,\n isFirstSid: this.isFirstSid,\n };\n }\n}\nLocalSidValueBlock.NAME = \"sidBlock\";\n\nclass LocalObjectIdentifierValueBlock extends ValueBlock {\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\n super(parameters);\n this.value = [];\n if (value) {\n this.fromString(value);\n }\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n let resultOffset = inputOffset;\n while (inputLength > 0) {\n const sidBlock = new LocalSidValueBlock();\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\n if (resultOffset === -1) {\n this.blockLength = 0;\n this.error = sidBlock.error;\n return resultOffset;\n }\n if (this.value.length === 0)\n sidBlock.isFirstSid = true;\n this.blockLength += sidBlock.blockLength;\n inputLength -= sidBlock.blockLength;\n this.value.push(sidBlock);\n }\n return resultOffset;\n }\n toBER(sizeOnly) {\n const retBuffers = [];\n for (let i = 0; i < this.value.length; i++) {\n const valueBuf = this.value[i].toBER(sizeOnly);\n if (valueBuf.byteLength === 0) {\n this.error = this.value[i].error;\n return EMPTY_BUFFER;\n }\n retBuffers.push(valueBuf);\n }\n return concat(retBuffers);\n }\n fromString(string) {\n this.value = [];\n let pos1 = 0;\n let pos2 = 0;\n let sid = \"\";\n let flag = false;\n do {\n pos2 = string.indexOf(\".\", pos1);\n if (pos2 === -1)\n sid = string.substring(pos1);\n else\n sid = string.substring(pos1, pos2);\n pos1 = pos2 + 1;\n if (flag) {\n const sidBlock = this.value[0];\n let plus = 0;\n switch (sidBlock.valueDec) {\n case 0:\n break;\n case 1:\n plus = 40;\n break;\n case 2:\n plus = 80;\n break;\n default:\n this.value = [];\n return;\n }\n const parsedSID = parseInt(sid, 10);\n if (isNaN(parsedSID))\n return;\n sidBlock.valueDec = parsedSID + plus;\n flag = false;\n }\n else {\n const sidBlock = new LocalSidValueBlock();\n if (sid > Number.MAX_SAFE_INTEGER) {\n assertBigInt();\n const sidValue = BigInt(sid);\n sidBlock.valueBigInt = sidValue;\n }\n else {\n sidBlock.valueDec = parseInt(sid, 10);\n if (isNaN(sidBlock.valueDec))\n return;\n }\n if (!this.value.length) {\n sidBlock.isFirstSid = true;\n flag = true;\n }\n this.value.push(sidBlock);\n }\n } while (pos2 !== -1);\n }\n toString() {\n let result = \"\";\n let isHexOnly = false;\n for (let i = 0; i < this.value.length; i++) {\n isHexOnly = this.value[i].isHexOnly;\n let sidStr = this.value[i].toString();\n if (i !== 0)\n result = `${result}.`;\n if (isHexOnly) {\n sidStr = `{${sidStr}}`;\n if (this.value[i].isFirstSid)\n result = `2.{${sidStr} - 80}`;\n else\n result += sidStr;\n }\n else\n result += sidStr;\n }\n return result;\n }\n toJSON() {\n const object = {\n ...super.toJSON(),\n value: this.toString(),\n sidArray: [],\n };\n for (let i = 0; i < this.value.length; i++) {\n object.sidArray.push(this.value[i].toJSON());\n }\n return object;\n }\n}\nLocalObjectIdentifierValueBlock.NAME = \"ObjectIdentifierValueBlock\";\n\nvar _a$m;\nclass ObjectIdentifier extends BaseBlock {\n getValue() {\n return this.valueBlock.toString();\n }\n setValue(value) {\n this.valueBlock.fromString(value);\n }\n constructor(parameters = {}) {\n super(parameters, LocalObjectIdentifierValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 6;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n value: this.getValue(),\n };\n }\n}\n_a$m = ObjectIdentifier;\n(() => {\n typeStore.ObjectIdentifier = _a$m;\n})();\nObjectIdentifier.NAME = \"OBJECT IDENTIFIER\";\n\nclass LocalRelativeSidValueBlock extends HexBlock(LocalBaseBlock) {\n constructor({ valueDec = 0, ...parameters } = {}) {\n super(parameters);\n this.valueDec = valueDec;\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n if (inputLength === 0)\n return inputOffset;\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n if (!checkBufferParams(this, inputView, inputOffset, inputLength))\n return -1;\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\n this.valueHexView = new Uint8Array(inputLength);\n for (let i = 0; i < inputLength; i++) {\n this.valueHexView[i] = intBuffer[i] & 0x7F;\n this.blockLength++;\n if ((intBuffer[i] & 0x80) === 0x00)\n break;\n }\n const tempView = new Uint8Array(this.blockLength);\n for (let i = 0; i < this.blockLength; i++)\n tempView[i] = this.valueHexView[i];\n this.valueHexView = tempView;\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\n this.error = \"End of input reached before message was fully decoded\";\n return -1;\n }\n if (this.valueHexView[0] === 0x00)\n this.warnings.push(\"Needlessly long format of SID encoding\");\n if (this.blockLength <= 8)\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\n else {\n this.isHexOnly = true;\n this.warnings.push(\"Too big SID for decoding, hex only\");\n }\n return (inputOffset + this.blockLength);\n }\n toBER(sizeOnly) {\n if (this.isHexOnly) {\n if (sizeOnly)\n return (new ArrayBuffer(this.valueHexView.byteLength));\n const curView = this.valueHexView;\n const retView = new Uint8Array(this.blockLength);\n for (let i = 0; i < (this.blockLength - 1); i++)\n retView[i] = curView[i] | 0x80;\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\n return retView.buffer;\n }\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\n if (encodedBuf.byteLength === 0) {\n this.error = \"Error during encoding SID value\";\n return EMPTY_BUFFER;\n }\n const retView = new Uint8Array(encodedBuf.byteLength);\n if (!sizeOnly) {\n const encodedView = new Uint8Array(encodedBuf);\n const len = encodedBuf.byteLength - 1;\n for (let i = 0; i < len; i++)\n retView[i] = encodedView[i] | 0x80;\n retView[len] = encodedView[len];\n }\n return retView.buffer;\n }\n toString() {\n let result = \"\";\n if (this.isHexOnly)\n result = pvtsutils.Convert.ToHex(this.valueHexView);\n else {\n result = this.valueDec.toString();\n }\n return result;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n valueDec: this.valueDec,\n };\n }\n}\nLocalRelativeSidValueBlock.NAME = \"relativeSidBlock\";\n\nclass LocalRelativeObjectIdentifierValueBlock extends ValueBlock {\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\n super(parameters);\n this.value = [];\n if (value) {\n this.fromString(value);\n }\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n let resultOffset = inputOffset;\n while (inputLength > 0) {\n const sidBlock = new LocalRelativeSidValueBlock();\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\n if (resultOffset === -1) {\n this.blockLength = 0;\n this.error = sidBlock.error;\n return resultOffset;\n }\n this.blockLength += sidBlock.blockLength;\n inputLength -= sidBlock.blockLength;\n this.value.push(sidBlock);\n }\n return resultOffset;\n }\n toBER(sizeOnly, _writer) {\n const retBuffers = [];\n for (let i = 0; i < this.value.length; i++) {\n const valueBuf = this.value[i].toBER(sizeOnly);\n if (valueBuf.byteLength === 0) {\n this.error = this.value[i].error;\n return EMPTY_BUFFER;\n }\n retBuffers.push(valueBuf);\n }\n return concat(retBuffers);\n }\n fromString(string) {\n this.value = [];\n let pos1 = 0;\n let pos2 = 0;\n let sid = \"\";\n do {\n pos2 = string.indexOf(\".\", pos1);\n if (pos2 === -1)\n sid = string.substring(pos1);\n else\n sid = string.substring(pos1, pos2);\n pos1 = pos2 + 1;\n const sidBlock = new LocalRelativeSidValueBlock();\n sidBlock.valueDec = parseInt(sid, 10);\n if (isNaN(sidBlock.valueDec))\n return true;\n this.value.push(sidBlock);\n } while (pos2 !== -1);\n return true;\n }\n toString() {\n let result = \"\";\n let isHexOnly = false;\n for (let i = 0; i < this.value.length; i++) {\n isHexOnly = this.value[i].isHexOnly;\n let sidStr = this.value[i].toString();\n if (i !== 0)\n result = `${result}.`;\n if (isHexOnly) {\n sidStr = `{${sidStr}}`;\n result += sidStr;\n }\n else\n result += sidStr;\n }\n return result;\n }\n toJSON() {\n const object = {\n ...super.toJSON(),\n value: this.toString(),\n sidArray: [],\n };\n for (let i = 0; i < this.value.length; i++)\n object.sidArray.push(this.value[i].toJSON());\n return object;\n }\n}\nLocalRelativeObjectIdentifierValueBlock.NAME = \"RelativeObjectIdentifierValueBlock\";\n\nvar _a$l;\nclass RelativeObjectIdentifier extends BaseBlock {\n getValue() {\n return this.valueBlock.toString();\n }\n setValue(value) {\n this.valueBlock.fromString(value);\n }\n constructor(parameters = {}) {\n super(parameters, LocalRelativeObjectIdentifierValueBlock);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 13;\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n value: this.getValue(),\n };\n }\n}\n_a$l = RelativeObjectIdentifier;\n(() => {\n typeStore.RelativeObjectIdentifier = _a$l;\n})();\nRelativeObjectIdentifier.NAME = \"RelativeObjectIdentifier\";\n\nvar _a$k;\nclass Sequence extends Constructed {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 16;\n }\n}\n_a$k = Sequence;\n(() => {\n typeStore.Sequence = _a$k;\n})();\nSequence.NAME = \"SEQUENCE\";\n\nvar _a$j;\nclass Set extends Constructed {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 17;\n }\n}\n_a$j = Set;\n(() => {\n typeStore.Set = _a$j;\n})();\nSet.NAME = \"SET\";\n\nclass LocalStringValueBlock extends HexBlock(ValueBlock) {\n constructor({ ...parameters } = {}) {\n super(parameters);\n this.isHexOnly = true;\n this.value = EMPTY_STRING;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n value: this.value,\n };\n }\n}\nLocalStringValueBlock.NAME = \"StringValueBlock\";\n\nclass LocalSimpleStringValueBlock extends LocalStringValueBlock {\n}\nLocalSimpleStringValueBlock.NAME = \"SimpleStringValueBlock\";\n\nclass LocalSimpleStringBlock extends BaseStringBlock {\n constructor({ ...parameters } = {}) {\n super(parameters, LocalSimpleStringValueBlock);\n }\n fromBuffer(inputBuffer) {\n this.valueBlock.value = String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\n }\n fromString(inputString) {\n const strLen = inputString.length;\n const view = this.valueBlock.valueHexView = new Uint8Array(strLen);\n for (let i = 0; i < strLen; i++)\n view[i] = inputString.charCodeAt(i);\n this.valueBlock.value = inputString;\n }\n}\nLocalSimpleStringBlock.NAME = \"SIMPLE STRING\";\n\nclass LocalUtf8StringValueBlock extends LocalSimpleStringBlock {\n fromBuffer(inputBuffer) {\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n try {\n this.valueBlock.value = pvtsutils.Convert.ToUtf8String(inputBuffer);\n }\n catch (ex) {\n this.warnings.push(`Error during \"decodeURIComponent\": ${ex}, using raw string`);\n this.valueBlock.value = pvtsutils.Convert.ToBinary(inputBuffer);\n }\n }\n fromString(inputString) {\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf8String(inputString));\n this.valueBlock.value = inputString;\n }\n}\nLocalUtf8StringValueBlock.NAME = \"Utf8StringValueBlock\";\n\nvar _a$i;\nclass Utf8String extends LocalUtf8StringValueBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 12;\n }\n}\n_a$i = Utf8String;\n(() => {\n typeStore.Utf8String = _a$i;\n})();\nUtf8String.NAME = \"UTF8String\";\n\nclass LocalBmpStringValueBlock extends LocalSimpleStringBlock {\n fromBuffer(inputBuffer) {\n this.valueBlock.value = pvtsutils.Convert.ToUtf16String(inputBuffer);\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\n }\n fromString(inputString) {\n this.valueBlock.value = inputString;\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf16String(inputString));\n }\n}\nLocalBmpStringValueBlock.NAME = \"BmpStringValueBlock\";\n\nvar _a$h;\nclass BmpString extends LocalBmpStringValueBlock {\n constructor({ ...parameters } = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 30;\n }\n}\n_a$h = BmpString;\n(() => {\n typeStore.BmpString = _a$h;\n})();\nBmpString.NAME = \"BMPString\";\n\nclass LocalUniversalStringValueBlock extends LocalSimpleStringBlock {\n fromBuffer(inputBuffer) {\n const copyBuffer = ArrayBuffer.isView(inputBuffer) ? inputBuffer.slice().buffer : inputBuffer.slice(0);\n const valueView = new Uint8Array(copyBuffer);\n for (let i = 0; i < valueView.length; i += 4) {\n valueView[i] = valueView[i + 3];\n valueView[i + 1] = valueView[i + 2];\n valueView[i + 2] = 0x00;\n valueView[i + 3] = 0x00;\n }\n this.valueBlock.value = String.fromCharCode.apply(null, new Uint32Array(copyBuffer));\n }\n fromString(inputString) {\n const strLength = inputString.length;\n const valueHexView = this.valueBlock.valueHexView = new Uint8Array(strLength * 4);\n for (let i = 0; i < strLength; i++) {\n const codeBuf = pvutils.utilToBase(inputString.charCodeAt(i), 8);\n const codeView = new Uint8Array(codeBuf);\n if (codeView.length > 4)\n continue;\n const dif = 4 - codeView.length;\n for (let j = (codeView.length - 1); j >= 0; j--)\n valueHexView[i * 4 + j + dif] = codeView[j];\n }\n this.valueBlock.value = inputString;\n }\n}\nLocalUniversalStringValueBlock.NAME = \"UniversalStringValueBlock\";\n\nvar _a$g;\nclass UniversalString extends LocalUniversalStringValueBlock {\n constructor({ ...parameters } = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 28;\n }\n}\n_a$g = UniversalString;\n(() => {\n typeStore.UniversalString = _a$g;\n})();\nUniversalString.NAME = \"UniversalString\";\n\nvar _a$f;\nclass NumericString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 18;\n }\n}\n_a$f = NumericString;\n(() => {\n typeStore.NumericString = _a$f;\n})();\nNumericString.NAME = \"NumericString\";\n\nvar _a$e;\nclass PrintableString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 19;\n }\n}\n_a$e = PrintableString;\n(() => {\n typeStore.PrintableString = _a$e;\n})();\nPrintableString.NAME = \"PrintableString\";\n\nvar _a$d;\nclass TeletexString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 20;\n }\n}\n_a$d = TeletexString;\n(() => {\n typeStore.TeletexString = _a$d;\n})();\nTeletexString.NAME = \"TeletexString\";\n\nvar _a$c;\nclass VideotexString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 21;\n }\n}\n_a$c = VideotexString;\n(() => {\n typeStore.VideotexString = _a$c;\n})();\nVideotexString.NAME = \"VideotexString\";\n\nvar _a$b;\nclass IA5String extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 22;\n }\n}\n_a$b = IA5String;\n(() => {\n typeStore.IA5String = _a$b;\n})();\nIA5String.NAME = \"IA5String\";\n\nvar _a$a;\nclass GraphicString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 25;\n }\n}\n_a$a = GraphicString;\n(() => {\n typeStore.GraphicString = _a$a;\n})();\nGraphicString.NAME = \"GraphicString\";\n\nvar _a$9;\nclass VisibleString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 26;\n }\n}\n_a$9 = VisibleString;\n(() => {\n typeStore.VisibleString = _a$9;\n})();\nVisibleString.NAME = \"VisibleString\";\n\nvar _a$8;\nclass GeneralString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 27;\n }\n}\n_a$8 = GeneralString;\n(() => {\n typeStore.GeneralString = _a$8;\n})();\nGeneralString.NAME = \"GeneralString\";\n\nvar _a$7;\nclass CharacterString extends LocalSimpleStringBlock {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 29;\n }\n}\n_a$7 = CharacterString;\n(() => {\n typeStore.CharacterString = _a$7;\n})();\nCharacterString.NAME = \"CharacterString\";\n\nvar _a$6;\nclass UTCTime extends VisibleString {\n constructor({ value, valueDate, ...parameters } = {}) {\n super(parameters);\n this.year = 0;\n this.month = 0;\n this.day = 0;\n this.hour = 0;\n this.minute = 0;\n this.second = 0;\n if (value) {\n this.fromString(value);\n this.valueBlock.valueHexView = new Uint8Array(value.length);\n for (let i = 0; i < value.length; i++)\n this.valueBlock.valueHexView[i] = value.charCodeAt(i);\n }\n if (valueDate) {\n this.fromDate(valueDate);\n this.valueBlock.valueHexView = new Uint8Array(this.toBuffer());\n }\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 23;\n }\n fromBuffer(inputBuffer) {\n this.fromString(String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer)));\n }\n toBuffer() {\n const str = this.toString();\n const buffer = new ArrayBuffer(str.length);\n const view = new Uint8Array(buffer);\n for (let i = 0; i < str.length; i++)\n view[i] = str.charCodeAt(i);\n return buffer;\n }\n fromDate(inputDate) {\n this.year = inputDate.getUTCFullYear();\n this.month = inputDate.getUTCMonth() + 1;\n this.day = inputDate.getUTCDate();\n this.hour = inputDate.getUTCHours();\n this.minute = inputDate.getUTCMinutes();\n this.second = inputDate.getUTCSeconds();\n }\n toDate() {\n return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second)));\n }\n fromString(inputString) {\n const parser = /(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})Z/ig;\n const parserArray = parser.exec(inputString);\n if (parserArray === null) {\n this.error = \"Wrong input string for conversion\";\n return;\n }\n const year = parseInt(parserArray[1], 10);\n if (year >= 50)\n this.year = 1900 + year;\n else\n this.year = 2000 + year;\n this.month = parseInt(parserArray[2], 10);\n this.day = parseInt(parserArray[3], 10);\n this.hour = parseInt(parserArray[4], 10);\n this.minute = parseInt(parserArray[5], 10);\n this.second = parseInt(parserArray[6], 10);\n }\n toString(encoding = \"iso\") {\n if (encoding === \"iso\") {\n const outputArray = new Array(7);\n outputArray[0] = pvutils.padNumber(((this.year < 2000) ? (this.year - 1900) : (this.year - 2000)), 2);\n outputArray[1] = pvutils.padNumber(this.month, 2);\n outputArray[2] = pvutils.padNumber(this.day, 2);\n outputArray[3] = pvutils.padNumber(this.hour, 2);\n outputArray[4] = pvutils.padNumber(this.minute, 2);\n outputArray[5] = pvutils.padNumber(this.second, 2);\n outputArray[6] = \"Z\";\n return outputArray.join(\"\");\n }\n return super.toString(encoding);\n }\n onAsciiEncoding() {\n return `${this.constructor.NAME} : ${this.toDate().toISOString()}`;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n year: this.year,\n month: this.month,\n day: this.day,\n hour: this.hour,\n minute: this.minute,\n second: this.second,\n };\n }\n}\n_a$6 = UTCTime;\n(() => {\n typeStore.UTCTime = _a$6;\n})();\nUTCTime.NAME = \"UTCTime\";\n\nvar _a$5;\nclass GeneralizedTime extends UTCTime {\n constructor(parameters = {}) {\n var _b;\n super(parameters);\n (_b = this.millisecond) !== null && _b !== void 0 ? _b : (this.millisecond = 0);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 24;\n }\n fromDate(inputDate) {\n super.fromDate(inputDate);\n this.millisecond = inputDate.getUTCMilliseconds();\n }\n toDate() {\n const utcDate = Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, this.millisecond);\n return (new Date(utcDate));\n }\n fromString(inputString) {\n let isUTC = false;\n let timeString = \"\";\n let dateTimeString = \"\";\n let fractionPart = 0;\n let parser;\n let hourDifference = 0;\n let minuteDifference = 0;\n if (inputString[inputString.length - 1] === \"Z\") {\n timeString = inputString.substring(0, inputString.length - 1);\n isUTC = true;\n }\n else {\n const number = new Number(inputString[inputString.length - 1]);\n if (isNaN(number.valueOf()))\n throw new Error(\"Wrong input string for conversion\");\n timeString = inputString;\n }\n if (isUTC) {\n if (timeString.indexOf(\"+\") !== -1)\n throw new Error(\"Wrong input string for conversion\");\n if (timeString.indexOf(\"-\") !== -1)\n throw new Error(\"Wrong input string for conversion\");\n }\n else {\n let multiplier = 1;\n let differencePosition = timeString.indexOf(\"+\");\n let differenceString = \"\";\n if (differencePosition === -1) {\n differencePosition = timeString.indexOf(\"-\");\n multiplier = -1;\n }\n if (differencePosition !== -1) {\n differenceString = timeString.substring(differencePosition + 1);\n timeString = timeString.substring(0, differencePosition);\n if ((differenceString.length !== 2) && (differenceString.length !== 4))\n throw new Error(\"Wrong input string for conversion\");\n let number = parseInt(differenceString.substring(0, 2), 10);\n if (isNaN(number.valueOf()))\n throw new Error(\"Wrong input string for conversion\");\n hourDifference = multiplier * number;\n if (differenceString.length === 4) {\n number = parseInt(differenceString.substring(2, 4), 10);\n if (isNaN(number.valueOf()))\n throw new Error(\"Wrong input string for conversion\");\n minuteDifference = multiplier * number;\n }\n }\n }\n let fractionPointPosition = timeString.indexOf(\".\");\n if (fractionPointPosition === -1)\n fractionPointPosition = timeString.indexOf(\",\");\n if (fractionPointPosition !== -1) {\n const fractionPartCheck = new Number(`0${timeString.substring(fractionPointPosition)}`);\n if (isNaN(fractionPartCheck.valueOf()))\n throw new Error(\"Wrong input string for conversion\");\n fractionPart = fractionPartCheck.valueOf();\n dateTimeString = timeString.substring(0, fractionPointPosition);\n }\n else\n dateTimeString = timeString;\n switch (true) {\n case (dateTimeString.length === 8):\n parser = /(\\d{4})(\\d{2})(\\d{2})/ig;\n if (fractionPointPosition !== -1)\n throw new Error(\"Wrong input string for conversion\");\n break;\n case (dateTimeString.length === 10):\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})/ig;\n if (fractionPointPosition !== -1) {\n let fractionResult = 60 * fractionPart;\n this.minute = Math.floor(fractionResult);\n fractionResult = 60 * (fractionResult - this.minute);\n this.second = Math.floor(fractionResult);\n fractionResult = 1000 * (fractionResult - this.second);\n this.millisecond = Math.floor(fractionResult);\n }\n break;\n case (dateTimeString.length === 12):\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\n if (fractionPointPosition !== -1) {\n let fractionResult = 60 * fractionPart;\n this.second = Math.floor(fractionResult);\n fractionResult = 1000 * (fractionResult - this.second);\n this.millisecond = Math.floor(fractionResult);\n }\n break;\n case (dateTimeString.length === 14):\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\n if (fractionPointPosition !== -1) {\n const fractionResult = 1000 * fractionPart;\n this.millisecond = Math.floor(fractionResult);\n }\n break;\n default:\n throw new Error(\"Wrong input string for conversion\");\n }\n const parserArray = parser.exec(dateTimeString);\n if (parserArray === null)\n throw new Error(\"Wrong input string for conversion\");\n for (let j = 1; j < parserArray.length; j++) {\n switch (j) {\n case 1:\n this.year = parseInt(parserArray[j], 10);\n break;\n case 2:\n this.month = parseInt(parserArray[j], 10);\n break;\n case 3:\n this.day = parseInt(parserArray[j], 10);\n break;\n case 4:\n this.hour = parseInt(parserArray[j], 10) + hourDifference;\n break;\n case 5:\n this.minute = parseInt(parserArray[j], 10) + minuteDifference;\n break;\n case 6:\n this.second = parseInt(parserArray[j], 10);\n break;\n default:\n throw new Error(\"Wrong input string for conversion\");\n }\n }\n if (isUTC === false) {\n const tempDate = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n this.year = tempDate.getUTCFullYear();\n this.month = tempDate.getUTCMonth();\n this.day = tempDate.getUTCDay();\n this.hour = tempDate.getUTCHours();\n this.minute = tempDate.getUTCMinutes();\n this.second = tempDate.getUTCSeconds();\n this.millisecond = tempDate.getUTCMilliseconds();\n }\n }\n toString(encoding = \"iso\") {\n if (encoding === \"iso\") {\n const outputArray = [];\n outputArray.push(pvutils.padNumber(this.year, 4));\n outputArray.push(pvutils.padNumber(this.month, 2));\n outputArray.push(pvutils.padNumber(this.day, 2));\n outputArray.push(pvutils.padNumber(this.hour, 2));\n outputArray.push(pvutils.padNumber(this.minute, 2));\n outputArray.push(pvutils.padNumber(this.second, 2));\n if (this.millisecond !== 0) {\n outputArray.push(\".\");\n outputArray.push(pvutils.padNumber(this.millisecond, 3));\n }\n outputArray.push(\"Z\");\n return outputArray.join(\"\");\n }\n return super.toString(encoding);\n }\n toJSON() {\n return {\n ...super.toJSON(),\n millisecond: this.millisecond,\n };\n }\n}\n_a$5 = GeneralizedTime;\n(() => {\n typeStore.GeneralizedTime = _a$5;\n})();\nGeneralizedTime.NAME = \"GeneralizedTime\";\n\nvar _a$4;\nclass DATE extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 31;\n }\n}\n_a$4 = DATE;\n(() => {\n typeStore.DATE = _a$4;\n})();\nDATE.NAME = \"DATE\";\n\nvar _a$3;\nclass TimeOfDay extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 32;\n }\n}\n_a$3 = TimeOfDay;\n(() => {\n typeStore.TimeOfDay = _a$3;\n})();\nTimeOfDay.NAME = \"TimeOfDay\";\n\nvar _a$2;\nclass DateTime extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 33;\n }\n}\n_a$2 = DateTime;\n(() => {\n typeStore.DateTime = _a$2;\n})();\nDateTime.NAME = \"DateTime\";\n\nvar _a$1;\nclass Duration extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 34;\n }\n}\n_a$1 = Duration;\n(() => {\n typeStore.Duration = _a$1;\n})();\nDuration.NAME = \"Duration\";\n\nvar _a;\nclass TIME extends Utf8String {\n constructor(parameters = {}) {\n super(parameters);\n this.idBlock.tagClass = 1;\n this.idBlock.tagNumber = 14;\n }\n}\n_a = TIME;\n(() => {\n typeStore.TIME = _a;\n})();\nTIME.NAME = \"TIME\";\n\nclass Any {\n constructor({ name = EMPTY_STRING, optional = false } = {}) {\n this.name = name;\n this.optional = optional;\n }\n}\n\nclass Choice extends Any {\n constructor({ value = [], ...parameters } = {}) {\n super(parameters);\n this.value = value;\n }\n}\n\nclass Repeated extends Any {\n constructor({ value = new Any(), local = false, ...parameters } = {}) {\n super(parameters);\n this.value = value;\n this.local = local;\n }\n}\n\nclass RawData {\n get data() {\n return this.dataView.slice().buffer;\n }\n set data(value) {\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(value);\n }\n constructor({ data = EMPTY_VIEW } = {}) {\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(data);\n }\n fromBER(inputBuffer, inputOffset, inputLength) {\n const endLength = inputOffset + inputLength;\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).subarray(inputOffset, endLength);\n return endLength;\n }\n toBER(_sizeOnly) {\n return this.dataView.slice().buffer;\n }\n}\n\nfunction compareSchema(root, inputData, inputSchema) {\n if (inputSchema instanceof Choice) {\n for (const element of inputSchema.value) {\n const result = compareSchema(root, inputData, element);\n if (result.verified) {\n return {\n verified: true,\n result: root,\n };\n }\n }\n {\n const _result = {\n verified: false,\n result: { error: \"Wrong values for Choice type\" },\n };\n if (inputSchema.hasOwnProperty(NAME))\n _result.name = inputSchema.name;\n return _result;\n }\n }\n if (inputSchema instanceof Any) {\n if (inputSchema.hasOwnProperty(NAME))\n root[inputSchema.name] = inputData;\n return {\n verified: true,\n result: root,\n };\n }\n if ((root instanceof Object) === false) {\n return {\n verified: false,\n result: { error: \"Wrong root object\" },\n };\n }\n if ((inputData instanceof Object) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 data\" },\n };\n }\n if ((inputSchema instanceof Object) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if ((ID_BLOCK in inputSchema) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if ((FROM_BER in inputSchema.idBlock) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if ((TO_BER in inputSchema.idBlock) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n const encodedId = inputSchema.idBlock.toBER(false);\n if (encodedId.byteLength === 0) {\n return {\n verified: false,\n result: { error: \"Error encoding idBlock for ASN.1 schema\" },\n };\n }\n const decodedOffset = inputSchema.idBlock.fromBER(encodedId, 0, encodedId.byteLength);\n if (decodedOffset === -1) {\n return {\n verified: false,\n result: { error: \"Error decoding idBlock for ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.hasOwnProperty(TAG_CLASS) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.tagClass !== inputData.idBlock.tagClass) {\n return {\n verified: false,\n result: root,\n };\n }\n if (inputSchema.idBlock.hasOwnProperty(TAG_NUMBER) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.tagNumber !== inputData.idBlock.tagNumber) {\n return {\n verified: false,\n result: root,\n };\n }\n if (inputSchema.idBlock.hasOwnProperty(IS_CONSTRUCTED) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.isConstructed !== inputData.idBlock.isConstructed) {\n return {\n verified: false,\n result: root,\n };\n }\n if (!(IS_HEX_ONLY in inputSchema.idBlock)) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n if (inputSchema.idBlock.isHexOnly !== inputData.idBlock.isHexOnly) {\n return {\n verified: false,\n result: root,\n };\n }\n if (inputSchema.idBlock.isHexOnly) {\n if ((VALUE_HEX_VIEW in inputSchema.idBlock) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema\" },\n };\n }\n const schemaView = inputSchema.idBlock.valueHexView;\n const asn1View = inputData.idBlock.valueHexView;\n if (schemaView.length !== asn1View.length) {\n return {\n verified: false,\n result: root,\n };\n }\n for (let i = 0; i < schemaView.length; i++) {\n if (schemaView[i] !== asn1View[1]) {\n return {\n verified: false,\n result: root,\n };\n }\n }\n }\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name)\n root[inputSchema.name] = inputData;\n }\n if (inputSchema instanceof typeStore.Constructed) {\n let admission = 0;\n let result = {\n verified: false,\n result: { error: \"Unknown error\" },\n };\n let maxLength = inputSchema.valueBlock.value.length;\n if (maxLength > 0) {\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\n maxLength = inputData.valueBlock.value.length;\n }\n }\n if (maxLength === 0) {\n return {\n verified: true,\n result: root,\n };\n }\n if ((inputData.valueBlock.value.length === 0)\n && (inputSchema.valueBlock.value.length !== 0)) {\n let _optional = true;\n for (let i = 0; i < inputSchema.valueBlock.value.length; i++)\n _optional = _optional && (inputSchema.valueBlock.value[i].optional || false);\n if (_optional) {\n return {\n verified: true,\n result: root,\n };\n }\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name)\n delete root[inputSchema.name];\n }\n root.error = \"Inconsistent object length\";\n return {\n verified: false,\n result: root,\n };\n }\n for (let i = 0; i < maxLength; i++) {\n if ((i - admission) >= inputData.valueBlock.value.length) {\n if (inputSchema.valueBlock.value[i].optional === false) {\n const _result = {\n verified: false,\n result: root,\n };\n root.error = \"Inconsistent length between ASN.1 data and schema\";\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name) {\n delete root[inputSchema.name];\n _result.name = inputSchema.name;\n }\n }\n return _result;\n }\n }\n else {\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\n result = compareSchema(root, inputData.valueBlock.value[i], inputSchema.valueBlock.value[0].value);\n if (result.verified === false) {\n if (inputSchema.valueBlock.value[0].optional)\n admission++;\n else {\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name)\n delete root[inputSchema.name];\n }\n return result;\n }\n }\n if ((NAME in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].name.length > 0)) {\n let arrayRoot = {};\n if ((LOCAL in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].local))\n arrayRoot = inputData;\n else\n arrayRoot = root;\n if (typeof arrayRoot[inputSchema.valueBlock.value[0].name] === \"undefined\")\n arrayRoot[inputSchema.valueBlock.value[0].name] = [];\n arrayRoot[inputSchema.valueBlock.value[0].name].push(inputData.valueBlock.value[i]);\n }\n }\n else {\n result = compareSchema(root, inputData.valueBlock.value[i - admission], inputSchema.valueBlock.value[i]);\n if (result.verified === false) {\n if (inputSchema.valueBlock.value[i].optional)\n admission++;\n else {\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name)\n delete root[inputSchema.name];\n }\n return result;\n }\n }\n }\n }\n }\n if (result.verified === false) {\n const _result = {\n verified: false,\n result: root,\n };\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name) {\n delete root[inputSchema.name];\n _result.name = inputSchema.name;\n }\n }\n return _result;\n }\n return {\n verified: true,\n result: root,\n };\n }\n if (inputSchema.primitiveSchema\n && (VALUE_HEX_VIEW in inputData.valueBlock)) {\n const asn1 = localFromBER(inputData.valueBlock.valueHexView);\n if (asn1.offset === -1) {\n const _result = {\n verified: false,\n result: asn1.result,\n };\n if (inputSchema.name) {\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n if (inputSchema.name) {\n delete root[inputSchema.name];\n _result.name = inputSchema.name;\n }\n }\n return _result;\n }\n return compareSchema(root, asn1.result, inputSchema.primitiveSchema);\n }\n return {\n verified: true,\n result: root,\n };\n}\nfunction verifySchema(inputBuffer, inputSchema) {\n if ((inputSchema instanceof Object) === false) {\n return {\n verified: false,\n result: { error: \"Wrong ASN.1 schema type\" },\n };\n }\n const asn1 = localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\n if (asn1.offset === -1) {\n return {\n verified: false,\n result: asn1.result,\n };\n }\n return compareSchema(asn1.result, asn1.result, inputSchema);\n}\n\nexport { Any, BaseBlock, BaseStringBlock, BitString, BmpString, Boolean, CharacterString, Choice, Constructed, DATE, DEFAULT_MAX_CONTENT_LENGTH, DEFAULT_MAX_DEPTH, DEFAULT_MAX_NODES, DateTime, Duration, EndOfContent, Enumerated, GeneralString, GeneralizedTime, GraphicString, HexBlock, IA5String, Integer, Null, NumericString, ObjectIdentifier, OctetString, Primitive, PrintableString, RawData, RelativeObjectIdentifier, Repeated, Sequence, Set, TIME, TeletexString, TimeOfDay, UTCTime, UniversalString, Utf8String, ValueBlock, VideotexString, ViewWriter, VisibleString, compareSchema, fromBER, verifySchema };\n","export var AsnTypeTypes;\n(function (AsnTypeTypes) {\n AsnTypeTypes[AsnTypeTypes[\"Sequence\"] = 0] = \"Sequence\";\n AsnTypeTypes[AsnTypeTypes[\"Set\"] = 1] = \"Set\";\n AsnTypeTypes[AsnTypeTypes[\"Choice\"] = 2] = \"Choice\";\n})(AsnTypeTypes || (AsnTypeTypes = {}));\nexport var AsnPropTypes;\n(function (AsnPropTypes) {\n AsnPropTypes[AsnPropTypes[\"Any\"] = 1] = \"Any\";\n AsnPropTypes[AsnPropTypes[\"Boolean\"] = 2] = \"Boolean\";\n AsnPropTypes[AsnPropTypes[\"OctetString\"] = 3] = \"OctetString\";\n AsnPropTypes[AsnPropTypes[\"BitString\"] = 4] = \"BitString\";\n AsnPropTypes[AsnPropTypes[\"Integer\"] = 5] = \"Integer\";\n AsnPropTypes[AsnPropTypes[\"Enumerated\"] = 6] = \"Enumerated\";\n AsnPropTypes[AsnPropTypes[\"ObjectIdentifier\"] = 7] = \"ObjectIdentifier\";\n AsnPropTypes[AsnPropTypes[\"Utf8String\"] = 8] = \"Utf8String\";\n AsnPropTypes[AsnPropTypes[\"BmpString\"] = 9] = \"BmpString\";\n AsnPropTypes[AsnPropTypes[\"UniversalString\"] = 10] = \"UniversalString\";\n AsnPropTypes[AsnPropTypes[\"NumericString\"] = 11] = \"NumericString\";\n AsnPropTypes[AsnPropTypes[\"PrintableString\"] = 12] = \"PrintableString\";\n AsnPropTypes[AsnPropTypes[\"TeletexString\"] = 13] = \"TeletexString\";\n AsnPropTypes[AsnPropTypes[\"VideotexString\"] = 14] = \"VideotexString\";\n AsnPropTypes[AsnPropTypes[\"IA5String\"] = 15] = \"IA5String\";\n AsnPropTypes[AsnPropTypes[\"GraphicString\"] = 16] = \"GraphicString\";\n AsnPropTypes[AsnPropTypes[\"VisibleString\"] = 17] = \"VisibleString\";\n AsnPropTypes[AsnPropTypes[\"GeneralString\"] = 18] = \"GeneralString\";\n AsnPropTypes[AsnPropTypes[\"CharacterString\"] = 19] = \"CharacterString\";\n AsnPropTypes[AsnPropTypes[\"UTCTime\"] = 20] = \"UTCTime\";\n AsnPropTypes[AsnPropTypes[\"GeneralizedTime\"] = 21] = \"GeneralizedTime\";\n AsnPropTypes[AsnPropTypes[\"DATE\"] = 22] = \"DATE\";\n AsnPropTypes[AsnPropTypes[\"TimeOfDay\"] = 23] = \"TimeOfDay\";\n AsnPropTypes[AsnPropTypes[\"DateTime\"] = 24] = \"DateTime\";\n AsnPropTypes[AsnPropTypes[\"Duration\"] = 25] = \"Duration\";\n AsnPropTypes[AsnPropTypes[\"TIME\"] = 26] = \"TIME\";\n AsnPropTypes[AsnPropTypes[\"Null\"] = 27] = \"Null\";\n})(AsnPropTypes || (AsnPropTypes = {}));\n","import * as asn1js from \"asn1js\";\nimport { BufferSourceConverter } from \"pvtsutils\";\nexport class BitString {\n constructor(params, unusedBits = 0) {\n this.unusedBits = 0;\n this.value = new ArrayBuffer(0);\n if (params) {\n if (typeof params === \"number\") {\n this.fromNumber(params);\n }\n else if (BufferSourceConverter.isBufferSource(params)) {\n this.unusedBits = unusedBits;\n this.value = BufferSourceConverter.toArrayBuffer(params);\n }\n else {\n throw TypeError(\"Unsupported type of 'params' argument for BitString\");\n }\n }\n }\n fromASN(asn) {\n if (!(asn instanceof asn1js.BitString)) {\n throw new TypeError(\"Argument 'asn' is not instance of ASN.1 BitString\");\n }\n this.unusedBits = asn.valueBlock.unusedBits;\n this.value = asn.valueBlock.valueHex;\n return this;\n }\n toASN() {\n return new asn1js.BitString({ unusedBits: this.unusedBits, valueHex: this.value });\n }\n toSchema(name) {\n return new asn1js.BitString({ name });\n }\n toNumber() {\n let res = \"\";\n const uintArray = new Uint8Array(this.value);\n for (const octet of uintArray) {\n res += octet.toString(2).padStart(8, \"0\");\n }\n res = res.split(\"\").reverse().join(\"\");\n if (this.unusedBits) {\n res = res.slice(this.unusedBits).padStart(this.unusedBits, \"0\");\n }\n return parseInt(res, 2);\n }\n fromNumber(value) {\n let bits = value.toString(2);\n const octetSize = (bits.length + 7) >> 3;\n this.unusedBits = (octetSize << 3) - bits.length;\n const octets = new Uint8Array(octetSize);\n bits = bits\n .padStart(octetSize << 3, \"0\")\n .split(\"\")\n .reverse()\n .join(\"\");\n let index = 0;\n while (index < octetSize) {\n octets[index] = parseInt(bits.slice(index << 3, (index << 3) + 8), 2);\n index++;\n }\n this.value = octets.buffer;\n }\n}\n","import * as asn1js from \"asn1js\";\nimport { BufferSourceConverter } from \"pvtsutils\";\nexport class OctetString {\n get byteLength() {\n return this.buffer.byteLength;\n }\n get byteOffset() {\n return 0;\n }\n constructor(param) {\n if (typeof param === \"number\") {\n this.buffer = new ArrayBuffer(param);\n }\n else {\n if (BufferSourceConverter.isBufferSource(param)) {\n this.buffer = BufferSourceConverter.toArrayBuffer(param);\n }\n else if (Array.isArray(param)) {\n this.buffer = new Uint8Array(param);\n }\n else {\n this.buffer = new ArrayBuffer(0);\n }\n }\n }\n fromASN(asn) {\n if (!(asn instanceof asn1js.OctetString)) {\n throw new TypeError(\"Argument 'asn' is not instance of ASN.1 OctetString\");\n }\n this.buffer = asn.valueBlock.valueHex;\n return this;\n }\n toASN() {\n return new asn1js.OctetString({ valueHex: this.buffer });\n }\n toSchema(name) {\n return new asn1js.OctetString({ name });\n }\n}\n","export * from \"./bit_string\";\nexport * from \"./octet_string\";\n","import * as asn1js from \"asn1js\";\nimport { AsnPropTypes } from \"./enums\";\nimport { OctetString } from \"./types/index\";\nexport const AsnAnyConverter = {\n fromASN: (value) => value instanceof asn1js.Null ? null : value.valueBeforeDecodeView,\n toASN: (value) => {\n if (value === null) {\n return new asn1js.Null();\n }\n const schema = asn1js.fromBER(value);\n if (schema.result.error) {\n throw new Error(schema.result.error);\n }\n return schema.result;\n },\n};\nexport const AsnIntegerConverter = {\n fromASN: (value) => value.valueBlock.valueHexView.byteLength >= 4\n ? value.valueBlock.toString()\n : value.valueBlock.valueDec,\n toASN: (value) => new asn1js.Integer({ value: +value }),\n};\nexport const AsnEnumeratedConverter = {\n fromASN: (value) => value.valueBlock.valueDec,\n toASN: (value) => new asn1js.Enumerated({ value }),\n};\nexport const AsnIntegerArrayBufferConverter = {\n fromASN: (value) => value.valueBlock.valueHexView,\n toASN: (value) => new asn1js.Integer({ valueHex: value }),\n};\nexport const AsnIntegerBigIntConverter = {\n fromASN: (value) => value.toBigInt(),\n toASN: (value) => asn1js.Integer.fromBigInt(value),\n};\nexport const AsnBitStringConverter = {\n fromASN: (value) => value.valueBlock.valueHexView,\n toASN: (value) => new asn1js.BitString({ valueHex: value }),\n};\nexport const AsnObjectIdentifierConverter = {\n fromASN: (value) => value.valueBlock.toString(),\n toASN: (value) => new asn1js.ObjectIdentifier({ value }),\n};\nexport const AsnBooleanConverter = {\n fromASN: (value) => value.valueBlock.value,\n toASN: (value) => new asn1js.Boolean({ value }),\n};\nexport const AsnOctetStringConverter = {\n fromASN: (value) => value.valueBlock.valueHexView,\n toASN: (value) => new asn1js.OctetString({ valueHex: value }),\n};\nexport const AsnConstructedOctetStringConverter = {\n fromASN: (value) => new OctetString(value.getValue()),\n toASN: (value) => value.toASN(),\n};\nfunction createStringConverter(Asn1Type) {\n return {\n fromASN: (value) => value.valueBlock.value,\n toASN: (value) => new Asn1Type({ value }),\n };\n}\nexport const AsnUtf8StringConverter = createStringConverter(asn1js.Utf8String);\nexport const AsnBmpStringConverter = createStringConverter(asn1js.BmpString);\nexport const AsnUniversalStringConverter = createStringConverter(asn1js.UniversalString);\nexport const AsnNumericStringConverter = createStringConverter(asn1js.NumericString);\nexport const AsnPrintableStringConverter = createStringConverter(asn1js.PrintableString);\nexport const AsnTeletexStringConverter = createStringConverter(asn1js.TeletexString);\nexport const AsnVideotexStringConverter = createStringConverter(asn1js.VideotexString);\nexport const AsnIA5StringConverter = createStringConverter(asn1js.IA5String);\nexport const AsnGraphicStringConverter = createStringConverter(asn1js.GraphicString);\nexport const AsnVisibleStringConverter = createStringConverter(asn1js.VisibleString);\nexport const AsnGeneralStringConverter = createStringConverter(asn1js.GeneralString);\nexport const AsnCharacterStringConverter = createStringConverter(asn1js.CharacterString);\nexport const AsnUTCTimeConverter = {\n fromASN: (value) => value.toDate(),\n toASN: (value) => new asn1js.UTCTime({ valueDate: value }),\n};\nexport const AsnGeneralizedTimeConverter = {\n fromASN: (value) => value.toDate(),\n toASN: (value) => new asn1js.GeneralizedTime({ valueDate: value }),\n};\nexport const AsnNullConverter = {\n fromASN: () => null,\n toASN: () => {\n return new asn1js.Null();\n },\n};\nexport function defaultConverter(type) {\n switch (type) {\n case AsnPropTypes.Any:\n return AsnAnyConverter;\n case AsnPropTypes.BitString:\n return AsnBitStringConverter;\n case AsnPropTypes.BmpString:\n return AsnBmpStringConverter;\n case AsnPropTypes.Boolean:\n return AsnBooleanConverter;\n case AsnPropTypes.CharacterString:\n return AsnCharacterStringConverter;\n case AsnPropTypes.Enumerated:\n return AsnEnumeratedConverter;\n case AsnPropTypes.GeneralString:\n return AsnGeneralStringConverter;\n case AsnPropTypes.GeneralizedTime:\n return AsnGeneralizedTimeConverter;\n case AsnPropTypes.GraphicString:\n return AsnGraphicStringConverter;\n case AsnPropTypes.IA5String:\n return AsnIA5StringConverter;\n case AsnPropTypes.Integer:\n return AsnIntegerConverter;\n case AsnPropTypes.Null:\n return AsnNullConverter;\n case AsnPropTypes.NumericString:\n return AsnNumericStringConverter;\n case AsnPropTypes.ObjectIdentifier:\n return AsnObjectIdentifierConverter;\n case AsnPropTypes.OctetString:\n return AsnOctetStringConverter;\n case AsnPropTypes.PrintableString:\n return AsnPrintableStringConverter;\n case AsnPropTypes.TeletexString:\n return AsnTeletexStringConverter;\n case AsnPropTypes.UTCTime:\n return AsnUTCTimeConverter;\n case AsnPropTypes.UniversalString:\n return AsnUniversalStringConverter;\n case AsnPropTypes.Utf8String:\n return AsnUtf8StringConverter;\n case AsnPropTypes.VideotexString:\n return AsnVideotexStringConverter;\n case AsnPropTypes.VisibleString:\n return AsnVisibleStringConverter;\n default:\n return null;\n }\n}\n","export function isConvertible(target) {\n if (typeof target === \"function\" && target.prototype) {\n if (target.prototype.toASN && target.prototype.fromASN) {\n return true;\n }\n else {\n return isConvertible(target.prototype);\n }\n }\n else {\n return !!(target && typeof target === \"object\" && \"toASN\" in target && \"fromASN\" in target);\n }\n}\nexport function isTypeOfArray(target) {\n var _a;\n if (target) {\n const proto = Object.getPrototypeOf(target);\n if (((_a = proto === null || proto === void 0 ? void 0 : proto.prototype) === null || _a === void 0 ? void 0 : _a.constructor) === Array) {\n return true;\n }\n return isTypeOfArray(proto);\n }\n return false;\n}\nexport function isArrayEqual(bytes1, bytes2) {\n if (!(bytes1 && bytes2)) {\n return false;\n }\n if (bytes1.byteLength !== bytes2.byteLength) {\n return false;\n }\n const b1 = new Uint8Array(bytes1);\n const b2 = new Uint8Array(bytes2);\n for (let i = 0; i < bytes1.byteLength; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\n","import * as asn1js from \"asn1js\";\nimport { AsnPropTypes, AsnTypeTypes } from \"./enums\";\nimport { isConvertible } from \"./helper\";\nexport class AsnSchemaStorage {\n constructor() {\n this.items = new WeakMap();\n }\n has(target) {\n return this.items.has(target);\n }\n get(target, checkSchema = false) {\n const schema = this.items.get(target);\n if (!schema) {\n throw new Error(`Cannot get schema for '${target.prototype.constructor.name}' target`);\n }\n if (checkSchema && !schema.schema) {\n throw new Error(`Schema '${target.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);\n }\n return schema;\n }\n cache(target) {\n const schema = this.get(target);\n if (!schema.schema) {\n schema.schema = this.create(target, true);\n }\n }\n createDefault(target) {\n const schema = { type: AsnTypeTypes.Sequence, items: {} };\n const parentSchema = this.findParentSchema(target);\n if (parentSchema) {\n Object.assign(schema, parentSchema);\n schema.items = Object.assign({}, schema.items, parentSchema.items);\n }\n return schema;\n }\n create(target, useNames) {\n const schema = this.items.get(target) || this.createDefault(target);\n const asn1Value = [];\n for (const key in schema.items) {\n const item = schema.items[key];\n const name = useNames ? key : \"\";\n let asn1Item;\n if (typeof item.type === \"number\") {\n const Asn1TypeName = AsnPropTypes[item.type];\n const Asn1Type = asn1js[Asn1TypeName];\n if (!Asn1Type) {\n throw new Error(`Cannot get ASN1 class by name '${Asn1TypeName}'`);\n }\n asn1Item = new Asn1Type({ name });\n }\n else if (isConvertible(item.type)) {\n const instance = new item.type();\n asn1Item = instance.toSchema(name);\n }\n else if (item.optional) {\n const itemSchema = this.get(item.type);\n if (itemSchema.type === AsnTypeTypes.Choice) {\n asn1Item = new asn1js.Any({ name });\n }\n else {\n asn1Item = this.create(item.type, false);\n asn1Item.name = name;\n }\n }\n else {\n asn1Item = new asn1js.Any({ name });\n }\n const optional = !!item.optional || item.defaultValue !== undefined;\n if (item.repeated) {\n asn1Item.name = \"\";\n const Container = item.repeated === \"set\" ? asn1js.Set : asn1js.Sequence;\n asn1Item = new Container({\n name: \"\",\n value: [new asn1js.Repeated({ name, value: asn1Item })],\n });\n }\n if (item.context !== null && item.context !== undefined) {\n if (item.implicit) {\n if (typeof item.type === \"number\" || isConvertible(item.type)) {\n const Container = item.repeated ? asn1js.Constructed : asn1js.Primitive;\n asn1Value.push(new Container({ name, optional, idBlock: { tagClass: 3, tagNumber: item.context } }));\n }\n else {\n this.cache(item.type);\n const isRepeated = !!item.repeated;\n let value = !isRepeated ? this.get(item.type, true).schema : asn1Item;\n value =\n \"valueBlock\" in value\n ? value.valueBlock.value\n :\n value.value;\n asn1Value.push(new asn1js.Constructed({\n name: !isRepeated ? name : \"\",\n optional,\n idBlock: { tagClass: 3, tagNumber: item.context },\n value: value,\n }));\n }\n }\n else {\n asn1Value.push(new asn1js.Constructed({\n optional,\n idBlock: { tagClass: 3, tagNumber: item.context },\n value: [asn1Item],\n }));\n }\n }\n else {\n asn1Item.optional = optional;\n asn1Value.push(asn1Item);\n }\n }\n switch (schema.type) {\n case AsnTypeTypes.Sequence:\n return new asn1js.Sequence({ value: asn1Value, name: \"\" });\n case AsnTypeTypes.Set:\n return new asn1js.Set({ value: asn1Value, name: \"\" });\n case AsnTypeTypes.Choice:\n return new asn1js.Choice({ value: asn1Value, name: \"\" });\n default:\n throw new Error(`Unsupported ASN1 type in use`);\n }\n }\n set(target, schema) {\n this.items.set(target, schema);\n return this;\n }\n findParentSchema(target) {\n const parent = Object.getPrototypeOf(target);\n if (parent) {\n const schema = this.items.get(parent);\n return schema || this.findParentSchema(parent);\n }\n return null;\n }\n}\n","import { AsnSchemaStorage } from \"./schema\";\nexport const schemaStorage = new AsnSchemaStorage();\n","import * as converters from \"./converters\";\nimport { AsnTypeTypes } from \"./enums\";\nimport { schemaStorage } from \"./storage\";\nexport const AsnType = (options) => (target) => {\n let schema;\n if (!schemaStorage.has(target)) {\n schema = schemaStorage.createDefault(target);\n schemaStorage.set(target, schema);\n }\n else {\n schema = schemaStorage.get(target);\n }\n Object.assign(schema, options);\n};\nexport const AsnChoiceType = () => AsnType({ type: AsnTypeTypes.Choice });\nexport const AsnSetType = (options) => AsnType({ type: AsnTypeTypes.Set, ...options });\nexport const AsnSequenceType = (options) => AsnType({ type: AsnTypeTypes.Sequence, ...options });\nexport const AsnProp = (options) => (target, propertyKey) => {\n let schema;\n if (!schemaStorage.has(target.constructor)) {\n schema = schemaStorage.createDefault(target.constructor);\n schemaStorage.set(target.constructor, schema);\n }\n else {\n schema = schemaStorage.get(target.constructor);\n }\n const copyOptions = Object.assign({}, options);\n if (typeof copyOptions.type === \"number\" && !copyOptions.converter) {\n const defaultConverter = converters.defaultConverter(options.type);\n if (!defaultConverter) {\n throw new Error(`Cannot get default converter for property '${propertyKey}' of ${target.constructor.name}`);\n }\n copyOptions.converter = defaultConverter;\n }\n copyOptions.raw = options.raw;\n schema.items[propertyKey] = copyOptions;\n};\n","export class AsnSchemaValidationError extends Error {\n constructor() {\n super(...arguments);\n this.schemas = [];\n }\n}\n","export * from \"./schema_validation\";\n","import * as asn1js from \"asn1js\";\nimport { AsnPropTypes, AsnTypeTypes } from \"./enums\";\nimport * as converters from \"./converters\";\nimport { AsnSchemaValidationError } from \"./errors\";\nimport { isConvertible, isTypeOfArray } from \"./helper\";\nimport { schemaStorage } from \"./storage\";\nexport class AsnParser {\n static parse(data, target) {\n const asn1Parsed = asn1js.fromBER(data);\n if (asn1Parsed.result.error) {\n throw new Error(asn1Parsed.result.error);\n }\n const res = this.fromASN(asn1Parsed.result, target);\n return res;\n }\n static fromASN(asn1Schema, target) {\n try {\n if (isConvertible(target)) {\n const value = new target();\n return value.fromASN(asn1Schema);\n }\n const schema = schemaStorage.get(target);\n schemaStorage.cache(target);\n let targetSchema = schema.schema;\n const choiceResult = this.handleChoiceTypes(asn1Schema, schema, target, targetSchema);\n if (choiceResult === null || choiceResult === void 0 ? void 0 : choiceResult.result) {\n return choiceResult.result;\n }\n if (choiceResult === null || choiceResult === void 0 ? void 0 : choiceResult.targetSchema) {\n targetSchema = choiceResult.targetSchema;\n }\n const sequenceResult = this.handleSequenceTypes(asn1Schema, schema, target, targetSchema);\n const res = new target();\n if (isTypeOfArray(target)) {\n return this.handleArrayTypes(asn1Schema, schema, target);\n }\n this.processSchemaItems(schema, sequenceResult, res);\n return res;\n }\n catch (error) {\n if (error instanceof AsnSchemaValidationError) {\n error.schemas.push(target.name);\n }\n throw error;\n }\n }\n static handleChoiceTypes(asn1Schema, schema, target, targetSchema) {\n if (asn1Schema.constructor === asn1js.Constructed &&\n schema.type === AsnTypeTypes.Choice &&\n asn1Schema.idBlock.tagClass === 3) {\n for (const key in schema.items) {\n const schemaItem = schema.items[key];\n if (schemaItem.context === asn1Schema.idBlock.tagNumber && schemaItem.implicit) {\n if (typeof schemaItem.type === \"function\" &&\n schemaStorage.has(schemaItem.type)) {\n const fieldSchema = schemaStorage.get(schemaItem.type);\n if (fieldSchema && fieldSchema.type === AsnTypeTypes.Sequence) {\n const newSeq = new asn1js.Sequence();\n if (\"value\" in asn1Schema.valueBlock &&\n Array.isArray(asn1Schema.valueBlock.value) &&\n \"value\" in newSeq.valueBlock) {\n newSeq.valueBlock.value = asn1Schema.valueBlock.value;\n const fieldValue = this.fromASN(newSeq, schemaItem.type);\n const res = new target();\n res[key] = fieldValue;\n return { result: res };\n }\n }\n }\n }\n }\n }\n else if (asn1Schema.constructor === asn1js.Constructed &&\n schema.type !== AsnTypeTypes.Choice) {\n const newTargetSchema = new asn1js.Constructed({\n idBlock: {\n tagClass: 3,\n tagNumber: asn1Schema.idBlock.tagNumber,\n },\n value: schema.schema.valueBlock.value,\n });\n for (const key in schema.items) {\n delete asn1Schema[key];\n }\n return { targetSchema: newTargetSchema };\n }\n return null;\n }\n static handleSequenceTypes(asn1Schema, schema, target, targetSchema) {\n if (schema.type === AsnTypeTypes.Sequence) {\n const asn1ComparedSchema = asn1js.compareSchema({}, asn1Schema, targetSchema);\n if (!asn1ComparedSchema.verified) {\n throw new AsnSchemaValidationError(`Data does not match to ${target.name} ASN1 schema.${asn1ComparedSchema.result.error ? ` ${asn1ComparedSchema.result.error}` : \"\"}`);\n }\n return asn1ComparedSchema;\n }\n else {\n const asn1ComparedSchema = asn1js.compareSchema({}, asn1Schema, targetSchema);\n if (!asn1ComparedSchema.verified) {\n throw new AsnSchemaValidationError(`Data does not match to ${target.name} ASN1 schema.${asn1ComparedSchema.result.error ? ` ${asn1ComparedSchema.result.error}` : \"\"}`);\n }\n return asn1ComparedSchema;\n }\n }\n static processRepeatedField(asn1Elements, asn1Index, schemaItem) {\n let elementsToProcess = asn1Elements.slice(asn1Index);\n if (elementsToProcess.length === 1 && elementsToProcess[0].constructor.name === \"Sequence\") {\n const seq = elementsToProcess[0];\n if (seq.valueBlock && seq.valueBlock.value && Array.isArray(seq.valueBlock.value)) {\n elementsToProcess = seq.valueBlock.value;\n }\n }\n if (typeof schemaItem.type === \"number\") {\n const converter = converters.defaultConverter(schemaItem.type);\n if (!converter)\n throw new Error(`No converter for ASN.1 type ${schemaItem.type}`);\n return elementsToProcess\n .filter((el) => el && el.valueBlock)\n .map((el) => {\n try {\n return converter.fromASN(el);\n }\n catch {\n return undefined;\n }\n })\n .filter((v) => v !== undefined);\n }\n else {\n return elementsToProcess\n .filter((el) => el && el.valueBlock)\n .map((el) => {\n try {\n return this.fromASN(el, schemaItem.type);\n }\n catch {\n return undefined;\n }\n })\n .filter((v) => v !== undefined);\n }\n }\n static processPrimitiveField(asn1Element, schemaItem) {\n const converter = converters.defaultConverter(schemaItem.type);\n if (!converter)\n throw new Error(`No converter for ASN.1 type ${schemaItem.type}`);\n return converter.fromASN(asn1Element);\n }\n static isOptionalChoiceField(schemaItem) {\n return (schemaItem.optional &&\n typeof schemaItem.type === \"function\" &&\n schemaStorage.has(schemaItem.type) &&\n schemaStorage.get(schemaItem.type).type === AsnTypeTypes.Choice);\n }\n static processOptionalChoiceField(asn1Element, schemaItem) {\n try {\n const value = this.fromASN(asn1Element, schemaItem.type);\n return { processed: true, value };\n }\n catch (err) {\n if (err instanceof AsnSchemaValidationError &&\n /Wrong values for Choice type/.test(err.message)) {\n return { processed: false };\n }\n throw err;\n }\n }\n static handleArrayTypes(asn1Schema, schema, target) {\n if (!(\"value\" in asn1Schema.valueBlock && Array.isArray(asn1Schema.valueBlock.value))) {\n throw new Error(`Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.`);\n }\n const itemType = schema.itemType;\n if (typeof itemType === \"number\") {\n const converter = converters.defaultConverter(itemType);\n if (!converter) {\n throw new Error(`Cannot get default converter for array item of ${target.name} ASN1 schema`);\n }\n return target.from(asn1Schema.valueBlock.value, (element) => converter.fromASN(element));\n }\n else {\n return target.from(asn1Schema.valueBlock.value, (element) => this.fromASN(element, itemType));\n }\n }\n static processSchemaItems(schema, asn1ComparedSchema, res) {\n for (const key in schema.items) {\n const asn1SchemaValue = asn1ComparedSchema.result[key];\n if (!asn1SchemaValue) {\n continue;\n }\n const schemaItem = schema.items[key];\n const schemaItemType = schemaItem.type;\n let parsedValue;\n if (typeof schemaItemType === \"number\" || isConvertible(schemaItemType)) {\n parsedValue = this.processPrimitiveSchemaItem(asn1SchemaValue, schemaItem, schemaItemType);\n }\n else {\n parsedValue = this.processComplexSchemaItem(asn1SchemaValue, schemaItem, schemaItemType);\n }\n if (parsedValue &&\n typeof parsedValue === \"object\" &&\n \"value\" in parsedValue &&\n \"raw\" in parsedValue) {\n res[key] = parsedValue.value;\n res[`${key}Raw`] = parsedValue.raw;\n }\n else {\n res[key] = parsedValue;\n }\n }\n }\n static processPrimitiveSchemaItem(asn1SchemaValue, schemaItem, schemaItemType) {\n var _a;\n const converter = (_a = schemaItem.converter) !== null && _a !== void 0 ? _a : (isConvertible(schemaItemType)\n ? new schemaItemType()\n : null);\n if (!converter) {\n throw new Error(\"Converter is empty\");\n }\n if (schemaItem.repeated) {\n return this.processRepeatedPrimitiveItem(asn1SchemaValue, schemaItem, converter);\n }\n else {\n return this.processSinglePrimitiveItem(asn1SchemaValue, schemaItem, schemaItemType, converter);\n }\n }\n static processRepeatedPrimitiveItem(asn1SchemaValue, schemaItem, converter) {\n if (schemaItem.implicit) {\n const Container = schemaItem.repeated === \"sequence\" ? asn1js.Sequence : asn1js.Set;\n const newItem = new Container();\n newItem.valueBlock = asn1SchemaValue.valueBlock;\n const newItemAsn = asn1js.fromBER(newItem.toBER(false));\n if (newItemAsn.offset === -1) {\n throw new Error(`Cannot parse the child item. ${newItemAsn.result.error}`);\n }\n if (!(\"value\" in newItemAsn.result.valueBlock &&\n Array.isArray(newItemAsn.result.valueBlock.value))) {\n throw new Error(\"Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.\");\n }\n const value = newItemAsn.result.valueBlock.value;\n return Array.from(value, (element) => converter.fromASN(element));\n }\n else {\n return Array.from(asn1SchemaValue, (element) => converter.fromASN(element));\n }\n }\n static processSinglePrimitiveItem(asn1SchemaValue, schemaItem, schemaItemType, converter) {\n let value = asn1SchemaValue;\n if (schemaItem.implicit) {\n let newItem;\n if (isConvertible(schemaItemType)) {\n newItem = new schemaItemType().toSchema(\"\");\n }\n else {\n const Asn1TypeName = AsnPropTypes[schemaItemType];\n const Asn1Type = asn1js[Asn1TypeName];\n if (!Asn1Type) {\n throw new Error(`Cannot get '${Asn1TypeName}' class from asn1js module`);\n }\n newItem = new Asn1Type();\n }\n newItem.valueBlock = value.valueBlock;\n value = asn1js.fromBER(newItem.toBER(false)).result;\n }\n return converter.fromASN(value);\n }\n static processComplexSchemaItem(asn1SchemaValue, schemaItem, schemaItemType) {\n if (schemaItem.repeated) {\n if (!Array.isArray(asn1SchemaValue)) {\n throw new Error(\"Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.\");\n }\n return Array.from(asn1SchemaValue, (element) => this.fromASN(element, schemaItemType));\n }\n else {\n const valueToProcess = this.handleImplicitTagging(asn1SchemaValue, schemaItem, schemaItemType);\n if (this.isOptionalChoiceField(schemaItem)) {\n try {\n return this.fromASN(valueToProcess, schemaItemType);\n }\n catch (err) {\n if (err instanceof AsnSchemaValidationError &&\n /Wrong values for Choice type/.test(err.message)) {\n return undefined;\n }\n throw err;\n }\n }\n else {\n const parsedValue = this.fromASN(valueToProcess, schemaItemType);\n if (schemaItem.raw) {\n return {\n value: parsedValue,\n raw: asn1SchemaValue.valueBeforeDecodeView,\n };\n }\n return parsedValue;\n }\n }\n }\n static handleImplicitTagging(asn1SchemaValue, schemaItem, schemaItemType) {\n if (schemaItem.implicit && typeof schemaItem.context === \"number\") {\n const schema = schemaStorage.get(schemaItemType);\n if (schema.type === AsnTypeTypes.Sequence) {\n const newSeq = new asn1js.Sequence();\n if (\"value\" in asn1SchemaValue.valueBlock &&\n Array.isArray(asn1SchemaValue.valueBlock.value) &&\n \"value\" in newSeq.valueBlock) {\n newSeq.valueBlock.value = asn1SchemaValue.valueBlock.value;\n return newSeq;\n }\n }\n else if (schema.type === AsnTypeTypes.Set) {\n const newSet = new asn1js.Set();\n if (\"value\" in asn1SchemaValue.valueBlock &&\n Array.isArray(asn1SchemaValue.valueBlock.value) &&\n \"value\" in newSet.valueBlock) {\n newSet.valueBlock.value = asn1SchemaValue.valueBlock.value;\n return newSet;\n }\n }\n }\n return asn1SchemaValue;\n }\n}\n","import * as asn1js from \"asn1js\";\nimport * as converters from \"./converters\";\nimport { AsnPropTypes, AsnTypeTypes } from \"./enums\";\nimport { isConvertible, isArrayEqual } from \"./helper\";\nimport { schemaStorage } from \"./storage\";\nexport class AsnSerializer {\n static serialize(obj) {\n if (obj instanceof asn1js.BaseBlock) {\n return obj.toBER(false);\n }\n return this.toASN(obj).toBER(false);\n }\n static toASN(obj) {\n if (obj && typeof obj === \"object\" && isConvertible(obj)) {\n return obj.toASN();\n }\n if (!(obj && typeof obj === \"object\")) {\n throw new TypeError(\"Parameter 1 should be type of Object.\");\n }\n const target = obj.constructor;\n const schema = schemaStorage.get(target);\n schemaStorage.cache(target);\n let asn1Value = [];\n if (schema.itemType) {\n if (!Array.isArray(obj)) {\n throw new TypeError(\"Parameter 1 should be type of Array.\");\n }\n if (typeof schema.itemType === \"number\") {\n const converter = converters.defaultConverter(schema.itemType);\n if (!converter) {\n throw new Error(`Cannot get default converter for array item of ${target.name} ASN1 schema`);\n }\n asn1Value = obj.map((o) => converter.toASN(o));\n }\n else {\n asn1Value = obj.map((o) => this.toAsnItem({ type: schema.itemType }, \"[]\", target, o));\n }\n }\n else {\n for (const key in schema.items) {\n const schemaItem = schema.items[key];\n const objProp = obj[key];\n if (objProp === undefined ||\n schemaItem.defaultValue === objProp ||\n (typeof schemaItem.defaultValue === \"object\" &&\n typeof objProp === \"object\" &&\n isArrayEqual(this.serialize(schemaItem.defaultValue), this.serialize(objProp)))) {\n continue;\n }\n const asn1Item = AsnSerializer.toAsnItem(schemaItem, key, target, objProp);\n if (typeof schemaItem.context === \"number\") {\n if (schemaItem.implicit) {\n if (!schemaItem.repeated &&\n (typeof schemaItem.type === \"number\" || isConvertible(schemaItem.type))) {\n const value = {};\n value.valueHex =\n asn1Item instanceof asn1js.Null\n ? asn1Item.valueBeforeDecodeView\n : asn1Item.valueBlock.toBER();\n asn1Value.push(new asn1js.Primitive({\n optional: schemaItem.optional,\n idBlock: {\n tagClass: 3,\n tagNumber: schemaItem.context,\n },\n ...value,\n }));\n }\n else {\n asn1Value.push(new asn1js.Constructed({\n optional: schemaItem.optional,\n idBlock: {\n tagClass: 3,\n tagNumber: schemaItem.context,\n },\n value: asn1Item.valueBlock.value,\n }));\n }\n }\n else {\n asn1Value.push(new asn1js.Constructed({\n optional: schemaItem.optional,\n idBlock: {\n tagClass: 3,\n tagNumber: schemaItem.context,\n },\n value: [asn1Item],\n }));\n }\n }\n else if (schemaItem.repeated) {\n asn1Value = asn1Value.concat(asn1Item);\n }\n else {\n asn1Value.push(asn1Item);\n }\n }\n }\n let asnSchema;\n switch (schema.type) {\n case AsnTypeTypes.Sequence:\n asnSchema = new asn1js.Sequence({ value: asn1Value });\n break;\n case AsnTypeTypes.Set:\n asnSchema = new asn1js.Set({ value: asn1Value });\n break;\n case AsnTypeTypes.Choice:\n if (!asn1Value[0]) {\n throw new Error(`Schema '${target.name}' has wrong data. Choice cannot be empty.`);\n }\n asnSchema = asn1Value[0];\n break;\n }\n return asnSchema;\n }\n static toAsnItem(schemaItem, key, target, objProp) {\n let asn1Item;\n if (typeof schemaItem.type === \"number\") {\n const converter = schemaItem.converter;\n if (!converter) {\n throw new Error(`Property '${key}' doesn't have converter for type ${AsnPropTypes[schemaItem.type]} in schema '${target.name}'`);\n }\n if (schemaItem.repeated) {\n if (!Array.isArray(objProp)) {\n throw new TypeError(\"Parameter 'objProp' should be type of Array.\");\n }\n const items = Array.from(objProp, (element) => converter.toASN(element));\n const Container = schemaItem.repeated === \"sequence\" ? asn1js.Sequence : asn1js.Set;\n asn1Item = new Container({\n value: items,\n });\n }\n else {\n asn1Item = converter.toASN(objProp);\n }\n }\n else {\n if (schemaItem.repeated) {\n if (!Array.isArray(objProp)) {\n throw new TypeError(\"Parameter 'objProp' should be type of Array.\");\n }\n const items = Array.from(objProp, (element) => this.toASN(element));\n const Container = schemaItem.repeated === \"sequence\" ? asn1js.Sequence : asn1js.Set;\n asn1Item = new Container({\n value: items,\n });\n }\n else {\n asn1Item = this.toASN(objProp);\n }\n }\n return asn1Item;\n }\n}\n","export class AsnArray extends Array {\n constructor(items = []) {\n if (typeof items === \"number\") {\n super(items);\n }\n else {\n super();\n for (const item of items) {\n this.push(item);\n }\n }\n }\n}\n","import * as asn1js from \"asn1js\";\nimport { BufferSourceConverter } from \"pvtsutils\";\nimport { AsnParser } from \"./parser\";\nimport { AsnSerializer } from \"./serializer\";\nexport class AsnConvert {\n static serialize(obj) {\n return AsnSerializer.serialize(obj);\n }\n static parse(data, target) {\n return AsnParser.parse(data, target);\n }\n static toString(data) {\n const buf = BufferSourceConverter.isBufferSource(data)\n ? BufferSourceConverter.toArrayBuffer(data)\n : AsnConvert.serialize(data);\n const asn = asn1js.fromBER(buf);\n if (asn.offset === -1) {\n throw new Error(`Cannot decode ASN.1 data. ${asn.result.error}`);\n }\n return asn.result.toString();\n }\n}\n","export * from \"./converters\";\nexport * from \"./types/index\";\nexport { AsnProp, AsnType, AsnChoiceType, AsnSequenceType, AsnSetType } from \"./decorators\";\nexport { AsnTypeTypes, AsnPropTypes } from \"./enums\";\nexport { AsnParser } from \"./parser\";\nexport { AsnSerializer } from \"./serializer\";\nexport * from \"./errors\";\nexport * from \"./objects\";\nexport * from \"./convert\";\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { Convert } from \"pvtsutils\";\nexport class IpConverter {\n static isIPv4(ip) {\n return /^(\\d{1,3}\\.){3}\\d{1,3}$/.test(ip);\n }\n static parseIPv4(ip) {\n const parts = ip.split(\".\");\n if (parts.length !== 4) {\n throw new Error(\"Invalid IPv4 address\");\n }\n return parts.map((part) => {\n const num = parseInt(part, 10);\n if (isNaN(num) || num < 0 || num > 255) {\n throw new Error(\"Invalid IPv4 address part\");\n }\n return num;\n });\n }\n static parseIPv6(ip) {\n const expandedIP = this.expandIPv6(ip);\n const parts = expandedIP.split(\":\");\n if (parts.length !== 8) {\n throw new Error(\"Invalid IPv6 address\");\n }\n return parts.reduce((bytes, part) => {\n const num = parseInt(part, 16);\n if (isNaN(num) || num < 0 || num > 0xffff) {\n throw new Error(\"Invalid IPv6 address part\");\n }\n bytes.push((num >> 8) & 0xff);\n bytes.push(num & 0xff);\n return bytes;\n }, []);\n }\n static expandIPv6(ip) {\n if (!ip.includes(\"::\")) {\n return ip;\n }\n const parts = ip.split(\"::\");\n if (parts.length > 2) {\n throw new Error(\"Invalid IPv6 address\");\n }\n const left = parts[0] ? parts[0].split(\":\") : [];\n const right = parts[1] ? parts[1].split(\":\") : [];\n const missing = 8 - (left.length + right.length);\n if (missing < 0) {\n throw new Error(\"Invalid IPv6 address\");\n }\n return [...left, ...Array(missing).fill(\"0\"), ...right].join(\":\");\n }\n static formatIPv6(bytes) {\n const parts = [];\n for (let i = 0; i < 16; i += 2) {\n parts.push(((bytes[i] << 8) | bytes[i + 1]).toString(16));\n }\n return this.compressIPv6(parts.join(\":\"));\n }\n static compressIPv6(ip) {\n const parts = ip.split(\":\");\n let longestZeroStart = -1;\n let longestZeroLength = 0;\n let currentZeroStart = -1;\n let currentZeroLength = 0;\n for (let i = 0; i < parts.length; i++) {\n if (parts[i] === \"0\") {\n if (currentZeroStart === -1) {\n currentZeroStart = i;\n }\n currentZeroLength++;\n }\n else {\n if (currentZeroLength > longestZeroLength) {\n longestZeroStart = currentZeroStart;\n longestZeroLength = currentZeroLength;\n }\n currentZeroStart = -1;\n currentZeroLength = 0;\n }\n }\n if (currentZeroLength > longestZeroLength) {\n longestZeroStart = currentZeroStart;\n longestZeroLength = currentZeroLength;\n }\n if (longestZeroLength > 1) {\n const before = parts.slice(0, longestZeroStart).join(\":\");\n const after = parts.slice(longestZeroStart + longestZeroLength).join(\":\");\n return `${before}::${after}`;\n }\n return ip;\n }\n static parseCIDR(text) {\n const [addr, prefixStr] = text.split(\"/\");\n const prefix = parseInt(prefixStr, 10);\n if (this.isIPv4(addr)) {\n if (prefix < 0 || prefix > 32) {\n throw new Error(\"Invalid IPv4 prefix length\");\n }\n return [this.parseIPv4(addr), prefix];\n }\n else {\n if (prefix < 0 || prefix > 128) {\n throw new Error(\"Invalid IPv6 prefix length\");\n }\n return [this.parseIPv6(addr), prefix];\n }\n }\n static decodeIP(value) {\n if (value.length === 64 && parseInt(value, 16) === 0) {\n return \"::/0\";\n }\n if (value.length !== 16) {\n return value;\n }\n const mask = parseInt(value.slice(8), 16)\n .toString(2)\n .split(\"\")\n .reduce((a, k) => a + +k, 0);\n let ip = value.slice(0, 8).replace(/(.{2})/g, (match) => `${parseInt(match, 16)}.`);\n ip = ip.slice(0, -1);\n return `${ip}/${mask}`;\n }\n static toString(buf) {\n const uint8 = new Uint8Array(buf);\n if (uint8.length === 4) {\n return Array.from(uint8).join(\".\");\n }\n if (uint8.length === 16) {\n return this.formatIPv6(uint8);\n }\n if (uint8.length === 8 || uint8.length === 32) {\n const half = uint8.length / 2;\n const addrBytes = uint8.slice(0, half);\n const maskBytes = uint8.slice(half);\n const isAllZeros = uint8.every((byte) => byte === 0);\n if (isAllZeros) {\n return uint8.length === 8 ? \"0.0.0.0/0\" : \"::/0\";\n }\n const prefixLen = maskBytes.reduce((a, b) => a + (b.toString(2).match(/1/g) || []).length, 0);\n if (uint8.length === 8) {\n const addrStr = Array.from(addrBytes).join(\".\");\n return `${addrStr}/${prefixLen}`;\n }\n else {\n const addrStr = this.formatIPv6(addrBytes);\n return `${addrStr}/${prefixLen}`;\n }\n }\n return this.decodeIP(Convert.ToHex(buf));\n }\n static fromString(text) {\n if (text.includes(\"/\")) {\n const [addr, prefix] = this.parseCIDR(text);\n const maskBytes = new Uint8Array(addr.length);\n let bitsLeft = prefix;\n for (let i = 0; i < maskBytes.length; i++) {\n if (bitsLeft >= 8) {\n maskBytes[i] = 0xff;\n bitsLeft -= 8;\n }\n else if (bitsLeft > 0) {\n maskBytes[i] = 0xff << (8 - bitsLeft);\n bitsLeft = 0;\n }\n }\n const out = new Uint8Array(addr.length * 2);\n out.set(addr, 0);\n out.set(maskBytes, addr.length);\n return out.buffer;\n }\n const bytes = this.isIPv4(text) ? this.parseIPv4(text) : this.parseIPv6(text);\n return new Uint8Array(bytes).buffer;\n }\n}\n","var RelativeDistinguishedName_1, RDNSequence_1, Name_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes, AsnArray } from \"@peculiar/asn1-schema\";\nimport { Convert } from \"pvtsutils\";\nlet DirectoryString = class DirectoryString {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n toString() {\n return (this.bmpString ||\n this.printableString ||\n this.teletexString ||\n this.universalString ||\n this.utf8String ||\n \"\");\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.TeletexString })\n], DirectoryString.prototype, \"teletexString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.PrintableString })\n], DirectoryString.prototype, \"printableString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.UniversalString })\n], DirectoryString.prototype, \"universalString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Utf8String })\n], DirectoryString.prototype, \"utf8String\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BmpString })\n], DirectoryString.prototype, \"bmpString\", void 0);\nDirectoryString = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], DirectoryString);\nexport { DirectoryString };\nlet AttributeValue = class AttributeValue extends DirectoryString {\n constructor(params = {}) {\n super(params);\n Object.assign(this, params);\n }\n toString() {\n return this.ia5String || (this.anyValue ? Convert.ToHex(this.anyValue) : super.toString());\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String })\n], AttributeValue.prototype, \"ia5String\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any })\n], AttributeValue.prototype, \"anyValue\", void 0);\nAttributeValue = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], AttributeValue);\nexport { AttributeValue };\nexport class AttributeTypeAndValue {\n constructor(params = {}) {\n this.type = \"\";\n this.value = new AttributeValue();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], AttributeTypeAndValue.prototype, \"type\", void 0);\n__decorate([\n AsnProp({ type: AttributeValue })\n], AttributeTypeAndValue.prototype, \"value\", void 0);\nlet RelativeDistinguishedName = RelativeDistinguishedName_1 = class RelativeDistinguishedName extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, RelativeDistinguishedName_1.prototype);\n }\n};\nRelativeDistinguishedName = RelativeDistinguishedName_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Set, itemType: AttributeTypeAndValue })\n], RelativeDistinguishedName);\nexport { RelativeDistinguishedName };\nlet RDNSequence = RDNSequence_1 = class RDNSequence extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, RDNSequence_1.prototype);\n }\n};\nRDNSequence = RDNSequence_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: RelativeDistinguishedName })\n], RDNSequence);\nexport { RDNSequence };\nlet Name = Name_1 = class Name extends RDNSequence {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, Name_1.prototype);\n }\n};\nName = Name_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence })\n], Name);\nexport { Name };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes, AsnOctetStringConverter, } from \"@peculiar/asn1-schema\";\nimport { IpConverter } from \"./ip_converter\";\nimport { DirectoryString, Name } from \"./name\";\nexport const AsnIpConverter = {\n fromASN: (value) => IpConverter.toString(AsnOctetStringConverter.fromASN(value)),\n toASN: (value) => AsnOctetStringConverter.toASN(IpConverter.fromString(value)),\n};\nexport class OtherName {\n constructor(params = {}) {\n this.typeId = \"\";\n this.value = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], OtherName.prototype, \"typeId\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any, context: 0 })\n], OtherName.prototype, \"value\", void 0);\nexport class EDIPartyName {\n constructor(params = {}) {\n this.partyName = new DirectoryString();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: DirectoryString, optional: true, context: 0, implicit: true })\n], EDIPartyName.prototype, \"nameAssigner\", void 0);\n__decorate([\n AsnProp({ type: DirectoryString, context: 1, implicit: true })\n], EDIPartyName.prototype, \"partyName\", void 0);\nlet GeneralName = class GeneralName {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: OtherName, context: 0, implicit: true })\n], GeneralName.prototype, \"otherName\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String, context: 1, implicit: true })\n], GeneralName.prototype, \"rfc822Name\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String, context: 2, implicit: true })\n], GeneralName.prototype, \"dNSName\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any, context: 3, implicit: true })\n], GeneralName.prototype, \"x400Address\", void 0);\n__decorate([\n AsnProp({ type: Name, context: 4, implicit: false })\n], GeneralName.prototype, \"directoryName\", void 0);\n__decorate([\n AsnProp({ type: EDIPartyName, context: 5 })\n], GeneralName.prototype, \"ediPartyName\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String, context: 6, implicit: true })\n], GeneralName.prototype, \"uniformResourceIdentifier\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.OctetString,\n context: 7,\n implicit: true,\n converter: AsnIpConverter,\n })\n], GeneralName.prototype, \"iPAddress\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier, context: 8, implicit: true })\n], GeneralName.prototype, \"registeredID\", void 0);\nGeneralName = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], GeneralName);\nexport { GeneralName };\n","export const id_pkix = \"1.3.6.1.5.5.7\";\nexport const id_pe = `${id_pkix}.1`;\nexport const id_qt = `${id_pkix}.2`;\nexport const id_kp = `${id_pkix}.3`;\nexport const id_ad = `${id_pkix}.48`;\nexport const id_qt_csp = `${id_qt}.1`;\nexport const id_qt_unotice = `${id_qt}.2`;\nexport const id_ad_ocsp = `${id_ad}.1`;\nexport const id_ad_caIssuers = `${id_ad}.2`;\nexport const id_ad_timeStamping = `${id_ad}.3`;\nexport const id_ad_caRepository = `${id_ad}.5`;\nexport const id_ce = \"2.5.29\";\n","var AuthorityInfoAccessSyntax_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralName } from \"../general_name\";\nimport { id_pe } from \"../object_identifiers\";\nexport const id_pe_authorityInfoAccess = `${id_pe}.1`;\nexport class AccessDescription {\n constructor(params = {}) {\n this.accessMethod = \"\";\n this.accessLocation = new GeneralName();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], AccessDescription.prototype, \"accessMethod\", void 0);\n__decorate([\n AsnProp({ type: GeneralName })\n], AccessDescription.prototype, \"accessLocation\", void 0);\nlet AuthorityInfoAccessSyntax = AuthorityInfoAccessSyntax_1 = class AuthorityInfoAccessSyntax extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, AuthorityInfoAccessSyntax_1.prototype);\n }\n};\nAuthorityInfoAccessSyntax = AuthorityInfoAccessSyntax_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: AccessDescription })\n], AuthorityInfoAccessSyntax);\nexport { AuthorityInfoAccessSyntax };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter, OctetString, } from \"@peculiar/asn1-schema\";\nimport { GeneralName } from \"../general_name\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_authorityKeyIdentifier = `${id_ce}.35`;\nexport class KeyIdentifier extends OctetString {\n}\nexport class AuthorityKeyIdentifier {\n constructor(params = {}) {\n if (params) {\n Object.assign(this, params);\n }\n }\n}\n__decorate([\n AsnProp({ type: KeyIdentifier, context: 0, optional: true, implicit: true })\n], AuthorityKeyIdentifier.prototype, \"keyIdentifier\", void 0);\n__decorate([\n AsnProp({ type: GeneralName, context: 1, optional: true, implicit: true, repeated: \"sequence\" })\n], AuthorityKeyIdentifier.prototype, \"authorityCertIssuer\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n context: 2,\n optional: true,\n implicit: true,\n converter: AsnIntegerArrayBufferConverter,\n })\n], AuthorityKeyIdentifier.prototype, \"authorityCertSerialNumber\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_basicConstraints = `${id_ce}.19`;\nexport class BasicConstraints {\n constructor(params = {}) {\n this.cA = false;\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Boolean, defaultValue: false })\n], BasicConstraints.prototype, \"cA\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, optional: true })\n], BasicConstraints.prototype, \"pathLenConstraint\", void 0);\n","var GeneralNames_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralName } from \"./general_name\";\nimport { AsnArray } from \"@peculiar/asn1-schema\";\nlet GeneralNames = GeneralNames_1 = class GeneralNames extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, GeneralNames_1.prototype);\n }\n};\nGeneralNames = GeneralNames_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: GeneralName })\n], GeneralNames);\nexport { GeneralNames };\n","var CertificateIssuer_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralNames } from \"../general_names\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_certificateIssuer = `${id_ce}.29`;\nlet CertificateIssuer = CertificateIssuer_1 = class CertificateIssuer extends GeneralNames {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, CertificateIssuer_1.prototype);\n }\n};\nCertificateIssuer = CertificateIssuer_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence })\n], CertificateIssuer);\nexport { CertificateIssuer };\n","var CertificatePolicies_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes, AsnArray } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_certificatePolicies = `${id_ce}.32`;\nexport const id_ce_certificatePolicies_anyPolicy = `${id_ce_certificatePolicies}.0`;\nlet DisplayText = class DisplayText {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n toString() {\n return this.ia5String || this.visibleString || this.bmpString || this.utf8String || \"\";\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String })\n], DisplayText.prototype, \"ia5String\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.VisibleString })\n], DisplayText.prototype, \"visibleString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BmpString })\n], DisplayText.prototype, \"bmpString\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Utf8String })\n], DisplayText.prototype, \"utf8String\", void 0);\nDisplayText = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], DisplayText);\nexport { DisplayText };\nexport class NoticeReference {\n constructor(params = {}) {\n this.organization = new DisplayText();\n this.noticeNumbers = [];\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: DisplayText })\n], NoticeReference.prototype, \"organization\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, repeated: \"sequence\" })\n], NoticeReference.prototype, \"noticeNumbers\", void 0);\nexport class UserNotice {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: NoticeReference, optional: true })\n], UserNotice.prototype, \"noticeRef\", void 0);\n__decorate([\n AsnProp({ type: DisplayText, optional: true })\n], UserNotice.prototype, \"explicitText\", void 0);\nlet Qualifier = class Qualifier {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.IA5String })\n], Qualifier.prototype, \"cPSuri\", void 0);\n__decorate([\n AsnProp({ type: UserNotice })\n], Qualifier.prototype, \"userNotice\", void 0);\nQualifier = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], Qualifier);\nexport { Qualifier };\nexport class PolicyQualifierInfo {\n constructor(params = {}) {\n this.policyQualifierId = \"\";\n this.qualifier = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], PolicyQualifierInfo.prototype, \"policyQualifierId\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any })\n], PolicyQualifierInfo.prototype, \"qualifier\", void 0);\nexport class PolicyInformation {\n constructor(params = {}) {\n this.policyIdentifier = \"\";\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], PolicyInformation.prototype, \"policyIdentifier\", void 0);\n__decorate([\n AsnProp({ type: PolicyQualifierInfo, repeated: \"sequence\", optional: true })\n], PolicyInformation.prototype, \"policyQualifiers\", void 0);\nlet CertificatePolicies = CertificatePolicies_1 = class CertificatePolicies extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, CertificatePolicies_1.prototype);\n }\n};\nCertificatePolicies = CertificatePolicies_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: PolicyInformation })\n], CertificatePolicies);\nexport { CertificatePolicies };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_cRLNumber = `${id_ce}.20`;\nlet CRLNumber = class CRLNumber {\n constructor(value = 0) {\n this.value = value;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer })\n], CRLNumber.prototype, \"value\", void 0);\nCRLNumber = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], CRLNumber);\nexport { CRLNumber };\n","import { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nimport { CRLNumber } from \"./crl_number\";\nexport const id_ce_deltaCRLIndicator = `${id_ce}.27`;\nlet BaseCRLNumber = class BaseCRLNumber extends CRLNumber {\n};\nBaseCRLNumber = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], BaseCRLNumber);\nexport { BaseCRLNumber };\n","var CRLDistributionPoints_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, AsnArray, BitString } from \"@peculiar/asn1-schema\";\nimport { RelativeDistinguishedName } from \"../name\";\nimport { GeneralName } from \"../general_name\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_cRLDistributionPoints = `${id_ce}.31`;\nexport var ReasonFlags;\n(function (ReasonFlags) {\n ReasonFlags[ReasonFlags[\"unused\"] = 1] = \"unused\";\n ReasonFlags[ReasonFlags[\"keyCompromise\"] = 2] = \"keyCompromise\";\n ReasonFlags[ReasonFlags[\"cACompromise\"] = 4] = \"cACompromise\";\n ReasonFlags[ReasonFlags[\"affiliationChanged\"] = 8] = \"affiliationChanged\";\n ReasonFlags[ReasonFlags[\"superseded\"] = 16] = \"superseded\";\n ReasonFlags[ReasonFlags[\"cessationOfOperation\"] = 32] = \"cessationOfOperation\";\n ReasonFlags[ReasonFlags[\"certificateHold\"] = 64] = \"certificateHold\";\n ReasonFlags[ReasonFlags[\"privilegeWithdrawn\"] = 128] = \"privilegeWithdrawn\";\n ReasonFlags[ReasonFlags[\"aACompromise\"] = 256] = \"aACompromise\";\n})(ReasonFlags || (ReasonFlags = {}));\nexport class Reason extends BitString {\n toJSON() {\n const res = [];\n const flags = this.toNumber();\n if (flags & ReasonFlags.aACompromise) {\n res.push(\"aACompromise\");\n }\n if (flags & ReasonFlags.affiliationChanged) {\n res.push(\"affiliationChanged\");\n }\n if (flags & ReasonFlags.cACompromise) {\n res.push(\"cACompromise\");\n }\n if (flags & ReasonFlags.certificateHold) {\n res.push(\"certificateHold\");\n }\n if (flags & ReasonFlags.cessationOfOperation) {\n res.push(\"cessationOfOperation\");\n }\n if (flags & ReasonFlags.keyCompromise) {\n res.push(\"keyCompromise\");\n }\n if (flags & ReasonFlags.privilegeWithdrawn) {\n res.push(\"privilegeWithdrawn\");\n }\n if (flags & ReasonFlags.superseded) {\n res.push(\"superseded\");\n }\n if (flags & ReasonFlags.unused) {\n res.push(\"unused\");\n }\n return res;\n }\n toString() {\n return `[${this.toJSON().join(\", \")}]`;\n }\n}\nlet DistributionPointName = class DistributionPointName {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: GeneralName, context: 0, repeated: \"sequence\", implicit: true })\n], DistributionPointName.prototype, \"fullName\", void 0);\n__decorate([\n AsnProp({ type: RelativeDistinguishedName, context: 1, implicit: true })\n], DistributionPointName.prototype, \"nameRelativeToCRLIssuer\", void 0);\nDistributionPointName = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], DistributionPointName);\nexport { DistributionPointName };\nexport class DistributionPoint {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: DistributionPointName, context: 0, optional: true })\n], DistributionPoint.prototype, \"distributionPoint\", void 0);\n__decorate([\n AsnProp({ type: Reason, context: 1, optional: true, implicit: true })\n], DistributionPoint.prototype, \"reasons\", void 0);\n__decorate([\n AsnProp({ type: GeneralName, context: 2, optional: true, repeated: \"sequence\", implicit: true })\n], DistributionPoint.prototype, \"cRLIssuer\", void 0);\nlet CRLDistributionPoints = CRLDistributionPoints_1 = class CRLDistributionPoints extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, CRLDistributionPoints_1.prototype);\n }\n};\nCRLDistributionPoints = CRLDistributionPoints_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: DistributionPoint })\n], CRLDistributionPoints);\nexport { CRLDistributionPoints };\n","var FreshestCRL_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nimport { CRLDistributionPoints, DistributionPoint } from \"./crl_distribution_points\";\nexport const id_ce_freshestCRL = `${id_ce}.46`;\nlet FreshestCRL = FreshestCRL_1 = class FreshestCRL extends CRLDistributionPoints {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, FreshestCRL_1.prototype);\n }\n};\nFreshestCRL = FreshestCRL_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: DistributionPoint })\n], FreshestCRL);\nexport { FreshestCRL };\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { DistributionPointName, Reason } from \"./crl_distribution_points\";\nimport { id_ce } from \"../object_identifiers\";\nimport { AsnPropTypes } from \"@peculiar/asn1-schema\";\nexport const id_ce_issuingDistributionPoint = `${id_ce}.28`;\nexport class IssuingDistributionPoint {\n constructor(params = {}) {\n this.onlyContainsUserCerts = IssuingDistributionPoint.ONLY;\n this.onlyContainsCACerts = IssuingDistributionPoint.ONLY;\n this.indirectCRL = IssuingDistributionPoint.ONLY;\n this.onlyContainsAttributeCerts = IssuingDistributionPoint.ONLY;\n Object.assign(this, params);\n }\n}\nIssuingDistributionPoint.ONLY = false;\n__decorate([\n AsnProp({ type: DistributionPointName, context: 0, optional: true })\n], IssuingDistributionPoint.prototype, \"distributionPoint\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n context: 1,\n defaultValue: IssuingDistributionPoint.ONLY,\n implicit: true,\n })\n], IssuingDistributionPoint.prototype, \"onlyContainsUserCerts\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n context: 2,\n defaultValue: IssuingDistributionPoint.ONLY,\n implicit: true,\n })\n], IssuingDistributionPoint.prototype, \"onlyContainsCACerts\", void 0);\n__decorate([\n AsnProp({ type: Reason, context: 3, optional: true, implicit: true })\n], IssuingDistributionPoint.prototype, \"onlySomeReasons\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n context: 4,\n defaultValue: IssuingDistributionPoint.ONLY,\n implicit: true,\n })\n], IssuingDistributionPoint.prototype, \"indirectCRL\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n context: 5,\n defaultValue: IssuingDistributionPoint.ONLY,\n implicit: true,\n })\n], IssuingDistributionPoint.prototype, \"onlyContainsAttributeCerts\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_cRLReasons = `${id_ce}.21`;\nexport var CRLReasons;\n(function (CRLReasons) {\n CRLReasons[CRLReasons[\"unspecified\"] = 0] = \"unspecified\";\n CRLReasons[CRLReasons[\"keyCompromise\"] = 1] = \"keyCompromise\";\n CRLReasons[CRLReasons[\"cACompromise\"] = 2] = \"cACompromise\";\n CRLReasons[CRLReasons[\"affiliationChanged\"] = 3] = \"affiliationChanged\";\n CRLReasons[CRLReasons[\"superseded\"] = 4] = \"superseded\";\n CRLReasons[CRLReasons[\"cessationOfOperation\"] = 5] = \"cessationOfOperation\";\n CRLReasons[CRLReasons[\"certificateHold\"] = 6] = \"certificateHold\";\n CRLReasons[CRLReasons[\"removeFromCRL\"] = 8] = \"removeFromCRL\";\n CRLReasons[CRLReasons[\"privilegeWithdrawn\"] = 9] = \"privilegeWithdrawn\";\n CRLReasons[CRLReasons[\"aACompromise\"] = 10] = \"aACompromise\";\n})(CRLReasons || (CRLReasons = {}));\nlet CRLReason = class CRLReason {\n constructor(reason = CRLReasons.unspecified) {\n this.reason = CRLReasons.unspecified;\n this.reason = reason;\n }\n toJSON() {\n return CRLReasons[this.reason];\n }\n toString() {\n return this.toJSON();\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Enumerated })\n], CRLReason.prototype, \"reason\", void 0);\nCRLReason = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], CRLReason);\nexport { CRLReason };\n","var ExtendedKeyUsage_1;\nimport { __decorate } from \"tslib\";\nimport { AsnPropTypes, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce, id_kp } from \"../object_identifiers\";\nexport const id_ce_extKeyUsage = `${id_ce}.37`;\nlet ExtendedKeyUsage = ExtendedKeyUsage_1 = class ExtendedKeyUsage extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, ExtendedKeyUsage_1.prototype);\n }\n};\nExtendedKeyUsage = ExtendedKeyUsage_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: AsnPropTypes.ObjectIdentifier })\n], ExtendedKeyUsage);\nexport { ExtendedKeyUsage };\nexport const anyExtendedKeyUsage = `${id_ce_extKeyUsage}.0`;\nexport const id_kp_serverAuth = `${id_kp}.1`;\nexport const id_kp_clientAuth = `${id_kp}.2`;\nexport const id_kp_codeSigning = `${id_kp}.3`;\nexport const id_kp_emailProtection = `${id_kp}.4`;\nexport const id_kp_timeStamping = `${id_kp}.8`;\nexport const id_kp_OCSPSigning = `${id_kp}.9`;\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes, AsnIntegerArrayBufferConverter, } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_inhibitAnyPolicy = `${id_ce}.54`;\nlet InhibitAnyPolicy = class InhibitAnyPolicy {\n constructor(value = new ArrayBuffer(0)) {\n this.value = value;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter })\n], InhibitAnyPolicy.prototype, \"value\", void 0);\nInhibitAnyPolicy = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], InhibitAnyPolicy);\nexport { InhibitAnyPolicy };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_invalidityDate = `${id_ce}.24`;\nlet InvalidityDate = class InvalidityDate {\n constructor(value) {\n this.value = new Date();\n if (value) {\n this.value = value;\n }\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], InvalidityDate.prototype, \"value\", void 0);\nInvalidityDate = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], InvalidityDate);\nexport { InvalidityDate };\n","var IssueAlternativeName_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralNames } from \"../general_names\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_issuerAltName = `${id_ce}.18`;\nlet IssueAlternativeName = IssueAlternativeName_1 = class IssueAlternativeName extends GeneralNames {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, IssueAlternativeName_1.prototype);\n }\n};\nIssueAlternativeName = IssueAlternativeName_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence })\n], IssueAlternativeName);\nexport { IssueAlternativeName };\n","import { BitString } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_keyUsage = `${id_ce}.15`;\nexport var KeyUsageFlags;\n(function (KeyUsageFlags) {\n KeyUsageFlags[KeyUsageFlags[\"digitalSignature\"] = 1] = \"digitalSignature\";\n KeyUsageFlags[KeyUsageFlags[\"nonRepudiation\"] = 2] = \"nonRepudiation\";\n KeyUsageFlags[KeyUsageFlags[\"keyEncipherment\"] = 4] = \"keyEncipherment\";\n KeyUsageFlags[KeyUsageFlags[\"dataEncipherment\"] = 8] = \"dataEncipherment\";\n KeyUsageFlags[KeyUsageFlags[\"keyAgreement\"] = 16] = \"keyAgreement\";\n KeyUsageFlags[KeyUsageFlags[\"keyCertSign\"] = 32] = \"keyCertSign\";\n KeyUsageFlags[KeyUsageFlags[\"cRLSign\"] = 64] = \"cRLSign\";\n KeyUsageFlags[KeyUsageFlags[\"encipherOnly\"] = 128] = \"encipherOnly\";\n KeyUsageFlags[KeyUsageFlags[\"decipherOnly\"] = 256] = \"decipherOnly\";\n})(KeyUsageFlags || (KeyUsageFlags = {}));\nexport class KeyUsage extends BitString {\n toJSON() {\n const flag = this.toNumber();\n const res = [];\n if (flag & KeyUsageFlags.cRLSign) {\n res.push(\"crlSign\");\n }\n if (flag & KeyUsageFlags.dataEncipherment) {\n res.push(\"dataEncipherment\");\n }\n if (flag & KeyUsageFlags.decipherOnly) {\n res.push(\"decipherOnly\");\n }\n if (flag & KeyUsageFlags.digitalSignature) {\n res.push(\"digitalSignature\");\n }\n if (flag & KeyUsageFlags.encipherOnly) {\n res.push(\"encipherOnly\");\n }\n if (flag & KeyUsageFlags.keyAgreement) {\n res.push(\"keyAgreement\");\n }\n if (flag & KeyUsageFlags.keyCertSign) {\n res.push(\"keyCertSign\");\n }\n if (flag & KeyUsageFlags.keyEncipherment) {\n res.push(\"keyEncipherment\");\n }\n if (flag & KeyUsageFlags.nonRepudiation) {\n res.push(\"nonRepudiation\");\n }\n return res;\n }\n toString() {\n return `[${this.toJSON().join(\", \")}]`;\n }\n}\n","var GeneralSubtrees_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralName } from \"../general_name\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_nameConstraints = `${id_ce}.30`;\nexport class GeneralSubtree {\n constructor(params = {}) {\n this.base = new GeneralName();\n this.minimum = 0;\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: GeneralName })\n], GeneralSubtree.prototype, \"base\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, context: 0, defaultValue: 0, implicit: true })\n], GeneralSubtree.prototype, \"minimum\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, context: 1, optional: true, implicit: true })\n], GeneralSubtree.prototype, \"maximum\", void 0);\nlet GeneralSubtrees = GeneralSubtrees_1 = class GeneralSubtrees extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, GeneralSubtrees_1.prototype);\n }\n};\nGeneralSubtrees = GeneralSubtrees_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: GeneralSubtree })\n], GeneralSubtrees);\nexport { GeneralSubtrees };\nexport class NameConstraints {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: GeneralSubtrees, context: 0, optional: true, implicit: true })\n], NameConstraints.prototype, \"permittedSubtrees\", void 0);\n__decorate([\n AsnProp({ type: GeneralSubtrees, context: 1, optional: true, implicit: true })\n], NameConstraints.prototype, \"excludedSubtrees\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_policyConstraints = `${id_ce}.36`;\nexport class PolicyConstraints {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n context: 0,\n implicit: true,\n optional: true,\n converter: AsnIntegerArrayBufferConverter,\n })\n], PolicyConstraints.prototype, \"requireExplicitPolicy\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n context: 1,\n implicit: true,\n optional: true,\n converter: AsnIntegerArrayBufferConverter,\n })\n], PolicyConstraints.prototype, \"inhibitPolicyMapping\", void 0);\n","var PolicyMappings_1;\nimport { __decorate } from \"tslib\";\nimport { AsnArray, AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_policyMappings = `${id_ce}.33`;\nexport class PolicyMapping {\n constructor(params = {}) {\n this.issuerDomainPolicy = \"\";\n this.subjectDomainPolicy = \"\";\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], PolicyMapping.prototype, \"issuerDomainPolicy\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], PolicyMapping.prototype, \"subjectDomainPolicy\", void 0);\nlet PolicyMappings = PolicyMappings_1 = class PolicyMappings extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, PolicyMappings_1.prototype);\n }\n};\nPolicyMappings = PolicyMappings_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: PolicyMapping })\n], PolicyMappings);\nexport { PolicyMappings };\n","var SubjectAlternativeName_1;\nimport { __decorate } from \"tslib\";\nimport { AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralNames } from \"../general_names\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_subjectAltName = `${id_ce}.17`;\nlet SubjectAlternativeName = SubjectAlternativeName_1 = class SubjectAlternativeName extends GeneralNames {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, SubjectAlternativeName_1.prototype);\n }\n};\nSubjectAlternativeName = SubjectAlternativeName_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence })\n], SubjectAlternativeName);\nexport { SubjectAlternativeName };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nexport class Attribute {\n constructor(params = {}) {\n this.type = \"\";\n this.values = [];\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], Attribute.prototype, \"type\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any, repeated: \"set\" })\n], Attribute.prototype, \"values\", void 0);\n","var SubjectDirectoryAttributes_1;\nimport { __decorate } from \"tslib\";\nimport { AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { Attribute } from \"../attribute\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_subjectDirectoryAttributes = `${id_ce}.9`;\nlet SubjectDirectoryAttributes = SubjectDirectoryAttributes_1 = class SubjectDirectoryAttributes extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, SubjectDirectoryAttributes_1.prototype);\n }\n};\nSubjectDirectoryAttributes = SubjectDirectoryAttributes_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: Attribute })\n], SubjectDirectoryAttributes);\nexport { SubjectDirectoryAttributes };\n","import { id_ce } from \"../object_identifiers\";\nimport { KeyIdentifier } from \"./authority_key_identifier\";\nexport const id_ce_subjectKeyIdentifier = `${id_ce}.14`;\nexport class SubjectKeyIdentifier extends KeyIdentifier {\n}\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { id_ce } from \"../object_identifiers\";\nexport const id_ce_privateKeyUsagePeriod = `${id_ce}.16`;\nexport class PrivateKeyUsagePeriod {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime, context: 0, implicit: true, optional: true })\n], PrivateKeyUsagePeriod.prototype, \"notBefore\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime, context: 1, implicit: true, optional: true })\n], PrivateKeyUsagePeriod.prototype, \"notAfter\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, BitString } from \"@peculiar/asn1-schema\";\nexport const id_entrust_entrustVersInfo = \"1.2.840.113533.7.65.0\";\nexport var EntrustInfoFlags;\n(function (EntrustInfoFlags) {\n EntrustInfoFlags[EntrustInfoFlags[\"keyUpdateAllowed\"] = 1] = \"keyUpdateAllowed\";\n EntrustInfoFlags[EntrustInfoFlags[\"newExtensions\"] = 2] = \"newExtensions\";\n EntrustInfoFlags[EntrustInfoFlags[\"pKIXCertificate\"] = 4] = \"pKIXCertificate\";\n})(EntrustInfoFlags || (EntrustInfoFlags = {}));\nexport class EntrustInfo extends BitString {\n toJSON() {\n const res = [];\n const flags = this.toNumber();\n if (flags & EntrustInfoFlags.pKIXCertificate) {\n res.push(\"pKIXCertificate\");\n }\n if (flags & EntrustInfoFlags.newExtensions) {\n res.push(\"newExtensions\");\n }\n if (flags & EntrustInfoFlags.keyUpdateAllowed) {\n res.push(\"keyUpdateAllowed\");\n }\n return res;\n }\n toString() {\n return `[${this.toJSON().join(\", \")}]`;\n }\n}\nexport class EntrustVersionInfo {\n constructor(params = {}) {\n this.entrustVers = \"\";\n this.entrustInfoFlags = new EntrustInfo();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralString })\n], EntrustVersionInfo.prototype, \"entrustVers\", void 0);\n__decorate([\n AsnProp({ type: EntrustInfo })\n], EntrustVersionInfo.prototype, \"entrustInfoFlags\", void 0);\n","var SubjectInfoAccessSyntax_1;\nimport { __decorate } from \"tslib\";\nimport { AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { id_pe } from \"../object_identifiers\";\nimport { AccessDescription } from \"./authority_information_access\";\nexport const id_pe_subjectInfoAccess = `${id_pe}.11`;\nlet SubjectInfoAccessSyntax = SubjectInfoAccessSyntax_1 = class SubjectInfoAccessSyntax extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, SubjectInfoAccessSyntax_1.prototype);\n }\n};\nSubjectInfoAccessSyntax = SubjectInfoAccessSyntax_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: AccessDescription })\n], SubjectInfoAccessSyntax);\nexport { SubjectInfoAccessSyntax };\n","export * from \"./authority_information_access\";\nexport * from \"./authority_key_identifier\";\nexport * from \"./basic_constraints\";\nexport * from \"./certificate_issuer\";\nexport * from \"./certificate_policies\";\nexport * from \"./crl_delta_indicator\";\nexport * from \"./crl_distribution_points\";\nexport * from \"./crl_freshest\";\nexport * from \"./crl_issuing_distribution_point\";\nexport * from \"./crl_number\";\nexport * from \"./crl_reason\";\nexport * from \"./extended_key_usage\";\nexport * from \"./inhibit_any_policy\";\nexport * from \"./invalidity_date\";\nexport * from \"./issuer_alternative_name\";\nexport * from \"./key_usage\";\nexport * from \"./name_constraints\";\nexport * from \"./policy_constraints\";\nexport * from \"./policy_mappings\";\nexport * from \"./subject_alternative_name\";\nexport * from \"./subject_directory_attributes\";\nexport * from \"./subject_key_identifier\";\nexport * from \"./private_key_usage_period\";\nexport * from \"./entrust_version_info\";\nexport * from \"./subject_info_access\";\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport * as pvtsutils from \"pvtsutils\";\nexport class AlgorithmIdentifier {\n constructor(params = {}) {\n this.algorithm = \"\";\n Object.assign(this, params);\n }\n isEqual(data) {\n return (data instanceof AlgorithmIdentifier &&\n data.algorithm == this.algorithm &&\n ((data.parameters &&\n this.parameters &&\n pvtsutils.isEqual(data.parameters, this.parameters)) ||\n data.parameters === this.parameters));\n }\n}\n__decorate([\n AsnProp({\n type: AsnPropTypes.ObjectIdentifier,\n })\n], AlgorithmIdentifier.prototype, \"algorithm\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Any,\n optional: true,\n })\n], AlgorithmIdentifier.prototype, \"parameters\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nexport class SubjectPublicKeyInfo {\n constructor(params = {}) {\n this.algorithm = new AlgorithmIdentifier();\n this.subjectPublicKey = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], SubjectPublicKeyInfo.prototype, \"algorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], SubjectPublicKeyInfo.prototype, \"subjectPublicKey\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nlet Time = class Time {\n constructor(time) {\n if (time) {\n if (typeof time === \"string\" || typeof time === \"number\" || time instanceof Date) {\n const date = new Date(time);\n date.setMilliseconds(0);\n if (date.getUTCFullYear() > 2049) {\n this.generalTime = date;\n }\n else {\n this.utcTime = date;\n }\n }\n else {\n Object.assign(this, time);\n }\n }\n }\n getTime() {\n const time = this.utcTime || this.generalTime;\n if (!time) {\n throw new Error(\"Cannot get time from CHOICE object\");\n }\n return time;\n }\n};\n__decorate([\n AsnProp({\n type: AsnPropTypes.UTCTime,\n })\n], Time.prototype, \"utcTime\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.GeneralizedTime,\n })\n], Time.prototype, \"generalTime\", void 0);\nTime = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], Time);\nexport { Time };\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { Time } from \"./time\";\nexport class Validity {\n constructor(params) {\n this.notBefore = new Time(new Date());\n this.notAfter = new Time(new Date());\n if (params) {\n this.notBefore = new Time(params.notBefore);\n this.notAfter = new Time(params.notAfter);\n }\n }\n}\n__decorate([\n AsnProp({ type: Time })\n], Validity.prototype, \"notBefore\", void 0);\n__decorate([\n AsnProp({ type: Time })\n], Validity.prototype, \"notAfter\", void 0);\n","var Extensions_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnArray, AsnType, AsnTypeTypes, OctetString, } from \"@peculiar/asn1-schema\";\nexport class Extension {\n constructor(params = {}) {\n this.extnID = \"\";\n this.critical = Extension.CRITICAL;\n this.extnValue = new OctetString();\n Object.assign(this, params);\n }\n}\nExtension.CRITICAL = false;\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], Extension.prototype, \"extnID\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Boolean,\n defaultValue: Extension.CRITICAL,\n })\n], Extension.prototype, \"critical\", void 0);\n__decorate([\n AsnProp({ type: OctetString })\n], Extension.prototype, \"extnValue\", void 0);\nlet Extensions = Extensions_1 = class Extensions extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, Extensions_1.prototype);\n }\n};\nExtensions = Extensions_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: Extension })\n], Extensions);\nexport { Extensions };\n","export var Version;\n(function (Version) {\n Version[Version[\"v1\"] = 0] = \"v1\";\n Version[Version[\"v2\"] = 1] = \"v2\";\n Version[Version[\"v3\"] = 2] = \"v3\";\n})(Version || (Version = {}));\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nimport { Name } from \"./name\";\nimport { SubjectPublicKeyInfo } from \"./subject_public_key_info\";\nimport { Validity } from \"./validity\";\nimport { Extensions } from \"./extension\";\nimport { Version } from \"./types\";\nexport class TBSCertificate {\n constructor(params = {}) {\n this.version = Version.v1;\n this.serialNumber = new ArrayBuffer(0);\n this.signature = new AlgorithmIdentifier();\n this.issuer = new Name();\n this.validity = new Validity();\n this.subject = new Name();\n this.subjectPublicKeyInfo = new SubjectPublicKeyInfo();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n context: 0,\n defaultValue: Version.v1,\n })\n], TBSCertificate.prototype, \"version\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Integer,\n converter: AsnIntegerArrayBufferConverter,\n })\n], TBSCertificate.prototype, \"serialNumber\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], TBSCertificate.prototype, \"signature\", void 0);\n__decorate([\n AsnProp({ type: Name })\n], TBSCertificate.prototype, \"issuer\", void 0);\n__decorate([\n AsnProp({ type: Validity })\n], TBSCertificate.prototype, \"validity\", void 0);\n__decorate([\n AsnProp({ type: Name })\n], TBSCertificate.prototype, \"subject\", void 0);\n__decorate([\n AsnProp({ type: SubjectPublicKeyInfo })\n], TBSCertificate.prototype, \"subjectPublicKeyInfo\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.BitString,\n context: 1,\n implicit: true,\n optional: true,\n })\n], TBSCertificate.prototype, \"issuerUniqueID\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString, context: 2, implicit: true, optional: true })\n], TBSCertificate.prototype, \"subjectUniqueID\", void 0);\n__decorate([\n AsnProp({ type: Extensions, context: 3, optional: true })\n], TBSCertificate.prototype, \"extensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nimport { TBSCertificate } from \"./tbs_certificate\";\nexport class Certificate {\n constructor(params = {}) {\n this.tbsCertificate = new TBSCertificate();\n this.signatureAlgorithm = new AlgorithmIdentifier();\n this.signatureValue = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: TBSCertificate, raw: true })\n], Certificate.prototype, \"tbsCertificate\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], Certificate.prototype, \"signatureAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], Certificate.prototype, \"signatureValue\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nimport { Name } from \"./name\";\nimport { Time } from \"./time\";\nimport { Extension } from \"./extension\";\nexport class RevokedCertificate {\n constructor(params = {}) {\n this.userCertificate = new ArrayBuffer(0);\n this.revocationDate = new Time();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter })\n], RevokedCertificate.prototype, \"userCertificate\", void 0);\n__decorate([\n AsnProp({ type: Time })\n], RevokedCertificate.prototype, \"revocationDate\", void 0);\n__decorate([\n AsnProp({ type: Extension, optional: true, repeated: \"sequence\" })\n], RevokedCertificate.prototype, \"crlEntryExtensions\", void 0);\nexport class TBSCertList {\n constructor(params = {}) {\n this.signature = new AlgorithmIdentifier();\n this.issuer = new Name();\n this.thisUpdate = new Time();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, optional: true })\n], TBSCertList.prototype, \"version\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], TBSCertList.prototype, \"signature\", void 0);\n__decorate([\n AsnProp({ type: Name })\n], TBSCertList.prototype, \"issuer\", void 0);\n__decorate([\n AsnProp({ type: Time })\n], TBSCertList.prototype, \"thisUpdate\", void 0);\n__decorate([\n AsnProp({ type: Time, optional: true })\n], TBSCertList.prototype, \"nextUpdate\", void 0);\n__decorate([\n AsnProp({ type: RevokedCertificate, repeated: \"sequence\", optional: true })\n], TBSCertList.prototype, \"revokedCertificates\", void 0);\n__decorate([\n AsnProp({ type: Extension, optional: true, context: 0, repeated: \"sequence\" })\n], TBSCertList.prototype, \"crlExtensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"./algorithm_identifier\";\nimport { TBSCertList } from \"./tbs_cert_list\";\nexport class CertificateList {\n constructor(params = {}) {\n this.tbsCertList = new TBSCertList();\n this.signatureAlgorithm = new AlgorithmIdentifier();\n this.signature = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: TBSCertList, raw: true })\n], CertificateList.prototype, \"tbsCertList\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], CertificateList.prototype, \"signatureAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], CertificateList.prototype, \"signature\", void 0);\n","export * from \"./extensions\";\nexport * from \"./algorithm_identifier\";\nexport * from \"./attribute\";\nexport * from \"./certificate\";\nexport * from \"./certificate_list\";\nexport * from \"./extension\";\nexport * from \"./general_name\";\nexport * from \"./general_names\";\nexport * from \"./name\";\nexport * from \"./object_identifiers\";\nexport * from \"./subject_public_key_info\";\nexport * from \"./tbs_cert_list\";\nexport * from \"./tbs_certificate\";\nexport * from \"./time\";\nexport * from \"./types\";\nexport * from \"./validity\";\n","import {\n SubjectKeyIdentifierExtension,\n X509Certificate,\n} from '@peculiar/x509';\n\n/**\n * Return the hex-encoded Subject Key Identifier of the given cert, or\n * null if the cert has no SKI extension. Always lowercase.\n */\nexport function getSkiHex(cert: X509Certificate): string | null {\n const ext = cert.getExtension(SubjectKeyIdentifierExtension);\n return ext ? ext.keyId.toLowerCase() : null;\n}\n\n/**\n * Byte-identity check on two certificates' DER encodings. Used to confirm a\n * chain actually terminates at a trust anchor rather than at a certificate\n * that merely reuses the anchor's Subject DN string — Subject-DN string\n * equality is NOT cryptographic identity.\n */\nexport function certificatesEqual(\n a: X509Certificate,\n b: X509Certificate\n): boolean {\n const ab = new Uint8Array(a.rawData);\n const bb = new Uint8Array(b.rawData);\n if (ab.length !== bb.length) return false;\n for (let i = 0; i < ab.length; i++) {\n if (ab[i] !== bb[i]) return false;\n }\n return true;\n}\n\n/**\n * Return the raw bytes of the Subject Key Identifier, or null.\n */\nexport function getSkiBytes(cert: X509Certificate): Uint8Array | null {\n const ext = cert.getExtension(SubjectKeyIdentifierExtension);\n if (!ext) return null;\n const hex = ext.keyId;\n const out = new Uint8Array(hex.length / 2);\n for (let i = 0; i < out.length; i++) {\n out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n","import { AsnConvert } from \"@peculiar/asn1-schema\";\nimport {\n GeneralName as Asn1GeneralName,\n GeneralSubtree,\n Name as AsnName,\n NameConstraints,\n} from \"@peculiar/asn1-x509\";\nimport {\n AuthorityKeyIdentifierExtension,\n BasicConstraintsExtension,\n KeyUsageFlags,\n KeyUsagesExtension,\n Name as X509Name,\n SubjectAlternativeNameExtension,\n SubjectKeyIdentifierExtension,\n X509Certificate,\n X509Certificates,\n} from \"@peculiar/x509\";\nimport { CertificateChainError } from \"../errors.js\";\nimport { certificatesEqual } from \"./x509-utils.js\";\n\nconst NAME_CONSTRAINTS_OID = \"2.5.29.30\";\n\ntype SubtreeName =\n | { type: \"dn\"; value: string }\n | { type: \"dns\"; value: string }\n | { type: \"email\"; value: string }\n | { type: \"uri\"; value: string };\n\nexport interface ChainBuilderOptions {\n /** Clock-skew tolerance in seconds applied to `notBefore`/`notAfter`. Default 60. */\n clockSkewTolerance?: number;\n /**\n * Certificate signature algorithms accepted for chain links.\n * Defaults to ES256, ES384, EdDSA, RS256, PS256.\n */\n allowedAlgorithms?: string[];\n /** Override \"now\" (used by tests). Defaults to `new Date()`. */\n now?: () => Date;\n}\n\nconst DEFAULT_ALGORITHMS = [\n \"ES256\",\n \"ES384\",\n \"ES512\",\n \"EdDSA\",\n \"RS256\",\n \"RS384\",\n \"RS512\",\n \"PS256\",\n \"PS384\",\n \"PS512\",\n];\n\n/**\n * Pragmatic RFC 5280 chain validator. Private — consumed only by\n * `TrustEvaluator`. Not exported from the package root.\n *\n * Scope: signature, validity period, algorithm allowlist, DN chaining,\n * AKI/SKI match, basicConstraints, keyUsage, nameConstraints. Explicitly\n * omits policy mapping / policy constraints / anyPolicy handling.\n */\nexport class ChainBuilder {\n constructor(private readonly opts: ChainBuilderOptions = {}) {}\n\n /**\n * Build and validate a chain from `leaf` to one of the `anchors`,\n * optionally using additional intermediates. Returns the ordered chain\n * (leaf → anchor). Throws `CertificateChainError` on any validation\n * failure.\n */\n async build(\n leaf: X509Certificate,\n anchors: X509Certificate[],\n intermediates: X509Certificate[] = []\n ): Promise<X509Certificate[]> {\n // Try each anchor; first one that closes a valid chain wins.\n const errors: Error[] = [];\n for (const anchor of anchors) {\n try {\n return await this.tryBuild(leaf, anchor, intermediates);\n } catch (err) {\n errors.push(err as Error);\n }\n }\n // All anchors failed — rethrow the most informative error.\n const last = errors[errors.length - 1];\n if (last instanceof CertificateChainError) throw last;\n throw new CertificateChainError(\"no valid chain to any anchor\", {\n reason: \"signature\",\n cause: last,\n });\n }\n\n private async tryBuild(\n leaf: X509Certificate,\n anchor: X509Certificate,\n intermediates: X509Certificate[]\n ): Promise<X509Certificate[]> {\n this.checkPerCert(leaf);\n this.checkLeafKeyUsage(leaf);\n const chain: X509Certificate[] = [leaf];\n let current = leaf;\n const pool = new X509Certificates(intermediates);\n let nonLeafDepth = 0; // how many non-self-issued CAs above leaf\n\n while (current.subject !== anchor.subject) {\n const issuer = pool.find((c) => c.subject === current.issuer);\n if (!issuer) {\n if (current.issuer !== anchor.subject) {\n throw new CertificateChainError(`no issuer certificate found for ${current.subject}`, {\n reason: \"signature\",\n });\n }\n // climbed to the anchor\n this.checkPerCert(anchor);\n this.checkCaAndPathLen(anchor, nonLeafDepth);\n this.checkAkiSkiMatch(current, anchor);\n await this.verifySignature(current, anchor);\n chain.push(anchor);\n this.checkNameConstraints(leaf, chain.slice(1));\n return chain;\n }\n this.checkPerCert(issuer);\n this.checkCaAndPathLen(issuer, nonLeafDepth);\n this.checkAkiSkiMatch(current, issuer);\n await this.verifySignature(current, issuer);\n chain.push(issuer);\n current = issuer;\n nonLeafDepth += 1;\n }\n // The loop terminated because `current.subject === anchor.subject`. That is\n // a valid chain closure ONLY if `current` IS the anchor (byte-identical) —\n // a certificate that merely reuses the anchor's Subject DN string was never\n // signed by the anchor's key and must not be trusted. Subject-DN equality is\n // not cryptographic closure. (The signature-verified closure path is the\n // `!issuer` branch above, which calls `verifySignature(current, anchor)`.)\n if (!certificatesEqual(current, anchor)) {\n throw new CertificateChainError(\n `certificate ${current.subject} shares the trust anchor's Subject DN but is not the anchor (no signature closure)`,\n { reason: \"signature\" }\n );\n }\n this.checkNameConstraints(leaf, chain.slice(1));\n return chain;\n }\n\n /**\n * Enforce nameConstraints asserted by any CA above the leaf against the\n * leaf's identities. RFC 5280 §4.2.1.10 requires both permitted (leaf must\n * match at least one) and excluded (leaf must match none) to hold for each\n * name type that appears in the constraint.\n */\n private checkNameConstraints(leaf: X509Certificate, chainAboveLeaf: X509Certificate[]): void {\n const leafNames = collectLeafNames(leaf);\n const types: SubtreeName[\"type\"][] = [\"dn\", \"dns\", \"email\", \"uri\"];\n for (const ca of chainAboveLeaf) {\n const ext = ca.extensions.find((e) => e.type === NAME_CONSTRAINTS_OID);\n if (!ext) continue;\n const nc = AsnConvert.parse(ext.value, NameConstraints);\n const permitted = extractSubtrees(nc.permittedSubtrees);\n const excluded = extractSubtrees(nc.excludedSubtrees);\n for (const type of types) {\n this.applyConstraintsForType(leaf, leafNames, permitted, excluded, type, ca.subject);\n }\n }\n }\n\n private applyConstraintsForType(\n leaf: X509Certificate,\n leafNames: SubtreeName[],\n permitted: SubtreeName[],\n excluded: SubtreeName[],\n type: SubtreeName[\"type\"],\n enforcingCa: string\n ): void {\n const permittedForType = permitted.filter((p) => p.type === type);\n const excludedForType = excluded.filter((p) => p.type === type);\n const leafForType = leafNames.filter((n) => n.type === type);\n if (permittedForType.length > 0) {\n // Every leaf name of this type must fall under at least one permitted subtree.\n for (const ln of leafForType) {\n const ok = permittedForType.some((sub) => matchesSubtree(ln, sub));\n if (!ok) {\n throw new CertificateChainError(\n `leaf ${leaf.subject}: ${type} \"${ln.value}\" is outside permitted subtrees asserted by ${enforcingCa}`,\n { reason: \"name_constraints\" }\n );\n }\n }\n }\n for (const ln of leafForType) {\n for (const sub of excludedForType) {\n if (matchesSubtree(ln, sub)) {\n throw new CertificateChainError(\n `leaf ${leaf.subject}: ${type} \"${ln.value}\" is under excluded subtree \"${sub.value}\" asserted by ${enforcingCa}`,\n { reason: \"name_constraints\" }\n );\n }\n }\n }\n }\n\n private checkCaAndPathLen(cert: X509Certificate, nonLeafDepth: number): void {\n this.checkCaKeyUsage(cert);\n const bc = cert.getExtension(BasicConstraintsExtension);\n if (!bc || !bc.ca) {\n throw new CertificateChainError(\n `certificate ${cert.subject} is not a CA (BasicConstraints cA=false or absent)`,\n { reason: \"basic_constraints\" }\n );\n }\n if (typeof bc.pathLength === \"number\" && nonLeafDepth > bc.pathLength) {\n throw new CertificateChainError(\n `path length ${nonLeafDepth} exceeds pathLenConstraint ${bc.pathLength} on ${cert.subject}`,\n { reason: \"path_length\" }\n );\n }\n }\n\n private checkLeafKeyUsage(leaf: X509Certificate): void {\n const ext = leaf.getExtension(KeyUsagesExtension);\n if (!ext) return; // no keyUsage → no restriction\n if ((ext.usages & KeyUsageFlags.digitalSignature) === 0) {\n throw new CertificateChainError(\n `leaf ${leaf.subject} does not assert digitalSignature key usage`,\n { reason: \"key_usage\" }\n );\n }\n }\n\n private checkCaKeyUsage(cert: X509Certificate): void {\n const ext = cert.getExtension(KeyUsagesExtension);\n if (!ext) return;\n if ((ext.usages & KeyUsageFlags.keyCertSign) === 0) {\n throw new CertificateChainError(\n `CA ${cert.subject} does not assert keyCertSign key usage`,\n { reason: \"key_usage\" }\n );\n }\n }\n\n private checkAkiSkiMatch(child: X509Certificate, issuer: X509Certificate): void {\n const aki = child.getExtension(AuthorityKeyIdentifierExtension);\n const ski = issuer.getExtension(SubjectKeyIdentifierExtension);\n if (!aki || !ski) return; // extension-less certs permitted\n const akiKeyId = aki.keyId;\n const skiKeyId = ski.keyId;\n if (akiKeyId && skiKeyId && akiKeyId.toLowerCase() !== skiKeyId.toLowerCase()) {\n throw new CertificateChainError(\n `AKI of ${child.subject} does not match SKI of ${issuer.subject}`,\n { reason: \"aki_ski_mismatch\" }\n );\n }\n }\n\n private async verifySignature(child: X509Certificate, issuer: X509Certificate): Promise<void> {\n // `signatureOnly: true` skips @peculiar/x509's internal validity check —\n // we own validity enforcement via `checkValidity` with clock-skew tolerance.\n const ok = await child.verify({ publicKey: issuer.publicKey, signatureOnly: true });\n if (!ok) {\n throw new CertificateChainError(`signature verification failed for ${child.subject}`, { reason: \"signature\" });\n }\n }\n\n private checkPerCert(cert: X509Certificate): void {\n this.checkValidity(cert);\n this.checkAlgorithm(cert);\n }\n\n private checkValidity(cert: X509Certificate): void {\n const now = (this.opts.now ?? (() => new Date()))().getTime();\n const skewMs = (this.opts.clockSkewTolerance ?? 60) * 1000;\n const notBefore = cert.notBefore.getTime();\n const notAfter = cert.notAfter.getTime();\n if (now + skewMs < notBefore) {\n throw new CertificateChainError(\n `certificate ${cert.subject} not yet valid (notBefore=${cert.notBefore.toISOString()})`,\n { reason: \"validity\" }\n );\n }\n if (now - skewMs > notAfter) {\n throw new CertificateChainError(\n `certificate ${cert.subject} expired (notAfter=${cert.notAfter.toISOString()})`,\n { reason: \"validity\" }\n );\n }\n }\n\n private checkAlgorithm(cert: X509Certificate): void {\n const allowed = this.opts.allowedAlgorithms ?? DEFAULT_ALGORITHMS;\n const algName = mapX509AlgoToJwaName(cert);\n if (!allowed.includes(algName)) {\n throw new CertificateChainError(\n `certificate ${cert.subject} uses disallowed signature algorithm ${algName}`,\n { reason: \"algorithm_disallowed\" }\n );\n }\n }\n}\n\nfunction mapX509AlgoToJwaName(cert: X509Certificate): string {\n // `@peculiar/x509` surfaces the signature alg via `signatureAlgorithm.name`\n // plus hash on ECDSA/RSA-PSS. We map to JWA names per RFC 7518 + RFC 8037.\n const alg = cert.signatureAlgorithm as unknown as {\n name?: string;\n hash?: { name?: string };\n };\n const name = alg?.name ?? \"\";\n const hash = alg?.hash?.name ?? \"\";\n if (name === \"ECDSA\" && hash === \"SHA-256\") return \"ES256\";\n if (name === \"ECDSA\" && hash === \"SHA-384\") return \"ES384\";\n if (name === \"ECDSA\" && hash === \"SHA-512\") return \"ES512\";\n if (name === \"Ed25519\" || name === \"EdDSA\") return \"EdDSA\";\n if (name === \"RSASSA-PKCS1-v1_5\" && hash === \"SHA-256\") return \"RS256\";\n if (name === \"RSASSA-PKCS1-v1_5\" && hash === \"SHA-384\") return \"RS384\";\n if (name === \"RSASSA-PKCS1-v1_5\" && hash === \"SHA-512\") return \"RS512\";\n if (name === \"RSA-PSS\" && hash === \"SHA-256\") return \"PS256\";\n if (name === \"RSA-PSS\" && hash === \"SHA-384\") return \"PS384\";\n if (name === \"RSA-PSS\" && hash === \"SHA-512\") return \"PS512\";\n return `${name}-${hash}`;\n}\n\n/**\n * Collect all identities asserted by the leaf that name constraints can\n * apply to: subject DN plus any SAN entries of supported types.\n *\n * Note: `@peculiar/x509`'s `GeneralName.type` uses the literal `'url'` for\n * URIs (URL constant), while the constraint side in `@peculiar/asn1-x509`\n * uses `uniformResourceIdentifier`, which `generalNameToSubtree` maps to\n * `{type: 'uri', ...}`. We normalize SAN entries here to `'uri'` so both\n * read paths agree on one canonical type tag.\n */\nfunction collectLeafNames(leaf: X509Certificate): SubtreeName[] {\n const out: SubtreeName[] = [{ type: \"dn\", value: leaf.subject }];\n const san = leaf.getExtension(SubjectAlternativeNameExtension);\n if (san?.names?.items) {\n for (const name of san.names.items) {\n if (name.type === \"dns\") out.push({ type: \"dns\", value: name.value });\n else if (name.type === \"email\") out.push({ type: \"email\", value: name.value });\n else if (name.type === \"url\") out.push({ type: \"uri\", value: name.value });\n }\n }\n return out;\n}\n\n/**\n * Collapse a parsed `GeneralSubtrees` into the simple shape used by\n * the synthetic-ca helpers: `{type, value}`. Any name kind we do not yet\n * enforce is returned as-is so later tasks can extend this.\n */\nfunction extractSubtrees(subtrees: GeneralSubtree[] | undefined): SubtreeName[] {\n if (!subtrees) return [];\n const out: SubtreeName[] = [];\n for (const s of subtrees) {\n const name = generalNameToSubtree(s.base);\n if (name) out.push(name);\n }\n return out;\n}\n\nfunction generalNameToSubtree(gn: Asn1GeneralName): SubtreeName | null {\n if (gn.directoryName) {\n // `directoryName` is an ASN.1 `Name`. Serialize to DER and parse with\n // @peculiar/x509's `Name` to get a canonical RFC 4514 string — same\n // path the synthetic-ca helper uses on the write side.\n const der = AsnConvert.serialize(gn.directoryName as AsnName);\n const dn = new X509Name(new Uint8Array(der)).toString();\n return { type: \"dn\", value: dn };\n }\n if (typeof gn.dNSName === \"string\") return { type: \"dns\", value: gn.dNSName };\n if (typeof gn.rfc822Name === \"string\") return { type: \"email\", value: gn.rfc822Name };\n if (typeof gn.uniformResourceIdentifier === \"string\") {\n return { type: \"uri\", value: gn.uniformResourceIdentifier };\n }\n return null;\n}\n\nfunction matchesSubtree(leafName: SubtreeName, subtree: SubtreeName): boolean {\n if (leafName.type !== subtree.type) return false;\n switch (subtree.type) {\n case \"dn\":\n return dnIsUnder(leafName.value, subtree.value);\n case \"dns\":\n return dnsIsUnder(leafName.value, subtree.value);\n case \"email\":\n return emailIsUnder(leafName.value, subtree.value);\n case \"uri\":\n return uriIsUnder(leafName.value, subtree.value);\n }\n}\n\n/**\n * DNS subtree match per RFC 5280 §4.2.1.10: case-insensitive exact match,\n * or left-side label(s) extension (`api.example.com` is under `example.com`).\n */\nfunction dnsIsUnder(leafDns: string, subtree: string): boolean {\n const leaf = leafDns.toLowerCase();\n const sub = subtree.toLowerCase();\n if (leaf === sub) return true;\n return leaf.endsWith(`.${sub}`);\n}\n\n/**\n * rfc822Name subtree match per RFC 5280 §4.2.1.10. Three shapes:\n * - full mailbox (`user@host`): exact match;\n * - host (`host.example`): match by leaf's domain part;\n * - dot-prefixed (`.example.com`): any descendant host, including the\n * bare domain (`example.com`) per §4.2.1.6 conventions.\n */\nfunction emailIsUnder(leafEmail: string, subtree: string): boolean {\n const leaf = leafEmail.toLowerCase();\n const sub = subtree.toLowerCase();\n if (sub.includes(\"@\")) return leaf === sub;\n const at = leaf.indexOf(\"@\");\n if (at < 0) return false;\n const leafHost = leaf.slice(at + 1);\n if (sub.startsWith(\".\")) {\n const bare = sub.slice(1);\n return leafHost === bare || leafHost.endsWith(sub);\n }\n return leafHost === sub;\n}\n\n/**\n * URI subtree match per RFC 5280 §4.2.1.10: parse the leaf URI and run the\n * DNS subtree comparison on its hostname.\n */\nfunction uriIsUnder(leafUri: string, subtree: string): boolean {\n try {\n const url = new URL(leafUri);\n return dnsIsUnder(url.hostname, subtree);\n } catch {\n return false;\n }\n}\n\n/**\n * RDN-level suffix match per RFC 5280 §4.2.1.10. This is a pragmatic\n * comparison — case-insensitive on attribute values, matching on whole\n * RDN tokens after splitting on `,`. It is not a full DN canonicalization\n * but handles EU TSP certificates correctly.\n */\nfunction dnIsUnder(childDn: string, subtreeDn: string): boolean {\n const normalize = (dn: string) =>\n dn\n .split(\",\")\n .map((rdn) => rdn.trim())\n .filter(Boolean)\n .reverse();\n const child = normalize(childDn);\n const subtree = normalize(subtreeDn);\n if (subtree.length > child.length) return false;\n for (let i = 0; i < subtree.length; i++) {\n if (child[i].toLowerCase() !== subtree[i].toLowerCase()) return false;\n }\n return true;\n}\n","/**\n * Internal ECDSA encoding helpers. `@peculiar/x509` + WebCrypto use\n * different wire formats for ECDSA signatures; these helpers bridge\n * DER (ASN.1 SEQUENCE { r, s }) and IEEE P1363 (r||s fixed-width).\n *\n * NOT exported from the package root.\n */\n\nexport function ecdsaDerToIeee(der: Uint8Array, coordBytes: number): Uint8Array {\n let pos = 0;\n if (der[pos++] !== 0x30)\n throw new Error('invalid DER signature: expected SEQUENCE');\n pos++; // skip seq-length\n if (der[pos++] !== 0x02)\n throw new Error('invalid DER signature: expected INTEGER r');\n const rLen = der[pos++];\n let r = der.slice(pos, pos + rLen);\n pos += rLen;\n if (der[pos++] !== 0x02)\n throw new Error('invalid DER signature: expected INTEGER s');\n const sLen = der[pos++];\n let s = der.slice(pos, pos + sLen);\n if (r.length > coordBytes) r = r.slice(r.length - coordBytes);\n if (s.length > coordBytes) s = s.slice(s.length - coordBytes);\n const out = new Uint8Array(coordBytes * 2);\n out.set(r, coordBytes - r.length);\n out.set(s, coordBytes * 2 - s.length);\n return out;\n}\n","import { AsnConvert } from '@peculiar/asn1-schema';\nimport { CertificateList } from '@peculiar/asn1-x509';\nimport { X509Certificate } from '@peculiar/x509';\nimport type { Cache } from './Cache.js';\nimport { ecdsaDerToIeee } from './ecdsa-util.js';\nimport type { Fetcher } from './Fetcher.js';\n\nexport interface CrlFetcherOptions {\n fetcher?: Fetcher;\n cache?: Cache;\n}\n\nexport interface ParsedCrl {\n thisUpdate: Date;\n nextUpdate: Date;\n /** Uppercase hex serials from the CRL's revokedCertificates list. */\n revokedSerialsHex: string[];\n /**\n * Original DER bytes — retained so the caller can verify the CRL\n * signature against the issuer's public key without re-serializing.\n */\n der: Uint8Array;\n /** Parsed asn1 CertificateList for signature verification. */\n raw: CertificateList;\n}\n\n/**\n * Outcome of a serial-number lookup against a parsed CRL. Kept decoupled\n * from `RevocationResult` so `CrlFetcher` stays a pure sub-component;\n * `RevocationChecker` (Task 17) maps this into the public `RevocationResult`.\n */\nexport type CrlRevokedOutcome =\n | { status: 'good' }\n | { status: 'revoked'; revokedAt: Date; revocationReason?: string };\n\n/**\n * Private — NOT exported from the package root. Fetches a CRL from an\n * HTTP(S) URL via the injected `Fetcher`, parses `CertificateList`,\n * and returns normalized metadata. Signature verification happens in\n * Task 7 via `verifyCrl(parsed, issuerCert)` — kept separate so tests\n * can drive parsing and signature concerns independently.\n */\nexport class CrlFetcher {\n private readonly fetcher: Fetcher;\n private readonly cache: Cache | undefined;\n\n constructor(opts: CrlFetcherOptions = {}) {\n this.fetcher = opts.fetcher ?? globalThis.fetch.bind(globalThis);\n this.cache = opts.cache;\n }\n\n async fetchAndParse(url: string): Promise<ParsedCrl> {\n const response = await this.fetcher(url, { method: 'GET' });\n if (!response.ok) {\n throw new Error(`CRL fetch failed: HTTP ${response.status} for ${url}`);\n }\n const der = new Uint8Array(await response.arrayBuffer());\n const parsed = AsnConvert.parse(der, CertificateList);\n\n // `fetchAndParse` enforces RFC 5280 §5.1.2.5 — a CRL without\n // nextUpdate is not usable. The cache-hit path in\n // `fetchAndParseCached` deliberately skips this check: anything\n // that made it into the cache was valid when stored, and freshness\n // is enforced separately via `isStale`.\n if (!parsed.tbsCertList.nextUpdate) {\n throw new Error(`CRL missing nextUpdate — unsupported (RFC 5280 §5.1.2.5)`);\n }\n\n return normalizeCrl(parsed, der);\n }\n\n /**\n * Caching wrapper around `fetchAndParse`. On cache hit, re-parses the\n * stored DER bytes and returns a fresh `ParsedCrl` (parsing is idempotent\n * on DER). On miss, delegates to `fetchAndParse` and stores `parsed.der`\n * under key `crl:{url}` with `TTL = max(floor((nextUpdate - now) / 1000), 60)`\n * seconds — never less than 60s even if the CRL is already near/past\n * expiry, to avoid cache thrash while `isStale` handles the verdict.\n */\n async fetchAndParseCached(url: string, now: Date = new Date()): Promise<ParsedCrl> {\n const key = `crl:${url}`;\n if (this.cache) {\n const hit = await this.cache.get(key);\n if (hit) {\n const parsed = AsnConvert.parse(hit, CertificateList);\n return normalizeCrl(parsed, hit);\n }\n }\n const parsed = await this.fetchAndParse(url);\n if (this.cache) {\n const ttl = Math.max(\n Math.floor((parsed.nextUpdate.getTime() - now.getTime()) / 1000),\n 60\n );\n await this.cache.set(key, parsed.der, ttl);\n }\n return parsed;\n }\n\n /**\n * Verify the CRL signature against the issuer CA's public key.\n * RFC 5280 §5.1.1.3: signature is computed over the DER encoding of\n * `tbsCertList`. We prefer `tbsCertListRaw` when `@peculiar/asn1-schema`\n * exposes it (avoids a re-serialization roundtrip); fall back to\n * `AsnConvert.serialize(tbsCertList)` otherwise.\n *\n * ECDSA signatures in `CertificateList.signature` are DER-encoded\n * SEQUENCE { r, s } — WebCrypto `verify()` expects IEEE P1363 (r||s\n * fixed-width), so we convert first.\n */\n async verifyCrl(parsed: ParsedCrl, issuer: X509Certificate): Promise<void> {\n const tbsDer = parsed.raw.tbsCertListRaw\n ? new Uint8Array(parsed.raw.tbsCertListRaw)\n : new Uint8Array(AsnConvert.serialize(parsed.raw.tbsCertList));\n const sigDer = new Uint8Array(parsed.raw.signature);\n const sigIeee = ecdsaDerToIeee(sigDer, 32); // 32 bytes per coord for P-256\n\n // Re-import the issuer's public key via Node's global SubtleCrypto from\n // raw SPKI bytes. The `@peculiar/x509`-exported CryptoKey may belong to\n // a non-global provider (e.g. `@peculiar/webcrypto` in tests), and\n // Node's global `crypto.subtle.verify` rejects foreign-provider keys\n // with \"2nd argument is not of type CryptoKey\". Importing from SPKI\n // produces a key owned by the global provider — production-correct\n // and works under test.\n const spki = new Uint8Array(issuer.publicKey.rawData);\n const publicKey = await crypto.subtle.importKey(\n 'spki',\n spki,\n { name: 'ECDSA', namedCurve: 'P-256' },\n false,\n ['verify']\n );\n const ok = await crypto.subtle.verify(\n { name: 'ECDSA', hash: 'SHA-256' },\n publicKey,\n sigIeee as Uint8Array<ArrayBuffer>,\n tbsDer as Uint8Array<ArrayBuffer>\n );\n if (!ok) {\n throw new Error(\n `CRL signature verification failed against issuer ${issuer.subject}`\n );\n }\n }\n\n /**\n * Look up a certificate serial number against the CRL's revokedCertificates\n * list. Returns `{ status: 'revoked', revokedAt }` when found, `{ status: 'good' }`\n * otherwise. Hex comparison is normalized via `normalizeHexUnsignedInt` on\n * both sides so that ASN.1 sign padding and input formatting differences\n * (case, leading zeros) don't yield false negatives.\n *\n * `revocationReason` is intentionally omitted in 0.5.0 — decoding the\n * optional CRLReason extension on each `RevokedCertificate` is non-blocking\n * for a verdict and can be added without breaking the return shape.\n */\n isRevoked(parsed: ParsedCrl, serialHex: string): CrlRevokedOutcome {\n const normalized = normalizeHexUnsignedInt(serialHex);\n for (const revoked of parsed.raw.tbsCertList.revokedCertificates ?? []) {\n const candidateHex = normalizeHexUnsignedInt(\n bytesToHex(revoked.userCertificate)\n );\n if (candidateHex === normalized) {\n return {\n status: 'revoked',\n revokedAt: revoked.revocationDate.getTime(),\n };\n }\n }\n return { status: 'good' };\n }\n\n /**\n * True when `now` is past the CRL's `nextUpdate` — the CA has published\n * a new CRL (or should have) and this one should not be relied on.\n * RFC 5280 §5.1.2.5.\n */\n isStale(parsed: ParsedCrl, now: Date = new Date()): boolean {\n return now.getTime() > parsed.nextUpdate.getTime();\n }\n}\n\n/**\n * Derive the `ParsedCrl` shape from a decoded `CertificateList` plus its\n * original DER bytes. Extracted so both `fetchAndParse` and the cache-hit\n * branch of `fetchAndParseCached` produce identical results — DRY.\n *\n * `nextUpdate` is assumed present here; callers are responsible for the\n * RFC 5280 §5.1.2.5 check before invoking (the cache-hit path intentionally\n * skips it, since cached entries were validated at store time).\n */\nfunction normalizeCrl(parsed: CertificateList, der: Uint8Array): ParsedCrl {\n const thisUpdate = parsed.tbsCertList.thisUpdate.getTime();\n const nextUpdate = parsed.tbsCertList.nextUpdate!.getTime();\n const revokedSerialsHex =\n parsed.tbsCertList.revokedCertificates?.map((r) =>\n normalizeHexUnsignedInt(bytesToHex(r.userCertificate))\n ) ?? [];\n return {\n thisUpdate,\n nextUpdate,\n revokedSerialsHex,\n der,\n raw: parsed,\n };\n}\n\n/**\n * Normalize a hex-encoded unsigned integer to canonical uppercase form\n * without the ASN.1-mandated leading 0x00 sign byte. Using `BigInt` strips\n * *only* the leading zeros that would make the value larger than itself —\n * so `00AF01` → `AF01` but `0B01` stays `B01` and `0A` stays `A`. The prior\n * `.replace(/^0+/, '')` over-stripped any run of leading zeros including\n * legitimate nibble-level zeros, yielding intermittent compare misses when\n * a serial happened to begin with `0x0X` for non-zero X.\n */\nfunction normalizeHexUnsignedInt(hex: string): string {\n const clean = hex.replace(/[^0-9a-fA-F]/g, '');\n if (clean.length === 0) return '';\n return BigInt('0x' + clean).toString(16).toUpperCase();\n}\n\n/** Hex-encode raw bytes. Node's `Buffer` would work but isn't in the TS lib without `@types/node`. */\nfunction bytesToHex(bytes: ArrayBuffer | Uint8Array): string {\n const view = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n let out = '';\n for (let i = 0; i < view.length; i++) {\n out += view[i].toString(16).padStart(2, '0');\n }\n return out;\n}\n","var AcceptableResponses_1;\nimport { __decorate } from \"tslib\";\nimport { AsnPropTypes, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nlet AcceptableResponses = AcceptableResponses_1 = class AcceptableResponses extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, AcceptableResponses_1.prototype);\n }\n};\nAcceptableResponses = AcceptableResponses_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: AsnPropTypes.ObjectIdentifier })\n], AcceptableResponses);\nexport { AcceptableResponses };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, AsnPropTypes } from \"@peculiar/asn1-schema\";\nlet ArchiveCutoff = class ArchiveCutoff {\n constructor(value = new Date()) {\n this.value = value;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], ArchiveCutoff.prototype, \"value\", void 0);\nArchiveCutoff = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], ArchiveCutoff);\nexport { ArchiveCutoff };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, AsnPropTypes } from \"@peculiar/asn1-schema\";\nlet ExtendedRevoke = class ExtendedRevoke {\n constructor(value = null) {\n this.value = value;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Null })\n], ExtendedRevoke.prototype, \"value\", void 0);\nExtendedRevoke = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], ExtendedRevoke);\nexport { ExtendedRevoke };\n","import { OctetString } from \"@peculiar/asn1-schema\";\nexport class Nonce extends OctetString {\n}\n","var PreferredSignatureAlgorithms_1;\nimport { __decorate } from \"tslib\";\nimport { AsnProp, AsnArray, AsnType, AsnTypeTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier } from \"@peculiar/asn1-x509\";\nexport class PreferredSignatureAlgorithm {\n constructor(params = {}) {\n this.sigIdentifier = new AlgorithmIdentifier();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], PreferredSignatureAlgorithm.prototype, \"sigIdentifier\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier, optional: true })\n], PreferredSignatureAlgorithm.prototype, \"certIdentifier\", void 0);\nlet PreferredSignatureAlgorithms = PreferredSignatureAlgorithms_1 = class PreferredSignatureAlgorithms extends AsnArray {\n constructor(items) {\n super(items);\n Object.setPrototypeOf(this, PreferredSignatureAlgorithms_1.prototype);\n }\n};\nPreferredSignatureAlgorithms = PreferredSignatureAlgorithms_1 = __decorate([\n AsnType({ type: AsnTypeTypes.Sequence, itemType: PreferredSignatureAlgorithm })\n], PreferredSignatureAlgorithms);\nexport { PreferredSignatureAlgorithms };\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { AuthorityInfoAccessSyntax, Name } from \"@peculiar/asn1-x509\";\nexport class ServiceLocator {\n constructor(params = {}) {\n this.issuer = new Name();\n this.locator = new AuthorityInfoAccessSyntax();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: Name })\n], ServiceLocator.prototype, \"issuer\", void 0);\n__decorate([\n AsnProp({ type: AuthorityInfoAccessSyntax })\n], ServiceLocator.prototype, \"locator\", void 0);\n","export * from \"./acceptable_responses\";\nexport * from \"./archive_cutoff\";\nexport * from \"./extended_revoke\";\nexport * from \"./nonce\";\nexport * from \"./preferred_signature_algorithms\";\nexport * from \"./service_locator\";\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, OctetString } from \"@peculiar/asn1-schema\";\nimport { Name } from \"@peculiar/asn1-x509\";\nexport class KeyHash extends OctetString {\n}\nlet ResponderID = class ResponderID {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: Name, context: 1 })\n], ResponderID.prototype, \"byName\", void 0);\n__decorate([\n AsnProp({ type: KeyHash, context: 2 })\n], ResponderID.prototype, \"byKey\", void 0);\nResponderID = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], ResponderID);\nexport { ResponderID };\n","import { __decorate } from \"tslib\";\nimport { AlgorithmIdentifier } from \"@peculiar/asn1-x509\";\nimport { AsnProp, AsnPropTypes, AsnIntegerArrayBufferConverter, OctetString, } from \"@peculiar/asn1-schema\";\nexport class CertID {\n constructor(params = {}) {\n this.hashAlgorithm = new AlgorithmIdentifier();\n this.issuerNameHash = new OctetString();\n this.issuerKeyHash = new OctetString();\n this.serialNumber = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], CertID.prototype, \"hashAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: OctetString })\n], CertID.prototype, \"issuerNameHash\", void 0);\n__decorate([\n AsnProp({ type: OctetString })\n], CertID.prototype, \"issuerKeyHash\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter })\n], CertID.prototype, \"serialNumber\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { CRLReason } from \"@peculiar/asn1-x509\";\nexport class RevokedInfo {\n constructor(params = {}) {\n this.revocationTime = new Date();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], RevokedInfo.prototype, \"revocationTime\", void 0);\n__decorate([\n AsnProp({ type: CRLReason, context: 0, optional: true })\n], RevokedInfo.prototype, \"revocationReason\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnType, AsnTypeTypes, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { RevokedInfo } from \"./revoked_info\";\nlet CertStatus = class CertStatus {\n constructor(params = {}) {\n Object.assign(this, params);\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.Null, context: 0, implicit: true })\n], CertStatus.prototype, \"good\", void 0);\n__decorate([\n AsnProp({ type: RevokedInfo, context: 1, implicit: true })\n], CertStatus.prototype, \"revoked\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Null, context: 2, implicit: true })\n], CertStatus.prototype, \"unknown\", void 0);\nCertStatus = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], CertStatus);\nexport { CertStatus };\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { CertID } from \"./cert_id\";\nimport { Extension } from \"@peculiar/asn1-x509\";\nimport { CertStatus } from \"./cert_status\";\nexport class SingleResponse {\n constructor(params = {}) {\n this.certID = new CertID();\n this.certStatus = new CertStatus();\n this.thisUpdate = new Date();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: CertID })\n], SingleResponse.prototype, \"certID\", void 0);\n__decorate([\n AsnProp({ type: CertStatus })\n], SingleResponse.prototype, \"certStatus\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], SingleResponse.prototype, \"thisUpdate\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime, context: 0, optional: true })\n], SingleResponse.prototype, \"nextUpdate\", void 0);\n__decorate([\n AsnProp({ type: Extension, context: 1, repeated: \"sequence\", optional: true })\n], SingleResponse.prototype, \"singleExtensions\", void 0);\n","export var Version;\n(function (Version) {\n Version[Version[\"v1\"] = 0] = \"v1\";\n})(Version || (Version = {}));\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { Extension } from \"@peculiar/asn1-x509\";\nimport { ResponderID } from \"./responder_id\";\nimport { SingleResponse } from \"./single_response\";\nimport { Version } from \"./types\";\nexport class ResponseData {\n constructor(params = {}) {\n this.version = Version.v1;\n this.responderID = new ResponderID();\n this.producedAt = new Date();\n this.responses = [];\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, context: 0, defaultValue: Version.v1 })\n], ResponseData.prototype, \"version\", void 0);\n__decorate([\n AsnProp({ type: ResponderID })\n], ResponseData.prototype, \"responderID\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.GeneralizedTime })\n], ResponseData.prototype, \"producedAt\", void 0);\n__decorate([\n AsnProp({ type: SingleResponse, repeated: \"sequence\" })\n], ResponseData.prototype, \"responses\", void 0);\n__decorate([\n AsnProp({ type: Extension, repeated: \"sequence\", context: 1, optional: true })\n], ResponseData.prototype, \"responseExtensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier, Certificate } from \"@peculiar/asn1-x509\";\nimport { ResponseData } from \"./response_data\";\nexport class BasicOCSPResponse {\n constructor(params = {}) {\n this.tbsResponseData = new ResponseData();\n this.signatureAlgorithm = new AlgorithmIdentifier();\n this.signature = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: ResponseData, raw: true })\n], BasicOCSPResponse.prototype, \"tbsResponseData\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], BasicOCSPResponse.prototype, \"signatureAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], BasicOCSPResponse.prototype, \"signature\", void 0);\n__decorate([\n AsnProp({ type: Certificate, repeated: \"sequence\", optional: true, context: 0 })\n], BasicOCSPResponse.prototype, \"certs\", void 0);\n","import { id_kp, id_ad_ocsp } from \"@peculiar/asn1-x509\";\nexport const id_kp_OCSPSigning = `${id_kp}.9`;\nexport const id_pkix_ocsp = `${id_ad_ocsp}`;\nexport const id_pkix_ocsp_basic = `${id_pkix_ocsp}.1`;\nexport const id_pkix_ocsp_nonce = `${id_pkix_ocsp}.2`;\nexport const id_pkix_ocsp_crl = `${id_pkix_ocsp}.3`;\nexport const id_pkix_ocsp_response = `${id_pkix_ocsp}.4`;\nexport const id_pkix_ocsp_nocheck = `${id_pkix_ocsp}.5`;\nexport const id_pkix_ocsp_archive_cutoff = `${id_pkix_ocsp}.6`;\nexport const id_pkix_ocsp_service_locator = `${id_pkix_ocsp}.7`;\nexport const id_pkix_ocsp_pref_sig_algs = `${id_pkix_ocsp}.8`;\nexport const id_pkix_ocsp_extended_revoke = `${id_pkix_ocsp}.9`;\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { AlgorithmIdentifier, Certificate } from \"@peculiar/asn1-x509\";\nexport class Signature {\n constructor(params = {}) {\n this.signatureAlgorithm = new AlgorithmIdentifier();\n this.signature = new ArrayBuffer(0);\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], Signature.prototype, \"signatureAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], Signature.prototype, \"signature\", void 0);\n__decorate([\n AsnProp({ type: Certificate, repeated: \"sequence\", optional: true, context: 0 })\n], Signature.prototype, \"certs\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { CertID } from \"./cert_id\";\nimport { Extension } from \"@peculiar/asn1-x509\";\nexport class Request {\n constructor(params = {}) {\n this.reqCert = new CertID();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: CertID })\n], Request.prototype, \"reqCert\", void 0);\n__decorate([\n AsnProp({ type: Extension, repeated: \"sequence\", optional: true })\n], Request.prototype, \"singleRequestExtensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { GeneralName, Extension } from \"@peculiar/asn1-x509\";\nimport { Request } from \"./request\";\nimport { Version } from \"./types\";\nexport class TBSRequest {\n constructor(params = {}) {\n this.version = Version.v1;\n this.requestList = [];\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, context: 0, defaultValue: Version.v1 })\n], TBSRequest.prototype, \"version\", void 0);\n__decorate([\n AsnProp({ type: GeneralName, context: 1, optional: true })\n], TBSRequest.prototype, \"requestorName\", void 0);\n__decorate([\n AsnProp({ type: Request, repeated: \"sequence\" })\n], TBSRequest.prototype, \"requestList\", void 0);\n__decorate([\n AsnProp({ type: Extension, context: 2, optional: true, repeated: \"sequence\" })\n], TBSRequest.prototype, \"requestExtensions\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp } from \"@peculiar/asn1-schema\";\nimport { Signature } from \"./signature\";\nimport { TBSRequest } from \"./tbs_request\";\nexport class OCSPRequest {\n constructor(params = {}) {\n this.tbsRequest = new TBSRequest();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: TBSRequest, raw: true })\n], OCSPRequest.prototype, \"tbsRequest\", void 0);\n__decorate([\n AsnProp({ type: Signature, optional: true, context: 0 })\n], OCSPRequest.prototype, \"optionalSignature\", void 0);\n","export var OCSPResponseStatus;\n(function (OCSPResponseStatus) {\n OCSPResponseStatus[OCSPResponseStatus[\"successful\"] = 0] = \"successful\";\n OCSPResponseStatus[OCSPResponseStatus[\"malformedRequest\"] = 1] = \"malformedRequest\";\n OCSPResponseStatus[OCSPResponseStatus[\"internalError\"] = 2] = \"internalError\";\n OCSPResponseStatus[OCSPResponseStatus[\"tryLater\"] = 3] = \"tryLater\";\n OCSPResponseStatus[OCSPResponseStatus[\"sigRequired\"] = 5] = \"sigRequired\";\n OCSPResponseStatus[OCSPResponseStatus[\"unauthorized\"] = 6] = \"unauthorized\";\n})(OCSPResponseStatus || (OCSPResponseStatus = {}));\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes, OctetString } from \"@peculiar/asn1-schema\";\nexport class ResponseBytes {\n constructor(params = {}) {\n this.responseType = \"\";\n this.response = new OctetString();\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], ResponseBytes.prototype, \"responseType\", void 0);\n__decorate([\n AsnProp({ type: OctetString })\n], ResponseBytes.prototype, \"response\", void 0);\n","import { __decorate } from \"tslib\";\nimport { AsnProp, AsnPropTypes } from \"@peculiar/asn1-schema\";\nimport { OCSPResponseStatus } from \"./ocsp_response_status\";\nimport { ResponseBytes } from \"./response_bytes\";\nexport class OCSPResponse {\n constructor(params = {}) {\n this.responseStatus = OCSPResponseStatus.successful;\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Enumerated })\n], OCSPResponse.prototype, \"responseStatus\", void 0);\n__decorate([\n AsnProp({ type: ResponseBytes, context: 0, optional: true })\n], OCSPResponse.prototype, \"responseBytes\", void 0);\n","export * from \"./extensions\";\nexport * from \"./basic_ocsp_response\";\nexport * from \"./cert_id\";\nexport * from \"./cert_status\";\nexport * from \"./object_identifiers\";\nexport * from \"./ocsp_request\";\nexport * from \"./ocsp_response_status\";\nexport * from \"./ocsp_response\";\nexport * from \"./request\";\nexport * from \"./responder_id\";\nexport * from \"./response_bytes\";\nexport * from \"./response_data\";\nexport * from \"./revoked_info\";\nexport * from \"./signature\";\nexport * from \"./single_response\";\nexport * from \"./tbs_request\";\nexport * from \"./types\";\n","import { AsnConvert, OctetString } from '@peculiar/asn1-schema';\nimport {\n BasicOCSPResponse,\n CertID,\n OCSPRequest,\n OCSPResponse,\n Request,\n TBSRequest,\n} from '@peculiar/asn1-ocsp';\nimport { AlgorithmIdentifier, SubjectPublicKeyInfo } from '@peculiar/asn1-x509';\nimport { ExtendedKeyUsageExtension, X509Certificate } from '@peculiar/x509';\nimport type { Cache } from './Cache.js';\nimport { ChainBuilder } from './ChainBuilder.js';\nimport { ecdsaDerToIeee } from './ecdsa-util.js';\nimport type { Fetcher } from './Fetcher.js';\nimport type { RevocationResult } from './revocation-types.js';\n\nexport interface OcspClientOptions {\n fetcher?: Fetcher;\n cache?: Cache;\n}\n\nexport interface ExtractVerdictOpts {\n /** Maximum allowed age of the OCSP response's `thisUpdate`. Default: 7 days. */\n maxResponseAgeMs?: number;\n}\n\nconst DEFAULT_MAX_RESPONSE_AGE_MS = 7 * 24 * 3600 * 1000;\n\n/**\n * Parsed OCSP response envelope. Holds both the decoded `BasicOCSPResponse`\n * (for verification and verdict extraction) and the raw DER bytes (used by\n * the Task 16 caching path). NOT exported from the package root.\n */\nexport interface OcspResponseEnvelope {\n basic: BasicOCSPResponse;\n responseDer: Uint8Array;\n}\n\n/**\n * Private — NOT exported from the package root. Builds OCSP requests, POSTs\n * them to the responder URL via the injected `Fetcher`, parses and verifies\n * `BasicOCSPResponse`. Request-verify logic ships across Tasks 11–16; this\n * module currently exposes `buildRequest` only.\n */\nexport class OcspClient {\n private readonly fetcher: Fetcher;\n private readonly cache: Cache | undefined;\n\n constructor(opts: OcspClientOptions = {}) {\n this.fetcher = opts.fetcher ?? globalThis.fetch.bind(globalThis);\n this.cache = opts.cache;\n }\n\n /**\n * Build a DER-encoded OCSPRequest for (subjectCert, issuerCert).\n * `optionalSignature` is omitted (RFC 6960 §4.1 — responders MUST accept\n * unsigned requests; signing is an interop footgun).\n *\n * CertID uses SHA-1 by default because every real-world OCSP responder\n * still accepts it (RFC 6960 default). issuerNameHash covers the DER-\n * encoded Name; issuerKeyHash covers the raw BIT STRING value of the\n * issuer's SubjectPublicKeyInfo.subjectPublicKey — NOT the full SPKI.\n */\n async buildRequest(\n subjectCert: X509Certificate,\n issuerCert: X509Certificate\n ): Promise<Uint8Array> {\n const issuerNameDer = new Uint8Array(issuerCert.subjectName.toArrayBuffer());\n const issuerNameHashBytes = new Uint8Array(\n await crypto.subtle.digest('SHA-1', issuerNameDer)\n );\n\n const issuerKeyHashBytes = await this.computeIssuerKeyHash(issuerCert);\n\n const certId = new CertID({\n hashAlgorithm: new AlgorithmIdentifier({ algorithm: '1.3.14.3.2.26' /* sha1 */ }),\n issuerNameHash: new OctetString(issuerNameHashBytes),\n issuerKeyHash: new OctetString(issuerKeyHashBytes),\n serialNumber: hexToBigIntBytes(subjectCert.serialNumber).buffer as ArrayBuffer,\n });\n\n const request = new OCSPRequest({\n tbsRequest: new TBSRequest({\n requestList: [new Request({ reqCert: certId })],\n }),\n });\n return new Uint8Array(AsnConvert.serialize(request));\n }\n\n /**\n * POST a DER-encoded OCSP request to the responder URL, parse the reply,\n * and return the decoded `BasicOCSPResponse` plus the raw DER (for later\n * caching).\n *\n * Throws on non-ok HTTP, on non-successful `responseStatus`, or on any\n * `responseType` other than `id-pkix-ocsp-basic` (1.3.6.1.5.5.7.48.1.1).\n * Signature verification is deferred to `verifyResponse` (Task 13).\n */\n async sendRequest(\n url: string,\n requestDer: Uint8Array\n ): Promise<OcspResponseEnvelope> {\n const response = await this.fetcher(url, {\n method: 'POST',\n headers: { 'content-type': 'application/ocsp-request' },\n body: requestDer as Uint8Array<ArrayBuffer>,\n });\n if (!response.ok) {\n throw new Error(`OCSP fetch failed: HTTP ${response.status} for ${url}`);\n }\n const responseDer = new Uint8Array(await response.arrayBuffer());\n const parsed = AsnConvert.parse(responseDer, OCSPResponse);\n if (parsed.responseStatus !== 0) {\n throw new Error(\n `OCSP non-successful responseStatus=${parsed.responseStatus} for ${url}`\n );\n }\n if (\n !parsed.responseBytes ||\n parsed.responseBytes.responseType !== '1.3.6.1.5.5.7.48.1.1'\n ) {\n throw new Error(`OCSP response is not id-pkix-ocsp-basic`);\n }\n // `responseBytes.response` is an `OctetString` (ArrayBufferView).\n // Copy through `.buffer` so the DER bytes are unwrapped regardless of\n // the view's byteOffset/byteLength.\n const basic = AsnConvert.parse(\n new Uint8Array(parsed.responseBytes.response.buffer),\n BasicOCSPResponse\n );\n return { basic, responseDer };\n }\n\n /**\n * Verify the OCSP response signature per RFC 6960 §4.2.2.2. Two allowed\n * signer cases:\n *\n * 1. Directly issuer-signed — signature verifies against `issuerCert`.\n * 2. Responder sub-cert — one of the embedded `BasicOCSPResponse.certs`\n * chains to `issuerCert` (via `ChainBuilder`) AND asserts the\n * `id-kp-OCSPSigning` EKU (OID `1.3.6.1.5.5.7.3.9`).\n *\n * If neither path closes, throw. Responder sub-cert revocation is NOT\n * checked in A.2 (per spec §7.5) — the `id-pkix-ocsp-nocheck` extension\n * is irrelevant here because we never recurse.\n */\n async verifyResponse(\n envelope: OcspResponseEnvelope,\n issuerCert: X509Certificate\n ): Promise<void> {\n const { basic } = envelope;\n // Prefer the raw DER bytes captured at parse time (avoids a\n // re-serialization roundtrip). Mirrors the `tbsCertListRaw` pattern\n // in `CrlFetcher.verifyCrl`.\n const tbsDer = basic.tbsResponseDataRaw\n ? new Uint8Array(basic.tbsResponseDataRaw)\n : new Uint8Array(AsnConvert.serialize(basic.tbsResponseData));\n\n // Case 1: direct issuer signature.\n try {\n await verifySig(basic, tbsDer, issuerCert);\n return;\n } catch {\n // fall through to responder sub-cert case\n }\n\n // Case 2: responder sub-cert. Build candidate set from embedded certs.\n const embeddedCerts: X509Certificate[] = (basic.certs ?? []).map(\n (asn) =>\n new X509Certificate(\n new Uint8Array(AsnConvert.serialize(asn)) as Uint8Array<ArrayBuffer>\n )\n );\n if (embeddedCerts.length === 0) {\n throw new Error(\n 'OCSP response signature did not match issuer and no responder certs were embedded'\n );\n }\n\n // Track whether we saw an embedded cert but rejected it for missing\n // OCSPSigning EKU — so we can surface that specific reason.\n let sawNonResponderCandidate = false;\n const builder = new ChainBuilder();\n for (const candidate of embeddedCerts) {\n const eku = candidate.getExtension(ExtendedKeyUsageExtension);\n if (!eku || !eku.usages.includes('1.3.6.1.5.5.7.3.9')) {\n sawNonResponderCandidate = true;\n continue;\n }\n // Candidate MUST chain to the issuer. No intermediates in A.2 —\n // OCSP responder sub-certs are issued directly by the CA.\n try {\n await builder.build(candidate, [issuerCert], []);\n } catch {\n continue;\n }\n try {\n await verifySig(basic, tbsDer, candidate);\n return;\n } catch {\n continue;\n }\n }\n if (sawNonResponderCandidate) {\n throw new Error(\n 'OCSP response signed by a cert lacking id-kp-OCSPSigning EKU'\n );\n }\n throw new Error(\n 'OCSP response signature could not be verified by any responder candidate'\n );\n }\n\n /**\n * Extract a `RevocationResult` from a verified `OcspResponseEnvelope` for\n * `subjectCert`. Locates the matching `SingleResponse` by serial number,\n * enforces an `opts.maxResponseAgeMs` staleness bound against `thisUpdate`\n * (default 7 days per RFC 6960 guidance), then maps the three-way\n * `CertStatus` CHOICE into `RevocationResult`.\n *\n * Signature/chain verification is `verifyResponse`'s job — this method\n * assumes the envelope has already been verified.\n *\n * Throws when no matching SingleResponse is found or when the response is\n * stale. Callers (e.g. `RevocationChecker`) map stale errors into\n * `RevocationCheckFailedError` per policy.\n */\n extractVerdict(\n envelope: OcspResponseEnvelope,\n subjectCert: X509Certificate,\n now: Date,\n opts: ExtractVerdictOpts = {}\n ): RevocationResult {\n const maxAge = opts.maxResponseAgeMs ?? DEFAULT_MAX_RESPONSE_AGE_MS;\n const subjectSerialNorm = normalizeHexUnsignedInt(subjectCert.serialNumber);\n\n const single = envelope.basic.tbsResponseData.responses.find((r) => {\n const serialHex = bytesToHex(r.certID.serialNumber);\n return normalizeHexUnsignedInt(serialHex) === subjectSerialNorm;\n });\n if (!single) {\n throw new Error(\n `OCSP response does not contain an entry for subject serial ${subjectCert.serialNumber}`\n );\n }\n\n const thisUpdate = single.thisUpdate;\n if (now.getTime() - thisUpdate.getTime() > maxAge) {\n throw new Error(\n `OCSP response is stale: thisUpdate=${thisUpdate.toISOString()}, now=${now.toISOString()}`\n );\n }\n\n // CertStatus is a CHOICE — exactly one of `good`, `revoked`, `unknown`\n // is populated. `good` and `unknown` are `null` values so the presence\n // check MUST use `!== undefined` (truthy-check would miss them).\n const status = single.certStatus;\n if (status.good !== undefined) {\n return { status: 'good', source: 'ocsp', checkedAt: now };\n }\n if (status.revoked !== undefined) {\n const reason = status.revoked.revocationReason;\n return {\n status: 'revoked',\n source: 'ocsp',\n revokedAt: status.revoked.revocationTime,\n revocationReason: reason !== undefined ? String(reason) : undefined,\n checkedAt: now,\n };\n }\n return { status: 'unknown', source: 'ocsp', checkedAt: now };\n }\n\n /**\n * End-to-end OCSP check with caching per spec §7.4.\n *\n * Cache key: `ocsp:{hex(issuerKeyHash)}:{UPPERCASE subjectSerial}`. The\n * key-hash component matches RFC 6960 CertID.issuerKeyHash (SHA-1 over\n * `SubjectPublicKeyInfo.subjectPublicKey`), so the same subject+issuer\n * pair always maps to the same key regardless of issuer-cert reissuance.\n *\n * Cache hits are re-verified and re-extracted — never trust stored bytes\n * blindly. Only the inner `BasicOCSPResponse` DER is cached (not the\n * outer `OCSPResponse` envelope), matching the parsed form `verifyResponse`\n * consumes.\n *\n * TTL: `clamp(floor((nextUpdate - now) / 1000), 60, 3600)` seconds when\n * `nextUpdate` is present; otherwise 3600s. The 1-hour ceiling caps how\n * stale a cached verdict can be, and the 60s floor avoids immediate\n * re-fetch storms when a responder publishes very short validity windows.\n *\n * Single-flight concurrency is NOT implemented (A.2 spec: naive re-check\n * on concurrent miss is acceptable for the in-process `InMemoryCache`).\n */\n async checkCached(\n subjectCert: X509Certificate,\n issuerCert: X509Certificate,\n url: string,\n now: Date = new Date()\n ): Promise<RevocationResult> {\n const keyHash = await this.computeIssuerKeyHash(issuerCert);\n const keyHashHex = bytesToHex(keyHash);\n const cacheKey = `ocsp:${keyHashHex}:${subjectCert.serialNumber.toUpperCase()}`;\n\n if (this.cache) {\n const hit = await this.cache.get(cacheKey);\n if (hit) {\n const envelope: OcspResponseEnvelope = {\n basic: AsnConvert.parse(hit, BasicOCSPResponse),\n responseDer: hit,\n };\n // Still verify + extract on cache hit — never trust stored bytes blindly.\n await this.verifyResponse(envelope, issuerCert);\n return this.extractVerdict(envelope, subjectCert, now);\n }\n }\n\n const requestDer = await this.buildRequest(subjectCert, issuerCert);\n const envelope = await this.sendRequest(url, requestDer);\n await this.verifyResponse(envelope, issuerCert);\n const verdict = this.extractVerdict(envelope, subjectCert, now);\n\n if (this.cache) {\n const single = envelope.basic.tbsResponseData.responses[0];\n const nextUpdate = single?.nextUpdate?.getTime();\n const maxTtlSec = 3600;\n const ttl =\n nextUpdate !== undefined\n ? Math.max(\n Math.min(\n Math.floor((nextUpdate - now.getTime()) / 1000),\n maxTtlSec\n ),\n 60\n )\n : maxTtlSec;\n await this.cache.set(\n cacheKey,\n new Uint8Array(AsnConvert.serialize(envelope.basic)),\n ttl\n );\n }\n return verdict;\n }\n\n /**\n * SHA-1 hash of the issuer's `SubjectPublicKeyInfo.subjectPublicKey` BIT\n * STRING value — the same key hash `buildRequest` embeds in `CertID`. Used\n * as a stable component of the cache key so reissuing an issuer cert with\n * the same key doesn't invalidate cached verdicts.\n */\n private async computeIssuerKeyHash(\n issuerCert: X509Certificate\n ): Promise<Uint8Array> {\n const spki = AsnConvert.parse(\n new Uint8Array(issuerCert.publicKey.rawData),\n SubjectPublicKeyInfo\n );\n return new Uint8Array(\n await crypto.subtle.digest('SHA-1', new Uint8Array(spki.subjectPublicKey))\n );\n }\n}\n\n/**\n * Verify `BasicOCSPResponse.signature` against `signer.publicKey`. Uses the\n * SPKI re-import dance so the WebCrypto key is owned by the global provider\n * (Node rejects foreign-provider CryptoKeys in `crypto.subtle.verify`).\n *\n * ECDSA signatures are DER-encoded SEQUENCE { r, s } in the ASN.1 structure\n * — WebCrypto `verify()` wants IEEE P1363 r||s fixed-width, so we convert.\n */\nasync function verifySig(\n basic: BasicOCSPResponse,\n tbsDer: Uint8Array,\n signer: X509Certificate\n): Promise<void> {\n const sigIeee = ecdsaDerToIeee(new Uint8Array(basic.signature), 32);\n const spki = new Uint8Array(signer.publicKey.rawData);\n const publicKey = await crypto.subtle.importKey(\n 'spki',\n spki,\n { name: 'ECDSA', namedCurve: 'P-256' },\n false,\n ['verify']\n );\n const ok = await crypto.subtle.verify(\n { name: 'ECDSA', hash: 'SHA-256' },\n publicKey,\n sigIeee as Uint8Array<ArrayBuffer>,\n tbsDer as Uint8Array<ArrayBuffer>\n );\n if (!ok) {\n throw new Error(\n `OCSP signature did not verify against signer ${signer.subject}`\n );\n }\n}\n\n/**\n * Normalize a hex-encoded unsigned integer to canonical uppercase form\n * without the ASN.1-mandated leading 0x00 sign byte. Mirrors the helper in\n * `CrlFetcher.ts` so OCSP and CRL paths apply identical serial-compare\n * semantics — DRY-by-convention to keep this sub-module self-contained.\n */\nfunction normalizeHexUnsignedInt(hex: string): string {\n const clean = hex.replace(/[^0-9a-fA-F]/g, '');\n if (clean.length === 0) return '';\n return BigInt('0x' + clean)\n .toString(16)\n .toUpperCase();\n}\n\n/** Hex-encode raw bytes. Node's `Buffer` would work but isn't in the TS lib without `@types/node`. */\nfunction bytesToHex(bytes: ArrayBuffer | Uint8Array): string {\n const view = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n let out = '';\n for (let i = 0; i < view.length; i++) {\n out += view[i].toString(16).padStart(2, '0');\n }\n return out;\n}\n\n/** Convert a hex string (optionally with leading zeros) into the big-endian BigInteger bytes the ASN.1 layer wants. */\nfunction hexToBigIntBytes(hex: string): Uint8Array {\n const clean = hex.replace(/[^0-9a-fA-F]/g, '');\n const padded = clean.length % 2 === 0 ? clean : '0' + clean;\n const out = new Uint8Array(padded.length / 2);\n for (let i = 0; i < out.length; i++) {\n out[i] = parseInt(padded.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\n","import {\n AuthorityInfoAccessSyntax,\n CRLDistributionPoints,\n} from '@peculiar/asn1-x509';\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport { X509Certificate } from '@peculiar/x509';\nimport { RevocationCheckFailedError } from '../errors.js';\nimport type { Cache } from './Cache.js';\nimport { CrlFetcher } from './CrlFetcher.js';\nimport type { Fetcher } from './Fetcher.js';\nimport { OcspClient } from './OcspClient.js';\nimport type { RevocationResult } from './revocation-types.js';\n\nexport type RevocationPolicy = 'skip' | 'prefer' | 'require';\n\nexport interface RevocationCheckerOptions {\n policy: RevocationPolicy;\n fetcher?: Fetcher;\n cache?: Cache;\n}\n\n/**\n * Private — NOT exported from the package root. Coordinates OCSP + CRL\n * revocation checking per spec §7. Used only by `TrustEvaluator`.\n */\nexport class RevocationChecker {\n private readonly policy: RevocationPolicy;\n private readonly ocsp: OcspClient;\n private readonly crl: CrlFetcher;\n\n constructor(opts: RevocationCheckerOptions) {\n this.policy = opts.policy;\n this.ocsp = new OcspClient({ fetcher: opts.fetcher, cache: opts.cache });\n this.crl = new CrlFetcher({ fetcher: opts.fetcher, cache: opts.cache });\n }\n\n async check(\n subjectCert: X509Certificate,\n issuerCert: X509Certificate,\n now: Date = new Date()\n ): Promise<RevocationResult> {\n if (this.policy === 'skip') {\n return { status: 'good', source: 'none', checkedAt: now };\n }\n\n const hints = this.extractUrls(subjectCert);\n\n if (!hints.ocspUrl && hints.crlUrls.length === 0) {\n if (this.policy === 'require') {\n throw new RevocationCheckFailedError(\n `no revocation sources declared on ${subjectCert.subject}`\n );\n }\n return { status: 'unknown', source: 'none', checkedAt: now };\n }\n\n // OCSP first.\n if (hints.ocspUrl) {\n try {\n return await this.ocsp.checkCached(subjectCert, issuerCert, hints.ocspUrl, now);\n } catch (err) {\n // Fall through to CRL — but surface why, so a genuinely broken\n // OCSP path (bad signature, stale response, parse failure) is\n // diagnosable instead of silently downgrading to source='none'.\n console.warn(\n `[openid4vp] OCSP check failed for ${subjectCert.subject} via ${hints.ocspUrl}, falling back to CRL: ${(err as Error).message}`\n );\n }\n }\n\n // CRL fallback.\n for (const url of hints.crlUrls) {\n try {\n const parsed = await this.crl.fetchAndParseCached(url, now);\n await this.crl.verifyCrl(parsed, issuerCert);\n if (this.crl.isStale(parsed, now)) {\n if (this.policy === 'require') {\n throw new RevocationCheckFailedError(\n `CRL from ${url} is stale (nextUpdate=${parsed.nextUpdate.toISOString()})`\n );\n }\n continue;\n }\n const outcome = this.crl.isRevoked(parsed, subjectCert.serialNumber);\n if (outcome.status === 'revoked') {\n return {\n status: 'revoked',\n source: 'crl',\n revokedAt: outcome.revokedAt,\n revocationReason: outcome.revocationReason,\n checkedAt: now,\n };\n }\n return { status: 'good', source: 'crl', checkedAt: now };\n } catch (err) {\n if (err instanceof RevocationCheckFailedError) throw err;\n console.warn(\n `[openid4vp] CRL check failed for ${subjectCert.subject} via ${url}: ${(err as Error).message}`\n );\n continue;\n }\n }\n\n // All sources failed.\n if (this.policy === 'require') {\n throw new RevocationCheckFailedError(\n `all revocation sources failed for ${subjectCert.subject}`\n );\n }\n return { status: 'unknown', source: 'none', checkedAt: now };\n }\n\n private extractUrls(cert: X509Certificate): { ocspUrl?: string; crlUrls: string[] } {\n const ocspUrl = extractOcspUrl(cert);\n const crlUrls = extractCrlUrls(cert);\n return { ocspUrl, crlUrls };\n }\n}\n\nfunction extractOcspUrl(cert: X509Certificate): string | undefined {\n const ext = cert.extensions.find((e) => e.type === '1.3.6.1.5.5.7.1.1');\n if (!ext) return undefined;\n try {\n const aia = AsnConvert.parse(new Uint8Array(ext.value), AuthorityInfoAccessSyntax);\n for (const desc of aia) {\n if (desc.accessMethod === '1.3.6.1.5.5.7.48.1') {\n const uri = desc.accessLocation.uniformResourceIdentifier;\n if (uri) return uri;\n }\n }\n } catch {\n return undefined;\n }\n return undefined;\n}\n\nfunction extractCrlUrls(cert: X509Certificate): string[] {\n const ext = cert.extensions.find((e) => e.type === '2.5.29.31');\n if (!ext) return [];\n try {\n const cdp = AsnConvert.parse(new Uint8Array(ext.value), CRLDistributionPoints);\n const out: string[] = [];\n for (const dp of cdp) {\n const fullName = dp.distributionPoint?.fullName;\n if (!fullName) continue;\n for (const gn of fullName) {\n if (gn.uniformResourceIdentifier) out.push(gn.uniformResourceIdentifier);\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n","/**\n * Map ETSI `AdditionalServiceInformation` URIs to eIDAS Regulation\n * (EU 910/2014) Article 8 levels of assurance. Per spec §8.5, absence\n * of a mapping means `loa` is omitted from the provenance block\n * (NOT mapped to 'low' — we never synthesize LoAs we did not observe).\n *\n * Source: ETSI TS 119 612 v2.2.1 Annex D + Commission Implementing\n * Decision (EU) 2015/1505.\n */\n\nexport const LOA_MAPPING: Readonly<Record<string, 'substantial' | 'high'>> = Object.freeze({\n // Qualified electronic signature / seal — substantial + high are both\n // expressed via `qualified` in ETSI, not LoA. The LoA URIs below apply to\n // electronic-identification services (eIDAS Article 8 notified schemes).\n 'http://uri.etsi.org/TrstSvc/TrustedList/SvcInfoExt/eIDASnotified-substantial':\n 'substantial',\n 'http://uri.etsi.org/TrstSvc/TrustedList/SvcInfoExt/eIDASnotified-high':\n 'high',\n 'http://uri.etsi.org/TrstSvc/TrustedList/SvcInfoExt/eIDAS-substantial':\n 'substantial',\n 'http://uri.etsi.org/TrstSvc/TrustedList/SvcInfoExt/eIDAS-high':\n 'high',\n});\n\nexport function mapLoA(\n uris: readonly string[]\n): 'substantial' | 'high' | undefined {\n // `high` wins over `substantial` when both are present.\n let result: 'substantial' | 'high' | undefined;\n for (const uri of uris) {\n const mapped = LOA_MAPPING[uri];\n if (mapped === 'high') return 'high';\n if (mapped === 'substantial') result = 'substantial';\n }\n return result;\n}\n","import { mapLoA } from './lotl-loa-mapping.js';\nimport type { TspService } from './lotl-types.js';\n\n/**\n * Derive the `qualified` + `loa` fields from a `TspService` per spec §8.5.\n * Returned by `LotlTrustStore` when it builds `LotlAnchorMetadata` and by\n * `ProvenanceResolver` when it builds the provenance block — keeping the\n * derivation in one place guarantees the two views agree.\n */\nexport function deriveServiceMetadata(service: TspService): {\n qualified: boolean;\n loa?: 'substantial' | 'high';\n} {\n const qualified =\n service.serviceTypeIdentifier.endsWith('/CA/QC') &&\n service.serviceStatus.endsWith('/granted');\n const loa = mapLoA(service.additionalServiceInformationUris);\n return loa !== undefined ? { qualified, loa } : { qualified };\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport type { NationalTlSnapshot, TspService } from './lotl-types.js';\nimport { deriveServiceMetadata } from './service-metadata.js';\nimport { getSkiHex } from './x509-utils.js';\n\nexport interface ResolvedProvenance {\n readonly provenance: {\n readonly loa?: 'substantial' | 'high';\n readonly qualified: boolean;\n readonly country: string;\n readonly serviceName: string;\n };\n readonly trustedAuthorityIds: readonly string[];\n}\n\n/**\n * Private — NOT exported from the package root. Maps a LOTL-sourced anchor\n * cert to its ETSI TS 119 612 `TSPService` entry across all national TLs.\n * Spec §8.5 qualified derivation is deterministic; loa derivation falls\n * back to `undefined` when the service's `AdditionalServiceInformation`\n * URIs don't map to a known LoA.\n */\nexport class ProvenanceResolver {\n resolve(\n anchor: X509Certificate,\n nationalTls: readonly NationalTlSnapshot[]\n ): ResolvedProvenance | null {\n const anchorSki = getSkiHex(anchor);\n if (!anchorSki) return null;\n for (const tl of nationalTls) {\n for (const service of tl.services) {\n if (serviceMatches(service, anchorSki)) {\n return buildProvenance(service, anchorSki);\n }\n }\n }\n return null;\n }\n}\n\nfunction serviceMatches(service: TspService, anchorSki: string): boolean {\n for (const cert of service.certificates) {\n const ski = getSkiHex(cert);\n if (ski && ski === anchorSki) return true;\n }\n return false;\n}\n\nfunction buildProvenance(\n service: TspService,\n anchorSki: string\n): ResolvedProvenance {\n const derived = deriveServiceMetadata(service);\n const provenance: ResolvedProvenance['provenance'] = {\n country: service.country,\n serviceName: service.serviceName,\n ...derived,\n };\n return {\n provenance,\n trustedAuthorityIds: [anchorSki],\n };\n}\n","import {\n AuthorityKeyIdentifierExtension,\n X509Certificate,\n} from '@peculiar/x509';\nimport { RevokedCertificateError, TrustAnchorNotFoundError } from '../errors.js';\nimport type { Cache } from './Cache.js';\nimport { ChainBuilder, type ChainBuilderOptions } from './ChainBuilder.js';\nimport type { Fetcher } from './Fetcher.js';\nimport { RevocationChecker } from './RevocationChecker.js';\nimport type { TrustAnchor } from './TrustAnchor.js';\nimport type { TrustStore } from './TrustStore.js';\nimport type { NationalTlSnapshot } from './lotl-types.js';\nimport { certificatesEqual, getSkiHex } from './x509-utils.js';\n\nexport type RevocationPolicy = 'skip' | 'prefer' | 'require';\n\nexport interface TrustEvaluatorOptions extends ChainBuilderOptions {\n trustStore: TrustStore;\n revocationPolicy?: RevocationPolicy;\n fetcher?: Fetcher;\n cache?: Cache;\n}\n\nexport interface EvaluateContext {\n intermediates?: X509Certificate[];\n}\n\nexport interface TrustEvaluationResult {\n chain: X509Certificate[];\n anchor: TrustAnchor;\n revocationStatus: 'good' | 'revoked' | 'unknown' | 'skipped';\n revocationCheckedAt?: Date;\n revokedAt?: Date;\n revocationReason?: string;\n trustedAuthorityIds?: readonly string[];\n provenance?: {\n loa?: 'substantial' | 'high';\n qualified?: boolean;\n country?: string;\n serviceName?: string;\n };\n}\n\n/**\n * Private internal coordinator — NOT exported from the package root.\n * Orchestrates `TrustStore` + `ChainBuilder` + `RevocationChecker` (A.2)\n * (+ `ProvenanceResolver` in A.3). Signature is stable across A.1/A.2/A.3\n * so parsers don't need to change when later workstreams land.\n */\nexport class TrustEvaluator {\n private readonly trustStore: TrustStore;\n private readonly chainBuilder: ChainBuilder;\n private readonly revocationChecker: RevocationChecker;\n\n constructor(private readonly opts: TrustEvaluatorOptions) {\n this.trustStore = opts.trustStore;\n this.chainBuilder = new ChainBuilder(opts);\n const policy = opts.revocationPolicy ?? 'skip';\n // A.2: policy='prefer'/'require' now supported.\n this.revocationChecker = new RevocationChecker({\n policy,\n fetcher: opts.fetcher,\n cache: opts.cache,\n });\n }\n\n async evaluate(\n leaf: X509Certificate,\n context: EvaluateContext = {}\n ): Promise<TrustEvaluationResult> {\n const hint = deriveHint(leaf);\n const seen = new Set<string>();\n const anchors: TrustAnchor[] = [];\n const pushUnique = (batch: TrustAnchor[]) => {\n for (const a of batch) {\n const key = a.certificate.serialNumber;\n if (seen.has(key)) continue;\n seen.add(key);\n anchors.push(a);\n }\n };\n pushUnique(await this.trustStore.getAnchors(hint));\n // When the leaf points to an intermediate (not a root in the store),\n // the direct leaf hint won't resolve. Ask the store about each\n // supplied intermediate too so a chain can close through them.\n for (const inter of context.intermediates ?? []) {\n pushUnique(await this.trustStore.getAnchors(deriveHint(inter)));\n }\n if (anchors.length === 0) {\n throw new TrustAnchorNotFoundError(\n `no trust anchor for issuer=${hint.issuer ?? '(none)'}`\n );\n }\n const anchorCerts = anchors.map((a) => a.certificate);\n const chain = await this.chainBuilder.build(\n leaf,\n anchorCerts,\n context.intermediates ?? []\n );\n const terminusCert = chain[chain.length - 1];\n // Select the anchor the chain actually closed at by DER byte-identity —\n // NOT by serialNumber (collidable across CAs) and NOT by a silent\n // fallback to anchors[0], which would attribute a chain to an anchor it\n // did not terminate at. `ChainBuilder` guarantees the terminus is one of\n // `anchorCerts`, so a miss here is a broken invariant, not a valid input.\n const anchor = anchors.find((a) =>\n certificatesEqual(a.certificate, terminusCert)\n );\n if (!anchor) {\n throw new TrustAnchorNotFoundError(\n `chain terminus ${terminusCert.subject} does not match any trust anchor certificate`\n );\n }\n\n // Revocation check — runs against the leaf (chain[0]) with the\n // leaf's direct issuer (chain[1]) as the signing CA.\n const issuerForRevocation = chain.length > 1 ? chain[1] : terminusCert;\n const revocation = await this.revocationChecker.check(\n leaf,\n issuerForRevocation\n );\n\n if (revocation.status === 'revoked') {\n throw new RevokedCertificateError(\n `certificate ${leaf.subject} is revoked`,\n {\n serial: leaf.serialNumber,\n revokedAt: revocation.revokedAt!,\n reason: revocation.revocationReason,\n }\n );\n }\n\n const trustedAuthorityIds = deriveAuthorityIds(anchor);\n const provenance = await resolveProvenance(this.trustStore, anchor);\n\n return {\n chain,\n anchor,\n // skip-policy yields source='none'/status='good' — keep the A.1\n // 'skipped' contract. Otherwise surface 'good' | 'unknown' as-is.\n revocationStatus:\n revocation.source === 'none' && revocation.status === 'good'\n ? 'skipped'\n : revocation.status,\n revocationCheckedAt: revocation.checkedAt,\n trustedAuthorityIds,\n ...(provenance ? { provenance } : {}),\n };\n }\n}\n\nfunction deriveHint(leaf: X509Certificate) {\n const aki = leaf.getExtension(AuthorityKeyIdentifierExtension);\n const keyIdHex = aki?.keyId;\n const akiBytes = keyIdHex ? hexToBytes(keyIdHex) : undefined;\n return {\n issuer: leaf.issuer,\n aki: akiBytes,\n };\n}\n\nfunction hexToBytes(s: string): Uint8Array {\n const clean = s.replace(/[^0-9a-f]/gi, '');\n const out = new Uint8Array(clean.length / 2);\n for (let i = 0; i < out.length; i++) {\n out[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\nfunction deriveAuthorityIds(anchor: TrustAnchor): readonly string[] {\n if (anchor.trustedAuthorityIds && anchor.trustedAuthorityIds.length > 0) {\n return anchor.trustedAuthorityIds;\n }\n // Static-store fallback: synthesize from the anchor's SKI.\n const ski = getSkiHex(anchor.certificate);\n return ski ? [ski] : [];\n}\n\nasync function resolveProvenance(\n store: TrustStore,\n anchor: TrustAnchor\n): Promise<TrustEvaluationResult['provenance']> {\n if (anchor.source !== 'lotl') return undefined;\n const withTls = store as TrustStore & {\n getNationalTls?: () => Promise<readonly NationalTlSnapshot[]>;\n };\n if (typeof withTls.getNationalTls !== 'function') return undefined;\n try {\n const tls = await withTls.getNationalTls();\n const { ProvenanceResolver } = await import('./ProvenanceResolver.js');\n const resolved = new ProvenanceResolver().resolve(anchor.certificate, tls);\n return resolved?.provenance;\n } catch (err) {\n console.warn(\n `[openid4vp] provenance lookup failed for ${anchor.certificate.subject} — ${(err as Error).message}`\n );\n return undefined;\n }\n}\n","// Load the reflect-metadata polyfill before any module that transitively pulls\n// in @peculiar/x509 (→ tsyringe), which reads decorator metadata while its\n// module body evaluates.\n//\n// Being first in this file is NOT sufficient for the published bundles — the\n// bundler hoists external named imports above bare side-effect imports. The\n// build therefore also injects this same module ahead of the entry; see\n// `inject` in tsup.config.ts and tests/bundle-polyfill-order.test.ts.\nimport './reflect-polyfill';\n\nexport const VERSION = '0.12.0';\n\n// Builders\nexport { createAuthorizationRequest } from './authorization.js';\nexport { createSignedAuthorizationRequest } from './signed-authorization.js';\nexport {\n buildHaipQuery,\n validateHaipQuery,\n isHaipQuery,\n HAIP_DOCTYPE_NAMESPACES,\n buildCredentialSetQuery,\n validateCredentialSetQuery,\n} from './haip.js';\n\n// Parsers / verifiers\nexport { parsePresentation } from './presentation.js';\nexport { verifyPresentation, verifyAuthorizationResponse } from './verify.js';\nexport { decryptAuthorizationResponse } from './decrypt-response.js';\nexport {\n buildOid4vpSessionTranscript,\n buildOpenID4VPHandoverSessionTranscript,\n} from './crypto/session-transcript.js';\nexport { SdJwtParser } from './parsers/sd-jwt.parser.js';\nexport { MdocParser } from './parsers/mdoc.parser.js';\nexport type { ICredentialParser, ParseOptions } from './parsers/parser.interface.js';\n\n// Own errors\nexport {\n InvalidSignatureError,\n ExpiredCredentialError,\n UnsupportedFormatError,\n MalformedCredentialError,\n NonceValidationError,\n HaipValidationError,\n} from './errors.js';\nexport type { HaipValidationCode } from './errors.js';\n\n// Re-exports from @openeudi/dcql\nexport { DcqlValidationError, DcqlMatchError } from '@openeudi/dcql';\nexport type { DcqlValidationErrorCode } from '@openeudi/dcql';\nexport type { DcqlQuery, DcqlMatchResult, DcqlSubmission } from '@openeudi/dcql';\n\n// Own types\nexport type {\n CredentialFormat,\n CredentialClaims,\n PresentationResult,\n IssuerInfo,\n AuthorizationRequestInput,\n AuthorizationRequest,\n SignedAuthorizationRequestInput,\n SignedAuthorizationRequest,\n AuthorizationResponse,\n EncryptedResponse,\n VerifyOptions,\n VerifyAuthorizationResponseOptions,\n VerifyResult,\n HaipQueryInput,\n CredentialSetQueryInput,\n} from './types/index.js';\n\n// -------------------------------------------------------------------\n// 0.5.0 trust module — public plug interfaces and implementations.\n// TrustEvaluator, ChainBuilder, and EU_LOTL_SIGNING_ANCHORS are\n// intentionally NOT exported — they are internal.\n// -------------------------------------------------------------------\nexport type { TrustAnchor, LotlAnchorMetadata } from './trust/TrustAnchor.js';\nexport type { Fetcher } from './trust/Fetcher.js';\nexport { InMemoryCache, type Cache } from './trust/Cache.js';\nexport {\n StaticTrustStore,\n CompositeTrustStore,\n LotlTrustStore,\n type TrustStore,\n type TrustStoreHint,\n type TrustStoreInput,\n type LotlTrustStoreOptions,\n} from './trust/index.js';\n\n// Error classes added in 0.5.0\nexport {\n OpenID4VPError,\n TrustAnchorNotFoundError,\n CertificateChainError,\n RevokedCertificateError,\n RevocationCheckFailedError,\n LotlFetchError,\n LotlSignatureError,\n LotlConfigurationError,\n SignedRequestBuildError,\n UnsupportedJweError,\n DecryptionFailedError,\n MissingDecryptionKeyError,\n MissingVerifierEncryptionKeyError,\n MultipleCredentialsNotSupportedError,\n type ChainErrorReason,\n type SignedRequestBuildErrorCode,\n} from './errors.js';\n","import { v4 as uuidv4 } from 'uuid';\nimport type { DcqlQuery } from '@openeudi/dcql';\n\nimport type { AuthorizationRequestInput, AuthorizationRequest } from './types/authorization.js';\n\nexport function createAuthorizationRequest(\n input: AuthorizationRequestInput,\n query: DcqlQuery,\n): AuthorizationRequest {\n if (!input.clientId) throw new TypeError('clientId is required');\n if (!input.nonce) throw new TypeError('nonce is required');\n if (!input.responseUri) throw new TypeError('responseUri is required');\n\n const state = input.state ?? uuidv4();\n const responseMode = input.responseMode ?? 'direct_post';\n\n const params = new URLSearchParams({\n response_type: 'vp_token',\n response_mode: responseMode,\n response_uri: input.responseUri,\n client_id: input.clientId,\n nonce: input.nonce,\n state,\n dcql_query: JSON.stringify(query),\n });\n\n return {\n uri: `openid4vp://authorize?${params.toString()}`,\n dcqlQuery: query,\n nonce: input.nonce,\n state,\n };\n}\n","import { v4 as uuidv4 } from 'uuid';\nimport { SignJWT } from 'jose';\nimport { X509Certificate } from '@peculiar/x509';\nimport type { DcqlQuery } from '@openeudi/dcql';\n\nimport { SignedRequestBuildError } from './errors.js';\nimport type {\n SignedAuthorizationRequestInput,\n SignedAuthorizationRequest,\n} from './types/authorization.js';\n\nconst DEFAULT_SUPPORTED_ENC_VALUES: readonly string[] = ['A128GCM', 'A256GCM'];\nconst SUPPORTED_SIGNING_ALGS = new Set(['ES256', 'ES384', 'RS256']);\n\n/**\n * Build a signed authorization request (JAR) per OpenID4VP 1.0 §5.10 / RFC 9101.\n *\n * Validates that the signing key is bound to the leaf certificate and that the\n * leaf cert's SAN DNSName equals the declared hostname. Emits a short URI\n * carrying only `client_id` + `request_uri`, plus the JWS string the caller\n * must host at `requestUri` with Content-Type `application/oauth-authz-req+jwt`.\n *\n * Client Identifier Prefix defaults to `x509_san_dns`; pass\n * `clientIdPrefix: 'x509_hash'` to use the leaf certificate's SHA-256 hash\n * instead (OpenID4VP 1.0 §5.9.3). `hostname` is required only for\n * `x509_san_dns`.\n */\nexport async function createSignedAuthorizationRequest(\n input: SignedAuthorizationRequestInput,\n query: DcqlQuery,\n): Promise<SignedAuthorizationRequest> {\n if (input.certificateChain.length === 0) {\n throw new SignedRequestBuildError(\n 'empty_cert_chain',\n 'certificateChain must contain at least the leaf certificate',\n );\n }\n\n const signingAlg = input.signingAlgorithm ?? 'ES256';\n if (!SUPPORTED_SIGNING_ALGS.has(signingAlg)) {\n throw new SignedRequestBuildError(\n 'unsupported_signing_alg',\n `signingAlgorithm ${signingAlg} is not supported (expected ES256/ES384/RS256)`,\n );\n }\n\n if (!input.vpFormatsSupported || Object.keys(input.vpFormatsSupported).length === 0) {\n throw new SignedRequestBuildError(\n 'missing_vp_formats',\n 'vpFormatsSupported is required and must be non-empty',\n );\n }\n\n const clientIdPrefix = input.clientIdPrefix ?? 'x509_san_dns';\n const leafCert = new X509Certificate(toArrayBuffer(input.certificateChain[0]));\n\n // `x509_san_dns` puts the hostname *in* the client_id, so it is mandatory\n // there. `x509_hash` derives the client_id from the certificate instead and\n // does not need one.\n if (clientIdPrefix === 'x509_san_dns' && !input.hostname) {\n throw new SignedRequestBuildError(\n 'missing_hostname',\n 'hostname is required for clientIdPrefix \"x509_san_dns\"',\n );\n }\n\n // Whenever a hostname IS supplied, bind it to the leaf SAN — for\n // `x509_san_dns` because the client_id asserts it, and for `x509_hash`\n // because silently ignoring a hostname the caller went out of their way to\n // provide would hide a misconfigured certificate.\n if (input.hostname) {\n const sanDnsNames = extractDnsNames(leafCert);\n if (!sanDnsNames.includes(input.hostname)) {\n throw new SignedRequestBuildError(\n 'hostname_cert_mismatch',\n `leaf cert SAN DNSName values [${sanDnsNames.join(', ')}] do not include hostname \"${input.hostname}\"`,\n );\n }\n }\n\n const signerPublicSpki = new Uint8Array(\n await crypto.subtle.exportKey('spki', input.signer.publicKey),\n );\n const leafSpki = new Uint8Array(leafCert.publicKey.rawData);\n if (!bytesEqual(signerPublicSpki, leafSpki)) {\n throw new SignedRequestBuildError(\n 'signing_key_cert_mismatch',\n 'signer.publicKey SPKI does not match leaf certificate SPKI',\n );\n }\n\n // HAIP 1.0 Final requires the verifier certificate to chain to a trust\n // anchor the wallet recognises. A self-signed leaf asserts an identity\n // nothing vouches for, so a wallet enforcing the profile rejects the request\n // object — better to fail here, at build time, than to ship a request no\n // conforming wallet will honour.\n //\n // isSelfSigned() verifies the signature against the certificate's own public\n // key rather than comparing Subject and Issuer DN strings. That distinction\n // matters: GHSA-4c2f-96cf-f5fc was a DN-string-equality bug, and a DN check\n // here would both miss a re-signed certificate and misjudge a legitimate\n // cross-signed one.\n if (input.allowSelfSignedCertificate !== true && (await leafCert.isSelfSigned())) {\n throw new SignedRequestBuildError(\n 'self_signed_leaf',\n 'leaf certificate is self-signed; HAIP 1.0 Final requires a certificate ' +\n 'chaining to a trust anchor. Pass allowSelfSignedCertificate: true to ' +\n 'override for local development or tests.',\n );\n }\n\n const responseMode = input.responseMode ?? 'direct_post.jwt';\n\n if (responseMode === 'direct_post.jwt') {\n if (!input.encryptionKey?.publicJwk) {\n throw new SignedRequestBuildError(\n 'missing_encryption_jwk',\n 'direct_post.jwt response mode requires encryptionKey.publicJwk',\n );\n }\n if (!input.encryptionKey.publicJwk.alg) {\n throw new SignedRequestBuildError(\n 'missing_encryption_alg',\n 'encryptionKey.publicJwk must carry alg (OpenID4VP 1.0 §8.3)',\n );\n }\n }\n\n const state = input.state ?? uuidv4();\n const clientId =\n clientIdPrefix === 'x509_hash'\n ? `x509_hash:${await sha256Base64Url(input.certificateChain[0])}`\n : `x509_san_dns:${input.hostname}`;\n const now = Math.floor(Date.now() / 1000);\n\n const clientMetadata: Record<string, unknown> = {\n vp_formats_supported: input.vpFormatsSupported,\n };\n\n if (responseMode === 'direct_post.jwt' && input.encryptionKey) {\n const enc = input.encryptionKey.supportedEncValues;\n if (enc !== undefined && enc.length === 0) {\n throw new SignedRequestBuildError(\n 'empty_supported_enc_values',\n 'encryptionKey.supportedEncValues must not be empty (omit to use defaults [A128GCM, A256GCM])',\n );\n }\n const jwk = { ...input.encryptionKey.publicJwk, use: 'enc' };\n clientMetadata.jwks = { keys: [jwk] };\n const encValues = enc ?? [...DEFAULT_SUPPORTED_ENC_VALUES];\n clientMetadata.encrypted_response_enc_values_supported = encValues;\n }\n\n const payload: Record<string, unknown> = {\n iss: clientId,\n aud: 'https://self-issued.me/v2',\n response_type: 'vp_token',\n response_mode: responseMode,\n client_id: clientId,\n response_uri: input.responseUri,\n nonce: input.nonce,\n state,\n dcql_query: query,\n client_metadata: clientMetadata,\n iat: now,\n exp: now + 120,\n };\n\n const x5c = input.certificateChain.map((der) => bytesToBase64(der));\n\n const jws = await new SignJWT(payload)\n .setProtectedHeader({ typ: 'oauth-authz-req+jwt', alg: signingAlg, x5c })\n .sign(input.signer.privateKey);\n\n const uriParams = new URLSearchParams({\n client_id: clientId,\n request_uri: input.requestUri,\n });\n\n return {\n uri: `openid4vp://authorize?${uriParams.toString()}`,\n requestObject: jws,\n dcqlQuery: query,\n nonce: input.nonce,\n state,\n };\n}\n\nfunction extractDnsNames(cert: X509Certificate): string[] {\n // The @peculiar/x509 SubjectAlternativeName extension is identified by OID\n // 2.5.29.17. Its `.names.items` (a GeneralNames collection) yields entries\n // with { type, value } — where `type: 'dns'` entries are DNSNames.\n const SAN_OID = '2.5.29.17';\n const ext = cert.extensions.find((e) => e.type === SAN_OID);\n if (!ext) return [];\n // Dynamic narrowing: the extension carries a `names` GeneralNames object.\n const names = (ext as unknown as { names?: { items?: Array<{ type: string; value: string }> } }).names;\n const items = names?.items ?? [];\n return items.filter((e) => e.type === 'dns').map((e) => e.value);\n}\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n// OpenID4VP 1.0 §5.9.3 (referenced by HAIP 1.0 Final for the x509_hash Client\n// Identifier Prefix): \"the base64url-encoded value of the SHA-256 hash of the\n// DER-encoded X.509 certificate\" of the leaf cert. Unpadded, per RFC 7515 §2.\nasync function sha256Base64Url(derCert: Uint8Array): Promise<string> {\n const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', toArrayBuffer(derCert)));\n return bytesToBase64(digest).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n}\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n // @peculiar/x509 expects ArrayBuffer (not ArrayBufferLike). Copy bytes to\n // a fresh ArrayBuffer to satisfy the type and handle any buffer backing.\n const out = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(out).set(bytes);\n return out;\n}\n","import type {\n DcqlQuery,\n CredentialQuery,\n ClaimsQuery,\n CredentialSetQuery,\n} from '@openeudi/dcql';\nimport { HaipValidationError } from './errors.js';\nimport type { HaipQueryInput, CredentialSetQueryInput } from './types/haip.js';\n\nexport const HAIP_DOCTYPE_NAMESPACES: Record<string, string> = {\n 'org.iso.18013.5.1.mDL': 'org.iso.18013.5.1',\n 'eu.europa.ec.eudi.pid.1': 'eu.europa.ec.eudi.pid.1',\n};\n\nexport function buildHaipQuery(input: HaipQueryInput): DcqlQuery {\n if (input.claims.length === 0) {\n throw new HaipValidationError(\n 'NO_CLAIMS',\n `credential '${input.credentialId}' must declare at least one claim`,\n input.credentialId,\n );\n }\n\n let meta: CredentialQuery['meta'];\n let claims: ClaimsQuery[];\n\n if (input.format === 'dc+sd-jwt') {\n if (!input.vctValues || input.vctValues.length === 0) {\n throw new HaipValidationError(\n 'MISSING_SDJWT_META',\n `credential '${input.credentialId}' with format 'dc+sd-jwt' must provide non-empty vctValues`,\n input.credentialId,\n );\n }\n meta = { vct_values: input.vctValues };\n claims = input.claims.map((c) => ({ path: [c] }));\n } else {\n if (!input.doctypeValue) {\n throw new HaipValidationError(\n 'MISSING_MDOC_META',\n `credential '${input.credentialId}' with format 'mso_mdoc' must provide doctypeValue`,\n input.credentialId,\n );\n }\n meta = { doctype_value: input.doctypeValue };\n const namespace = HAIP_DOCTYPE_NAMESPACES[input.doctypeValue] ?? input.doctypeValue;\n claims = input.claims.map((c) => ({ path: [namespace, c] }));\n }\n\n const credential: CredentialQuery = {\n id: input.credentialId,\n format: input.format,\n meta,\n claims,\n };\n\n if (input.trustedAuthorities && input.trustedAuthorities.length > 0) {\n credential.trusted_authorities = input.trustedAuthorities;\n }\n\n return { credentials: [credential] };\n}\n\n/**\n * Build a DCQL query offering the wallet a choice between several credentials —\n * a `credential_sets` disjunction.\n *\n * The motivating case is a proof-of-age check: ask for a Proof-of-Age\n * attestation (`mso_mdoc`, `age_over_18` in namespace `eu.europa.ec.av.1`) OR a\n * PID (`dc+sd-jwt`, `birth_date`), because the PID carries no age attribute and\n * proof-of-age attestations have almost no issuer coverage yet. The wallet\n * satisfies ONE option and returns ONE presentation.\n *\n * This is deliberately NOT HAIP-minimal: `validateHaipQuery` rejects\n * `credential_sets`, and `isHaipQuery` returns `false` for what this produces.\n * That boundary is intentional — use `validateCredentialSetQuery` instead.\n *\n * Each option is built through {@link buildHaipQuery}, so per-credential\n * validation and its `HaipValidationError` codes are identical.\n */\nexport function buildCredentialSetQuery(input: CredentialSetQueryInput): DcqlQuery {\n if (input.options.length === 0) {\n throw new HaipValidationError(\n 'EMPTY_OPTIONS',\n 'a credential set must offer at least one option',\n );\n }\n\n const seen = new Set<string>();\n for (const option of input.options) {\n if (seen.has(option.credentialId)) {\n throw new HaipValidationError(\n 'DUPLICATE_CREDENTIAL_ID',\n `credential '${option.credentialId}' is declared by more than one option; ` +\n 'credential ids must be unique for credential_sets to reference them',\n option.credentialId,\n );\n }\n seen.add(option.credentialId);\n }\n\n const credentials = input.options.map((option) => buildHaipQuery(option).credentials[0]);\n\n const credentialSet: CredentialSetQuery = {\n options: input.options.map((option) => [option.credentialId]),\n };\n // `required` defaults to true in DCQL, so only an explicit opt-out is emitted.\n if (input.required === false) {\n credentialSet.required = false;\n }\n\n return { credentials, credential_sets: [credentialSet] };\n}\n\nconst HAIP_FORMATS = new Set<string>(['dc+sd-jwt', 'mso_mdoc']);\n\nexport function validateHaipQuery(query: DcqlQuery): void {\n if (!query.credentials || query.credentials.length === 0) {\n throw new HaipValidationError(\n 'EMPTY_QUERY',\n 'query.credentials must have at least one entry',\n );\n }\n\n if (query.credential_sets !== undefined) {\n throw new HaipValidationError(\n 'CREDENTIAL_SETS_DISALLOWED',\n 'credential_sets are not permitted in HAIP-minimal',\n );\n }\n\n for (const credential of query.credentials) {\n validateCredential(credential);\n }\n}\n\n/**\n * Per-credential rules shared by `validateHaipQuery` and\n * `validateCredentialSetQuery` — the two profiles differ only on whether\n * top-level `credential_sets` is allowed, never on what a credential may say.\n */\nfunction validateCredential(credential: CredentialQuery): void {\n if (!HAIP_FORMATS.has(credential.format)) {\n throw new HaipValidationError(\n 'UNSUPPORTED_FORMAT',\n `credential '${credential.id}' uses unsupported format '${credential.format}' (allowed: dc+sd-jwt, mso_mdoc)`,\n credential.id,\n );\n }\n\n if (credential.format === 'dc+sd-jwt') {\n const vctValues = credential.meta?.vct_values;\n if (!vctValues || vctValues.length === 0) {\n throw new HaipValidationError(\n 'MISSING_SDJWT_META',\n `credential '${credential.id}' with format 'dc+sd-jwt' must set meta.vct_values`,\n credential.id,\n );\n }\n }\n\n if (credential.format === 'mso_mdoc') {\n if (typeof credential.meta?.doctype_value !== 'string') {\n throw new HaipValidationError(\n 'MISSING_MDOC_META',\n `credential '${credential.id}' with format 'mso_mdoc' must set meta.doctype_value`,\n credential.id,\n );\n }\n }\n\n if (!credential.claims || credential.claims.length === 0) {\n throw new HaipValidationError(\n 'NO_CLAIMS',\n `credential '${credential.id}' must declare at least one claim`,\n credential.id,\n );\n }\n\n if (credential.claim_sets !== undefined) {\n throw new HaipValidationError(\n 'CLAIM_SETS_DISALLOWED',\n `credential '${credential.id}' uses claim_sets, not permitted in HAIP-minimal`,\n credential.id,\n );\n }\n}\n\n/**\n * Validate a DCQL query that offers the wallet a choice — the profile\n * `buildCredentialSetQuery` produces. Per-credential rules are identical to\n * HAIP-minimal; the difference is that `credential_sets` is REQUIRED here\n * rather than forbidden.\n */\nexport function validateCredentialSetQuery(query: DcqlQuery): void {\n if (!query.credentials || query.credentials.length === 0) {\n throw new HaipValidationError(\n 'EMPTY_QUERY',\n 'query.credentials must have at least one entry',\n );\n }\n\n if (!query.credential_sets || query.credential_sets.length === 0) {\n throw new HaipValidationError(\n 'MISSING_CREDENTIAL_SETS',\n 'a credential-set query must declare at least one credential_sets entry',\n );\n }\n\n for (const credential of query.credentials) {\n validateCredential(credential);\n }\n\n const declaredIds = new Set(query.credentials.map((c) => c.id));\n for (const credentialSet of query.credential_sets) {\n if (!credentialSet.options || credentialSet.options.length === 0) {\n throw new HaipValidationError(\n 'EMPTY_OPTIONS',\n 'a credential set must offer at least one option',\n );\n }\n\n for (const option of credentialSet.options) {\n for (const id of option) {\n if (!declaredIds.has(id)) {\n throw new HaipValidationError(\n 'UNKNOWN_OPTION_REFERENCE',\n `credential_sets option references '${id}', which is not declared in query.credentials`,\n id,\n );\n }\n }\n }\n }\n}\n\nexport function isHaipQuery(query: DcqlQuery): boolean {\n try {\n validateHaipQuery(query);\n return true;\n } catch {\n return false;\n }\n}\n","import { MdocParser } from './parsers/mdoc.parser.js';\nimport type { ParseOptions, ICredentialParser } from './parsers/parser.interface.js';\nimport { SdJwtParser } from './parsers/sd-jwt.parser.js';\nimport type { PresentationResult } from './types/presentation.js';\n\nconst parsers: ICredentialParser[] = [new SdJwtParser(), new MdocParser()];\n\nexport async function parsePresentation(vpToken: unknown, options: ParseOptions): Promise<PresentationResult> {\n for (const parser of parsers) {\n if (parser.canParse(vpToken)) {\n return parser.parse(vpToken, options);\n }\n }\n\n return {\n valid: false,\n format: 'sd-jwt-vc',\n claims: {},\n issuer: { certificate: new Uint8Array(), country: '' },\n error: 'Unsupported credential format',\n };\n}\n\nexport type { ParseOptions } from './parsers/parser.interface.js';\n","import { Encoder as CborEncoder, Tag } from 'cbor-x';\nimport { importX509 } from 'jose';\n\nimport { decodeCoseSign1, verifyCoseSign1 } from '../crypto/cose-sign1.js';\nimport { verifyDeviceAuth } from '../crypto/device-auth.js';\nimport { verifyAllDigests } from '../crypto/digest.js';\nimport { decodeMso, validateMsoValidity, validateMsoDocType } from '../crypto/mso.js';\nimport { MalformedCredentialError, ExpiredCredentialError } from '../errors.js';\nimport type { TrustEvaluationResult } from '../trust/TrustEvaluator.js';\nimport type { IssuerInfo } from '../types/issuer.js';\nimport type { CredentialFormat, CredentialClaims, PresentationResult } from '../types/presentation.js';\n\nimport type { ICredentialParser, ParseOptions } from './parser.interface.js';\n\n// Decoder that preserves CBOR maps as JS Maps (cbor-x default converts them to objects).\nconst decoder = new CborEncoder({ mapsAsObjects: false, useRecords: false });\nconst encoder = new CborEncoder({ mapsAsObjects: false, useRecords: false });\n\nconst DEFAULT_ALLOWED_ALGORITHMS = ['ES256', 'ES384', 'ES512'];\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction derToPem(der: Uint8Array): string {\n let binary = '';\n for (const b of der) binary += String.fromCharCode(b);\n const b64 = globalThis.btoa(binary);\n const lines = b64.match(/.{1,64}/g) || [];\n return `-----BEGIN CERTIFICATE-----\\n${lines.join('\\n')}\\n-----END CERTIFICATE-----`;\n}\n\nfunction extractCountryHintFromCert(_certDer: Uint8Array): string {\n // Placeholder — full X.509 subject parsing is workstream 3.\n return '';\n}\n\n/**\n * Reconstructs the canonical CBOR byte-string header (major type 2) for a bstr of\n * the given length, using the shortest (deterministic) length encoding — matching\n * how wallets/issuers serialize IssuerSignedItemBytes. Content bytes are appended\n * verbatim by the caller.\n */\nfunction cborByteStringHeader(length: number): Uint8Array {\n if (length < 24) return Uint8Array.of(0x40 | length);\n if (length < 0x100) return Uint8Array.of(0x58, length);\n if (length < 0x10000) return Uint8Array.of(0x59, (length >> 8) & 0xff, length & 0xff);\n if (length < 0x100000000) {\n return Uint8Array.of(\n 0x5a,\n (length >>> 24) & 0xff,\n (length >>> 16) & 0xff,\n (length >>> 8) & 0xff,\n length & 0xff\n );\n }\n // 64-bit lengths (>4 GiB) never occur for a single IssuerSignedItem.\n const hi = Math.floor(length / 0x100000000);\n const lo = length >>> 0;\n return Uint8Array.of(\n 0x5b,\n (hi >>> 24) & 0xff,\n (hi >>> 16) & 0xff,\n (hi >>> 8) & 0xff,\n hi & 0xff,\n (lo >>> 24) & 0xff,\n (lo >>> 16) & 0xff,\n (lo >>> 8) & 0xff,\n lo & 0xff\n );\n}\n\n/**\n * Wraps inner IssuerSignedItem CBOR into IssuerSignedItemBytes = #6.24(bstr .cbor IssuerSignedItem):\n * 0xD8 0x18 ++ <bstr-header(inner.length)> ++ inner\n *\n * The inner content is copied verbatim (never re-encoded), so no map-key reordering\n * or int/bstr re-serialization can occur — only the deterministic tag+length header\n * is prepended. This reproduces the exact on-wire bytes the issuer hashed.\n */\nexport function wrapIssuerSignedItemBytes(inner: Uint8Array): Uint8Array {\n const header = cborByteStringHeader(inner.length);\n const out = new Uint8Array(2 + header.length + inner.length);\n out[0] = 0xd8;\n out[1] = 0x18;\n out.set(header, 2);\n out.set(inner, 2 + header.length);\n return out;\n}\n\n/**\n * Returns the full IssuerSignedItemBytes — the tag-24 encoding #6.24(bstr .cbor IssuerSignedItem)\n * — for a decoded nameSpaces element. This is the exact byte sequence ISO 18013-5 §9.1.2.4\n * commits in MSO.valueDigests, so it (not the inner CBOR) is what must be hashed.\n *\n * cbor-x decodes the single tag-24 wrapper to its inner content, so we reconstruct the\n * tag-24 header around that inner content. Three decode shapes arise:\n * A) Tag(24, Uint8Array) — production cbor-x path (no addExtension); .value = inner CBOR\n * B) EmbeddedCbor-like obj — test-fixture path (mdoc-helpers.ts registers a tag-24\n * addExtension globally); .value = inner CBOR\n * C) Plain Uint8Array — a bare bstr. If it already starts with the tag-24 prefix\n * (0xD8 0x18) it is IssuerSignedItemBytes as-is; otherwise it\n * is inner CBOR to be wrapped.\n */\nfunction extractRawItemBytes(item: unknown): Uint8Array {\n if (item instanceof Tag && item.tag === 24 && item.value instanceof Uint8Array) {\n return wrapIssuerSignedItemBytes(item.value);\n }\n if (item instanceof Uint8Array) {\n if (item.length >= 2 && item[0] === 0xd8 && item[1] === 0x18) {\n return item;\n }\n return wrapIssuerSignedItemBytes(item);\n }\n if (\n item !== null &&\n typeof item === 'object' &&\n !(item instanceof Tag) &&\n !(item instanceof Map) &&\n 'value' in (item as object) &&\n (item as { value: unknown }).value instanceof Uint8Array\n ) {\n return wrapIssuerSignedItemBytes((item as { value: Uint8Array }).value);\n }\n throw new MalformedCredentialError('IssuerSignedItem must be a tag-24 byte string');\n}\n\n/**\n * Maps raw IssuerSignedItem bytes (from all namespaces) to CredentialClaims\n * plus a namespace-grouped structure (for DCQL path addressing).\n *\n * Handles all three tag-24 shapes (Tag(24,bytes), EmbeddedCbor-like object, plain bytes).\n */\nfunction mapRawToClaims(nameSpaces: Map<string, Uint8Array[]>): {\n flat: CredentialClaims;\n namespaced: Record<string, Record<string, unknown>>;\n} {\n const flat: CredentialClaims = {};\n const namespaced: Record<string, Record<string, unknown>> = {};\n for (const [ns, items] of nameSpaces.entries()) {\n const nsBucket: Record<string, unknown> = namespaced[ns] ?? {};\n for (const itemBytes of items) {\n let decoded: unknown;\n try {\n decoded = decoder.decode(itemBytes);\n } catch {\n continue;\n }\n\n // Unwrap all three tag-24 shapes to get the inner CBOR bytes\n let inner: unknown;\n if (decoded instanceof Tag && decoded.tag === 24 && decoded.value instanceof Uint8Array) {\n // Path A: Tag(24, bytes)\n inner = decoder.decode(decoded.value as Uint8Array);\n } else if (\n decoded !== null &&\n typeof decoded === 'object' &&\n !(decoded instanceof Tag) &&\n !(decoded instanceof Map) &&\n !(decoded instanceof Uint8Array) &&\n 'value' in (decoded as object) &&\n (decoded as { value: unknown }).value instanceof Uint8Array\n ) {\n // Path B: EmbeddedCbor-like object from test fixture's addExtension\n inner = decoder.decode((decoded as { value: Uint8Array }).value);\n } else if (decoded instanceof Map) {\n // Path C: already a Map\n inner = decoded;\n } else {\n continue;\n }\n\n if (inner instanceof Map) {\n const id = (inner as Map<string, unknown>).get('elementIdentifier');\n const val = (inner as Map<string, unknown>).get('elementValue');\n if (typeof id === 'string') {\n (flat as Record<string, unknown>)[id] = val;\n nsBucket[id] = val;\n }\n }\n }\n namespaced[ns] = nsBucket;\n }\n return { flat, namespaced };\n}\n\n/**\n * mDOC / mDL credential parser.\n *\n * Decodes and validates mDOC (Mobile Document) credentials as specified in\n * ISO 18013-5 and the EUDI Wallet ecosystem. Composes the crypto modules\n * to perform full verification:\n * - COSE_Sign1 decode + signature verification\n * - MSO decode + validity + docType validation\n * - Digest verification for all IssuerSignedItems\n * - Issuer certificate trust chain check\n */\nexport class MdocParser implements ICredentialParser {\n readonly format: CredentialFormat = 'mdoc';\n\n /**\n * Returns true when the token is binary data (Uint8Array or Buffer),\n * indicating a CBOR-encoded mDOC DeviceResponse.\n * Buffer extends Uint8Array, so `instanceof Uint8Array` catches both.\n */\n canParse(vpToken: unknown): boolean {\n return vpToken instanceof Uint8Array;\n }\n\n /**\n * Parses and validates an mDOC DeviceResponse token.\n *\n * @throws {MalformedCredentialError} when the CBOR structure cannot be decoded\n * or does not match the expected DeviceResponse format\n */\n async parse(vpToken: unknown, options: ParseOptions): Promise<PresentationResult> {\n if (!(vpToken instanceof Uint8Array)) {\n throw new MalformedCredentialError('mDOC vpToken must be a Uint8Array');\n }\n const allowedAlgorithms = options.allowedAlgorithms ?? DEFAULT_ALLOWED_ALGORITHMS;\n\n // Step 1: Decode DeviceResponse\n let deviceResponse: Map<unknown, unknown>;\n try {\n const decoded = decoder.decode(vpToken);\n if (!(decoded instanceof Map)) throw new Error();\n deviceResponse = decoded as Map<unknown, unknown>;\n } catch {\n throw new MalformedCredentialError('vpToken is not a CBOR DeviceResponse Map');\n }\n\n // Step 2: Extract first document\n const docs = deviceResponse.get('documents');\n if (!Array.isArray(docs) || docs.length === 0) {\n throw new MalformedCredentialError('DeviceResponse has no documents');\n }\n const document = docs[0];\n if (!(document instanceof Map)) {\n throw new MalformedCredentialError('document must be a Map');\n }\n const issuerSigned = document.get('issuerSigned');\n if (!(issuerSigned instanceof Map)) {\n throw new MalformedCredentialError('document.issuerSigned must be a Map');\n }\n const issuerAuth = issuerSigned.get('issuerAuth');\n if (!Array.isArray(issuerAuth)) {\n throw new MalformedCredentialError('issuerAuth must be a COSE_Sign1 array');\n }\n\n // Re-encode issuerAuth as bytes so we can pass to decodeCoseSign1\n const issuerAuthBytes = encoder.encode(issuerAuth);\n\n // Step 3: Decode COSE_Sign1 + algorithm check\n const cose = decodeCoseSign1(issuerAuthBytes);\n if (!allowedAlgorithms.includes(cose.alg)) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: new Uint8Array(), country: '' },\n error: `Unsupported algorithm: ${cose.alg}`,\n };\n }\n\n // Step 4: Trust check (reuse 0.2.1 skipTrustCheck semantics)\n const issuerCertBytes = cose.x5chain[0];\n if (!issuerCertBytes) {\n throw new MalformedCredentialError('Missing issuer certificate in x5chain');\n }\n\n let trustResult: TrustEvaluationResult | undefined;\n\n if (options.trustStore) {\n // 0.5.0 path: RFC 5280 chain validation via TrustEvaluator.\n // Dynamic import keeps the evaluator out of 0.4.0-style callers' bundles.\n const { TrustEvaluator } = await import('../trust/TrustEvaluator.js');\n const evaluator = new TrustEvaluator({\n trustStore: options.trustStore,\n revocationPolicy: options.revocationPolicy ?? 'skip',\n fetcher: options.fetcher,\n cache: options.cache,\n clockSkewTolerance: options.clockSkewTolerance,\n });\n const { X509Certificate } = await import('@peculiar/x509');\n const leaf = new X509Certificate(issuerCertBytes as Uint8Array<ArrayBuffer>);\n trustResult = await evaluator.evaluate(leaf);\n } else {\n // 0.4.0 byte-equality path — preserved verbatim for backward compatibility.\n if (options.trustedCertificates.length === 0) {\n if (options.skipTrustCheck !== true) {\n throw new MalformedCredentialError(\n 'trustedCertificates must not be empty unless skipTrustCheck is true'\n );\n }\n } else {\n const trusted = options.trustedCertificates.some((t) => bytesEqual(t, issuerCertBytes));\n if (!trusted) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'Issuer certificate is not trusted',\n };\n }\n }\n }\n\n // Step 5: Import public key + verify signature\n const publicKey = await importX509(derToPem(issuerCertBytes), cose.alg);\n try {\n await verifyCoseSign1(cose, publicKey, allowedAlgorithms);\n } catch (err) {\n if (err instanceof MalformedCredentialError) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: err.message,\n };\n }\n throw err;\n }\n\n // Step 6: Decode + validate MSO\n const mso = decodeMso(cose.payload);\n try {\n validateMsoValidity(mso, new Date());\n } catch (err) {\n if (err instanceof ExpiredCredentialError) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'Credential expired',\n };\n }\n throw err;\n }\n\n if (options.expectedDocType !== undefined) {\n try {\n validateMsoDocType(mso, options.expectedDocType);\n } catch (err) {\n if (err instanceof MalformedCredentialError) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: err.message,\n };\n }\n throw err;\n }\n }\n\n // Step 7: Extract items from nameSpaces, verify all digests\n const nsRaw = issuerSigned.get('nameSpaces');\n if (!(nsRaw instanceof Map)) {\n throw new MalformedCredentialError('issuerSigned.nameSpaces must be a Map');\n }\n const nameSpaces = new Map<string, Uint8Array[]>();\n for (const [ns, items] of (nsRaw as Map<unknown, unknown>).entries()) {\n if (typeof ns !== 'string' || !Array.isArray(items)) {\n throw new MalformedCredentialError('nameSpaces entry malformed');\n }\n nameSpaces.set(ns, items.map(extractRawItemBytes));\n }\n await verifyAllDigests(nameSpaces, mso);\n\n // Step 7.5: Device authentication (ISO 18013-5 §9.1.3) — holder proof-of-\n // possession. Without this an attacker who captures another holder's\n // `issuerSigned` structure can replay it, because issuerAuth alone carries\n // no binding to the presenter or the current session/nonce. Fail closed.\n // (CWE-294 capture-replay · CWE-345 insufficient authenticity verification)\n const deviceSigned = document.get('deviceSigned');\n if (!(deviceSigned instanceof Map)) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'Missing deviceSigned — mDOC device authentication is required',\n };\n }\n if (!(options.mdocSessionTranscript instanceof Uint8Array) || options.mdocSessionTranscript.length === 0) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'mdocSessionTranscript is required to verify mDOC device authentication',\n };\n }\n if (!mso.deviceKey) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: 'MSO is missing deviceKeyInfo.deviceKey; cannot verify device authentication',\n };\n }\n try {\n await verifyDeviceAuth({\n deviceSigned: deviceSigned as Map<unknown, unknown>,\n deviceKeyCose: mso.deviceKey,\n docType: mso.docType,\n sessionTranscript: options.mdocSessionTranscript,\n allowedAlgorithms,\n });\n } catch (err) {\n if (err instanceof MalformedCredentialError) {\n return {\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: issuerCertBytes, country: '' },\n error: err.message,\n };\n }\n throw err;\n }\n\n // Step 8: Map to claims\n const { flat: claims, namespaced: namespacedClaims } = mapRawToClaims(nameSpaces);\n\n const issuer: IssuerInfo = {\n certificate: issuerCertBytes,\n country: extractCountryHintFromCert(issuerCertBytes),\n };\n const result: PresentationResult = {\n valid: true,\n format: this.format,\n claims,\n issuer,\n docType: mso.docType,\n namespacedClaims,\n };\n if (trustResult) result.trust = trustResult;\n return result;\n }\n}\n","import { Encoder as CborEncoder, Tag } from 'cbor-x';\n\nimport { MalformedCredentialError } from '../errors.js';\n\n// Decoder that preserves CBOR maps as JS Maps (cbor-x default converts them to\n// objects). `tagUint8Array: false` is REQUIRED for COSE correctness: cbor-x\n// otherwise encodes a plain `Uint8Array` with the typed-array tag 64 (0xd8 0x40)\n// instead of a plain CBOR byte string (major type 2). The COSE `Sig_structure`'s\n// empty `external_aad` must be a plain bstr per RFC 9052 §4.4 — with the default\n// tagging our recomputed Sig_input did not match what conformant issuers sign,\n// so real-world mdocs failed verification. Only affects encoding; decoding of\n// already-plain byte strings is unchanged.\nconst decoder = new CborEncoder({ mapsAsObjects: false, useRecords: false, tagUint8Array: false });\n\n/**\n * COSE label for the `alg` header parameter.\n */\nconst HEADER_ALG = 1;\n\n/**\n * COSE label for the `x5chain` header parameter (RFC 9360).\n */\nconst HEADER_X5CHAIN = 33;\n\nconst COSE_ALG_TO_NAME: Record<number, string> = {\n [-7]: 'ES256',\n [-35]: 'ES384',\n [-36]: 'ES512',\n};\n\nexport interface CoseSign1 {\n protectedHeaderBytes: Uint8Array;\n protectedHeader: Map<number, unknown>;\n unprotectedHeader: Map<number, unknown>;\n payload: Uint8Array;\n signature: Uint8Array;\n x5chain: Uint8Array[];\n alg: 'ES256' | 'ES384' | 'ES512';\n}\n\nexport function decodeCoseSign1(bytes: Uint8Array): CoseSign1 {\n let outer: unknown = decoder.decode(bytes);\n if (outer instanceof Tag && outer.tag === 18) {\n // tag-18 value may be the raw bytes of the COSE_Sign1 structure — decode again\n const tagValue = outer.value;\n outer = tagValue instanceof Uint8Array ? decoder.decode(tagValue) : tagValue;\n }\n if (!Array.isArray(outer) || outer.length !== 4) {\n throw new MalformedCredentialError('COSE_Sign1 must be a CBOR array of length 4');\n }\n const [protectedHeaderBytes, unprotectedHeader, payloadRaw, signature] = outer;\n if (!(protectedHeaderBytes instanceof Uint8Array)) {\n throw new MalformedCredentialError('COSE_Sign1 protected header must be a bstr');\n }\n if (!(unprotectedHeader instanceof Map)) {\n throw new MalformedCredentialError('COSE_Sign1 unprotected header must be a Map');\n }\n if (!(signature instanceof Uint8Array)) {\n throw new MalformedCredentialError('COSE_Sign1 signature must be a bstr');\n }\n\n let protectedHeader: Map<number, unknown>;\n try {\n const decoded = decoder.decode(protectedHeaderBytes);\n if (!(decoded instanceof Map)) {\n throw new Error('protected header not a Map');\n }\n protectedHeader = decoded as Map<number, unknown>;\n } catch {\n throw new MalformedCredentialError('COSE_Sign1 protected header is not decodable CBOR');\n }\n\n const algLabel = protectedHeader.get(HEADER_ALG);\n const alg = typeof algLabel === 'number' ? COSE_ALG_TO_NAME[algLabel] : undefined;\n if (!alg) {\n throw new MalformedCredentialError(`COSE_Sign1 uses unknown alg label: ${String(algLabel)}`);\n }\n\n // Payload may be a bstr, tag-24 bstr (embedded CBOR), or absent (detached — not supported here)\n let payload: Uint8Array;\n if (payloadRaw instanceof Uint8Array) {\n payload = payloadRaw;\n } else if (payloadRaw instanceof Tag && payloadRaw.tag === 24 && payloadRaw.value instanceof Uint8Array) {\n payload = payloadRaw.value;\n } else {\n throw new MalformedCredentialError('COSE_Sign1 payload must be a byte string');\n }\n\n // x5chain may be a single cert bstr or an array of bstrs\n const x5raw = unprotectedHeader.get(HEADER_X5CHAIN);\n let x5chain: Uint8Array[];\n if (x5raw === undefined) {\n throw new MalformedCredentialError('COSE_Sign1 missing x5chain in unprotected header (label 33)');\n }\n if (x5raw instanceof Uint8Array) {\n x5chain = [x5raw];\n } else if (Array.isArray(x5raw) && x5raw.every((v) => v instanceof Uint8Array)) {\n x5chain = x5raw as Uint8Array[];\n } else {\n throw new MalformedCredentialError('COSE_Sign1 x5chain must be a bstr or array of bstr');\n }\n\n return {\n protectedHeaderBytes,\n protectedHeader,\n unprotectedHeader: unprotectedHeader as Map<number, unknown>,\n payload,\n signature,\n x5chain,\n alg: alg as 'ES256' | 'ES384' | 'ES512',\n };\n}\n\nconst ALG_TO_HASH: Record<string, string> = {\n ES256: 'SHA-256',\n ES384: 'SHA-384',\n ES512: 'SHA-512',\n};\n\n/**\n * Verifies the COSE_Sign1 signature using the provided public key.\n * Throws when the algorithm is not in the allowlist or the signature is invalid.\n */\nexport async function verifyCoseSign1(\n coseSign1: CoseSign1,\n publicKey: CryptoKey,\n allowedAlgorithms: string[]\n): Promise<void> {\n if (!allowedAlgorithms.includes(coseSign1.alg)) {\n throw new MalformedCredentialError(`COSE_Sign1 algorithm ${coseSign1.alg} not in allowlist`);\n }\n const hashAlg = ALG_TO_HASH[coseSign1.alg];\n if (!hashAlg) {\n throw new MalformedCredentialError(`no hash mapping for alg ${coseSign1.alg}`);\n }\n\n // Sig_structure1 = [\"Signature1\", protected_header_bytes, external_aad (empty bstr), payload]\n // coseSign1.payload is the raw bstr from the COSE array — it already contains the tag-24\n // encoded MSO bytes as stored by the signer, so we use it directly without re-wrapping.\n const sigStructure = ['Signature1', coseSign1.protectedHeaderBytes, new Uint8Array(0), coseSign1.payload];\n // cbor-x's encode() returns a Buffer<ArrayBufferLike>; copy into a Uint8Array<ArrayBuffer>\n // so the strict BufferSource shape (post-@types/node) is satisfied.\n const sigInput = new Uint8Array(decoder.encode(sigStructure)) as Uint8Array<ArrayBuffer>;\n\n const ok = await crypto.subtle.verify(\n { name: 'ECDSA', hash: hashAlg },\n publicKey,\n new Uint8Array(coseSign1.signature) as Uint8Array<ArrayBuffer>,\n sigInput\n );\n if (!ok) {\n throw new MalformedCredentialError('COSE_Sign1 signature verification failed');\n }\n}\n","import { Encoder as CborEncoder } from 'cbor-x';\n\nimport { MalformedCredentialError } from '../errors.js';\n\n// Plain-bstr encoder (tagUint8Array:false → byte strings are major-type-2, not\n// the typed-array tag 64), matching how conformant issuers/holders encode COSE.\nconst enc = new CborEncoder({ mapsAsObjects: false, useRecords: false, tagUint8Array: false });\n\nconst HEADER_ALG = 1;\nconst COSE_ALG_TO_NAME: Record<number, 'ES256' | 'ES384' | 'ES512'> = {\n [-7]: 'ES256',\n [-35]: 'ES384',\n [-36]: 'ES512',\n};\nconst ALG_TO_HASH: Record<string, string> = { ES256: 'SHA-256', ES384: 'SHA-384', ES512: 'SHA-512' };\n\n// COSE_Key (EC2) label map and curve labels (RFC 9052 / RFC 9053).\nconst COSE_KEY_KTY = 1;\nconst COSE_KEY_CRV = -1;\nconst COSE_KEY_X = -2;\nconst COSE_KEY_Y = -3;\nconst COSE_KTY_EC2 = 2;\nconst COSE_CRV_TO_JWK: Record<number, string> = { 1: 'P-256', 2: 'P-384', 3: 'P-521' };\n\nfunction concatBytes(...chunks: Uint8Array[]): Uint8Array {\n let len = 0;\n for (const c of chunks) len += c.length;\n const out = new Uint8Array(len);\n let off = 0;\n for (const c of chunks) {\n out.set(c, off);\n off += c.length;\n }\n return out;\n}\n\nfunction bytesToBase64Url(bytes: Uint8Array): string {\n let bin = '';\n for (const b of bytes) bin += String.fromCharCode(b);\n return globalThis.btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/** Encode a CBOR tag-24 (embedded CBOR) wrapping `inner` as a byte string. */\nfunction encodeTag24(inner: Uint8Array): Uint8Array {\n // 0xD8 0x18 = tag(24); enc.encode(Uint8Array) yields the bstr encoding of `inner`.\n return concatBytes(new Uint8Array([0xd8, 0x18]), new Uint8Array(enc.encode(inner)));\n}\n\n/**\n * Deterministically build `DeviceAuthenticationBytes` per ISO 18013-5 §9.1.3.4:\n *\n * DeviceAuthentication = [ \"DeviceAuthentication\", SessionTranscript, DocType,\n * DeviceNameSpacesBytes ]\n * DeviceAuthenticationBytes = #6.24(bstr .cbor DeviceAuthentication)\n *\n * The SessionTranscript is spliced in as its exact caller-supplied bytes (never\n * decoded/re-encoded) so the digest input is byte-identical to what the holder\n * signed. Shared by the verifier and the test fixture to guarantee that.\n *\n * @param sessionTranscript CBOR bytes of the SessionTranscript data item.\n * @param docType mDOC docType string.\n * @param deviceNameSpacesInner CBOR bytes of the DeviceNameSpaces map (the\n * content wrapped by the tag-24 DeviceNameSpacesBytes).\n */\nexport function buildDeviceAuthenticationBytes(params: {\n sessionTranscript: Uint8Array;\n docType: string;\n deviceNameSpacesInner: Uint8Array;\n}): Uint8Array {\n const deviceAuthentication = concatBytes(\n new Uint8Array([0x84]), // array(4)\n new Uint8Array(enc.encode('DeviceAuthentication')),\n params.sessionTranscript,\n new Uint8Array(enc.encode(params.docType)),\n encodeTag24(params.deviceNameSpacesInner),\n );\n return encodeTag24(deviceAuthentication);\n}\n\n/** Encode the COSE `Sig_structure` for a detached-payload Signature1. */\nexport function encodeDeviceSigStructure(protectedBytes: Uint8Array, deviceAuthBytes: Uint8Array): Uint8Array {\n const sig = ['Signature1', protectedBytes, new Uint8Array(0), deviceAuthBytes];\n return new Uint8Array(enc.encode(sig));\n}\n\n/** Import an mdoc device public key from its COSE_Key (EC2) representation. */\nexport async function importDeviceKeyFromCose(coseKey: unknown): Promise<CryptoKey> {\n if (!(coseKey instanceof Map)) {\n throw new MalformedCredentialError('MSO deviceKeyInfo.deviceKey is not a COSE_Key map');\n }\n const kty = coseKey.get(COSE_KEY_KTY);\n if (kty !== COSE_KTY_EC2) {\n throw new MalformedCredentialError(`Unsupported COSE key type for device key: ${String(kty)}`);\n }\n const crv = coseKey.get(COSE_KEY_CRV);\n const crvName = typeof crv === 'number' ? COSE_CRV_TO_JWK[crv] : undefined;\n const x = coseKey.get(COSE_KEY_X);\n const y = coseKey.get(COSE_KEY_Y);\n if (!crvName || !(x instanceof Uint8Array) || !(y instanceof Uint8Array)) {\n throw new MalformedCredentialError('Malformed EC2 COSE_Key in MSO deviceKeyInfo');\n }\n return crypto.subtle.importKey(\n 'jwk',\n { kty: 'EC', crv: crvName, x: bytesToBase64Url(x), y: bytesToBase64Url(y) },\n { name: 'ECDSA', namedCurve: crvName },\n false,\n ['verify'],\n );\n}\n\n/**\n * Verify mdoc device authentication (ISO 18013-5 §9.1.3): the holder proves\n * possession of the MSO-committed device key by signing the DeviceAuthentication\n * (which binds the SessionTranscript/nonce). Throws {@link MalformedCredentialError}\n * when the DeviceSignature is missing, malformed, uses a disallowed algorithm, or\n * fails to verify. DeviceMac (COSE_Mac0) is not supported and is rejected.\n */\nexport async function verifyDeviceAuth(params: {\n deviceSigned: Map<unknown, unknown>;\n deviceKeyCose: unknown;\n docType: string;\n sessionTranscript: Uint8Array;\n allowedAlgorithms: string[];\n}): Promise<void> {\n const { deviceSigned, deviceKeyCose, docType, sessionTranscript, allowedAlgorithms } = params;\n\n const deviceAuth = deviceSigned.get('deviceAuth');\n if (!(deviceAuth instanceof Map)) {\n throw new MalformedCredentialError('deviceSigned.deviceAuth is missing or malformed');\n }\n if (deviceAuth.has('deviceMac') && !deviceAuth.has('deviceSignature')) {\n throw new MalformedCredentialError('mDOC DeviceMac authentication is not supported');\n }\n const deviceSignature = deviceAuth.get('deviceSignature');\n if (!Array.isArray(deviceSignature) || deviceSignature.length !== 4) {\n throw new MalformedCredentialError('deviceAuth.deviceSignature must be a COSE_Sign1 array');\n }\n const protectedBytes = deviceSignature[0];\n const signature = deviceSignature[3];\n if (!(protectedBytes instanceof Uint8Array) || !(signature instanceof Uint8Array)) {\n throw new MalformedCredentialError('DeviceSignature protected header / signature must be byte strings');\n }\n\n let alg: 'ES256' | 'ES384' | 'ES512' | undefined;\n try {\n const ph = enc.decode(protectedBytes);\n const label = ph instanceof Map ? ph.get(HEADER_ALG) : undefined;\n alg = typeof label === 'number' ? COSE_ALG_TO_NAME[label] : undefined;\n } catch {\n throw new MalformedCredentialError('DeviceSignature protected header is not decodable CBOR');\n }\n if (!alg || !allowedAlgorithms.includes(alg)) {\n throw new MalformedCredentialError(`DeviceSignature uses a disallowed algorithm: ${String(alg)}`);\n }\n\n // DeviceNameSpacesBytes = deviceSigned[\"nameSpaces\"] (a tag-24 wrapped map).\n // Extract the inner CBOR bytes so we can rebuild the digest input identically.\n const deviceNameSpacesInner = extractTag24Inner(deviceSigned.get('nameSpaces'));\n\n const deviceAuthBytes = buildDeviceAuthenticationBytes({ sessionTranscript, docType, deviceNameSpacesInner });\n const sigInput = encodeDeviceSigStructure(protectedBytes, deviceAuthBytes);\n\n const deviceKey = await importDeviceKeyFromCose(deviceKeyCose);\n const ok = await crypto.subtle.verify(\n { name: 'ECDSA', hash: ALG_TO_HASH[alg] },\n deviceKey,\n new Uint8Array(signature) as Uint8Array<ArrayBuffer>,\n sigInput as Uint8Array<ArrayBuffer>,\n );\n if (!ok) {\n throw new MalformedCredentialError('mDOC device authentication (DeviceSignature) failed to verify');\n }\n}\n\n/**\n * Extract the inner CBOR bytes of a tag-24 wrapped value across the three shapes\n * that arise (Tag(24,bytes) in production, EmbeddedCbor-like in tests, or a plain\n * bstr already holding the inner bytes).\n */\nfunction extractTag24Inner(value: unknown): Uint8Array {\n if (value instanceof Uint8Array) return value;\n if (\n value !== null &&\n typeof value === 'object' &&\n 'value' in (value as object) &&\n (value as { value: unknown }).value instanceof Uint8Array &&\n // Tag(24,bytes) and EmbeddedCbor both expose .value; both are fine here.\n ('tag' in (value as object) ? (value as { tag: unknown }).tag === 24 : true)\n ) {\n return (value as { value: Uint8Array }).value;\n }\n throw new MalformedCredentialError('deviceSigned.nameSpaces must be tag-24 wrapped CBOR');\n}\n","import { Encoder as CborEncoder, Tag } from 'cbor-x';\n\nimport { MalformedCredentialError } from '../errors.js';\n\nimport type { MobileSecurityObject } from './mso.js';\n\n// Decoder that preserves CBOR maps as JS Maps (cbor-x default converts them to objects).\nconst decoder = new CborEncoder({ mapsAsObjects: false, useRecords: false });\n\nconst ALLOWED_HASH_ALGS = new Set(['SHA-256', 'SHA-384', 'SHA-512']);\n\nexport async function computeItemDigest(itemBytes: Uint8Array, digestAlgorithm: string): Promise<Uint8Array> {\n if (!ALLOWED_HASH_ALGS.has(digestAlgorithm)) {\n throw new MalformedCredentialError(`Unknown digest algorithm: ${digestAlgorithm}`);\n }\n // Copy into a plain Uint8Array<ArrayBuffer> to satisfy TypeScript's BufferSource constraint.\n const buf = await crypto.subtle.digest(digestAlgorithm, new Uint8Array(itemBytes));\n return new Uint8Array(buf);\n}\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n/**\n * Unwrap an IssuerSignedItem from its tag-24 encoding and return the inner Map.\n *\n * Three shapes arise depending on test vs. production paths:\n * A) Tag(24, Uint8Array) — production cbor-x path (no addExtension)\n * B) EmbeddedCbor-like obj — test-fixture path (addExtension in mdoc-helpers.ts registers a\n * custom class whose instances have `.value: Uint8Array`)\n * C) Plain Map — if cbor-x auto-unwraps deeper than expected\n */\nfunction unwrapItemMap(itemBytes: Uint8Array): Map<string, unknown> {\n let decoded: unknown;\n try {\n decoded = decoder.decode(itemBytes);\n } catch {\n throw new MalformedCredentialError('IssuerSignedItem is not decodable CBOR');\n }\n\n let inner: unknown;\n if (decoded instanceof Tag && decoded.tag === 24 && decoded.value instanceof Uint8Array) {\n // Path A: tag-24 Tag object\n inner = decoder.decode(decoded.value as Uint8Array);\n } else if (\n decoded !== null &&\n typeof decoded === 'object' &&\n !(decoded instanceof Tag) &&\n !(decoded instanceof Map) &&\n !(decoded instanceof Uint8Array) &&\n 'value' in (decoded as object) &&\n (decoded as { value: unknown }).value instanceof Uint8Array\n ) {\n // Path B: EmbeddedCbor-like object from test fixture's addExtension\n inner = decoder.decode((decoded as { value: Uint8Array }).value);\n } else if (decoded instanceof Map) {\n // Path C: already a Map\n inner = decoded;\n } else {\n throw new MalformedCredentialError('IssuerSignedItem must be a tag-24 wrapped CBOR Map');\n }\n\n if (!(inner instanceof Map)) {\n throw new MalformedCredentialError('IssuerSignedItem must decode to a Map');\n }\n return inner as Map<string, unknown>;\n}\n\n/**\n * Verifies every IssuerSignedItem across every namespace against the MSO's valueDigests.\n * All items must match — no partial acceptance.\n *\n * @param nameSpaces Per-namespace arrays of tag-24-wrapped IssuerSignedItem bytes\n * (exactly the bytes used as digest input during issuance).\n * @param mso Decoded MobileSecurityObject carrying the expected valueDigests.\n */\nexport async function verifyAllDigests(\n nameSpaces: Map<string, Uint8Array[]>,\n mso: MobileSecurityObject\n): Promise<void> {\n for (const [ns, items] of nameSpaces) {\n const expected = mso.valueDigests.get(ns);\n if (!expected) {\n throw new MalformedCredentialError(`namespace ${ns} has no valueDigests entry in MSO`);\n }\n for (const itemBytes of items) {\n // Hash the raw tag-24 bytes — this is what the issuer hashed during issuance.\n const hash = await computeItemDigest(itemBytes, mso.digestAlgorithm);\n\n // Decode to extract digestID for lookup.\n const item = unwrapItemMap(itemBytes);\n const digestID = item.get('digestID');\n if (typeof digestID !== 'number') {\n throw new MalformedCredentialError('IssuerSignedItem missing digestID');\n }\n\n const expectedDigest = expected.get(digestID);\n if (!expectedDigest) {\n throw new MalformedCredentialError(`digestID ${digestID} missing from MSO valueDigests[${ns}]`);\n }\n if (!bytesEqual(hash, expectedDigest)) {\n throw new MalformedCredentialError(`digest mismatch for ns=${ns} digestID=${digestID}`);\n }\n }\n }\n}\n","import { Encoder as CborEncoder, Tag } from 'cbor-x';\n\nimport { MalformedCredentialError, ExpiredCredentialError } from '../errors.js';\n\n// Decoder that preserves CBOR maps as JS Maps (cbor-x default converts them to objects).\nconst decoder = new CborEncoder({ mapsAsObjects: false, useRecords: false });\n\nexport interface MobileSecurityObject {\n version: string;\n digestAlgorithm: string;\n valueDigests: Map<string, Map<number, Uint8Array>>;\n docType: string;\n /**\n * The holder device public key committed by the issuer\n * (`deviceKeyInfo.deviceKey`), as its raw COSE_Key map. Required to verify\n * mdoc device authentication (ISO 18013-5 §9.1.3). Undefined only for\n * malformed MSOs that omit it.\n */\n deviceKey?: Map<number, unknown>;\n validityInfo: {\n signed: Date;\n validFrom: Date;\n validUntil: Date;\n expectedUpdate?: Date;\n };\n}\n\nfunction decodeDateLike(value: unknown): Date {\n if (value instanceof Date) return value;\n if (value instanceof Tag) {\n // Tag 0 = RFC 3339 string; Tag 1 = epoch seconds; Tag 1004 = full-date (YYYY-MM-DD)\n if (value.tag === 0 && typeof value.value === 'string') {\n return new Date(value.value);\n }\n if (value.tag === 1 && typeof value.value === 'number') {\n return new Date(value.value * 1000);\n }\n if (value.tag === 1004 && typeof value.value === 'string') {\n return new Date(value.value);\n }\n }\n if (typeof value === 'string') {\n return new Date(value);\n }\n throw new MalformedCredentialError(`unsupported date encoding in MSO: ${typeof value}`);\n}\n\nexport function decodeMso(payload: Uint8Array): MobileSecurityObject {\n let raw: unknown;\n try {\n raw = decoder.decode(payload);\n // Unwrap tag-24 (embedded CBOR): COSE payload may be tag-24 wrapped MSO bytes.\n // In production cbor-x decodes tag-24 as Tag(24, bytes); in test fixtures that register\n // a custom addExtension for tag-24 it decodes to an EmbeddedCbor-like object with .value.\n if (raw instanceof Tag && raw.tag === 24 && raw.value instanceof Uint8Array) {\n raw = decoder.decode(raw.value);\n } else if (\n raw !== null &&\n typeof raw === 'object' &&\n !(raw instanceof Tag) &&\n !(raw instanceof Map) &&\n !(raw instanceof Uint8Array) &&\n 'value' in (raw as object) &&\n (raw as { value: unknown }).value instanceof Uint8Array\n ) {\n // TEST-FIXTURE COMPATIBILITY: tests/fixtures/mdoc-helpers.ts registers a custom\n // tag-24 addExtension globally, so cbor-x returns an EmbeddedCbor-like object\n // (with `.value: Uint8Array`) instead of Tag(24, bytes) during tests. The `!(raw\n // instanceof Tag)` guard ensures we don't misinterpret arbitrary Tag(N, bytes)\n // values as embedded CBOR in production.\n raw = decoder.decode((raw as { value: Uint8Array }).value);\n }\n } catch (err) {\n if (err instanceof MalformedCredentialError) throw err;\n throw new MalformedCredentialError('MSO payload is not decodable CBOR');\n }\n if (!(raw instanceof Map)) {\n throw new MalformedCredentialError('MSO must be a CBOR Map');\n }\n const m = raw as Map<string, unknown>;\n\n const version = m.get('version');\n if (typeof version !== 'string') {\n throw new MalformedCredentialError('MSO.version must be a string');\n }\n const digestAlgorithm = m.get('digestAlgorithm');\n if (typeof digestAlgorithm !== 'string') {\n throw new MalformedCredentialError('MSO.digestAlgorithm must be a string');\n }\n const docType = m.get('docType');\n if (typeof docType !== 'string') {\n throw new MalformedCredentialError('MSO.docType must be a string');\n }\n\n const vdRaw = m.get('valueDigests');\n if (!(vdRaw instanceof Map)) {\n throw new MalformedCredentialError('MSO.valueDigests must be a Map');\n }\n const valueDigests = new Map<string, Map<number, Uint8Array>>();\n for (const [ns, inner] of vdRaw.entries()) {\n if (typeof ns !== 'string' || !(inner instanceof Map)) {\n throw new MalformedCredentialError('MSO.valueDigests entry malformed');\n }\n const perNs = new Map<number, Uint8Array>();\n for (const [id, digest] of (inner as Map<unknown, unknown>).entries()) {\n if (typeof id !== 'number' || !(digest instanceof Uint8Array)) {\n throw new MalformedCredentialError('MSO digest entry must map number→bstr');\n }\n perNs.set(id, digest);\n }\n valueDigests.set(ns, perNs);\n }\n\n // deviceKeyInfo.deviceKey — the COSE_Key the holder must authenticate with.\n let deviceKey: Map<number, unknown> | undefined;\n const dkiRaw = m.get('deviceKeyInfo');\n if (dkiRaw instanceof Map) {\n const dk = (dkiRaw as Map<string, unknown>).get('deviceKey');\n if (dk instanceof Map) {\n deviceKey = dk as Map<number, unknown>;\n }\n }\n\n const viRaw = m.get('validityInfo');\n if (!(viRaw instanceof Map)) {\n throw new MalformedCredentialError('MSO.validityInfo must be a Map');\n }\n const vi = viRaw as Map<string, unknown>;\n const validityInfo: MobileSecurityObject['validityInfo'] = {\n signed: decodeDateLike(vi.get('signed')),\n validFrom: decodeDateLike(vi.get('validFrom')),\n validUntil: decodeDateLike(vi.get('validUntil')),\n };\n if (vi.has('expectedUpdate')) {\n validityInfo.expectedUpdate = decodeDateLike(vi.get('expectedUpdate'));\n }\n\n return { version, digestAlgorithm, valueDigests, docType, deviceKey, validityInfo };\n}\n\n/**\n * Validates the MSO's validityInfo block against a reference time.\n * Enforces strict ISO 18013-5 rules:\n * - signed <= now\n * - validFrom <= now\n * - validFrom <= validUntil\n * - signed within [validFrom, validUntil]\n * - validUntil >= now (else ExpiredCredentialError)\n */\nexport function validateMsoValidity(mso: MobileSecurityObject, now: Date): void {\n const { signed, validFrom, validUntil } = mso.validityInfo;\n if (signed.getTime() > now.getTime()) {\n throw new MalformedCredentialError(`MSO signed=${signed.toISOString()} is in the future`);\n }\n if (validFrom.getTime() > now.getTime()) {\n throw new MalformedCredentialError(`MSO validFrom=${validFrom.toISOString()} is in the future`);\n }\n if (validFrom.getTime() > validUntil.getTime()) {\n throw new MalformedCredentialError('MSO validFrom is after validUntil');\n }\n if (signed.getTime() < validFrom.getTime() || signed.getTime() > validUntil.getTime()) {\n throw new MalformedCredentialError('MSO signed is outside the validity window');\n }\n if (validUntil.getTime() < now.getTime()) {\n throw new ExpiredCredentialError(`MSO validUntil=${validUntil.toISOString()} is in the past`);\n }\n}\n\n/**\n * Validates that the MSO's docType matches the expected one.\n * Used by callers who want to lock the accepted credential type.\n */\nexport function validateMsoDocType(mso: MobileSecurityObject, expectedDocType: string): void {\n if (mso.docType !== expectedDocType) {\n throw new MalformedCredentialError(`MSO docType=${mso.docType} does not match expected ${expectedDocType}`);\n }\n}\n","import { splitSdJwt, decodeSdJwt, getClaims } from '@sd-jwt/decode';\nimport { decodeProtectedHeader, jwtVerify, importX509, importJWK } from 'jose';\n\nimport { MalformedCredentialError } from '../errors.js';\nimport type { TrustEvaluationResult } from '../trust/TrustEvaluator.js';\nimport type { IssuerInfo } from '../types/issuer.js';\nimport type { CredentialFormat, CredentialClaims, PresentationResult } from '../types/presentation.js';\n\nimport type { ICredentialParser, ParseOptions } from './parser.interface.js';\n\n/**\n * Hasher function signature expected by @sd-jwt/decode.\n * Inlined here to avoid a direct dependency on @sd-jwt/types.\n */\ntype SdJwtHasher = (data: string | ArrayBuffer, alg: string) => Promise<Uint8Array>;\n\nconst DEFAULT_ALLOWED_ALGORITHMS = ['ES256', 'ES384', 'ES512'];\n\n/**\n * SHA-256 hasher implementation using the Web Crypto API.\n * Compatible with the @sd-jwt/decode Hasher signature.\n */\nconst sha256Hasher: SdJwtHasher = async (data: string | ArrayBuffer, _alg: string): Promise<Uint8Array> => {\n const encoder = new TextEncoder();\n const input = typeof data === 'string' ? encoder.encode(data) : data;\n const hashBuffer = await crypto.subtle.digest('SHA-256', input);\n return new Uint8Array(hashBuffer);\n};\n\n// Standard base64 alphabet for decoding x5c certificate entries\nconst BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n/**\n * Decodes a standard base64-encoded string into raw bytes.\n * Does not depend on Node.js Buffer or browser atob.\n */\nfunction base64ToBytes(base64: string): Uint8Array<ArrayBuffer> {\n const cleaned = base64.replace(/=+$/, '');\n const byteLength = Math.floor((cleaned.length * 3) / 4);\n const buffer = new ArrayBuffer(byteLength);\n const bytes = new Uint8Array(buffer);\n\n let byteIndex = 0;\n for (let i = 0; i < cleaned.length; i += 4) {\n const a = BASE64_CHARS.indexOf(cleaned[i]);\n const b = i + 1 < cleaned.length ? BASE64_CHARS.indexOf(cleaned[i + 1]) : 0;\n const c = i + 2 < cleaned.length ? BASE64_CHARS.indexOf(cleaned[i + 2]) : 0;\n const d = i + 3 < cleaned.length ? BASE64_CHARS.indexOf(cleaned[i + 3]) : 0;\n\n bytes[byteIndex++] = (a << 2) | (b >> 4);\n if (byteIndex < byteLength) bytes[byteIndex++] = ((b & 0x0f) << 4) | (c >> 2);\n if (byteIndex < byteLength) bytes[byteIndex++] = ((c & 0x03) << 6) | d;\n }\n\n return bytes;\n}\n\n/**\n * Checks whether two Uint8Array instances contain identical bytes.\n */\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n/**\n * Converts a base64-encoded DER certificate to PEM format for jose.importX509.\n */\nfunction derToPem(base64Der: string): string {\n const lines = base64Der.match(/.{1,64}/g) || [];\n return `-----BEGIN CERTIFICATE-----\\n${lines.join('\\n')}\\n-----END CERTIFICATE-----`;\n}\n\n/**\n * Encodes a Uint8Array to base64url (no padding).\n * Used by disclosure hash verification (Task 5) and KB-JWT verification (Task 6).\n */\nfunction bytesToBase64url(bytes: Uint8Array): string {\n let binary = '';\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return globalThis.btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/**\n * Maps raw decoded claims to the CredentialClaims structure,\n * picking known age/residency fields and preserving any extra keys.\n */\nfunction mapToCredentialClaims(raw: Record<string, unknown>): CredentialClaims {\n const claims: CredentialClaims = {};\n\n if (typeof raw['age_over_18'] === 'boolean') {\n claims.age_over_18 = raw['age_over_18'];\n }\n if (typeof raw['age_over_21'] === 'boolean') {\n claims.age_over_21 = raw['age_over_21'];\n }\n if (typeof raw['resident_country'] === 'string') {\n claims.resident_country = raw['resident_country'];\n }\n if (typeof raw['nationality'] === 'string') {\n claims.nationality = raw['nationality'];\n }\n if (typeof raw['family_name_birth'] === 'string') {\n claims.family_name_birth = raw['family_name_birth'];\n }\n\n for (const [key, value] of Object.entries(raw)) {\n if (\n !(key in claims) &&\n !key.startsWith('_sd') &&\n key !== 'iss' &&\n key !== 'exp' &&\n key !== 'iat' &&\n key !== 'cnf' &&\n key !== 'vct'\n ) {\n claims[key] = value;\n }\n }\n\n return claims;\n}\n\n/**\n * Best-effort extraction of a country code hint from an issuer URL or string.\n */\nfunction extractCountryHint(issuer: string): string {\n try {\n const url = new URL(issuer);\n const tld = url.hostname.split('.').pop()?.toUpperCase();\n if (tld && tld.length === 2) {\n return tld;\n }\n } catch {\n // Not a valid URL\n }\n return '';\n}\n\n/**\n * SD-JWT VC credential parser.\n *\n * Decodes and cryptographically validates SD-JWT Verifiable Credentials:\n * - JWT signature verification via x5c public key (jose)\n * - Issuer certificate trust chain verification\n * - Disclosure hash integrity verification\n * - Key binding JWT signature and sd_hash verification\n * - Selective disclosure claim extraction\n */\nexport class SdJwtParser implements ICredentialParser {\n readonly format: CredentialFormat = 'sd-jwt-vc';\n\n canParse(vpToken: unknown): boolean {\n return typeof vpToken === 'string' && vpToken.includes('~');\n }\n\n async parse(vpToken: unknown, options: ParseOptions): Promise<PresentationResult> {\n if (typeof vpToken !== 'string') {\n throw new MalformedCredentialError('VP token must be a string');\n }\n\n const allowedAlgorithms = options.allowedAlgorithms ?? DEFAULT_ALLOWED_ALGORITHMS;\n\n const invalidResult = (error: string): PresentationResult => ({\n valid: false,\n format: this.format,\n claims: {},\n issuer: { certificate: new Uint8Array(), country: '' },\n error,\n });\n\n // Step 1: Split the SD-JWT into components\n let parts: ReturnType<typeof splitSdJwt>;\n try {\n parts = splitSdJwt(vpToken);\n } catch {\n throw new MalformedCredentialError('Failed to split SD-JWT structure');\n }\n\n // Step 2: Peek at issuer JWT header (need alg and x5c before verification)\n let header: ReturnType<typeof decodeProtectedHeader>;\n try {\n header = decodeProtectedHeader(parts.jwt);\n } catch {\n throw new MalformedCredentialError('Failed to decode SD-JWT issuer JWT header');\n }\n\n // Step 3: Check algorithm against allowlist\n const alg = header.alg;\n if (typeof alg !== 'string' || !allowedAlgorithms.includes(alg)) {\n return invalidResult(`Unsupported algorithm: ${alg}`);\n }\n\n // Step 4: Extract public key — either from x5c certificate or, when x5c is absent\n // and the caller has provided trustedIssuerJwks, from the matched JWK directly.\n const x5cArray = header.x5c;\n const hasX5c = Array.isArray(x5cArray) && x5cArray.length > 0 && typeof x5cArray[0] === 'string';\n\n let issuerKey: Awaited<ReturnType<typeof importX509>> | Awaited<ReturnType<typeof importJWK>> | undefined;\n // issuerCertBytes is undefined when the JWK path is used — cert trust check is skipped.\n let issuerCertBytes: Uint8Array | undefined;\n\n if (hasX5c) {\n // Primary path: import issuer key from x5c leaf certificate.\n try {\n issuerKey = await importX509(derToPem(x5cArray[0]), alg);\n issuerCertBytes = base64ToBytes(x5cArray[0]);\n } catch (err) {\n if (err instanceof MalformedCredentialError) throw err;\n throw new MalformedCredentialError('Failed to import issuer certificate');\n }\n } else if (options.trustedIssuerJwks && options.trustedIssuerJwks.length > 0) {\n // Alternate trust path: no x5c — caller supplies trusted JWKs out-of-band.\n // The actual signing key is selected in step 5 (signature verify) so that\n // a kid-less header with multiple candidate JWKs picks the one that\n // actually verifies, not just the first kty/crv match.\n issuerKey = undefined;\n } else {\n // No x5c and no trustedIssuerJwks — preserve existing strict behaviour.\n throw new MalformedCredentialError('Missing or invalid x5c in JWT header');\n }\n\n // Step 5: Verify issuer JWT signature (also validates exp, iat via jose).\n // The x5c path has a single key fixed at step 4. The trustedIssuerJwks path\n // narrows by `kid` when present, otherwise tries every candidate until one\n // verifies — required because RFC 7517 does not mandate `kid` and a caller\n // may pass multiple trusted issuer keys.\n let payload: Record<string, unknown>;\n if (issuerKey) {\n try {\n const result = await jwtVerify(parts.jwt, issuerKey, { algorithms: allowedAlgorithms });\n payload = result.payload as unknown as Record<string, unknown>;\n } catch {\n return invalidResult('Issuer JWT signature verification failed');\n }\n } else {\n // trustedIssuerJwks branch: select candidates and try each.\n const jwks = options.trustedIssuerJwks!;\n const headerKid = (header as Record<string, unknown>)['kid'];\n let candidates: JsonWebKey[];\n if (typeof headerKid === 'string') {\n const matched = jwks.find((k) => (k as Record<string, unknown>)['kid'] === headerKid);\n if (!matched) {\n return invalidResult(\n `No matching JWK found in trustedIssuerJwks for kid=${headerKid}`\n );\n }\n candidates = [matched];\n } else {\n candidates = jwks;\n }\n let verifiedPayload: Record<string, unknown> | undefined;\n for (const jwk of candidates) {\n let candidateKey: Awaited<ReturnType<typeof importJWK>>;\n try {\n candidateKey = await importJWK(jwk, alg);\n } catch {\n // Incompatible JWK for the requested alg — skip rather than fail.\n continue;\n }\n try {\n const result = await jwtVerify(parts.jwt, candidateKey, {\n algorithms: allowedAlgorithms,\n });\n verifiedPayload = result.payload as unknown as Record<string, unknown>;\n break;\n } catch {\n // Wrong candidate — try the next one.\n }\n }\n if (!verifiedPayload) {\n return invalidResult('Issuer JWT signature verification failed');\n }\n payload = verifiedPayload;\n }\n\n // Step 6: Trust check — certificate must be in the trusted set\n // unless the caller explicitly opts out via skipTrustCheck, or the JWK path is used.\n const issuerString = typeof payload['iss'] === 'string' ? payload['iss'] : '';\n const issuerInfo: IssuerInfo = {\n certificate: issuerCertBytes ?? new Uint8Array(),\n country: extractCountryHint(issuerString),\n };\n\n let trustResult: TrustEvaluationResult | undefined;\n\n if (issuerCertBytes === undefined) {\n // JWK-based trust path: the caller has explicitly opted in by supplying\n // trustedIssuerJwks — cert-chain evaluation is intentionally skipped.\n // No further trust check is performed here.\n } else if (options.trustStore) {\n // 0.5.0 path: RFC 5280 chain validation via TrustEvaluator.\n // Dynamic import keeps the evaluator out of 0.4.0-style callers' bundles.\n const { TrustEvaluator } = await import('../trust/TrustEvaluator.js');\n const evaluator = new TrustEvaluator({\n trustStore: options.trustStore,\n revocationPolicy: options.revocationPolicy ?? 'skip',\n fetcher: options.fetcher,\n cache: options.cache,\n clockSkewTolerance: options.clockSkewTolerance,\n });\n const { X509Certificate } = await import('@peculiar/x509');\n const leaf = new X509Certificate(issuerCertBytes as Uint8Array<ArrayBuffer>);\n trustResult = await evaluator.evaluate(leaf);\n } else {\n // 0.4.0 byte-equality path — preserved verbatim for backward compatibility.\n if (options.trustedCertificates.length === 0) {\n if (options.skipTrustCheck !== true) {\n throw new MalformedCredentialError(\n 'trustedCertificates must not be empty unless skipTrustCheck is true'\n );\n }\n } else {\n const isTrusted = options.trustedCertificates.some((trusted) =>\n bytesEqual(trusted, issuerCertBytes!)\n );\n if (!isTrusted) {\n return invalidResult('Issuer certificate is not trusted');\n }\n }\n }\n\n // Step 7: Verify disclosure hashes. Per SD-JWT spec §5.2.1:\n // - 3-element `[salt, name, value]` (object-property) → hash MUST be in some `_sd`\n // - 2-element `[salt, value]` (array-element) → hash MUST be referenced\n // by some `{\"...\": \"<hash>\"}` placeholder\n // Both can nest: a disclosed value may itself contain `_sd` or placeholders\n // for further disclosures (e.g. PID's `place_of_birth.country`,\n // `nationalities`). The check is therefore transitive — once a disclosure is\n // anchored, any anchor hashes found inside its disclosed value become valid\n // anchors for OTHER disclosures.\n if (parts.disclosures.length > 0) {\n // Pre-decode disclosures so we can do the transitive closure.\n type DecodedDisclosure = {\n raw: string;\n hash: string;\n length: 2 | 3;\n value: unknown;\n };\n const decodedDisclosures: DecodedDisclosure[] = [];\n for (const disclosure of parts.disclosures) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(new TextDecoder().decode(base64ToBytes(disclosure)));\n } catch {\n return invalidResult('Disclosure is not valid base64url-encoded JSON');\n }\n if (!Array.isArray(parsed) || (parsed.length !== 2 && parsed.length !== 3)) {\n return invalidResult('Disclosure must be a 2- or 3-element array');\n }\n const hashBytes = await sha256Hasher(disclosure, 'sha-256');\n decodedDisclosures.push({\n raw: disclosure,\n hash: bytesToBase64url(hashBytes),\n length: parsed.length as 2 | 3,\n value: parsed.length === 3 ? parsed[2] : parsed[1],\n });\n }\n\n // Seed the anchor sets from the issuer JWT payload itself.\n const seed = collectAnchorHashes(payload);\n const kvHashes = seed.kvHashes;\n const arrayElemHashes = seed.arrayElemHashes;\n\n // Transitive expansion: each pass tries to anchor every still-pending\n // disclosure; when one anchors, its disclosed VALUE feeds new anchor\n // hashes back into the sets, potentially unlocking later disclosures.\n const remaining = [...decodedDisclosures];\n for (;;) {\n const anchored: DecodedDisclosure[] = [];\n for (const d of remaining) {\n const valid =\n d.length === 3 ? kvHashes.has(d.hash) : arrayElemHashes.has(d.hash);\n if (valid) anchored.push(d);\n }\n if (anchored.length === 0) break;\n for (const a of anchored) {\n const sub = collectAnchorHashes(a.value);\n for (const h of sub.kvHashes) kvHashes.add(h);\n for (const h of sub.arrayElemHashes) arrayElemHashes.add(h);\n const idx = remaining.indexOf(a);\n if (idx >= 0) remaining.splice(idx, 1);\n }\n }\n\n if (remaining.length > 0) {\n return invalidResult('Disclosure hash mismatch');\n }\n }\n\n // Step 8: Verify key binding (holder proof-of-possession).\n //\n // Holder binding is MANDATORY when the issuer bound the credential to a\n // holder key via `cnf` (or the caller sets `requireKeyBinding`). Failing\n // closed here is what stops an attacker from stripping the trailing\n // KB-JWT to bypass proof-of-possession AND the nonce / replay check.\n // (CWE-294 capture-replay · CWE-303 missing proof-of-possession)\n const cnf = payload['cnf'] as Record<string, unknown> | undefined;\n const isHolderBound = !!cnf && typeof cnf === 'object' && !!cnf['jwk'];\n const keyBindingRequired = isHolderBound || options.requireKeyBinding === true;\n\n if (keyBindingRequired && !parts.kbJwt) {\n return invalidResult(\n 'Key binding JWT is required for holder-bound credentials but was not presented',\n );\n }\n\n if (parts.kbJwt) {\n if (!isHolderBound) {\n throw new MalformedCredentialError('Missing cnf.jwk in issuer JWT for key binding');\n }\n\n // A KB-JWT proves possession only if bound to THIS verifier's fresh\n // challenge; require the caller-supplied nonce so a missing/empty\n // nonce cannot slip through an `undefined === undefined` comparison.\n if (typeof options.nonce !== 'string' || options.nonce.length === 0) {\n return invalidResult('A nonce is required to verify the key binding JWT');\n }\n\n let holderKey: Awaited<ReturnType<typeof importJWK>>;\n try {\n const kbHeader = decodeProtectedHeader(parts.kbJwt);\n const kbAlg = kbHeader.alg;\n if (typeof kbAlg !== 'string' || !allowedAlgorithms.includes(kbAlg)) {\n return invalidResult(`Unsupported KB-JWT algorithm: ${kbAlg}`);\n }\n holderKey = await importJWK(cnf!['jwk'] as Record<string, unknown>, kbAlg);\n } catch (err) {\n if (err instanceof MalformedCredentialError) throw err;\n throw new MalformedCredentialError('Failed to import holder key from cnf.jwk');\n }\n\n // Verify KB-JWT signature\n let kbPayload: Record<string, unknown>;\n try {\n const kbResult = await jwtVerify(parts.kbJwt, holderKey, {\n algorithms: allowedAlgorithms,\n ...(options.audience ? { audience: options.audience } : {}),\n });\n kbPayload = kbResult.payload as unknown as Record<string, unknown>;\n } catch {\n return invalidResult('Key binding JWT signature verification failed');\n }\n\n // Validate nonce — must be present and match when KB-JWT is used\n if (kbPayload['nonce'] !== options.nonce) {\n return invalidResult('Key binding JWT nonce does not match');\n }\n\n // Verify sd_hash — hash of the SD-JWT content before the KB-JWT\n const disclosurePart = parts.disclosures.length > 0 ? parts.disclosures.join('~') + '~' : '';\n const sdJwtForHash = parts.jwt + '~' + disclosurePart;\n const sdHashBytes = await sha256Hasher(sdJwtForHash, 'sha-256');\n const expectedSdHash = bytesToBase64url(sdHashBytes);\n if (kbPayload['sd_hash'] !== expectedSdHash) {\n return invalidResult('Key binding JWT sd_hash does not match');\n }\n }\n\n // Step 9: Decode disclosures and extract claims\n let resolvedClaims: Record<string, unknown>;\n try {\n const decoded = await decodeSdJwt(vpToken, sha256Hasher);\n resolvedClaims = await getClaims<Record<string, unknown>>(\n decoded.jwt.payload,\n decoded.disclosures,\n sha256Hasher\n );\n } catch {\n throw new MalformedCredentialError('Failed to decode SD-JWT disclosures');\n }\n\n const vct = typeof payload['vct'] === 'string' ? (payload['vct'] as string) : undefined;\n\n const result: PresentationResult = {\n valid: true,\n format: this.format,\n claims: mapToCredentialClaims(resolvedClaims),\n issuer: issuerInfo,\n ...(vct !== undefined ? { vct } : {}),\n };\n if (trustResult) result.trust = trustResult;\n return result;\n }\n}\n\n/**\n * Walks a value and collects every `_sd` array entry plus every\n * `{\"...\": \"<hash>\"}` array-element placeholder hash reachable from it. SD-JWT\n * disclosures can nest — a disclosed object may itself carry a fresh `_sd`\n * array, and a disclosed array may contain `{\"...\": \"<hash>\"}` placeholders\n * for further (2-element) disclosures. The hand-rolled hash check must resolve\n * the full transitive set, otherwise nested disclosures (e.g. PID's\n * `place_of_birth.country`, `nationalities` array) false-reject.\n */\nfunction collectAnchorHashes(node: unknown): { kvHashes: Set<string>; arrayElemHashes: Set<string> } {\n const kvHashes = new Set<string>();\n const arrayElemHashes = new Set<string>();\n const visit = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item && typeof item === 'object' && !Array.isArray(item)) {\n const obj = item as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 1 && keys[0] === '...' && typeof obj['...'] === 'string') {\n arrayElemHashes.add(obj['...']);\n continue;\n }\n }\n visit(item);\n }\n } else if (value && typeof value === 'object') {\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (k === '_sd' && Array.isArray(v)) {\n for (const h of v) if (typeof h === 'string') kvHashes.add(h);\n continue;\n }\n visit(v);\n }\n }\n };\n visit(node);\n return { kvHashes, arrayElemHashes };\n}\n","import { matchQuery, buildSubmission } from '@openeudi/dcql';\nimport type { DcqlQuery, DecodedCredential } from '@openeudi/dcql';\nimport { decodeProtectedHeader } from 'jose';\n\nimport { parsePresentation } from './presentation.js';\nimport { decryptAuthorizationResponse } from './decrypt-response.js';\nimport {\n buildOid4vpSessionTranscript,\n buildOpenID4VPHandoverSessionTranscript,\n} from './crypto/session-transcript.js';\nimport {\n MissingDecryptionKeyError,\n MissingVerifierEncryptionKeyError,\n MultipleCredentialsNotSupportedError,\n} from './errors.js';\nimport type { CredentialFormat, PresentationResult } from './types/presentation.js';\nimport type { AuthorizationResponse } from './types/authorization.js';\nimport type {\n EncryptedResponse,\n VerifyAuthorizationResponseOptions,\n VerifyOptions,\n VerifyResult,\n} from './types/verify.js';\n\n/**\n * Maps the internal `CredentialFormat` to the DCQL wire-level format string\n * as defined by OpenID4VP 1.0 final. The internal `sd-jwt-vc` value predates\n * the DCQL `dc+sd-jwt` identifier; we translate here so the parser contract\n * stays stable.\n */\nconst INTERNAL_TO_DCQL_FORMAT: Record<CredentialFormat, string> = {\n 'sd-jwt-vc': 'dc+sd-jwt',\n mdoc: 'mso_mdoc',\n};\n\n/**\n * Parses a VP token, then matches it against a DCQL query.\n *\n * Cryptographic / structural parser failures still throw (via `parsePresentation`).\n * Query-level mismatches are surfaced as `match.unmatched` entries so callers can\n * show per-claim diagnostics.\n *\n * @param vpToken raw VP token (SD-JWT string or mDOC Uint8Array)\n * @param query DCQL query describing the required credential(s)\n * @param options parse + verify options (nonce, trusted issuers, etc.)\n */\nexport async function verifyPresentation(\n vpToken: unknown,\n query: DcqlQuery,\n options: VerifyOptions\n): Promise<VerifyResult> {\n const parsed = await parsePresentation(vpToken, options);\n\n const dcqlFormat = INTERNAL_TO_DCQL_FORMAT[parsed.format] ?? parsed.format;\n\n // For mDOC, DCQL claim paths address namespace-grouped values (e.g. ['ns', 'attr']).\n // For SD-JWT, the flat claim bag is addressed directly.\n const decodedClaims: Record<string, unknown> =\n parsed.format === 'mdoc' && parsed.namespacedClaims !== undefined\n ? (parsed.namespacedClaims as Record<string, unknown>)\n : (parsed.claims as unknown as Record<string, unknown>);\n\n // Resolve which query credential this presentation actually is. `decoded.id`\n // is what DCQL matching attributes the presentation to, so getting it wrong\n // reports a credential the wallet never presented.\n //\n // This entry point has no `queryIds` — unlike verifyAuthorizationResponse,\n // which reads the id the wallet keyed the vp_token with — so the credential\n // has to be identified from its own contents. Format alone is not enough: a\n // query can list several entries of the same format distinguished only by\n // vct or doctype. Narrow by format, then by credential type, and only fall\n // back to first-listed when nothing identifies it.\n const sameFormat = query.credentials.filter((c) => c.format === dcqlFormat);\n const presentedCredentialQuery =\n sameFormat.find((c) => matchesCredentialType(c, parsed)) ??\n sameFormat[0] ??\n query.credentials[0];\n\n const decoded: DecodedCredential = {\n id: presentedCredentialQuery?.id ?? 'presented',\n format: dcqlFormat,\n claims: decodedClaims,\n };\n\n if (parsed.format === 'sd-jwt-vc' && typeof parsed.vct === 'string') {\n decoded.vct = parsed.vct;\n }\n if (parsed.format === 'mdoc' && typeof parsed.docType === 'string') {\n decoded.doctype = parsed.docType;\n }\n\n // Forward trust-evaluation authority ids into the decoded credential so\n // DCQL's trusted_authorities filter can match them. Populated by\n // TrustEvaluator when a trustStore is provided (Task 16/17).\n if (\n parsed.trust?.trustedAuthorityIds &&\n parsed.trust.trustedAuthorityIds.length > 0\n ) {\n decoded.trusted_authority_ids = [...parsed.trust.trustedAuthorityIds];\n }\n\n const match = matchQuery(query, [decoded]);\n const submission = match.satisfied ? buildSubmission(query, match) : null;\n\n return {\n parsed,\n match,\n submission,\n valid: parsed.valid && match.satisfied,\n };\n}\n\n/**\n * Does this query credential's type constraint match what was actually presented?\n *\n * `vct_values` / `doctype_value` are the only things distinguishing two query\n * entries of the same format, so they are what identifies the presented\n * credential when no query id is available. Returns false when the query states\n * no constraint — an unconstrained entry matches anything, which makes it useless\n * for telling two entries apart, so it should not win over a specific one.\n */\nfunction matchesCredentialType(\n credentialQuery: DcqlQuery['credentials'][number],\n parsed: PresentationResult\n): boolean {\n if (parsed.format === 'sd-jwt-vc') {\n const vctValues = credentialQuery.meta?.vct_values;\n return (\n typeof parsed.vct === 'string' &&\n Array.isArray(vctValues) &&\n vctValues.includes(parsed.vct)\n );\n }\n if (parsed.format === 'mdoc') {\n const doctype = credentialQuery.meta?.doctype_value;\n return typeof parsed.docType === 'string' && doctype === parsed.docType;\n }\n return false;\n}\n\nfunction isEncryptedResponse(x: unknown): x is EncryptedResponse {\n return (\n typeof x === 'object' &&\n x !== null &&\n 'response' in x &&\n typeof (x as Record<string, unknown>).response === 'string' &&\n Object.keys(x).length === 1\n );\n}\n\n// base64url alphabet (RFC 4648 §5): URL-safe, unpadded. Decoded here without\n// Node's Buffer or the browser's atob, matching the parser layer's approach so\n// the library stays runtime-agnostic.\nconst BASE64URL_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\nfunction base64UrlToBytes(input: string): Uint8Array {\n const cleaned = input.replace(/=+$/, '');\n const byteLength = Math.floor((cleaned.length * 3) / 4);\n const bytes = new Uint8Array(byteLength);\n let byteIndex = 0;\n for (let i = 0; i < cleaned.length; i += 4) {\n const a = BASE64URL_CHARS.indexOf(cleaned[i]);\n const b = i + 1 < cleaned.length ? BASE64URL_CHARS.indexOf(cleaned[i + 1]) : 0;\n const c = i + 2 < cleaned.length ? BASE64URL_CHARS.indexOf(cleaned[i + 2]) : 0;\n const d = i + 3 < cleaned.length ? BASE64URL_CHARS.indexOf(cleaned[i + 3]) : 0;\n if (a === -1 || b === -1 || c === -1 || d === -1) {\n throw new TypeError('Invalid base64url character in vp_token/apu');\n }\n bytes[byteIndex++] = (a << 2) | (b >> 4);\n if (byteIndex < byteLength) bytes[byteIndex++] = ((b & 0x0f) << 4) | (c >> 2);\n if (byteIndex < byteLength) bytes[byteIndex++] = ((c & 0x03) << 6) | d;\n }\n return bytes;\n}\n\n/**\n * Extract the `mdoc-generated-nonce` from a JWE's `apu` protected header\n * (ISO 18013-7 Annex B). `apu` is a base64url string whose decoded bytes are the\n * UTF-8 nonce. Returns undefined when the header is malformed or carries no `apu`\n * (the caller then leaves the SessionTranscript unset and the mDOC parser fails\n * closed). The actual JWE validation/decryption is left to\n * {@link decryptAuthorizationResponse}, which raises the canonical errors.\n */\nfunction extractMdocGeneratedNonce(jwe: string): string | undefined {\n let apu: unknown;\n try {\n apu = decodeProtectedHeader(jwe).apu;\n } catch {\n return undefined;\n }\n if (typeof apu !== 'string' || apu.length === 0) {\n return undefined;\n }\n // apu is an attacker-influenceable header nonce: a malformed value must fall\n // through to the documented graceful fail-closed path (transcript left unset,\n // mDOC parser rejects), NOT surface base64UrlToBytes's loud TypeError — which\n // is reserved for the vp_token DeviceResponse decode.\n try {\n return new TextDecoder().decode(base64UrlToBytes(apu));\n } catch {\n return undefined;\n }\n}\n\nfunction isAuthorizationResponse(x: unknown): x is AuthorizationResponse {\n return (\n typeof x === 'object' &&\n x !== null &&\n 'vp_token' in x &&\n typeof (x as Record<string, unknown>).vp_token === 'object' &&\n (x as Record<string, unknown>).vp_token !== null\n );\n}\n\n/**\n * Verify an OpenID4VP 1.0 §8.1 Authorization Response envelope.\n *\n * Accepts either the unencrypted envelope (object-keyed `vp_token`) or a\n * JWE-wrapped envelope `{ response: '<JWE>' }` for response_mode =\n * direct_post.jwt. When encrypted, decrypts with `options.decryptionKey`\n * first. For this release only single-credential single-presentation is\n * supported — multi-credential envelopes throw\n * {@link MultipleCredentialsNotSupportedError}. Otherwise delegates the\n * extracted single presentation to the existing {@link verifyPresentation}.\n *\n * Callers MUST compare the envelope's `state` against the value they issued\n * themselves — library is stateless and does not track state.\n */\nexport async function verifyAuthorizationResponse(\n envelope: AuthorizationResponse | EncryptedResponse,\n query: DcqlQuery,\n options: VerifyAuthorizationResponseOptions,\n): Promise<VerifyResult> {\n if (isEncryptedResponse(envelope)) {\n if (!options.decryptionKey) {\n throw new MissingDecryptionKeyError();\n }\n\n // Auto-build the mDOC SessionTranscript. A caller-supplied transcript\n // always wins. Otherwise the layout depends on `sessionTranscriptProfile`\n // (default 'iso-18013-7' preserves prior behavior):\n // - 'iso-18013-7': ISO 18013-7 Annex B OID4VPHandover, derived from the\n // mdoc-generated-nonce carried in the JWE `apu` header — which only\n // exists on the encrypted response, so this is the sole place we can\n // derive it.\n // - 'openid4vp-1.0': OpenID4VP 1.0 (Final) OpenID4VPHandover (§B.2.6),\n // derived from `verifierEncryptionJwk`'s thumbprint instead — no `apu`\n // needed.\n // When the request config or apu/JWK is missing, we leave the transcript\n // unset and the mDOC parser fails closed (SD-JWT flows are unaffected\n // either way).\n const nextOptions: VerifyAuthorizationResponseOptions = { ...options };\n if (\n options.mdocSessionTranscript === undefined &&\n options.clientId !== undefined &&\n options.responseUri !== undefined &&\n options.nonce !== undefined\n ) {\n if (options.sessionTranscriptProfile === 'openid4vp-1.0') {\n // An encrypted response always implies the verifier advertised a\n // response-encryption JWK, so a missing `verifierEncryptionJwk` here\n // is a caller misconfiguration, not a legitimate \"unencrypted\"\n // scenario — fail loud instead of silently binding a\n // null-thumbprint transcript that would only surface later as an\n // opaque device-auth failure.\n if (options.verifierEncryptionJwk === undefined) {\n throw new MissingVerifierEncryptionKeyError();\n }\n nextOptions.mdocSessionTranscript = await buildOpenID4VPHandoverSessionTranscript({\n clientId: options.clientId,\n nonce: options.nonce,\n responseUri: options.responseUri,\n verifierEncryptionJwk: options.verifierEncryptionJwk,\n });\n } else {\n const mdocGeneratedNonce = extractMdocGeneratedNonce(envelope.response);\n if (mdocGeneratedNonce !== undefined) {\n nextOptions.mdocSessionTranscript = await buildOid4vpSessionTranscript({\n clientId: options.clientId,\n responseUri: options.responseUri,\n nonce: options.nonce,\n mdocGeneratedNonce,\n });\n }\n }\n }\n\n const decrypted = await decryptAuthorizationResponse(\n envelope.response,\n options.decryptionKey,\n );\n return verifyAuthorizationResponse(decrypted, query, nextOptions);\n }\n\n if (!isAuthorizationResponse(envelope)) {\n throw new TypeError('envelope must contain vp_token as a JSON object per OpenID4VP 1.0 §8.1');\n }\n\n const vpToken = envelope.vp_token;\n const queryIds = Object.keys(vpToken);\n\n if (queryIds.length === 0) {\n throw new TypeError('vp_token cannot be empty per OpenID4VP 1.0 §8.1');\n }\n\n for (const id of queryIds) {\n if (!Array.isArray(vpToken[id])) {\n throw new TypeError(\n `vp_token entry \"${id}\" must be an array of presentations per OpenID4VP 1.0 §8.1`,\n );\n }\n }\n\n const presentationCount = queryIds.reduce(\n (sum, id) => sum + vpToken[id].length,\n 0,\n );\n if (queryIds.length > 1 || presentationCount > 1) {\n throw new MultipleCredentialsNotSupportedError(queryIds.length, presentationCount);\n }\n\n const presentedQueryId = queryIds[0];\n const presentation = vpToken[presentedQueryId][0];\n\n // OpenID4VP 1.0 / ISO 18013-7: an `mso_mdoc` VP token is a base64url-encoded\n // CBOR DeviceResponse. Once carried through a JWE-decrypted JSON envelope it is\n // a string, so decode it back to the Uint8Array the mDOC parser expects. SD-JWT\n // (string) and any already-binary presentation pass through unchanged.\n //\n // Dispatch on the credential the wallet actually presented (queryIds[0], per\n // §8.1) rather than query.credentials[0], the first entry in the DCQL query —\n // for a dual-format query built with credential_sets those can differ, and the\n // wrong one always decodes as if it were the first-listed format.\n const presentedCredentialQuery = query.credentials.find(\n (c) => c.id === presentedQueryId,\n );\n const decodedPresentation =\n presentedCredentialQuery?.format === 'mso_mdoc' && typeof presentation === 'string'\n ? base64UrlToBytes(presentation)\n : presentation;\n\n return verifyPresentation(decodedPresentation, query, options);\n}\n","import { compactDecrypt, decodeProtectedHeader } from 'jose';\n\nimport { UnsupportedJweError, DecryptionFailedError } from './errors.js';\nimport type { AuthorizationResponse } from './types/authorization.js';\n\nconst SUPPORTED_ALG = 'ECDH-ES';\nconst SUPPORTED_ENC = new Set(['A128GCM', 'A256GCM']);\n\n/**\n * Decrypt a JWE-wrapped OpenID4VP Authorization Response (response_mode =\n * direct_post.jwt). Returns the inner §8.1 envelope.\n *\n * Supported JWE algorithms (others throw UnsupportedJweError):\n * - alg: ECDH-ES\n * - enc: A128GCM, A256GCM (HAIP requires both)\n *\n * Cryptographic failures (wrong key, tampered ciphertext) throw\n * DecryptionFailedError.\n */\nexport async function decryptAuthorizationResponse(\n jwe: string,\n privateKey: CryptoKey,\n): Promise<AuthorizationResponse> {\n let header: ReturnType<typeof decodeProtectedHeader>;\n try {\n header = decodeProtectedHeader(jwe);\n } catch (err) {\n throw new DecryptionFailedError('Malformed JWE header', {\n cause: err as Error,\n });\n }\n\n const alg = typeof header.alg === 'string' ? header.alg : '';\n const enc = typeof header.enc === 'string' ? header.enc : '';\n\n if (alg !== SUPPORTED_ALG || !SUPPORTED_ENC.has(enc)) {\n throw new UnsupportedJweError(alg, enc);\n }\n\n let plaintext: Uint8Array;\n try {\n const result = await compactDecrypt(jwe, privateKey);\n plaintext = result.plaintext;\n } catch (err) {\n throw new DecryptionFailedError(undefined, { cause: err as Error });\n }\n\n try {\n const text = new TextDecoder().decode(plaintext);\n return JSON.parse(text) as AuthorizationResponse;\n } catch (err) {\n throw new DecryptionFailedError('Decrypted plaintext is not valid JSON', {\n cause: err as Error,\n });\n }\n}\n","import { Encoder as CborEncoder } from 'cbor-x';\n\n// Plain-bstr encoder (tagUint8Array:false → byte strings are major-type-2, not\n// the typed-array tag 64), matching how conformant issuers/holders encode COSE.\nconst enc = new CborEncoder({ mapsAsObjects: false, useRecords: false, tagUint8Array: false });\n\nasync function sha256(bytes: Uint8Array): Promise<Uint8Array> {\n return new Uint8Array(await crypto.subtle.digest('SHA-256', bytes as Uint8Array<ArrayBuffer>));\n}\n\n/**\n * Build the ISO 18013-7 Annex B `OID4VPHandover` SessionTranscript:\n *\n * SessionTranscript = [ null, null, OID4VPHandover ]\n * OID4VPHandover = [ clientIdHash, responseUriHash, nonce ]\n * clientIdHash = SHA-256(cbor([clientId, mdocGeneratedNonce]))\n * responseUriHash = SHA-256(cbor([responseUri, mdocGeneratedNonce]))\n *\n * Used to bind an mdoc DeviceAuthentication to the OpenID4VP authorization\n * request/response exchange it was presented in.\n */\nexport async function buildOid4vpSessionTranscript(params: {\n clientId: string;\n responseUri: string;\n nonce: string;\n mdocGeneratedNonce: string;\n}): Promise<Uint8Array> {\n const { clientId, responseUri, nonce, mdocGeneratedNonce } = params;\n const clientIdHash = await sha256(new Uint8Array(enc.encode([clientId, mdocGeneratedNonce])));\n const responseUriHash = await sha256(new Uint8Array(enc.encode([responseUri, mdocGeneratedNonce])));\n return new Uint8Array(enc.encode([null, null, [clientIdHash, responseUriHash, nonce]]));\n}\n\n/**\n * RFC 7638 JWK SHA-256 thumbprint as RAW digest bytes (not base64url).\n *\n * The thumbprint is SHA-256 over the canonical JWK JSON containing ONLY the\n * required members in lexicographic key order, with no whitespace. For EC keys\n * (RFC 7638 §3.2) that is exactly `{\"crv\":..,\"kty\":\"EC\",\"x\":..,\"y\":..}`.\n *\n * Returns the 32 raw hash bytes because the OpenID4VPHandover embeds the raw\n * thumbprint bytes in CBOR — mirroring the OIDF suite, which calls\n * `jwk.computeThumbprint().decode()` (base64url → raw bytes). See\n * AbstractCreateVP1FinalIsoMdocRedirectSessionTranscript in the conformance\n * suite (openid-certification/conformance-suite@release-v5.1.42).\n */\nasync function jwkSha256Thumbprint(jwk: JsonWebKey): Promise<Uint8Array> {\n if (jwk.kty !== 'EC') {\n throw new Error(`Unsupported JWK kty for thumbprint: ${jwk.kty}`);\n }\n if (!jwk.crv || !jwk.x || !jwk.y) {\n throw new Error('EC JWK for thumbprint is missing a required member (crv, x, or y)');\n }\n const canonical = `{\"crv\":\"${jwk.crv}\",\"kty\":\"EC\",\"x\":\"${jwk.x}\",\"y\":\"${jwk.y}\"}`;\n return sha256(new TextEncoder().encode(canonical));\n}\n\n/**\n * Build the OpenID for Verifiable Presentations 1.0 (Final) `OpenID4VPHandover`\n * SessionTranscript (OID4VP 1.0 §B.2.6, `response_uri` flavour):\n *\n * SessionTranscript = [ null, null, OpenID4VPHandover ]\n * OpenID4VPHandover = [ \"OpenID4VPHandover\", SHA-256(cbor(OpenID4VPHandoverInfo)) ]\n * OpenID4VPHandoverInfo = [ clientId, nonce, jwkThumbprint | null, responseUri ]\n *\n * `jwkThumbprint` is the RFC 7638 SHA-256 thumbprint of the verifier's response\n * ENCRYPTION public JWK as RAW 32 bytes, or CBOR `null` for an unencrypted\n * response. `clientId` is passed verbatim and is expected to already carry its\n * client-id-prefix (e.g. `x509_san_dns:v.example`) — the suite hashes the same\n * `client_id` string it received in the request.\n *\n * This is a DIFFERENT structure from the ISO 18013-7 Annex B `OID4VPHandover`\n * built by `buildOid4vpSessionTranscript` above (which uses an mdoc-generated\n * nonce and separate client_id/response_uri hashes). 1.0-Final wallets tested\n * by the OIDF `oid4vp-1final-verifier-*` modules require THIS layout.\n *\n * Layout confirmed against OID4VP 1.0 Final §B.2.6 and the suite class\n * net.openid.conformance.condition.client.AbstractCreateVP1FinalIsoMdocRedirectSessionTranscript\n * at tag release-v5.1.42: element order [clientId, nonce, thumb|null, responseUri];\n * thumbprint embedded as raw bytes; outer hash is SHA-256 over the CBOR of the\n * 4-element info array.\n */\nexport async function buildOpenID4VPHandoverSessionTranscript(params: {\n clientId: string;\n nonce: string;\n responseUri: string;\n verifierEncryptionJwk?: JsonWebKey;\n}): Promise<Uint8Array> {\n const { clientId, nonce, responseUri, verifierEncryptionJwk } = params;\n const thumb = verifierEncryptionJwk ? await jwkSha256Thumbprint(verifierEncryptionJwk) : null;\n const infoHash = await sha256(new Uint8Array(enc.encode([clientId, nonce, thumb, responseUri])));\n return new Uint8Array(enc.encode([null, null, ['OpenID4VPHandover', infoHash]]));\n}\n","/**\n * Content-addressed cache for CRL responses, OCSP responses, and LOTL\n * snapshots. Keys are library-defined strings; values are raw bytes.\n *\n * Implementations MUST be safe to call concurrently.\n */\nexport interface Cache {\n get(key: string): Promise<Uint8Array | null>;\n set(key: string, value: Uint8Array, ttlSeconds: number): Promise<void>;\n}\n\ninterface Entry {\n value: Uint8Array;\n expiresAt: number; // epoch ms\n}\n\n/**\n * Default `Cache` implementation — bounded-size LRU with wall-clock TTL.\n * Cache dies with the process; inject a persistent `Cache` impl for\n * servers that should survive restarts.\n */\nexport class InMemoryCache implements Cache {\n private readonly entries = new Map<string, Entry>();\n private readonly maxEntries: number;\n\n constructor(opts?: { maxEntries?: number }) {\n this.maxEntries = opts?.maxEntries ?? 1000;\n }\n\n async get(key: string): Promise<Uint8Array | null> {\n const entry = this.entries.get(key);\n if (!entry) return null;\n if (Date.now() > entry.expiresAt) {\n this.entries.delete(key);\n return null;\n }\n // refresh LRU position\n this.entries.delete(key);\n this.entries.set(key, entry);\n return entry.value;\n }\n\n async set(key: string, value: Uint8Array, ttlSeconds: number): Promise<void> {\n // delete-then-set so overwrites move the key to MRU position\n this.entries.delete(key);\n this.entries.set(key, {\n value,\n expiresAt: Date.now() + ttlSeconds * 1000,\n });\n while (this.entries.size > this.maxEntries) {\n const oldest = this.entries.keys().next().value;\n if (oldest === undefined) break;\n this.entries.delete(oldest);\n }\n }\n}\n","export type { TrustAnchor, LotlAnchorMetadata } from './TrustAnchor.js';\nexport type { Fetcher } from './Fetcher.js';\nexport { InMemoryCache, type Cache } from './Cache.js';\nexport {\n StaticTrustStore,\n CompositeTrustStore,\n type TrustStore,\n type TrustStoreHint,\n type TrustStoreInput,\n} from './TrustStore.js';\nexport { LotlTrustStore, type LotlTrustStoreOptions } from './LotlTrustStore.js';\n","import { X509Certificate } from '@peculiar/x509';\nimport type { TrustAnchor } from './TrustAnchor.js';\nimport type { NationalTlSnapshot } from './lotl-types.js';\nimport { getSkiHex } from './x509-utils.js';\n\n/**\n * Resolves trust anchors for a given leaf credential. The library calls\n * `getAnchors()` once per verification after extracting the leaf's issuer\n * hints (DN, Authority Key Identifier, JWT/COSE key ID).\n *\n * Implementations MUST be safe to call concurrently. Stores that cannot\n * satisfy the hint MUST return `[]`, not throw.\n */\nexport interface TrustStore {\n getAnchors(hint: TrustStoreHint): Promise<TrustAnchor[]>;\n}\n\nexport interface TrustStoreHint {\n /** Leaf cert's Issuer DN (RFC 4514 string). */\n issuer?: string;\n /** Leaf cert's Authority Key Identifier extension bytes. */\n aki?: Uint8Array;\n /** JWT/COSE key ID, used by LOTL-backed stores. */\n kid?: string;\n}\n\nexport type TrustStoreInput = X509Certificate | Uint8Array | string;\n\n/**\n * Trust store backed by a fixed list of certificates supplied at construction\n * time. No I/O, no refresh. Suitable for development, testing, and consumers\n * with a static issuer allowlist.\n */\nexport class StaticTrustStore implements TrustStore {\n private readonly anchors: TrustAnchor[] = [];\n private readonly skiIndex: Map<string, TrustAnchor[]> = new Map();\n private readonly subjectIndex: Map<string, TrustAnchor[]> = new Map();\n\n constructor(certs: Iterable<TrustStoreInput>) {\n for (const input of certs) {\n const cert = toCertificate(input);\n const anchor: TrustAnchor = { certificate: cert, source: 'static' };\n this.anchors.push(anchor);\n pushInto(this.subjectIndex, cert.subject, anchor);\n const ski = getSkiHex(cert);\n if (ski) pushInto(this.skiIndex, ski, anchor);\n }\n }\n\n async getAnchors(hint: TrustStoreHint): Promise<TrustAnchor[]> {\n const results: TrustAnchor[] = [];\n if (hint.aki) {\n const key = bytesToHex(hint.aki);\n const matches = this.skiIndex.get(key);\n if (matches) results.push(...matches);\n }\n if (hint.issuer) {\n const matches = this.subjectIndex.get(hint.issuer);\n if (matches) {\n for (const m of matches) {\n if (!results.includes(m)) results.push(m);\n }\n }\n }\n return results;\n }\n}\n\n/**\n * Combines multiple `TrustStore` instances. Children are queried in parallel;\n * results concatenate in child-order; duplicate anchors are dropped by\n * Subject Key Identifier.\n */\nexport class CompositeTrustStore implements TrustStore {\n constructor(private readonly stores: TrustStore[]) {}\n\n async getAnchors(hint: TrustStoreHint): Promise<TrustAnchor[]> {\n const results = await Promise.all(\n this.stores.map((store) => store.getAnchors(hint))\n );\n const seen = new Set<string>();\n const out: TrustAnchor[] = [];\n for (const batch of results) {\n for (const anchor of batch) {\n const ski = getSkiHex(anchor.certificate);\n const key = ski ?? anchor.certificate.serialNumber;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(anchor);\n }\n }\n return out;\n }\n\n async getNationalTls(): Promise<readonly NationalTlSnapshot[]> {\n for (const store of this.stores) {\n const s = store as TrustStore & {\n getNationalTls?: () => Promise<readonly NationalTlSnapshot[]>;\n };\n if (typeof s.getNationalTls === 'function') {\n return s.getNationalTls();\n }\n }\n return [];\n }\n}\n\nfunction toCertificate(input: TrustStoreInput): X509Certificate {\n if (input instanceof X509Certificate) return input;\n if (input instanceof Uint8Array) return new X509Certificate(input as Uint8Array<ArrayBuffer>);\n return new X509Certificate(input); // PEM string path\n}\n\nfunction pushInto<K>(map: Map<K, TrustAnchor[]>, key: K, anchor: TrustAnchor): void {\n const list = map.get(key);\n if (list) list.push(anchor);\n else map.set(key, [anchor]);\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport { LotlConfigurationError } from '../errors.js';\nimport type { Cache } from './Cache.js';\nimport type { Fetcher } from './Fetcher.js';\nimport { EU_LOTL_SIGNING_ANCHORS } from './lotl-signing-anchors.js';\nimport type {\n LotlSnapshot,\n NationalTlSnapshot,\n TspService,\n} from './lotl-types.js';\nimport { LotlFetcher } from './LotlFetcher.js';\nimport { LotlParser } from './LotlParser.js';\nimport { NationalTlResolver } from './NationalTlResolver.js';\nimport type { LotlAnchorMetadata, TrustAnchor } from './TrustAnchor.js';\nimport type { TrustStore, TrustStoreHint } from './TrustStore.js';\nimport { deriveServiceMetadata } from './service-metadata.js';\nimport { getSkiBytes, getSkiHex } from './x509-utils.js';\n\nconst DEFAULT_LOTL_URL = 'https://ec.europa.eu/tools/lotl/eu-lotl.xml';\nconst DEFAULT_REFRESH_INTERVAL_MS = 24 * 3600 * 1000;\n\nexport interface LotlTrustStoreOptions {\n /** Override the bundled signing anchors. Empty is rejected. */\n signingAnchors?: readonly X509Certificate[];\n fetcher?: Fetcher;\n cache?: Cache;\n /** ms between snapshot refreshes. Default: 24h. */\n refreshInterval?: number;\n /** Override the LOTL URL. Defaults to the EC production URL. */\n lotlUrl?: string;\n}\n\ninterface Snapshot {\n readonly lotl: LotlSnapshot;\n readonly nationalTls: readonly NationalTlSnapshot[];\n readonly fetchedAt: number;\n}\n\n/**\n * Public TrustStore backed by the EU LOTL + national TLs. Loads lazily on\n * the first `getAnchors()` call; subsequent calls within `refreshInterval`\n * hit the in-memory snapshot. Graceful degradation: refresh failures serve\n * the prior snapshot with a `console.warn`. Single-flight: concurrent\n * refreshes share one in-flight promise.\n */\nexport class LotlTrustStore implements TrustStore {\n private readonly fetcher: LotlFetcher;\n private readonly resolver: NationalTlResolver;\n private readonly signingAnchors: readonly X509Certificate[];\n private readonly refreshInterval: number;\n private readonly lotlUrl: string;\n private readonly cache: Cache | undefined;\n private snapshot: Snapshot | null = null;\n private inFlight: Promise<Snapshot> | null = null;\n\n constructor(opts: LotlTrustStoreOptions = {}) {\n const anchors =\n opts.signingAnchors && opts.signingAnchors.length > 0\n ? opts.signingAnchors\n : EU_LOTL_SIGNING_ANCHORS;\n if (anchors.length === 0) {\n throw new Error(\n 'LotlTrustStore: no signing anchors available — supply signingAnchors or populate EU_LOTL_SIGNING_ANCHORS'\n );\n }\n this.signingAnchors = anchors;\n this.fetcher = new LotlFetcher({ fetcher: opts.fetcher });\n this.resolver = new NationalTlResolver({ fetcher: this.fetcher });\n this.refreshInterval =\n opts.refreshInterval ?? DEFAULT_REFRESH_INTERVAL_MS;\n this.lotlUrl = opts.lotlUrl ?? DEFAULT_LOTL_URL;\n this.cache = opts.cache;\n }\n\n async getAnchors(hint: TrustStoreHint): Promise<TrustAnchor[]> {\n const snap = await this.getSnapshot();\n const out: TrustAnchor[] = [];\n for (const tl of snap.nationalTls) {\n for (const service of tl.services) {\n for (const cert of service.certificates) {\n if (!matchesHint(cert, hint)) continue;\n out.push(buildAnchor(service, cert));\n }\n }\n }\n return out;\n }\n\n /**\n * Internal accessor — used by `TrustEvaluator` for `ProvenanceResolver`.\n * Not part of the public `TrustStore` contract.\n */\n async getNationalTls(): Promise<readonly NationalTlSnapshot[]> {\n const snap = await this.getSnapshot();\n return snap.nationalTls;\n }\n\n private async getSnapshot(): Promise<Snapshot> {\n const now = Date.now();\n if (\n this.snapshot &&\n now - this.snapshot.fetchedAt < this.refreshInterval\n ) {\n return this.snapshot;\n }\n return this.refresh();\n }\n\n private async refresh(): Promise<Snapshot> {\n if (this.inFlight) return this.inFlight;\n this.inFlight = (async () => {\n try {\n const doc = await this.fetcher.fetchSigned(\n this.lotlUrl,\n this.signingAnchors\n );\n const lotl = new LotlParser().parse(doc);\n const nationalTls = await this.resolver.resolve(lotl);\n this.snapshot = {\n lotl,\n nationalTls,\n fetchedAt: Date.now(),\n };\n return this.snapshot;\n } catch (err) {\n // Serving stale anchors is the right answer for a transient\n // fetch or signature failure. It is the wrong answer for a\n // missing crypto engine: no future refresh can succeed either,\n // so the store would quietly serve an ageing snapshot forever.\n if (err instanceof LotlConfigurationError) throw err;\n if (this.snapshot) {\n console.warn(\n `[openid4vp] LOTL refresh failed; serving cached snapshot (${(err as Error).message})`\n );\n return this.snapshot;\n }\n throw err;\n } finally {\n this.inFlight = null;\n }\n })();\n return this.inFlight;\n }\n}\n\nfunction matchesHint(cert: X509Certificate, hint: TrustStoreHint): boolean {\n if (hint.aki) {\n const ski = getSkiBytes(cert);\n if (ski && equalBytes(ski, hint.aki)) return true;\n }\n if (hint.issuer && cert.subject === hint.issuer) return true;\n return false;\n}\n\nfunction buildAnchor(service: TspService, cert: X509Certificate): TrustAnchor {\n const derived = deriveServiceMetadata(service);\n const metadata: LotlAnchorMetadata = {\n country: service.country,\n serviceName: service.serviceName,\n serviceTypeIdentifier: service.serviceTypeIdentifier,\n serviceStatus: service.serviceStatus,\n ...derived,\n };\n const ski = getSkiHex(cert);\n return {\n certificate: cert,\n source: 'lotl',\n metadata,\n trustedAuthorityIds: ski ? [ski] : [],\n };\n}\n\nfunction equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n","import { X509Certificate } from '@peculiar/x509';\n\n/**\n * EU LOTL signing anchors, bundled at release time. Sourced from the\n * European Commission's LOTL at\n * https://ec.europa.eu/tools/lotl/eu-lotl.xml (retrieved 2026-04-23,\n * sequence number 385, issued 2026-04-15T06:30:37Z).\n *\n * The Commission rotates these roughly every 2-3 years. When a rotation\n * happens:\n * 1. Fetch the current LOTL and extract the <ds:X509Certificate> from the\n * <ds:Signature> block at the end of the document.\n * 2. Append the new cert to this array (retain the old one for one release\n * cycle so consumers with cached LOTL snapshots signed by the prior\n * cert can continue verifying).\n * 3. Cut a patch release (0.5.N) with the new anchors.\n *\n * Consumers may also override via `new LotlTrustStore({ signingAnchors: ... })`\n * for test / emergency-rotation scenarios.\n *\n * Current anchor:\n * Subject : CN=EUROPEAN COMMISSION, O=EUROPEAN COMMISSION,\n * OU=Directorate-General for Digital Services (DIGIT),\n * organizationIdentifier=LEIXG-254900ZNYA1FLUQ9U393, C=LU\n * Issuer : CN=DIGITALSIGN QUALIFIED CA G1,\n * O=DigitalSign Certificadora Digital, C=PT\n * Serial : 73:C2:1C:49:4B:55:10:A0:0C:32:F1:E6:F5:05:94:D3:99:17:B0:F5\n * notAfter: 2027-11-17\n */\nconst PEM_ANCHORS: readonly string[] = [\n `-----BEGIN CERTIFICATE-----\nMIIIoDCCBoigAwIBAgIUc8IcSUtVEKAMMvHm9QWU05kXsPUwDQYJKoZIhvcNAQEN\nBQAwXzELMAkGA1UEBhMCUFQxKjAoBgNVBAoMIURpZ2l0YWxTaWduIENlcnRpZmlj\nYWRvcmEgRGlnaXRhbDEkMCIGA1UEAwwbRElHSVRBTFNJR04gUVVBTElGSUVEIENB\nIEcxMB4XDTIzMTExNzEwMTE0NloXDTI3MTExNzEwMTE0NlowggEVMQswCQYDVQQG\nEwJMVTFDMEEGA1UECww6Q2VydGlmaWNhdGUgUHJvZmlsZSAtIFF1YWxpZmllZCBD\nZXJ0aWZpY2F0ZSAtIE9yZ2FuaXphdGlvbjE5MDcGA1UECwwwRGlyZWN0b3JhdGUt\nR2VuZXJhbCBmb3IgRGlnaXRhbCBTZXJ2aWNlcyAoRElHSVQpMSMwIQYDVQRhDBpM\nRUlYRy0yNTQ5MDBaTllBMUZMVVE5VTM5MzEcMBoGA1UECgwTRVVST1BFQU4gQ09N\nTUlTU0lPTjElMCMGCSqGSIb3DQEJARYWZGlnaXQtZG1vQGVjLmV1cm9wYS5ldTEc\nMBoGA1UEAwwTRVVST1BFQU4gQ09NTUlTU0lPTjCCAiIwDQYJKoZIhvcNAQEBBQAD\nggIPADCCAgoCggIBAKWYeBA9kYARElGnHoJRNpbby44G+TSJcgHI9QtyXlYjB234\nhSAYyJvW+gKvoownskrogfUP6GOmQgEFZX335Y0sBwfppVemEoe9H9Aj/cpT14Iq\ndB05V4a88ASRfR0Va1xmQJrDsBZWqZHx0EEHBctIF5BjyTMAcQybha+4AOIotp3d\nF/7ZA3Cu4GYbN9BuQyyqfqrjMduDzzDjVwKC17aEsLev60C1FnIJ/FVEda3lJSGi\nlD5JyUceTaRcot1rw6gjKrOVhwP/UHfevJ3JCsQsuAzkf7ivzHzYuPPPR9Ussecw\nr7O95Fr4wbPYIyX2AOTlieAC7GMVXHN1/+4LH74ndvoJYEScXwmN9Skib3+G6Tqu\nOCQxvNXzHPZb95btCoSnVprCn14O3CXUTZMEKkhPuKW8dI6pR2JSGbtT+xBkcc1w\nYVlUnzE3d+YK5SSevUT2COwJM+AcjSoUaRTBINsD/ezDDvv7vtbF1XccaJjoCNku\nrzayTsMszGDvAF171LY69lNY6yK0uzrS+3c/hEHctXa5KIC3PpWrBGQ5mw73KerR\nvnAhzDZemVquPk1D59aJNfHoHXmy1bS52rHWYOwHH+2qbODdh8GkHwHXBzSpFit1\nKg2brpavhztNaGlj6GsLFAbr8okCUJllOOLQ8Tfy9Vnn5Rq0+7VTdd8dAxg9AgMB\nAAGjggKaMIICljAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFHNJ8UAcFAR8mhJ/\n+i/NXGcjGOkUMIGGBggrBgEFBQcBAQR6MHgwRgYIKwYBBQUHMAKGOmh0dHBzOi8v\ncWNhLWcxLmRpZ2l0YWxzaWduLnB0L0RJR0lUQUxTSUdOUVVBTElGSUVEQ0FHMS5w\nN2IwLgYIKwYBBQUHMAGGImh0dHBzOi8vcWNhLWcxLmRpZ2l0YWxzaWduLnB0L29j\nc3AwIQYDVR0RBBowGIEWZGlnaXQtZG1vQGVjLmV1cm9wYS5ldTBfBgNVHSAEWDBW\nMDcGCysGAQQBgcd8BAEBMCgwJgYIKwYBBQUHAgEWGmh0dHBzOi8vcGtpLmRpZ2l0\nYWxzaWduLnB0MBAGDisGAQQBgcd8BAIBAQEGMAkGBwQAi+xAAQMwHQYDVR0lBBYw\nFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIG8BggrBgEFBQcBAwSBrzCBrDAVBggrBgEF\nBQcLAjAJBgcEAIvsSQECMAgGBgQAjkYBATAIBgYEAI5GAQQwEwYGBACORgEGMAkG\nBwQAjkYBBgIwagYGBACORgEFMGAwLhYoaHR0cHM6Ly9xY2EtZzEuZGlnaXRhbHNp\nZ24ucHQvUERTX2VuLnBkZhMCZW4wLhYoaHR0cHM6Ly9xY2EtZzEuZGlnaXRhbHNp\nZ24ucHQvUERTX3B0LnBkZhMCcHQwSwYDVR0fBEQwQjBAoD6gPIY6aHR0cHM6Ly9x\nY2EtZzEuZGlnaXRhbHNpZ24ucHQvRElHSVRBTFNJR05RVUFMSUZJRURDQUcxLmNy\nbDAdBgNVHQ4EFgQUlO5hwcl9/63issm59r+TIHeJSZwwDgYDVR0PAQH/BAQDAgZA\nMA0GCSqGSIb3DQEBDQUAA4ICAQCn8qjJhTe3SsD7cB8S8kDzt+CBnJJm7bOFc9t9\nIU6iKntVtjPU4T+cYiPk8TnT+/w7dBphRzjZCL1sDfSJGQ5JPBw+hBPuvzEqP4xV\ni5i4Jhg/GpYSaa2+dkFXlKe6Sd+ii/RnwBSnfqVfNZtasj7yX+oujGau5LSUPIkQ\nxDrMie8KjsNtlkFjQDoioGAx8b0u6WyhAuqwEacCznft20Dim3sC7XJw8GHumrnW\n52rUzl4sbXoTBAt8F1zPCbEbjU0oc8SbFNPIChh+9sHUorEmHIlcg30LBHihkDCx\n4mK8J60Jybk57D4U2RO29VsJfDmnvNxfJZxfLHEJ2tkh+AMqlJXPDlvXQ+rZ1NmL\nHrbXkcHOlqR3F8BakTi2Mi5AZZfkfjZjkigEStN6Enaq6gwF7EsslqEKmhSQ8Xlh\nxWSRqljK/cnEUw+NhrvR4WuKlvYmxlCLQj6q89Hh121aUGUhL2L2WCVBjVXqux7s\n4mvECDzrucl5ilaVT32HO3g8qNLGD5lum53U5v/Nv68ItyHH96unztwBebmgox8g\niVRdzPhmPrpSfbmeNNDKj1p9SCeOvd3P9jCUvChVvH2P2ZUjc24tWe+tzclsCJi7\nGbKr6kjHc1jFudjehflAbm1IZAYdDNrhXamnsRVsz7iSH20eygCArlwSQ//WIQZP\nFrRffg==\n-----END CERTIFICATE-----`,\n];\n\nexport const EU_LOTL_SIGNING_ANCHORS: readonly X509Certificate[] = Object.freeze(\n PEM_ANCHORS.map((pem) => new X509Certificate(pem))\n);\n","import { X509Certificate } from '@peculiar/x509';\nimport { DOMParser } from '@xmldom/xmldom';\nimport type { Document as XmlDocument } from '@xmldom/xmldom';\nimport * as xmldsig from 'xmldsigjs';\nimport { LotlConfigurationError, LotlFetchError, LotlSignatureError } from '../errors.js';\nimport type { Fetcher } from './Fetcher.js';\n\nconst XMLDSIG_NS = 'http://www.w3.org/2000/09/xmldsig#';\n\nexport interface LotlFetcherOptions {\n fetcher?: Fetcher;\n}\n\n/**\n * Private — NOT exported from the package root. Fetches a TSL XML document\n * from HTTP(S) and verifies its enveloped XML-DSig against a caller-supplied\n * set of signing anchors. Any anchor that verifies wins; the remainder are\n * ignored. Consumed by `LotlTrustStore` (for the EU LOTL) and\n * `NationalTlResolver` (for per-country TLs).\n */\nexport class LotlFetcher {\n private readonly fetcher: Fetcher;\n\n constructor(opts: LotlFetcherOptions = {}) {\n this.fetcher = opts.fetcher ?? globalThis.fetch.bind(globalThis);\n }\n\n async fetchSigned(\n url: string,\n signingAnchors: readonly X509Certificate[]\n ): Promise<XmlDocument> {\n // Checked up front: without an engine NO list can verify, so failing\n // here beats fetching, walking every anchor, and reporting the result\n // as an unverified signature.\n assertCryptoEngineRegistered();\n\n let xmlText: string;\n try {\n const response = await this.fetcher(url, { method: 'GET' });\n if (!response.ok) {\n throw new LotlFetchError(\n `LOTL fetch failed: HTTP ${response.status} for ${url}`,\n { url }\n );\n }\n xmlText = await response.text();\n } catch (err) {\n if (err instanceof LotlFetchError) throw err;\n throw new LotlFetchError(`LOTL fetch failed for ${url}`, {\n url,\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n }\n\n let doc: XmlDocument;\n try {\n const parsed = new DOMParser().parseFromString(\n xmlText,\n 'application/xml'\n );\n // @xmldom/xmldom signals parse failures via a <parsererror> element.\n const parseError = parsed.getElementsByTagName('parsererror')[0];\n if (parseError) {\n throw new Error(\n `XML parse error: ${parseError.textContent ?? 'unknown'}`\n );\n }\n if (!parsed.documentElement) {\n throw new Error('empty XML document');\n }\n doc = parsed;\n } catch (err) {\n throw new LotlFetchError(`LOTL XML parse failed for ${url}`, {\n url,\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n }\n\n const sigEl = doc.getElementsByTagNameNS(XMLDSIG_NS, 'Signature').item(0);\n if (!sigEl) {\n throw new LotlSignatureError(`no ds:Signature element in ${url}`);\n }\n\n for (const anchor of signingAnchors) {\n const verified = await verifyAgainst(doc, sigEl as unknown as Element, anchor);\n if (verified) return doc;\n }\n throw new LotlSignatureError(\n `no signing anchor verified the signature on ${url}`\n );\n }\n}\n\n/**\n * Fail fast when the consumer never registered an `xmldsigjs` crypto engine.\n *\n * `Application.crypto` is a getter that THROWS `XmlError`\n * (\"XMLJS0014: WebCrypto module is not found\") when unset rather than returning\n * a falsy value, so the access has to be guarded — a plain\n * `if (!Application.crypto)` would propagate that raw error instead of this one.\n *\n * Engine registration is deliberately left to the consumer (see the comments on\n * `verifyAgainst`), so this reports the omission as configuration rather than\n * silently treating every trusted list as unverifiable.\n */\nfunction assertCryptoEngineRegistered(): void {\n let engine: unknown;\n try {\n engine = xmldsig.Application.crypto;\n } catch (err) {\n throw new LotlConfigurationError(\n 'no xmldsigjs crypto engine registered — trusted-list signatures cannot be ' +\n \"verified. Call xmldsig.Application.setEngine('NodeJS', new Crypto()) \" +\n '(e.g. from @peculiar/webcrypto) once at startup, before using ' +\n `LotlTrustStore. Underlying error: ${err instanceof Error ? err.message : String(err)}`,\n { cause: err instanceof Error ? err : undefined }\n );\n }\n if (!engine) {\n throw new LotlConfigurationError(\n 'no xmldsigjs crypto engine registered — trusted-list signatures cannot be ' +\n \"verified. Call xmldsig.Application.setEngine('NodeJS', new Crypto()) \" +\n '(e.g. from @peculiar/webcrypto) once at startup, before using LotlTrustStore.'\n );\n }\n}\n\n/**\n * Verify an enveloped XML-DSig against a specific anchor certificate.\n *\n * Deviation from the reference snippet: `Verify(key)` in xmldsigjs 2.8.7\n * resolves the key for `ValidateSignatureValue` by calling `reimportKey`, which\n * re-imports via `Application.crypto`. If no crypto engine was registered this\n * path throws. Instead we bypass `Verify()` entirely and call the two\n * sub-operations directly:\n * 1. `ValidateReferences` — checks digests (document integrity).\n * 2. `ValidateSignatureValue([key])` — verifies the cryptographic signature.\n *\n * This guarantees the anchor key is the one used for verification — the\n * `Verify(key)` shortcut falls back to embedded `<X509Data>` when no key is\n * supplied, which would let any self-signed cert in the XML pass. That is\n * unacceptable for a trust-anchor-constrained verification.\n *\n * Keys MUST be imported using `xmldsig.Application.crypto.subtle` (the\n * registered provider, e.g. @peculiar/webcrypto) so that `ValidateSignatureValue`\n * receives a compatible CryptoKey instance. Native `crypto.subtle` keys are\n * rejected by webcrypto-core's type guard.\n */\nasync function verifyAgainst(\n doc: XmlDocument,\n sigEl: Element,\n anchor: X509Certificate\n): Promise<boolean> {\n try {\n const signed = new xmldsig.SignedXml(doc as unknown as Document);\n signed.LoadXml(sigEl as unknown as Element);\n\n // Clone the content element for ValidateReferences (it mutates internally).\n const docEl = doc.documentElement;\n const cloned = docEl?.cloneNode(true);\n // ValidateReferences and ValidateSignatureValue are protected in the\n // xmldsigjs type declarations but accessible at runtime. Cast through\n // unknown to bypass the visibility restriction.\n const signedAny = signed as unknown as {\n ValidateReferences(el: unknown): Promise<boolean>;\n ValidateSignatureValue(keys: CryptoKey[]): Promise<boolean>;\n };\n const refsOk = await signedAny.ValidateReferences(cloned);\n if (!refsOk) return false;\n\n // Import the anchor's SPKI DER bytes using the registered crypto provider\n // so that ValidateSignatureValue receives a compatible CryptoKey.\n // Detect algorithm + curve from the anchor certificate's public key to\n // support P-256, P-384, P-521, and RSA variants without hardcoding.\n const appCrypto = xmldsig.Application.crypto;\n const spkiDer = anchor.publicKey.rawData as ArrayBuffer;\n\n const pubKeyAlg = (anchor.publicKey as unknown as { algorithm?: { name?: string; namedCurve?: string; hash?: { name?: string } | string } }).algorithm;\n const algName = pubKeyAlg?.name ?? '';\n const importAlg: AlgorithmIdentifier | EcKeyImportParams | RsaHashedImportParams = buildImportAlgorithm(algName, pubKeyAlg);\n\n const providerKey = await appCrypto.subtle.importKey(\n 'spki',\n spkiDer,\n importAlg,\n true,\n ['verify']\n );\n\n return await signedAny.ValidateSignatureValue([providerKey]);\n } catch (err) {\n // Signature-value mismatches return `false` cleanly from\n // ValidateSignatureValue. Exceptions here indicate either a key-import\n // failure (wrong curve / malformed SPKI) or a DOM-walk failure. Those\n // are not signature mismatches — log them so a misconfigured anchor\n // doesn't silently exhaust the list.\n if (err instanceof Error) {\n console.warn(\n `[openid4vp] LotlFetcher: anchor ${anchor.subject} failed to verify — ${err.name}: ${err.message}`\n );\n }\n return false;\n }\n}\n\n/**\n * Build the algorithm descriptor for `importKey('spki', ...)` by inspecting\n * the `publicKey.algorithm` property populated by `@peculiar/x509`.\n *\n * For EC keys the algorithm looks like `{ name: 'ECDSA', namedCurve: 'P-256' }`.\n * For RSA keys it looks like `{ name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-256' } }`\n * (or with the hash as a plain string). We map the curve to its conventional\n * matching hash so that the import parameters are correct for the key material.\n */\nfunction buildImportAlgorithm(\n algName: string,\n pubKeyAlg: { name?: string; namedCurve?: string; hash?: { name?: string } | string } | undefined\n): AlgorithmIdentifier | EcKeyImportParams | RsaHashedImportParams {\n if (algName.includes('EC') || algName.includes('ECDSA')) {\n const namedCurve = pubKeyAlg?.namedCurve ?? 'P-256';\n return { name: 'ECDSA', namedCurve } as EcKeyImportParams;\n }\n\n // RSA family: extract hash from the algorithm descriptor if available,\n // otherwise default to SHA-256.\n const rawHash = pubKeyAlg?.hash;\n let hashName: string;\n if (typeof rawHash === 'string') {\n hashName = rawHash;\n } else if (typeof rawHash === 'object' && rawHash !== null && rawHash.name) {\n hashName = rawHash.name;\n } else {\n hashName = 'SHA-256';\n }\n\n return {\n name: 'RSASSA-PKCS1-v1_5',\n hash: { name: hashName },\n } as RsaHashedImportParams;\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport type { Document as XmlDocument, Element as XmlElement } from '@xmldom/xmldom';\nimport type { LotlSnapshot, OtherTslPointer } from './lotl-types.js';\nimport { base64DerToCert, firstChild, textOfDeep } from './xml-util.js';\n\nconst TSL_NS = 'http://uri.etsi.org/02231/v2#';\n\n/**\n * Private — NOT exported from the package root. Parses a verified LOTL\n * XML `Document` into the normalized `LotlSnapshot` used by the rest of\n * the module. Does not fetch; does not verify signatures (that is the\n * `LotlFetcher`'s job). Pure XML-to-value conversion.\n */\nexport class LotlParser {\n parse(doc: XmlDocument): LotlSnapshot {\n const root = doc.documentElement!;\n const scheme = firstChild(root, TSL_NS, 'SchemeInformation');\n if (!scheme) {\n throw new Error(\n 'LOTL XML: missing SchemeInformation element'\n );\n }\n const issueDateText = textOfDeep(scheme, TSL_NS, 'ListIssueDateTime');\n if (!issueDateText) {\n throw new Error(\n 'LOTL XML: missing ListIssueDateTime element'\n );\n }\n const issueDate = new Date(issueDateText);\n if (isNaN(issueDate.getTime())) {\n throw new Error(\n `LOTL XML: invalid ListIssueDateTime \"${issueDateText}\"`\n );\n }\n const nextUpdate = parseNextUpdate(scheme);\n const pointersContainer = firstChild(\n scheme,\n TSL_NS,\n 'PointersToOtherTSL'\n );\n const pointers: OtherTslPointer[] = [];\n if (pointersContainer) {\n const items = pointersContainer.getElementsByTagNameNS(\n TSL_NS,\n 'OtherTSLPointer'\n );\n for (let i = 0; i < items.length; i++) {\n const p = parsePointer(items.item(i)!);\n if (p) pointers.push(p);\n }\n }\n return { issueDate, nextUpdate, pointers };\n }\n}\n\nfunction parseNextUpdate(scheme: XmlElement): Date | null {\n const nu = firstChild(scheme, TSL_NS, 'NextUpdate');\n if (!nu) return null;\n const dt = textOfDeep(nu, TSL_NS, 'dateTime');\n if (!dt) return null;\n const d = new Date(dt);\n return isNaN(d.getTime()) ? null : d;\n}\n\nfunction parsePointer(el: XmlElement): OtherTslPointer | null {\n const tslLocation = textOfDeep(el, TSL_NS, 'TSLLocation');\n if (!tslLocation) return null;\n // SchemeTerritory can be nested under AdditionalInformation/OtherInformation.\n const territory =\n textOfDeep(el, TSL_NS, 'SchemeTerritory') ?? 'XX';\n const certs: X509Certificate[] = [];\n const certEls = el.getElementsByTagNameNS(TSL_NS, 'X509Certificate');\n for (let i = 0; i < certEls.length; i++) {\n const cert = base64DerToCert(certEls.item(i)!.textContent ?? '');\n if (cert) certs.push(cert);\n }\n return {\n country: territory,\n tslLocation,\n signingCertificates: certs,\n };\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport type { Element as XmlElement } from '@xmldom/xmldom';\n\n/**\n * Returns the first element with the given namespace + local name that is a\n * descendant of `parent` (including direct children).\n * Equivalent to getElementsByTagNameNS(ns, name).item(0).\n */\nexport function firstChild(\n parent: XmlElement,\n ns: string,\n name: string\n): XmlElement | null {\n const list = parent.getElementsByTagNameNS(ns, name);\n return list.length > 0 ? (list.item(0) as XmlElement) : null;\n}\n\n/**\n * Returns the trimmed text content of the first element with the given\n * namespace + local name anywhere under `parent`, or null if not found.\n * Works for both direct children and deeper descendants.\n */\nexport function textOfDeep(\n parent: XmlElement,\n ns: string,\n name: string\n): string | null {\n const list = parent.getElementsByTagNameNS(ns, name);\n return list.length > 0\n ? list.item(0)!.textContent?.trim() ?? null\n : null;\n}\n\n/**\n * Parse a base64-encoded DER certificate. Returns null on any parse failure.\n */\nexport function base64DerToCert(base64: string): X509Certificate | null {\n const cleaned = base64.replace(/\\s+/g, '');\n if (!cleaned) return null;\n try {\n const bin = (globalThis as { atob: (s: string) => string }).atob(cleaned);\n const der = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) der[i] = bin.charCodeAt(i);\n return new X509Certificate(der as Uint8Array<ArrayBuffer>);\n } catch {\n return null;\n }\n}\n","import { X509Certificate } from '@peculiar/x509';\nimport { LotlConfigurationError } from '../errors.js';\nimport type { Document as XmlDocument, Element as XmlElement } from '@xmldom/xmldom';\nimport type { LotlFetcher } from './LotlFetcher.js';\nimport type {\n LotlSnapshot,\n NationalTlSnapshot,\n TspService,\n} from './lotl-types.js';\nimport { base64DerToCert, firstChild, textOfDeep } from './xml-util.js';\n\nconst TSL_NS = 'http://uri.etsi.org/02231/v2#';\n\nexport interface NationalTlResolverOptions {\n fetcher: LotlFetcher;\n}\n\n/**\n * Private — NOT exported from the package root. Given a verified\n * `LotlSnapshot`, fetches + parses every national TL it points to.\n * Fetches run in parallel; individual failures are logged via\n * `console.warn` and skipped (spec §8.4 graceful degradation).\n */\nexport class NationalTlResolver {\n constructor(private readonly opts: NationalTlResolverOptions) {}\n\n async resolve(lotl: LotlSnapshot): Promise<NationalTlSnapshot[]> {\n const tasks = lotl.pointers.map(async (pointer) => {\n try {\n const doc = await this.opts.fetcher.fetchSigned(\n pointer.tslLocation,\n pointer.signingCertificates\n );\n return parseNationalTl(doc, pointer.country);\n } catch (err) {\n // §8.4 graceful degradation covers a country whose list is\n // unreachable or badly signed. A configuration fault is not\n // that: every country would fail identically, leaving an empty\n // anchor set behind a pile of misleading per-country warnings.\n if (err instanceof LotlConfigurationError) throw err;\n console.warn(\n `[openid4vp] national TL for ${pointer.country} failed: ${(err as Error).message}`\n );\n return null;\n }\n });\n const results = await Promise.all(tasks);\n return results.filter((r): r is NationalTlSnapshot => r !== null);\n }\n}\n\nfunction parseNationalTl(doc: XmlDocument, country: string): NationalTlSnapshot {\n const root = doc.documentElement!;\n const scheme = firstChild(root, TSL_NS, 'SchemeInformation');\n if (!scheme) {\n throw new Error(\n `national TL for ${country}: missing SchemeInformation element`\n );\n }\n const issueText = firstChild(scheme, TSL_NS, 'ListIssueDateTime')\n ?.textContent?.trim();\n if (!issueText) {\n throw new Error(\n `national TL for ${country}: missing ListIssueDateTime element`\n );\n }\n const issueDate = new Date(issueText);\n if (isNaN(issueDate.getTime())) {\n throw new Error(\n `national TL for ${country}: invalid ListIssueDateTime \"${issueText}\"`\n );\n }\n const nextUpdate = parseNextUpdate(scheme);\n const services: TspService[] = [];\n const tspListEl = firstChild(root, TSL_NS, 'TrustServiceProviderList');\n if (tspListEl) {\n const providers = tspListEl.getElementsByTagNameNS(\n TSL_NS,\n 'TrustServiceProvider'\n );\n for (let i = 0; i < providers.length; i++) {\n const provider = providers.item(i)!;\n // Provider name may be under TSPInformation/TSPName/Name or TSPName/Name.\n // Use deep search to handle both structures.\n const providerName =\n textOfDeep(provider as XmlElement, TSL_NS, 'Name') ??\n 'Unknown';\n const servicesContainer = firstChild(provider as XmlElement, TSL_NS, 'TSPServices');\n if (!servicesContainer) continue;\n const serviceEls = servicesContainer.getElementsByTagNameNS(\n TSL_NS,\n 'TSPService'\n );\n for (let j = 0; j < serviceEls.length; j++) {\n const s = parseService(\n serviceEls.item(j)! as XmlElement,\n providerName,\n country\n );\n if (s) services.push(s);\n }\n }\n }\n return { country, issueDate, nextUpdate, services };\n}\n\nfunction parseService(\n el: XmlElement,\n providerName: string,\n country: string\n): TspService | null {\n const info = firstChild(el, TSL_NS, 'ServiceInformation');\n if (!info) return null;\n const typeId = firstChild(info, TSL_NS, 'ServiceTypeIdentifier')\n ?.textContent?.trim();\n const status = firstChild(info, TSL_NS, 'ServiceStatus')\n ?.textContent?.trim();\n if (!typeId || !status) return null;\n const nameEl = firstChild(info, TSL_NS, 'ServiceName');\n const serviceName =\n (nameEl &&\n nameEl.getElementsByTagNameNS(TSL_NS, 'Name').item(0)?.textContent?.trim()) ||\n 'Unknown Service';\n const digitalId = firstChild(info, TSL_NS, 'ServiceDigitalIdentity');\n const certs: X509Certificate[] = [];\n if (digitalId) {\n const certEls = digitalId.getElementsByTagNameNS(TSL_NS, 'X509Certificate');\n for (let i = 0; i < certEls.length; i++) {\n const cert = base64DerToCert(certEls.item(i)!.textContent ?? '');\n if (cert) certs.push(cert);\n }\n }\n const asiContainer = firstChild(info, TSL_NS, 'ServiceInformationExtensions');\n const asiUris: string[] = [];\n if (asiContainer) {\n const uris = asiContainer.getElementsByTagNameNS(TSL_NS, 'URI');\n for (let i = 0; i < uris.length; i++) {\n const u = uris.item(i)!.textContent?.trim();\n if (u) asiUris.push(u);\n }\n }\n return {\n providerName,\n country,\n serviceTypeIdentifier: typeId,\n serviceStatus: status,\n serviceName,\n certificates: certs,\n additionalServiceInformationUris: asiUris,\n };\n}\n\nfunction parseNextUpdate(scheme: XmlElement | null): Date | null {\n if (!scheme) return null;\n const nu = firstChild(scheme, TSL_NS, 'NextUpdate');\n if (!nu) return null;\n const dt = firstChild(nu, TSL_NS, 'dateTime')?.textContent?.trim();\n if (!dt) return null;\n const d = new Date(dt);\n return isNaN(d.getTime()) ? null : d;\n}\n\n"]}