diff --git a/src/wh_server_img_mgr.c b/src/wh_server_img_mgr.c index 250ea79e7..a0994c922 100644 --- a/src/wh_server_img_mgr.c +++ b/src/wh_server_img_mgr.c @@ -36,6 +36,7 @@ #include "wolfhsm/wh_server.h" #include "wolfhsm/wh_server_img_mgr.h" #include "wolfhsm/wh_server_keystore.h" +#include "wolfhsm/wh_server_cert.h" #include "wolfhsm/wh_nvm.h" #ifndef WOLFHSM_CFG_NO_CRYPTO @@ -87,11 +88,13 @@ int wh_Server_ImgMgrVerifyImg(whServerImgMgrContext* context, whServerContext* server = NULL; uint8_t* keyBuf = NULL; whNvmMetadata* keyMeta = NULL; + size_t keySz = 0; uint8_t sigBuf[WOLFHSM_CFG_SERVER_IMG_MGR_MAX_SIG_SIZE]; /* Buffer for signature */ whNvmMetadata sigMeta = {0}; uint32_t sigSize = sizeof(sigBuf); whNvmSize actualSigSize = 0; + uint8_t* sigPtr = NULL; if (context == NULL || img == NULL || result == NULL) { return WH_ERROR_BADARGS; @@ -106,33 +109,60 @@ int wh_Server_ImgMgrVerifyImg(whServerImgMgrContext* context, return WH_ERROR_BADARGS; } - /* Load the key into the cache */ - ret = wh_Server_KeystoreFreshenKey(server, img->keyId, &keyBuf, &keyMeta); - if (ret != WH_ERROR_OK) { - return ret; - } + switch (img->imgType) { + case WH_IMG_MGR_IMG_TYPE_WOLFBOOT: + /* Load key from keystore, skip sig loading (sig is in header) */ + ret = wh_Server_KeystoreFreshenKey(server, img->keyId, &keyBuf, + &keyMeta); + if (ret != WH_ERROR_OK) { + return ret; + } + keySz = keyMeta->len; + /* sig/sigSz passed as NULL/0 to callback */ + break; + + case WH_IMG_MGR_IMG_TYPE_WOLFBOOT_CERT: + /* Skip both key and sig loading - callback handles everything */ + /* sig/sigSz and key/keySz passed as NULL/0 to callback */ + break; + + case WH_IMG_MGR_IMG_TYPE_RAW: + /* Existing behavior: load key from keystore + sig from NVM */ + ret = wh_Server_KeystoreFreshenKey(server, img->keyId, &keyBuf, + &keyMeta); + if (ret != WH_ERROR_OK) { + return ret; + } + keySz = keyMeta->len; - /* Load the signature from NVM */ - ret = wh_Nvm_GetMetadata(server->nvm, img->sigNvmId, &sigMeta); - if (ret != WH_ERROR_OK) { - return ret; - } + /* Load the signature from NVM */ + ret = wh_Nvm_GetMetadata(server->nvm, img->sigNvmId, &sigMeta); + if (ret != WH_ERROR_OK) { + return ret; + } - /* Ensure signature fits in buffer */ - if (sigMeta.len > sigSize) { - return WH_ERROR_BADARGS; - } + /* Ensure signature fits in buffer */ + if (sigMeta.len > sigSize) { + return WH_ERROR_BADARGS; + } - ret = wh_Nvm_Read(server->nvm, img->sigNvmId, 0, sigMeta.len, sigBuf); - if (ret != WH_ERROR_OK) { - return ret; + ret = + wh_Nvm_Read(server->nvm, img->sigNvmId, 0, sigMeta.len, sigBuf); + if (ret != WH_ERROR_OK) { + return ret; + } + actualSigSize = sigMeta.len; + sigPtr = sigBuf; + break; + + default: + return WH_ERROR_BADARGS; } - actualSigSize = sigMeta.len; /* Invoke verify method callback */ if (img->verifyMethod != NULL) { result->verifyMethodResult = img->verifyMethod( - context, img, keyBuf, keyMeta->len, sigBuf, actualSigSize); + context, img, keyBuf, keySz, sigPtr, actualSigSize); } else { result->verifyMethodResult = WH_ERROR_NOHANDLER; @@ -204,14 +234,13 @@ int wh_Server_ImgMgrVerifyMethodEccWithSha256(whServerImgMgrContext* context, int verifyResult = 0; word32 inOutIdx = 0; - (void)context; /* Unused parameter */ - - if (img == NULL || key == NULL || sig == NULL || keySz == 0 || sigSz == 0) { + if (context == NULL || context->server == NULL || img == NULL || + key == NULL || sig == NULL || keySz == 0 || sigSz == 0) { return WH_ERROR_BADARGS; } /* Initialize ECC key */ - ret = wc_ecc_init(&eccKey); + ret = wc_ecc_init_ex(&eccKey, NULL, context->server->devId); if (ret != 0) { return WH_ERROR_ABORTED; } @@ -287,9 +316,8 @@ int wh_Server_ImgMgrVerifyMethodAesCmac(whServerImgMgrContext* context, int ret = WH_ERROR_OK; Cmac cmac; - (void)context; /* Unused parameter */ - - if (img == NULL || key == NULL || sig == NULL) { + if (context == NULL || context->server == NULL || img == NULL || + key == NULL || sig == NULL) { return WH_ERROR_BADARGS; } @@ -354,14 +382,13 @@ int wh_Server_ImgMgrVerifyMethodRsaSslWithSha256( word32 decryptedLen = sizeof(decrypted); word32 inOutIdx = 0; - (void)context; /* Unused parameter */ - - if (img == NULL || key == NULL || sig == NULL || keySz == 0 || sigSz == 0) { + if (context == NULL || context->server == NULL || img == NULL || + key == NULL || sig == NULL || keySz == 0 || sigSz == 0) { return WH_ERROR_BADARGS; } /* Initialize RSA key */ - ret = wc_InitRsaKey(&rsaKey, NULL); + ret = wc_InitRsaKey_ex(&rsaKey, NULL, context->server->devId); if (ret != 0) { return WH_ERROR_ABORTED; } @@ -431,6 +458,678 @@ int wh_Server_ImgMgrVerifyMethodRsaSslWithSha256( return WH_ERROR_OK; /* RSA verification succeeded */ } +#endif /* !NO_RSA */ + +#ifndef NO_RSA + +/** + * Find a TLV field in a wolfBoot image header. + * Scans from hdr + WH_IMG_MGR_WOLFBOOT_HDR_OFFSET, reads type (uint16 LE) + * + len (uint16 LE), skips padding (0xFF), and returns the length field of the + * TLV, or 0 if not found or invalid input. + * + * NOTE: Code lifted directly from wolfBoot. Should remain as unmodified as + * possible for easy diffs + */ +static uint16_t _wolfBootImgFindHeaderField(const uint8_t* hdr, size_t hdrSize, + uint16_t type, const uint8_t** ptr) +{ + const uint8_t* p = hdr + WH_IMG_MGR_WOLFBOOT_HDR_OFFSET; + const uint8_t* max_p = hdr + hdrSize; + uint16_t htype; + uint16_t len; + + *ptr = NULL; + + if (p > max_p) { + return 0; + } + + while ((p + 4) < max_p) { + htype = (uint16_t)((uint16_t)p[0] | ((uint16_t)p[1] << 8)); + if (htype == 0) { + break; + } + + /* Skip padding bytes and alignment */ + if ((p[0] == WH_IMG_MGR_WOLFBOOT_HDR_PADDING) || + ((((uintptr_t)p) & 0x01) != 0)) { + p++; + continue; + } + + len = (uint16_t)((uint16_t)p[2] | ((uint16_t)p[3] << 8)); + + /* Sanity: field must fit in header */ + if ((size_t)(4 + len) > (hdrSize - WH_IMG_MGR_WOLFBOOT_HDR_OFFSET)) { + break; + } + if (p + 4 + len > max_p) { + break; + } + + /* Advance past type+len to value */ + p += 4; + + if (htype == type) { + *ptr = p; + return len; + } + + p += len; + } + return 0; +} + +/** + * Compute SHA256 hash over header (up to the hash TLV) + firmware payload. + * Hashes header bytes [0 .. stored_sha_ptr - 4) then firmware bytes. + */ +static int _wolfBootImgHashSha256(const uint8_t* hdr, + const uint8_t* stored_sha_ptr, + const uint8_t* img, uint32_t img_size, + uint8_t* hash_out, int devId) +{ + wc_Sha256 sha256_ctx; + const uint8_t* end_sha; + int ret; + const size_t tlv_sz = 4; + + /* Hash the header from byte 0 up to the hash TLV's type+len fields + * (i.e., exclude the TLV header: 2 bytes type + 2 bytes len = 4 bytes) */ + end_sha = stored_sha_ptr - tlv_sz; + + ret = wc_InitSha256_ex(&sha256_ctx, NULL, devId); + if (ret != 0) { + return WH_ERROR_ABORTED; + } + + /* Hash header portion */ + ret = wc_Sha256Update(&sha256_ctx, hdr, (word32)(end_sha - hdr)); + if (ret != 0) { + wc_Sha256Free(&sha256_ctx); + return WH_ERROR_ABORTED; + } + + /* Hash firmware image */ + ret = wc_Sha256Update(&sha256_ctx, img, img_size); + if (ret != 0) { + wc_Sha256Free(&sha256_ctx); + return WH_ERROR_ABORTED; + } + + ret = wc_Sha256Final(&sha256_ctx, hash_out); + wc_Sha256Free(&sha256_ctx); + if (ret != 0) { + return WH_ERROR_ABORTED; + } + return WH_ERROR_OK; +} + +/* + * Decodes raw tag from ASN.1 DER + * + * NOTE: Code lifted directly from wolfBoot. Should remain as unmodified as + * possible for easy diffs + */ +static int _wolfBootImgDecodeAsn1Tag(const uint8_t* input, int inputSz, + int* inOutIdx, int* tag_len, uint8_t tag) +{ + /* Need at least 2 bytes from current index: tag + length */ + if (*inOutIdx + 2 > inputSz) { + return -1; + } + if (input[*inOutIdx] != tag) { + return -1; + } + (*inOutIdx)++; + *tag_len = input[*inOutIdx]; + (*inOutIdx)++; + if (*tag_len + *inOutIdx > inputSz) { + return -1; + } + return 0; +} + +/** + * Decode ASN.1 DigestInfo wrapper from RSA PKCS#1 v1.5 signature. + * Returns digest length on success, -1 on parse error. + * + * NOTE: Code lifted directly from wolfBoot. Should remain as unmodified as + * possible for easy diffs + */ +static int _wolfBootImgDecodeRsaDigestInfo(uint8_t** pInput, int inputSz) +{ +/* ASN.1 constants for DigestInfo decoding */ +#define _IMGMGR_ASN_SEQUENCE 0x30 +#define _IMGMGR_ASN_OCTET_STRING 0x04 + + uint8_t* input = *pInput; + int idx = 0; + int digest_len; + int algo_len; + int tot_len; + + /* SEQUENCE - total size */ + if (_wolfBootImgDecodeAsn1Tag(input, inputSz, &idx, &tot_len, + _IMGMGR_ASN_SEQUENCE) != 0) { + return -1; + } + + /* SEQUENCE - algoid */ + if (_wolfBootImgDecodeAsn1Tag(input, inputSz, &idx, &algo_len, + _IMGMGR_ASN_SEQUENCE) != 0) { + return -1; + } + idx += algo_len; /* skip algoid */ + + /* OCTET STRING - digest */ + if (_wolfBootImgDecodeAsn1Tag(input, inputSz, &idx, &digest_len, + _IMGMGR_ASN_OCTET_STRING) != 0) { + return -1; + } + + /* Return pointer to digest data */ + *pInput = &input[idx]; + return digest_len; +} + +/** + * Verify RSA4096 signature against a hash using PKCS#1 v1.5. + */ +static int _wolfBootImgVerifySigRsa4096(const uint8_t* sig, uint16_t sigSz, + const uint8_t* hash, uint32_t hashSz, + const uint8_t* pubkey, + uint32_t pubkeySz, int devId) +{ + int ret; + RsaKey rsa; + uint8_t output[512]; /* RSA4096_SIG_SIZE */ + uint8_t* digest_out = NULL; + word32 inOutIdx = 0; + + if (sigSz != 512) { + return WH_ERROR_BADARGS; + } + + ret = wc_InitRsaKey_ex(&rsa, NULL, devId); + if (ret != 0) { + return WH_ERROR_ABORTED; + } + + ret = wc_RsaPublicKeyDecode(pubkey, &inOutIdx, &rsa, pubkeySz); + if (ret < 0) { + wc_FreeRsaKey(&rsa); + return WH_ERROR_ABORTED; + } + + memcpy(output, sig, 512); + ret = wc_RsaSSL_VerifyInline(output, 512, &digest_out, &rsa); + wc_FreeRsaKey(&rsa); + + if (ret < 0 || digest_out == NULL) { + return WH_ERROR_NOTVERIFIED; + } + + /* If result is larger than the hash, it contains ASN.1 DigestInfo */ + if (ret > (int)hashSz) { + ret = _wolfBootImgDecodeRsaDigestInfo(&digest_out, ret); + if (ret < 0) { + return WH_ERROR_NOTVERIFIED; + } + } + + if (ret != (int)hashSz) { + return WH_ERROR_NOTVERIFIED; + } + + if (memcmp(digest_out, hash, hashSz) != 0) { + return WH_ERROR_NOTVERIFIED; + } + + return WH_ERROR_OK; +} + + +/** + * Verify that a public key matches the hint stored in the wolfBoot header. + * The hint is SHA256(pubkey). + * + * NOTE: Code lifted directly from wolfBoot. Should remain as unmodified as + * possible for easy diffs + */ +static int _wolfBootImgVerifyPubKeyHint(const uint8_t* pubkey, + uint32_t pubkeySz, const uint8_t* hint, + uint16_t hintSz, int devId) +{ + wc_Sha256 sha256_ctx; + uint8_t key_hash[WC_SHA256_DIGEST_SIZE]; + int ret; + + if (hintSz != WC_SHA256_DIGEST_SIZE) { + return WH_ERROR_NOTVERIFIED; + } + + ret = wc_InitSha256_ex(&sha256_ctx, NULL, devId); + if (ret != 0) { + return WH_ERROR_ABORTED; + } + + ret = wc_Sha256Update(&sha256_ctx, pubkey, pubkeySz); + if (ret != 0) { + wc_Sha256Free(&sha256_ctx); + return WH_ERROR_ABORTED; + } + + ret = wc_Sha256Final(&sha256_ctx, key_hash); + wc_Sha256Free(&sha256_ctx); + if (ret != 0) { + return WH_ERROR_ABORTED; + } + + if (memcmp(key_hash, hint, WC_SHA256_DIGEST_SIZE) != 0) { + return WH_ERROR_NOTVERIFIED; + } + + return WH_ERROR_OK; +} + +/* Decode a 32-bit little-endian value from raw header bytes. The wolfBoot + * image format is little-endian by spec; using explicit byte assembly keeps + * this correct on both LE and BE hosts. */ +static uint32_t _wolfBootImgReadLE32(const uint8_t* p) +{ + return (uint32_t)p[0] | ((uint32_t)p[1] << 8) | ((uint32_t)p[2] << 16) | + ((uint32_t)p[3] << 24); +} + +#ifdef WOLFHSM_CFG_DMA +/* Peek magic and the header-declared image size from a wolfBoot header. Used + * before mapping the payload via DMA so the mapped region matches the real + * image length rather than the caller-provided max buffer size. */ +static int _wolfBootImgPeekImgSize(const uint8_t* hdr, size_t hdrSize, + uint32_t* img_size_out) +{ + uint32_t magic; + + if (hdr == NULL || img_size_out == NULL) { + return WH_ERROR_BADARGS; + } + if (((uintptr_t)hdr & 0x01) != 0) { + return WH_ERROR_BADARGS; + } + if (hdrSize < WH_IMG_MGR_WOLFBOOT_HDR_OFFSET) { + return WH_ERROR_BADARGS; + } + + magic = _wolfBootImgReadLE32(hdr); + if (magic != WH_IMG_MGR_WOLFBOOT_MAGIC) { + return WH_ERROR_NOTVERIFIED; + } + + *img_size_out = _wolfBootImgReadLE32(hdr + 4); + return WH_ERROR_OK; +} +#endif /* WOLFHSM_CFG_DMA */ + +/** + * Common wolfBoot header validation and hash computation. + * Validates that the header is large enough for the fixed fields, and that + * the header-declared image size does not exceed the supplied payload buffer. + * Returns WH_ERROR_OK on success and populates computed_hash. + * On success, sig_out and sig_sz_out point to the signature in the header. + */ +static int _wolfBootImgValidateAndHash(const uint8_t* hdr, size_t hdrSize, + const uint8_t* payload, + size_t payloadSize, + uint8_t* computed_hash, + const uint8_t** sig_out, + uint16_t* sig_sz_out, int devId) +{ + uint32_t magic; + uint32_t img_size; + const uint8_t* image_type_buf; + uint16_t image_type_size; + uint16_t image_type; + uint8_t auth_type; + const uint8_t* stored_sha; + uint16_t stored_sha_len; + const uint8_t* sig; + uint16_t sig_size; + int ret; + + if (hdr == NULL || payload == NULL || computed_hash == NULL || + sig_out == NULL || sig_sz_out == NULL) { + return WH_ERROR_BADARGS; + } + + /* Header must be even address for 2-byte alignment */ + if (((uintptr_t)hdr & 0x01) != 0) { + return WH_ERROR_BADARGS; + } + + /* Header must be large enough for magic (4 bytes) + img_size (4 bytes) + + * at least one TLV header (type+len = 4 bytes). The +4 is required so + * _wolfBootImgFindHeaderField's `p + 4` pointer arithmetic stays within + * (or one-past) the buffer bounds (avoids UB for sub-12-byte headers). */ + if (hdrSize < WH_IMG_MGR_WOLFBOOT_HDR_OFFSET + 4) { + return WH_ERROR_BADARGS; + } + + /* Validate magic (wolfBoot format is little-endian) */ + magic = _wolfBootImgReadLE32(hdr); + if (magic != WH_IMG_MGR_WOLFBOOT_MAGIC) { + return WH_ERROR_NOTVERIFIED; + } + + /* Read image size from header (this field is covered by the signature) */ + img_size = _wolfBootImgReadLE32(hdr + 4); + + /* Ensure header-declared image size doesn't exceed supplied payload */ + if ((size_t)img_size > payloadSize) { + return WH_ERROR_BADARGS; + } + + /* Parse HDR_IMG_TYPE to verify auth algorithm */ + image_type_size = _wolfBootImgFindHeaderField( + hdr, hdrSize, WH_IMG_MGR_WOLFBOOT_HDR_IMG_TYPE, &image_type_buf); + if (image_type_size != sizeof(uint16_t)) { + return WH_ERROR_NOTVERIFIED; + } + image_type = (uint16_t)((uint16_t)image_type_buf[0] | + ((uint16_t)image_type_buf[1] << 8)); + auth_type = + (uint8_t)((image_type & WH_IMG_MGR_WOLFBOOT_HDR_IMG_TYPE_AUTH_MASK) >> + 8); + if (auth_type != WH_IMG_MGR_WOLFBOOT_AUTH_RSA4096) { + return WH_ERROR_NOTVERIFIED; + } + + /* Parse HDR_SHA256 to get stored hash and its position */ + stored_sha_len = _wolfBootImgFindHeaderField( + hdr, hdrSize, WH_IMG_MGR_WOLFBOOT_HDR_SHA256, &stored_sha); + if (stored_sha_len != WC_SHA256_DIGEST_SIZE) { + return WH_ERROR_NOTVERIFIED; + } + + /* Compute hash over (header up to hash TLV boundary) + firmware */ + ret = _wolfBootImgHashSha256(hdr, stored_sha, payload, img_size, + computed_hash, devId); + if (ret != WH_ERROR_OK) { + return ret; + } + + /* Compare computed hash with stored hash */ + if (memcmp(computed_hash, stored_sha, WC_SHA256_DIGEST_SIZE) != 0) { + return WH_ERROR_NOTVERIFIED; + } + + /* Parse HDR_SIGNATURE */ + sig_size = _wolfBootImgFindHeaderField( + hdr, hdrSize, WH_IMG_MGR_WOLFBOOT_HDR_SIGNATURE, &sig); + if (sig_size == 0 || sig == NULL) { + return WH_ERROR_NOTVERIFIED; + } + + *sig_out = sig; + *sig_sz_out = sig_size; + + return WH_ERROR_OK; +} + + +int wh_Server_ImgMgrVerifyMethodWolfBootRsa4096WithSha256( + whServerImgMgrContext* context, const whServerImgMgrImg* img, + const uint8_t* key, size_t keySz, const uint8_t* sig, size_t sigSz) +{ + int ret; + uint8_t computed_hash[WC_SHA256_DIGEST_SIZE]; + const uint8_t* hdr; + const uint8_t* payload; + const uint8_t* hdr_sig; + uint16_t hdr_sig_sz; + const uint8_t* pubkey_hint; + uint16_t pubkey_hint_size; + size_t payloadSize; + whServerContext* server; + int devId; +#ifdef WOLFHSM_CFG_DMA + void* serverHdrPtr = NULL; + void* serverPayloadPtr = NULL; + uint32_t peekedImgSize = 0; + int payloadMapped = 0; +#endif + + (void)sig; + (void)sigSz; + + if (context == NULL || context->server == NULL || img == NULL || + key == NULL || keySz == 0) { + return WH_ERROR_BADARGS; + } + + server = context->server; + devId = server->devId; + +#ifdef WOLFHSM_CFG_DMA + /* DMA pre-process header */ + ret = wh_Server_DmaProcessClientAddress( + server, img->hdrAddr, &serverHdrPtr, img->hdrSize, + WH_DMA_OPER_CLIENT_READ_PRE, (whServerDmaFlags){0}); + if (ret != WH_ERROR_OK) { + return ret; + } + hdr = (const uint8_t*)serverHdrPtr; + + /* Peek header-declared image size so we map only what's needed. Bound + * it by img->size (documented as max payload buffer) to reject a header + * that claims more than the caller provided. */ + ret = _wolfBootImgPeekImgSize(hdr, img->hdrSize, &peekedImgSize); + if (ret != WH_ERROR_OK) { + goto cleanup; + } + if ((size_t)peekedImgSize > img->size) { + ret = WH_ERROR_BADARGS; + goto cleanup; + } + payloadSize = (size_t)peekedImgSize; + + /* DMA pre-process payload using the actual image size */ + ret = wh_Server_DmaProcessClientAddress( + server, img->addr, &serverPayloadPtr, payloadSize, + WH_DMA_OPER_CLIENT_READ_PRE, (whServerDmaFlags){0}); + if (ret != WH_ERROR_OK) { + goto cleanup; + } + payloadMapped = 1; + payload = (const uint8_t*)serverPayloadPtr; +#else + hdr = (const uint8_t*)img->hdrAddr; + payload = (const uint8_t*)img->addr; + payloadSize = img->size; +#endif + + /* Validate header, compute and verify hash, extract signature */ + ret = _wolfBootImgValidateAndHash(hdr, img->hdrSize, payload, payloadSize, + computed_hash, &hdr_sig, &hdr_sig_sz, + devId); + if (ret != WH_ERROR_OK) { + goto cleanup; + } + + /* Verify pubkey hint matches provided key */ + pubkey_hint_size = _wolfBootImgFindHeaderField( + hdr, img->hdrSize, WH_IMG_MGR_WOLFBOOT_HDR_PUBKEY, &pubkey_hint); + ret = _wolfBootImgVerifyPubKeyHint(key, (uint32_t)keySz, pubkey_hint, + pubkey_hint_size, devId); + if (ret != WH_ERROR_OK) { + goto cleanup; + } + + /* Verify RSA4096 signature */ + ret = _wolfBootImgVerifySigRsa4096(hdr_sig, hdr_sig_sz, computed_hash, + WC_SHA256_DIGEST_SIZE, key, + (uint32_t)keySz, devId); + +cleanup: +#ifdef WOLFHSM_CFG_DMA + if (payloadMapped) { + (void)wh_Server_DmaProcessClientAddress( + server, img->addr, &serverPayloadPtr, payloadSize, + WH_DMA_OPER_CLIENT_READ_POST, (whServerDmaFlags){0}); + } + (void)wh_Server_DmaProcessClientAddress( + server, img->hdrAddr, &serverHdrPtr, img->hdrSize, + WH_DMA_OPER_CLIENT_READ_POST, (whServerDmaFlags){0}); +#endif + return ret; +} + +#ifdef WOLFHSM_CFG_CERTIFICATE_MANAGER +int wh_Server_ImgMgrVerifyMethodWolfBootCertChainRsa4096WithSha256( + whServerImgMgrContext* context, const whServerImgMgrImg* img, + const uint8_t* key, size_t keySz, const uint8_t* sig, size_t sigSz) +{ + int ret; + uint8_t computed_hash[WC_SHA256_DIGEST_SIZE]; + const uint8_t* hdr; + const uint8_t* payload; + const uint8_t* hdr_sig; + uint16_t hdr_sig_sz; + const uint8_t* cert_chain; + uint16_t cert_chain_len; + const uint8_t* pubkey_hint; + uint16_t pubkey_hint_size; + size_t payloadSize; + whKeyId leafKeyId = WH_KEYID_ERASED; + uint8_t* leafKeyBuf = NULL; + whNvmMetadata* leafKeyMeta = NULL; + whServerContext* server; + int devId; +#ifdef WOLFHSM_CFG_DMA + void* serverHdrPtr = NULL; + void* serverPayloadPtr = NULL; + uint32_t peekedImgSize = 0; + int payloadMapped = 0; +#endif + + (void)key; + (void)keySz; + (void)sig; + (void)sigSz; + + if (context == NULL || img == NULL) { + return WH_ERROR_BADARGS; + } + + server = context->server; + if (server == NULL) { + return WH_ERROR_BADARGS; + } + devId = server->devId; + +#ifdef WOLFHSM_CFG_DMA + /* DMA pre-process header */ + ret = wh_Server_DmaProcessClientAddress( + server, img->hdrAddr, &serverHdrPtr, img->hdrSize, + WH_DMA_OPER_CLIENT_READ_PRE, (whServerDmaFlags){0}); + if (ret != WH_ERROR_OK) { + return ret; + } + hdr = (const uint8_t*)serverHdrPtr; + + /* Peek header-declared image size so we map only what's needed. Bound + * it by img->size (documented as max payload buffer) to reject a header + * that claims more than the caller provided. */ + ret = _wolfBootImgPeekImgSize(hdr, img->hdrSize, &peekedImgSize); + if (ret != WH_ERROR_OK) { + goto cleanup; + } + if ((size_t)peekedImgSize > img->size) { + ret = WH_ERROR_BADARGS; + goto cleanup; + } + payloadSize = (size_t)peekedImgSize; + + /* DMA pre-process payload using the actual image size */ + ret = wh_Server_DmaProcessClientAddress( + server, img->addr, &serverPayloadPtr, payloadSize, + WH_DMA_OPER_CLIENT_READ_PRE, (whServerDmaFlags){0}); + if (ret != WH_ERROR_OK) { + goto cleanup; + } + payloadMapped = 1; + payload = (const uint8_t*)serverPayloadPtr; +#else + hdr = (const uint8_t*)img->hdrAddr; + payload = (const uint8_t*)img->addr; + payloadSize = img->size; +#endif + + /* Validate header, compute and verify hash, extract signature */ + ret = _wolfBootImgValidateAndHash(hdr, img->hdrSize, payload, payloadSize, + computed_hash, &hdr_sig, &hdr_sig_sz, + devId); + if (ret != WH_ERROR_OK) { + goto cleanup; + } + + /* Parse cert chain from header */ + cert_chain_len = _wolfBootImgFindHeaderField( + hdr, img->hdrSize, WH_IMG_MGR_WOLFBOOT_HDR_CERT_CHAIN, &cert_chain); + if (cert_chain_len == 0 || cert_chain == NULL) { + ret = WH_ERROR_NOTVERIFIED; + goto cleanup; + } + + /* Verify cert chain against root CA and cache the leaf pubkey */ + ret = wh_Server_CertVerify(server, cert_chain, cert_chain_len, + img->sigNvmId, WH_CERT_FLAGS_CACHE_LEAF_PUBKEY, + WH_NVM_FLAGS_USAGE_VERIFY, &leafKeyId); + if (ret != WH_ERROR_OK) { + goto cleanup; + } + + /* Load leaf pubkey from keystore */ + ret = wh_Server_KeystoreFreshenKey(server, leafKeyId, &leafKeyBuf, + &leafKeyMeta); + if (ret != WH_ERROR_OK) { + goto evict_cleanup; + } + + /* Verify pubkey hint matches leaf key */ + pubkey_hint_size = _wolfBootImgFindHeaderField( + hdr, img->hdrSize, WH_IMG_MGR_WOLFBOOT_HDR_PUBKEY, &pubkey_hint); + ret = _wolfBootImgVerifyPubKeyHint(leafKeyBuf, leafKeyMeta->len, + pubkey_hint, pubkey_hint_size, devId); + if (ret != WH_ERROR_OK) { + goto evict_cleanup; + } + + /* Verify RSA4096 signature using leaf pubkey */ + ret = _wolfBootImgVerifySigRsa4096(hdr_sig, hdr_sig_sz, computed_hash, + WC_SHA256_DIGEST_SIZE, leafKeyBuf, + leafKeyMeta->len, devId); + +evict_cleanup: + /* Evict cached leaf key */ + (void)wh_Server_KeystoreEvictKey(server, leafKeyId); + +cleanup: +#ifdef WOLFHSM_CFG_DMA + if (payloadMapped) { + (void)wh_Server_DmaProcessClientAddress( + server, img->addr, &serverPayloadPtr, payloadSize, + WH_DMA_OPER_CLIENT_READ_POST, (whServerDmaFlags){0}); + } + (void)wh_Server_DmaProcessClientAddress( + server, img->hdrAddr, &serverHdrPtr, img->hdrSize, + WH_DMA_OPER_CLIENT_READ_POST, (whServerDmaFlags){0}); +#endif + return ret; +} +#endif /* WOLFHSM_CFG_CERTIFICATE_MANAGER */ + #endif /* !NO_RSA */ #endif /* !WOLFHSM_CFG_NO_CRYPTO */ diff --git a/test/gen/wh_test_wolfboot_img_data.h b/test/gen/wh_test_wolfboot_img_data.h new file mode 100644 index 000000000..153b9e5bb --- /dev/null +++ b/test/gen/wh_test_wolfboot_img_data.h @@ -0,0 +1,2016 @@ +/* + * Copyright (C) 2025 wolfSSL Inc. + * + * This file is part of wolfHSM. + * + * wolfHSM is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * wolfHSM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with wolfHSM. If not, see . + */ +/* + * test/gen/wh_test_wolfboot_img_data.h + * + * Auto-generated wolfBoot test data for image manager verification tests. + * Generated by test/scripts/gen_wolfboot_test_data.sh + * + * DO NOT EDIT MANUALLY. + */ + +#ifndef WH_TEST_WOLFBOOT_IMG_DATA_H +#define WH_TEST_WOLFBOOT_IMG_DATA_H + +#include +#include + +/* wolfBoot signed header (RSA4096+SHA256, 1024 bytes) */ +static const uint8_t wolfboot_test_header[] = { + 0x57, 0x4f, 0x4c, 0x46, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x08, 0x00, + 0xbc, 0xff, 0xa9, 0x69, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x20, 0x00, + 0x08, 0x5d, 0xc1, 0xb0, 0x73, 0xa5, 0x30, 0xf0, 0xa7, 0x61, 0x8a, 0x54, + 0xbe, 0x6a, 0xf5, 0x9f, 0x6d, 0xda, 0x8a, 0x63, 0x45, 0xc1, 0x0e, 0xd8, + 0x01, 0x5b, 0xb7, 0x23, 0x20, 0xdb, 0xf3, 0x4b, 0xff, 0xff, 0xff, 0xff, + 0x03, 0x00, 0x20, 0x00, 0xf2, 0x6c, 0x71, 0x6c, 0x14, 0x5c, 0x24, 0x99, + 0x1f, 0x81, 0xfa, 0x2b, 0xed, 0xbd, 0xdf, 0x3f, 0xff, 0x76, 0x27, 0xb3, + 0xf7, 0x01, 0xf1, 0x74, 0xe7, 0xf4, 0x3d, 0x94, 0x46, 0x73, 0x2a, 0x39, + 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x02, 0x99, 0x24, 0xe2, 0x39, + 0x28, 0x4b, 0x8c, 0xbd, 0x88, 0xcb, 0xf4, 0x73, 0xa7, 0x25, 0xc1, 0x4d, + 0xf3, 0x9f, 0xa1, 0xc0, 0xce, 0xc6, 0x39, 0x65, 0xbe, 0x5d, 0x9a, 0xc1, + 0xf3, 0x3c, 0xa0, 0xca, 0xc1, 0xd0, 0x06, 0x81, 0xc1, 0x97, 0x99, 0xba, + 0xdc, 0xa7, 0x04, 0x30, 0x73, 0x31, 0xcf, 0xc5, 0xf7, 0xcd, 0x41, 0x77, + 0xdd, 0xcf, 0x46, 0x6e, 0x79, 0x73, 0x47, 0x99, 0x51, 0x27, 0xbe, 0x75, + 0xfb, 0x80, 0x3a, 0x27, 0x7e, 0x37, 0x43, 0x62, 0x27, 0x68, 0x9d, 0x75, + 0x10, 0x0d, 0x0e, 0xd2, 0x6f, 0xff, 0x69, 0xa0, 0xbe, 0xad, 0x70, 0x5c, + 0xbf, 0xf4, 0xb9, 0x35, 0x7b, 0x56, 0x56, 0x36, 0x54, 0xa4, 0x66, 0xb7, + 0xce, 0xf3, 0x68, 0x7c, 0x5d, 0x75, 0xec, 0x87, 0xdb, 0xfe, 0x1d, 0x0a, + 0xab, 0x1a, 0x06, 0x65, 0x69, 0x8d, 0x69, 0xe8, 0x34, 0xb1, 0xb3, 0x84, + 0xfd, 0x71, 0x70, 0xf6, 0x48, 0xee, 0xe5, 0x33, 0x47, 0x84, 0x77, 0x61, + 0x58, 0x27, 0x18, 0x0f, 0xe2, 0x51, 0x9e, 0x5d, 0x60, 0xeb, 0x70, 0x33, + 0xa7, 0x99, 0x01, 0x7d, 0x11, 0x27, 0x77, 0xa1, 0xa7, 0x23, 0x33, 0x10, + 0xce, 0x99, 0x68, 0xb0, 0x6f, 0xe6, 0xd7, 0x3c, 0x17, 0xf7, 0x21, 0x54, + 0x9f, 0xd1, 0x81, 0x93, 0x3c, 0x7c, 0x4a, 0xf0, 0xba, 0xb2, 0xd8, 0xdb, + 0x8f, 0xfb, 0xfa, 0x52, 0xf2, 0x3b, 0x48, 0xbe, 0x31, 0xc1, 0x5f, 0xad, + 0xc1, 0x76, 0x28, 0xa0, 0xc1, 0xa7, 0x3b, 0x8d, 0x5a, 0xe7, 0xb8, 0xe1, + 0x94, 0x68, 0x2c, 0xc5, 0x7e, 0xcf, 0x7e, 0xec, 0x4e, 0x60, 0xca, 0x9f, + 0x78, 0x92, 0x9e, 0x6b, 0x4d, 0x74, 0x6d, 0x26, 0x8f, 0x67, 0xdb, 0xef, + 0x76, 0x63, 0x8f, 0x62, 0x50, 0xd3, 0x69, 0x76, 0xa2, 0xf1, 0x67, 0x3e, + 0xa6, 0x58, 0x6b, 0x95, 0x50, 0x92, 0xeb, 0x92, 0x02, 0xfb, 0xf0, 0x20, + 0xc2, 0xb7, 0x13, 0x7c, 0xb3, 0x43, 0xdc, 0xf1, 0xd4, 0x2d, 0x99, 0xc1, + 0xc2, 0x59, 0x4e, 0x14, 0x67, 0x7e, 0x5b, 0xcf, 0x0b, 0x50, 0xcb, 0xc9, + 0x73, 0x2c, 0x2b, 0xea, 0x4b, 0xb5, 0x90, 0x8d, 0xd2, 0xec, 0xfc, 0xfb, + 0xd6, 0xa3, 0x0a, 0xcc, 0xf3, 0x84, 0x1b, 0x09, 0x30, 0xaf, 0x3a, 0x15, + 0xa9, 0x4b, 0xb9, 0xc8, 0x72, 0x49, 0xc9, 0x24, 0xf0, 0x07, 0xb5, 0xdd, + 0x98, 0x93, 0xdd, 0x82, 0x54, 0x81, 0xca, 0xc7, 0x3a, 0x2b, 0x09, 0x2f, + 0x81, 0x7f, 0x43, 0xbc, 0xe8, 0xe1, 0xdb, 0x55, 0xb9, 0x01, 0x56, 0x87, + 0xe8, 0xe5, 0xce, 0x78, 0xf6, 0xc3, 0x31, 0x8f, 0xc9, 0x25, 0xc1, 0x0e, + 0x86, 0xc0, 0x50, 0x9a, 0xae, 0x0d, 0xc5, 0x50, 0x31, 0xc3, 0xe8, 0xd8, + 0x83, 0x58, 0xbe, 0x4e, 0xa6, 0xa3, 0xee, 0x7f, 0xf2, 0x39, 0xcd, 0x62, + 0x46, 0xee, 0x25, 0x4a, 0xa9, 0xe8, 0x73, 0x99, 0x28, 0x75, 0xab, 0xa9, + 0x4b, 0xd0, 0xce, 0x19, 0x61, 0xbb, 0x96, 0x7e, 0x71, 0x5a, 0xab, 0x52, + 0xf3, 0xb8, 0x92, 0x12, 0x9d, 0x3f, 0x02, 0xb1, 0x70, 0x5c, 0x65, 0xca, + 0xca, 0x9d, 0x94, 0xde, 0xed, 0xda, 0xbc, 0x66, 0x82, 0x5f, 0xdd, 0xcf, + 0x64, 0xb0, 0x5c, 0xf6, 0x71, 0x9c, 0x14, 0x75, 0x47, 0x7b, 0xc6, 0x69, + 0xce, 0xd1, 0xf7, 0xf8, 0x04, 0x39, 0x8e, 0xed, 0x20, 0x17, 0x0a, 0x44, + 0xc0, 0x87, 0x78, 0x2a, 0xd1, 0x72, 0x47, 0x96, 0xa8, 0xc3, 0x5b, 0x93, + 0xf1, 0x5f, 0x6d, 0x78, 0x30, 0x20, 0x8f, 0x88, 0x32, 0x72, 0xc7, 0x59, + 0xad, 0x2b, 0x37, 0xd4, 0x23, 0xa7, 0x54, 0xea, 0x33, 0xd7, 0xf0, 0xc3, + 0x51, 0x43, 0xdb, 0x5d, 0x07, 0x21, 0x7b, 0x10, 0x74, 0x11, 0xcc, 0xda, + 0xf7, 0x10, 0x43, 0xf7, 0x58, 0xc7, 0x46, 0xbd, 0xf9, 0xd6, 0xfe, 0xb0, + 0x0f, 0xec, 0x52, 0x0d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff}; + +/* Dummy firmware payload (16384 bytes) */ +static const uint8_t wolfboot_test_firmware[] = { + 0x62, 0xa3, 0x47, 0xf2, 0xbc, 0xc9, 0x67, 0x1a, 0xe6, 0xe0, 0xff, 0x77, + 0xb6, 0x3a, 0x07, 0x8f, 0xfb, 0xa3, 0x13, 0xef, 0xfb, 0xef, 0x6d, 0x7e, + 0x9f, 0xb7, 0x88, 0xb1, 0xeb, 0x57, 0x4d, 0x8d, 0x4f, 0x48, 0x96, 0xda, + 0x0f, 0x0a, 0x7f, 0x19, 0x83, 0xaa, 0x8a, 0xd2, 0xab, 0x36, 0x3f, 0x66, + 0x88, 0x91, 0x12, 0x15, 0x9a, 0x6d, 0x93, 0x6b, 0x2e, 0xd2, 0x95, 0x8a, + 0x59, 0x68, 0xb2, 0x5d, 0x65, 0x45, 0xd9, 0x08, 0xca, 0x65, 0x85, 0x2f, + 0x9b, 0x74, 0x0d, 0x17, 0xba, 0x2b, 0x5c, 0x4a, 0xa6, 0x19, 0x21, 0x71, + 0xca, 0x15, 0x09, 0x42, 0x48, 0xa6, 0x24, 0x94, 0x1c, 0xfa, 0x30, 0x84, + 0x36, 0xfa, 0x6b, 0xaa, 0xb4, 0x2e, 0x41, 0xfc, 0x85, 0xac, 0x24, 0x5e, + 0x73, 0x7e, 0xac, 0x34, 0x12, 0x72, 0xe6, 0xe5, 0xb9, 0xae, 0xef, 0xce, + 0x3a, 0xef, 0x19, 0xf9, 0xc4, 0x13, 0xa8, 0xe8, 0x3f, 0xb5, 0x8e, 0x2a, + 0xaa, 0x20, 0x3a, 0xd5, 0x05, 0x35, 0xed, 0xe3, 0xbd, 0x82, 0x21, 0xb7, + 0x53, 0x39, 0x9c, 0x5a, 0x23, 0xb8, 0xba, 0xfa, 0x96, 0x37, 0xc0, 0x3c, + 0xe5, 0x42, 0x9d, 0x45, 0xee, 0x94, 0x27, 0x02, 0x7c, 0x05, 0xb5, 0x10, + 0xc1, 0x20, 0xc8, 0x01, 0x73, 0x7d, 0xa1, 0x27, 0xb6, 0xb4, 0x17, 0x64, + 0xc7, 0x85, 0xb4, 0x41, 0xb3, 0x3d, 0xc6, 0xc3, 0x5b, 0xdb, 0x09, 0xf1, + 0x69, 0x2e, 0xdb, 0xd0, 0xef, 0xb3, 0xe1, 0x33, 0xac, 0x66, 0x8b, 0xec, + 0x13, 0x2e, 0x99, 0x7b, 0x33, 0x93, 0xa9, 0x69, 0x5e, 0x38, 0xd3, 0x7f, + 0xd8, 0x9b, 0x33, 0xe5, 0x00, 0xdc, 0xdd, 0x69, 0x29, 0x7c, 0x77, 0x6d, + 0xc9, 0x5f, 0xa7, 0x11, 0x52, 0x2e, 0xbc, 0xc1, 0x53, 0x35, 0x14, 0x5b, + 0xe4, 0x2e, 0x35, 0xec, 0x2e, 0x55, 0xfa, 0x52, 0x3a, 0x97, 0xaf, 0x92, + 0x36, 0xb7, 0x92, 0x16, 0xbe, 0xe7, 0xc2, 0x79, 0x3e, 0xc2, 0x65, 0x3e, + 0x8d, 0xe1, 0x15, 0x78, 0x99, 0x44, 0x3a, 0x43, 0xe2, 0x2a, 0x11, 0xf2, + 0x24, 0x99, 0xc5, 0x4b, 0xb9, 0x42, 0x7c, 0xbf, 0x6f, 0x16, 0xe1, 0x5a, + 0x92, 0xc6, 0x02, 0x06, 0xe9, 0x6d, 0x2a, 0x75, 0x85, 0x21, 0x1b, 0x3a, + 0x65, 0xf9, 0x17, 0x52, 0x0f, 0x71, 0x01, 0x23, 0xab, 0xa0, 0xa5, 0x1a, + 0x8f, 0xeb, 0x32, 0x90, 0x08, 0x74, 0xc6, 0xed, 0x41, 0x96, 0xf4, 0xc5, + 0x21, 0x43, 0x5c, 0x72, 0xc8, 0x37, 0x65, 0x15, 0x28, 0xb7, 0x5e, 0x7f, + 0x0b, 0x97, 0x17, 0x5d, 0x07, 0xc4, 0xf5, 0x94, 0xaa, 0xec, 0xc7, 0x57, + 0x78, 0x3e, 0xee, 0xde, 0x98, 0x2b, 0x85, 0x72, 0x99, 0xf6, 0x8f, 0x93, + 0xd1, 0xef, 0x4c, 0x79, 0xa6, 0x52, 0x92, 0x63, 0xda, 0xb8, 0x12, 0x37, + 0x7e, 0xd6, 0x13, 0x1b, 0x5c, 0x00, 0x61, 0x2a, 0x1e, 0xcb, 0x31, 0xd2, + 0xa3, 0x20, 0xb9, 0xe4, 0x5d, 0x08, 0x6b, 0xf2, 0xa0, 0x8b, 0x9d, 0x86, + 0x7d, 0x24, 0x3e, 0x98, 0x91, 0x35, 0x42, 0x7d, 0xa0, 0xe5, 0x66, 0x3a, + 0xa9, 0x20, 0x5c, 0xb2, 0x42, 0xba, 0xc9, 0x37, 0xc8, 0x1c, 0xe2, 0x7f, + 0x18, 0x27, 0xe9, 0x1d, 0x1b, 0x57, 0xf2, 0x26, 0x6c, 0x7f, 0xd3, 0x48, + 0x52, 0x1e, 0xd1, 0x85, 0xbf, 0x67, 0xf3, 0x60, 0xc5, 0x6f, 0x13, 0x65, + 0x28, 0x96, 0x17, 0xe6, 0xd7, 0x86, 0x52, 0x66, 0xa8, 0xd9, 0x0e, 0xd5, + 0x1c, 0x19, 0x04, 0x46, 0x7a, 0x2b, 0x2d, 0x34, 0x1a, 0xe0, 0x1d, 0x1c, + 0x03, 0x66, 0xeb, 0xef, 0xf3, 0x64, 0xa9, 0xa9, 0x02, 0xe3, 0x01, 0xd1, + 0xec, 0x85, 0x6a, 0x4d, 0xd9, 0xd2, 0x87, 0xf7, 0x25, 0xb7, 0x6d, 0xdf, + 0x56, 0x9a, 0x4c, 0x05, 0x26, 0x08, 0x85, 0x8b, 0x6f, 0x0a, 0x81, 0x74, + 0x17, 0xdc, 0xa1, 0x41, 0x5e, 0x96, 0x18, 0x02, 0xf0, 0xe9, 0xe9, 0x60, + 0xdc, 0xd4, 0xd8, 0x8f, 0x7f, 0x62, 0x68, 0xa1, 0x90, 0x40, 0x69, 0x12, + 0x7f, 0xd0, 0x5f, 0x43, 0xc9, 0xc2, 0xc7, 0xea, 0x24, 0x10, 0xe0, 0xd9, + 0x2f, 0x63, 0x25, 0x0c, 0x7a, 0xaa, 0xd0, 0x2f, 0xc5, 0x41, 0x70, 0x8e, + 0x04, 0x82, 0x9c, 0x2d, 0x70, 0xe5, 0xae, 0x42, 0x42, 0x57, 0xa2, 0x92, + 0x6b, 0x93, 0xa7, 0x3e, 0x06, 0xdf, 0x85, 0x9c, 0xcf, 0xf8, 0xa5, 0x60, + 0x16, 0x12, 0x57, 0x29, 0x5e, 0xb0, 0xe0, 0x63, 0xed, 0xfe, 0xa7, 0xf2, + 0x5f, 0x06, 0xe3, 0x45, 0xc1, 0xd6, 0xde, 0x17, 0x2c, 0xd7, 0x2d, 0xc3, + 0x3f, 0xf0, 0x19, 0x48, 0x91, 0x6b, 0x99, 0x09, 0x3b, 0xfa, 0xc4, 0x1a, + 0x33, 0x52, 0xd8, 0x26, 0xc9, 0x47, 0xdc, 0x85, 0x1c, 0x98, 0x6f, 0x36, + 0xe9, 0xdd, 0xbf, 0x90, 0x2d, 0x7f, 0x95, 0xec, 0x63, 0x92, 0x6a, 0xfd, + 0xe1, 0xac, 0xb9, 0x77, 0x09, 0x0f, 0x86, 0x91, 0x2e, 0xec, 0xa7, 0xec, + 0xf6, 0xbb, 0x74, 0x4c, 0x2d, 0x01, 0x37, 0x3a, 0xe8, 0x98, 0x85, 0x60, + 0x89, 0x66, 0xb4, 0xc8, 0x22, 0x1c, 0xfb, 0x29, 0x11, 0xdf, 0x96, 0xf9, + 0xf5, 0x34, 0x83, 0xe6, 0xa2, 0x2e, 0xf9, 0x98, 0x91, 0x38, 0xcb, 0xb7, + 0xf3, 0x07, 0x34, 0x64, 0x6b, 0xa9, 0xcc, 0xe5, 0x82, 0x17, 0x85, 0xd2, + 0x50, 0x25, 0xde, 0x30, 0x93, 0x21, 0x61, 0xc4, 0x88, 0x07, 0x09, 0x5f, + 0xc3, 0x77, 0xf3, 0xa1, 0xf9, 0x7d, 0x13, 0x1b, 0x5e, 0x26, 0xd4, 0xe3, + 0x49, 0xf5, 0x76, 0x46, 0x69, 0x96, 0x97, 0x92, 0x73, 0x99, 0xa8, 0x5b, + 0xdb, 0x29, 0x75, 0x56, 0x1e, 0xf0, 0x13, 0x93, 0xc2, 0x2f, 0x00, 0x7f, + 0x4d, 0x21, 0xf5, 0x2f, 0x4b, 0xee, 0x3a, 0xe9, 0x13, 0xed, 0x0c, 0x1a, + 0xe3, 0x7c, 0xee, 0xd5, 0x48, 0x11, 0xe7, 0x3f, 0x02, 0x88, 0xc2, 0x03, + 0xe3, 0xc6, 0xe1, 0x7b, 0xb6, 0x42, 0xbe, 0xb2, 0x83, 0x7a, 0xb8, 0xfb, + 0xbc, 0xe1, 0xa9, 0xeb, 0x2a, 0x30, 0x71, 0x35, 0xa6, 0xd4, 0xb8, 0x93, + 0x86, 0x25, 0xc0, 0xf7, 0xfd, 0x7b, 0xee, 0xf9, 0x54, 0x03, 0x7d, 0x0a, + 0x16, 0x19, 0xf1, 0x5b, 0xc9, 0x30, 0x75, 0x74, 0x5e, 0x91, 0x53, 0xc0, + 0xd9, 0x3c, 0x96, 0xef, 0xcc, 0x33, 0xdc, 0xad, 0x27, 0x07, 0xf4, 0x2b, + 0x1c, 0xdf, 0x60, 0xdb, 0x1b, 0x23, 0x40, 0x1e, 0x56, 0x19, 0xcc, 0xbe, + 0xa5, 0x1b, 0x87, 0xb3, 0x25, 0xa0, 0x05, 0x1a, 0x69, 0xbd, 0xf0, 0xe8, + 0x54, 0x2d, 0x5b, 0x6a, 0x1e, 0xca, 0xee, 0x4c, 0x78, 0xd4, 0x8f, 0x13, + 0xa7, 0x22, 0xc8, 0xf1, 0xd0, 0x7f, 0x87, 0xef, 0x4a, 0x45, 0xe5, 0x83, + 0xf5, 0xa6, 0x64, 0x14, 0x2a, 0xd3, 0x61, 0x46, 0xe9, 0xf0, 0x4b, 0x70, + 0xcc, 0xcd, 0x28, 0x53, 0x26, 0x29, 0x7a, 0x1e, 0x8a, 0x95, 0xa5, 0xf8, + 0x1f, 0x43, 0xab, 0x74, 0xa3, 0x24, 0xb9, 0xab, 0x98, 0x3f, 0x82, 0x37, + 0xba, 0x89, 0xca, 0xc8, 0x28, 0x19, 0x33, 0xbd, 0x6a, 0xf1, 0xc5, 0xbd, + 0xce, 0xf9, 0x8c, 0x14, 0x9b, 0xd1, 0xba, 0x79, 0x6f, 0x8a, 0xaf, 0xc3, + 0x11, 0x9b, 0xba, 0x9d, 0x42, 0x52, 0x4a, 0x54, 0xfe, 0xf5, 0x00, 0xa0, + 0xab, 0xa7, 0x34, 0x88, 0x5e, 0xb8, 0x02, 0x6a, 0x62, 0x6a, 0x8a, 0x40, + 0x99, 0xa3, 0x09, 0xd0, 0xd4, 0x20, 0x0a, 0xee, 0xb6, 0xaf, 0xb6, 0x8b, + 0x96, 0x57, 0x5e, 0x82, 0x75, 0x3c, 0x17, 0xee, 0x1f, 0x5a, 0x84, 0xeb, + 0xd5, 0x61, 0xf0, 0xfd, 0x5d, 0xe1, 0x7a, 0xbc, 0xb9, 0x7e, 0x5a, 0xca, + 0x30, 0xc9, 0xaa, 0xb8, 0x65, 0x5c, 0x8a, 0x21, 0x63, 0xa0, 0x2b, 0xda, + 0x32, 0xd9, 0x1a, 0x8a, 0xe8, 0xf1, 0xd5, 0xbd, 0xdc, 0xbe, 0x9b, 0x03, + 0x77, 0x85, 0x3e, 0x36, 0x51, 0xec, 0xc2, 0x2d, 0x6d, 0xae, 0x4d, 0x98, + 0xe7, 0x47, 0xd5, 0x87, 0x9a, 0xb3, 0xae, 0xe6, 0x35, 0x43, 0xed, 0x20, + 0xd1, 0xeb, 0x2a, 0x60, 0x26, 0xb8, 0x54, 0xde, 0x46, 0xb6, 0xd5, 0xc9, + 0x74, 0x5e, 0xfe, 0xc3, 0x36, 0x1f, 0x3c, 0xac, 0x7b, 0x93, 0x68, 0x70, + 0x43, 0x0e, 0x32, 0xf9, 0x0a, 0x34, 0x84, 0xa3, 0xbe, 0x23, 0x88, 0xd5, + 0x42, 0x96, 0xb4, 0x14, 0x7a, 0xce, 0x4e, 0x5d, 0x2b, 0x10, 0xf6, 0x3d, + 0x91, 0x73, 0xf1, 0xdf, 0x62, 0xfa, 0xc5, 0xfe, 0xc5, 0x79, 0x8b, 0xb7, + 0x5c, 0x64, 0x5b, 0xfe, 0x0f, 0xed, 0x89, 0xfb, 0x8b, 0xe3, 0x15, 0xd7, + 0x41, 0xf2, 0x49, 0x45, 0x85, 0x77, 0x6e, 0xe5, 0x85, 0x87, 0x14, 0x38, + 0xcc, 0x74, 0x21, 0x7a, 0x4f, 0xa3, 0xc2, 0xd0, 0x1c, 0xbb, 0x43, 0x6f, + 0x3c, 0x94, 0x41, 0x00, 0x69, 0xfb, 0xa8, 0xae, 0xb2, 0xb4, 0x9a, 0xdc, + 0xac, 0x22, 0x9b, 0xea, 0x78, 0xe3, 0x0e, 0xa5, 0x1a, 0x45, 0x85, 0x87, + 0xf4, 0x54, 0x94, 0x6d, 0x0e, 0x03, 0xe7, 0x2d, 0x46, 0xb8, 0x37, 0x50, + 0x44, 0xc3, 0x3c, 0x01, 0xc1, 0xa7, 0x33, 0x96, 0x78, 0x12, 0xf5, 0xc7, + 0x72, 0x1a, 0x8f, 0xa5, 0xc5, 0x56, 0x42, 0xfc, 0xeb, 0xae, 0x60, 0x57, + 0xdc, 0x46, 0x60, 0xa8, 0xa0, 0xe3, 0xa2, 0x94, 0xcf, 0x65, 0x83, 0x03, + 0xf2, 0x2d, 0x0c, 0x72, 0xf1, 0x94, 0xd5, 0xd4, 0xe1, 0x94, 0xfd, 0x99, + 0xb1, 0x52, 0xd4, 0x20, 0x9c, 0x7c, 0xee, 0xae, 0x5c, 0x1e, 0x31, 0x3d, + 0x58, 0x42, 0x61, 0x4b, 0x37, 0x62, 0x79, 0x71, 0xa4, 0x42, 0x1c, 0xdc, + 0x98, 0x79, 0x94, 0x2a, 0x98, 0x85, 0x06, 0x64, 0x23, 0x50, 0xf0, 0xe8, + 0xdf, 0x24, 0xfa, 0x6d, 0x3b, 0x52, 0xe2, 0xac, 0x9b, 0x80, 0x78, 0x23, + 0xf6, 0x5f, 0xeb, 0xab, 0xcf, 0x0b, 0x7e, 0xc2, 0x2b, 0x36, 0x6a, 0x98, + 0xb8, 0x1c, 0x27, 0xeb, 0xb4, 0x3c, 0xd0, 0x86, 0xf2, 0x00, 0x32, 0x2f, + 0x6c, 0xf7, 0x69, 0x50, 0x65, 0x24, 0x5d, 0xac, 0x57, 0x5a, 0xe4, 0xc6, + 0xd5, 0x89, 0x65, 0xa1, 0xa8, 0xe9, 0xd8, 0x54, 0xe7, 0x6c, 0x8d, 0xce, + 0xf0, 0x9a, 0x7a, 0x50, 0xc5, 0x79, 0x23, 0xa7, 0x3f, 0x96, 0x1a, 0xb7, + 0x4d, 0xe1, 0x88, 0x1a, 0x79, 0x58, 0x0d, 0x84, 0x6e, 0xa3, 0x12, 0xb1, + 0xdd, 0x20, 0xd6, 0xf7, 0x74, 0x4f, 0xd0, 0x75, 0x3b, 0x1b, 0xcb, 0x6a, + 0xd6, 0x84, 0xc3, 0x23, 0x60, 0xf9, 0xa2, 0x4b, 0x1b, 0xb8, 0x08, 0x04, + 0xce, 0x06, 0xbf, 0xb5, 0x04, 0xf6, 0x1c, 0x32, 0x0a, 0xbc, 0x93, 0xfe, + 0xbd, 0x5c, 0x0f, 0x05, 0x0d, 0x78, 0xdc, 0x69, 0x30, 0x74, 0x30, 0x52, + 0xe9, 0xa6, 0x1a, 0x53, 0xd4, 0xcd, 0x93, 0xa4, 0x55, 0x2b, 0xa5, 0xcf, + 0x33, 0x6d, 0x77, 0x23, 0x50, 0x9b, 0xa1, 0x9f, 0x67, 0x8d, 0x47, 0xb8, + 0x55, 0x9c, 0x67, 0x62, 0x46, 0xfa, 0xc2, 0xf7, 0xf2, 0x20, 0x5a, 0x9d, + 0x90, 0xbf, 0x65, 0x4d, 0xc4, 0xd5, 0xad, 0x85, 0xd3, 0x1e, 0xd6, 0x34, + 0xd0, 0x92, 0x76, 0x45, 0x34, 0xf2, 0x01, 0x54, 0xcf, 0x8b, 0x74, 0xd9, + 0x72, 0xb1, 0xb0, 0x31, 0x7e, 0x00, 0x7b, 0x2e, 0x3f, 0x9a, 0xd9, 0x69, + 0xb7, 0xa8, 0x92, 0x55, 0xbe, 0xc0, 0x6c, 0x10, 0x65, 0xad, 0xfb, 0x51, + 0xf6, 0x43, 0x0c, 0x0c, 0xe4, 0xdb, 0xd5, 0xeb, 0x70, 0x40, 0xac, 0x6d, + 0xcd, 0x65, 0x21, 0x3a, 0xa7, 0x93, 0x55, 0x3e, 0xc2, 0xe9, 0xeb, 0x03, + 0x55, 0x6a, 0xcf, 0x05, 0x39, 0x27, 0x9c, 0x2f, 0x8f, 0x08, 0x88, 0x8b, + 0xb3, 0xab, 0x59, 0x8f, 0xb6, 0x7c, 0xfc, 0x8f, 0x8e, 0x55, 0xb6, 0xd6, + 0xb8, 0xc8, 0xb8, 0x19, 0xad, 0x0f, 0xb3, 0xbf, 0xa2, 0xc1, 0x38, 0xe1, + 0x34, 0xf0, 0x4e, 0x8c, 0xd6, 0xc6, 0xea, 0xfa, 0x1e, 0x16, 0xc6, 0x0c, + 0xa8, 0xb1, 0xa4, 0x26, 0xb1, 0xee, 0x43, 0x5d, 0x6a, 0x35, 0x57, 0x1a, + 0xef, 0xce, 0x5e, 0x12, 0x91, 0xf7, 0xaf, 0x4f, 0x48, 0xae, 0xab, 0x6d, + 0xa4, 0x02, 0x30, 0x6a, 0x5c, 0xa3, 0x33, 0x2c, 0x2c, 0x87, 0xaf, 0xfd, + 0x6b, 0x58, 0xf6, 0x61, 0x45, 0x4f, 0x8b, 0x1b, 0x48, 0x01, 0x1f, 0xbe, + 0x15, 0x6c, 0x8b, 0xae, 0x71, 0x5a, 0x39, 0x4b, 0x3b, 0x1e, 0xfa, 0xc2, + 0xb4, 0x82, 0xdf, 0x2a, 0xa8, 0x9d, 0x35, 0x8e, 0x87, 0x19, 0xed, 0xa4, + 0x2e, 0xce, 0x9d, 0x29, 0x57, 0x34, 0x1f, 0x82, 0x34, 0xc6, 0xc5, 0xbe, + 0x1b, 0x91, 0x33, 0x60, 0x97, 0x4c, 0x48, 0x4d, 0x0d, 0x4a, 0xbe, 0x72, + 0xc3, 0x43, 0x90, 0xca, 0x39, 0x62, 0x0f, 0xb0, 0x45, 0x76, 0x3f, 0xb9, + 0xbc, 0x33, 0x03, 0x4e, 0x4e, 0x29, 0xf2, 0x61, 0x09, 0x8e, 0xe5, 0xb2, + 0xda, 0xd7, 0x90, 0xd4, 0x07, 0x00, 0x75, 0x54, 0x16, 0x0d, 0x0e, 0x7a, + 0x48, 0xe0, 0xb3, 0xcd, 0xf4, 0xcc, 0xa5, 0xf7, 0x63, 0x9a, 0x3b, 0x91, + 0x52, 0x1d, 0xd8, 0xa1, 0x51, 0x35, 0x9b, 0xa2, 0xe1, 0x9a, 0x6a, 0x14, + 0x72, 0x3b, 0x52, 0xa6, 0x53, 0xb0, 0x8b, 0x69, 0xaf, 0x8f, 0xf0, 0x58, + 0xf8, 0xe7, 0x6a, 0x9c, 0x2d, 0xb9, 0x52, 0xf5, 0x7d, 0x5a, 0x78, 0xdb, + 0x9a, 0x95, 0x1c, 0x56, 0xd2, 0xaa, 0x28, 0xcb, 0x9f, 0x4b, 0x80, 0xb3, + 0xe4, 0xe5, 0x36, 0x66, 0xb9, 0x9c, 0x24, 0x69, 0xfb, 0xdc, 0xa7, 0xa9, + 0xbc, 0x4f, 0x46, 0x4b, 0xa1, 0x86, 0xb5, 0xc4, 0x9d, 0x5b, 0xa9, 0x9e, + 0x58, 0xd3, 0xab, 0x06, 0xa9, 0x3b, 0x96, 0x95, 0x80, 0xe5, 0xd0, 0x76, + 0x17, 0x3b, 0xbf, 0x43, 0xa2, 0x18, 0xe5, 0xe3, 0x70, 0x70, 0x43, 0xd8, + 0xd7, 0x28, 0x07, 0xa8, 0x17, 0x7b, 0xd5, 0xea, 0x13, 0xac, 0x7f, 0x58, + 0xba, 0x74, 0x8b, 0x2d, 0x38, 0xcc, 0xc3, 0xed, 0xcc, 0x2e, 0x53, 0x46, + 0x9f, 0x3b, 0x13, 0x6e, 0xef, 0xdb, 0x1e, 0x54, 0xdf, 0x75, 0x0f, 0x5b, + 0x7b, 0x5c, 0xfa, 0x93, 0x63, 0xff, 0xf3, 0x74, 0xa8, 0x6a, 0x75, 0xf1, + 0x02, 0x52, 0x90, 0x38, 0x83, 0x21, 0x5b, 0xd2, 0x83, 0x80, 0x8e, 0x1e, + 0x9d, 0xb4, 0xc9, 0x17, 0x7f, 0xf0, 0xaf, 0x31, 0x0f, 0xd6, 0xaf, 0xba, + 0x97, 0xfd, 0x25, 0x0b, 0x7f, 0xc2, 0x59, 0xa2, 0xe0, 0x81, 0xea, 0x60, + 0xeb, 0x0b, 0xb5, 0x2d, 0x93, 0xb3, 0x30, 0x97, 0x9a, 0x78, 0x38, 0x4a, + 0xa1, 0xa3, 0xb6, 0xd3, 0xb3, 0xde, 0x47, 0x05, 0xf8, 0xef, 0xf8, 0xc2, + 0x58, 0xa0, 0x7b, 0xb3, 0x95, 0x7a, 0xb8, 0x8a, 0x72, 0x24, 0x77, 0x75, + 0xd9, 0x10, 0x1f, 0x2d, 0x29, 0xf8, 0xe0, 0x31, 0xea, 0xe2, 0x9d, 0x2d, + 0x42, 0x66, 0xcc, 0x0c, 0x28, 0x57, 0x69, 0x64, 0x12, 0x40, 0x96, 0x85, + 0x9a, 0x9f, 0x00, 0x09, 0xbc, 0x94, 0x88, 0x69, 0xde, 0xb3, 0xd4, 0x3f, + 0x00, 0xdf, 0x00, 0xb5, 0xb4, 0xfc, 0x7f, 0x6b, 0xaa, 0x67, 0x7a, 0x2d, + 0x3b, 0x64, 0xe3, 0xfe, 0x1d, 0xa4, 0x50, 0x51, 0x29, 0x6c, 0x92, 0xaf, + 0x31, 0x08, 0x30, 0x88, 0xf2, 0x57, 0xbe, 0x8a, 0xde, 0x2a, 0x4f, 0xff, + 0xfc, 0x95, 0x6b, 0x21, 0x3c, 0xbc, 0x8a, 0x92, 0xcc, 0x2e, 0x87, 0xe0, + 0x03, 0x8e, 0xcd, 0x91, 0x8c, 0x49, 0x8f, 0xe7, 0xa9, 0x76, 0x80, 0xfb, + 0x3c, 0x22, 0x7b, 0xa0, 0x98, 0xf8, 0xa6, 0x7c, 0xd0, 0xf3, 0x36, 0xcc, + 0x61, 0x6e, 0x27, 0xbf, 0x91, 0x0d, 0xa3, 0x6c, 0x75, 0xa7, 0xd1, 0xba, + 0x4c, 0x8c, 0x61, 0x78, 0x47, 0x11, 0x3a, 0x46, 0x28, 0xb3, 0xbb, 0x82, + 0x54, 0xad, 0x55, 0x9b, 0xb8, 0x15, 0x18, 0xb8, 0x1e, 0xfc, 0xb5, 0x53, + 0xad, 0xe7, 0x39, 0xdd, 0x83, 0x79, 0xac, 0x51, 0xea, 0xbf, 0x36, 0x1b, + 0x79, 0x00, 0xb6, 0xdc, 0x54, 0x48, 0xdc, 0x76, 0x0d, 0x5c, 0x5f, 0x00, + 0x76, 0x0f, 0xa2, 0xe2, 0xae, 0xaf, 0x8e, 0x11, 0x78, 0x90, 0xd7, 0x19, + 0x24, 0xaf, 0xc1, 0x8c, 0x02, 0x43, 0xb0, 0xf2, 0xa4, 0xe8, 0x41, 0x9d, + 0x75, 0xad, 0x60, 0x41, 0x5e, 0x27, 0x5d, 0x6c, 0x04, 0x52, 0x86, 0x06, + 0xb5, 0x34, 0x49, 0x87, 0x16, 0xca, 0xe9, 0xd7, 0x6e, 0x99, 0xc8, 0x2b, + 0x05, 0xcb, 0x43, 0xe0, 0xb7, 0x55, 0xa0, 0xbe, 0xe0, 0x6f, 0x9c, 0x73, + 0x75, 0xbe, 0x0a, 0xd3, 0x4c, 0xf8, 0xc2, 0x2c, 0x69, 0x15, 0x03, 0xa6, + 0x6d, 0x66, 0xd8, 0x90, 0x3d, 0x8c, 0x1a, 0x54, 0xb4, 0x45, 0xf6, 0x6f, + 0x2e, 0x9e, 0x8d, 0x73, 0xa7, 0x36, 0x04, 0xd9, 0xb0, 0x82, 0x56, 0x3b, + 0xdc, 0xd5, 0x30, 0x1e, 0x8c, 0xec, 0x6d, 0x2f, 0x4f, 0xf5, 0x19, 0x7e, + 0xbe, 0xb5, 0xe1, 0x4a, 0x5d, 0x53, 0x17, 0xb9, 0x07, 0x6d, 0xaf, 0x63, + 0xb0, 0xf1, 0x4a, 0xd9, 0x31, 0xa6, 0x0f, 0x34, 0x8a, 0x2d, 0xf4, 0x8d, + 0xcb, 0xa2, 0x99, 0x98, 0xc8, 0x21, 0x1f, 0xfe, 0x95, 0xcd, 0xd3, 0xe0, + 0x65, 0x11, 0x61, 0x6f, 0xb8, 0x6b, 0x3b, 0xa0, 0x99, 0x49, 0x20, 0xba, + 0x74, 0x19, 0xc9, 0xf5, 0x50, 0x77, 0xd2, 0x6f, 0x41, 0x87, 0xf2, 0xb8, + 0x97, 0xd1, 0x60, 0x9f, 0x90, 0x41, 0x30, 0x20, 0xc3, 0xb5, 0xdf, 0x83, + 0x34, 0xb0, 0x32, 0x6c, 0x87, 0x00, 0x6e, 0x7a, 0xef, 0x2d, 0x18, 0xa2, + 0xde, 0x8f, 0x7f, 0x06, 0xb1, 0xc2, 0xfd, 0xac, 0x67, 0x2e, 0x22, 0x81, + 0xaf, 0x09, 0x37, 0x7e, 0x96, 0x42, 0xc2, 0x93, 0x06, 0x14, 0xee, 0x38, + 0xc7, 0xa3, 0x2b, 0x83, 0x88, 0x81, 0x95, 0x96, 0x57, 0x77, 0x0e, 0xcb, + 0x78, 0xd3, 0x55, 0x90, 0x57, 0xbc, 0x5d, 0x3e, 0xc6, 0x6a, 0x9c, 0xa5, + 0x9a, 0x83, 0x81, 0x5e, 0xc7, 0xb8, 0xfe, 0x26, 0xc4, 0x53, 0xc8, 0x0e, + 0xc6, 0xe7, 0x7b, 0x44, 0x5f, 0x3b, 0xb0, 0x6f, 0x9b, 0xf8, 0xbc, 0xaa, + 0xfb, 0xa0, 0x3d, 0x62, 0x80, 0x72, 0x8b, 0x02, 0x37, 0xc0, 0x6f, 0x29, + 0x6b, 0x70, 0x19, 0x1b, 0x0a, 0x49, 0x25, 0x89, 0x7f, 0xed, 0x2b, 0x7c, + 0xda, 0x05, 0xfa, 0x03, 0xa8, 0x6c, 0x49, 0xf3, 0x8f, 0x81, 0xbc, 0xe6, + 0x0c, 0x76, 0xe0, 0x27, 0xd8, 0xd1, 0xf3, 0x79, 0xd4, 0x2c, 0x41, 0xfa, + 0x87, 0x54, 0xde, 0x89, 0xe3, 0xb1, 0x79, 0x59, 0xad, 0xa7, 0x51, 0x05, + 0x10, 0x21, 0x76, 0x55, 0x93, 0xe4, 0x2a, 0x8e, 0x99, 0xd8, 0xd3, 0xc2, + 0xd1, 0xd9, 0x5b, 0xcd, 0x8b, 0xb5, 0x45, 0xca, 0xc9, 0xea, 0x0b, 0x6e, + 0x11, 0x2a, 0xd7, 0xd7, 0xff, 0x26, 0xba, 0x3d, 0xa9, 0x55, 0x77, 0xad, + 0xa8, 0x64, 0x09, 0xdb, 0x18, 0xaf, 0x93, 0xf7, 0x3e, 0x4c, 0x28, 0x4f, + 0xd9, 0x2f, 0x74, 0x04, 0xd3, 0xdb, 0x1e, 0x19, 0x3d, 0xce, 0x55, 0xf8, + 0x51, 0x66, 0xbe, 0xbe, 0xbc, 0x53, 0x49, 0x54, 0x2c, 0xb0, 0xb0, 0xaa, + 0x7b, 0x97, 0x24, 0xa7, 0xa2, 0x55, 0x91, 0x85, 0x63, 0xac, 0x6c, 0xf4, + 0x38, 0xbd, 0x33, 0x5d, 0xf3, 0x39, 0x1e, 0xc6, 0x5e, 0x41, 0xa2, 0x69, + 0x6c, 0x83, 0xee, 0xf6, 0x7b, 0x0d, 0xc1, 0xc6, 0x93, 0x9f, 0xb3, 0xb0, + 0x77, 0xe3, 0xa9, 0xdf, 0x0f, 0xfc, 0x86, 0x79, 0xe5, 0x9b, 0x29, 0x08, + 0x85, 0xa9, 0x7a, 0x17, 0xbc, 0xae, 0xc2, 0x08, 0x81, 0xdf, 0xf0, 0x42, + 0x01, 0x95, 0xa8, 0xb8, 0xc9, 0x6f, 0x1e, 0xd4, 0x7d, 0xed, 0xc2, 0x26, + 0xe6, 0xe6, 0x0e, 0x7f, 0x27, 0x32, 0x66, 0x5e, 0x75, 0x51, 0xd9, 0xdb, + 0xbc, 0xde, 0x96, 0x10, 0xbd, 0xe6, 0xe0, 0xd5, 0x51, 0xcd, 0x42, 0x7a, + 0x14, 0xa6, 0x30, 0x7e, 0x81, 0x7f, 0xc1, 0x88, 0xd8, 0x8f, 0x05, 0x2c, + 0x5f, 0x6f, 0x34, 0xe8, 0x53, 0x3f, 0x18, 0x09, 0x85, 0xdb, 0xda, 0x86, + 0x0d, 0x61, 0x6d, 0x56, 0x21, 0x10, 0xb4, 0x13, 0xf1, 0x21, 0x85, 0x15, + 0x0a, 0xf3, 0xfa, 0x2d, 0xd3, 0x73, 0xd5, 0xbf, 0x11, 0xab, 0xa0, 0x8a, + 0x34, 0xeb, 0x22, 0xeb, 0xeb, 0x8b, 0xbd, 0xf5, 0x28, 0xf7, 0xea, 0x84, + 0x9c, 0xe8, 0xc6, 0xf3, 0x56, 0x75, 0xd5, 0x94, 0xff, 0x26, 0x84, 0xbf, + 0x84, 0x5f, 0xb1, 0x59, 0x69, 0xe2, 0xd2, 0xbc, 0xbe, 0x8a, 0xdf, 0xd4, + 0x43, 0x25, 0xb0, 0xb4, 0xaf, 0x9a, 0xe3, 0x66, 0x5d, 0x5b, 0xee, 0x70, + 0x5a, 0xc9, 0xe6, 0x64, 0xe3, 0x8c, 0xca, 0xba, 0x56, 0x62, 0xc2, 0x54, + 0x8a, 0xf2, 0x2d, 0x68, 0x48, 0x0a, 0xd9, 0xad, 0xbc, 0x36, 0xfc, 0xf3, + 0xee, 0x07, 0xa6, 0xb7, 0xe4, 0xb5, 0x2f, 0x5b, 0x04, 0x50, 0xf7, 0x0b, + 0x58, 0x78, 0xa5, 0xb1, 0x6c, 0xd5, 0x2c, 0xaf, 0x9a, 0x40, 0x2d, 0x2d, + 0x28, 0x52, 0xa9, 0x14, 0xd2, 0xfe, 0x6e, 0xb3, 0x77, 0xe7, 0x66, 0x7b, + 0xca, 0x01, 0xb8, 0x00, 0xb4, 0xaa, 0x38, 0x3c, 0x18, 0x53, 0x04, 0x78, + 0x38, 0x0e, 0x26, 0x59, 0x1c, 0x5b, 0xfe, 0x15, 0x1a, 0xe0, 0xe5, 0x8a, + 0x0d, 0x9c, 0xcf, 0x3e, 0x9d, 0xfe, 0xf1, 0x27, 0x05, 0x89, 0xad, 0xde, + 0x52, 0x8e, 0x31, 0x42, 0x4b, 0x0a, 0xd2, 0xc2, 0x00, 0x50, 0xc5, 0x48, + 0x83, 0x63, 0x23, 0x88, 0xbe, 0x60, 0x40, 0xd9, 0x3d, 0xe6, 0xad, 0x61, + 0xf7, 0x1f, 0xaf, 0x11, 0xda, 0xfb, 0x04, 0xec, 0x8a, 0x1c, 0x3f, 0x3f, + 0xd3, 0x9a, 0x03, 0x79, 0x91, 0x62, 0xa9, 0xc7, 0x10, 0x04, 0xfe, 0xf2, + 0x72, 0x61, 0x48, 0x11, 0x53, 0x77, 0xc8, 0xe3, 0xca, 0x1b, 0x40, 0x68, + 0xa1, 0x0d, 0xb3, 0x81, 0x1d, 0xd2, 0xa4, 0x11, 0x26, 0x0d, 0xa5, 0x91, + 0xab, 0xdb, 0x89, 0x03, 0x37, 0x99, 0x06, 0x38, 0x3e, 0xd7, 0xc0, 0xc2, + 0x0c, 0xc4, 0xb1, 0x5c, 0xea, 0xca, 0x5d, 0xba, 0xc6, 0x7f, 0x1f, 0x04, + 0xf8, 0xcc, 0x71, 0x4d, 0xea, 0x52, 0x3e, 0x14, 0xc4, 0xa0, 0xee, 0xfa, + 0x40, 0x62, 0x1e, 0x39, 0xd0, 0x00, 0xb9, 0xce, 0xa9, 0xb1, 0x41, 0xa3, + 0xe0, 0x7d, 0x73, 0xf4, 0x0e, 0x4c, 0x42, 0x0a, 0x6f, 0xe2, 0xdd, 0xa6, + 0xd9, 0x73, 0x90, 0x83, 0xc0, 0x1d, 0xb5, 0x41, 0x30, 0xae, 0x74, 0xe5, + 0x59, 0x47, 0xff, 0x0f, 0x15, 0xb8, 0x3b, 0xf2, 0x7f, 0x28, 0x62, 0xaf, + 0xac, 0xf5, 0x1d, 0x3f, 0xea, 0x36, 0xc6, 0x74, 0x67, 0x0e, 0xb6, 0xad, + 0x13, 0xd3, 0x4a, 0x75, 0x46, 0x83, 0x39, 0xa3, 0x26, 0x79, 0x86, 0x6d, + 0x77, 0x44, 0x82, 0x74, 0xca, 0xe5, 0xd2, 0x26, 0xa1, 0x02, 0x82, 0xe5, + 0x5a, 0xa6, 0x88, 0x93, 0xfc, 0xc8, 0x69, 0x13, 0xdc, 0xbc, 0xcb, 0xe9, + 0x08, 0x01, 0x3b, 0x36, 0x2e, 0x3d, 0x80, 0x3f, 0x89, 0x00, 0x67, 0xed, + 0x82, 0xb6, 0x16, 0x2f, 0x01, 0x04, 0x1a, 0x46, 0x94, 0xf7, 0x96, 0x50, + 0xbc, 0x75, 0xdf, 0xef, 0xd4, 0xd7, 0xf2, 0x31, 0x6f, 0x28, 0xe1, 0x65, + 0x41, 0x5e, 0x30, 0x3d, 0x0a, 0x4d, 0x9a, 0xaa, 0x1e, 0x67, 0x44, 0x72, + 0x6e, 0xc8, 0xf5, 0x88, 0x3b, 0x90, 0x54, 0x89, 0xcc, 0x33, 0x65, 0x30, + 0x79, 0xc6, 0xa4, 0x6c, 0x12, 0x06, 0xec, 0xa2, 0xdd, 0xc1, 0x4b, 0x1b, + 0xe6, 0xb9, 0x45, 0x32, 0xe6, 0x54, 0xa1, 0x50, 0xe1, 0x8b, 0x81, 0xf7, + 0x06, 0x37, 0x04, 0x23, 0x0c, 0xce, 0xd9, 0x7c, 0x60, 0x71, 0x41, 0x5c, + 0xbb, 0x6f, 0x95, 0x1e, 0x76, 0xc4, 0x53, 0x37, 0x1d, 0x51, 0xfd, 0x74, + 0x02, 0x31, 0x79, 0xa8, 0xba, 0xb5, 0x60, 0x73, 0xbe, 0x5a, 0x67, 0x6f, + 0x73, 0x45, 0x12, 0xd4, 0xe7, 0x43, 0xae, 0x9b, 0x76, 0xf0, 0xf5, 0x80, + 0xbd, 0xd9, 0x35, 0x13, 0x75, 0x47, 0xed, 0x84, 0x26, 0xfd, 0x3c, 0x0a, + 0xe3, 0xdf, 0xec, 0x83, 0xf2, 0x43, 0xd2, 0x9f, 0x09, 0x13, 0xe7, 0x65, + 0x36, 0x3f, 0xda, 0x1b, 0xf3, 0x70, 0xce, 0x93, 0xcb, 0x75, 0xf7, 0xd6, + 0xef, 0x8e, 0x09, 0x9b, 0x75, 0xbc, 0x99, 0xb5, 0x7b, 0x1c, 0xf2, 0x47, + 0x79, 0x7f, 0x16, 0x26, 0x04, 0xad, 0x7d, 0xa5, 0x14, 0x98, 0xd1, 0xb1, + 0xb8, 0xa7, 0xd6, 0xc4, 0xaa, 0xeb, 0xfb, 0xd7, 0x3c, 0xb3, 0xc9, 0xb1, + 0x29, 0xfb, 0xf2, 0x54, 0x4f, 0xbf, 0xb2, 0x63, 0xdd, 0x87, 0xc3, 0xe6, + 0x45, 0xfa, 0xc1, 0x9b, 0xc4, 0x41, 0x6e, 0x89, 0x66, 0x81, 0x0a, 0xfc, + 0x8b, 0x46, 0x54, 0x6e, 0x34, 0xbf, 0xd2, 0xca, 0x37, 0x0c, 0xf7, 0x95, + 0xb9, 0xf0, 0x25, 0x78, 0x80, 0xb0, 0x44, 0x79, 0x34, 0x5f, 0xe1, 0xc0, + 0x9a, 0x28, 0x49, 0x91, 0x79, 0x28, 0x3f, 0xb8, 0xd1, 0x73, 0x45, 0x55, + 0x26, 0x61, 0xb3, 0x17, 0x42, 0x3e, 0x57, 0xd5, 0x6f, 0xf3, 0x36, 0xfe, + 0x5c, 0xfe, 0xf5, 0x9b, 0x05, 0xa2, 0x1d, 0x71, 0x21, 0xb3, 0xa3, 0x19, + 0x77, 0xc0, 0x1c, 0xe5, 0xc8, 0x6b, 0x17, 0xbc, 0x62, 0x03, 0xca, 0xbd, + 0x48, 0x59, 0x1d, 0xb6, 0x4a, 0x7b, 0x12, 0x77, 0xc9, 0xbb, 0xee, 0xe5, + 0x74, 0xb8, 0x17, 0x42, 0x1a, 0xb7, 0x46, 0x2b, 0x97, 0x45, 0xed, 0x40, + 0xb5, 0x1c, 0xc9, 0x89, 0x0e, 0xd4, 0xd0, 0x8e, 0x54, 0x34, 0x8e, 0x7f, + 0xb4, 0x38, 0xad, 0x4b, 0xdd, 0x43, 0x72, 0x59, 0xef, 0x09, 0x45, 0x30, + 0x05, 0xb6, 0x55, 0x5a, 0x82, 0xc8, 0xab, 0x33, 0x95, 0xe8, 0xab, 0xc9, + 0x78, 0x9d, 0x61, 0xa1, 0x64, 0x35, 0xd3, 0xce, 0xea, 0x53, 0x1a, 0xd1, + 0x42, 0x96, 0xff, 0x5a, 0xe7, 0x93, 0xff, 0x2d, 0xf8, 0x3a, 0x6f, 0xd2, + 0x94, 0x8a, 0x46, 0x9d, 0xec, 0xff, 0x70, 0xa8, 0xa2, 0x81, 0x25, 0xc2, + 0x1f, 0x1b, 0xce, 0x7f, 0xa2, 0xae, 0x80, 0x60, 0xe5, 0x12, 0xf1, 0xdd, + 0x92, 0x83, 0x91, 0xd6, 0xe6, 0xf6, 0x3a, 0x8b, 0x1c, 0xf2, 0xf8, 0x72, + 0xc7, 0x24, 0x6d, 0xb0, 0xdc, 0x8c, 0x48, 0xdf, 0xd0, 0x3b, 0xfe, 0xc9, + 0x7a, 0xb5, 0x5b, 0x66, 0x68, 0x0f, 0xd7, 0x9e, 0x09, 0xee, 0xcf, 0xc7, + 0xf2, 0x3a, 0x51, 0xe8, 0x96, 0x4d, 0xff, 0xa3, 0x6e, 0x00, 0xdd, 0xc3, + 0x2c, 0xe6, 0x32, 0x77, 0xb2, 0x68, 0x62, 0xea, 0x52, 0xda, 0xa8, 0x81, + 0xc7, 0x6e, 0x69, 0xa3, 0x59, 0xba, 0x17, 0xef, 0xc9, 0xc9, 0xd3, 0xe1, + 0x80, 0x16, 0xa3, 0xe4, 0xfa, 0xba, 0xa5, 0xa7, 0x2a, 0xf7, 0x74, 0x46, + 0xa6, 0x20, 0x39, 0xc4, 0xa5, 0x02, 0x76, 0x50, 0x0d, 0xc1, 0x3f, 0x99, + 0x8a, 0xc2, 0x36, 0x97, 0xf9, 0x3a, 0xdc, 0x47, 0x46, 0xe2, 0xbf, 0xb1, + 0xe1, 0x43, 0xf2, 0xb4, 0x0d, 0x42, 0xd9, 0xb7, 0x63, 0xdc, 0xb4, 0x94, + 0x79, 0x95, 0xf9, 0x03, 0x19, 0x00, 0x16, 0x07, 0x0e, 0x2c, 0x7a, 0xdb, + 0x94, 0x03, 0x2b, 0x6f, 0x84, 0xad, 0xf3, 0xde, 0x2f, 0x1b, 0xcf, 0xad, + 0xa8, 0xb5, 0x76, 0x84, 0xef, 0x6f, 0x68, 0x9d, 0xd5, 0x14, 0xf7, 0xfc, + 0x52, 0x8d, 0xa8, 0x3e, 0x7c, 0xcb, 0x96, 0xed, 0x1b, 0x01, 0x30, 0xa9, + 0x6f, 0x77, 0x11, 0xac, 0xac, 0xc0, 0x2a, 0xe4, 0xd4, 0xda, 0x9a, 0xfa, + 0x67, 0x70, 0x5e, 0xe7, 0x9b, 0x5e, 0x30, 0x37, 0x7f, 0x98, 0x7b, 0x5d, + 0xd0, 0x39, 0x83, 0x3d, 0x13, 0xce, 0x6b, 0x84, 0xc6, 0x4d, 0x65, 0x79, + 0x1b, 0x9a, 0x42, 0x42, 0x00, 0x83, 0xcf, 0x7a, 0x36, 0xa0, 0x03, 0x68, + 0xce, 0x13, 0x19, 0x7c, 0x3f, 0xae, 0x6d, 0xea, 0x31, 0x8a, 0xaa, 0xd4, + 0x8c, 0xed, 0x74, 0x2f, 0xd2, 0xd4, 0x6d, 0xfe, 0x6f, 0x0c, 0x59, 0xf0, + 0x05, 0x5f, 0xa0, 0xf7, 0x8a, 0xaf, 0x8e, 0x49, 0x99, 0x11, 0x65, 0x2d, + 0x41, 0x61, 0x66, 0x34, 0x2e, 0x74, 0xdb, 0x94, 0x5b, 0x8b, 0xca, 0xa0, + 0xac, 0xd2, 0xa1, 0x7c, 0x79, 0xab, 0xc5, 0x71, 0x3f, 0x28, 0x23, 0x55, + 0x4c, 0x61, 0x72, 0x74, 0xb3, 0x18, 0x45, 0x1f, 0x00, 0x6c, 0x30, 0x7c, + 0x40, 0xd5, 0x34, 0x22, 0xaa, 0xa9, 0xc1, 0x78, 0x7c, 0xd4, 0xa3, 0xfa, + 0xb8, 0x02, 0x44, 0xe1, 0x53, 0x04, 0x3d, 0x4f, 0xc1, 0x76, 0xd1, 0x42, + 0x80, 0x85, 0x69, 0xb6, 0x50, 0x74, 0x7c, 0x46, 0xaf, 0xa6, 0x0e, 0x7f, + 0xd5, 0x8b, 0x16, 0xa3, 0xda, 0x38, 0x71, 0xe7, 0x99, 0xa2, 0x0c, 0x09, + 0xb6, 0xdd, 0xbb, 0x1e, 0xac, 0x32, 0x1b, 0xd4, 0x44, 0x93, 0xf2, 0x11, + 0x22, 0xbf, 0x88, 0x2c, 0xda, 0x96, 0xe9, 0xa0, 0xf1, 0xab, 0x02, 0xf6, + 0x85, 0x38, 0xb7, 0x37, 0xec, 0x96, 0x42, 0xe3, 0xbd, 0x94, 0x39, 0xa4, + 0xb9, 0x90, 0xfb, 0x9a, 0x9f, 0x7e, 0x51, 0xdd, 0x89, 0x2c, 0x3c, 0x5c, + 0xc3, 0x49, 0x16, 0x47, 0x36, 0x8d, 0x29, 0x53, 0x57, 0x2c, 0xa3, 0xd6, + 0x1b, 0x01, 0xc1, 0x71, 0xaf, 0x95, 0x7f, 0x90, 0xf6, 0x2d, 0x32, 0xab, + 0x6a, 0xc0, 0x38, 0x39, 0xfd, 0x6d, 0x79, 0x15, 0xde, 0x70, 0x48, 0x32, + 0xff, 0x25, 0x2b, 0x08, 0x4d, 0x11, 0xd0, 0x93, 0xdf, 0xdf, 0xee, 0xfa, + 0xbc, 0xbd, 0x3e, 0xa2, 0xc4, 0x57, 0x33, 0x82, 0x5c, 0x03, 0x70, 0x2c, + 0xa5, 0x2e, 0x45, 0xb1, 0x52, 0xba, 0xc9, 0xad, 0xcb, 0x5e, 0x8e, 0xae, + 0xff, 0x94, 0x05, 0x89, 0xd8, 0x5c, 0xb3, 0xbf, 0x85, 0x66, 0x21, 0x3f, + 0x94, 0xab, 0x64, 0xfe, 0xa4, 0xaf, 0xe2, 0x72, 0x0d, 0x3d, 0x75, 0xfb, + 0x12, 0xe9, 0x08, 0x83, 0x91, 0x38, 0xcf, 0xcb, 0x84, 0x34, 0xa7, 0x98, + 0xea, 0x80, 0xaa, 0x61, 0x7a, 0xbb, 0xc0, 0x40, 0xe9, 0x79, 0xf8, 0xec, + 0xc9, 0x37, 0xaa, 0xb5, 0xa4, 0x80, 0x1b, 0x7b, 0xce, 0x9e, 0x56, 0x5f, + 0x55, 0xdf, 0xf6, 0xd3, 0x81, 0xe9, 0x22, 0x47, 0x71, 0x5e, 0x28, 0x75, + 0xb5, 0xa6, 0x23, 0xcd, 0x84, 0x64, 0xa3, 0x7d, 0xd7, 0x8a, 0xb4, 0xcc, + 0xe7, 0x61, 0xd2, 0xfa, 0xe4, 0x47, 0xfc, 0x8d, 0xf6, 0x32, 0x80, 0xcf, + 0x13, 0x60, 0x4d, 0xf9, 0xf9, 0x94, 0xa8, 0xff, 0x23, 0xdc, 0x4b, 0xc4, + 0x07, 0x3b, 0xfb, 0x3e, 0x33, 0x8f, 0x39, 0x51, 0xdd, 0x5b, 0x05, 0x52, + 0x57, 0xc3, 0x01, 0x65, 0x77, 0x25, 0x50, 0xe2, 0xa6, 0x25, 0x2d, 0xfa, + 0x92, 0x17, 0xf4, 0xc8, 0x71, 0xb0, 0x2e, 0xfa, 0xc0, 0x8d, 0xaf, 0x7c, + 0xe0, 0xa9, 0x8a, 0x65, 0xb3, 0x54, 0x72, 0x0e, 0x38, 0x59, 0xa5, 0x13, + 0x8f, 0xbf, 0xe8, 0x1b, 0x5e, 0x60, 0x5c, 0x58, 0xa9, 0x94, 0x71, 0x3d, + 0xbc, 0x89, 0xe9, 0xfd, 0x43, 0x5c, 0x57, 0xe5, 0x06, 0x1d, 0x89, 0x14, + 0x48, 0xf0, 0x1c, 0x04, 0x11, 0x75, 0x36, 0x38, 0x3c, 0xe0, 0x5a, 0xc2, + 0xe2, 0x3b, 0xa6, 0x18, 0x9e, 0x57, 0xf2, 0x51, 0x71, 0x9b, 0xc0, 0x8f, + 0x1b, 0x86, 0x17, 0xad, 0x2a, 0x59, 0x8c, 0xda, 0xc7, 0x03, 0xd2, 0xfc, + 0x26, 0x87, 0x3b, 0x53, 0x7e, 0xfb, 0xb3, 0x92, 0xf9, 0x84, 0xca, 0x66, + 0xe8, 0x03, 0x13, 0x9b, 0x3d, 0x96, 0xd6, 0xf0, 0xb7, 0x8f, 0xdf, 0xab, + 0x0d, 0xa6, 0xb2, 0x23, 0x4d, 0xcc, 0xa5, 0xc4, 0x19, 0xeb, 0x72, 0xa9, + 0xf1, 0x6e, 0xba, 0x57, 0xab, 0x5b, 0xae, 0xf2, 0x6b, 0x30, 0x08, 0x08, + 0xea, 0x5f, 0x3a, 0x30, 0xcb, 0x1f, 0x1f, 0xe6, 0x3e, 0xd7, 0x15, 0x1e, + 0x78, 0x34, 0x32, 0x00, 0x10, 0x4f, 0x69, 0x4a, 0x18, 0xe8, 0x0b, 0x98, + 0x73, 0xb3, 0x47, 0xd3, 0x8b, 0x0e, 0x5b, 0x5a, 0xa1, 0x50, 0x5f, 0x08, + 0xeb, 0x15, 0x8c, 0x24, 0xb1, 0x62, 0xb0, 0x2e, 0xb1, 0x88, 0xb1, 0x33, + 0x89, 0x83, 0x87, 0xb2, 0x77, 0x61, 0x2f, 0x89, 0x7f, 0x0b, 0xeb, 0x88, + 0x19, 0x16, 0x79, 0x7c, 0xe5, 0x8e, 0xe1, 0x8b, 0x84, 0x47, 0xeb, 0xf7, + 0xe1, 0xe2, 0xd6, 0x62, 0x93, 0x92, 0x5e, 0xb1, 0xf9, 0xe5, 0xde, 0x8f, + 0x5e, 0x03, 0x07, 0x5c, 0x5f, 0xea, 0xb7, 0x51, 0x0e, 0x45, 0x2a, 0xca, + 0x52, 0xfe, 0xb5, 0xa8, 0x21, 0x11, 0xe3, 0xf6, 0xb9, 0x9f, 0x9e, 0xe0, + 0x42, 0x93, 0x1a, 0x69, 0x58, 0x80, 0x1a, 0x42, 0xd7, 0x39, 0x2e, 0xa9, + 0x48, 0xf6, 0xf7, 0x64, 0xaf, 0x3e, 0xc6, 0x47, 0x04, 0x2e, 0xdf, 0xc4, + 0xd4, 0x21, 0xfe, 0x48, 0xf6, 0xd5, 0x97, 0x8e, 0x54, 0x48, 0xd2, 0xca, + 0xaf, 0x42, 0x5e, 0xc5, 0x4f, 0xac, 0x43, 0xa1, 0x57, 0x09, 0xb3, 0x67, + 0x88, 0xd5, 0xd9, 0x17, 0xdd, 0xf0, 0xf0, 0x83, 0x49, 0x44, 0x09, 0x94, + 0xe4, 0x52, 0x13, 0xfd, 0x83, 0x93, 0x7b, 0x68, 0x31, 0x93, 0xfa, 0xf2, + 0x78, 0xaa, 0x99, 0x24, 0x69, 0x4e, 0x5c, 0xba, 0xba, 0xfe, 0xee, 0xd5, + 0xaa, 0x67, 0x71, 0xba, 0x3a, 0x3e, 0xe1, 0xce, 0x79, 0x7c, 0x14, 0x70, + 0xde, 0xbe, 0x36, 0xa5, 0xd7, 0x10, 0xef, 0x57, 0xd8, 0x05, 0x0f, 0x3e, + 0x5a, 0x3e, 0x6c, 0x12, 0x1c, 0xe0, 0x28, 0x32, 0x0f, 0x75, 0x07, 0xaa, + 0x23, 0x7b, 0x5b, 0x3a, 0x14, 0x9b, 0x5c, 0x2d, 0x39, 0xdd, 0xa9, 0x28, + 0x67, 0xaf, 0xb3, 0x3d, 0x97, 0x7e, 0xc9, 0x3c, 0xd5, 0x24, 0x51, 0xb1, + 0xad, 0x81, 0x83, 0x9e, 0x09, 0xaa, 0x6d, 0xd7, 0xb6, 0xc5, 0x26, 0x1a, + 0xce, 0x1a, 0x31, 0x58, 0x3b, 0x2a, 0x4f, 0x8d, 0xe9, 0x19, 0xf2, 0x23, + 0x98, 0xbd, 0xdb, 0x36, 0xa0, 0xab, 0xf3, 0xfe, 0x71, 0x02, 0xc4, 0x27, + 0xe6, 0x50, 0x24, 0xc6, 0x69, 0xa3, 0x58, 0xc1, 0x00, 0x91, 0x90, 0xce, + 0x84, 0x8f, 0xb0, 0xde, 0x4d, 0x67, 0x24, 0x59, 0x6c, 0xbf, 0x5e, 0x72, + 0x32, 0xed, 0x0c, 0x6d, 0x77, 0x0c, 0xc6, 0xbb, 0x7e, 0x07, 0xb1, 0x4d, + 0x60, 0x48, 0x4d, 0x10, 0x46, 0x7b, 0x99, 0x73, 0xee, 0x1d, 0xb1, 0xf1, + 0x00, 0x43, 0x2b, 0x08, 0x2e, 0x55, 0x87, 0xe7, 0xe1, 0xbf, 0x7f, 0x99, + 0x55, 0x07, 0x72, 0xe1, 0xc1, 0xe5, 0x0e, 0x81, 0x99, 0x72, 0xf6, 0x4c, + 0x69, 0x79, 0x14, 0x19, 0x3f, 0x18, 0x83, 0x36, 0x2f, 0x22, 0x35, 0x98, + 0xbe, 0xc1, 0xa3, 0x54, 0xf5, 0xb3, 0x7a, 0x88, 0xa6, 0xde, 0x89, 0x56, + 0x39, 0x35, 0x38, 0xb7, 0x06, 0x80, 0xd6, 0xdc, 0x85, 0xf8, 0x12, 0x7c, + 0xf7, 0x3b, 0x5d, 0x3e, 0xac, 0x31, 0xd3, 0x48, 0xca, 0xd0, 0x23, 0xec, + 0x9e, 0x1e, 0xce, 0x9a, 0x4e, 0xdd, 0x19, 0xc5, 0xef, 0x0e, 0xe1, 0xdd, + 0x09, 0xbe, 0xd2, 0xcb, 0xd7, 0xfd, 0x8c, 0xed, 0xc7, 0x8c, 0xf2, 0x23, + 0x3f, 0x92, 0x45, 0x38, 0x6b, 0xd5, 0x01, 0x61, 0xa3, 0x45, 0xa9, 0x31, + 0xb9, 0x89, 0xfc, 0xdb, 0x34, 0xf0, 0x66, 0xf1, 0x92, 0xd4, 0x94, 0x57, + 0xdf, 0xcd, 0xae, 0x53, 0x8b, 0xd8, 0x0d, 0x48, 0x2d, 0xe1, 0xdb, 0x10, + 0x6b, 0x5e, 0x62, 0x72, 0x9c, 0x9f, 0xbb, 0x17, 0xb7, 0xa2, 0x5c, 0x70, + 0xcc, 0x6f, 0x62, 0x2d, 0xf8, 0x62, 0x19, 0xbd, 0x04, 0xb9, 0xeb, 0xba, + 0x69, 0x89, 0xda, 0xf7, 0x00, 0x54, 0x47, 0x76, 0xa4, 0x80, 0x1c, 0x69, + 0x8c, 0xc2, 0x00, 0x15, 0xe7, 0xdf, 0x61, 0x5f, 0x5c, 0x0c, 0x6f, 0x73, + 0x3d, 0xd1, 0x6a, 0xe2, 0x80, 0xf1, 0xd5, 0x62, 0xdb, 0x61, 0x8e, 0xb1, + 0xa3, 0x4b, 0x41, 0xcd, 0x3b, 0xf6, 0xa8, 0x35, 0xc5, 0xf6, 0xf3, 0xba, + 0x4b, 0x65, 0xde, 0xb3, 0xee, 0xa6, 0x71, 0x8f, 0xe3, 0xaf, 0x64, 0x2f, + 0xf9, 0x29, 0x80, 0x66, 0x5b, 0xbc, 0x45, 0xd8, 0xd0, 0x3c, 0xfb, 0xac, + 0x59, 0xa3, 0x29, 0x50, 0xfc, 0x7b, 0x27, 0x2c, 0x70, 0xa9, 0x1a, 0x9e, + 0x26, 0x63, 0xa6, 0x3b, 0x61, 0x83, 0x21, 0x56, 0xcf, 0x6c, 0xb1, 0x0f, + 0x19, 0x66, 0xed, 0xaa, 0xd0, 0x8a, 0x2c, 0x9c, 0x2b, 0x30, 0x1d, 0x98, + 0x3f, 0x44, 0x77, 0xb6, 0x77, 0x0d, 0x59, 0xc9, 0x8a, 0x41, 0x04, 0x3a, + 0x54, 0xc9, 0x59, 0x5d, 0xd9, 0x4c, 0x3c, 0x8a, 0x10, 0x36, 0xeb, 0x90, + 0x11, 0x97, 0xe9, 0xdb, 0x22, 0x35, 0xab, 0xaf, 0xb6, 0x26, 0xfc, 0xd6, + 0x0f, 0xcb, 0x41, 0x58, 0xb8, 0xdb, 0xcb, 0xa3, 0x26, 0xc3, 0x60, 0xc7, + 0x08, 0x5b, 0x87, 0xc4, 0x1c, 0x66, 0x49, 0x3d, 0x9f, 0x45, 0x37, 0x47, + 0x9c, 0x3e, 0x5c, 0xed, 0x96, 0x7d, 0x52, 0x7c, 0x3d, 0x74, 0xda, 0x20, + 0x34, 0xb1, 0x78, 0xa4, 0x11, 0xe1, 0xfe, 0x7a, 0x69, 0xb6, 0x52, 0xf9, + 0x77, 0x2f, 0xf2, 0x40, 0xbf, 0xa0, 0x86, 0xd8, 0xc8, 0x22, 0xa1, 0x76, + 0x48, 0xd0, 0xfe, 0xc7, 0x98, 0x99, 0xa5, 0xb1, 0xc8, 0xce, 0xa6, 0x6d, + 0xc0, 0xd0, 0x9d, 0xc1, 0x4c, 0xd7, 0x88, 0x31, 0xd9, 0xfd, 0x70, 0x77, + 0x67, 0x3b, 0x67, 0xd7, 0x55, 0xe8, 0x17, 0x58, 0x01, 0x7d, 0xbf, 0x11, + 0xcc, 0x2c, 0x82, 0xc8, 0xef, 0x91, 0x08, 0xa3, 0xec, 0x0f, 0x40, 0x43, + 0xf8, 0xa0, 0xc5, 0x95, 0xe0, 0xfd, 0x2c, 0x4f, 0xc6, 0x78, 0x81, 0xee, + 0x97, 0x8a, 0x4e, 0x4c, 0xfe, 0xa0, 0x91, 0x45, 0xe8, 0xe3, 0x2b, 0x21, + 0x3c, 0xc8, 0xc7, 0x78, 0x24, 0x88, 0x41, 0x75, 0xdc, 0x5b, 0x66, 0x34, + 0xb0, 0x4f, 0x43, 0x78, 0xf2, 0xa7, 0x16, 0x87, 0xbc, 0xc9, 0xa6, 0xa3, + 0x87, 0x54, 0x93, 0xc0, 0x49, 0x7b, 0xd1, 0x47, 0xe0, 0xe3, 0x7c, 0xc5, + 0x81, 0x90, 0x6f, 0x65, 0x96, 0x43, 0xd4, 0x63, 0xef, 0x91, 0x2b, 0x32, + 0x43, 0x67, 0x7a, 0xda, 0xa8, 0x75, 0xfd, 0xff, 0xb9, 0x49, 0x4f, 0x37, + 0xa6, 0x4b, 0x11, 0x8a, 0x41, 0xcc, 0x21, 0x05, 0x4b, 0xb1, 0x60, 0x72, + 0xd9, 0x01, 0x59, 0x18, 0x75, 0xb7, 0x0c, 0xc5, 0x33, 0x21, 0x81, 0x33, + 0x08, 0x64, 0xf5, 0xde, 0xa7, 0x63, 0xae, 0x1e, 0x41, 0xa2, 0x4f, 0xf7, + 0xf5, 0xa7, 0xc8, 0x8a, 0xc2, 0x49, 0xa8, 0xf2, 0xa7, 0x83, 0x8f, 0xd5, + 0x1a, 0xa2, 0x39, 0x16, 0xb6, 0xaa, 0xc1, 0x27, 0x99, 0x9c, 0xee, 0xda, + 0x46, 0x44, 0x04, 0x7c, 0xb7, 0xb0, 0x2b, 0xde, 0x1f, 0x78, 0x5c, 0xaf, + 0x18, 0xdc, 0xc4, 0x92, 0x19, 0x02, 0xaf, 0xe2, 0x7c, 0x6c, 0x73, 0xf4, + 0xdd, 0xd0, 0x27, 0xf1, 0xf2, 0xbe, 0x5c, 0x5f, 0x0b, 0x81, 0x1e, 0xfe, + 0x4a, 0xfe, 0xf3, 0x23, 0x50, 0x53, 0x83, 0x97, 0xee, 0x28, 0x95, 0x87, + 0x08, 0x5c, 0xc3, 0x7d, 0xb8, 0x24, 0xe7, 0x1b, 0xc1, 0x2d, 0xf6, 0xde, + 0x1f, 0x25, 0x7a, 0xe0, 0x9e, 0x0f, 0x84, 0x32, 0xf0, 0xed, 0x73, 0xb9, + 0xae, 0x9c, 0xda, 0x1c, 0xd0, 0xf7, 0xfc, 0xc0, 0xfc, 0xbd, 0x38, 0x62, + 0x0b, 0x7d, 0x0d, 0x85, 0xa0, 0x9c, 0x20, 0x95, 0xd5, 0xf7, 0xaa, 0x6d, + 0x6c, 0xbc, 0x8f, 0x53, 0x61, 0x9b, 0x4c, 0x66, 0x21, 0x41, 0x78, 0x41, + 0xf4, 0xc6, 0xb3, 0x57, 0x8b, 0x4b, 0xca, 0x3b, 0x03, 0xe1, 0x49, 0x31, + 0x65, 0xd4, 0xbd, 0xb2, 0x53, 0x6a, 0xc9, 0x5a, 0xda, 0x61, 0x5c, 0x80, + 0xe8, 0xbd, 0xee, 0x23, 0xc8, 0x98, 0x5e, 0xeb, 0x21, 0x59, 0xe1, 0xf2, + 0x37, 0x0f, 0x6b, 0xd7, 0x5a, 0xbb, 0xe9, 0x75, 0x1d, 0xea, 0xc4, 0x26, + 0x1c, 0x01, 0x2e, 0xc4, 0x58, 0x6f, 0xd0, 0xa0, 0x8c, 0xfe, 0x96, 0xdc, + 0xaa, 0xdd, 0x96, 0x96, 0x7b, 0x9e, 0xdb, 0x75, 0x4b, 0xa8, 0x4f, 0xd3, + 0x0c, 0xd6, 0xa9, 0xf9, 0xd1, 0x12, 0xeb, 0xa4, 0x81, 0x1e, 0xea, 0xab, + 0x8c, 0x59, 0xbf, 0x08, 0xc5, 0x74, 0xff, 0xae, 0x1e, 0xb3, 0xb2, 0xa6, + 0x79, 0x7d, 0xb0, 0xd8, 0xb4, 0xa7, 0x66, 0x47, 0x57, 0xae, 0xbd, 0xf1, + 0x6a, 0x62, 0x66, 0x5e, 0xa1, 0xc5, 0x7b, 0xa9, 0x12, 0xc3, 0xcf, 0xa7, + 0xee, 0x0f, 0xac, 0x80, 0xee, 0xe3, 0x8b, 0x8d, 0x9f, 0xfa, 0xe0, 0x53, + 0x46, 0xb6, 0x4c, 0x5b, 0xd4, 0xe1, 0x7a, 0xd7, 0xc6, 0x96, 0x9c, 0x6d, + 0xd4, 0x91, 0x3c, 0x0b, 0xef, 0xd5, 0x02, 0x74, 0x47, 0x32, 0xa7, 0xbc, + 0xe5, 0xbb, 0xc1, 0xd0, 0x22, 0xe4, 0x51, 0xc8, 0x0d, 0xec, 0x02, 0x9c, + 0xd0, 0x5c, 0x6a, 0x7d, 0x2e, 0x33, 0x2a, 0x8b, 0x6c, 0xa4, 0x68, 0xcf, + 0x93, 0x9e, 0xa8, 0x42, 0x54, 0xf1, 0x73, 0xd4, 0x63, 0xec, 0x71, 0x8b, + 0xe2, 0x90, 0x36, 0x45, 0xfb, 0x0a, 0xa0, 0xe3, 0x18, 0x99, 0x47, 0xee, + 0x5b, 0xb2, 0x93, 0x2e, 0x73, 0x6b, 0xd6, 0xc2, 0x34, 0x0f, 0xe7, 0xf9, + 0x4a, 0xda, 0xf9, 0x34, 0x51, 0x7a, 0xfb, 0x60, 0xb4, 0xdc, 0x02, 0x94, + 0xda, 0xde, 0xd9, 0xd6, 0x60, 0x6c, 0x96, 0xd9, 0x44, 0x06, 0x18, 0x8a, + 0xe3, 0xa8, 0xed, 0x53, 0x5a, 0xfa, 0xfa, 0xcf, 0x64, 0x41, 0x92, 0x6b, + 0x8e, 0xa4, 0x39, 0xb9, 0xfb, 0xcb, 0xe4, 0x81, 0xfe, 0xe1, 0x34, 0xcf, + 0x1d, 0x12, 0xa4, 0x72, 0x9f, 0xee, 0xd2, 0xd9, 0x7b, 0x78, 0x78, 0x5a, + 0x70, 0x5b, 0x80, 0xd2, 0xb5, 0x19, 0x1e, 0xa7, 0x9f, 0x74, 0x31, 0x17, + 0xc5, 0xe6, 0xd5, 0x5d, 0xab, 0x18, 0x26, 0xd3, 0x41, 0x00, 0x91, 0x0e, + 0xd2, 0x07, 0x18, 0x21, 0x1b, 0xe8, 0x96, 0x25, 0x5d, 0xf3, 0xa7, 0x9a, + 0x01, 0x65, 0x4c, 0x6e, 0x10, 0xb8, 0x98, 0x96, 0x4b, 0x4f, 0x4f, 0xcf, + 0xb7, 0xb8, 0x64, 0x06, 0x90, 0xab, 0xcd, 0x75, 0x46, 0x75, 0x3c, 0x00, + 0xd6, 0xb3, 0x02, 0xb3, 0x8a, 0xe8, 0x34, 0x80, 0x1b, 0x1e, 0x36, 0x88, + 0x58, 0xff, 0xe6, 0x2b, 0xa0, 0x1d, 0x47, 0xe1, 0xb1, 0xee, 0xe0, 0x78, + 0x36, 0x92, 0x15, 0xb9, 0xcd, 0xda, 0x8f, 0xde, 0x8d, 0x3b, 0x61, 0xb7, + 0x35, 0x47, 0xdf, 0x49, 0x69, 0xef, 0xc6, 0xd6, 0x7e, 0xa8, 0x13, 0xea, + 0xdd, 0x9e, 0xab, 0x6b, 0x81, 0xce, 0xfb, 0xa6, 0x71, 0xae, 0x96, 0x12, + 0x98, 0x51, 0x34, 0x16, 0x3c, 0x5f, 0x69, 0xd7, 0x5c, 0x10, 0x45, 0x79, + 0xca, 0x56, 0x2c, 0x78, 0xf1, 0x8f, 0xba, 0xe4, 0x99, 0xec, 0x7e, 0x5d, + 0xda, 0x1c, 0x99, 0x37, 0xb5, 0xda, 0xf2, 0xd6, 0x8c, 0x5c, 0x34, 0x07, + 0x9d, 0x09, 0xa5, 0xe6, 0xf2, 0x52, 0x38, 0xd3, 0xa0, 0x2b, 0xb6, 0xce, + 0xd6, 0x65, 0xf9, 0x0e, 0xdf, 0x7a, 0x06, 0x40, 0x84, 0x8a, 0x77, 0xbb, + 0x49, 0x60, 0x2e, 0xa1, 0xee, 0x21, 0x99, 0x52, 0x42, 0x79, 0x00, 0x36, + 0x89, 0x19, 0x08, 0x22, 0xb8, 0x8e, 0x20, 0xb3, 0x09, 0xc7, 0x5f, 0x39, + 0x89, 0xce, 0x47, 0x38, 0x37, 0x70, 0x28, 0xcd, 0xdf, 0xd4, 0x32, 0xd2, + 0x3c, 0x0d, 0xad, 0x0d, 0xe2, 0xa7, 0xad, 0x8b, 0xfa, 0x02, 0x1c, 0x52, + 0x7c, 0xd1, 0x5f, 0x79, 0xd9, 0x5f, 0x30, 0xed, 0x73, 0x46, 0x08, 0x3e, + 0x7f, 0xc7, 0x1e, 0xc2, 0xd4, 0x26, 0x29, 0xe2, 0x76, 0x82, 0x5a, 0xdb, + 0x43, 0x2d, 0x4c, 0x5c, 0x0e, 0x8d, 0xf5, 0x19, 0xb9, 0x98, 0xba, 0xfc, + 0xb3, 0xd1, 0xc8, 0x4f, 0x58, 0xc8, 0x87, 0x70, 0x36, 0xde, 0x60, 0x39, + 0xcd, 0x19, 0x14, 0xb5, 0x75, 0xe8, 0x0e, 0x8b, 0x10, 0xb9, 0x51, 0xe7, + 0xcd, 0xd1, 0x51, 0xfd, 0x21, 0x22, 0x73, 0x68, 0x5f, 0xb6, 0x5d, 0xe2, + 0xfb, 0xea, 0xca, 0x50, 0x31, 0xe9, 0x66, 0xca, 0x47, 0x12, 0x84, 0x27, + 0xe1, 0x03, 0x15, 0x30, 0xac, 0xd3, 0xc0, 0x17, 0x09, 0xd5, 0x02, 0x32, + 0x4a, 0xad, 0x99, 0x49, 0x7a, 0x92, 0x3e, 0x4d, 0xe9, 0x55, 0x4d, 0xbc, + 0x51, 0x8f, 0x09, 0xfc, 0xee, 0x09, 0xfd, 0x6d, 0x2c, 0x86, 0xf6, 0x9a, + 0x77, 0x75, 0xb2, 0x41, 0x66, 0x3b, 0x5e, 0x13, 0x62, 0x8a, 0x01, 0x71, + 0x75, 0x51, 0xb9, 0xc3, 0xd5, 0xc3, 0x54, 0x6e, 0xc1, 0xf6, 0x66, 0xbf, + 0x6b, 0xd6, 0x65, 0x4b, 0xa0, 0xd9, 0x85, 0x34, 0x07, 0x75, 0x3c, 0x55, + 0xf1, 0xed, 0x7c, 0xe1, 0xd4, 0x1b, 0x00, 0x4b, 0x06, 0x3d, 0x40, 0xde, + 0x04, 0x69, 0xef, 0x2f, 0xa7, 0xa6, 0xd2, 0x95, 0xff, 0x56, 0xab, 0x0b, + 0xd6, 0x2a, 0xc7, 0xad, 0x40, 0x12, 0x92, 0x52, 0xa7, 0x1c, 0x76, 0x28, + 0x70, 0x38, 0x59, 0xa8, 0xcf, 0xfb, 0x81, 0x5c, 0xc5, 0xb9, 0x5f, 0xe8, + 0x5f, 0xcc, 0x49, 0xaa, 0x27, 0xba, 0x41, 0xc4, 0x50, 0x50, 0xbd, 0x6d, + 0x01, 0x00, 0x00, 0x93, 0x26, 0xa5, 0xcd, 0xb6, 0x94, 0x2c, 0xa2, 0x69, + 0xf4, 0x7c, 0xfb, 0x6b, 0xad, 0x57, 0x47, 0x51, 0xb3, 0x5c, 0x8d, 0x3b, + 0x39, 0x7d, 0x31, 0x08, 0x1c, 0x8c, 0xd3, 0x4f, 0x4b, 0x89, 0xb1, 0x6f, + 0xbd, 0x0d, 0xa9, 0xca, 0x4d, 0xea, 0xdf, 0xb8, 0x9e, 0x0c, 0xa8, 0xc8, + 0xfa, 0x7f, 0x69, 0x4b, 0x34, 0xc5, 0x01, 0x34, 0xcb, 0xa4, 0x80, 0x51, + 0xbe, 0xb4, 0x39, 0xc2, 0xb7, 0xeb, 0xd8, 0x5d, 0xbf, 0x42, 0xc3, 0x2d, + 0x67, 0xf9, 0x0d, 0x97, 0xf4, 0x61, 0x3a, 0x29, 0x23, 0x7d, 0x4d, 0xb5, + 0x26, 0xf2, 0x77, 0x81, 0xf4, 0x9c, 0xd4, 0x0c, 0xb9, 0xb8, 0x2d, 0xad, + 0xae, 0x8a, 0x65, 0x9c, 0x37, 0x3e, 0xdb, 0xb0, 0xba, 0xa3, 0xf1, 0x93, + 0x55, 0x89, 0x3b, 0x15, 0x91, 0x9e, 0x49, 0xb4, 0x88, 0xc6, 0x6b, 0x34, + 0x6b, 0xfc, 0xce, 0x6e, 0x54, 0xd4, 0xb1, 0x85, 0xa5, 0xa2, 0x0b, 0x29, + 0x58, 0xd1, 0xe0, 0x15, 0x0c, 0x92, 0x62, 0xb0, 0x8e, 0x5f, 0x4a, 0xde, + 0xe8, 0x5f, 0x14, 0xae, 0x7c, 0xc9, 0x3b, 0x64, 0xdd, 0x2c, 0xcb, 0xc1, + 0x02, 0xa4, 0x3e, 0xa1, 0xde, 0x39, 0x08, 0x78, 0xce, 0xdf, 0xf8, 0xf7, + 0x2a, 0x0a, 0x38, 0xf1, 0x58, 0xda, 0x89, 0x30, 0xa0, 0x3e, 0x4e, 0x41, + 0x12, 0x43, 0xcf, 0x3f, 0xf3, 0x3a, 0xaa, 0x58, 0x8d, 0x5f, 0x82, 0xf8, + 0xe7, 0xd7, 0x67, 0x90, 0xf1, 0x13, 0x27, 0x9b, 0x12, 0x35, 0x1f, 0x8a, + 0x5b, 0xd2, 0x05, 0xc8, 0x44, 0xec, 0xd0, 0xe2, 0x73, 0xa1, 0x76, 0x42, + 0x6b, 0x26, 0x4b, 0xc2, 0xe9, 0xa5, 0xd7, 0x0a, 0x49, 0x07, 0x81, 0xea, + 0x19, 0x8c, 0x28, 0x56, 0x13, 0x15, 0x6a, 0x39, 0x3f, 0xe7, 0x0b, 0x79, + 0x7f, 0x31, 0xfb, 0x6f, 0x1e, 0xf4, 0x62, 0xee, 0xa7, 0xb4, 0x44, 0x97, + 0x2d, 0xc4, 0x08, 0x7f, 0xe0, 0x3f, 0x70, 0x9a, 0x47, 0x5b, 0x83, 0x0e, + 0x2b, 0xc9, 0x54, 0x84, 0x68, 0xe7, 0x35, 0x2f, 0x7b, 0x76, 0xc9, 0x88, + 0xcf, 0x1d, 0xd8, 0xfe, 0x22, 0x86, 0xe0, 0x98, 0x2b, 0x9b, 0x3e, 0x09, + 0xcd, 0xa5, 0x3c, 0x8c, 0x74, 0x62, 0xa3, 0x08, 0x5d, 0x80, 0x37, 0x4d, + 0xdc, 0xfd, 0x1b, 0xe2, 0x21, 0xc3, 0x7d, 0x23, 0x77, 0x65, 0x51, 0x2d, + 0x15, 0x7e, 0xb2, 0xc4, 0x16, 0xee, 0x48, 0x05, 0xd3, 0x0b, 0xd1, 0x06, + 0x45, 0x61, 0xde, 0x9d, 0xdb, 0x00, 0x78, 0x87, 0x03, 0x79, 0x63, 0x29, + 0x6f, 0x73, 0x01, 0x8e, 0x61, 0x59, 0xba, 0x27, 0x03, 0xea, 0xca, 0xb1, + 0x84, 0x81, 0x45, 0x38, 0x79, 0xc7, 0x45, 0xd4, 0x85, 0x20, 0x8e, 0xb4, + 0x29, 0x45, 0xb7, 0xd1, 0x1f, 0xee, 0x56, 0x78, 0x52, 0xfd, 0x2b, 0xe6, + 0x06, 0xce, 0x8c, 0xe7, 0xad, 0xa6, 0x08, 0xb0, 0x8e, 0x66, 0xf2, 0x6f, + 0x31, 0x25, 0xe8, 0x53, 0xbd, 0xf2, 0x98, 0xc2, 0x4b, 0x13, 0x8a, 0x3f, + 0xd3, 0x53, 0x34, 0x3b, 0xf2, 0x11, 0x14, 0x75, 0x5a, 0x99, 0x3d, 0x70, + 0x38, 0xb8, 0x71, 0x9f, 0x5d, 0xde, 0xa3, 0x55, 0xe3, 0x76, 0x2e, 0xaa, + 0x22, 0xd3, 0xb9, 0x9b, 0x49, 0x5d, 0x7f, 0xa0, 0x0a, 0x60, 0x19, 0x13, + 0x7a, 0xe1, 0xf1, 0x15, 0x50, 0x2b, 0x7d, 0x23, 0xc5, 0xd7, 0x58, 0x17, + 0xfb, 0x16, 0x68, 0x5d, 0x5a, 0xdd, 0x36, 0x63, 0xc2, 0x32, 0xff, 0x1d, + 0x1b, 0x98, 0xc5, 0xdd, 0x46, 0x54, 0x8d, 0xe6, 0x34, 0xa6, 0xb4, 0x8e, + 0xe6, 0xc3, 0xd9, 0x21, 0x72, 0xfc, 0xfb, 0xa2, 0xf0, 0xa7, 0x8a, 0xe0, + 0xf5, 0x48, 0x70, 0xd0, 0x53, 0xf0, 0x78, 0x0f, 0x9a, 0x4f, 0x7c, 0x1b, + 0x6a, 0x5a, 0xa3, 0x29, 0xeb, 0x7b, 0xa7, 0xd3, 0xdf, 0xd4, 0x34, 0x14, + 0x18, 0x41, 0xf4, 0xab, 0x83, 0xb8, 0xef, 0xe1, 0x40, 0x28, 0xc7, 0x9a, + 0x30, 0x85, 0xc1, 0x56, 0x47, 0x7f, 0x88, 0x7b, 0x9d, 0xf1, 0xae, 0xaf, + 0x02, 0x2b, 0x6a, 0xdd, 0x67, 0x0f, 0x56, 0x2b, 0x85, 0xad, 0x7e, 0xb8, + 0x83, 0x3f, 0x22, 0x87, 0x4f, 0x07, 0x1a, 0xe8, 0x90, 0x25, 0xb0, 0xa8, + 0x4e, 0x53, 0xe7, 0x28, 0x86, 0x06, 0x3b, 0xe5, 0x6e, 0x20, 0xce, 0x4b, + 0x9c, 0x72, 0x96, 0x87, 0x92, 0x1d, 0x49, 0xf4, 0xed, 0xde, 0xef, 0x0c, + 0xfe, 0x05, 0x57, 0x93, 0x18, 0xc6, 0x89, 0x41, 0xac, 0x4d, 0x1b, 0x4a, + 0xa4, 0x23, 0xc9, 0x7c, 0xae, 0x56, 0x12, 0x28, 0x00, 0xd6, 0x64, 0x8b, + 0x69, 0xff, 0xd1, 0x87, 0xe7, 0x23, 0x75, 0x37, 0x7d, 0x57, 0x71, 0x6b, + 0xa7, 0x7a, 0x8a, 0x97, 0x3b, 0xd6, 0x1b, 0x18, 0x97, 0x39, 0x8d, 0x9b, + 0xc3, 0x2c, 0x3a, 0xf1, 0xc0, 0x89, 0xa9, 0xd0, 0xaa, 0x0a, 0x29, 0xa2, + 0xff, 0xcd, 0x19, 0x54, 0xb4, 0x57, 0x75, 0xf0, 0x3b, 0x63, 0x5c, 0x42, + 0x0d, 0x09, 0x7e, 0xfa, 0x56, 0xae, 0x2e, 0x24, 0xd1, 0xb4, 0xa8, 0x03, + 0xdd, 0xbd, 0xaf, 0x6d, 0xcb, 0x4b, 0x28, 0xce, 0xd4, 0x84, 0x85, 0xfc, + 0x9b, 0xd3, 0x1f, 0x9a, 0xcb, 0xb5, 0x57, 0x9d, 0xba, 0x61, 0x8f, 0xfd, + 0xdd, 0x0d, 0x49, 0xa0, 0x03, 0x4f, 0x52, 0xdb, 0x9a, 0x91, 0x18, 0xf0, + 0x9a, 0xf1, 0x87, 0xe2, 0xfc, 0x71, 0x02, 0xde, 0x01, 0xf5, 0x0a, 0x27, + 0xc9, 0x26, 0x29, 0xac, 0x91, 0x60, 0x0e, 0x4e, 0xd5, 0x40, 0x3d, 0x9c, + 0x40, 0x15, 0xcc, 0x12, 0x6c, 0x2b, 0x64, 0x40, 0x2a, 0xb3, 0x17, 0x33, + 0x58, 0x88, 0x62, 0xf2, 0x23, 0x28, 0x2b, 0x89, 0x82, 0x02, 0x6b, 0x40, + 0x25, 0x12, 0x99, 0x7d, 0x57, 0xf4, 0x63, 0x4e, 0xb8, 0xef, 0x63, 0x95, + 0x88, 0x91, 0x1d, 0x38, 0x1d, 0x33, 0x0e, 0x13, 0x19, 0x4f, 0xbd, 0xec, + 0x49, 0x6a, 0x50, 0xc4, 0x10, 0x12, 0xa2, 0x2a, 0xe5, 0xfd, 0xd0, 0x04, + 0x4b, 0x13, 0x9e, 0x33, 0x6b, 0xf3, 0x4a, 0xb3, 0xdb, 0x2b, 0x41, 0x6f, + 0x08, 0x94, 0x5e, 0x7a, 0x30, 0xd1, 0xbc, 0x9a, 0x79, 0xe9, 0xfb, 0xcc, + 0x95, 0x55, 0xe0, 0x4d, 0x7d, 0x83, 0xb3, 0x81, 0x89, 0xed, 0x9e, 0x8b, + 0x13, 0x04, 0xef, 0xe4, 0x17, 0x1e, 0x9d, 0x7a, 0x88, 0xc0, 0xb5, 0x91, + 0xe6, 0xe6, 0xc7, 0x1f, 0x88, 0xa6, 0x12, 0xf3, 0x0d, 0x08, 0x57, 0xb3, + 0x26, 0x70, 0x2b, 0x89, 0x5b, 0xb8, 0x5c, 0xbd, 0x78, 0xb5, 0x27, 0x9d, + 0xf1, 0x98, 0xa6, 0x8c, 0x40, 0xe6, 0x71, 0x98, 0xea, 0xff, 0xbf, 0x78, + 0x62, 0x83, 0xb6, 0xd4, 0x7c, 0x79, 0xcf, 0x03, 0x64, 0xe8, 0x27, 0x22, + 0x2e, 0x15, 0xea, 0x0a, 0x04, 0xb7, 0x52, 0xde, 0x07, 0x40, 0xb1, 0xfd, + 0x39, 0xae, 0xee, 0xe4, 0xbb, 0x9a, 0xf0, 0x55, 0xbf, 0x99, 0x9c, 0x29, + 0xee, 0x1b, 0xa8, 0x86, 0xbd, 0xaa, 0x86, 0x43, 0x8a, 0xce, 0x57, 0xaa, + 0xeb, 0xc9, 0x4d, 0xd9, 0x75, 0xe1, 0x36, 0x48, 0x85, 0x03, 0x8b, 0xed, + 0x7d, 0xe7, 0x0f, 0x86, 0xe2, 0x1c, 0xeb, 0x37, 0x66, 0x00, 0xb1, 0x2b, + 0xe5, 0xd4, 0xf3, 0xd4, 0xb2, 0x3f, 0xde, 0x72, 0x10, 0x1d, 0x20, 0x4f, + 0xa5, 0x50, 0x54, 0xf4, 0x18, 0x86, 0xda, 0x01, 0x52, 0x57, 0xf7, 0x7f, + 0x51, 0x5f, 0x19, 0x67, 0x6a, 0xd9, 0xb1, 0x9f, 0x70, 0xfc, 0x68, 0x5a, + 0xef, 0xbd, 0x81, 0x37, 0xe5, 0x10, 0x32, 0xf5, 0x48, 0x4f, 0x9b, 0xf3, + 0xf6, 0xbf, 0x2d, 0xe4, 0x49, 0x5b, 0xdd, 0x46, 0x55, 0xdc, 0xef, 0x30, + 0xcb, 0x57, 0xdd, 0x48, 0x83, 0xe5, 0x82, 0x6f, 0x35, 0xcf, 0xa6, 0x98, + 0x10, 0x6c, 0x0b, 0x84, 0xcd, 0xaa, 0xd5, 0x40, 0x37, 0x85, 0x69, 0xf6, + 0xeb, 0x82, 0x6b, 0x2e, 0xf9, 0xb4, 0xf2, 0x22, 0x83, 0x48, 0xb8, 0xed, + 0x2b, 0xb7, 0xa4, 0x79, 0x5b, 0x60, 0xb5, 0x02, 0x38, 0xed, 0x35, 0x84, + 0x94, 0x9e, 0x6c, 0xe0, 0xfe, 0xd7, 0xc6, 0xff, 0xe1, 0x06, 0x78, 0xa4, + 0xce, 0x3d, 0x05, 0x81, 0x0f, 0xa5, 0x38, 0x10, 0x53, 0x0e, 0xab, 0x53, + 0xf8, 0x98, 0x71, 0xb0, 0x7a, 0xcc, 0xd4, 0x09, 0x87, 0x06, 0x0a, 0xa3, + 0xdc, 0x0e, 0xa4, 0x01, 0xec, 0x44, 0x06, 0x6b, 0xb2, 0x05, 0x5e, 0x91, + 0x3d, 0x31, 0x51, 0xbd, 0x2a, 0xaa, 0xd5, 0x39, 0xb7, 0x8a, 0x64, 0x3c, + 0x3b, 0x5d, 0x75, 0x91, 0xa4, 0x1d, 0x85, 0xe3, 0x48, 0x23, 0xca, 0x9e, + 0xaa, 0x28, 0x44, 0xd0, 0x33, 0x9d, 0xbe, 0xc1, 0x83, 0xeb, 0x29, 0x35, + 0xe0, 0xb3, 0xb8, 0xdf, 0x56, 0x79, 0xb4, 0xfa, 0x57, 0x67, 0x97, 0xff, + 0x78, 0x26, 0xd4, 0x9b, 0xe3, 0x4a, 0xac, 0x7c, 0x21, 0x84, 0x43, 0x3d, + 0x85, 0x42, 0x21, 0xd4, 0x95, 0x19, 0xac, 0x78, 0xa3, 0x77, 0xc8, 0xec, + 0xf3, 0x61, 0x69, 0xd6, 0x21, 0x11, 0x8a, 0x7e, 0x81, 0x49, 0x7b, 0x48, + 0xfa, 0xe0, 0x2a, 0x2d, 0xdb, 0x22, 0xec, 0x57, 0xe1, 0x52, 0x1c, 0x63, + 0xdf, 0x56, 0x19, 0x64, 0xdf, 0xaa, 0xa1, 0x8c, 0x31, 0xcb, 0x6d, 0xf3, + 0x86, 0x4d, 0x2f, 0x13, 0x88, 0x7b, 0x90, 0x19, 0xff, 0xb6, 0x42, 0x4c, + 0xf3, 0x06, 0x0d, 0xab, 0xb7, 0xc9, 0xfc, 0xc7, 0x4b, 0xc1, 0x98, 0x28, + 0xdf, 0xac, 0x74, 0x01, 0x94, 0x9c, 0xbb, 0xa9, 0xee, 0xfc, 0xc9, 0xe3, + 0x97, 0x62, 0xa8, 0x48, 0x3e, 0x1e, 0xbf, 0xb6, 0x6f, 0xb3, 0x49, 0x07, + 0xfe, 0x7c, 0x4f, 0xdb, 0x23, 0x32, 0xd8, 0x9c, 0x9a, 0x7e, 0x85, 0xc4, + 0xa4, 0xb4, 0xb9, 0xed, 0xf1, 0x92, 0xf4, 0x86, 0x21, 0x3c, 0xfa, 0xa8, + 0x30, 0xb5, 0x4f, 0x3b, 0xb6, 0x69, 0x33, 0xce, 0x95, 0x2e, 0x3f, 0xcb, + 0xbb, 0xd3, 0xa2, 0x57, 0xf2, 0x87, 0xb1, 0xa8, 0x47, 0x31, 0xf7, 0xa6, + 0xb4, 0x92, 0x2c, 0x23, 0x27, 0x02, 0x15, 0x19, 0xeb, 0x4f, 0x5d, 0x5d, + 0x43, 0x41, 0xa9, 0xe0, 0x15, 0x16, 0x74, 0x22, 0x68, 0xcd, 0xbe, 0x93, + 0x84, 0xd3, 0xaa, 0x1b, 0x9c, 0xc5, 0xa0, 0x66, 0x91, 0xfb, 0x52, 0x44, + 0x80, 0x8f, 0xee, 0x84, 0xb9, 0x97, 0x70, 0x9e, 0xb7, 0x86, 0xbd, 0x2a, + 0x7a, 0x46, 0xe8, 0x15, 0x25, 0xa6, 0x2e, 0x14, 0xdb, 0x69, 0x7f, 0x3b, + 0xe5, 0x71, 0xd3, 0x0c, 0x88, 0xb0, 0x52, 0x13, 0x2f, 0xb3, 0xe3, 0x8a, + 0x84, 0xf4, 0x18, 0x75, 0x64, 0x96, 0x19, 0x89, 0x73, 0x75, 0x5a, 0x07, + 0xa3, 0xc0, 0xf3, 0x4e, 0x59, 0x2a, 0x30, 0x33, 0x25, 0x19, 0x13, 0x29, + 0x14, 0xd1, 0xbf, 0xdc, 0x3f, 0x6c, 0xeb, 0x85, 0xf1, 0x53, 0x41, 0x4e, + 0x73, 0x5d, 0x8b, 0xa1, 0xfd, 0x02, 0x74, 0xea, 0xee, 0x31, 0x16, 0xb8, + 0x1c, 0xe2, 0x0b, 0x54, 0x01, 0x28, 0x72, 0x07, 0x06, 0x49, 0x4e, 0xa4, + 0xed, 0x3e, 0x9d, 0x3b, 0xa1, 0x92, 0x0b, 0x53, 0x40, 0xf5, 0xc5, 0x78, + 0xa8, 0xf1, 0x24, 0x52, 0xd2, 0x9b, 0x17, 0xed, 0x26, 0x1d, 0xa0, 0xa8, + 0x53, 0xf4, 0xb8, 0x22, 0x8b, 0xd0, 0x74, 0x5a, 0x0b, 0x18, 0x6f, 0x26, + 0xe7, 0x79, 0x4f, 0x22, 0xc9, 0xaf, 0xca, 0xbc, 0xe8, 0xcf, 0xe1, 0xc1, + 0x9a, 0x67, 0x38, 0x6c, 0xfa, 0x6b, 0x8e, 0x85, 0xb1, 0x94, 0xf6, 0x34, + 0x6b, 0x08, 0xde, 0xb8, 0x0d, 0x1f, 0x60, 0x3d, 0xf3, 0x10, 0x1d, 0x0d, + 0x07, 0x6d, 0x31, 0x42, 0x1e, 0x1b, 0x72, 0x4d, 0x48, 0xf6, 0x9a, 0x38, + 0xe5, 0xc6, 0xd9, 0x6f, 0x03, 0xdf, 0x83, 0x75, 0x23, 0x85, 0x65, 0xfe, + 0xda, 0x25, 0x73, 0x9f, 0x01, 0x4d, 0x22, 0x81, 0x53, 0x9c, 0xe9, 0x0e, + 0x4c, 0x1f, 0xaa, 0xb6, 0x90, 0x88, 0xa7, 0xd1, 0xe5, 0x44, 0xba, 0x6f, + 0x16, 0x91, 0xc0, 0xa9, 0x20, 0x50, 0x0f, 0xe6, 0x3d, 0x48, 0x28, 0x36, + 0xc9, 0x3c, 0xc5, 0xc8, 0x83, 0x93, 0x7d, 0x79, 0x2b, 0xc5, 0x15, 0xa9, + 0xb1, 0xd4, 0x5f, 0x01, 0x98, 0x97, 0x90, 0xd5, 0xa6, 0x00, 0xd2, 0x3d, + 0x3f, 0xf7, 0x62, 0xfa, 0xc2, 0x32, 0x66, 0x63, 0xd5, 0x15, 0x7f, 0x52, + 0xa3, 0xdc, 0x33, 0xc0, 0x65, 0x12, 0x37, 0x2a, 0xaf, 0x98, 0xdf, 0x99, + 0x2b, 0x19, 0xc9, 0x68, 0x47, 0xac, 0x19, 0x73, 0x1e, 0x92, 0xf7, 0xaf, + 0x08, 0xe2, 0xb5, 0x0e, 0xf7, 0xff, 0xc7, 0x87, 0x65, 0xb8, 0x6a, 0x8f, + 0x32, 0xab, 0xd5, 0x8a, 0xf9, 0xfb, 0x2a, 0x3c, 0xde, 0x17, 0x11, 0x81, + 0xbd, 0x8a, 0x38, 0x8e, 0x17, 0xff, 0x86, 0x45, 0x1c, 0xe9, 0x49, 0x13, + 0x40, 0x48, 0x78, 0x82, 0x30, 0x88, 0xf1, 0x01, 0xc9, 0x13, 0x0e, 0xbb, + 0xca, 0x1c, 0x12, 0x0f, 0xe5, 0xb9, 0xae, 0x28, 0xb5, 0x33, 0xe5, 0xbc, + 0x36, 0x67, 0xc0, 0xa5, 0xc6, 0xf4, 0x87, 0x55, 0x93, 0x53, 0xa7, 0xfa, + 0x24, 0xe0, 0x5a, 0xe1, 0x86, 0x90, 0xf6, 0xf7, 0x78, 0x8f, 0x08, 0x2c, + 0x46, 0x27, 0x6b, 0x4a, 0xb4, 0x7d, 0x58, 0xda, 0xf9, 0x44, 0x2c, 0x0c, + 0x48, 0x69, 0x7c, 0x43, 0x54, 0x83, 0xcb, 0xb1, 0x92, 0x4a, 0x6d, 0x13, + 0x13, 0x2b, 0x56, 0x13, 0xa1, 0xee, 0xac, 0x86, 0xf2, 0x20, 0x87, 0xf6, + 0x67, 0x97, 0xaa, 0x3e, 0xb3, 0x3b, 0xd8, 0xdc, 0x41, 0xb1, 0xeb, 0xa5, + 0x32, 0x6b, 0x46, 0xa2, 0x51, 0x06, 0x35, 0x63, 0x46, 0x7b, 0xfe, 0xa3, + 0x3b, 0xfd, 0xc9, 0x97, 0x7a, 0x44, 0xa8, 0x55, 0xdb, 0xb8, 0x54, 0xb2, + 0x3f, 0xe1, 0xcb, 0xeb, 0x35, 0xef, 0x93, 0x61, 0x82, 0xfe, 0x70, 0x4c, + 0x8b, 0x63, 0xec, 0x47, 0x7e, 0x33, 0x1d, 0x58, 0xb3, 0x1b, 0xca, 0x92, + 0x9c, 0x50, 0xec, 0x24, 0x91, 0xf6, 0xc9, 0xd8, 0xd6, 0xda, 0x0a, 0x22, + 0xd2, 0x63, 0x8a, 0xf8, 0x00, 0x4c, 0x1f, 0x49, 0x63, 0xcc, 0xf4, 0x46, + 0xb7, 0x6a, 0xbe, 0xcb, 0x89, 0xef, 0xee, 0x05, 0x63, 0x80, 0x02, 0xec, + 0x07, 0x85, 0xd0, 0x18, 0xb2, 0x3c, 0x3a, 0x21, 0x8b, 0xd4, 0x0c, 0xa6, + 0xe0, 0xca, 0xba, 0x47, 0x29, 0x6d, 0x0e, 0xb9, 0x24, 0xaa, 0xac, 0x8a, + 0xbc, 0x72, 0xae, 0x87, 0x90, 0xa3, 0x2a, 0x92, 0x0a, 0xd9, 0xb8, 0xc6, + 0x22, 0x97, 0x3b, 0x57, 0x7f, 0x56, 0x26, 0xe2, 0x56, 0x7b, 0x21, 0xd7, + 0xe0, 0x22, 0xfb, 0x01, 0xb0, 0x40, 0x1e, 0x60, 0xc4, 0xf0, 0x96, 0xc4, + 0xb4, 0x57, 0x91, 0x1e, 0xd1, 0x56, 0x47, 0xba, 0xd4, 0xe4, 0x54, 0xc8, + 0xb5, 0x8b, 0x51, 0x72, 0x10, 0x01, 0xf1, 0x13, 0x44, 0x76, 0x67, 0x79, + 0x74, 0xe2, 0x40, 0xf2, 0xf6, 0xe0, 0x74, 0x26, 0x2d, 0x91, 0x17, 0xda, + 0xce, 0x28, 0xb6, 0xe2, 0x66, 0xd2, 0xd2, 0x71, 0x99, 0x81, 0x1f, 0xe9, + 0x43, 0xaa, 0xcc, 0x31, 0x78, 0xa7, 0xf1, 0x64, 0xbe, 0x2f, 0x33, 0xc5, + 0x8f, 0xc8, 0x2a, 0xd1, 0x70, 0x8e, 0xbd, 0xf9, 0x57, 0x09, 0xcb, 0x67, + 0x3a, 0x73, 0x97, 0x21, 0x78, 0xf9, 0xa4, 0x13, 0x90, 0xd1, 0x56, 0x86, + 0x6d, 0xc1, 0xe2, 0x8c, 0x30, 0x16, 0xa7, 0xb9, 0x11, 0x92, 0xf7, 0x46, + 0x18, 0x03, 0x76, 0x11, 0x45, 0x36, 0xd4, 0x46, 0x15, 0xd3, 0x5e, 0x8b, + 0x88, 0xe8, 0x38, 0x05, 0x2d, 0x3c, 0x89, 0xc7, 0xee, 0x58, 0xd8, 0x92, + 0x11, 0xfb, 0xe2, 0xd1, 0xa6, 0x6e, 0x5f, 0xfe, 0x0c, 0xc2, 0x47, 0x64, + 0x41, 0xb6, 0x49, 0x17, 0x47, 0x32, 0xf7, 0xe2, 0xb2, 0x8d, 0xf1, 0x93, + 0x8e, 0xba, 0x28, 0x48, 0xac, 0x10, 0x2c, 0xbb, 0x5e, 0xf0, 0xb6, 0xe6, + 0x79, 0x5b, 0x24, 0xd4, 0xc0, 0xc7, 0x0a, 0x52, 0x91, 0x00, 0xcb, 0xe2, + 0xdf, 0x21, 0xe7, 0xab, 0x0a, 0xc1, 0xde, 0xff, 0x4e, 0x12, 0xd9, 0x94, + 0x9b, 0xec, 0x28, 0x21, 0xaa, 0x51, 0x37, 0xee, 0x00, 0xa5, 0x26, 0x72, + 0x82, 0x68, 0xdd, 0xbf, 0x2c, 0x3c, 0xde, 0x3b, 0x9b, 0x4b, 0x17, 0x4d, + 0xdd, 0xa3, 0x16, 0x7e, 0xb3, 0x71, 0xcd, 0x49, 0xfa, 0xc4, 0x25, 0x4c, + 0x38, 0x0d, 0x16, 0x6e, 0xf0, 0x48, 0xf8, 0x4a, 0x3d, 0x63, 0x05, 0xba, + 0xa9, 0x7f, 0x5d, 0xb6, 0x8e, 0x37, 0x60, 0xdf, 0x6a, 0xd3, 0x8b, 0xa6, + 0x07, 0x20, 0x71, 0x56, 0xe8, 0x92, 0x9c, 0xb9, 0xf4, 0xd3, 0xef, 0xba, + 0xa9, 0x48, 0x91, 0x95, 0x85, 0x29, 0xec, 0x47, 0x5e, 0x5d, 0x8d, 0x6b, + 0xef, 0xfe, 0x4d, 0x36, 0xfd, 0x49, 0xe7, 0xf6, 0x84, 0x39, 0x14, 0x8a, + 0x15, 0x48, 0x50, 0x2d, 0x12, 0x0e, 0xcd, 0x21, 0x7c, 0x8c, 0x67, 0x3f, + 0x01, 0xb5, 0x80, 0x82, 0xc8, 0xa8, 0x7e, 0xa0, 0xdf, 0xa3, 0x5c, 0xfb, + 0x1a, 0x3d, 0x59, 0x0e, 0x2f, 0xfa, 0xde, 0x04, 0x11, 0x75, 0x91, 0xc5, + 0x73, 0x1f, 0x1b, 0x35, 0x70, 0xf8, 0xa9, 0x8b, 0x95, 0xad, 0xed, 0x83, + 0xb4, 0x85, 0xad, 0xb2, 0xbf, 0x18, 0x3d, 0xcc, 0xb2, 0x2b, 0x61, 0x30, + 0x9f, 0x65, 0x88, 0x84, 0x89, 0xf1, 0x2b, 0x9b, 0xdb, 0x5b, 0x9c, 0x3e, + 0x8a, 0xf0, 0x5f, 0x79, 0x0b, 0x69, 0x83, 0x61, 0x6b, 0x53, 0x60, 0x9e, + 0x94, 0xfd, 0xfa, 0x9e, 0xa4, 0x42, 0x5e, 0xfb, 0x07, 0x91, 0xe2, 0xb3, + 0x29, 0x81, 0xa9, 0x10, 0x4f, 0x56, 0x26, 0x83, 0xbe, 0xc2, 0xee, 0xd0, + 0x0e, 0x4b, 0xb6, 0xae, 0xa8, 0x67, 0xef, 0xbe, 0xf2, 0x22, 0xd6, 0xa7, + 0xe8, 0x08, 0x70, 0x22, 0x3e, 0x31, 0x48, 0x32, 0x81, 0x75, 0xf2, 0x12, + 0x5d, 0xcb, 0xf7, 0x76, 0x74, 0x64, 0x6b, 0xf8, 0xe7, 0x8b, 0x8e, 0xe3, + 0xf1, 0xbc, 0x9d, 0x9f, 0x12, 0x7f, 0xef, 0xb8, 0xb2, 0x0f, 0xe9, 0x6e, + 0x8b, 0x2e, 0x6f, 0xf6, 0x1c, 0x05, 0x91, 0xfc, 0xef, 0xd7, 0x80, 0xec, + 0x73, 0x31, 0x85, 0x05, 0x40, 0x64, 0xe3, 0xca, 0x3a, 0x81, 0x38, 0x03, + 0x75, 0xa8, 0xb3, 0x9e, 0x1f, 0x06, 0xcd, 0x0f, 0xea, 0x2d, 0x1b, 0x48, + 0x0e, 0xf8, 0x66, 0x62, 0xa1, 0xbe, 0x85, 0x3f, 0xc3, 0xfc, 0x38, 0xb9, + 0x2d, 0x4a, 0xf5, 0x47, 0x11, 0x25, 0x2c, 0x50, 0xcd, 0x57, 0x27, 0x65, + 0xb5, 0xb4, 0x76, 0x51, 0x7e, 0xd9, 0xff, 0x92, 0x28, 0xf9, 0xdd, 0x88, + 0xb6, 0x85, 0xaa, 0xaa, 0xcf, 0xfe, 0xa9, 0x96, 0xb8, 0x6a, 0x3c, 0x26, + 0xf1, 0x1d, 0x7b, 0xed, 0x0a, 0x8b, 0xa5, 0x6b, 0xa3, 0xba, 0x1f, 0xbf, + 0x80, 0xba, 0xbb, 0x26, 0x97, 0xd1, 0x96, 0xa5, 0xc4, 0xfb, 0xa9, 0xef, + 0xc2, 0xaa, 0x05, 0x4b, 0xa6, 0xbf, 0x6b, 0xf2, 0x67, 0x5d, 0x6d, 0xb1, + 0x7c, 0xb6, 0x9c, 0x58, 0xac, 0xb4, 0x52, 0xee, 0xce, 0xbb, 0x51, 0xcb, + 0xb0, 0xcb, 0x06, 0x26, 0x2d, 0x04, 0x34, 0xa3, 0x16, 0x6d, 0xe4, 0x56, + 0x7d, 0x3d, 0x31, 0x42, 0x69, 0xe0, 0x10, 0x58, 0xa3, 0x7c, 0x9d, 0x31, + 0xc3, 0x40, 0x8d, 0x71, 0x01, 0xe1, 0x9e, 0xa1, 0x37, 0x6c, 0x39, 0x6e, + 0xf8, 0x7d, 0xbb, 0xdb, 0x40, 0x05, 0xca, 0x80, 0x83, 0x6e, 0xa4, 0x0a, + 0x5e, 0x9c, 0x71, 0x75, 0x9d, 0x1f, 0x21, 0xd0, 0x80, 0x62, 0xa6, 0x45, + 0xca, 0xa6, 0x62, 0xdc, 0x10, 0xd0, 0x79, 0x1a, 0x71, 0x0f, 0x8d, 0x11, + 0x24, 0x87, 0xc8, 0xf6, 0x63, 0x9e, 0x31, 0xd5, 0x11, 0x48, 0x8d, 0x44, + 0x75, 0x86, 0xbe, 0x63, 0x24, 0xf5, 0x1a, 0x6e, 0xcd, 0x96, 0x97, 0x5f, + 0x3f, 0x8f, 0xb8, 0x0b, 0x5c, 0x3e, 0x74, 0xb5, 0xde, 0x9d, 0xcf, 0xa5, + 0xa2, 0x17, 0xb9, 0x77, 0x1f, 0x2e, 0x89, 0x83, 0x9b, 0x7a, 0xf0, 0x9b, + 0x04, 0x82, 0xf9, 0x19, 0x2f, 0xe5, 0x0d, 0xb2, 0x94, 0xeb, 0x40, 0xda, + 0xea, 0xb0, 0xbf, 0xd1, 0xb7, 0x83, 0x94, 0xdd, 0x19, 0x56, 0x96, 0x89, + 0x3f, 0xbe, 0xc8, 0x95, 0xa9, 0x85, 0x69, 0x08, 0x60, 0x00, 0xcc, 0xd8, + 0x3f, 0xd0, 0x05, 0x62, 0xe9, 0x32, 0x75, 0x87, 0xf3, 0x66, 0x5b, 0x69, + 0xba, 0x6a, 0x1a, 0x55, 0x8f, 0xe9, 0x13, 0x92, 0x57, 0xd8, 0xc3, 0xc8, + 0x52, 0xc3, 0xcc, 0x62, 0x8e, 0x7e, 0x27, 0x68, 0x77, 0xbf, 0x50, 0xcc, + 0x60, 0x93, 0xd6, 0xdc, 0x0d, 0x0f, 0xfd, 0x02, 0xe9, 0x2f, 0x87, 0xff, + 0x8c, 0x26, 0x8b, 0xdd, 0xbc, 0x13, 0x5f, 0x67, 0xae, 0xeb, 0xfa, 0x5f, + 0xd8, 0xd3, 0x0e, 0x81, 0xf2, 0x94, 0x21, 0xf8, 0xb0, 0xc2, 0x01, 0x4d, + 0xe7, 0xf3, 0xe8, 0xf2, 0x1e, 0x15, 0x46, 0xf6, 0x75, 0x30, 0xf1, 0x83, + 0x02, 0x4a, 0x18, 0xe9, 0xde, 0x6a, 0x85, 0x1f, 0xc0, 0x11, 0x40, 0x1a, + 0xf3, 0x41, 0x4c, 0xf2, 0x08, 0x2f, 0xef, 0x71, 0x41, 0xeb, 0x6c, 0x85, + 0xf5, 0x5a, 0x84, 0x71, 0x63, 0xa0, 0xed, 0x80, 0xb9, 0xd2, 0xd5, 0x74, + 0x35, 0xfc, 0xf3, 0x2c, 0xb7, 0x06, 0x86, 0x5b, 0x07, 0xd2, 0xc3, 0xdd, + 0xed, 0x5e, 0x5d, 0x16, 0x1f, 0xd8, 0xbc, 0x2e, 0x2b, 0x88, 0xca, 0x09, + 0x66, 0x7c, 0xfe, 0x51, 0x20, 0xba, 0x21, 0x0e, 0xd3, 0x97, 0x44, 0xf4, + 0xbf, 0x19, 0x6e, 0x4a, 0xa4, 0xbb, 0x3a, 0x3a, 0x60, 0x9d, 0xc2, 0xfe, + 0x43, 0xcb, 0xb2, 0x5d, 0xe5, 0x64, 0x0a, 0x57, 0xb6, 0xa7, 0x2d, 0x60, + 0x4e, 0xa3, 0x1f, 0x75, 0xa4, 0x43, 0xaa, 0xb6, 0xac, 0x35, 0x72, 0x5e, + 0x7a, 0x0e, 0xdc, 0x26, 0x2e, 0xbd, 0x74, 0x96, 0xae, 0xed, 0x13, 0x14, + 0x1d, 0xe0, 0xc8, 0x80, 0x9b, 0x9c, 0xce, 0x12, 0x4b, 0x24, 0xac, 0x1e, + 0xe0, 0x25, 0x6b, 0xc4, 0x13, 0x93, 0xd2, 0x77, 0xa3, 0x82, 0x5b, 0x36, + 0x5d, 0x4d, 0x4a, 0xbf, 0xa6, 0x5e, 0x0d, 0xd6, 0x7b, 0xf0, 0x46, 0x63, + 0x92, 0x79, 0xcc, 0x1f, 0xf3, 0x72, 0x0a, 0x07, 0x03, 0xfc, 0x38, 0x57, + 0x57, 0x3a, 0xcf, 0x90, 0x7a, 0xdd, 0x7c, 0xea, 0xb5, 0x5a, 0x26, 0x0a, + 0x2d, 0xe2, 0xc6, 0xc8, 0x81, 0xaf, 0x72, 0xde, 0x05, 0x72, 0xa8, 0x6c, + 0x07, 0xd1, 0xd8, 0x8d, 0x7b, 0x4e, 0x5c, 0x7c, 0xed, 0xc6, 0x0a, 0x41, + 0xdc, 0x81, 0x73, 0x0b, 0xf8, 0x76, 0x5f, 0xd2, 0xa4, 0x4c, 0x48, 0xf0, + 0x0b, 0x13, 0xfe, 0x49, 0xeb, 0xe4, 0x7d, 0x10, 0x29, 0xcf, 0x1c, 0xf1, + 0x25, 0xb7, 0xd7, 0xe0, 0x0f, 0xa3, 0x5a, 0x8b, 0x8a, 0xca, 0xf1, 0xfd, + 0xe6, 0x9c, 0xcd, 0x0c, 0xc4, 0x59, 0xdf, 0xa6, 0x42, 0x33, 0x86, 0xf1, + 0xb7, 0xba, 0xf2, 0xc0, 0x54, 0xc2, 0x03, 0xa6, 0x94, 0xb0, 0x96, 0xdb, + 0x4c, 0x8f, 0x4c, 0x75, 0x0b, 0x89, 0x2c, 0xfb, 0xb6, 0x07, 0x8a, 0x2f, + 0xd9, 0xf1, 0xfd, 0x0b, 0x81, 0x8d, 0x0c, 0x9b, 0x0e, 0xe8, 0x84, 0x52, + 0x70, 0x68, 0x71, 0xa2, 0xfe, 0x14, 0xcd, 0x5b, 0xc0, 0x05, 0x5f, 0x93, + 0xcf, 0xf4, 0xea, 0xae, 0x8d, 0xcd, 0x35, 0x92, 0x0e, 0x9f, 0xdd, 0x79, + 0x51, 0xb5, 0xc5, 0x45, 0xfd, 0x44, 0x1a, 0x37, 0xc9, 0x52, 0xee, 0x43, + 0xc0, 0x5c, 0xce, 0xe0, 0x44, 0xce, 0x60, 0x01, 0xd4, 0xda, 0x3e, 0xef, + 0x50, 0x70, 0xe2, 0xa8, 0x64, 0x14, 0xb5, 0xb7, 0x77, 0x0d, 0x7f, 0xca, + 0xfd, 0x52, 0xa6, 0x68, 0x8c, 0xbd, 0x11, 0x13, 0xc2, 0x7c, 0x3a, 0x5f, + 0xaf, 0x4d, 0xd3, 0xd5, 0x70, 0x80, 0xb6, 0x8a, 0x1a, 0x29, 0x12, 0xce, + 0x55, 0x0d, 0x5a, 0xb9, 0x97, 0x2b, 0x62, 0xc2, 0xb2, 0x83, 0x9f, 0x6c, + 0x84, 0x6b, 0xd5, 0x79, 0xaa, 0x94, 0xa7, 0x83, 0x1d, 0x79, 0xbf, 0x1f, + 0x7a, 0x23, 0xb8, 0xd7, 0x98, 0xcf, 0x2c, 0xe9, 0x04, 0x7b, 0x01, 0xb7, + 0x32, 0x58, 0x14, 0xa0, 0x67, 0xa4, 0x65, 0x43, 0x74, 0x88, 0x58, 0xd7, + 0x4a, 0xfb, 0x2f, 0x36, 0xc8, 0xda, 0x60, 0xff, 0xe4, 0xdf, 0x35, 0xc9, + 0xcf, 0x32, 0x1f, 0x15, 0x0b, 0x6b, 0x87, 0x36, 0xee, 0xe2, 0xd8, 0x42, + 0xa2, 0x54, 0xb9, 0xd7, 0x43, 0x27, 0x8e, 0xaf, 0xcd, 0xd0, 0x0e, 0xae, + 0x04, 0xac, 0xec, 0x23, 0xd8, 0xe8, 0x09, 0x0d, 0xda, 0x76, 0x34, 0xf1, + 0xe8, 0x63, 0x93, 0x7a, 0xaa, 0x92, 0x13, 0x7c, 0xcf, 0x4d, 0x12, 0x69, + 0x8c, 0x80, 0x56, 0x86, 0xf8, 0x33, 0xd9, 0x3f, 0x2d, 0x84, 0xf5, 0x72, + 0xc1, 0x4e, 0xe3, 0x69, 0x10, 0xd3, 0x81, 0x94, 0xda, 0x79, 0xf2, 0xd7, + 0x58, 0x82, 0xdf, 0x47, 0x87, 0x85, 0xf8, 0x61, 0x1a, 0xb7, 0xbf, 0xbf, + 0xdc, 0xb4, 0xc9, 0xa3, 0xbb, 0xe8, 0xd1, 0xe4, 0x32, 0xad, 0x5e, 0x5d, + 0x5c, 0x72, 0xba, 0x2d, 0x9e, 0x97, 0x07, 0x5a, 0xa9, 0x2c, 0x11, 0xf4, + 0x7a, 0x56, 0xf0, 0x05, 0x8f, 0x98, 0xdf, 0xe1, 0xe5, 0xbe, 0x82, 0x22, + 0x4f, 0x6f, 0xe9, 0xc6, 0x78, 0xb5, 0xdc, 0xe7, 0x5b, 0xaf, 0x47, 0x28, + 0x95, 0x4a, 0x9f, 0xa6, 0xd0, 0x17, 0x37, 0xdb, 0x28, 0x5a, 0x64, 0x50, + 0xd8, 0x99, 0xb6, 0x4e, 0xf5, 0xc3, 0x1a, 0xae, 0x09, 0xf0, 0x7a, 0x62, + 0x65, 0x83, 0x2a, 0x89, 0x4e, 0xa9, 0x63, 0x7f, 0x21, 0x5d, 0x7d, 0x0e, + 0xad, 0x87, 0x0b, 0x72, 0xd6, 0x9f, 0x9a, 0xde, 0x75, 0x3d, 0xcc, 0xa2, + 0x27, 0xb8, 0xec, 0x58, 0x1f, 0xf6, 0x46, 0x52, 0xbe, 0x34, 0xc3, 0x22, + 0xc4, 0x7b, 0xd0, 0x71, 0xf0, 0xea, 0x0e, 0x11, 0x57, 0x9f, 0xfe, 0x8c, + 0x04, 0x46, 0xaa, 0x04, 0xde, 0xdb, 0x3b, 0x2a, 0x5d, 0xd6, 0xd4, 0x08, + 0x69, 0xd1, 0xd2, 0x87, 0x36, 0x81, 0x2e, 0x6b, 0x68, 0x36, 0x5e, 0x0f, + 0x42, 0xeb, 0x42, 0xfc, 0xa1, 0xfb, 0xe7, 0x4c, 0xd7, 0x73, 0x34, 0x63, + 0x24, 0x28, 0x97, 0xee, 0x4a, 0x25, 0x45, 0x14, 0x5c, 0x70, 0xbd, 0x32, + 0x58, 0x03, 0xd3, 0xca, 0x31, 0x26, 0xf2, 0x1a, 0xff, 0xa5, 0x58, 0x14, + 0x82, 0xb3, 0xb6, 0xcf, 0x8d, 0x6d, 0x00, 0x16, 0x7f, 0x9f, 0x64, 0x0c, + 0xc6, 0x66, 0xa1, 0x29, 0xf1, 0x6c, 0x6f, 0x6c, 0x06, 0xfa, 0x3f, 0x3e, + 0xd0, 0x27, 0x74, 0xc6, 0x70, 0x68, 0x4b, 0xd1, 0xf7, 0xfd, 0x31, 0x48, + 0x1f, 0x72, 0x0b, 0x7e, 0x21, 0x95, 0xf6, 0xfc, 0xe5, 0x2f, 0x2b, 0x81, + 0x4e, 0xce, 0x53, 0xdd, 0xb0, 0x42, 0x41, 0xcf, 0xbb, 0x3a, 0x37, 0x95, + 0xc2, 0x37, 0x52, 0x5e, 0xfe, 0x12, 0xf6, 0x0a, 0x1c, 0xd1, 0xf2, 0x60, + 0x5a, 0x29, 0x5b, 0x17, 0xbb, 0x32, 0x2c, 0x57, 0x85, 0x3f, 0xc9, 0xcb, + 0x97, 0x5e, 0xab, 0x88, 0x8e, 0xa1, 0xd9, 0x44, 0xc0, 0xb4, 0xba, 0x2b, + 0xce, 0xd6, 0x92, 0x2d, 0xc0, 0xd5, 0xd8, 0x83, 0xb3, 0x07, 0x65, 0x9d, + 0x2c, 0xe5, 0x9b, 0x67, 0x3e, 0x9d, 0xb5, 0x7a, 0x8c, 0x5e, 0xbd, 0x0c, + 0x4a, 0x22, 0x7e, 0xa3, 0x10, 0xde, 0x0b, 0x12, 0xaa, 0x6b, 0x76, 0xa6, + 0x5d, 0xfd, 0xd7, 0xec, 0xd3, 0x6a, 0x72, 0xf5, 0x92, 0x02, 0xee, 0x99, + 0x95, 0x71, 0xf0, 0xb1, 0xfa, 0x9a, 0xb5, 0x30, 0xf5, 0xc7, 0x74, 0xb8, + 0xa8, 0x78, 0x29, 0x81, 0x50, 0xe4, 0x1e, 0xc7, 0x15, 0x52, 0x8c, 0x73, + 0x57, 0x4d, 0x7d, 0x48, 0xb4, 0xa2, 0x05, 0x27, 0xb2, 0x58, 0x26, 0x5d, + 0x28, 0xf4, 0x2d, 0xc2, 0x74, 0xa0, 0x78, 0x3d, 0x6c, 0x4b, 0xe4, 0xeb, + 0xf9, 0x07, 0xda, 0xf7, 0x0b, 0x38, 0xaf, 0xc7, 0xd1, 0x19, 0x98, 0x8c, + 0x6f, 0xd8, 0x4c, 0x4a, 0xd8, 0x74, 0x66, 0xf2, 0x6b, 0xed, 0x33, 0x76, + 0x24, 0x1a, 0xce, 0x56, 0x2c, 0xb3, 0x42, 0xa0, 0x10, 0x1f, 0x47, 0xe3, + 0x93, 0x67, 0x83, 0x77, 0x8c, 0x3b, 0xf2, 0x30, 0x86, 0x5b, 0x45, 0xa8, + 0x0f, 0x25, 0x6d, 0xdb, 0x24, 0x70, 0x7a, 0xcb, 0x7a, 0x36, 0x07, 0xae, + 0x51, 0xb8, 0xde, 0x18, 0x6e, 0x30, 0xa3, 0x91, 0xb1, 0xd6, 0xe3, 0xb0, + 0x81, 0x34, 0x58, 0x76, 0x39, 0x11, 0x6e, 0x9d, 0xc5, 0x73, 0x97, 0xb1, + 0x37, 0x3f, 0x91, 0xb3, 0x99, 0xd1, 0xf9, 0xda, 0xea, 0x6c, 0x68, 0xa8, + 0x14, 0xb0, 0x3d, 0x39, 0x92, 0x1b, 0xa1, 0xb5, 0x24, 0x30, 0x18, 0x7e, + 0x08, 0xa1, 0x25, 0x5b, 0x16, 0xa8, 0x76, 0x35, 0x3f, 0xec, 0x11, 0xe7, + 0x4d, 0x30, 0xf0, 0x41, 0xb5, 0x4c, 0xb9, 0xf7, 0xaa, 0x28, 0x08, 0x57, + 0xc6, 0xd3, 0x5c, 0xd3, 0x76, 0x8b, 0x96, 0x2a, 0x62, 0x59, 0xab, 0x05, + 0xf7, 0xa8, 0x40, 0x35, 0x4d, 0xfd, 0x51, 0x69, 0x7c, 0x66, 0x41, 0xa3, + 0x9b, 0x03, 0xe7, 0xdb, 0x64, 0x53, 0x54, 0xb9, 0x0e, 0x85, 0xdc, 0xf3, + 0x4e, 0x46, 0x3c, 0xfb, 0xc6, 0xc9, 0xc4, 0x1d, 0xeb, 0xf5, 0x04, 0x0a, + 0x79, 0xdb, 0x93, 0x04, 0x1f, 0x8e, 0xf9, 0x56, 0x9d, 0x0d, 0xe6, 0x58, + 0xa8, 0xa6, 0x77, 0xc4, 0x97, 0x54, 0xfb, 0x8f, 0xcc, 0xc0, 0x66, 0xb1, + 0xd3, 0xa1, 0xcc, 0xab, 0xdd, 0x8e, 0xc2, 0x72, 0x37, 0xe3, 0x32, 0xfe, + 0xa0, 0x1f, 0xbc, 0x97, 0x4d, 0x0f, 0xda, 0x84, 0x57, 0x0c, 0x58, 0xf5, + 0x11, 0xe3, 0x83, 0x27, 0x75, 0x9c, 0x69, 0xdc, 0x9e, 0x31, 0xbf, 0xef, + 0x85, 0xe8, 0x5b, 0x3c, 0xd9, 0x1e, 0xf0, 0x54, 0x9a, 0x0d, 0xd7, 0xbf, + 0x30, 0x81, 0x6c, 0x21, 0x8a, 0x9c, 0x24, 0xef, 0x21, 0xae, 0x54, 0xee, + 0x92, 0x04, 0x4b, 0xd6, 0x15, 0xe5, 0x97, 0xa8, 0x18, 0xfd, 0x9f, 0x53, + 0xf8, 0xdb, 0x5f, 0x1b, 0x8e, 0x3c, 0x6a, 0x3c, 0x6b, 0x0c, 0x89, 0xa5, + 0xf0, 0x25, 0x22, 0xf0, 0xd3, 0xbb, 0x49, 0x41, 0x6e, 0xa9, 0xd7, 0x07, + 0x02, 0x75, 0xff, 0xa6, 0x18, 0x0b, 0x2f, 0x30, 0x2c, 0xfb, 0x03, 0x6d, + 0xa5, 0x6b, 0xeb, 0xbb, 0xf8, 0x77, 0x37, 0x73, 0xc0, 0x79, 0x20, 0x02, + 0x5a, 0x7a, 0x9c, 0x33, 0xd1, 0x51, 0xc0, 0xf1, 0x89, 0x26, 0xa3, 0x6f, + 0x17, 0x39, 0x83, 0x7c, 0xba, 0xc0, 0x6b, 0x31, 0xd1, 0x5d, 0x32, 0x76, + 0x8a, 0x73, 0xee, 0x6a, 0x4c, 0x53, 0x3c, 0xb4, 0x55, 0x4e, 0x06, 0x2b, + 0x40, 0x25, 0xcf, 0xcd, 0xbc, 0xa5, 0xcf, 0xd4, 0xc2, 0x9a, 0xe9, 0x12, + 0xcb, 0x57, 0xb3, 0xbb, 0x6b, 0x4f, 0xbc, 0xfb, 0x2b, 0xf4, 0xa4, 0x47, + 0x81, 0x52, 0x14, 0xde, 0x6c, 0x4c, 0x05, 0x70, 0x89, 0x63, 0xb2, 0x8b, + 0x17, 0xf5, 0x1f, 0x7b, 0x90, 0x1d, 0x6f, 0x8e, 0x3e, 0xe6, 0x90, 0x35, + 0xf8, 0xc6, 0xd6, 0x86, 0x7a, 0x6a, 0xde, 0x41, 0xa6, 0x08, 0x81, 0xed, + 0x1c, 0x45, 0xfd, 0xee, 0x09, 0x61, 0xfb, 0x21, 0x2f, 0x60, 0xfe, 0x8f, + 0x41, 0x78, 0x46, 0x62, 0xbf, 0x7a, 0x96, 0xd0, 0xa8, 0xc2, 0x8a, 0xb7, + 0x38, 0xd5, 0x47, 0x70, 0xc8, 0x94, 0x71, 0x40, 0xef, 0x36, 0x2c, 0x5d, + 0xdd, 0xb3, 0xcc, 0xe7, 0x5d, 0xee, 0x4b, 0xe4, 0xe2, 0x56, 0x50, 0x00, + 0x67, 0x0d, 0x51, 0xae, 0xb3, 0x10, 0x4e, 0x70, 0x62, 0xec, 0x59, 0xab, + 0xde, 0x26, 0x3b, 0xe7, 0x1b, 0xb6, 0x87, 0x5c, 0xfd, 0x7c, 0x7d, 0x87, + 0x5d, 0x29, 0xd2, 0xb2, 0xe2, 0x17, 0xc6, 0x8d, 0xc2, 0x80, 0x77, 0xff, + 0x23, 0xf8, 0x94, 0xc0, 0x52, 0x6d, 0xbe, 0x26, 0x24, 0x2c, 0xe9, 0x9c, + 0xaf, 0x0d, 0x33, 0xab, 0x5c, 0x2d, 0xea, 0x21, 0xee, 0xaa, 0xc1, 0xcc, + 0xfc, 0x7b, 0x7a, 0x05, 0xfc, 0xe1, 0x1f, 0x7b, 0x8d, 0x27, 0xd5, 0xbd, + 0xdf, 0x94, 0xd7, 0xc5, 0xd8, 0xaf, 0x6c, 0xd3, 0xc6, 0xc0, 0xe1, 0x26, + 0x9b, 0x84, 0xc0, 0x51, 0x1c, 0x30, 0xda, 0x14, 0x1c, 0x1f, 0x46, 0x1d, + 0xed, 0xee, 0xaf, 0xff, 0xb7, 0xe9, 0xd3, 0x40, 0x73, 0x86, 0x59, 0x5b, + 0x0e, 0xd9, 0x5e, 0x91, 0xd3, 0xf8, 0x3c, 0x4c, 0x0f, 0xf2, 0x3e, 0x4e, + 0x87, 0x61, 0xa3, 0xcc, 0x6c, 0xc3, 0xcf, 0x81, 0xd0, 0xc9, 0x47, 0xd5, + 0xf2, 0xfb, 0xc4, 0xda, 0x32, 0x0e, 0xe7, 0x6c, 0x17, 0x85, 0xab, 0x71, + 0x52, 0xea, 0xa2, 0xde, 0xbd, 0x77, 0x33, 0xfe, 0xc2, 0x87, 0x82, 0x0b, + 0x5d, 0xfa, 0x65, 0x30, 0x6b, 0xd6, 0xac, 0xe2, 0x8e, 0x7c, 0x62, 0xb8, + 0x17, 0x2d, 0xe2, 0xac, 0xa2, 0xbc, 0x52, 0x36, 0x0f, 0x79, 0x25, 0x1e, + 0x55, 0xdf, 0xd4, 0x9a, 0x35, 0xe8, 0x78, 0x49, 0x47, 0x07, 0xfc, 0x3b, + 0x7a, 0x91, 0xaa, 0xfb, 0x45, 0xe3, 0x0e, 0xc4, 0xd1, 0x9c, 0x83, 0x2e, + 0x92, 0xc8, 0x1b, 0x00, 0x68, 0x04, 0x75, 0xea, 0x75, 0x00, 0xf2, 0x6d, + 0xdc, 0x85, 0xaf, 0xc7, 0xec, 0x8c, 0x73, 0x66, 0x80, 0xfc, 0xfa, 0xfd, + 0x01, 0x0c, 0xa0, 0x45, 0xd3, 0xf2, 0x14, 0x0f, 0x72, 0x39, 0x02, 0xc6, + 0x78, 0xf2, 0x54, 0x04, 0x11, 0x2f, 0x4f, 0x39, 0x3e, 0x16, 0x80, 0xe0, + 0xdb, 0xf2, 0x7f, 0x2e, 0x5c, 0x30, 0x93, 0x70, 0x44, 0x06, 0x2d, 0xcc, + 0x09, 0x59, 0xc6, 0x85, 0x48, 0x88, 0xd7, 0x63, 0xdb, 0x45, 0xf2, 0xa1, + 0x94, 0xff, 0xae, 0x3f, 0x47, 0x91, 0xc3, 0xbd, 0x51, 0x27, 0x36, 0xb4, + 0x83, 0xce, 0x4a, 0x63, 0xca, 0x6d, 0x1f, 0x4c, 0xa3, 0xee, 0xc7, 0xf0, + 0xb9, 0x00, 0xfb, 0xcd, 0xf7, 0x8f, 0xae, 0x85, 0x8c, 0x15, 0x3d, 0xba, + 0x8b, 0xcd, 0x43, 0xd3, 0x4a, 0xc8, 0xd0, 0x8a, 0x11, 0x28, 0xba, 0x60, + 0x95, 0x89, 0x19, 0xf2, 0x60, 0x16, 0xb1, 0x1f, 0xd5, 0x42, 0xd8, 0x0c, + 0x65, 0xda, 0x7b, 0x9c, 0xf3, 0xa2, 0x2b, 0x6b, 0x45, 0x35, 0xac, 0x90, + 0x4a, 0xea, 0x09, 0xcc, 0x85, 0xfe, 0x46, 0x46, 0xca, 0xf7, 0x8f, 0x39, + 0xed, 0x78, 0x52, 0x67, 0x2a, 0x11, 0x97, 0x67, 0x11, 0x9e, 0xe6, 0x85, + 0x8c, 0x52, 0x05, 0x6d, 0xa5, 0xe9, 0xeb, 0x0c, 0xe5, 0x76, 0x65, 0x7c, + 0x3a, 0xae, 0x5b, 0x76, 0xb2, 0xdc, 0x70, 0x3d, 0xcd, 0xf2, 0x3d, 0x66, + 0xc8, 0x92, 0xdb, 0x0f, 0x58, 0x25, 0x59, 0xc3, 0xb9, 0x22, 0x6f, 0x44, + 0xc1, 0x46, 0x80, 0x60, 0x23, 0x96, 0x89, 0xf3, 0x77, 0x27, 0x28, 0x8d, + 0xde, 0x7e, 0x33, 0xd5, 0x92, 0x0b, 0x0c, 0xdd, 0xef, 0x08, 0x2c, 0x25, + 0x24, 0x76, 0x1e, 0xc1, 0x12, 0xcc, 0x5f, 0x62, 0xe2, 0x9b, 0x06, 0x60, + 0xbe, 0xa5, 0x18, 0x49, 0x9c, 0x16, 0xfb, 0x56, 0xaf, 0x05, 0xeb, 0x96, + 0x60, 0x3c, 0xef, 0x27, 0x9e, 0x77, 0xa7, 0x4f, 0x20, 0x21, 0x78, 0x6e, + 0xc1, 0xce, 0x6c, 0x8b, 0xf6, 0xcd, 0x26, 0xb4, 0x1b, 0x7e, 0x33, 0xf1, + 0xde, 0x06, 0x49, 0x51, 0xcb, 0x5f, 0x4d, 0x97, 0xef, 0x56, 0xc9, 0xa4, + 0x17, 0x74, 0x0d, 0x01, 0x12, 0x49, 0xaf, 0x12, 0x49, 0x2a, 0x6e, 0x76, + 0x0b, 0x7c, 0x41, 0xa5, 0x6d, 0xcc, 0xe0, 0x56, 0x3f, 0x11, 0x46, 0x46, + 0x27, 0xea, 0x47, 0xa6, 0xe2, 0x25, 0x13, 0x71, 0x0a, 0xeb, 0x7b, 0x62, + 0x10, 0xb0, 0xe4, 0xc1, 0x35, 0xd4, 0x10, 0xa4, 0xd7, 0xd0, 0x6b, 0x49, + 0x25, 0x89, 0x8b, 0x9d, 0x39, 0x22, 0x02, 0x0c, 0x6d, 0x9c, 0x2b, 0xff, + 0xfa, 0x4f, 0x7b, 0x19, 0xc5, 0xec, 0x20, 0x4d, 0x92, 0xa7, 0x61, 0x4d, + 0x2f, 0x7c, 0x23, 0x02, 0xb4, 0x20, 0x23, 0x78, 0xad, 0x89, 0xae, 0x12, + 0xba, 0x32, 0x05, 0xaa, 0x8e, 0x69, 0x4a, 0x82, 0xab, 0xca, 0xb2, 0x19, + 0x23, 0xcf, 0x4c, 0x3b, 0x95, 0x6d, 0xc8, 0x84, 0xc4, 0x30, 0x5f, 0xd0, + 0xb5, 0xcf, 0x06, 0x25, 0xe3, 0x52, 0xe8, 0xf5, 0x72, 0x71, 0x54, 0xc3, + 0x90, 0x28, 0x60, 0x03, 0x05, 0xb7, 0x03, 0xe0, 0x7b, 0x7b, 0xa1, 0x78, + 0x32, 0xd9, 0xa3, 0x65, 0x74, 0xcf, 0xda, 0xa0, 0x7d, 0xac, 0xe7, 0x86, + 0x3e, 0xbd, 0x18, 0x94, 0x98, 0xf1, 0x6d, 0x21, 0xe8, 0x00, 0x50, 0x1c, + 0x44, 0x9d, 0xf9, 0x50, 0x75, 0xdc, 0xf1, 0x58, 0x86, 0x78, 0x32, 0x07, + 0x4d, 0x01, 0x3b, 0xf9, 0x36, 0x74, 0x64, 0x42, 0x88, 0x62, 0xbd, 0x7e, + 0x58, 0xb9, 0x8c, 0x0b, 0x35, 0x34, 0x18, 0xda, 0x27, 0x3a, 0x0e, 0x7a, + 0x04, 0x8c, 0xdc, 0x72, 0xcf, 0x8f, 0xa8, 0x4d, 0xeb, 0x12, 0x35, 0x7a, + 0xf6, 0x15, 0x7a, 0x9c, 0x85, 0xe3, 0x13, 0x3d, 0xc1, 0x78, 0xac, 0x76, + 0x63, 0x47, 0x9b, 0x02, 0xc4, 0x70, 0x48, 0x0f, 0xe1, 0x60, 0x2d, 0x01, + 0xa0, 0x8c, 0x3d, 0x17, 0x5b, 0xff, 0x33, 0x7e, 0x8e, 0xf2, 0x6c, 0xae, + 0x7a, 0xa0, 0xb4, 0x0f, 0xb8, 0x11, 0xa8, 0x4c, 0x7a, 0xc7, 0x40, 0x7d, + 0x23, 0x5e, 0xf9, 0x4a, 0x5f, 0xf0, 0x96, 0x4d, 0xd1, 0x54, 0x93, 0x3f, + 0xc8, 0xa9, 0x40, 0xe3, 0x80, 0xe7, 0x47, 0xde, 0x96, 0x5d, 0x66, 0x4e, + 0xb1, 0x0d, 0xf5, 0xeb, 0x04, 0xf2, 0xb5, 0xef, 0xd3, 0xe1, 0xb4, 0x86, + 0xd4, 0xe6, 0x8f, 0x42, 0xdb, 0xb7, 0x8b, 0xb0, 0x68, 0x26, 0xe9, 0x60, + 0x56, 0xac, 0x5e, 0x83, 0xc9, 0xb9, 0x81, 0x89, 0x97, 0x76, 0x2e, 0x2b, + 0x52, 0xbc, 0x78, 0x3b, 0xbf, 0x5e, 0x37, 0xb9, 0x1c, 0x51, 0x7b, 0x6b, + 0x26, 0x6c, 0x3b, 0xa3, 0x3c, 0xef, 0x6c, 0x5f, 0x64, 0x3f, 0x09, 0xe3, + 0xd4, 0x64, 0xf1, 0xca, 0x8b, 0x83, 0xf8, 0xff, 0x6d, 0x83, 0xe6, 0x98, + 0xff, 0xae, 0x3e, 0x2f, 0x29, 0x31, 0x86, 0x60, 0xc5, 0x39, 0xe6, 0x12, + 0xe1, 0x45, 0x35, 0xe1, 0xbc, 0x4b, 0xff, 0x1a, 0x2c, 0xe2, 0x79, 0x0b, + 0x85, 0x3e, 0x35, 0x2d, 0x6b, 0xe8, 0xec, 0xde, 0x51, 0x70, 0x58, 0x14, + 0xa4, 0xbc, 0x81, 0xbf, 0xd9, 0xc6, 0x5c, 0x6c, 0xc1, 0x2f, 0xd7, 0x8f, + 0x46, 0x51, 0x91, 0x80, 0x03, 0xd3, 0xc4, 0xa8, 0x17, 0xf1, 0x36, 0x6b, + 0x8b, 0xed, 0xa1, 0x01, 0x14, 0xd5, 0x20, 0x2f, 0x7e, 0x90, 0x0f, 0x29, + 0xc2, 0x4a, 0xd2, 0x50, 0x89, 0x6f, 0xde, 0xd5, 0x96, 0x46, 0x47, 0x2b, + 0x68, 0x9d, 0xad, 0x9e, 0x63, 0x1d, 0x08, 0x50, 0xb3, 0xbc, 0x78, 0x6e, + 0xa3, 0xb7, 0x8a, 0xa0, 0x7f, 0x60, 0x15, 0xaf, 0x76, 0xc1, 0xeb, 0x20, + 0x5a, 0x7f, 0xf0, 0xad, 0x65, 0x59, 0xc5, 0xb9, 0xf6, 0xfd, 0x48, 0xd0, + 0x97, 0xdf, 0x34, 0xba, 0x96, 0x05, 0x06, 0x69, 0xf9, 0xc5, 0xa7, 0x32, + 0xc2, 0x24, 0x4c, 0x61, 0xaa, 0xc2, 0x7e, 0x05, 0x35, 0x1c, 0x6b, 0x2f, + 0xf5, 0xec, 0x9c, 0x67, 0xf4, 0x05, 0xb7, 0xf6, 0x92, 0x32, 0x96, 0x1b, + 0xcf, 0xcf, 0x00, 0x35, 0x1c, 0xc2, 0xc8, 0xeb, 0x79, 0xc5, 0xc0, 0x3d, + 0x76, 0xce, 0x8e, 0x68, 0xa5, 0x56, 0x58, 0x30, 0xd9, 0x4c, 0x82, 0x67, + 0xac, 0xe2, 0x95, 0xdd, 0x96, 0xd4, 0x7e, 0x87, 0x64, 0xfb, 0x14, 0xef, + 0xbf, 0x38, 0xef, 0x89, 0x04, 0xe7, 0x50, 0x2f, 0x1f, 0x86, 0x38, 0x63, + 0x8e, 0x49, 0xce, 0xbd, 0xb5, 0xb3, 0xa3, 0xd8, 0xc2, 0xba, 0x74, 0x11, + 0x3f, 0xf1, 0xad, 0x00, 0x87, 0x07, 0xe0, 0x30, 0x9d, 0x78, 0x0b, 0x12, + 0xab, 0xd3, 0x23, 0x11, 0x52, 0xa5, 0x0c, 0xd8, 0xc2, 0xb1, 0xa8, 0xb8, + 0x25, 0x5b, 0x9a, 0x05, 0x24, 0x55, 0x13, 0xe1, 0x6a, 0xa0, 0x65, 0x77, + 0x23, 0x41, 0x18, 0x54, 0x72, 0x23, 0x1a, 0xeb, 0xb8, 0x67, 0xab, 0x87, + 0xeb, 0x54, 0xe0, 0xba, 0x61, 0xe0, 0x80, 0xef, 0x97, 0x54, 0xbd, 0x4b, + 0xda, 0x45, 0xb1, 0x1d, 0x3d, 0xf9, 0x13, 0xed, 0x10, 0xc0, 0x26, 0xc7, + 0xf3, 0x8b, 0x10, 0x06, 0x6f, 0xc7, 0x3c, 0x83, 0xc2, 0xa6, 0x2b, 0xa7, + 0x74, 0x86, 0xa9, 0x80, 0x8f, 0x05, 0xa5, 0xad, 0x52, 0x99, 0x96, 0xba, + 0x69, 0x7f, 0x4e, 0xb5, 0x5a, 0xe6, 0x3f, 0x69, 0x0c, 0x40, 0x74, 0xcd, + 0xa7, 0xd3, 0x64, 0x6b, 0x88, 0x0c, 0xaf, 0xb9, 0x9c, 0x1b, 0x32, 0x63, + 0x70, 0x66, 0xd4, 0xd7, 0x6f, 0x91, 0xbe, 0x9b, 0x0a, 0x3d, 0x5d, 0xe6, + 0x12, 0x66, 0x68, 0xf3, 0xab, 0x32, 0x83, 0xc9, 0x0d, 0x3b, 0x14, 0x51, + 0xf2, 0x1b, 0xb1, 0x0b, 0xa5, 0xd0, 0x5b, 0x8e, 0xbd, 0x9b, 0x88, 0xc3, + 0x1d, 0x7f, 0x1b, 0x7c, 0x23, 0x19, 0xde, 0xb8, 0x64, 0x85, 0x84, 0x7a, + 0x48, 0x8b, 0xae, 0x07, 0xff, 0xbd, 0x14, 0x35, 0x27, 0x0b, 0x6b, 0x9c, + 0xad, 0x99, 0x19, 0x26, 0xe4, 0x0f, 0xa7, 0x26, 0xad, 0xc6, 0x3b, 0x25, + 0xa8, 0x04, 0xd9, 0x18, 0xc7, 0x0a, 0xe0, 0x61, 0x9b, 0xba, 0x7a, 0x6a, + 0x71, 0x7c, 0x52, 0xd2, 0xa9, 0xb1, 0x92, 0xd0, 0x80, 0xdb, 0xd1, 0x27, + 0x7c, 0xd5, 0xbe, 0x52, 0xe2, 0x74, 0x3f, 0xe3, 0x56, 0x96, 0x6d, 0xe5, + 0x14, 0xc3, 0xca, 0x08, 0x82, 0x0d, 0xfb, 0xcc, 0x98, 0xfa, 0x0b, 0x89, + 0x29, 0x58, 0x08, 0xce, 0x85, 0x77, 0x4a, 0x1e, 0x32, 0x44, 0x17, 0xe1, + 0xce, 0xce, 0xd0, 0x85, 0x84, 0x9c, 0x15, 0xc6, 0x21, 0x29, 0x55, 0xf0, + 0x3e, 0x28, 0x27, 0x00, 0x07, 0x10, 0xfb, 0x26, 0x78, 0x0b, 0x58, 0x70, + 0x10, 0x0f, 0x7a, 0xe1, 0x72, 0xa7, 0xe8, 0x62, 0xac, 0x1c, 0x99, 0xbc, + 0x7b, 0xcf, 0x59, 0xfa, 0x4a, 0x71, 0x39, 0xc8, 0x16, 0xb9, 0x45, 0x12, + 0x32, 0x25, 0x9e, 0xf4, 0xb7, 0x0d, 0x2c, 0x65, 0xdc, 0x7f, 0xba, 0x6e, + 0x87, 0x29, 0xed, 0xbe, 0x76, 0x09, 0xe9, 0x31, 0xef, 0x9f, 0xbd, 0x88, + 0xfa, 0x31, 0x93, 0xf7, 0x29, 0x77, 0x41, 0x08, 0x64, 0xac, 0xbb, 0x0d, + 0xb6, 0x36, 0x64, 0xe4, 0x52, 0xe9, 0x2e, 0x05, 0x2b, 0x54, 0x47, 0xdd, + 0x9a, 0x52, 0x7e, 0x90, 0x56, 0xc0, 0x6a, 0x4b, 0x5e, 0x14, 0xf9, 0x87, + 0x2d, 0x79, 0xb9, 0x6d, 0x1b, 0x6c, 0x18, 0x09, 0x3d, 0xfa, 0x76, 0x3d, + 0xa7, 0x92, 0x84, 0x65, 0x04, 0x97, 0x7f, 0x8b, 0x29, 0xc5, 0xf8, 0x0d, + 0xf6, 0xba, 0x35, 0x91, 0xd2, 0x19, 0x17, 0xa7, 0xf4, 0x96, 0x10, 0xd5, + 0xbd, 0x0f, 0x12, 0x4d, 0x6c, 0x66, 0xa5, 0x6d, 0xf5, 0x4d, 0x3c, 0x77, + 0xfb, 0x51, 0x71, 0xcf, 0x23, 0x40, 0xd3, 0xa0, 0x1c, 0x67, 0xd2, 0xe2, + 0x68, 0xd9, 0x7f, 0x53, 0x24, 0x57, 0x76, 0x68, 0xf3, 0xe4, 0x3e, 0x3a, + 0x5d, 0x2f, 0xbd, 0xc6, 0x6b, 0x56, 0xc5, 0x89, 0x5c, 0x2f, 0x3c, 0x4d, + 0xe6, 0xe7, 0xf5, 0x37, 0x53, 0x54, 0x18, 0x13, 0x11, 0x4a, 0x6c, 0xcf, + 0x34, 0x3c, 0xf8, 0x00, 0x7e, 0x46, 0x6f, 0xa6, 0x19, 0x34, 0xd2, 0xd0, + 0xe3, 0xeb, 0x6a, 0x70, 0x23, 0xbc, 0x19, 0x0a, 0x06, 0x2f, 0xba, 0xa4, + 0x56, 0x98, 0x60, 0xc6, 0x29, 0x56, 0xbd, 0xf6, 0x82, 0x79, 0xd5, 0x96, + 0x2a, 0x02, 0x75, 0x80, 0xed, 0x96, 0xd7, 0xfd, 0xc8, 0x5d, 0x76, 0x38, + 0xf3, 0x63, 0x01, 0x17, 0x03, 0xa7, 0xe7, 0x33, 0xbd, 0x57, 0xcc, 0x80, + 0x3d, 0xa9, 0x35, 0xd0, 0xc4, 0xf6, 0xc0, 0x4e, 0x08, 0x78, 0x8f, 0xa4, + 0x35, 0x39, 0x56, 0xe7, 0xe0, 0xb4, 0x01, 0x77, 0xa9, 0xce, 0x36, 0x48, + 0x80, 0x20, 0xbb, 0xb7, 0x96, 0x46, 0xbf, 0x20, 0x60, 0xae, 0x4d, 0xc0, + 0xdb, 0x88, 0xeb, 0xdb, 0x65, 0xbb, 0xd6, 0x5f, 0xad, 0xa6, 0xbf, 0x94, + 0xf9, 0x2c, 0xb0, 0x6d, 0x37, 0xa3, 0x9c, 0x0d, 0x19, 0x92, 0xb2, 0x1e, + 0xdd, 0x77, 0x95, 0x24, 0x01, 0x99, 0xa4, 0x89, 0xba, 0x99, 0xfa, 0x1b, + 0xc5, 0xa0, 0xc8, 0xcf, 0x66, 0x22, 0xb8, 0xe5, 0xb8, 0x60, 0x26, 0x96, + 0x07, 0x0f, 0xa9, 0x81, 0xcd, 0xe9, 0x7d, 0x7e, 0x54, 0xb9, 0xbd, 0x89, + 0x07, 0x91, 0xeb, 0x6a, 0x70, 0xde, 0x00, 0x8f, 0xf6, 0xb7, 0x77, 0xee, + 0xf8, 0x09, 0x7e, 0x7e, 0xef, 0xa6, 0x5c, 0xde, 0xe2, 0xcf, 0x2e, 0x09, + 0x64, 0x74, 0x17, 0x06, 0xae, 0xc9, 0xc2, 0xfe, 0x6e, 0xfe, 0xaa, 0xb0, + 0x1c, 0x4a, 0x75, 0x25, 0xe6, 0x3f, 0x40, 0x2d, 0xfe, 0xc5, 0x3d, 0x6a, + 0x01, 0x45, 0x56, 0xe6, 0x39, 0x61, 0xdc, 0x3e, 0x09, 0xce, 0x1b, 0x9e, + 0xd4, 0xb5, 0xc2, 0xca, 0x2b, 0xfd, 0x6b, 0xdd, 0xd0, 0x21, 0x0d, 0x03, + 0xef, 0xea, 0xb7, 0xee, 0x61, 0xa5, 0xaf, 0xb8, 0x80, 0x1f, 0x21, 0xe4, + 0x0f, 0x6e, 0x27, 0xae, 0xf8, 0xb1, 0x16, 0x05, 0xc7, 0x76, 0x50, 0x35, + 0xa9, 0x73, 0xb3, 0x72, 0xf7, 0x0b, 0x5c, 0xa4, 0x49, 0x48, 0x22, 0x66, + 0x40, 0xa1, 0xfe, 0xf2, 0x4f, 0x00, 0xae, 0xc7, 0xc4, 0x27, 0x7d, 0x5e, + 0xe9, 0x65, 0x67, 0x38, 0x83, 0xd7, 0x36, 0xfe, 0xe3, 0x30, 0x5b, 0x85, + 0xe0, 0x94, 0x77, 0xc7, 0xac, 0xc3, 0x30, 0x6a, 0x6e, 0xb3, 0xdd, 0xb4, + 0x82, 0xdf, 0xa8, 0x21, 0x20, 0xa8, 0xd5, 0xd9, 0x63, 0xf3, 0x23, 0xf5, + 0xf0, 0x8e, 0x2a, 0x33, 0xf4, 0x24, 0xed, 0xc1, 0xa5, 0xaf, 0xa4, 0x2b, + 0x01, 0x28, 0xcd, 0xf8, 0x3c, 0xd4, 0x85, 0x87, 0x0a, 0x12, 0x6e, 0x4c, + 0xbc, 0xce, 0x40, 0x71, 0x59, 0x07, 0xaf, 0x7e, 0x84, 0x22, 0x73, 0x90, + 0xa2, 0xc1, 0xc0, 0x64, 0x62, 0xb0, 0x09, 0xf0, 0xf9, 0x2b, 0xc9, 0x43, + 0x57, 0x23, 0x2f, 0xce, 0xf0, 0x3a, 0xa9, 0xc8, 0xf1, 0x62, 0x8f, 0x9a, + 0x8c, 0x55, 0x7e, 0xdb, 0x81, 0x0d, 0x50, 0x66, 0x50, 0xdc, 0x73, 0x31, + 0x3c, 0x62, 0x6f, 0x15, 0x0c, 0x9a, 0x59, 0xc6, 0xf7, 0x8b, 0x0b, 0xfb, + 0x12, 0x22, 0x9d, 0x4b, 0xbd, 0x64, 0x9d, 0x5b, 0xd0, 0x1e, 0xc0, 0xe2, + 0x75, 0x0d, 0xff, 0x32, 0xc5, 0xad, 0xc2, 0xfd, 0x37, 0x93, 0x1c, 0x70, + 0x67, 0x53, 0x27, 0x22, 0xd0, 0x36, 0x39, 0x6b, 0x22, 0xee, 0x22, 0x87, + 0x9d, 0x06, 0x0f, 0xc4, 0xe2, 0x15, 0xb7, 0xc5, 0x59, 0x77, 0x55, 0x54, + 0x7a, 0x0c, 0x4f, 0x10, 0xe3, 0x2c, 0x14, 0x42, 0x54, 0x45, 0x3c, 0x86, + 0xd1, 0x79, 0x10, 0xb6, 0xb9, 0x3c, 0xff, 0xc1, 0x7b, 0x5b, 0x85, 0x51, + 0x6f, 0x4f, 0x9c, 0x47, 0x76, 0xde, 0x50, 0x95, 0xd9, 0xc3, 0xa6, 0x71, + 0x9b, 0x69, 0x15, 0xf6, 0x81, 0xa7, 0x1f, 0x7e, 0x2c, 0xbd, 0x41, 0xca, + 0xc3, 0xc6, 0x7a, 0x86, 0xfb, 0xa1, 0x52, 0x74, 0xab, 0x8d, 0x93, 0xa9, + 0xf3, 0x53, 0x05, 0xc0, 0x3e, 0xf5, 0x4a, 0xc7, 0xde, 0xfe, 0xd2, 0x0d, + 0xde, 0xfd, 0xf3, 0xc9, 0xd9, 0x5e, 0x83, 0x52, 0x9a, 0xe6, 0x8c, 0xb5, + 0x9a, 0x41, 0xbe, 0x89, 0xf9, 0x57, 0x20, 0x65, 0x7a, 0x8e, 0xa9, 0x0d, + 0xd4, 0x7d, 0x25, 0x74, 0xaa, 0x68, 0x1c, 0x8a, 0xcc, 0x75, 0xf1, 0x51, + 0x17, 0x8f, 0xea, 0x1e, 0x4d, 0xb2, 0x66, 0x77, 0xdc, 0x8b, 0xa4, 0x41, + 0x76, 0x5e, 0x7c, 0x8d, 0x19, 0x24, 0x6e, 0x51, 0x13, 0x93, 0x14, 0x20, + 0x7c, 0xef, 0x07, 0x9c, 0x18, 0xc1, 0xfe, 0xa3, 0x29, 0x87, 0x80, 0x0f, + 0xe5, 0x1f, 0x21, 0x95, 0x0b, 0x79, 0x97, 0xa4, 0x89, 0xa2, 0xd2, 0x5d, + 0x4a, 0xea, 0x92, 0x89, 0xc8, 0xd6, 0x37, 0x07, 0xfd, 0x8e, 0xba, 0xaa, + 0xca, 0xef, 0x3f, 0x07, 0xe4, 0x20, 0x33, 0xe9, 0x62, 0x31, 0xc5, 0x9d, + 0x7f, 0xf5, 0x1e, 0x16, 0x06, 0xb8, 0x1b, 0xc1, 0xbd, 0xfd, 0x37, 0x76, + 0x33, 0xab, 0x07, 0x0e, 0xcc, 0x16, 0x2b, 0x4b, 0x4f, 0x47, 0xbb, 0xfe, + 0x43, 0x3a, 0x4a, 0x6e, 0x99, 0xaa, 0x8e, 0xf2, 0xbc, 0xf4, 0xb8, 0xb9, + 0x85, 0x15, 0x69, 0xde, 0x40, 0x4f, 0x98, 0xb5, 0xaf, 0xe3, 0xa1, 0xb0, + 0x10, 0xf9, 0x95, 0xff, 0xc6, 0xaf, 0x31, 0xdb, 0x07, 0x48, 0x32, 0xde, + 0x59, 0x24, 0x30, 0x1f, 0x26, 0x83, 0xea, 0x1b, 0x3d, 0x5b, 0x70, 0xce, + 0x2a, 0x3c, 0x25, 0x27, 0xe3, 0x59, 0x86, 0xf7, 0x79, 0xb5, 0x8b, 0xba, + 0xb9, 0x85, 0x58, 0x06, 0xe6, 0x93, 0xc8, 0x3a, 0xde, 0xf9, 0x6f, 0xc3, + 0x9f, 0xdb, 0xaf, 0x7f, 0xd4, 0x49, 0x9a, 0x3d, 0x4c, 0x6a, 0x16, 0x9b, + 0x2c, 0xff, 0x41, 0xa2, 0x79, 0xc2, 0x2c, 0xea, 0xfd, 0x19, 0xa7, 0x62, + 0xb8, 0xed, 0x97, 0x51, 0xc6, 0x72, 0xcd, 0xed, 0xfb, 0xd0, 0x8d, 0xa0, + 0x5c, 0xf9, 0xaf, 0x47, 0x36, 0xd1, 0x8a, 0x18, 0xe5, 0xec, 0x3c, 0x18, + 0x4e, 0xc7, 0x18, 0x96, 0x15, 0x87, 0x25, 0x5a, 0xf4, 0xdc, 0x32, 0x6b, + 0x5e, 0xf5, 0x25, 0x7e, 0xab, 0x93, 0xbe, 0x36, 0xc8, 0x20, 0xc4, 0x5d, + 0x1e, 0xd6, 0x83, 0x44, 0xbd, 0x5a, 0xb3, 0x08, 0x64, 0x99, 0x4f, 0x30, + 0x78, 0x9b, 0xec, 0xb0, 0x50, 0x20, 0xb3, 0xd4, 0x22, 0x14, 0xbd, 0x13, + 0x1e, 0xa7, 0x30, 0xe2, 0x93, 0xf1, 0xf3, 0xbf, 0xcc, 0xca, 0xac, 0xfd, + 0x31, 0x31, 0xd8, 0x1d, 0xfa, 0x44, 0xda, 0xca, 0x3a, 0x62, 0xa2, 0x59, + 0x4a, 0x83, 0xf1, 0x42, 0x1b, 0xba, 0x5e, 0xd6, 0x55, 0x7b, 0xc8, 0x36, + 0x5c, 0xc7, 0x8f, 0xbf, 0x42, 0x40, 0x86, 0x3d, 0x84, 0x41, 0xef, 0x17, + 0x1e, 0xcc, 0x20, 0x82, 0x5f, 0xec, 0x2f, 0xed, 0xd3, 0xfa, 0xba, 0xb7, + 0x98, 0xcf, 0x03, 0xd1, 0x18, 0xb6, 0x13, 0xba, 0x03, 0x7d, 0xa0, 0x7f, + 0xee, 0x88, 0x98, 0xf2, 0x4d, 0x47, 0xa5, 0xa5, 0x62, 0x15, 0x01, 0x88, + 0x57, 0xd8, 0x2d, 0xc1, 0x6f, 0x97, 0x06, 0xe0, 0x23, 0x0f, 0x20, 0xdc, + 0xef, 0xc9, 0x4d, 0x38, 0x7e, 0x52, 0x23, 0x18, 0x96, 0xe1, 0x1d, 0xc9, + 0xcf, 0x15, 0x66, 0x0d, 0xaf, 0x84, 0xa7, 0x76, 0x93, 0x9b, 0xd8, 0xa2, + 0xc1, 0x26, 0x17, 0xe8, 0x78, 0xf7, 0x8a, 0x9d, 0x9a, 0x19, 0xa8, 0x25, + 0x9a, 0x06, 0xd1, 0x96, 0xf5, 0x22, 0x99, 0x0e, 0xbb, 0x35, 0x07, 0x75, + 0xd1, 0x7a, 0x0d, 0x07, 0x73, 0xb0, 0x1e, 0x3f, 0x01, 0x8e, 0xb1, 0x20, + 0xef, 0x89, 0x4d, 0x7f, 0x83, 0xd6, 0x19, 0x6f, 0x6f, 0x79, 0x1d, 0x14, + 0x86, 0x4e, 0x64, 0x8a, 0x77, 0x20, 0xd5, 0xb0, 0xb6, 0x75, 0xcd, 0x0e, + 0xb2, 0xf5, 0xc9, 0xba, 0x96, 0xd9, 0xf5, 0x66, 0xb7, 0x85, 0x34, 0x4a, + 0xae, 0x09, 0xfb, 0x02, 0x33, 0xbd, 0x37, 0xe3, 0x42, 0xe7, 0x3d, 0x99, + 0x96, 0xd5, 0xf7, 0xb6, 0xc0, 0x27, 0xfe, 0xe9, 0xc1, 0x75, 0xce, 0xf9, + 0x5b, 0x97, 0xbe, 0xc2, 0x41, 0xef, 0x4e, 0x73, 0x5b, 0x34, 0xf1, 0x02, + 0x0d, 0x95, 0x81, 0x7e, 0x20, 0x20, 0x9c, 0x0b, 0xe9, 0x8c, 0x3e, 0xb0, + 0xe0, 0x46, 0xef, 0x19, 0x68, 0x27, 0x4c, 0x51, 0x65, 0x8c, 0x39, 0xf3, + 0x1f, 0xda, 0xa2, 0xf4, 0x00, 0x6a, 0xe4, 0x1f, 0x8d, 0xe9, 0x45, 0x83, + 0x14, 0x4f, 0x1c, 0xe1, 0x7d, 0x7c, 0xfa, 0x2b, 0xe4, 0x6d, 0x38, 0x18, + 0x7b, 0x11, 0x2b, 0x89, 0xa0, 0x2a, 0x9b, 0x64, 0x1c, 0x4e, 0x75, 0x24, + 0xd9, 0xa2, 0x13, 0x1d, 0xc1, 0xd6, 0x91, 0x4b, 0x0d, 0x17, 0xee, 0x04, + 0xa8, 0xa8, 0x9c, 0x9d, 0x99, 0x42, 0xf2, 0x4e, 0x49, 0x36, 0x10, 0x79, + 0x5c, 0xb2, 0x01, 0x0b, 0xbe, 0x13, 0x24, 0x27, 0x00, 0xae, 0x7c, 0xea, + 0xd3, 0x83, 0xe4, 0x63, 0x1c, 0x45, 0x25, 0x5d, 0x03, 0x21, 0x4d, 0x8c, + 0x01, 0xa6, 0x15, 0x6e, 0x84, 0xc2, 0xef, 0x24, 0x27, 0xbd, 0x1d, 0x36, + 0xd6, 0x41, 0x36, 0xaa, 0x5e, 0x6c, 0x8c, 0xbc, 0xa3, 0x34, 0x02, 0x28, + 0x1e, 0x1f, 0xb1, 0x40, 0xbd, 0x0a, 0x86, 0x85, 0xea, 0xa8, 0xbf, 0x77, + 0xb3, 0x94, 0x47, 0xe4, 0x79, 0x3a, 0x9a, 0x1a, 0xcd, 0x68, 0xb8, 0x11, + 0x9f, 0x50, 0x54, 0x7b, 0xfe, 0x50, 0x0c, 0xa2, 0xc9, 0x68, 0xbc, 0xd0, + 0xf9, 0xa7, 0xaf, 0x15, 0x2e, 0x9a, 0x79, 0x21, 0xd0, 0x8c, 0x36, 0x74, + 0x5b, 0xf3, 0x61, 0xaf, 0x0f, 0x02, 0xac, 0x7f, 0x30, 0x41, 0x4d, 0x16, + 0x40, 0xf7, 0x77, 0x96, 0x84, 0x79, 0x4a, 0x9c, 0x25, 0xc2, 0xc1, 0x00, + 0x73, 0x2f, 0xa9, 0x34, 0xe8, 0x38, 0x64, 0x3a, 0x6d, 0x4a, 0xc6, 0x91, + 0xa4, 0x94, 0x30, 0x84, 0x96, 0xd5, 0x76, 0x37, 0x2c, 0xdf, 0x97, 0xa4, + 0xbb, 0x11, 0x97, 0xbf, 0xf5, 0x78, 0x0f, 0x67, 0x80, 0x7c, 0x21, 0x6f, + 0x3a, 0x08, 0xe9, 0x3d, 0x28, 0x8f, 0x14, 0x4c, 0xba, 0xd9, 0x6c, 0x03, + 0xa5, 0x0a, 0x6c, 0x08, 0x38, 0xb2, 0x03, 0x5d, 0x85, 0x53, 0xbd, 0x2f, + 0x1d, 0x4e, 0xa4, 0xcf, 0x75, 0x60, 0x57, 0x30, 0x7c, 0xa7, 0x13, 0xc8, + 0x36, 0x85, 0x34, 0xd4, 0x4d, 0x91, 0x21, 0xc4, 0x71, 0x90, 0x02, 0xdf, + 0xe4, 0xe6, 0x12, 0x77, 0xae, 0x13, 0x62, 0x3d, 0xce, 0xb6, 0xa9, 0x0d, + 0x8a, 0x20, 0xf9, 0xae, 0xb8, 0xec, 0x39, 0xf3, 0xab, 0xe0, 0x35, 0x24, + 0xba, 0xce, 0xff, 0xe5, 0x41, 0x6b, 0x72, 0x36, 0xa8, 0xc2, 0x3f, 0xd5, + 0xa4, 0x1f, 0x68, 0xf0, 0xc5, 0xf0, 0xc8, 0xe8, 0xef, 0x30, 0x25, 0x81, + 0x48, 0x76, 0xec, 0xdb, 0xab, 0x9c, 0xd7, 0x83, 0xc8, 0xf8, 0x60, 0x80, + 0x27, 0x75, 0x3d, 0x3d, 0x84, 0x10, 0x0b, 0x0d, 0x2c, 0x69, 0xe2, 0x44, + 0x2d, 0xa1, 0x8e, 0x9a, 0x09, 0x6a, 0x51, 0x91, 0x1a, 0x92, 0x31, 0x52, + 0xb7, 0x01, 0xd7, 0x8f, 0xde, 0x42, 0xeb, 0xfb, 0x77, 0x23, 0xc2, 0xd5, + 0x4d, 0x42, 0xa2, 0xa6, 0x2b, 0x6e, 0x18, 0xc6, 0xd1, 0x4e, 0x53, 0xae, + 0x35, 0x50, 0x0d, 0x9e, 0x1e, 0xa9, 0x3d, 0x4f, 0x39, 0xcd, 0x40, 0x00, + 0xbd, 0x15, 0xe2, 0x6b, 0xdf, 0x2a, 0x7e, 0xbd, 0xcf, 0x41, 0x07, 0xce, + 0xac, 0x88, 0xb1, 0x62, 0x5e, 0xd2, 0xd6, 0x93, 0x3d, 0xaa, 0x3d, 0x1a, + 0x14, 0x97, 0x10, 0xe2, 0x20, 0xc3, 0x9b, 0xc2, 0xba, 0x67, 0x92, 0x1d, + 0x26, 0x55, 0xc3, 0xfe, 0x77, 0x56, 0x2f, 0xc6, 0xb1, 0x70, 0xd6, 0x18, + 0xe2, 0x41, 0xda, 0x59, 0xc5, 0x4d, 0xfd, 0x1f, 0xe6, 0x91, 0x24, 0x81, + 0xc7, 0x3d, 0x4e, 0xe0, 0xc6, 0x0a, 0xf9, 0x13, 0x2b, 0xc4, 0x68, 0xdd, + 0x82, 0x58, 0x38, 0x66, 0x52, 0x96, 0x7e, 0x9f, 0x05, 0x21, 0xd1, 0x1a, + 0x84, 0x18, 0xa7, 0xea, 0xea, 0xbf, 0xf3, 0xdd, 0x39, 0xba, 0xb0, 0xe2, + 0x40, 0x99, 0x3b, 0x89, 0x45, 0x35, 0x43, 0x89, 0x51, 0x00, 0xe7, 0x46, + 0xe4, 0xe2, 0xa2, 0x29, 0x9f, 0xa6, 0x21, 0xe3, 0x73, 0xe7, 0xa3, 0x2c, + 0x55, 0x92, 0xdb, 0x28, 0x5c, 0x64, 0x30, 0x39, 0x8e, 0x6d, 0x5d, 0x94, + 0x31, 0x6c, 0x03, 0x67, 0x56, 0x37, 0x85, 0xb8, 0xbb, 0x53, 0xeb, 0xd9, + 0x75, 0x91, 0x74, 0x88, 0x8c, 0xcc, 0xd6, 0x53, 0x77, 0x2a, 0x39, 0x25, + 0x6c, 0xed, 0xb2, 0x96, 0xbc, 0x97, 0xb9, 0xce, 0xc3, 0x87, 0x9d, 0x92, + 0xb0, 0xcc, 0x09, 0xc1, 0xec, 0x16, 0x94, 0xa4, 0x36, 0x4d, 0x20, 0x2d, + 0xe7, 0x6a, 0x90, 0xf9, 0x1c, 0x7c, 0x90, 0x1f, 0xa8, 0x13, 0x88, 0xef, + 0x90, 0x23, 0x34, 0xa8, 0xfa, 0x19, 0x8c, 0x3f, 0x34, 0x8c, 0xfd, 0x7b, + 0x79, 0x00, 0x6d, 0xbb, 0xee, 0x2e, 0x46, 0x40, 0x5d, 0x6f, 0x1d, 0x72, + 0xdd, 0xdf, 0x2e, 0x04, 0xfe, 0xd3, 0x4d, 0xf5, 0xca, 0xea, 0x07, 0x60, + 0xe9, 0xbe, 0x6f, 0x0e, 0x09, 0x2b, 0xda, 0xad, 0x24, 0x37, 0x5c, 0x2f, + 0xea, 0xfe, 0x4c, 0xf4, 0x94, 0xff, 0x8c, 0xb5, 0xa1, 0x18, 0x49, 0x58, + 0x6b, 0xdb, 0xae, 0x6f, 0x75, 0x9b, 0xf7, 0x14, 0x64, 0xe2, 0xca, 0xb1, + 0x06, 0xfd, 0x1e, 0xdd, 0x6d, 0xc6, 0xc8, 0xad, 0x55, 0x3d, 0x33, 0x42, + 0xcc, 0xcf, 0xf2, 0xd0, 0x28, 0xa4, 0xbb, 0xea, 0x38, 0x11, 0xbf, 0x78, + 0x92, 0x66, 0x28, 0x19, 0xba, 0x8c, 0x11, 0xa3, 0xac, 0x1a, 0x1b, 0xb9, + 0x73, 0xc6, 0xa9, 0x41, 0xcb, 0x38, 0x04, 0x28, 0xd6, 0x49, 0x41, 0xc3, + 0x1e, 0x1d, 0x4a, 0x75, 0x33, 0x9b, 0xf4, 0x3b, 0xf8, 0xb0, 0x48, 0x94, + 0x0e, 0x93, 0xb7, 0xe2, 0x93, 0x62, 0xa9, 0xb6, 0xf0, 0xb5, 0xff, 0x4b, + 0x65, 0x5e, 0x17, 0x86, 0x11, 0xd5, 0x1e, 0xa3, 0x97, 0x2a, 0x01, 0x7d, + 0x31, 0x3c, 0x3f, 0x46, 0x33, 0x6c, 0x7c, 0xf8, 0x68, 0xa5, 0x81, 0x5e, + 0x8b, 0x29, 0x9b, 0x59, 0xaa, 0xd7, 0x5e, 0x8d, 0xb4, 0x05, 0x12, 0x86, + 0xef, 0x5d, 0xfb, 0xf9, 0x6f, 0x10, 0xfd, 0xba, 0xdd, 0x88, 0x74, 0xa2, + 0x5e, 0xb2, 0xe5, 0x8d, 0x31, 0x2c, 0x97, 0xfe, 0x93, 0xee, 0xd9, 0x7c, + 0x17, 0xca, 0xe2, 0xc5, 0x46, 0xb1, 0xce, 0x9e, 0x77, 0x4f, 0x43, 0x63, + 0x6c, 0xc5, 0xb3, 0x3c, 0xbb, 0x59, 0x73, 0x1d, 0x27, 0x24, 0xe5, 0x92, + 0x1b, 0xd2, 0x78, 0xd4, 0xa7, 0x6d, 0x6b, 0x7f, 0x6e, 0x71, 0xb2, 0x1f, + 0xba, 0x71, 0xe6, 0xac, 0xe6, 0x19, 0xfb, 0xa6, 0x14, 0xd9, 0x0e, 0x6e, + 0xc2, 0x35, 0xd8, 0xdc, 0xa6, 0x1b, 0x9d, 0x40, 0x89, 0xd7, 0xe4, 0x8b, + 0x30, 0x24, 0x39, 0x7a, 0xea, 0x18, 0xe9, 0xd5, 0x82, 0x53, 0xf9, 0x99, + 0x90, 0xc7, 0x5a, 0x3d, 0x0d, 0xf0, 0xce, 0x26, 0x7e, 0xac, 0x3a, 0x95, + 0xa7, 0x82, 0x59, 0x1a, 0xbe, 0xf7, 0x52, 0x00, 0x21, 0xf4, 0x2f, 0x37, + 0xd6, 0x7d, 0xed, 0xc7, 0x5e, 0x5b, 0x22, 0x07, 0xea, 0x84, 0x59, 0xa4, + 0xb9, 0x48, 0xb4, 0x07, 0xf4, 0x6e, 0x64, 0x07, 0x9c, 0x5b, 0xed, 0xc7, + 0x6d, 0x97, 0x21, 0xeb, 0xaf, 0x71, 0xc8, 0x7e, 0xc7, 0x8e, 0xe8, 0xc9, + 0x95, 0xec, 0x94, 0x85, 0x75, 0x1b, 0x40, 0xba, 0xdf, 0xe5, 0xb1, 0x18, + 0x8b, 0x44, 0x08, 0x99, 0xff, 0x69, 0x8a, 0x96, 0xfd, 0x2f, 0xe3, 0x2a, + 0x97, 0xf0, 0x7d, 0x4a, 0xd0, 0x25, 0x5f, 0xe7, 0x3c, 0xaa, 0x16, 0xf5, + 0xd7, 0xd3, 0xfc, 0x94, 0xda, 0x2d, 0x07, 0x1a, 0xcc, 0x46, 0x6d, 0xee, + 0x9a, 0xe4, 0x1a, 0x9b, 0xcd, 0x9e, 0xbb, 0x77, 0x6c, 0x57, 0x22, 0xaf, + 0x68, 0x75, 0xdf, 0x64, 0x6b, 0x20, 0xda, 0x5f, 0x32, 0xef, 0xb8, 0xce, + 0xea, 0x00, 0xfa, 0x2a, 0x86, 0x35, 0x66, 0xcb, 0x4d, 0xa3, 0x5d, 0x3f, + 0x8c, 0xdb, 0xb8, 0x18, 0xc8, 0xa7, 0x3d, 0xa6, 0xf4, 0xbe, 0x3f, 0x49, + 0x13, 0x84, 0xc4, 0xa3, 0x15, 0xeb, 0x93, 0xcc, 0x2c, 0xb7, 0xc3, 0xb5, + 0xf2, 0x3a, 0x91, 0x78, 0x5f, 0xd0, 0x5c, 0xaa, 0x99, 0x34, 0x47, 0x1c, + 0xb3, 0xc0, 0x92, 0x93, 0x24, 0xc3, 0xcb, 0x89, 0x64, 0x6b, 0x04, 0xd0, + 0x2e, 0x6c, 0xe7, 0x2d, 0xef, 0x0a, 0xf3, 0xd7, 0xa0, 0xe7, 0x16, 0xaa, + 0x79, 0xe7, 0xba, 0x32, 0x2b, 0x61, 0x04, 0xd2, 0x38, 0x2b, 0x7c, 0xe6, + 0xfb, 0xf7, 0xdd, 0xe9, 0xa1, 0xa1, 0x12, 0x5d, 0x19, 0xf1, 0x39, 0xdf, + 0x81, 0xab, 0xcb, 0x80, 0x4a, 0x4e, 0x7d, 0xd2, 0xf1, 0x2b, 0x87, 0x35, + 0x62, 0x7e, 0xf7, 0x84, 0xba, 0x0b, 0x82, 0x1a, 0xa3, 0xcb, 0x32, 0xf5, + 0x6d, 0x49, 0x84, 0x12, 0x00, 0x46, 0x70, 0xbf, 0x60, 0x02, 0x04, 0x86, + 0xa1, 0x50, 0x27, 0xcc, 0x35, 0x67, 0xe7, 0x22, 0x4c, 0xb0, 0x0b, 0xbb, + 0x98, 0x56, 0x81, 0xe7, 0x0c, 0x5c, 0xc0, 0x37, 0x48, 0x37, 0x2c, 0x8d, + 0x55, 0x33, 0xaa, 0xb2, 0x1e, 0xfe, 0x06, 0x0e, 0xf3, 0x50, 0xf9, 0x7d, + 0xdb, 0x9d, 0x84, 0x94, 0x2e, 0x82, 0x22, 0xe7, 0x1a, 0xe7, 0x77, 0x27, + 0x1c, 0x68, 0x1a, 0x03, 0x7f, 0x1d, 0xa7, 0x45, 0x0b, 0x0f, 0x32, 0x87, + 0xa3, 0x9f, 0xd6, 0xb0, 0xe9, 0x0d, 0xb9, 0xeb, 0xfd, 0x0b, 0x40, 0xf5, + 0x94, 0xc6, 0x9e, 0xa7, 0x27, 0x57, 0x0b, 0xe0, 0x7a, 0x77, 0xcc, 0xef, + 0xab, 0x32, 0xfd, 0x56, 0xa2, 0xea, 0x8e, 0x93, 0xc5, 0x65, 0xaa, 0x56, + 0xb5, 0xa8, 0x94, 0xbb, 0x3c, 0xc1, 0x14, 0x5a, 0x46, 0x01, 0x3a, 0xf5, + 0xb5, 0xa5, 0xb5, 0xc6, 0x2c, 0x3e, 0xf5, 0x47, 0x6b, 0x3e, 0x2e, 0x0e, + 0xf4, 0x81, 0x7e, 0xc5, 0x50, 0x34, 0xe8, 0x37, 0xa7, 0xc3, 0x2c, 0xba, + 0x52, 0x2c, 0x69, 0x1c, 0x7c, 0xfe, 0x66, 0x5c, 0x6f, 0xae, 0xf0, 0x90, + 0x16, 0x64, 0xa0, 0x27, 0x1a, 0xbd, 0x35, 0xbd, 0x13, 0x1b, 0x97, 0x3e, + 0x4f, 0xe7, 0x16, 0x76, 0x29, 0xa2, 0xfb, 0x2b, 0x1c, 0xb9, 0x1a, 0xaf, + 0x33, 0xd1, 0x11, 0xe9, 0x83, 0xdc, 0x96, 0x41, 0x34, 0x27, 0x29, 0x32, + 0x18, 0x22, 0x2a, 0x33, 0x47, 0x74, 0x9f, 0x38, 0x17, 0xb4, 0xb2, 0x29, + 0x7f, 0x18, 0x86, 0x47, 0xfd, 0x50, 0x76, 0x58, 0xf8, 0xf3, 0x10, 0x8c, + 0x52, 0x67, 0xed, 0x0e, 0xe8, 0xdf, 0x74, 0xcc, 0xf2, 0x6c, 0x42, 0xde, + 0xd5, 0x5b, 0xb5, 0x16, 0x50, 0x54, 0x2d, 0x60, 0xa4, 0x43, 0x0a, 0x3a, + 0x2d, 0xfa, 0x78, 0xfe, 0x15, 0x6f, 0xb1, 0x63, 0xe2, 0x0d, 0x97, 0xa5, + 0xe1, 0x42, 0xdc, 0xb9, 0xba, 0x99, 0xb8, 0x01, 0xdb, 0x6b, 0x05, 0x59, + 0x81, 0x5b, 0xeb, 0xeb, 0xc2, 0x81, 0x9d, 0xe3, 0x03, 0xda, 0x13, 0x57, + 0xa5, 0x6f, 0x1e, 0x30, 0xe3, 0x13, 0x35, 0x6e, 0x83, 0x54, 0x5b, 0x8c, + 0x9a, 0x0b, 0x11, 0x05, 0xfc, 0x71, 0xc9, 0x93, 0x74, 0xd5, 0xa8, 0x8d, + 0x16, 0x7c, 0x8e, 0x62, 0x9e, 0x66, 0x98, 0xdf, 0xec, 0x7b, 0x93, 0x0d, + 0x60, 0x86, 0x10, 0x13, 0x3c, 0xf5, 0x5a, 0xe7, 0x14, 0x7f, 0xb3, 0xb1, + 0xa7, 0x3c, 0xa4, 0x1b, 0xc3, 0xc4, 0x0a, 0xdb, 0xd9, 0xad, 0xf0, 0x8d, + 0x09, 0x0b, 0x35, 0x23, 0xac, 0xe6, 0x42, 0xb9, 0x13, 0xd4, 0x0a, 0x6a, + 0x49, 0x2a, 0x84, 0xe9, 0x9b, 0x32, 0x78, 0x70, 0x9b, 0xd9, 0xb2, 0xf7, + 0x52, 0x25, 0xc7, 0x0f, 0x9e, 0x70, 0xa2, 0x8f, 0xce, 0xfd, 0xa1, 0x9b, + 0x9a, 0x10, 0x50, 0x31, 0x35, 0x43, 0x5f, 0x8d, 0x68, 0x4a, 0x7b, 0xd6, + 0xcb, 0xc4, 0x23, 0x43, 0xb5, 0xe5, 0xde, 0x47, 0x46, 0x77, 0x6e, 0x47, + 0x32, 0x78, 0x2e, 0x5c, 0x0a, 0xb9, 0xb9, 0x76, 0x32, 0xcb, 0x25, 0xe5, + 0xe6, 0x7b, 0xf9, 0xbd, 0xa5, 0x50, 0xf8, 0x1b, 0x0c, 0x89, 0xbc, 0x75, + 0x6d, 0x48, 0xd7, 0x70, 0xed, 0xde, 0x75, 0xb2, 0x04, 0x63, 0xf5, 0x66, + 0xd2, 0xbf, 0xa3, 0x3a, 0xc9, 0x01, 0xbb, 0x02, 0x7b, 0xc1, 0x77, 0x95, + 0x5c, 0x3c, 0xfe, 0x0b, 0xbf, 0x50, 0x6d, 0x7b, 0x69, 0x18, 0x91, 0x28, + 0x2f, 0x65, 0x82, 0xfe, 0x62, 0x6b, 0xd7, 0x5e, 0xb6, 0x7c, 0x74, 0x20, + 0xf3, 0xeb, 0xb3, 0x8a, 0x0e, 0x1d, 0x13, 0xa1, 0x4a, 0x82, 0xa9, 0x25, + 0x3f, 0xea, 0x01, 0x72, 0x34, 0x32, 0x04, 0x10, 0x7f, 0x1b, 0x4a, 0x50, + 0x7a, 0xca, 0x99, 0xf1, 0xe2, 0xe7, 0xbf, 0xb2, 0x41, 0x87, 0x2d, 0xac, + 0x31, 0x2a, 0x66, 0x70, 0x4c, 0xa6, 0x71, 0x87, 0x34, 0xf9, 0x6a, 0x37, + 0x9f, 0xa2, 0x64, 0xca, 0x00, 0x65, 0x04, 0xa7, 0xbb, 0x3f, 0xe7, 0x67, + 0x9f, 0x31, 0x5e, 0xfc, 0xc4, 0x28, 0x65, 0x3e, 0x48, 0x6f, 0x03, 0x24, + 0x36, 0x70, 0x21, 0x55, 0xb2, 0x24, 0xa2, 0xbe, 0xfa, 0x5f, 0x0f, 0x0a, + 0x45, 0xbe, 0x15, 0x66, 0xc5, 0x01, 0xf1, 0x63, 0xf7, 0xd7, 0x34, 0xf2, + 0x6d, 0xed, 0xe7, 0x88, 0x9c, 0x73, 0xb2, 0x8a, 0x45, 0xe5, 0xe5, 0x44, + 0xfb, 0x70, 0xdc, 0xb3, 0x27, 0xfe, 0xc3, 0x56, 0xf2, 0x2e, 0x88, 0x5b, + 0xfe, 0xe7, 0xd5, 0x17, 0xe2, 0xc5, 0xa5, 0xa3, 0x86, 0x60, 0xa6, 0x66, + 0x58, 0x99, 0x88, 0x82, 0x47, 0x77, 0x6c, 0x4a, 0x53, 0x23, 0x84, 0x80, + 0xe7, 0x40, 0x78, 0xb1, 0xf2, 0x22, 0x4e, 0xfd, 0x2c, 0xf6, 0x00, 0x73, + 0x2d, 0x7f, 0x29, 0xd8, 0xec, 0x23, 0x16, 0xba, 0x20, 0x17, 0x7c, 0x92, + 0x5e, 0x60, 0xe0, 0x4e, 0xa2, 0xa0, 0x49, 0xf7, 0x8a, 0xbf, 0x0a, 0x59, + 0x82, 0x74, 0x81, 0xa2, 0x7c, 0x76, 0x7d, 0x22, 0xbb, 0xed, 0x2a, 0x8b, + 0x29, 0x3a, 0x17, 0x40, 0xeb, 0x50, 0xfb, 0x09, 0xf2, 0x2e, 0x01, 0x03, + 0xae, 0xc0, 0x47, 0xa0, 0x38, 0x0d, 0x48, 0x05, 0x41, 0x20, 0x64, 0x77, + 0x0b, 0xd1, 0x1e, 0x8e, 0x9a, 0x23, 0xed, 0x70, 0x18, 0x36, 0xe1, 0xbb, + 0x7f, 0xad, 0x1e, 0xe1, 0x8c, 0xff, 0xaa, 0xa6, 0xf3, 0x8e, 0x7a, 0x89, + 0x0b, 0xe0, 0x86, 0x73, 0xb2, 0x3c, 0xcf, 0x99, 0x97, 0x08, 0x56, 0x59, + 0xe4, 0x99, 0xdd, 0x69, 0xf7, 0xd7, 0x26, 0xbc, 0x0b, 0x64, 0x4c, 0x44, + 0x28, 0x25, 0xb3, 0xf2, 0x5c, 0x18, 0x7d, 0xa4, 0x17, 0x88, 0x1c, 0xce, + 0xe3, 0xe5, 0xe7, 0x47, 0x7b, 0xcb, 0x85, 0x39, 0x1d, 0x3a, 0x4f, 0xaa, + 0x67, 0x8a, 0x80, 0x78, 0x8d, 0x45, 0xba, 0xcf, 0xe0, 0x37, 0x1d, 0xac, + 0x02, 0x40, 0x24, 0x22, 0x38, 0x90, 0x29, 0xe2, 0x8f, 0xea, 0x81, 0xc2, + 0xfb, 0x9c, 0x0a, 0x76, 0x1f, 0xca, 0xcc, 0x26, 0xef, 0xea, 0xdf, 0x6b, + 0xd9, 0x2f, 0x08, 0x59, 0x7a, 0xd2, 0x18, 0xb8, 0x0c, 0xe9, 0x8a, 0xba, + 0x4c, 0x17, 0x4d, 0xe1, 0x90, 0x6c, 0x96, 0xbf, 0xbb, 0x0f, 0x07, 0xfe, + 0xf8, 0x2f, 0xa3, 0xc2, 0x89, 0x9e, 0x5e, 0x35, 0x6d, 0x0a, 0x2a, 0xec, + 0x0c, 0x9e, 0xd5, 0x18, 0x49, 0xf4, 0x0d, 0x84, 0xc3, 0x35, 0x5b, 0x28, + 0xe6, 0xa7, 0xbc, 0x55, 0x87, 0xae, 0x8c, 0x94, 0x3a, 0x36, 0xdb, 0x62, + 0x49, 0x1b, 0xbd, 0xc7, 0xee, 0x25, 0x20, 0xbc, 0x17, 0x75, 0x14, 0x84, + 0x6f, 0xa1, 0x31, 0x3a, 0x6c, 0x0f, 0x59, 0x3b, 0x3f, 0xd0, 0x77, 0x00, + 0xde, 0xe0, 0xc7, 0x05, 0x13, 0x0d, 0x77, 0xe8, 0x13, 0xe8, 0x47, 0x13, + 0x9f, 0xdc, 0x19, 0x74, 0x0c, 0xe3, 0x15, 0x89, 0xb9, 0x52, 0x9f, 0x73, + 0x10, 0x66, 0x5b, 0x3a, 0xf0, 0xc3, 0x4c, 0x9d, 0x44, 0xa3, 0xf8, 0xe3, + 0x99, 0x1c, 0x76, 0xfe, 0xc0, 0x56, 0x86, 0x4f, 0x70, 0x6e, 0x6a, 0x2a, + 0xef, 0x3f, 0x4b, 0x91, 0x6f, 0xc8, 0xf9, 0xeb, 0x05, 0x56, 0x8a, 0x21, + 0xa6, 0xd5, 0xa8, 0x0d, 0x0d, 0x57, 0x15, 0x46, 0xca, 0x6c, 0xae, 0xf4, + 0x0d, 0xf3, 0xbf, 0xef, 0x7c, 0x63, 0x78, 0x90, 0x17, 0x19, 0x9b, 0xb3, + 0x69, 0xaf, 0x7b, 0x5f, 0x06, 0xc2, 0x4b, 0x4a, 0x84, 0x0b, 0x7f, 0x2b, + 0x62, 0x42, 0x22, 0x4a, 0x7c, 0xd4, 0xa4, 0xa1, 0x4c, 0xe4, 0x32, 0xb4, + 0xef, 0xc4, 0x2f, 0x3b, 0x5d, 0x4a, 0x9f, 0x6d, 0x22, 0xe1, 0x5c, 0x40, + 0xcb, 0x7c, 0x5a, 0xf7, 0x8a, 0xbd, 0xbc, 0x9d, 0x8d, 0x24, 0x85, 0xeb, + 0x9d, 0x6c, 0x1e, 0xfd, 0x90, 0xc3, 0xc5, 0x5e, 0xdc, 0xf2, 0xd3, 0xd1, + 0x02, 0xc8, 0x16, 0xf3, 0x72, 0xb6, 0x48, 0xf3, 0xac, 0x4a, 0x5a, 0xfb, + 0x79, 0xaf, 0x40, 0xbb, 0x73, 0xbf, 0xa9, 0xe9, 0x33, 0x3a, 0xbb, 0xcb, + 0x75, 0xae, 0xbf, 0xe3, 0xec, 0x1c, 0x91, 0x48, 0xad, 0x7d, 0xba, 0x0c, + 0x77, 0xe6, 0x22, 0xe2, 0x99, 0x27, 0x6d, 0x64, 0xa2, 0xaa, 0x80, 0x53, + 0xcc, 0x10, 0x0d, 0x84, 0xda, 0x87, 0x9f, 0xbb, 0xa5, 0x4e, 0x5b, 0x7d, + 0x7d, 0x8d, 0x8d, 0x38, 0x1b, 0xbd, 0x1b, 0x32, 0xbf, 0xc8, 0xab, 0xa9, + 0x73, 0x48, 0x2c, 0xca, 0xe7, 0x94, 0xea, 0xd0, 0xb9, 0x7c, 0x43, 0xb9, + 0x9c, 0xe9, 0x1b, 0x93, 0x7f, 0xdc, 0x5b, 0xf0, 0x3e, 0xdf, 0x51, 0x78, + 0x8a, 0x9e, 0x76, 0xf3, 0x5a, 0x44, 0xfa, 0x17, 0x34, 0xb3, 0xd4, 0xb1, + 0xc8, 0x19, 0x0c, 0x9a, 0xe8, 0x73, 0x1f, 0xcc, 0x13, 0x86, 0x9e, 0x92, + 0x30, 0xb9, 0x17, 0x3a, 0xc6, 0x70, 0xd5, 0xe5, 0x1d, 0x0f, 0x3e, 0x1b, + 0x74, 0xf3, 0x06, 0x22, 0xd9, 0x52, 0xcf, 0x76, 0x2a, 0x52, 0x4b, 0x0b, + 0x9d, 0x7e, 0x70, 0x75, 0x6d, 0x04, 0xae, 0x2e, 0xfc, 0xdf, 0x11, 0x9a, + 0xee, 0x70, 0xe0, 0x02, 0xcf, 0xa8, 0x2d, 0xf8, 0xac, 0x99, 0x99, 0xce, + 0xc5, 0x79, 0xaa, 0xc1, 0x6d, 0xaf, 0x26, 0x82, 0xd5, 0xbb, 0x34, 0x2f, + 0x66, 0x04, 0x08, 0xcf, 0xea, 0x5f, 0xf2, 0x19, 0x80, 0x00, 0xff, 0xb2, + 0x96, 0x8d, 0x7b, 0xf4, 0xf6, 0xc7, 0xb1, 0xbd, 0x1c, 0xf6, 0xd1, 0xf8, + 0x18, 0x22, 0x58, 0x89, 0xf7, 0xd7, 0xfb, 0xb4, 0x5d, 0xcf, 0x06, 0x48, + 0x33, 0x80, 0xb5, 0x92, 0x44, 0xb0, 0x43, 0x91, 0xb4, 0xa8, 0xba, 0x07, + 0x5b, 0x02, 0xe2, 0xba, 0x0d, 0xd1, 0x09, 0xae, 0x2e, 0xc9, 0xd5, 0x1a, + 0x47, 0x4b, 0xd3, 0x11, 0x9d, 0xf1, 0xb1, 0x06, 0x34, 0x02, 0x86, 0x4d, + 0xc7, 0xb0, 0x40, 0xe0, 0xa7, 0xb8, 0x3a, 0x06, 0x53, 0x6d, 0xe1, 0x18, + 0x3d, 0xa4, 0xb6, 0x7e, 0x4c, 0x89, 0x22, 0xf6, 0x8d, 0xf0, 0x10, 0x92, + 0x24, 0x8a, 0x63, 0xb7, 0xda, 0xeb, 0x8e, 0xfa, 0x0c, 0x26, 0x41, 0xdc, + 0x06, 0xfe, 0x13, 0x7b, 0xfc, 0x27, 0x61, 0x6b, 0x13, 0x95, 0x37, 0x04, + 0xa9, 0x5e, 0xb3, 0xee, 0x8e, 0xc1, 0xc4, 0x54, 0x06, 0x72, 0x86, 0x26, + 0xad, 0x55, 0x7f, 0x1f, 0xa8, 0x2e, 0x89, 0x0b, 0x49, 0xab, 0x12, 0x19, + 0xe8, 0x9a, 0x59, 0x73, 0x6c, 0xfb, 0x0e, 0x84, 0x43, 0xe0, 0xb8, 0x18, + 0x5c, 0xed, 0xb9, 0xbd, 0xd2, 0x17, 0xef, 0xa5, 0x2c, 0x2f, 0xc0, 0xb4, + 0x9f, 0x87, 0x35, 0xe8, 0x0c, 0x1b, 0x42, 0xcf, 0x7f, 0x48, 0xaf, 0x20, + 0xd9, 0x48, 0x79, 0xb7, 0x10, 0xeb, 0xa3, 0xa7, 0xae, 0x2a, 0xb0, 0x62, + 0x4f, 0xe9, 0x25, 0xb5, 0x1d, 0x9a, 0x68, 0x09, 0xa9, 0x2e, 0x9d, 0xc4, + 0x3d, 0x51, 0xbe, 0xc4, 0x61, 0xad, 0xfc, 0xce, 0x46, 0x60, 0x91, 0x90, + 0xc5, 0xac, 0xed, 0xd9, 0x87, 0x27, 0xc9, 0x24, 0xa0, 0x01, 0x6b, 0x4d, + 0x34, 0x5f, 0x98, 0xab, 0x8e, 0xb0, 0x50, 0x1d, 0x31, 0x38, 0x74, 0xbf, + 0x78, 0xe2, 0xfd, 0x1b, 0x30, 0xa6, 0x1c, 0x08, 0x6b, 0x85, 0x57, 0xd1, + 0xf0, 0xfc, 0x90, 0x94, 0xc1, 0x9f, 0x47, 0x3c, 0x70, 0xa2, 0x8c, 0x1d, + 0x79, 0xb1, 0x6a, 0xb7, 0x71, 0x72, 0x31, 0x99, 0x9c, 0xba, 0x56, 0x2a, + 0x95, 0x6f, 0xf3, 0x4e, 0x63, 0x90, 0x72, 0xe9, 0x05, 0x37, 0xd2, 0xa5, + 0x68, 0xc8, 0x53, 0x6e, 0xb5, 0x67, 0xc6, 0xdc, 0xbb, 0x57, 0xa8, 0x46, + 0x84, 0xa0, 0xc4, 0x50, 0x16, 0xc7, 0x7c, 0xf1, 0xa0, 0x34, 0x4c, 0x8a, + 0x86, 0xf0, 0xe5, 0xff, 0x0d, 0x4f, 0xae, 0xf1, 0xf6, 0xfe, 0x6d, 0x2f, + 0x40, 0xda, 0xc7, 0xa8, 0xce, 0xc3, 0xed, 0xe8, 0x69, 0x83, 0xa4, 0x07, + 0x5e, 0x59, 0xce, 0x25, 0x47, 0xca, 0x03, 0x45, 0x21, 0xdd, 0x2a, 0x45, + 0xe3, 0x24, 0x0e, 0x88, 0xf8, 0x63, 0x22, 0xa4, 0x66, 0x12, 0x78, 0x23, + 0xa5, 0xea, 0xe3, 0x04, 0x6b, 0xad, 0x9b, 0x06, 0x26, 0xdc, 0xab, 0x1d, + 0xf3, 0x66, 0xc9, 0x35, 0xa2, 0x2b, 0xa6, 0x48, 0x7b, 0x79, 0x30, 0xa5, + 0xa1, 0x83, 0xc2, 0x29, 0xa3, 0x51, 0x22, 0x3d, 0x1e, 0x57, 0xce, 0x03, + 0x87, 0xdd, 0x86, 0xad, 0x18, 0x5b, 0x2d, 0x0f, 0x45, 0xd3, 0x7a, 0x5b, + 0x30, 0xe1, 0x2c, 0x84, 0xda, 0x77, 0x1e, 0xad, 0x8d, 0xda, 0xa4, 0x02, + 0xe6, 0x9b, 0xb7, 0xdf, 0xae, 0x8e, 0x02, 0x74, 0x3c, 0x88, 0xdd, 0xef, + 0x67, 0x07, 0x69, 0x77, 0x4e, 0x4d, 0x97, 0xa8, 0x63, 0xd8, 0x9e, 0xe5, + 0x35, 0x0c, 0x2c, 0xc5, 0x26, 0x67, 0x55, 0xc0, 0x50, 0x53, 0x13, 0x55, + 0x82, 0xa9, 0x05, 0x51, 0x04, 0x39, 0x11, 0x3b, 0x09, 0x20, 0x24, 0x28, + 0x82, 0x19, 0xe9, 0x63, 0x52, 0xab, 0xa3, 0x85, 0xe0, 0xc6, 0x43, 0x00, + 0x32, 0x17, 0x4e, 0x51, 0x50, 0x08, 0xeb, 0xf2, 0x7a, 0xf7, 0x18, 0x0d, + 0xac, 0x07, 0xd1, 0x7c, 0xa2, 0x43, 0x77, 0xe0, 0x1f, 0x92, 0x2f, 0xcb, + 0x60, 0x88, 0xdf, 0xa0, 0x82, 0x3d, 0x65, 0x46, 0xb3, 0x38, 0x95, 0x38, + 0x0b, 0xcb, 0xe9, 0x2a, 0x2c, 0x0b, 0x00, 0x6f, 0xaf, 0x6b, 0xf7, 0x59, + 0x97, 0x89, 0x6d, 0x94, 0xee, 0xa0, 0xc5, 0x5b, 0xa8, 0x2a, 0xd7, 0xc8, + 0x32, 0xd1, 0x70, 0xb7, 0x9e, 0x4e, 0x41, 0x43, 0x81, 0xf7, 0x0b, 0x49, + 0x5e, 0x1d, 0x39, 0xe7, 0x1e, 0xf3, 0xc6, 0xb6, 0xc4, 0xa5, 0x18, 0xb2, + 0x94, 0x26, 0x9e, 0x3f, 0xd2, 0x95, 0x21, 0x61, 0xd7, 0xe1, 0x0a, 0x11, + 0x36, 0xd4, 0xee, 0xf5, 0x41, 0x48, 0x83, 0x4d, 0x3f, 0xfa, 0x80, 0xbf, + 0x1c, 0x76, 0xf3, 0xa8, 0x2b, 0x72, 0x13, 0x70, 0x35, 0x0d, 0x61, 0x3d, + 0x39, 0xaf, 0xcc, 0xcf, 0xca, 0x6c, 0x2f, 0xc9, 0xb5, 0x3d, 0x15, 0x92, + 0xbb, 0x62, 0x9e, 0x43, 0xa7, 0x68, 0x77, 0xf9, 0x8b, 0x02, 0x21, 0x4c, + 0x59, 0x17, 0xf1, 0xaa, 0xf2, 0x3e, 0x6c, 0xbb, 0xf5, 0xb3, 0xe7, 0x25, + 0xe3, 0x28, 0x07, 0xd0, 0x13, 0x73, 0x79, 0xe6, 0x81, 0xcb, 0x8f, 0x8a, + 0xd4, 0xfd, 0xb4, 0x32, 0xf4, 0x10, 0xa4, 0xa9, 0x93, 0x47, 0xd8, 0x82, + 0xb1, 0x20, 0x0d, 0xae, 0xcc, 0xb4, 0x6c, 0xd2, 0xe0, 0x7b, 0x69, 0x07, + 0x08, 0x0e, 0xfb, 0x12, 0xb4, 0xa0, 0xa1, 0x6c, 0xba, 0xd6, 0x9c, 0x51, + 0x7c, 0x21, 0x45, 0x15, 0xd2, 0x48, 0xb5, 0x4e, 0xf2, 0x81, 0x98, 0x79, + 0x0b, 0x57, 0x31, 0x31, 0x6c, 0x54, 0x3f, 0x88, 0x86, 0x6f, 0x78, 0x77, + 0x9c, 0xba, 0xef, 0x47, 0x7f, 0x39, 0x9c, 0x6b, 0xac, 0x23, 0x17, 0x75, + 0x6d, 0x8f, 0x57, 0xfa, 0x3c, 0xaf, 0xa5, 0x28, 0xd5, 0xb6, 0x56, 0x97, + 0xd1, 0x32, 0x60, 0x2c, 0x7a, 0x10, 0x5d, 0x1f, 0x8f, 0x5b, 0xb1, 0xa1, + 0xb5, 0xe7, 0x07, 0x66, 0x5b, 0x3b, 0x80, 0x76, 0x33, 0x97, 0x1f, 0x72, + 0xe6, 0x1a, 0xda, 0x6c, 0x52, 0x66, 0xfd, 0x05, 0xa5, 0x8c, 0x35, 0xd4, + 0x8f, 0x61, 0x6c, 0x2e, 0x2b, 0xd2, 0x6f, 0xaf, 0x1a, 0x8e, 0x82, 0xff, + 0x63, 0x61, 0xa4, 0xae, 0x70, 0xb8, 0x72, 0x32, 0x31, 0xaa, 0xbc, 0x38, + 0x5c, 0xe6, 0x36, 0x6c, 0x4f, 0x63, 0x64, 0x2b, 0xa1, 0xfc, 0x74, 0x11, + 0x04, 0xbd, 0xd3, 0x16, 0xf4, 0x6c, 0xc3, 0xb2, 0x95, 0x2e, 0x4d, 0xbd, + 0x97, 0x10, 0x8f, 0xdb, 0xe6, 0x1f, 0x4f, 0xb2, 0x9f, 0x86, 0x48, 0x91, + 0x4e, 0x2d, 0x18, 0xe9, 0x03, 0x3b, 0xa4, 0x60, 0xa4, 0xba, 0x0d, 0x2a, + 0x04, 0x5b, 0x76, 0xed, 0xec, 0x03, 0x3b, 0xe2, 0xce, 0xb2, 0xb5, 0x86, + 0x40, 0x77, 0xf1, 0x07, 0xe7, 0x47, 0x11, 0x33, 0xfa, 0x96, 0x85, 0x4a, + 0xd0, 0x8e, 0x67, 0x4a, 0x80, 0xca, 0x0f, 0xb0, 0x9e, 0xff, 0x87, 0x26, + 0xa6, 0x8a, 0x9d, 0x8f, 0x28, 0x7d, 0x01, 0x21, 0x17, 0x32, 0x07, 0x2a, + 0x1d, 0xb2, 0xb0, 0x04, 0x43, 0x36, 0x86, 0x32, 0x07, 0x63, 0x22, 0xf2, + 0x47, 0x70, 0x5a, 0x87, 0x85, 0xe7, 0xb7, 0xee, 0xd0, 0xf9, 0xc8, 0x89, + 0x4b, 0x1b, 0x55, 0x35, 0x16, 0xf6, 0xba, 0xed, 0xf4, 0x7a, 0x38, 0x1a, + 0x74, 0x2f, 0xb8, 0x08, 0x28, 0x3b, 0x9c, 0x19, 0x89, 0x3c, 0xbb, 0x84, + 0xc7, 0x2f, 0x69, 0x80, 0xd3, 0x44, 0x51, 0x19, 0xe4, 0x1d, 0x2c, 0xd7, + 0xa1, 0x64, 0x3b, 0x8b, 0x3d, 0x24, 0x4f, 0xfc, 0xda, 0xf2, 0xd6, 0x9b, + 0x3c, 0x5f, 0x94, 0xf6, 0x63, 0xc6, 0x6a, 0x78, 0x03, 0x68, 0x6d, 0xc0, + 0xc9, 0x99, 0x16, 0x2f, 0x2b, 0x70, 0x93, 0x0b, 0xa1, 0xb2, 0xc9, 0xce, + 0x3c, 0xab, 0xce, 0x98, 0x31, 0x2b, 0x07, 0x2a, 0x88, 0x7f, 0xa3, 0xed, + 0x08, 0x29, 0xea, 0xf2, 0x92, 0x10, 0x00, 0xcb, 0x80, 0x39, 0x4b, 0x77, + 0x8f, 0x0e, 0x90, 0x72, 0xce, 0xa9, 0x70, 0x38, 0xf1, 0xc7, 0x09, 0xfc, + 0x5d, 0x8c, 0xc3, 0x1b, 0x5c, 0x36, 0x52, 0x34, 0x45, 0xa6, 0x4e, 0x98, + 0x86, 0x1e, 0x47, 0x84, 0x05, 0x42, 0x9b, 0x7d, 0xa9, 0xe2, 0x43, 0x2d, + 0x14, 0x37, 0x90, 0xa3, 0x95, 0xc1, 0x0f, 0x4d, 0xa9, 0x9b, 0xd3, 0x29, + 0xfe, 0xb1, 0x9e, 0x5c, 0xb9, 0xa2, 0x20, 0xdc, 0x02, 0x79, 0xd9, 0x0f, + 0xb3, 0x63, 0xd3, 0x34, 0x14, 0x3d, 0x2d, 0xb9, 0x6b, 0x06, 0x4c, 0xf5, + 0x9e, 0x0d, 0x6a, 0xe7, 0x95, 0x67, 0x61, 0xcf, 0xcd, 0x20, 0x6c, 0xc4, + 0xe0, 0xf3, 0x9b, 0xf7, 0x6a, 0x2f, 0xaa, 0x84, 0xb2, 0x2d, 0x4f, 0x4c, + 0xf1, 0x01, 0x23, 0xf2, 0x1d, 0x78, 0x5f, 0xe2, 0x8a, 0x23, 0xc5, 0xea, + 0x1f, 0x32, 0x1e, 0xea, 0xb3, 0x1f, 0xd7, 0xe2, 0xe3, 0x27, 0x5f, 0x41, + 0x7a, 0x5a, 0x59, 0x8c, 0x0e, 0x72, 0x4a, 0xd9, 0x44, 0xf4, 0x85, 0x11, + 0xb0, 0x95, 0x3b, 0x2c, 0xf4, 0xb3, 0x5c, 0x98, 0x0c, 0x8a, 0xcb, 0x17, + 0xbc, 0x59, 0x20, 0x3c, 0x67, 0x7c, 0x0f, 0xa7, 0x87, 0x26, 0x71, 0x62, + 0xe1, 0xa3, 0x67, 0x50, 0xc6, 0xe8, 0x5e, 0x29, 0xc5, 0xe5, 0xf3, 0x7f, + 0xa8, 0xfc, 0xa1, 0xa4, 0xe3, 0x35, 0x56, 0xa1, 0x72, 0x62, 0xa2, 0x6d, + 0x25, 0x5e, 0xb2, 0x03, 0xac, 0x19, 0x89, 0x21, 0xc8, 0x11, 0x67, 0xf6, + 0x76, 0x95, 0x83, 0x7c, 0x8b, 0x2b, 0x21, 0xce, 0x4f, 0x8a, 0x27, 0x30, + 0xcf, 0x5a, 0xc9, 0xd8, 0xca, 0xec, 0x7b, 0x0b, 0x16, 0x96, 0xb0, 0x1c, + 0xf1, 0xe6, 0x98, 0xd1, 0x7a, 0x3a, 0x3c, 0x4c, 0xce, 0x40, 0x7f, 0xef, + 0x18, 0xc6, 0x2e, 0x93, 0x36, 0x13, 0x43, 0xe7, 0xa8, 0x5c, 0xc5, 0xf6, + 0xf8, 0x02, 0x29, 0x56, 0x06, 0xe0, 0x54, 0xec, 0xa0, 0xd6, 0xfa, 0x19, + 0xbc, 0x62, 0xda, 0xe5, 0x18, 0x83, 0x63, 0x90, 0x71, 0xe9, 0x6e, 0xa8, + 0x6e, 0xf8, 0x9a, 0x23, 0x35, 0xbf, 0x51, 0x9e, 0x5b, 0xa5, 0xed, 0xdd, + 0x7e, 0x4c, 0xd4, 0xfe, 0xc9, 0xef, 0x3f, 0x9b, 0x3a, 0xa4, 0x69, 0x3a, + 0xc4, 0x98, 0xc5, 0x56, 0xe9, 0x19, 0xc6, 0x42, 0x9a, 0xe6, 0xad, 0x9e, + 0xc5, 0xb1, 0x43, 0xf9, 0x0c, 0xe4, 0x5f, 0xa6, 0x87, 0x98, 0x33, 0xa4, + 0x7a, 0x0d, 0x85, 0x08, 0x1d, 0x14, 0x9b, 0xd6, 0x97, 0x1c, 0xd1, 0x45, + 0xc0, 0xef, 0x55, 0x68, 0x01, 0x59, 0xc4, 0xef, 0xc7, 0x9a, 0xdb, 0xfc, + 0xab, 0xe6, 0x24, 0x2c, 0x33, 0xc1, 0xd5, 0x13, 0x6b, 0x75, 0xdb, 0x52, + 0xd8, 0xfa, 0x50, 0x4c, 0x60, 0xb0, 0xe6, 0x77, 0xfe, 0xf7, 0xb2, 0x4d, + 0xf2, 0x11, 0x07, 0xc3, 0xd4, 0xb1, 0x8a, 0xfa, 0xbd, 0xea, 0xa4, 0x18, + 0x64, 0x68, 0x25, 0x76, 0x84, 0x8d, 0x6f, 0x5a, 0x89, 0xe2, 0xcb, 0x5d, + 0x15, 0x6d, 0x76, 0xfc, 0x49, 0xa4, 0xfd, 0x5d, 0x15, 0x13, 0xb8, 0xf6, + 0x99, 0x4b, 0x49, 0x32, 0xe2, 0x10, 0xf8, 0xf0, 0xcb, 0xdb, 0x30, 0xf1, + 0xb8, 0x80, 0xe2, 0x25, 0x14, 0x66, 0x6b, 0x03, 0x61, 0xb0, 0x79, 0x25, + 0x64, 0xb8, 0x55, 0xf0, 0x2a, 0x2d, 0xe3, 0xc9, 0x33, 0x34, 0x40, 0x0d, + 0xee, 0x81, 0xe2, 0xc7, 0xb8, 0x89, 0xbb, 0x27, 0xa0, 0x54, 0x65, 0x57, + 0xd7, 0x24, 0x92, 0xfb, 0xd4, 0x97, 0x55, 0xbe, 0x2a, 0x5c, 0x3f, 0x26, + 0x4d, 0x7c, 0xc4, 0x72, 0x48, 0xf7, 0xa8, 0x63, 0x02, 0xf1, 0x47, 0x1f, + 0x00, 0x91, 0xa2, 0x61, 0xf7, 0x73, 0xc4, 0x16, 0x94, 0x62, 0xed, 0x0e, + 0x1c, 0xf7, 0xca, 0x2e, 0xc1, 0xe3, 0x8d, 0xac, 0xc7, 0xef, 0xb5, 0xce, + 0x5e, 0xf9, 0x83, 0x83, 0x61, 0x4c, 0x3d, 0x91, 0xc7, 0x8e, 0x24, 0x87, + 0xbb, 0xaa, 0xe2, 0x21, 0x4e, 0xee, 0xce, 0xb4, 0xfd, 0xc8, 0xc1, 0x7f, + 0xde, 0x19, 0xeb, 0x65, 0xed, 0x75, 0x22, 0x32, 0xec, 0x58, 0x92, 0x9d, + 0xb5, 0x6f, 0xad, 0x30, 0x9a, 0x01, 0x66, 0x87, 0x84, 0x2f, 0xf7, 0x03, + 0x5c, 0xf0, 0x7b, 0x76, 0xa6, 0x98, 0xb7, 0x09, 0xf4, 0xc8, 0x4f, 0x65, + 0xf7, 0xf9, 0xce, 0x42, 0x3f, 0xcb, 0xb0, 0x57, 0xb5, 0x86, 0xbf, 0xc7, + 0xbb, 0x48, 0x43, 0xa3, 0x87, 0xa7, 0x6d, 0x63, 0x39, 0xda, 0x56, 0xd5, + 0xf6, 0xd0, 0x80, 0x45, 0xee, 0xed, 0x49, 0x12, 0xe2, 0xde, 0xb7, 0x88, + 0xfe, 0xba, 0x85, 0x82, 0x9e, 0x03, 0x51, 0x2a, 0x07, 0xdf, 0x31, 0x53, + 0x25, 0x39, 0xed, 0xa1, 0x32, 0x9d, 0x23, 0xe1, 0xbb, 0xe3, 0xb9, 0x85, + 0x16, 0xfe, 0xef, 0x94, 0x6e, 0xd1, 0x5c, 0x6f, 0x09, 0x62, 0xda, 0xa3, + 0x1c, 0x5d, 0xb6, 0xea}; + +/* RSA4096 signing public key (DER format) */ +static const uint8_t wolfboot_test_pubkey_der[] = { + 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, + 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa0, 0x27, 0x67, + 0x2d, 0xd5, 0xcc, 0x32, 0xfe, 0x36, 0xff, 0xb7, 0x82, 0x11, 0x33, 0x82, + 0x11, 0xe4, 0x3c, 0xf2, 0x0f, 0x77, 0x7f, 0x6d, 0x00, 0xd0, 0x12, 0x4c, + 0x9a, 0xbf, 0xb6, 0x7b, 0x99, 0xfc, 0x4f, 0xa7, 0x6f, 0xdd, 0xec, 0x58, + 0xab, 0x28, 0x16, 0x27, 0x99, 0x99, 0x42, 0x08, 0xf0, 0xa8, 0x43, 0xef, + 0xb3, 0xa3, 0x8d, 0x4d, 0x81, 0xdd, 0x6d, 0xb5, 0x88, 0xf9, 0x9b, 0xe1, + 0x6f, 0x85, 0xfe, 0xfe, 0x00, 0xae, 0x53, 0xe8, 0xd2, 0x48, 0x2e, 0xe7, + 0x3f, 0x43, 0x02, 0x58, 0xd3, 0xe5, 0x14, 0xc5, 0x53, 0xcc, 0x8e, 0x96, + 0x33, 0xe9, 0xb4, 0x54, 0x77, 0xa3, 0xaf, 0xc7, 0x75, 0x09, 0x6f, 0x59, + 0x54, 0x68, 0xfb, 0x94, 0x72, 0x08, 0x30, 0xc0, 0x2c, 0x56, 0xab, 0x02, + 0xe9, 0xb0, 0x4c, 0xd1, 0x43, 0x44, 0x51, 0x87, 0x7b, 0x89, 0x85, 0xd6, + 0x80, 0x3e, 0xc0, 0x38, 0x3c, 0xc3, 0xaf, 0x4a, 0x81, 0xef, 0x2d, 0x99, + 0xdc, 0xc8, 0x26, 0x5a, 0x46, 0xe2, 0x23, 0x9e, 0x5e, 0x87, 0x26, 0x22, + 0xe5, 0xc8, 0xe7, 0x53, 0x58, 0x32, 0x82, 0x36, 0x10, 0xe8, 0x16, 0x3b, + 0x8c, 0xef, 0xd8, 0xc9, 0x71, 0xd5, 0x96, 0x1a, 0xaa, 0x95, 0x98, 0x9d, + 0xf9, 0x31, 0xb4, 0xf1, 0x51, 0x35, 0xc8, 0xda, 0x85, 0xe0, 0xb1, 0x41, + 0x84, 0x9c, 0xed, 0x5b, 0xe7, 0x5d, 0xfe, 0x33, 0x62, 0xbd, 0xb6, 0x3d, + 0x79, 0xa5, 0xbd, 0xc5, 0xe8, 0xdf, 0x15, 0xe9, 0xc2, 0x20, 0x43, 0x14, + 0xda, 0x14, 0x32, 0x5d, 0xbd, 0x2f, 0xd4, 0x74, 0xa7, 0xa3, 0xe1, 0x6e, + 0xe7, 0xfb, 0x5a, 0x00, 0x8f, 0x21, 0xad, 0x36, 0x9e, 0x95, 0x2d, 0x7f, + 0x33, 0x30, 0x91, 0x98, 0xba, 0xf2, 0xfb, 0x86, 0xe3, 0xc6, 0x8a, 0x06, + 0xd3, 0x0f, 0xdc, 0x75, 0xa2, 0x63, 0xe3, 0xc1, 0x7a, 0x1c, 0x11, 0x81, + 0x4b, 0xc1, 0x3c, 0xc5, 0x21, 0xc2, 0xa3, 0xd6, 0xd7, 0xee, 0xdb, 0xfe, + 0xa2, 0xad, 0xd2, 0x20, 0x32, 0x4f, 0x22, 0x94, 0x03, 0x4e, 0x2b, 0x22, + 0x14, 0x2c, 0x4b, 0x7b, 0x1a, 0x4d, 0x14, 0x52, 0xa3, 0x1e, 0x6f, 0xd1, + 0x35, 0xb1, 0x12, 0xf5, 0x27, 0xc8, 0x93, 0x14, 0x36, 0xea, 0xb3, 0x40, + 0xbf, 0xeb, 0xd3, 0x15, 0xe3, 0xcd, 0x80, 0xf4, 0xf9, 0x54, 0x41, 0xcc, + 0x23, 0xde, 0x7b, 0xba, 0x74, 0x2b, 0x91, 0x8f, 0x6d, 0xa3, 0x88, 0xeb, + 0x56, 0xb8, 0x4a, 0xe8, 0x8c, 0xef, 0xb7, 0xc0, 0x55, 0x93, 0x11, 0x2a, + 0xff, 0xbd, 0xe5, 0x4d, 0x56, 0x7b, 0x8d, 0x6f, 0x01, 0x65, 0x94, 0xa4, + 0x48, 0xe4, 0x6a, 0x87, 0xca, 0x1e, 0xb1, 0xa1, 0x57, 0x4d, 0x22, 0x36, + 0x5b, 0x1b, 0xe0, 0x3a, 0x6d, 0x2c, 0x0d, 0x52, 0xee, 0x3f, 0xb7, 0xfd, + 0x28, 0xc9, 0xd5, 0x23, 0x39, 0x3c, 0x3b, 0xa0, 0x18, 0x56, 0x39, 0xee, + 0x36, 0x8e, 0x8b, 0xa7, 0xa1, 0x6c, 0x46, 0x07, 0x58, 0x51, 0xf6, 0x1b, + 0x37, 0xc2, 0xdd, 0x3a, 0xc8, 0x37, 0x9e, 0x6b, 0x4e, 0xe9, 0xd6, 0x05, + 0x3d, 0x81, 0x4c, 0xe7, 0x8c, 0x5d, 0x59, 0x8d, 0x64, 0xb7, 0x85, 0xbb, + 0xba, 0x0a, 0x92, 0x43, 0x61, 0xe9, 0x00, 0x77, 0x7e, 0x12, 0xbc, 0x30, + 0xe9, 0xea, 0x12, 0xc4, 0xb5, 0x05, 0x9f, 0xa2, 0xc4, 0x6e, 0x29, 0xd5, + 0xbc, 0xc7, 0xc8, 0x76, 0xc5, 0x3a, 0x2c, 0x61, 0x9e, 0xfa, 0xcf, 0x12, + 0x3a, 0x3a, 0x93, 0x7c, 0x56, 0x1a, 0x97, 0x9b, 0xc0, 0xc6, 0x1a, 0x66, + 0xcd, 0x59, 0x34, 0x47, 0xed, 0xcc, 0x1b, 0xbb, 0x21, 0xd9, 0x8c, 0xe1, + 0x9f, 0x41, 0x6f, 0xfc, 0x11, 0xff, 0x9b, 0x63, 0xe7, 0x79, 0xb5, 0xd2, + 0x31, 0x3e, 0xa8, 0x97, 0x0b, 0xf1, 0x6c, 0x79, 0xf8, 0xa5, 0xf4, 0x03, + 0x78, 0x4b, 0x64, 0xbf, 0x9b, 0x02, 0x03, 0x01, 0x00, 0x01}; + +/* wolfBoot signed header with cert chain (RSA4096+SHA256, 4096 bytes) */ +static const uint8_t wolfboot_test_cert_chain_header[] = { + 0x57, 0x4f, 0x4c, 0x46, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x08, 0x00, + 0xbc, 0xff, 0xa9, 0x69, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x23, 0x00, 0x11, 0x0c, + 0x30, 0x82, 0x05, 0xf9, 0x30, 0x82, 0x03, 0xe1, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x14, 0x16, 0xed, 0x7a, 0xec, 0x5e, 0x63, 0xed, 0xdb, 0xe3, + 0x5a, 0x34, 0xa6, 0x76, 0x0f, 0x7b, 0x24, 0xbd, 0xbb, 0x4a, 0x1d, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, + 0x05, 0x00, 0x30, 0x7a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, + 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, + 0x04, 0x08, 0x0c, 0x0a, 0x43, 0x61, 0x6c, 0x69, 0x66, 0x6f, 0x72, 0x6e, + 0x69, 0x61, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, + 0x0d, 0x53, 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, 0x73, + 0x63, 0x6f, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, + 0x0e, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, + 0x0c, 0x07, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x13, 0x30, + 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0a, 0x4d, 0x79, 0x20, 0x52, + 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x36, + 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x31, 0x32, 0x31, 0x35, 0x5a, 0x17, + 0x0d, 0x33, 0x31, 0x30, 0x33, 0x30, 0x34, 0x32, 0x32, 0x31, 0x32, 0x31, + 0x35, 0x5a, 0x30, 0x81, 0x8a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, + 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, + 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x43, 0x61, 0x6c, 0x69, 0x66, 0x6f, 0x72, + 0x6e, 0x69, 0x61, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x07, + 0x0c, 0x0d, 0x53, 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, + 0x73, 0x63, 0x6f, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, + 0x0c, 0x0e, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, + 0x0b, 0x0c, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x69, + 0x61, 0x74, 0x65, 0x20, 0x43, 0x41, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x0c, 0x12, 0x4d, 0x79, 0x20, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x20, 0x43, 0x41, 0x30, + 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, + 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xd7, 0xdc, 0x80, 0xc0, + 0x57, 0x47, 0xfc, 0x68, 0xf6, 0xd5, 0x66, 0xf3, 0xb9, 0xbe, 0x18, 0x41, + 0xab, 0x25, 0xe2, 0x07, 0x2b, 0x29, 0x0c, 0x31, 0x51, 0x12, 0x65, 0x85, + 0x90, 0x0a, 0x8e, 0x7f, 0xc9, 0x93, 0x72, 0x06, 0xe3, 0xc2, 0xee, 0x1d, + 0xd6, 0xd3, 0xf3, 0xfe, 0x86, 0x61, 0x89, 0x8c, 0x5b, 0x98, 0xe8, 0x44, + 0xc7, 0x18, 0x36, 0x2e, 0xe4, 0x87, 0xe0, 0x66, 0x85, 0xb0, 0x3f, 0xbb, + 0x03, 0xd6, 0x3e, 0xcb, 0x14, 0xe9, 0xf0, 0x0b, 0xeb, 0xc0, 0x98, 0xaf, + 0xf6, 0xef, 0x50, 0xc9, 0x15, 0x7b, 0x5b, 0x22, 0x34, 0xf9, 0xba, 0xcb, + 0xfa, 0xf9, 0x21, 0x51, 0x62, 0x40, 0x64, 0xc7, 0x1f, 0x15, 0x0d, 0x7b, + 0x9d, 0x2a, 0x3a, 0x05, 0xa7, 0xd2, 0x75, 0x22, 0x17, 0x5b, 0x0b, 0xb5, + 0x08, 0x0b, 0x25, 0x06, 0x6e, 0xaa, 0x1e, 0xa9, 0xba, 0x91, 0xef, 0x4c, + 0xaf, 0xb4, 0xf8, 0xbb, 0xbe, 0x28, 0x07, 0x6b, 0x9f, 0x6c, 0xf2, 0xf6, + 0xd0, 0xa9, 0x88, 0x18, 0x8b, 0xc1, 0x5d, 0xea, 0x9f, 0x68, 0xf2, 0xd3, + 0xc0, 0x9f, 0x3b, 0xed, 0xa9, 0x8d, 0xb7, 0x1b, 0xb5, 0x2e, 0x24, 0x59, + 0x3a, 0x9a, 0xd7, 0x66, 0xd0, 0x25, 0x74, 0x89, 0xf0, 0x9d, 0xcf, 0x2e, + 0x98, 0x4d, 0x8e, 0x73, 0x5a, 0x7e, 0x6c, 0xaa, 0xe1, 0x4f, 0x23, 0x3f, + 0x6a, 0x8f, 0x26, 0x04, 0xc1, 0xc6, 0xcf, 0xff, 0x54, 0x91, 0xd5, 0xd4, + 0x8d, 0xb7, 0x6c, 0x09, 0xb0, 0x61, 0xe5, 0x96, 0x5c, 0x4d, 0x6c, 0xde, + 0x5b, 0xc7, 0xcd, 0x4d, 0xf9, 0x87, 0x72, 0xe7, 0x8c, 0xe8, 0xf2, 0x1b, + 0xc1, 0x2d, 0xf3, 0x3e, 0xd2, 0x10, 0xf4, 0x14, 0x4d, 0x7b, 0xa2, 0xe6, + 0x36, 0xb1, 0x5f, 0x2d, 0xb8, 0xdb, 0xd4, 0xa0, 0xf1, 0x7f, 0x95, 0x78, + 0x8e, 0x48, 0xb2, 0x57, 0x2d, 0xea, 0x8d, 0xd1, 0x45, 0xb0, 0xf9, 0x73, + 0xa6, 0xd3, 0x72, 0xff, 0x4d, 0x7d, 0xd1, 0x98, 0xcf, 0xe8, 0x06, 0xc6, + 0xf0, 0xd9, 0x75, 0x01, 0x85, 0x7b, 0x1b, 0x17, 0xf3, 0x65, 0xa3, 0xdc, + 0xef, 0x5a, 0x34, 0x98, 0x21, 0x80, 0x97, 0xa9, 0xf9, 0x69, 0x8a, 0x3c, + 0x78, 0x54, 0xf7, 0x8b, 0x78, 0x27, 0x20, 0x68, 0x06, 0xfa, 0x4a, 0x28, + 0x44, 0x4f, 0xc0, 0xf3, 0x6c, 0x68, 0x08, 0x90, 0x15, 0x8a, 0x20, 0x18, + 0x79, 0xe9, 0xda, 0x9b, 0x89, 0x65, 0xee, 0x61, 0x5c, 0x47, 0x67, 0x2e, + 0xb4, 0x85, 0xb1, 0xbe, 0x88, 0x7d, 0xcf, 0x32, 0x6d, 0xb1, 0x31, 0x5b, + 0x9c, 0xa9, 0x99, 0x7f, 0xae, 0xc2, 0xa6, 0xef, 0xaf, 0x47, 0x8a, 0x67, + 0xf9, 0x29, 0xe3, 0x98, 0x22, 0x71, 0x52, 0x4f, 0xa5, 0x10, 0x21, 0x12, + 0x27, 0x1a, 0xc8, 0x50, 0xd9, 0xc1, 0xf7, 0x72, 0xc2, 0x65, 0x4e, 0x58, + 0x90, 0xda, 0xf0, 0xf6, 0x53, 0x9e, 0x06, 0x96, 0x21, 0xed, 0xb3, 0xe4, + 0xe6, 0x36, 0xe3, 0xf4, 0x7b, 0x9a, 0x42, 0x58, 0xc3, 0x7d, 0x88, 0x65, + 0x50, 0x09, 0xc9, 0x0c, 0x80, 0xb0, 0x41, 0x25, 0xbd, 0x88, 0x84, 0x10, + 0xe3, 0xde, 0x95, 0xc4, 0x84, 0xf0, 0x64, 0xea, 0x40, 0xc6, 0x44, 0xdc, + 0x9b, 0xdd, 0x46, 0x95, 0x89, 0x4f, 0xb4, 0x76, 0x76, 0x65, 0xbc, 0x76, + 0x53, 0x07, 0x2d, 0x64, 0x4f, 0x40, 0x77, 0x39, 0xf7, 0x79, 0x1b, 0x80, + 0x67, 0x82, 0x72, 0x59, 0xfb, 0xf9, 0x9e, 0x46, 0x6f, 0x14, 0x0d, 0x27, + 0x1b, 0x26, 0x9b, 0xa5, 0x5a, 0xb6, 0xa1, 0x2c, 0xe8, 0x8d, 0x26, 0xb5, + 0x5c, 0x21, 0xeb, 0x78, 0xf0, 0x25, 0xdc, 0x96, 0xb2, 0x45, 0x7c, 0xa2, + 0x96, 0xdf, 0x28, 0x48, 0xee, 0x02, 0x3c, 0x4b, 0xbb, 0x8e, 0xab, 0x25, + 0xc4, 0x04, 0x7a, 0x46, 0x43, 0x84, 0x45, 0xfd, 0xf8, 0xaf, 0x4f, 0xcc, + 0x8b, 0xd1, 0x4c, 0xbf, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x66, 0x30, + 0x64, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, + 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x00, 0x30, 0x0e, 0x06, + 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, + 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, + 0x71, 0xcb, 0xce, 0x99, 0x4f, 0xf5, 0xb0, 0x6a, 0x08, 0x75, 0x6c, 0x58, + 0x25, 0x40, 0xe7, 0x48, 0x25, 0xa7, 0xb7, 0x26, 0x30, 0x1f, 0x06, 0x03, + 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xc0, 0x2a, 0xe6, + 0x47, 0x23, 0x22, 0x2b, 0x1d, 0x9c, 0x3f, 0x70, 0x10, 0x35, 0xd6, 0xcd, + 0xd4, 0xc0, 0x07, 0xda, 0xaa, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, + 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, + 0x00, 0x6c, 0x1b, 0xd0, 0x33, 0x85, 0x1f, 0x7e, 0x9c, 0x98, 0x55, 0x86, + 0xc5, 0x6c, 0xda, 0xf7, 0x35, 0x69, 0x6a, 0x96, 0x57, 0xc4, 0xc8, 0xad, + 0xbe, 0x71, 0xa2, 0xba, 0xd4, 0x92, 0xef, 0xcb, 0x9d, 0x1b, 0x60, 0xbc, + 0xe3, 0xc6, 0x79, 0x8e, 0x4c, 0x7d, 0x43, 0xc4, 0x5b, 0xe7, 0xd4, 0xbe, + 0x72, 0x83, 0xcb, 0xc7, 0xc6, 0xf9, 0x30, 0x22, 0xf4, 0xc8, 0x61, 0x2f, + 0xc9, 0xa8, 0xc7, 0x61, 0xc5, 0xa2, 0xfc, 0x73, 0xe6, 0x69, 0x94, 0xb2, + 0xc0, 0x01, 0x5a, 0xe6, 0x69, 0xad, 0xc4, 0x1d, 0xad, 0x18, 0xe3, 0xf6, + 0x3f, 0x61, 0x46, 0xb7, 0x34, 0xfe, 0x28, 0x87, 0x57, 0xdc, 0x57, 0x51, + 0x4f, 0x35, 0x7a, 0x48, 0xf4, 0x3e, 0xf4, 0x8c, 0xf8, 0xbe, 0xf2, 0x7b, + 0x4b, 0x97, 0x9a, 0x25, 0x85, 0x51, 0xc4, 0xf7, 0x24, 0x32, 0xdb, 0xe8, + 0xf6, 0x39, 0x69, 0x48, 0x93, 0xbe, 0xca, 0x77, 0xb3, 0xce, 0x34, 0xad, + 0xfc, 0xf3, 0x90, 0x93, 0xc7, 0x8d, 0xc4, 0xaf, 0xa2, 0x9b, 0xb0, 0x4c, + 0xc3, 0xbc, 0x47, 0x67, 0xd4, 0x42, 0x0d, 0xee, 0x17, 0xac, 0xc1, 0x54, + 0xe1, 0x4e, 0x5a, 0x01, 0x5c, 0x02, 0x4d, 0x84, 0x2d, 0x31, 0xd5, 0x9c, + 0x63, 0x73, 0xe3, 0x4e, 0xb6, 0xd6, 0xf9, 0x59, 0x78, 0x49, 0x9b, 0x34, + 0xd2, 0xd1, 0x89, 0x19, 0xab, 0x88, 0x32, 0xf6, 0xb4, 0xe5, 0x0d, 0x93, + 0xb7, 0x30, 0x4d, 0xe6, 0x8d, 0xd9, 0x36, 0xda, 0xf6, 0xfa, 0xf6, 0x6a, + 0x42, 0x2d, 0x98, 0x95, 0xb5, 0xe2, 0x5f, 0xd9, 0x1f, 0x2c, 0x34, 0xc6, + 0xcf, 0x9c, 0x99, 0xe7, 0x81, 0xee, 0xb5, 0xb9, 0x6f, 0xc6, 0xec, 0x0e, + 0x7d, 0x58, 0x08, 0x52, 0xd0, 0x20, 0x3b, 0x8e, 0x65, 0x02, 0x06, 0x24, + 0xab, 0x35, 0x72, 0xd1, 0x6e, 0x96, 0xe3, 0x26, 0x93, 0x8f, 0x7b, 0x10, + 0x53, 0x47, 0xba, 0xf9, 0x77, 0x50, 0xac, 0x15, 0xf9, 0x42, 0x5b, 0xea, + 0x71, 0xa4, 0x40, 0xd1, 0x2e, 0x0f, 0x9b, 0xed, 0x06, 0xc4, 0xc0, 0x32, + 0xa8, 0x36, 0xab, 0x48, 0x00, 0xa0, 0x69, 0xc6, 0x78, 0x6e, 0xe6, 0xed, + 0xd6, 0x7e, 0xbf, 0xeb, 0xf0, 0x6d, 0x70, 0xb3, 0x15, 0x50, 0x84, 0x82, + 0x0d, 0xd1, 0xf0, 0x5f, 0xa6, 0xbc, 0xd3, 0xbf, 0x30, 0x35, 0x31, 0xcf, + 0x93, 0xc4, 0x29, 0x88, 0x62, 0x4d, 0x9c, 0x87, 0x2a, 0x0e, 0xb3, 0x11, + 0x8a, 0x00, 0x3b, 0x26, 0xd1, 0x05, 0xf8, 0x70, 0x15, 0x0f, 0x9b, 0xe3, + 0x12, 0x97, 0xf1, 0xf2, 0x40, 0xeb, 0x7c, 0x65, 0x7d, 0xe2, 0x05, 0x1b, + 0x94, 0x55, 0x9f, 0xee, 0x34, 0x98, 0xd6, 0x48, 0x75, 0xc4, 0x21, 0x7c, + 0x78, 0x69, 0xec, 0x8e, 0x8d, 0xb8, 0xd4, 0xb2, 0x61, 0xfe, 0x82, 0x2c, + 0x6b, 0x36, 0xa3, 0x92, 0x58, 0x84, 0xab, 0x3c, 0x2d, 0x48, 0x52, 0x3c, + 0x8f, 0xb8, 0x66, 0x71, 0x50, 0x6e, 0x53, 0x51, 0xaa, 0xfb, 0xc6, 0x4f, + 0xed, 0x3c, 0x09, 0xb4, 0x64, 0x73, 0x4d, 0xdf, 0xd7, 0x8d, 0xa4, 0x40, + 0x75, 0xea, 0x4d, 0x6a, 0x18, 0x6a, 0x11, 0xb1, 0x4c, 0x24, 0x94, 0x45, + 0x42, 0x17, 0x0f, 0x69, 0x9b, 0x71, 0x6d, 0x6e, 0xf0, 0x98, 0x84, 0x84, + 0x2d, 0x1c, 0x18, 0x0e, 0xb3, 0x33, 0xaf, 0x43, 0x97, 0x91, 0x56, 0x60, + 0x8b, 0x9d, 0x57, 0xaf, 0x4f, 0x6d, 0x6f, 0x6b, 0x85, 0x60, 0xe7, 0xd0, + 0xe0, 0xaf, 0x8c, 0x5f, 0xf9, 0x10, 0xcb, 0xe4, 0xb9, 0xbd, 0x49, 0x29, + 0xf5, 0x6e, 0xa7, 0xab, 0x93, 0x0a, 0x23, 0xe4, 0xb0, 0x50, 0xd2, 0x4c, + 0x88, 0x4d, 0x93, 0xec, 0xe8, 0x0a, 0x9a, 0xf2, 0x55, 0xb9, 0xf1, 0x01, + 0x85, 0x38, 0xaf, 0xa3, 0x99, 0x7f, 0xbb, 0x8d, 0xdd, 0x10, 0xf4, 0xea, + 0x70, 0x6b, 0xd3, 0x3c, 0xf8, 0x09, 0x95, 0xe4, 0xf3, 0x30, 0x82, 0x06, + 0x10, 0x30, 0x82, 0x03, 0xf8, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, + 0x4e, 0xf8, 0xa0, 0x79, 0x15, 0x2d, 0x45, 0x01, 0xbd, 0x97, 0x5e, 0x7a, + 0x32, 0x7a, 0x19, 0x36, 0x74, 0x76, 0xd6, 0xba, 0x30, 0x0d, 0x06, 0x09, + 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, + 0x81, 0x8a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, + 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, + 0x0c, 0x0a, 0x43, 0x61, 0x6c, 0x69, 0x66, 0x6f, 0x72, 0x6e, 0x69, 0x61, + 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0d, 0x53, + 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, 0x73, 0x63, 0x6f, + 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0e, 0x4d, + 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x0f, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, + 0x20, 0x43, 0x41, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x0c, 0x12, 0x4d, 0x79, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, + 0x64, 0x69, 0x61, 0x74, 0x65, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, + 0x32, 0x36, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x31, 0x32, 0x31, 0x35, + 0x5a, 0x17, 0x0d, 0x32, 0x37, 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x31, + 0x32, 0x31, 0x35, 0x5a, 0x30, 0x81, 0x84, 0x31, 0x0b, 0x30, 0x09, 0x06, + 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, + 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x43, 0x61, 0x6c, 0x69, 0x66, + 0x6f, 0x72, 0x6e, 0x69, 0x61, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, + 0x04, 0x07, 0x0c, 0x0d, 0x53, 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, + 0x63, 0x69, 0x73, 0x63, 0x6f, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, + 0x04, 0x0a, 0x0c, 0x0e, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, + 0x55, 0x04, 0x0b, 0x0c, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x13, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x82, 0x02, 0x22, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, + 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, + 0x82, 0x02, 0x01, 0x00, 0xa0, 0x27, 0x67, 0x2d, 0xd5, 0xcc, 0x32, 0xfe, + 0x36, 0xff, 0xb7, 0x82, 0x11, 0x33, 0x82, 0x11, 0xe4, 0x3c, 0xf2, 0x0f, + 0x77, 0x7f, 0x6d, 0x00, 0xd0, 0x12, 0x4c, 0x9a, 0xbf, 0xb6, 0x7b, 0x99, + 0xfc, 0x4f, 0xa7, 0x6f, 0xdd, 0xec, 0x58, 0xab, 0x28, 0x16, 0x27, 0x99, + 0x99, 0x42, 0x08, 0xf0, 0xa8, 0x43, 0xef, 0xb3, 0xa3, 0x8d, 0x4d, 0x81, + 0xdd, 0x6d, 0xb5, 0x88, 0xf9, 0x9b, 0xe1, 0x6f, 0x85, 0xfe, 0xfe, 0x00, + 0xae, 0x53, 0xe8, 0xd2, 0x48, 0x2e, 0xe7, 0x3f, 0x43, 0x02, 0x58, 0xd3, + 0xe5, 0x14, 0xc5, 0x53, 0xcc, 0x8e, 0x96, 0x33, 0xe9, 0xb4, 0x54, 0x77, + 0xa3, 0xaf, 0xc7, 0x75, 0x09, 0x6f, 0x59, 0x54, 0x68, 0xfb, 0x94, 0x72, + 0x08, 0x30, 0xc0, 0x2c, 0x56, 0xab, 0x02, 0xe9, 0xb0, 0x4c, 0xd1, 0x43, + 0x44, 0x51, 0x87, 0x7b, 0x89, 0x85, 0xd6, 0x80, 0x3e, 0xc0, 0x38, 0x3c, + 0xc3, 0xaf, 0x4a, 0x81, 0xef, 0x2d, 0x99, 0xdc, 0xc8, 0x26, 0x5a, 0x46, + 0xe2, 0x23, 0x9e, 0x5e, 0x87, 0x26, 0x22, 0xe5, 0xc8, 0xe7, 0x53, 0x58, + 0x32, 0x82, 0x36, 0x10, 0xe8, 0x16, 0x3b, 0x8c, 0xef, 0xd8, 0xc9, 0x71, + 0xd5, 0x96, 0x1a, 0xaa, 0x95, 0x98, 0x9d, 0xf9, 0x31, 0xb4, 0xf1, 0x51, + 0x35, 0xc8, 0xda, 0x85, 0xe0, 0xb1, 0x41, 0x84, 0x9c, 0xed, 0x5b, 0xe7, + 0x5d, 0xfe, 0x33, 0x62, 0xbd, 0xb6, 0x3d, 0x79, 0xa5, 0xbd, 0xc5, 0xe8, + 0xdf, 0x15, 0xe9, 0xc2, 0x20, 0x43, 0x14, 0xda, 0x14, 0x32, 0x5d, 0xbd, + 0x2f, 0xd4, 0x74, 0xa7, 0xa3, 0xe1, 0x6e, 0xe7, 0xfb, 0x5a, 0x00, 0x8f, + 0x21, 0xad, 0x36, 0x9e, 0x95, 0x2d, 0x7f, 0x33, 0x30, 0x91, 0x98, 0xba, + 0xf2, 0xfb, 0x86, 0xe3, 0xc6, 0x8a, 0x06, 0xd3, 0x0f, 0xdc, 0x75, 0xa2, + 0x63, 0xe3, 0xc1, 0x7a, 0x1c, 0x11, 0x81, 0x4b, 0xc1, 0x3c, 0xc5, 0x21, + 0xc2, 0xa3, 0xd6, 0xd7, 0xee, 0xdb, 0xfe, 0xa2, 0xad, 0xd2, 0x20, 0x32, + 0x4f, 0x22, 0x94, 0x03, 0x4e, 0x2b, 0x22, 0x14, 0x2c, 0x4b, 0x7b, 0x1a, + 0x4d, 0x14, 0x52, 0xa3, 0x1e, 0x6f, 0xd1, 0x35, 0xb1, 0x12, 0xf5, 0x27, + 0xc8, 0x93, 0x14, 0x36, 0xea, 0xb3, 0x40, 0xbf, 0xeb, 0xd3, 0x15, 0xe3, + 0xcd, 0x80, 0xf4, 0xf9, 0x54, 0x41, 0xcc, 0x23, 0xde, 0x7b, 0xba, 0x74, + 0x2b, 0x91, 0x8f, 0x6d, 0xa3, 0x88, 0xeb, 0x56, 0xb8, 0x4a, 0xe8, 0x8c, + 0xef, 0xb7, 0xc0, 0x55, 0x93, 0x11, 0x2a, 0xff, 0xbd, 0xe5, 0x4d, 0x56, + 0x7b, 0x8d, 0x6f, 0x01, 0x65, 0x94, 0xa4, 0x48, 0xe4, 0x6a, 0x87, 0xca, + 0x1e, 0xb1, 0xa1, 0x57, 0x4d, 0x22, 0x36, 0x5b, 0x1b, 0xe0, 0x3a, 0x6d, + 0x2c, 0x0d, 0x52, 0xee, 0x3f, 0xb7, 0xfd, 0x28, 0xc9, 0xd5, 0x23, 0x39, + 0x3c, 0x3b, 0xa0, 0x18, 0x56, 0x39, 0xee, 0x36, 0x8e, 0x8b, 0xa7, 0xa1, + 0x6c, 0x46, 0x07, 0x58, 0x51, 0xf6, 0x1b, 0x37, 0xc2, 0xdd, 0x3a, 0xc8, + 0x37, 0x9e, 0x6b, 0x4e, 0xe9, 0xd6, 0x05, 0x3d, 0x81, 0x4c, 0xe7, 0x8c, + 0x5d, 0x59, 0x8d, 0x64, 0xb7, 0x85, 0xbb, 0xba, 0x0a, 0x92, 0x43, 0x61, + 0xe9, 0x00, 0x77, 0x7e, 0x12, 0xbc, 0x30, 0xe9, 0xea, 0x12, 0xc4, 0xb5, + 0x05, 0x9f, 0xa2, 0xc4, 0x6e, 0x29, 0xd5, 0xbc, 0xc7, 0xc8, 0x76, 0xc5, + 0x3a, 0x2c, 0x61, 0x9e, 0xfa, 0xcf, 0x12, 0x3a, 0x3a, 0x93, 0x7c, 0x56, + 0x1a, 0x97, 0x9b, 0xc0, 0xc6, 0x1a, 0x66, 0xcd, 0x59, 0x34, 0x47, 0xed, + 0xcc, 0x1b, 0xbb, 0x21, 0xd9, 0x8c, 0xe1, 0x9f, 0x41, 0x6f, 0xfc, 0x11, + 0xff, 0x9b, 0x63, 0xe7, 0x79, 0xb5, 0xd2, 0x31, 0x3e, 0xa8, 0x97, 0x0b, + 0xf1, 0x6c, 0x79, 0xf8, 0xa5, 0xf4, 0x03, 0x78, 0x4b, 0x64, 0xbf, 0x9b, + 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x72, 0x30, 0x70, 0x30, 0x09, 0x06, + 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03, + 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05, 0xa0, + 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x0c, 0x30, 0x0a, 0x06, + 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x1d, 0x06, + 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x83, 0xd0, 0xce, 0x39, + 0x34, 0x09, 0xd2, 0xee, 0x8b, 0xc1, 0x24, 0xc8, 0xcb, 0x53, 0x67, 0xd6, + 0x2f, 0x7a, 0x81, 0xc5, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, + 0x18, 0x30, 0x16, 0x80, 0x14, 0x71, 0xcb, 0xce, 0x99, 0x4f, 0xf5, 0xb0, + 0x6a, 0x08, 0x75, 0x6c, 0x58, 0x25, 0x40, 0xe7, 0x48, 0x25, 0xa7, 0xb7, + 0x26, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, + 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x8f, 0x66, 0x0d, + 0x91, 0x61, 0x72, 0xed, 0x66, 0xf3, 0x44, 0xf2, 0x63, 0x86, 0xd1, 0xe4, + 0x78, 0x5b, 0x3b, 0xc7, 0xdc, 0x81, 0x70, 0x33, 0x80, 0x6a, 0xaf, 0xb5, + 0x1c, 0x01, 0x64, 0x5f, 0x14, 0xee, 0x75, 0x14, 0xf3, 0x4c, 0x58, 0x5a, + 0xb5, 0x41, 0x20, 0x82, 0xd2, 0x2f, 0x54, 0xf8, 0x41, 0x7c, 0x72, 0x3e, + 0x2c, 0x4d, 0xf0, 0xb5, 0xf2, 0xe9, 0x60, 0x9c, 0xfd, 0xcc, 0x8b, 0x65, + 0xb5, 0xef, 0xca, 0x75, 0x71, 0x82, 0x47, 0x60, 0x6b, 0x0e, 0x5c, 0x54, + 0x19, 0x16, 0x8b, 0xdd, 0x1f, 0x42, 0xd6, 0xb2, 0xc6, 0x5c, 0xfd, 0x89, + 0xa5, 0xe0, 0x1a, 0x87, 0xbb, 0x6e, 0x19, 0x02, 0x80, 0x99, 0xa2, 0x40, + 0x05, 0x01, 0x39, 0xff, 0x25, 0x21, 0xc5, 0xca, 0x0f, 0x45, 0x9e, 0x8f, + 0xdf, 0x43, 0xf8, 0x44, 0x62, 0xc3, 0x6c, 0x32, 0xc2, 0x4b, 0x44, 0x6b, + 0x38, 0xf3, 0x1c, 0x70, 0xc5, 0xcb, 0x6f, 0xc7, 0x8c, 0x19, 0x35, 0x59, + 0x80, 0x62, 0x30, 0x25, 0x24, 0x9d, 0x60, 0x35, 0xf5, 0x3e, 0xff, 0xfe, + 0x6a, 0x4e, 0x3a, 0x4f, 0xe1, 0x12, 0x42, 0x00, 0x1d, 0x56, 0x86, 0x44, + 0x1d, 0xad, 0x30, 0xbb, 0xfc, 0xf6, 0x87, 0x31, 0x3a, 0x74, 0xe8, 0x2b, + 0x76, 0x0d, 0xc1, 0x5d, 0xd8, 0x5e, 0xcc, 0x3f, 0x86, 0x5c, 0xaf, 0x6a, + 0x61, 0x0c, 0x84, 0xfe, 0x43, 0x11, 0x47, 0x94, 0xe3, 0xff, 0x6a, 0xd3, + 0x06, 0xea, 0x34, 0x5d, 0x70, 0x61, 0x81, 0x45, 0xcb, 0x69, 0x32, 0x65, + 0x47, 0xb4, 0xb3, 0x37, 0xf5, 0x7d, 0x4f, 0xf3, 0x82, 0xb3, 0x82, 0xcb, + 0xc2, 0x80, 0x28, 0xd9, 0x20, 0x9d, 0xc0, 0xda, 0x70, 0x08, 0x92, 0x85, + 0x00, 0x40, 0xa8, 0x95, 0x12, 0x83, 0x99, 0x53, 0x15, 0x52, 0x40, 0x91, + 0x65, 0x14, 0x94, 0x84, 0xf6, 0x9a, 0xd5, 0x16, 0xcc, 0x6d, 0xa7, 0x05, + 0x54, 0x3c, 0xd2, 0x56, 0xd4, 0x4c, 0x7d, 0x81, 0x6f, 0x4a, 0xb2, 0x6b, + 0xbc, 0x03, 0x7b, 0xd1, 0xc7, 0x03, 0xef, 0xbf, 0x3f, 0x11, 0x9d, 0x68, + 0x57, 0xf8, 0xbd, 0x6a, 0xac, 0x61, 0xeb, 0x3a, 0xba, 0x3b, 0x51, 0x94, + 0x32, 0x29, 0xe2, 0xea, 0x60, 0xde, 0x46, 0xeb, 0xf2, 0x4b, 0xd7, 0xb7, + 0x20, 0xd0, 0x8f, 0xab, 0x0c, 0xe8, 0x91, 0x09, 0xe6, 0xa9, 0x70, 0x7f, + 0x4b, 0xa2, 0x22, 0x51, 0x9a, 0xef, 0x61, 0x9e, 0x8a, 0xdc, 0xdd, 0x62, + 0xaa, 0xc2, 0xfe, 0x4f, 0xac, 0xd0, 0x55, 0x0b, 0x45, 0xe5, 0xdb, 0x98, + 0xb0, 0x53, 0x2d, 0xbd, 0xbe, 0xdc, 0x10, 0xf7, 0x5b, 0x00, 0x85, 0xfc, + 0x91, 0x48, 0x0c, 0x20, 0x12, 0x07, 0xbd, 0x47, 0xa0, 0xcb, 0xf6, 0xbe, + 0x0c, 0x3f, 0x72, 0x7b, 0x0d, 0x48, 0xff, 0xa1, 0x9d, 0xa1, 0x19, 0x3b, + 0x9e, 0x08, 0x85, 0x5c, 0xfa, 0x60, 0x4a, 0xaf, 0xa9, 0xc4, 0xb9, 0x6a, + 0xb7, 0x9e, 0xc4, 0x27, 0xc1, 0xbc, 0xa9, 0xf3, 0xe1, 0xc0, 0x65, 0x03, + 0x06, 0x51, 0xf3, 0x5f, 0xff, 0x0b, 0x59, 0xdb, 0x40, 0x60, 0x8d, 0x3f, + 0x0b, 0xf2, 0x0b, 0xf3, 0x1c, 0xd3, 0x4a, 0xbb, 0x60, 0x13, 0x7f, 0xf2, + 0xbc, 0x17, 0xd0, 0xf0, 0x27, 0x62, 0xc0, 0xd4, 0xf7, 0xe4, 0x77, 0xa9, + 0x96, 0xa4, 0xf5, 0xbd, 0xbd, 0xbd, 0x2c, 0x63, 0x9a, 0xac, 0x4e, 0xde, + 0x18, 0xfe, 0x40, 0xc0, 0x55, 0xb2, 0xb6, 0x1b, 0x54, 0x5b, 0x2f, 0xd1, + 0x1f, 0x35, 0xc2, 0x75, 0xc1, 0xd3, 0x18, 0x1d, 0xdb, 0x3d, 0x82, 0xb3, + 0x09, 0xf6, 0xfc, 0xa7, 0xb6, 0x4f, 0x06, 0x17, 0xe0, 0x2e, 0xd1, 0x40, + 0x8f, 0x86, 0xef, 0x21, 0xce, 0x6d, 0x22, 0xc8, 0x93, 0x84, 0x54, 0x61, + 0x59, 0x93, 0xa2, 0x85, 0xbe, 0x3d, 0x59, 0x74, 0x66, 0xa1, 0x0a, 0xa7, + 0xf4, 0x14, 0xed, 0x7b, 0xbd, 0xff, 0xff, 0xff, 0x10, 0x00, 0x20, 0x00, + 0x08, 0x5d, 0xc1, 0xb0, 0x73, 0xa5, 0x30, 0xf0, 0xa7, 0x61, 0x8a, 0x54, + 0xbe, 0x6a, 0xf5, 0x9f, 0x6d, 0xda, 0x8a, 0x63, 0x45, 0xc1, 0x0e, 0xd8, + 0x01, 0x5b, 0xb7, 0x23, 0x20, 0xdb, 0xf3, 0x4b, 0xff, 0xff, 0xff, 0xff, + 0x03, 0x00, 0x20, 0x00, 0x02, 0x0f, 0x26, 0x33, 0x43, 0x4c, 0x4c, 0xda, + 0xde, 0x15, 0x7f, 0x92, 0x1f, 0xdc, 0xc0, 0x2e, 0x21, 0xfe, 0x4f, 0x0d, + 0x13, 0x22, 0x30, 0x9d, 0x9b, 0xb6, 0x58, 0x5d, 0x18, 0xca, 0x93, 0x8d, + 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x02, 0x36, 0xfb, 0xca, 0x64, + 0xa4, 0x02, 0xf6, 0x78, 0x46, 0x19, 0xe2, 0x7b, 0x99, 0xc5, 0x22, 0x21, + 0xb5, 0xfb, 0xe5, 0xe3, 0x85, 0xcb, 0x0c, 0x7c, 0xf3, 0xbc, 0xed, 0xfe, + 0xa7, 0xb8, 0xbe, 0xd5, 0x67, 0x0d, 0x25, 0x53, 0xe2, 0x51, 0xce, 0xb6, + 0x14, 0x64, 0x7c, 0x5f, 0xe7, 0x9e, 0x5d, 0xb9, 0x42, 0x3d, 0xe1, 0x4a, + 0x92, 0x41, 0x4e, 0x26, 0xe0, 0xf0, 0x13, 0x4b, 0xdd, 0xe4, 0xe3, 0x2c, + 0xa8, 0x56, 0x54, 0x9e, 0xf0, 0x72, 0x59, 0x09, 0x71, 0x84, 0x1e, 0x11, + 0x1b, 0x55, 0x79, 0x33, 0xdf, 0x50, 0x76, 0x32, 0x75, 0x3a, 0x59, 0xc4, + 0x7a, 0xea, 0xfb, 0xa4, 0x99, 0xa3, 0x04, 0x3c, 0x31, 0x0f, 0x47, 0x18, + 0xd4, 0xab, 0xb1, 0x89, 0x4f, 0x03, 0xb3, 0xfa, 0x8b, 0xdf, 0xef, 0x1c, + 0x35, 0x7b, 0x06, 0xdc, 0xef, 0x75, 0xa5, 0xaf, 0x5b, 0x0f, 0x50, 0xe5, + 0xde, 0x54, 0x0f, 0xa6, 0xcc, 0xc0, 0xed, 0x40, 0xf0, 0xac, 0x52, 0x96, + 0x6f, 0x57, 0xd5, 0x69, 0x18, 0xd3, 0xe0, 0x47, 0x01, 0x68, 0xac, 0xa3, + 0x6d, 0x4d, 0x07, 0x85, 0x2e, 0x8d, 0xfc, 0x7f, 0x84, 0x56, 0x4d, 0x4c, + 0x90, 0x76, 0xf4, 0xf8, 0x2e, 0x37, 0x70, 0x9a, 0xf1, 0xba, 0x93, 0xbb, + 0x28, 0xd7, 0x87, 0x2a, 0xd9, 0x86, 0x61, 0x1d, 0x96, 0x4f, 0x66, 0x71, + 0xcf, 0x8d, 0x5a, 0xf8, 0xa1, 0xcd, 0x9b, 0x49, 0xdf, 0xb0, 0x5c, 0x08, + 0xc4, 0x55, 0xc8, 0x78, 0x75, 0x98, 0xdf, 0x0f, 0x14, 0x82, 0x00, 0x51, + 0xd5, 0xca, 0xbe, 0x65, 0x14, 0x5d, 0x43, 0x42, 0xd5, 0x0f, 0xd5, 0x6d, + 0xcb, 0xf8, 0xbb, 0x8c, 0x8a, 0xdc, 0xcb, 0xd8, 0xc3, 0xac, 0x5c, 0x8a, + 0xae, 0x42, 0xdc, 0x8a, 0x8b, 0x8f, 0xa7, 0x34, 0xe1, 0xa4, 0xa6, 0x8f, + 0x29, 0xb1, 0x0b, 0xc7, 0x63, 0xdd, 0xd8, 0x7f, 0x43, 0x29, 0xfe, 0x43, + 0xe4, 0x32, 0x9b, 0x4e, 0xb9, 0x64, 0x04, 0x3d, 0x7b, 0x37, 0xe0, 0x4a, + 0xd3, 0x6b, 0x42, 0x24, 0x5e, 0x4f, 0x1a, 0x08, 0x7c, 0x2b, 0x7a, 0x2c, + 0xfa, 0xfb, 0xd0, 0x32, 0xda, 0x7c, 0x17, 0x30, 0x19, 0x51, 0x09, 0x87, + 0x62, 0xe3, 0x60, 0xe5, 0x46, 0x26, 0x79, 0xa8, 0x55, 0x10, 0xc6, 0xdc, + 0xee, 0x4f, 0xad, 0xd1, 0xe8, 0xb8, 0x87, 0xcc, 0x12, 0x9a, 0x65, 0xbe, + 0xe4, 0xec, 0x83, 0x11, 0x6e, 0xe2, 0x8d, 0x1a, 0xc1, 0xe3, 0x58, 0x33, + 0xc9, 0x4f, 0xb0, 0x13, 0x78, 0x63, 0x5d, 0x43, 0x9d, 0x0b, 0xc3, 0xfc, + 0xdc, 0xbe, 0xd3, 0x97, 0xb6, 0x17, 0x9a, 0xcb, 0xde, 0x65, 0xe7, 0xf2, + 0xf3, 0x7e, 0x27, 0xab, 0x9f, 0xd5, 0x06, 0xf9, 0x27, 0x30, 0x4a, 0xc3, + 0xf9, 0x2f, 0xfc, 0x64, 0x80, 0xf7, 0xe5, 0xdf, 0x34, 0xe7, 0xf2, 0x1d, + 0xd6, 0xcc, 0xcf, 0x30, 0xdc, 0x41, 0x7e, 0xa3, 0x16, 0x7f, 0x26, 0xea, + 0x2a, 0x8c, 0x88, 0x33, 0xac, 0x0a, 0x5c, 0x30, 0x1f, 0x79, 0x1a, 0x07, + 0x77, 0x6f, 0xb3, 0x10, 0x66, 0x34, 0x2d, 0x9c, 0x88, 0xdb, 0x43, 0xf1, + 0xad, 0x6d, 0x74, 0xba, 0x96, 0x26, 0x97, 0xc2, 0x5d, 0x65, 0x12, 0x44, + 0xb1, 0x2c, 0xa4, 0x37, 0xdc, 0xe1, 0xc8, 0xef, 0x72, 0xa2, 0xe2, 0xe7, + 0x06, 0xdd, 0xff, 0x34, 0x9a, 0xad, 0x15, 0x90, 0x84, 0xe4, 0x7d, 0x48, + 0xe7, 0x89, 0xa2, 0xfb, 0x99, 0x7b, 0x12, 0xd2, 0xdc, 0x5a, 0x1d, 0x24, + 0x0f, 0x79, 0xe5, 0xa3, 0x89, 0xe7, 0xca, 0x11, 0x5c, 0xf1, 0x12, 0xe5, + 0xce, 0xa1, 0x3c, 0xff, 0x0e, 0x29, 0xca, 0x6c, 0x31, 0x32, 0x84, 0x28, + 0x70, 0x15, 0xaa, 0xdc, 0xb8, 0xd6, 0x1c, 0x96, 0x77, 0x1b, 0xe0, 0xf1, + 0x6b, 0x38, 0x2e, 0xdf, 0xbc, 0x08, 0xe6, 0x89, 0x00, 0xbe, 0xa2, 0xb7, + 0x2a, 0x2a, 0x03, 0x61, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff}; + +/* Root CA certificate (DER format, RSA4096) */ +static const uint8_t wolfboot_test_root_ca_cert_der[] = { + 0x30, 0x82, 0x05, 0xe5, 0x30, 0x82, 0x03, 0xcd, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x14, 0x7d, 0xb6, 0xbe, 0xc6, 0x84, 0xed, 0xb9, 0x8c, 0xdb, + 0x53, 0x8e, 0x51, 0xac, 0x89, 0x50, 0x8e, 0x33, 0x16, 0xfe, 0x4d, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, + 0x05, 0x00, 0x30, 0x7a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, + 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, + 0x04, 0x08, 0x0c, 0x0a, 0x43, 0x61, 0x6c, 0x69, 0x66, 0x6f, 0x72, 0x6e, + 0x69, 0x61, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, + 0x0d, 0x53, 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, 0x73, + 0x63, 0x6f, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, + 0x0e, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, + 0x0c, 0x07, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x13, 0x30, + 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0a, 0x4d, 0x79, 0x20, 0x52, + 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x36, + 0x30, 0x33, 0x30, 0x35, 0x32, 0x32, 0x31, 0x32, 0x31, 0x34, 0x5a, 0x17, + 0x0d, 0x33, 0x36, 0x30, 0x33, 0x30, 0x32, 0x32, 0x32, 0x31, 0x32, 0x31, + 0x34, 0x5a, 0x30, 0x7a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, + 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, + 0x04, 0x08, 0x0c, 0x0a, 0x43, 0x61, 0x6c, 0x69, 0x66, 0x6f, 0x72, 0x6e, + 0x69, 0x61, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, + 0x0d, 0x53, 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, 0x73, + 0x63, 0x6f, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, + 0x0e, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, + 0x0c, 0x07, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x13, 0x30, + 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0a, 0x4d, 0x79, 0x20, 0x52, + 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, + 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, + 0x02, 0x01, 0x00, 0xa4, 0xf5, 0x03, 0x68, 0xdb, 0x81, 0xdc, 0x9a, 0xb1, + 0x92, 0x37, 0xb6, 0xa6, 0x0a, 0xc4, 0x8b, 0x14, 0xbc, 0x2d, 0x7d, 0xe3, + 0xa0, 0xeb, 0x0a, 0x1c, 0x8a, 0xf8, 0xa7, 0x98, 0xd8, 0x3b, 0x2a, 0x23, + 0xb2, 0x3a, 0x3d, 0x80, 0x01, 0x94, 0xc0, 0xd9, 0x07, 0xa9, 0xf8, 0x39, + 0x4a, 0xb1, 0x8a, 0xcd, 0x5e, 0x3f, 0x8a, 0x25, 0x8d, 0x38, 0xdd, 0x37, + 0xd0, 0x2d, 0x19, 0xb1, 0x34, 0x22, 0x5d, 0x15, 0x43, 0xc5, 0xda, 0x0b, + 0x44, 0x81, 0x8d, 0x43, 0x9c, 0x58, 0x78, 0xcb, 0x25, 0xf2, 0x9e, 0xca, + 0x97, 0x24, 0xb6, 0xd2, 0x9a, 0x50, 0xd0, 0xca, 0x28, 0x85, 0xba, 0x27, + 0xa8, 0x1e, 0x1b, 0x29, 0x52, 0x4a, 0xa2, 0x99, 0xe3, 0x6f, 0xc5, 0xeb, + 0x29, 0xec, 0x24, 0x94, 0xc0, 0x9f, 0x2a, 0x89, 0x80, 0x2e, 0xc6, 0x16, + 0x63, 0x8c, 0x47, 0x56, 0x05, 0xae, 0xe5, 0x20, 0x83, 0x7f, 0xa5, 0xb6, + 0xcd, 0xd1, 0xb3, 0xa0, 0xff, 0x5e, 0xe6, 0x9e, 0x84, 0xbf, 0xe2, 0xf7, + 0x3b, 0x5a, 0xba, 0xc2, 0x2d, 0x0e, 0x0c, 0x6b, 0x87, 0xbf, 0x89, 0xdd, + 0x50, 0xb5, 0xcd, 0x43, 0x0a, 0x8e, 0x04, 0x5d, 0x64, 0xc1, 0x70, 0x32, + 0x3f, 0x57, 0x2e, 0xf2, 0xc3, 0x86, 0xaa, 0x43, 0x37, 0x22, 0xa3, 0x12, + 0xf7, 0x76, 0xe2, 0x10, 0x3b, 0x81, 0x42, 0x81, 0xb7, 0xeb, 0x4f, 0xfb, + 0x63, 0x21, 0xd1, 0x14, 0xd3, 0x81, 0xac, 0x1e, 0xaa, 0x25, 0xf8, 0x20, + 0x6b, 0xf9, 0x77, 0xad, 0x93, 0x79, 0x7f, 0x21, 0x29, 0xa0, 0x2e, 0xb6, + 0x2d, 0x90, 0xb5, 0xda, 0xc6, 0xb7, 0x01, 0x95, 0xc1, 0x72, 0x12, 0x91, + 0x15, 0x7e, 0xe5, 0xd2, 0x60, 0x43, 0xba, 0x79, 0xab, 0x0a, 0x14, 0x32, + 0x75, 0x2f, 0x3a, 0x20, 0x86, 0x94, 0x90, 0x83, 0x34, 0x6b, 0x5d, 0x7d, + 0x57, 0x02, 0x47, 0x84, 0x23, 0x63, 0x9f, 0x82, 0xf5, 0x9d, 0x54, 0x76, + 0x8f, 0xf8, 0xde, 0x14, 0x0d, 0x32, 0x16, 0xc1, 0x01, 0x9b, 0xa8, 0x8e, + 0x73, 0xfe, 0xbe, 0x47, 0x8b, 0x4d, 0xa9, 0x0a, 0xd1, 0xbd, 0xb4, 0x17, + 0x88, 0x6b, 0x42, 0x8e, 0x03, 0x11, 0xc0, 0xa0, 0xce, 0xcc, 0x70, 0x47, + 0x8c, 0xb3, 0x61, 0x25, 0x09, 0x8a, 0xe0, 0xe9, 0x00, 0xd5, 0x6f, 0xa4, + 0x9f, 0x81, 0x8c, 0x82, 0x7f, 0x54, 0x0d, 0xb1, 0xce, 0xcf, 0x4c, 0x6e, + 0x8a, 0x08, 0xd3, 0x65, 0xe9, 0xcf, 0x8b, 0x9d, 0x6f, 0x1b, 0x4a, 0x92, + 0xa1, 0xe1, 0x3c, 0xef, 0x10, 0x81, 0xea, 0x12, 0x85, 0xe4, 0x26, 0x8e, + 0x16, 0xec, 0x7b, 0x4d, 0x8a, 0xbb, 0x37, 0x3a, 0xa5, 0xf7, 0x53, 0x5b, + 0xe3, 0x46, 0x9c, 0x96, 0xa9, 0x64, 0xf9, 0x4e, 0x79, 0x6f, 0x89, 0xd8, + 0x31, 0x23, 0x99, 0xa0, 0x09, 0x91, 0x39, 0x3f, 0x1d, 0x45, 0x1e, 0xe4, + 0xf3, 0x40, 0x09, 0xe1, 0x1b, 0xaa, 0x6f, 0x85, 0x72, 0xa9, 0xb7, 0x50, + 0xde, 0xe8, 0x5d, 0xf3, 0x49, 0x8b, 0x3c, 0x83, 0x98, 0x6d, 0x84, 0xcd, + 0x32, 0x40, 0xf8, 0x7c, 0xdb, 0xfe, 0x1e, 0xda, 0x82, 0xd1, 0x7e, 0x28, + 0xc2, 0x59, 0xbc, 0xf5, 0x30, 0x5a, 0x6d, 0xea, 0x57, 0x22, 0x24, 0x75, + 0x8d, 0x86, 0x19, 0x5c, 0x51, 0xe0, 0xf0, 0x0c, 0x16, 0xe7, 0x59, 0x73, + 0x7f, 0x14, 0x35, 0x96, 0x6e, 0x83, 0x56, 0x69, 0x7f, 0x66, 0x83, 0xe9, + 0x54, 0x9d, 0xa6, 0x84, 0x02, 0x2b, 0xc3, 0xce, 0x48, 0x36, 0xd2, 0xb9, + 0x28, 0x91, 0x95, 0x86, 0xf7, 0x1c, 0x0d, 0x92, 0x1c, 0xd0, 0x6d, 0xe9, + 0x6c, 0xb1, 0xb4, 0xab, 0x16, 0x9e, 0xc1, 0x74, 0x24, 0x41, 0x6e, 0xb3, + 0x42, 0xb9, 0xca, 0xca, 0xb7, 0xaf, 0xba, 0x2d, 0x1d, 0x9e, 0x6e, 0x9b, + 0x59, 0xfa, 0x8a, 0x04, 0x56, 0xb2, 0xb8, 0xd1, 0xbd, 0xad, 0x7b, 0x02, + 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1d, 0x06, 0x03, + 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc0, 0x2a, 0xe6, 0x47, 0x23, + 0x22, 0x2b, 0x1d, 0x9c, 0x3f, 0x70, 0x10, 0x35, 0xd6, 0xcd, 0xd4, 0xc0, + 0x07, 0xda, 0xaa, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, + 0x30, 0x16, 0x80, 0x14, 0xc0, 0x2a, 0xe6, 0x47, 0x23, 0x22, 0x2b, 0x1d, + 0x9c, 0x3f, 0x70, 0x10, 0x35, 0xd6, 0xcd, 0xd4, 0xc0, 0x07, 0xda, 0xaa, + 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, + 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, + 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0d, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, + 0x03, 0x82, 0x02, 0x01, 0x00, 0x46, 0xd3, 0x35, 0x53, 0xf3, 0x98, 0x44, + 0xff, 0x7a, 0x9b, 0xc2, 0x91, 0x5b, 0x33, 0x2e, 0x58, 0x29, 0x27, 0x19, + 0xf0, 0x8f, 0xb5, 0xd8, 0xb5, 0xf4, 0x72, 0x5a, 0x92, 0x3a, 0x73, 0x96, + 0xc7, 0x64, 0x79, 0x25, 0x7c, 0xfb, 0xdd, 0xc9, 0xfb, 0x59, 0x81, 0x23, + 0xb3, 0xf8, 0xc7, 0xa4, 0xbc, 0x29, 0x55, 0xb9, 0x15, 0x69, 0x04, 0x93, + 0xf6, 0x7c, 0x35, 0x89, 0x81, 0x7c, 0x67, 0xb9, 0xca, 0x99, 0x30, 0x3b, + 0x84, 0x4c, 0x52, 0x9b, 0xe1, 0x3c, 0x31, 0xaf, 0x2f, 0xaa, 0x78, 0x84, + 0x4a, 0x1a, 0x37, 0x57, 0x6e, 0xa0, 0x3d, 0x4e, 0xa3, 0x42, 0xaf, 0xa7, + 0x07, 0x99, 0xd5, 0x4d, 0x7d, 0x77, 0x05, 0xc4, 0xc6, 0x84, 0x11, 0x51, + 0x38, 0xdb, 0x3e, 0xd2, 0x60, 0xe8, 0x68, 0x8a, 0x00, 0x7f, 0x28, 0x9e, + 0x76, 0x11, 0x0b, 0xa9, 0x3f, 0x06, 0xd8, 0x65, 0x09, 0xfa, 0xca, 0xe0, + 0xb2, 0x0a, 0xb5, 0x96, 0x62, 0x2c, 0xaf, 0xd8, 0x3d, 0xae, 0xc3, 0x24, + 0x2b, 0x8f, 0xfe, 0xd3, 0x17, 0x3b, 0x15, 0xcb, 0x5e, 0x3e, 0x3a, 0xf2, + 0x94, 0x7c, 0x20, 0x5a, 0xab, 0xed, 0x23, 0x73, 0x65, 0x9b, 0xd9, 0x94, + 0x53, 0xa2, 0x74, 0xf3, 0xc7, 0x36, 0x62, 0xe3, 0x9b, 0x8f, 0xda, 0xff, + 0xd1, 0x09, 0xf3, 0x98, 0xd9, 0x9e, 0xc8, 0x9b, 0xfe, 0x11, 0xe0, 0x2a, + 0xf6, 0x40, 0x65, 0x87, 0xad, 0xa0, 0x21, 0x52, 0x64, 0xc1, 0x36, 0xda, + 0xbc, 0x76, 0xd2, 0xae, 0xe6, 0x8d, 0x9b, 0x68, 0x41, 0xae, 0xd1, 0xe0, + 0x12, 0x7c, 0xae, 0x18, 0x74, 0x21, 0x01, 0x62, 0x3f, 0x51, 0x69, 0x88, + 0x69, 0x4b, 0x6a, 0x52, 0x21, 0xf3, 0x1d, 0xbc, 0x19, 0x28, 0xd1, 0xda, + 0x74, 0x96, 0xd5, 0xc4, 0xcd, 0xd7, 0x45, 0xa4, 0x32, 0x17, 0xf4, 0x9d, + 0xab, 0xc1, 0x4a, 0x67, 0xef, 0xbf, 0x46, 0xb9, 0x3f, 0x88, 0x16, 0x42, + 0xac, 0x33, 0x39, 0xdc, 0x59, 0xe6, 0xaf, 0xbb, 0xe3, 0xa4, 0x08, 0xb9, + 0xf0, 0x1f, 0xbf, 0x2a, 0x5b, 0xc6, 0x63, 0x78, 0x26, 0x8f, 0xc6, 0xa4, + 0x7f, 0x79, 0xa3, 0x98, 0xb3, 0x0d, 0x46, 0x29, 0x3c, 0x55, 0x95, 0x9f, + 0xb4, 0xea, 0xb9, 0xbb, 0xa8, 0xd0, 0x44, 0x41, 0x32, 0x6b, 0x9c, 0x61, + 0xdd, 0xa7, 0x77, 0x77, 0x70, 0xd6, 0xf2, 0x08, 0x49, 0x58, 0xfa, 0xfc, + 0x93, 0x09, 0x98, 0x22, 0xe5, 0x5b, 0xf5, 0x97, 0x87, 0x76, 0x12, 0xa5, + 0x89, 0x0a, 0x74, 0xec, 0xa2, 0xeb, 0x30, 0x36, 0xbd, 0xd6, 0xa7, 0xc8, + 0xa9, 0xda, 0xa1, 0x1d, 0xd2, 0xa6, 0xcf, 0x8a, 0xee, 0x1a, 0xe1, 0xbb, + 0xee, 0x60, 0x1d, 0xc5, 0xa7, 0xef, 0xad, 0xc1, 0x6e, 0xee, 0x5f, 0x21, + 0x78, 0x21, 0x0a, 0x8f, 0xfd, 0x6d, 0xdc, 0xaa, 0x1e, 0xd9, 0xfc, 0x1b, + 0x00, 0x34, 0xbf, 0x59, 0x67, 0x93, 0xc1, 0xf4, 0x70, 0x99, 0x59, 0xb4, + 0x17, 0x11, 0x36, 0x12, 0xf5, 0x9e, 0x0d, 0x81, 0xd0, 0xbf, 0x84, 0x04, + 0xa2, 0x85, 0x25, 0x07, 0x98, 0x2a, 0x60, 0x06, 0x73, 0x22, 0x70, 0xde, + 0xa1, 0x3f, 0x5a, 0x05, 0x3b, 0x2f, 0x47, 0x59, 0x03, 0xcb, 0x1c, 0x31, + 0xd3, 0x0e, 0x5f, 0xf3, 0x8b, 0x57, 0x1c, 0xb9, 0x93, 0x18, 0x1c, 0xd8, + 0x73, 0x77, 0xd0, 0xf4, 0xc0, 0x2a, 0x1a, 0x8b, 0xda, 0xc0, 0xc1, 0xc8, + 0xf1, 0x13, 0x85, 0x94, 0xea, 0x97, 0xdd, 0x1c, 0x37, 0xf1, 0xa6, 0x75, + 0x00, 0x70, 0xc1, 0x05, 0x9c, 0x8b, 0x15, 0xc3, 0x88, 0xb8, 0xb7, 0xab, + 0x81, 0x72, 0x27, 0x8b, 0x93, 0xfb, 0x81, 0xb1, 0x7a, 0x3e, 0x6c, 0x36, + 0x07, 0xb1, 0xfa, 0xe2, 0x81, 0x5d, 0x43, 0x63, 0x88, 0x27, 0x50, 0x0b, + 0x05, 0xe4, 0x96, 0xdf, 0x21, 0xda, 0xe2, 0xf9, 0xfe, 0x8f, 0x9a, 0xfd, + 0xc3}; + +#endif /* WH_TEST_WOLFBOOT_IMG_DATA_H */ diff --git a/test/scripts/gen_wolfboot_test_data.sh b/test/scripts/gen_wolfboot_test_data.sh new file mode 100755 index 000000000..f19843744 --- /dev/null +++ b/test/scripts/gen_wolfboot_test_data.sh @@ -0,0 +1,249 @@ +#!/bin/bash +# gen_wolfboot_test_data.sh +# +# Generates test data for wolfBoot image manager verification tests. +# Creates: +# 1. RSA4096 signing key pair +# 2. Root CA -> Intermediate -> Leaf certificate chain (RSA4096) +# 3. 16KB dummy firmware payload +# 4. Signed wolfBoot images (standard and cert-chain variants) +# 5. C header with all artifacts as byte arrays +# +# Requires: +# - wolfBoot keygen and sign tools +# - sim-gen-dummy-chain.sh script +# - openssl +# +# Usage: ./gen_wolfboot_test_data.sh + +set -e + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +TEST_DIR="$(dirname "$SCRIPT_DIR")" +WOLFHSM_DIR="$(dirname "$TEST_DIR")" +WOLFBOOT_DIR="${WOLFBOOT_DIR:-$(realpath "$WOLFHSM_DIR/../wolfBoot")}" + +KEYGEN="$WOLFBOOT_DIR/tools/keytools/keygen" +SIGN="$WOLFBOOT_DIR/tools/keytools/sign" +CHAIN_SCRIPT="$WOLFBOOT_DIR/tools/scripts/sim-gen-dummy-chain.sh" + +OUTPUT_DIR="$TEST_DIR/gen" +WORK_DIR=$(mktemp -d) +trap "rm -rf $WORK_DIR" EXIT + +HEADER_SIZE=1024 +FIRMWARE_SIZE=16384 + +echo "=== wolfBoot Test Data Generator ===" +echo "wolfBoot dir: $WOLFBOOT_DIR" +echo "Output dir: $OUTPUT_DIR" +echo "Work dir: $WORK_DIR" +echo "" + +# Verify tools exist +for tool in "$KEYGEN" "$SIGN" "$CHAIN_SCRIPT"; do + if [ ! -f "$tool" ]; then + echo "ERROR: Required tool not found: $tool" + exit 1 + fi +done + +mkdir -p "$OUTPUT_DIR" + +############################# +# 1. Generate RSA4096 key +############################# +echo "=== Generating RSA4096 signing key ===" +cd "$WORK_DIR" +mkdir -p src +"$KEYGEN" --rsa4096 -g signing_key.der +# keygen outputs signing_key.der (private) and keystore.der +# It also creates a src/keystore.c file with the public key + +# The keygen tool outputs the private key as signing_key.der +# and also creates signing_key_pub.der +if [ ! -f signing_key.der ]; then + echo "ERROR: keygen did not produce signing_key.der" + ls -la "$WORK_DIR" + exit 1 +fi + +# Convert private key to PEM for openssl/chain-gen use +openssl rsa -inform DER -in signing_key.der -out signing_key.pem 2>/dev/null + +# Extract public key DER from private key +openssl rsa -inform DER -in signing_key.der -outform DER -pubout -out pubkey.der 2>/dev/null + +echo " Signing key generated." + +############################# +# 2. Generate dummy firmware +############################# +echo "=== Generating dummy firmware ===" +dd if=/dev/urandom of="$WORK_DIR/firmware.bin" bs=1 count=$FIRMWARE_SIZE 2>/dev/null +echo " Created ${FIRMWARE_SIZE}-byte firmware payload." + +############################# +# 3. Sign firmware (standard wolfBoot header) +############################# +echo "=== Signing firmware (standard RSA4096+SHA256) ===" +"$SIGN" --rsa4096 --sha256 \ + "$WORK_DIR/firmware.bin" \ + "$WORK_DIR/signing_key.der" \ + 1 # version number + +# sign tool outputs firmware_v1_signed.bin which contains header + payload +SIGNED_IMG="$WORK_DIR/firmware_v1_signed.bin" +if [ ! -f "$SIGNED_IMG" ]; then + echo "ERROR: sign tool did not produce expected output" + ls -la "$WORK_DIR" + exit 1 +fi + +# Extract header and verify sizes +SIGNED_SIZE=$(stat -c%s "$SIGNED_IMG" 2>/dev/null || stat -f%z "$SIGNED_IMG") +EXPECTED_SIZE=$((HEADER_SIZE + FIRMWARE_SIZE)) +echo " Signed image size: $SIGNED_SIZE (expected: $EXPECTED_SIZE)" + +# Extract header (first HEADER_SIZE bytes) and payload (rest) +dd if="$SIGNED_IMG" of="$WORK_DIR/wolfboot_header.bin" bs=1 count=$HEADER_SIZE 2>/dev/null +dd if="$SIGNED_IMG" of="$WORK_DIR/wolfboot_payload.bin" bs=1 skip=$HEADER_SIZE 2>/dev/null + +echo " Header: ${HEADER_SIZE} bytes, Payload: $(stat -c%s "$WORK_DIR/wolfboot_payload.bin" 2>/dev/null || stat -f%z "$WORK_DIR/wolfboot_payload.bin") bytes" + +############################# +# 4. Generate cert chain +############################# +echo "=== Generating RSA4096 certificate chain ===" +"$CHAIN_SCRIPT" \ + --algo rsa4096 \ + --leaf "$WORK_DIR/signing_key.pem" \ + --outdir "$WORK_DIR/chain" + +echo " Certificate chain generated." + +############################# +# 5. Sign firmware with cert chain +############################# +echo "=== Signing firmware with cert chain ===" + +# Build raw cert chain (intermediate + leaf DER certs concatenated) +CERT_CHAIN_FILE="$WORK_DIR/chain/raw-chain.der" +if [ ! -f "$CERT_CHAIN_FILE" ]; then + echo "ERROR: Certificate chain file not found" + exit 1 +fi + +# Sign with --cert-chain option +"$SIGN" --rsa4096 --sha256 \ + --cert-chain "$CERT_CHAIN_FILE" \ + "$WORK_DIR/firmware.bin" \ + "$WORK_DIR/signing_key.der" \ + 2 # version number + +SIGNED_CERT_IMG="$WORK_DIR/firmware_v2_signed.bin" +if [ ! -f "$SIGNED_CERT_IMG" ]; then + echo "ERROR: sign tool with cert chain did not produce expected output" + ls -la "$WORK_DIR" + exit 1 +fi + +# The cert chain header may be larger than standard. Figure out the actual +# header size by reading the image size field and computing. +CERT_SIGNED_SIZE=$(stat -c%s "$SIGNED_CERT_IMG" 2>/dev/null || stat -f%z "$SIGNED_CERT_IMG") +CERT_HDR_SIZE=$((CERT_SIGNED_SIZE - FIRMWARE_SIZE)) +echo " Cert chain signed image size: $CERT_SIGNED_SIZE" +echo " Cert chain header size: $CERT_HDR_SIZE" + +# Extract cert chain header and payload +dd if="$SIGNED_CERT_IMG" of="$WORK_DIR/wolfboot_cert_header.bin" bs=1 count=$CERT_HDR_SIZE 2>/dev/null +dd if="$SIGNED_CERT_IMG" of="$WORK_DIR/wolfboot_cert_payload.bin" bs=1 skip=$CERT_HDR_SIZE 2>/dev/null + +############################# +# 6. Generate C header file +############################# +echo "=== Generating C header file ===" + +HEADER_FILE="$OUTPUT_DIR/wh_test_wolfboot_img_data.h" + +cat > "$HEADER_FILE" << 'HEADER_TOP' +/* + * Copyright (C) 2025 wolfSSL Inc. + * + * This file is part of wolfHSM. + * + * wolfHSM is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * wolfHSM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with wolfHSM. If not, see . + */ +/* + * test/gen/wh_test_wolfboot_img_data.h + * + * Auto-generated wolfBoot test data for image manager verification tests. + * Generated by test/scripts/gen_wolfboot_test_data.sh + * + * DO NOT EDIT MANUALLY. + */ + +#ifndef WH_TEST_WOLFBOOT_IMG_DATA_H +#define WH_TEST_WOLFBOOT_IMG_DATA_H + +#include +#include + +HEADER_TOP + +# Helper function to convert binary to C array +bin_to_c_array() { + local infile=$1 + local varname=$2 + local description=$3 + + echo "/* $description */" >> "$HEADER_FILE" + echo "static const uint8_t ${varname}[] = {" >> "$HEADER_FILE" + xxd -i < "$infile" >> "$HEADER_FILE" + echo "};" >> "$HEADER_FILE" + echo "" >> "$HEADER_FILE" +} + +# Standard wolfBoot header (RSA4096+SHA256, no cert chain) +bin_to_c_array "$WORK_DIR/wolfboot_header.bin" \ + "wolfboot_test_header" \ + "wolfBoot signed header (RSA4096+SHA256, ${HEADER_SIZE} bytes)" + +# Firmware payload +bin_to_c_array "$WORK_DIR/wolfboot_payload.bin" \ + "wolfboot_test_firmware" \ + "Dummy firmware payload (${FIRMWARE_SIZE} bytes)" + +# RSA4096 public key (DER format) +bin_to_c_array "$WORK_DIR/pubkey.der" \ + "wolfboot_test_pubkey_der" \ + "RSA4096 signing public key (DER format)" + +# Cert chain wolfBoot header +bin_to_c_array "$WORK_DIR/wolfboot_cert_header.bin" \ + "wolfboot_test_cert_chain_header" \ + "wolfBoot signed header with cert chain (RSA4096+SHA256, ${CERT_HDR_SIZE} bytes)" + +# Root CA certificate (DER format) +bin_to_c_array "$WORK_DIR/chain/root-cert.der" \ + "wolfboot_test_root_ca_cert_der" \ + "Root CA certificate (DER format, RSA4096)" + +# Close header guard +echo "#endif /* WH_TEST_WOLFBOOT_IMG_DATA_H */" >> "$HEADER_FILE" + +echo "" +echo "=== Generation Complete ===" +echo "Output: $HEADER_FILE" +echo "File size: $(stat -c%s "$HEADER_FILE" 2>/dev/null || stat -f%z "$HEADER_FILE") bytes" diff --git a/test/wh_test_server_img_mgr.c b/test/wh_test_server_img_mgr.c index 986b2fe90..53715787c 100644 --- a/test/wh_test_server_img_mgr.c +++ b/test/wh_test_server_img_mgr.c @@ -54,6 +54,10 @@ #include "wh_test_common.h" +#ifndef NO_RSA +#include "gen/wh_test_wolfboot_img_data.h" +#endif + #define FLASH_RAM_SIZE (1024 * 1024) /* 1MB */ #define FLASH_SECTOR_SIZE (128 * 1024) /* 128KB */ #define FLASH_PAGE_SIZE (8) /* 8B */ @@ -1192,6 +1196,240 @@ static int whTest_ServerImgMgrServerCfgRsa2048(whServerConfig* serverCfg) } #endif /* !NO_RSA */ +#ifndef NO_RSA +static int +whTest_ServerImgMgrServerCfgWolfBootRsa4096(whServerConfig* serverCfg) +{ + int ret = 0; + whServerContext server[1] = {0}; + whServerImgMgrConfig imgMgrConfig = {0}; + whServerImgMgrContext imgMgr = {0}; + whServerImgMgrImg testImage = {0}; + const whNvmId testKeyId = 1; + whServerImgMgrVerifyResult result; + + /* Set up image manager config for wolfBoot verification */ + testImage.addr = (uintptr_t)wolfboot_test_firmware; + testImage.size = sizeof(wolfboot_test_firmware); + testImage.hdrAddr = (uintptr_t)wolfboot_test_header; + testImage.hdrSize = sizeof(wolfboot_test_header); + testImage.keyId = testKeyId; + testImage.imgType = WH_IMG_MGR_IMG_TYPE_WOLFBOOT; + testImage.verifyMethod = + wh_Server_ImgMgrVerifyMethodWolfBootRsa4096WithSha256; + testImage.verifyAction = wh_Server_ImgMgrVerifyActionDefault; + + imgMgrConfig.images = &testImage; + imgMgrConfig.imageCount = 1; + imgMgrConfig.server = server; + + /* Initialize server */ + ret = wh_Server_Init(server, serverCfg); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("Failed to initialize server: %d\n", ret); + return ret; + } + + /* Initialize the image manager */ + ret = wh_Server_ImgMgrInit(&imgMgr, &imgMgrConfig); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("Failed to initialize image manager: %d\n", ret); + wh_Server_Cleanup(server); + return ret; + } + + /* Cache the public key in the keystore */ + { + whNvmMetadata keyMeta = {0}; + keyMeta.id = testKeyId; + keyMeta.access = WH_NVM_ACCESS_ANY; + keyMeta.flags = WH_NVM_FLAGS_NONE; + keyMeta.len = sizeof(wolfboot_test_pubkey_der); + snprintf((char*)keyMeta.label, WH_NVM_LABEL_LEN, "WBPubKey"); + + ret = wh_Server_KeystoreCacheKey(server, &keyMeta, + (uint8_t*)wolfboot_test_pubkey_der); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("Failed to cache key: %d\n", ret); + wh_Server_Cleanup(server); + return ret; + } + + ret = wh_Server_KeystoreCommitKey(server, testKeyId); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("Failed to commit key: %d\n", ret); + wh_Server_Cleanup(server); + return ret; + } + } + + /* Positive test: verify wolfBoot image with correct key */ + ret = wh_Server_ImgMgrVerifyImg(&imgMgr, &testImage, &result); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("wolfBoot verify failed: %d\n", ret); + wh_Server_Cleanup(server); + return ret; + } + if (result.verifyMethodResult != WH_ERROR_OK) { + WH_ERROR_PRINT("wolfBoot verify method failed: %d\n", + result.verifyMethodResult); + wh_Server_Cleanup(server); + return result.verifyMethodResult; + } + if (result.verifyActionResult != WH_ERROR_OK) { + WH_ERROR_PRINT("wolfBoot verify action failed: %d\n", + result.verifyActionResult); + wh_Server_Cleanup(server); + return result.verifyActionResult; + } + + /* Negative test: flip a bit in firmware payload copy and verify fails */ + { + /* Make a mutable copy of the firmware for corruption test */ + uint8_t corrupt_fw[sizeof(wolfboot_test_firmware)]; + whServerImgMgrImg corruptImage = testImage; + memcpy(corrupt_fw, wolfboot_test_firmware, + sizeof(wolfboot_test_firmware)); + corrupt_fw[0] ^= 0x01; + corruptImage.addr = (uintptr_t)corrupt_fw; + + ret = wh_Server_ImgMgrVerifyImg(&imgMgr, &corruptImage, &result); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("wolfBoot corrupt verify call failed: %d\n", ret); + wh_Server_Cleanup(server); + return ret; + } + if (result.verifyMethodResult == WH_ERROR_OK) { + WH_ERROR_PRINT( + "wolfBoot corrupt verify should have failed but succeeded\n"); + wh_Server_Cleanup(server); + return WH_ERROR_ABORTED; + } + } + + wh_Server_Cleanup(server); + WH_TEST_PRINT("IMG_MGR wolfBoot RSA4096 Test completed successfully!\n"); + return 0; +} + +#ifdef WOLFHSM_CFG_CERTIFICATE_MANAGER +static int +whTest_ServerImgMgrServerCfgWolfBootCertChainRsa4096(whServerConfig* serverCfg) +{ + int ret = 0; + whServerContext server[1] = {0}; + whServerImgMgrConfig imgMgrConfig = {0}; + whServerImgMgrContext imgMgr = {0}; + whServerImgMgrImg testImage = {0}; + const whNvmId rootCaNvmId = 10; + whServerImgMgrVerifyResult result; + whNvmMetadata rootCaMeta = {0}; + + /* Store root CA cert in NVM */ + rootCaMeta.id = rootCaNvmId; + rootCaMeta.access = WH_NVM_ACCESS_ANY; + rootCaMeta.flags = WH_NVM_FLAGS_NONE; + rootCaMeta.len = sizeof(wolfboot_test_root_ca_cert_der); + snprintf((char*)rootCaMeta.label, WH_NVM_LABEL_LEN, "RootCA"); + + ret = wh_Nvm_AddObject(serverCfg->nvm, &rootCaMeta, + sizeof(wolfboot_test_root_ca_cert_der), + wolfboot_test_root_ca_cert_der); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("Failed to add root CA to NVM: %d\n", ret); + return ret; + } + + /* Set up image manager config for wolfBoot cert chain verification */ + testImage.addr = (uintptr_t)wolfboot_test_firmware; + testImage.size = sizeof(wolfboot_test_firmware); + testImage.hdrAddr = (uintptr_t)wolfboot_test_cert_chain_header; + testImage.hdrSize = sizeof(wolfboot_test_cert_chain_header); + testImage.sigNvmId = rootCaNvmId; + testImage.imgType = WH_IMG_MGR_IMG_TYPE_WOLFBOOT_CERT; + testImage.verifyMethod = + wh_Server_ImgMgrVerifyMethodWolfBootCertChainRsa4096WithSha256; + testImage.verifyAction = wh_Server_ImgMgrVerifyActionDefault; + + imgMgrConfig.images = &testImage; + imgMgrConfig.imageCount = 1; + imgMgrConfig.server = server; + + /* Initialize server */ + ret = wh_Server_Init(server, serverCfg); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("Failed to initialize server: %d\n", ret); + return ret; + } + + /* Initialize the image manager */ + ret = wh_Server_ImgMgrInit(&imgMgr, &imgMgrConfig); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("Failed to initialize image manager: %d\n", ret); + wh_Server_Cleanup(server); + return ret; + } + + /* Positive test: verify wolfBoot image with cert chain */ + ret = wh_Server_ImgMgrVerifyImg(&imgMgr, &testImage, &result); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("wolfBoot cert chain verify failed: %d\n", ret); + wh_Server_Cleanup(server); + return ret; + } + if (result.verifyMethodResult != WH_ERROR_OK) { + WH_ERROR_PRINT("wolfBoot cert chain verify method failed: %d\n", + result.verifyMethodResult); + wh_Server_Cleanup(server); + return result.verifyMethodResult; + } + if (result.verifyActionResult != WH_ERROR_OK) { + WH_ERROR_PRINT("wolfBoot cert chain verify action failed: %d\n", + result.verifyActionResult); + wh_Server_Cleanup(server); + return result.verifyActionResult; + } + + /* Negative test: flip a bit in firmware payload and verify fails */ + { + uint8_t corrupt_fw[sizeof(wolfboot_test_firmware)]; + whServerImgMgrImg corruptImage = testImage; + memcpy(corrupt_fw, wolfboot_test_firmware, + sizeof(wolfboot_test_firmware)); + corrupt_fw[0] ^= 0x01; + corruptImage.addr = (uintptr_t)corrupt_fw; + + ret = wh_Server_ImgMgrVerifyImg(&imgMgr, &corruptImage, &result); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT( + "wolfBoot cert chain corrupt verify call failed: %d\n", ret); + wh_Server_Cleanup(server); + return ret; + } + if (result.verifyMethodResult == WH_ERROR_OK) { + WH_ERROR_PRINT("wolfBoot cert chain corrupt verify should have " + "failed but succeeded\n"); + wh_Server_Cleanup(server); + return WH_ERROR_ABORTED; + } + } + + /* Delete the root CA cert from NVM */ + ret = wh_Nvm_DestroyObjects(serverCfg->nvm, 1, &rootCaNvmId); + if (ret != WH_ERROR_OK) { + WH_ERROR_PRINT("Failed to delete root CA cert: %d\n", ret); + wh_Server_Cleanup(server); + return ret; + } + + wh_Server_Cleanup(server); + WH_TEST_PRINT( + "IMG_MGR wolfBoot Cert Chain RSA4096 Test completed successfully!\n"); + return 0; +} +#endif /* WOLFHSM_CFG_CERTIFICATE_MANAGER */ +#endif /* !NO_RSA */ + int whTest_ServerImgMgr(whTestNvmBackendType nvmType) { int rc = 0; @@ -1282,6 +1520,25 @@ int whTest_ServerImgMgr(whTestNvmBackendType nvmType) wh_Nvm_Cleanup(nvm); return rc; } + + /* wolfBoot RSA4096 verify method */ + rc = whTest_ServerImgMgrServerCfgWolfBootRsa4096(s_conf); + if (rc != 0) { + WH_ERROR_PRINT("wolfBoot RSA4096 image manager tests failed: %d\n", rc); + wh_Nvm_Cleanup(nvm); + return rc; + } + +#ifdef WOLFHSM_CFG_CERTIFICATE_MANAGER + /* wolfBoot RSA4096 cert chain verify method */ + rc = whTest_ServerImgMgrServerCfgWolfBootCertChainRsa4096(s_conf); + if (rc != 0) { + WH_ERROR_PRINT( + "wolfBoot cert chain RSA4096 image manager tests failed: %d\n", rc); + wh_Nvm_Cleanup(nvm); + return rc; + } +#endif /* WOLFHSM_CFG_CERTIFICATE_MANAGER */ #endif /* !NO_RSA */ /* Cleanup NVM */ diff --git a/wolfhsm/wh_server_img_mgr.h b/wolfhsm/wh_server_img_mgr.h index b299c26b8..29f0e807f 100644 --- a/wolfhsm/wh_server_img_mgr.h +++ b/wolfhsm/wh_server_img_mgr.h @@ -34,6 +34,30 @@ #include "wolfhsm/wh_common.h" #include "wolfhsm/wh_server.h" +/* wolfBoot header constants */ +#define WH_IMG_MGR_WOLFBOOT_MAGIC 0x464C4F57 /* "WOLF" LE */ +#define WH_IMG_MGR_WOLFBOOT_HDR_OFFSET 8 + +/* wolfBoot TLV types */ +#define WH_IMG_MGR_WOLFBOOT_HDR_SHA256 0x03 +#define WH_IMG_MGR_WOLFBOOT_HDR_IMG_TYPE 0x04 +#define WH_IMG_MGR_WOLFBOOT_HDR_PUBKEY 0x10 +#define WH_IMG_MGR_WOLFBOOT_HDR_SIGNATURE 0x20 +#define WH_IMG_MGR_WOLFBOOT_HDR_CERT_CHAIN 0x23 +#define WH_IMG_MGR_WOLFBOOT_HDR_PADDING 0xFF + +/* wolfBoot auth key types (from high byte of img_type) */ +#define WH_IMG_MGR_WOLFBOOT_AUTH_RSA4096 0x04 +#define WH_IMG_MGR_WOLFBOOT_HDR_IMG_TYPE_AUTH_MASK 0xFF00 + +/* Image type enum controlling how the framework loads keys/signatures */ +typedef enum { + WH_IMG_MGR_IMG_TYPE_RAW = 0, /* Key from keystore, sig from NVM */ + WH_IMG_MGR_IMG_TYPE_WOLFBOOT, /* Key from keystore, sig from header */ + WH_IMG_MGR_IMG_TYPE_WOLFBOOT_CERT, /* Root CA from NVM, cert chain + sig + from header */ +} whServerImgMgrImgType; + /* Forward declaration for callback function signatures */ typedef struct whServerImgMgrContext_t whServerImgMgrContext; @@ -86,10 +110,15 @@ typedef int (*whServerImgMgrVerifyAction)(whServerImgMgrContext* context, * and post-verification actions. */ typedef struct whServerImgMgrImg { - uintptr_t addr; /* Image address */ - size_t size; /* Image size */ - whKeyId keyId; /* Key ID for verification */ - whNvmId sigNvmId; /* NVM ID for signature */ + uintptr_t addr; /* RAW: image blob. WOLFBOOT: firmware payload */ + size_t size; /* RAW: blob size. WOLFBOOT: max payload size, actual + size obtained from manifest header */ + uintptr_t hdrAddr; /* wolfBoot header address (unused for RAW). Must be + 2-byte aligned for WOLFBOOT/WOLFBOOT_CERT. */ + size_t hdrSize; /* wolfBoot header size (unused for RAW) */ + whKeyId keyId; /* RAW/WOLFBOOT: verify key ID. WOLFBOOT_CERT: unused */ + whNvmId sigNvmId; /* RAW: sig NVM ID. WOLFBOOT_CERT: root CA NVM ID */ + whServerImgMgrImgType imgType; /* Controls framework loading behavior */ whServerImgMgrVerifyMethod verifyMethod; /* Verification callback */ whServerImgMgrVerifyAction verifyAction; /* Post-verification action */ } whServerImgMgrImg; @@ -257,6 +286,49 @@ int wh_Server_ImgMgrVerifyMethodRsaSslWithSha256( whServerImgMgrContext* context, const whServerImgMgrImg* img, const uint8_t* key, size_t keySz, const uint8_t* sig, size_t sigSz); +/** + * @brief wolfBoot RSA4096+SHA256 verification method + * + * Verifies a wolfBoot image using RSA4096 signature with SHA256 hash. + * The public key is provided by the framework (loaded from keystore). + * The signature is extracted from the wolfBoot header at img->hdrAddr. + * + * @param[in] context Image manager context + * @param[in] img Image structure with hdrAddr pointing to wolfBoot header + * (must be 2-byte aligned) and addr pointing to firmware payload + * @param[in] key RSA4096 public key data (DER format) + * @param[in] keySz Size of key data + * @param[in] sig Unused (NULL), signature is read from wolfBoot header + * @param[in] sigSz Unused (0) + * @return WH_ERROR_OK on successful verification, negative error code on + * failure + */ +int wh_Server_ImgMgrVerifyMethodWolfBootRsa4096WithSha256( + whServerImgMgrContext* context, const whServerImgMgrImg* img, + const uint8_t* key, size_t keySz, const uint8_t* sig, size_t sigSz); + +/** + * @brief wolfBoot RSA4096+SHA256 cert chain verification method + * + * Verifies a wolfBoot image using RSA4096 signature with SHA256 hash, + * where the signing key is validated through a certificate chain. + * The root CA cert NVM ID is read from img->sigNvmId. + * The cert chain and signature are extracted from the wolfBoot header. + * + * @param[in] context Image manager context + * @param[in] img Image structure with hdrAddr pointing to wolfBoot header + * (must be 2-byte aligned) and addr pointing to firmware payload + * @param[in] key Unused (NULL), leaf key is extracted from cert chain + * @param[in] keySz Unused (0) + * @param[in] sig Unused (NULL), signature is read from wolfBoot header + * @param[in] sigSz Unused (0) + * @return WH_ERROR_OK on successful verification, negative error code on + * failure + */ +int wh_Server_ImgMgrVerifyMethodWolfBootCertChainRsa4096WithSha256( + whServerImgMgrContext* context, const whServerImgMgrImg* img, + const uint8_t* key, size_t keySz, const uint8_t* sig, size_t sigSz); + /** * @brief Default verification action callback * @@ -274,4 +346,4 @@ int wh_Server_ImgMgrVerifyActionDefault(whServerImgMgrContext* context, #endif /* WOLFHSM_CFG_SERVER_IMG_MGR */ -#endif /* !WOLFHSM_WH_SERVER_IMG_MGR_H_ */ \ No newline at end of file +#endif /* !WOLFHSM_WH_SERVER_IMG_MGR_H_ */