@likecoin/epubcheck-ts 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/bin/epubcheck.js +4 -4
- package/bin/epubcheck.ts +4 -4
- package/dist/index.cjs +1721 -325
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1721 -325
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/messages/messages.ts","../src/css/validator.ts","../src/opf/types.ts","../src/references/types.ts","../src/references/url.ts","../src/content/validator.ts","../src/core/report.ts","../src/ncx/validator.ts","../src/ocf/zip.ts","../src/ocf/validator.ts","../src/opf/parser.ts","../src/opf/validator.ts","../src/references/registry.ts","../src/references/validator.ts","../src/schema/schemas.generated.ts","../src/schema/validator.ts","../src/schema/relaxng.ts","../src/schema/orchestrator.ts","../src/checker.ts"],"names":["parse","walk","XmlDocument","targetResource","fragment","resolvedPath","resource","result","unzipSync","strFromU8","checkUrlLeaking","gunzipSync","elapsedMs","BLESSED_FONT_TYPES"],"mappings":"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AAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,W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","file":"index.cjs","sourcesContent":["/**\n * Message Definitions for EPUB validation errors and warnings\n *\n * This file is the single source of truth for all message IDs, severities, and descriptions.\n * IDs are compatible with the Java EPUBCheck implementation for consistent error reporting.\n *\n * Prefix meanings:\n * - ACC: Accessibility\n * - CHK: Internal checker errors\n * - CSS: CSS validation\n * - HTM: HTML/XHTML content\n * - MED: Media (audio, video, images)\n * - NAV: Navigation document\n * - NCX: NCX (EPUB 2 navigation)\n * - OPF: Package document\n * - PKG: Package/container level\n * - RSC: Resources\n * - SCH: Schematron validation\n * - SCP: Scripting\n *\n * Severity levels:\n * - FATAL: Unrecoverable errors that prevent validation\n * - ERROR: Specification violations\n * - WARNING: Best practice violations or potential issues\n * - INFO: Informational messages\n * - USAGE: Feature usage information (off by default)\n * - SUPPRESSED: Disabled by default (can be enabled via customMessages)\n *\n * Reference: Java EPUBCheck DefaultSeverities.java and MessageBundle.properties\n */\n\nimport type { EPUBLocation, Severity, ValidationMessage } from '../types.js';\n\nexport type MessageSeverity = Severity | 'suppressed';\n\ninterface MessageDef {\n readonly id: string;\n readonly severity: MessageSeverity;\n readonly description: string;\n}\n\n/**\n * All message definitions with their IDs, severities, and descriptions.\n * Severities match Java EPUBCheck DefaultSeverities.java\n * Descriptions match Java EPUBCheck MessageBundle.properties\n */\nconst MessageDefs = {\n // Package/Container errors (PKG-*)\n PKG_001: {\n id: 'PKG-001',\n severity: 'warning',\n description: 'Validating against one version but detected another',\n },\n PKG_003: {\n id: 'PKG-003',\n severity: 'error',\n description: 'Unable to read EPUB file header, likely corrupted',\n },\n PKG_004: { id: 'PKG-004', severity: 'fatal', description: 'Corrupted EPUB ZIP header' },\n PKG_005: {\n id: 'PKG-005',\n severity: 'error',\n description: 'Mimetype file has extra field, not permitted',\n },\n PKG_006: {\n id: 'PKG-006',\n severity: 'error',\n description: 'Mimetype file entry missing or not first in archive',\n },\n PKG_007: {\n id: 'PKG-007',\n severity: 'error',\n description: 'Mimetype must contain only \"application/epub+zip\" and not be compressed',\n },\n PKG_008: { id: 'PKG-008', severity: 'fatal', description: 'Unable to read file' },\n PKG_009: {\n id: 'PKG-009',\n severity: 'error',\n description: 'File name contains characters not allowed in OCF',\n },\n PKG_010: {\n id: 'PKG-010',\n severity: 'warning',\n description: 'File name contains spaces, may cause interoperability issues',\n },\n PKG_011: {\n id: 'PKG-011',\n severity: 'error',\n description: 'File name not allowed to end with \".\"',\n },\n PKG_012: {\n id: 'PKG-012',\n severity: 'usage',\n description: 'File name contains non-ASCII characters',\n },\n PKG_013: {\n id: 'PKG-013',\n severity: 'error',\n description: 'EPUB file includes multiple OPS renditions',\n },\n PKG_014: {\n id: 'PKG-014',\n severity: 'warning',\n description: 'EPUB contains empty directory',\n },\n PKG_015: { id: 'PKG-015', severity: 'fatal', description: 'Unable to read EPUB contents' },\n PKG_016: {\n id: 'PKG-016',\n severity: 'warning',\n description: 'Use only lowercase for EPUB file extension',\n },\n PKG_017: { id: 'PKG-017', severity: 'warning', description: 'Uncommon EPUB file extension' },\n PKG_018: { id: 'PKG-018', severity: 'fatal', description: 'EPUB file could not be found' },\n PKG_020: { id: 'PKG-020', severity: 'error', description: 'OPF file could not be found' },\n PKG_021: { id: 'PKG-021', severity: 'error', description: 'Corrupted image file encountered' },\n PKG_022: {\n id: 'PKG-022',\n severity: 'warning',\n description: 'Wrong file extension for image',\n },\n PKG_023: {\n id: 'PKG-023',\n severity: 'usage',\n description: 'Validating against version 2.0, default profile used',\n },\n PKG_024: { id: 'PKG-024', severity: 'usage', description: 'Uncommon EPUB file extension' },\n PKG_025: {\n id: 'PKG-025',\n severity: 'error',\n description: 'Publication resource must not be in META-INF directory',\n },\n PKG_026: {\n id: 'PKG-026',\n severity: 'error',\n description: 'Obfuscated resource must be a Font Core Media Type',\n },\n PKG_027: {\n id: 'PKG-027',\n severity: 'fatal',\n description: 'Could not extract EPUB ZIP content, file names not UTF-8',\n },\n\n // OPF errors (OPF-*)\n OPF_001: {\n id: 'OPF-001',\n severity: 'error',\n description: 'Error parsing EPUB version',\n },\n OPF_002: {\n id: 'OPF-002',\n severity: 'fatal',\n description: 'OPF file was not found in the EPUB',\n },\n OPF_003: {\n id: 'OPF-003',\n severity: 'usage',\n description: 'Item exists in EPUB but not declared in OPF manifest',\n },\n OPF_004: {\n id: 'OPF-004',\n severity: 'warning',\n description: 'Invalid prefix declaration: leading or trailing whitespace',\n },\n OPF_005: {\n id: 'OPF-005',\n severity: 'error',\n description: 'Invalid prefix declaration: URI does not exist',\n },\n OPF_006: {\n id: 'OPF-006',\n severity: 'error',\n description: 'Invalid prefix declaration: URI is not valid',\n },\n OPF_007: {\n id: 'OPF-007',\n severity: 'warning',\n description: 'Re-declaration of reserved prefix',\n },\n OPF_008: { id: 'OPF-008', severity: 'suppressed', description: 'Duplicate entry in ZIP file' },\n OPF_009: { id: 'OPF-009', severity: 'suppressed', description: 'Duplicate manifest item ID' },\n OPF_010: {\n id: 'OPF-010',\n severity: 'error',\n description: 'Error resolving reference',\n },\n OPF_011: {\n id: 'OPF-011',\n severity: 'error',\n description: 'itemref cannot have both page-spread-right and page-spread-left',\n },\n OPF_012: {\n id: 'OPF-012',\n severity: 'error',\n description: 'Item property not defined for media type',\n },\n OPF_013: {\n id: 'OPF-013',\n severity: 'warning',\n description: 'Resource MIME type in content differs from package document',\n },\n OPF_014: {\n id: 'OPF-014',\n severity: 'error',\n description: 'Property should be declared in OPF file',\n },\n OPF_015: {\n id: 'OPF-015',\n severity: 'error',\n description: 'Property should not be declared in OPF file',\n },\n OPF_016: {\n id: 'OPF-016',\n severity: 'error',\n description: 'Rootfile element missing required full-path attribute',\n },\n OPF_017: {\n id: 'OPF-017',\n severity: 'error',\n description: 'Full-path attribute on rootfile must not be empty',\n },\n OPF_018: {\n id: 'OPF-018',\n severity: 'warning',\n description: 'remote-resources property declared but no remote references found',\n },\n OPF_021: {\n id: 'OPF-021',\n severity: 'warning',\n description: 'Use of non-registered URI scheme type in href',\n },\n OPF_025: {\n id: 'OPF-025',\n severity: 'error',\n description: 'Property value list not allowed, only one value permitted',\n },\n OPF_026: { id: 'OPF-026', severity: 'error', description: 'Malformed property value' },\n OPF_027: { id: 'OPF-027', severity: 'error', description: 'Undefined property' },\n OPF_028: { id: 'OPF-028', severity: 'error', description: 'Undeclared prefix' },\n OPF_029: {\n id: 'OPF-029',\n severity: 'error',\n description: 'File does not match media type specified in OPF',\n },\n OPF_030: {\n id: 'OPF-030',\n severity: 'error',\n description: 'Unique-identifier not found',\n },\n OPF_031: {\n id: 'OPF-031',\n severity: 'error',\n description: 'File in guide reference not declared in manifest',\n },\n OPF_032: {\n id: 'OPF-032',\n severity: 'error',\n description: 'Guide references item that is not valid OPS Content Document',\n },\n OPF_033: {\n id: 'OPF-033',\n severity: 'error',\n description: 'Spine contains no linear resources',\n },\n OPF_034: {\n id: 'OPF-034',\n severity: 'error',\n description: 'Spine contains multiple references to same manifest item',\n },\n OPF_035: {\n id: 'OPF-035',\n severity: 'warning',\n description: 'Media type text/html not appropriate for XHTML/OPS',\n },\n OPF_036: {\n id: 'OPF-036',\n severity: 'usage',\n description: 'Video type might not be supported by reading systems',\n },\n OPF_037: { id: 'OPF-037', severity: 'warning', description: 'Deprecated media-type found' },\n OPF_038: {\n id: 'OPF-038',\n severity: 'warning',\n description: 'Media type not appropriate for OEBPS 1.2 context',\n },\n OPF_039: {\n id: 'OPF-039',\n severity: 'warning',\n description: 'Media type not appropriate for OEBPS 1.2 context',\n },\n OPF_040: {\n id: 'OPF-040',\n severity: 'error',\n description: 'Fallback item could not be found',\n },\n OPF_041: {\n id: 'OPF-041',\n severity: 'error',\n description: 'Fallback-style item could not be found',\n },\n OPF_042: {\n id: 'OPF-042',\n severity: 'error',\n description: 'Not a permissible spine media-type',\n },\n OPF_043: {\n id: 'OPF-043',\n severity: 'error',\n description: 'Spine item with non-standard media-type has no fallback',\n },\n OPF_044: {\n id: 'OPF-044',\n severity: 'error',\n description: 'Spine item with non-standard media-type has no content document fallback',\n },\n OPF_045: {\n id: 'OPF-045',\n severity: 'error',\n description: 'Circular reference in fallback chain',\n },\n OPF_046: { id: 'OPF-046', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_047: {\n id: 'OPF-047',\n severity: 'usage',\n description: 'OPF using OEBPS 1.2 syntax for backwards compatibility',\n },\n OPF_048: {\n id: 'OPF-048',\n severity: 'error',\n description: 'Package tag missing required unique-identifier attribute',\n },\n OPF_049: {\n id: 'OPF-049',\n severity: 'error',\n description: 'Item id not found in manifest',\n },\n OPF_050: {\n id: 'OPF-050',\n severity: 'error',\n description: 'TOC attribute references resource with non-NCX mime type',\n },\n OPF_051: {\n id: 'OPF-051',\n severity: 'suppressed',\n description: 'Image dimensions exceed recommended size',\n },\n OPF_052: { id: 'OPF-052', severity: 'error', description: 'Role value is not valid' },\n OPF_053: {\n id: 'OPF-053',\n severity: 'warning',\n description: 'Date value does not follow recommended syntax',\n },\n OPF_054: { id: 'OPF-054', severity: 'error', description: 'Date value is not valid' },\n OPF_055: { id: 'OPF-055', severity: 'warning', description: 'Tag is empty' },\n OPF_056: { id: 'OPF-056', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_057: {\n id: 'OPF-057',\n severity: 'suppressed',\n description: 'Image file length exceeds recommended size',\n },\n OPF_058: { id: 'OPF-058', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_059: { id: 'OPF-059', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_060: {\n id: 'OPF-060',\n severity: 'error',\n description: 'Duplicate entry in ZIP file',\n },\n OPF_062: {\n id: 'OPF-062',\n severity: 'usage',\n description: 'Found Adobe page-map attribute on spine element',\n },\n OPF_063: {\n id: 'OPF-063',\n severity: 'warning',\n description: 'Referenced Adobe page-map item not found in manifest',\n },\n OPF_064: {\n id: 'OPF-064',\n severity: 'info',\n description: 'OPF declares type, validating using profile',\n },\n OPF_065: {\n id: 'OPF-065',\n severity: 'error',\n description: 'Invalid metadata declaration, probably cycle in refines',\n },\n OPF_066: {\n id: 'OPF-066',\n severity: 'error',\n description: 'Missing dc:source or source-of pagination metadata',\n },\n OPF_067: {\n id: 'OPF-067',\n severity: 'error',\n description: 'Resource must not be listed as both link and manifest item',\n },\n OPF_068: { id: 'OPF-068', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_069: { id: 'OPF-069', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_070: {\n id: 'OPF-070',\n severity: 'warning',\n description: 'Custom collection role is an invalid URL',\n },\n OPF_071: {\n id: 'OPF-071',\n severity: 'error',\n description: 'Index collections must only contain XHTML Content Documents',\n },\n OPF_072: { id: 'OPF-072', severity: 'usage', description: 'Metadata element is empty' },\n OPF_073: {\n id: 'OPF-073',\n severity: 'error',\n description: 'External identifiers must not appear in document type declaration',\n },\n OPF_074: {\n id: 'OPF-074',\n severity: 'error',\n description: 'Package resource declared in several manifest items',\n },\n OPF_075: {\n id: 'OPF-075',\n severity: 'error',\n description: 'Preview collections must only point to EPUB Content Documents',\n },\n OPF_076: {\n id: 'OPF-076',\n severity: 'error',\n description: 'Preview collection link URI must not include EPUB CFI',\n },\n OPF_077: {\n id: 'OPF-077',\n severity: 'warning',\n description: 'Data Navigation Document should not be in spine',\n },\n OPF_078: {\n id: 'OPF-078',\n severity: 'error',\n description: 'EPUB Dictionary must contain at least one dictionary content document',\n },\n OPF_079: {\n id: 'OPF-079',\n severity: 'warning',\n description: 'Dictionary content found, should declare dc:type dictionary',\n },\n OPF_080: {\n id: 'OPF-080',\n severity: 'warning',\n description: 'Search Key Map document should have .xml extension',\n },\n OPF_081: {\n id: 'OPF-081',\n severity: 'error',\n description: 'Resource referenced from Dictionary collection not found',\n },\n OPF_082: {\n id: 'OPF-082',\n severity: 'error',\n description: 'Dictionary collection contains more than one Search Key Map',\n },\n OPF_083: {\n id: 'OPF-083',\n severity: 'error',\n description: 'Dictionary collection contains no Search Key Map Document',\n },\n OPF_084: {\n id: 'OPF-084',\n severity: 'error',\n description: 'Dictionary collection contains invalid resource type',\n },\n OPF_085: {\n id: 'OPF-085',\n severity: 'warning',\n description: 'dc:identifier marked as UUID but is invalid UUID',\n },\n OPF_086: {\n id: 'OPF-086',\n severity: 'warning',\n description: 'Property is deprecated',\n },\n OPF_087: {\n id: 'OPF-087',\n severity: 'usage',\n description: 'epub:type value not allowed on this document type',\n },\n OPF_088: {\n id: 'OPF-088',\n severity: 'usage',\n description: 'Unrecognized epub:type value',\n },\n OPF_089: {\n id: 'OPF-089',\n severity: 'error',\n description: 'alternate link rel keyword cannot be paired with other keywords',\n },\n OPF_090: {\n id: 'OPF-090',\n severity: 'usage',\n description: 'Encouraged to use different MIME media type',\n },\n OPF_091: {\n id: 'OPF-091',\n severity: 'error',\n description: 'Item href URL must not have fragment identifier',\n },\n OPF_092: {\n id: 'OPF-092',\n severity: 'error',\n description: 'Language tag is not well-formed',\n },\n OPF_093: {\n id: 'OPF-093',\n severity: 'error',\n description: 'media-type attribute required for linked resources in container',\n },\n OPF_094: {\n id: 'OPF-094',\n severity: 'error',\n description: 'media-type attribute required for this link type',\n },\n OPF_095: {\n id: 'OPF-095',\n severity: 'error',\n description: 'voicing links media-type must be audio MIME type',\n },\n OPF_096: {\n id: 'OPF-096',\n severity: 'error',\n description: 'Non-linear content must be reachable, no hyperlink found',\n },\n OPF_096b: {\n id: 'OPF-096b',\n severity: 'usage',\n description: 'Non-linear content has no hyperlink but scripting is present',\n },\n OPF_097: {\n id: 'OPF-097',\n severity: 'usage',\n description: 'Resource in manifest but no reference found in content documents',\n },\n OPF_098: {\n id: 'OPF-098',\n severity: 'error',\n description: 'href must reference resources, not elements in package document',\n },\n OPF_099: {\n id: 'OPF-099',\n severity: 'error',\n description: 'Manifest must not list the package document',\n },\n\n // Resource errors (RSC-*)\n RSC_001: { id: 'RSC-001', severity: 'error', description: 'File could not be found' },\n RSC_002: {\n id: 'RSC-002',\n severity: 'fatal',\n description: 'Required META-INF/container.xml could not be found',\n },\n RSC_003: {\n id: 'RSC-003',\n severity: 'error',\n description: 'No rootfile with media type application/oebps-package+xml found',\n },\n RSC_004: {\n id: 'RSC-004',\n severity: 'info',\n description: 'File is encrypted, content will not be checked',\n },\n RSC_005: { id: 'RSC-005', severity: 'error', description: 'Error while parsing file' },\n RSC_006: {\n id: 'RSC-006',\n severity: 'error',\n description: 'Remote resource reference not allowed, must be in EPUB container',\n },\n RSC_007: {\n id: 'RSC-007',\n severity: 'error',\n description: 'Referenced resource could not be found in EPUB',\n },\n RSC_007w: {\n id: 'RSC-007w',\n severity: 'warning',\n description: 'Referenced resource could not be found in EPUB',\n },\n RSC_008: {\n id: 'RSC-008',\n severity: 'error',\n description: 'Referenced resource not declared in OPF manifest',\n },\n RSC_009: {\n id: 'RSC-009',\n severity: 'warning',\n description: 'Non-SVG image resource should not have fragment identifier',\n },\n RSC_010: {\n id: 'RSC-010',\n severity: 'error',\n description: 'Reference to non-standard resource type found',\n },\n RSC_011: {\n id: 'RSC-011',\n severity: 'error',\n description: 'Found reference to resource that is not a spine item',\n },\n RSC_012: {\n id: 'RSC-012',\n severity: 'error',\n description: 'Fragment identifier is not defined',\n },\n RSC_013: {\n id: 'RSC-013',\n severity: 'error',\n description: 'Fragment identifier used in reference to stylesheet',\n },\n RSC_014: {\n id: 'RSC-014',\n severity: 'error',\n description: 'Fragment identifier defines incompatible resource type',\n },\n RSC_015: {\n id: 'RSC-015',\n severity: 'error',\n description: 'Fragment identifier required for svg use tag references',\n },\n RSC_016: { id: 'RSC-016', severity: 'fatal', description: 'Fatal error while parsing file' },\n RSC_017: { id: 'RSC-017', severity: 'warning', description: 'Warning while parsing file' },\n RSC_018: { id: 'RSC-018', severity: 'suppressed', description: 'Unused resource in package' },\n RSC_019: {\n id: 'RSC-019',\n severity: 'warning',\n description: 'EPUBs with Multiple Renditions should have META-INF/metadata.xml',\n },\n RSC_020: { id: 'RSC-020', severity: 'error', description: 'URL is not valid' },\n RSC_021: {\n id: 'RSC-021',\n severity: 'error',\n description: 'Search Key Map must point to Content Documents in spine',\n },\n RSC_022: {\n id: 'RSC-022',\n severity: 'info',\n description: 'Cannot check image details (requires Java 7+)',\n },\n RSC_023: { id: 'RSC-023', severity: 'suppressed', description: 'Informative parsing info' },\n RSC_024: { id: 'RSC-024', severity: 'usage', description: 'Informative parsing warning' },\n RSC_025: { id: 'RSC-025', severity: 'usage', description: 'Informative parsing error' },\n RSC_026: {\n id: 'RSC-026',\n severity: 'error',\n description: 'URL leaks outside container, not valid relative-ocf-URL',\n },\n RSC_027: {\n id: 'RSC-027',\n severity: 'warning',\n description: 'XML document encoded in UTF-16, should be UTF-8',\n },\n RSC_028: {\n id: 'RSC-028',\n severity: 'error',\n description: 'XML documents must be encoded in UTF-8',\n },\n RSC_029: {\n id: 'RSC-029',\n severity: 'error',\n description: 'Data URL is not allowed in this context',\n },\n RSC_030: {\n id: 'RSC-030',\n severity: 'error',\n description: 'File URLs are not allowed in EPUB',\n },\n RSC_031: {\n id: 'RSC-031',\n severity: 'warning',\n description: 'Remote resource references should use HTTPS',\n },\n RSC_032: {\n id: 'RSC-032',\n severity: 'error',\n description: 'Fallback must be provided for foreign resources',\n },\n RSC_033: {\n id: 'RSC-033',\n severity: 'error',\n description: 'Relative URL strings must not have query component',\n },\n\n // HTML/XHTML errors (HTM-*)\n HTM_001: {\n id: 'HTM-001',\n severity: 'error',\n description: 'XML-based media type must be valid XML 1.0 document',\n },\n HTM_002: {\n id: 'HTM-002',\n severity: 'warning',\n description: 'XML parser does not support xml version verification',\n },\n HTM_003: {\n id: 'HTM-003',\n severity: 'error',\n description: 'External entities not allowed in EPUB v3 documents',\n },\n HTM_004: { id: 'HTM-004', severity: 'error', description: 'Irregular DOCTYPE found' },\n HTM_005: { id: 'HTM-005', severity: 'usage', description: 'External reference found' },\n HTM_006: { id: 'HTM-006', severity: 'suppressed', description: 'Required attribute missing' },\n HTM_007: {\n id: 'HTM-007',\n severity: 'warning',\n description: 'Empty or whitespace-only value of ssml:ph attribute',\n },\n HTM_008: { id: 'HTM-008', severity: 'suppressed', description: 'Invalid ID value' },\n HTM_009: {\n id: 'HTM-009',\n severity: 'error',\n description: 'DOCTYPE is obsolete or irregular, can be removed',\n },\n HTM_010: {\n id: 'HTM-010',\n severity: 'usage',\n description: 'Namespace unusual for epub prefix',\n },\n HTM_011: { id: 'HTM-011', severity: 'error', description: 'Entity is undeclared' },\n HTM_012: { id: 'HTM-012', severity: 'suppressed', description: 'Missing DOCTYPE declaration' },\n HTM_013: { id: 'HTM-013', severity: 'suppressed', description: 'Invalid DOCTYPE' },\n HTM_014: { id: 'HTM-014', severity: 'suppressed', description: 'Invalid content' },\n HTM_015: { id: 'HTM-015', severity: 'suppressed', description: 'Attribute not allowed' },\n HTM_016: { id: 'HTM-016', severity: 'suppressed', description: 'Invalid attribute value' },\n HTM_017: {\n id: 'HTM-017',\n severity: 'suppressed',\n description: 'Heading hierarchy not sequential',\n },\n HTM_018: { id: 'HTM-018', severity: 'suppressed', description: 'Empty heading element' },\n HTM_019: {\n id: 'HTM-019',\n severity: 'suppressed',\n description: 'Anchors linking within same file',\n },\n HTM_020: { id: 'HTM-020', severity: 'suppressed', description: 'SSML phoneme attribute' },\n HTM_021: { id: 'HTM-021', severity: 'suppressed', description: 'Invalid hyperlink target' },\n HTM_022: { id: 'HTM-022', severity: 'suppressed', description: 'Empty href attribute' },\n HTM_023: { id: 'HTM-023', severity: 'suppressed', description: 'External hyperlink' },\n HTM_024: {\n id: 'HTM-024',\n severity: 'suppressed',\n description: 'Hyperlink to non-document resource',\n },\n HTM_025: {\n id: 'HTM-025',\n severity: 'warning',\n description: 'Non-registered URI scheme type in href',\n },\n HTM_027: { id: 'HTM-027', severity: 'suppressed', description: 'SVG switch element' },\n HTM_028: { id: 'HTM-028', severity: 'suppressed', description: 'Invalid lang attribute value' },\n HTM_029: { id: 'HTM-029', severity: 'suppressed', description: 'Invalid character reference' },\n HTM_033: { id: 'HTM-033', severity: 'suppressed', description: 'Invalid attribute for element' },\n HTM_036: { id: 'HTM-036', severity: 'suppressed', description: 'Deprecated HTML construct' },\n HTM_038: { id: 'HTM-038', severity: 'suppressed', description: 'Deprecated HTML construct' },\n HTM_044: {\n id: 'HTM-044',\n severity: 'usage',\n description: 'Namespace URI included but not used',\n },\n HTM_045: { id: 'HTM-045', severity: 'usage', description: 'Encountered empty href' },\n HTM_046: {\n id: 'HTM-046',\n severity: 'error',\n description: 'Fixed layout document has no viewport meta element',\n },\n HTM_047: {\n id: 'HTM-047',\n severity: 'error',\n description: 'Viewport metadata has syntax error',\n },\n HTM_048: {\n id: 'HTM-048',\n severity: 'error',\n description: 'SVG Fixed-Layout must have viewBox attribute on outermost svg',\n },\n HTM_049: { id: 'HTM-049', severity: 'suppressed', description: 'Heading level skip' },\n HTM_050: { id: 'HTM-050', severity: 'suppressed', description: 'Deprecated HTML construct' },\n HTM_051: {\n id: 'HTM-051',\n severity: 'warning',\n description: 'Found Microdata but no RDFa, EDUPUB recommends RDFa Lite',\n },\n HTM_052: {\n id: 'HTM-052',\n severity: 'error',\n description: 'region-based property only allowed in Data Navigation Documents',\n },\n HTM_053: { id: 'HTM-053', severity: 'suppressed', description: 'Deprecated HTML construct' },\n HTM_054: {\n id: 'HTM-054',\n severity: 'error',\n description: 'Custom attribute namespace must not include certain strings',\n },\n HTM_055: {\n id: 'HTM-055',\n severity: 'usage',\n description: 'Element should not be used (discouraged construct)',\n },\n HTM_056: {\n id: 'HTM-056',\n severity: 'error',\n description: 'Viewport metadata missing required dimension',\n },\n HTM_057: {\n id: 'HTM-057',\n severity: 'error',\n description: 'Viewport value must be positive number or device keyword',\n },\n HTM_058: {\n id: 'HTM-058',\n severity: 'error',\n description: 'HTML documents must be UTF-8, but UTF-16 detected',\n },\n HTM_059: {\n id: 'HTM-059',\n severity: 'error',\n description: 'Viewport property must not be defined more than once',\n },\n HTM_060a: {\n id: 'HTM-060a',\n severity: 'usage',\n description: 'Secondary viewport meta in fixed-layout will be ignored',\n },\n HTM_060b: {\n id: 'HTM-060b',\n severity: 'usage',\n description: 'Viewport meta in reflowable documents will be ignored',\n },\n HTM_061: {\n id: 'HTM-061',\n severity: 'error',\n description: 'Invalid custom data attribute',\n },\n\n // CSS errors (CSS-*)\n CSS_001: {\n id: 'CSS-001',\n severity: 'error',\n description: 'Property must not be included in EPUB Style Sheet',\n },\n CSS_002: { id: 'CSS-002', severity: 'error', description: 'Empty or NULL reference found' },\n CSS_003: {\n id: 'CSS-003',\n severity: 'warning',\n description: 'CSS encoded in UTF-16, should be UTF-8',\n },\n CSS_004: {\n id: 'CSS-004',\n severity: 'error',\n description: 'CSS documents must be encoded in UTF-8',\n },\n CSS_005: {\n id: 'CSS-005',\n severity: 'usage',\n description: 'Conflicting alternate style tags found',\n },\n CSS_006: {\n id: 'CSS-006',\n severity: 'usage',\n description: 'CSS selector specifies fixed position',\n },\n CSS_007: {\n id: 'CSS-007',\n severity: 'info',\n description: 'Font-face reference to non-standard font type',\n },\n CSS_008: {\n id: 'CSS-008',\n severity: 'error',\n description: 'Error occurred while parsing CSS',\n },\n CSS_009: { id: 'CSS-009', severity: 'suppressed', description: 'Invalid CSS for fixed layout' },\n CSS_010: { id: 'CSS-010', severity: 'suppressed', description: 'CSS property not allowed' },\n CSS_011: { id: 'CSS-011', severity: 'suppressed', description: 'Viewport dimensions in CSS' },\n CSS_012: { id: 'CSS-012', severity: 'suppressed', description: 'Invalid font-face src format' },\n CSS_013: { id: 'CSS-013', severity: 'suppressed', description: 'CSS construct suppressed' },\n CSS_015: {\n id: 'CSS-015',\n severity: 'error',\n description: 'Alternative style sheets must have a title',\n },\n CSS_016: { id: 'CSS-016', severity: 'suppressed', description: 'Vendor-specific CSS property' },\n CSS_017: { id: 'CSS-017', severity: 'suppressed', description: 'Non-standard pseudo element' },\n CSS_019: {\n id: 'CSS-019',\n severity: 'warning',\n description: 'CSS font-face declaration has no attributes',\n },\n CSS_020: { id: 'CSS-020', severity: 'suppressed', description: 'Embedded font resource' },\n CSS_021: { id: 'CSS-021', severity: 'suppressed', description: 'Unusual font reference' },\n CSS_022: { id: 'CSS-022', severity: 'suppressed', description: 'OpenType font feature' },\n CSS_023: { id: 'CSS-023', severity: 'suppressed', description: 'Invalid @font-face rule' },\n CSS_024: { id: 'CSS-024', severity: 'suppressed', description: 'CSS construct suppressed' },\n CSS_025: { id: 'CSS-025', severity: 'suppressed', description: 'CSS construct suppressed' },\n CSS_028: { id: 'CSS-028', severity: 'usage', description: 'Use of font-face declaration' },\n CSS_029: {\n id: 'CSS-029',\n severity: 'usage',\n description: 'CSS class found but no property declared in package document',\n },\n CSS_030: {\n id: 'CSS-030',\n severity: 'error',\n description: 'Package declares media overlay styling but no CSS found',\n },\n\n // Navigation errors (NAV-*)\n NAV_001: {\n id: 'NAV-001',\n severity: 'error',\n description: 'Navigation Document must have a nav element with epub:type=\"toc\"',\n },\n NAV_002: { id: 'NAV-002', severity: 'suppressed', description: 'Missing toc nav element' },\n NAV_003: {\n id: 'NAV-003',\n severity: 'error',\n description: 'Navigation Document must have page list when content has page breaks',\n },\n NAV_004: {\n id: 'NAV-004',\n severity: 'usage',\n description: 'Navigation Document should contain full heading hierarchy in EDUPUB',\n },\n NAV_005: {\n id: 'NAV-005',\n severity: 'usage',\n description: 'Content has audio elements but nav has no listing of audio clips',\n },\n NAV_006: {\n id: 'NAV-006',\n severity: 'usage',\n description: 'Content has figure elements but nav has no listing of figures',\n },\n NAV_007: {\n id: 'NAV-007',\n severity: 'usage',\n description: 'Content has table elements but nav has no listing of tables',\n },\n NAV_008: {\n id: 'NAV-008',\n severity: 'usage',\n description: 'Content has video elements but nav has no listing of video clips',\n },\n NAV_009: {\n id: 'NAV-009',\n severity: 'error',\n description: 'Region-based navigation links must point to Fixed-Layout Documents',\n },\n NAV_010: {\n id: 'NAV-010',\n severity: 'error',\n description: 'Nav must not link to remote resources',\n },\n NAV_011: {\n id: 'NAV-011',\n severity: 'warning',\n description: 'Nav must be in reading order',\n },\n\n // NCX errors (NCX-*)\n NCX_001: {\n id: 'NCX-001',\n severity: 'error',\n description: 'NCX identifier does not match OPF identifier',\n },\n NCX_002: { id: 'NCX-002', severity: 'suppressed', description: 'Invalid NCX reference' },\n NCX_003: { id: 'NCX-003', severity: 'suppressed', description: 'NavPoint missing text content' },\n NCX_004: {\n id: 'NCX-004',\n severity: 'usage',\n description: 'NCX identifier should not have leading or trailing whitespace',\n },\n NCX_005: { id: 'NCX-005', severity: 'suppressed', description: 'NCX required for EPUB 2' },\n NCX_006: { id: 'NCX-006', severity: 'usage', description: 'Empty text label in NCX document' },\n\n // Accessibility errors (ACC-*)\n ACC_001: { id: 'ACC-001', severity: 'suppressed', description: 'Image missing alt text' },\n ACC_002: {\n id: 'ACC-002',\n severity: 'suppressed',\n description: 'Missing schema:accessibilityFeature metadata',\n },\n ACC_003: { id: 'ACC-003', severity: 'suppressed', description: 'Missing accessibility metadata' },\n ACC_004: {\n id: 'ACC-004',\n severity: 'suppressed',\n description: 'Html a element must have text',\n },\n ACC_005: {\n id: 'ACC-005',\n severity: 'suppressed',\n description: 'Table heading cells should use th elements',\n },\n ACC_006: {\n id: 'ACC-006',\n severity: 'suppressed',\n description: 'Tables should include thead element',\n },\n ACC_007: {\n id: 'ACC-007',\n severity: 'suppressed',\n description: 'Content Documents do not use epub:type for semantic inflection',\n },\n ACC_008: { id: 'ACC-008', severity: 'suppressed', description: 'Page numbering has gaps' },\n ACC_009: {\n id: 'ACC-009',\n severity: 'usage',\n description: 'MathML should have alttext attribute or annotation-xml child',\n },\n ACC_010: {\n id: 'ACC-010',\n severity: 'suppressed',\n description: 'Missing schema:accessMode metadata',\n },\n ACC_011: {\n id: 'ACC-011',\n severity: 'usage',\n description: 'SVG hyperlink has no accessible name',\n },\n ACC_012: {\n id: 'ACC-012',\n severity: 'suppressed',\n description: 'Table elements should include caption element',\n },\n ACC_013: {\n id: 'ACC-013',\n severity: 'suppressed',\n description: 'Complex image missing aria-describedby',\n },\n ACC_014: { id: 'ACC-014', severity: 'suppressed', description: 'Empty table header cell' },\n ACC_015: {\n id: 'ACC-015',\n severity: 'suppressed',\n description: 'Table missing summary or caption',\n },\n ACC_016: { id: 'ACC-016', severity: 'suppressed', description: 'Visual adjustments not allowed' },\n ACC_017: { id: 'ACC-017', severity: 'suppressed', description: 'Missing schema.org accessMode' },\n\n // Media errors (MED-*)\n MED_001: { id: 'MED-001', severity: 'suppressed', description: 'Invalid media type' },\n MED_002: { id: 'MED-002', severity: 'suppressed', description: 'Media overlay error' },\n MED_003: {\n id: 'MED-003',\n severity: 'error',\n description: 'Picture img must reference core media type resources',\n },\n MED_004: { id: 'MED-004', severity: 'error', description: 'Image file header may be corrupted' },\n MED_005: {\n id: 'MED-005',\n severity: 'error',\n description: 'Media Overlay audio reference to non-standard audio type',\n },\n MED_006: { id: 'MED-006', severity: 'suppressed', description: 'Invalid media fallback chain' },\n MED_007: {\n id: 'MED-007',\n severity: 'error',\n description: 'Picture source must define type for foreign resources',\n },\n MED_008: {\n id: 'MED-008',\n severity: 'error',\n description: 'clipBegin must not be after clipEnd',\n },\n MED_009: {\n id: 'MED-009',\n severity: 'error',\n description: 'clipBegin must not be same as clipEnd',\n },\n MED_010: {\n id: 'MED-010',\n severity: 'error',\n description: 'Content Document from Media Overlay must specify media-overlay attribute',\n },\n MED_011: {\n id: 'MED-011',\n severity: 'error',\n description: 'Content Document referenced from multiple Media Overlay Documents',\n },\n MED_012: {\n id: 'MED-012',\n severity: 'error',\n description: 'media-overlay attribute does not match Media Overlay ID',\n },\n MED_013: {\n id: 'MED-013',\n severity: 'error',\n description: 'Media Overlay from media-overlay attribute has no reference to Content Document',\n },\n MED_014: {\n id: 'MED-014',\n severity: 'error',\n description: 'Media overlay audio URLs must not have fragment',\n },\n MED_015: {\n id: 'MED-015',\n severity: 'usage',\n description: 'Media overlay text references must be in reading order',\n },\n MED_016: {\n id: 'MED-016',\n severity: 'warning',\n description: 'Media Overlays total duration should be sum of all durations',\n },\n MED_017: {\n id: 'MED-017',\n severity: 'warning',\n description: 'URL fragment should indicate element ID',\n },\n MED_018: {\n id: 'MED-018',\n severity: 'warning',\n description: 'URL fragment should be SVG fragment identifier',\n },\n\n // Scripting errors (SCP-*)\n SCP_001: { id: 'SCP-001', severity: 'suppressed', description: 'Scripting used in publication' },\n SCP_002: {\n id: 'SCP-002',\n severity: 'suppressed',\n description: 'Script in spine content document',\n },\n SCP_003: { id: 'SCP-003', severity: 'suppressed', description: 'Inline script element' },\n SCP_004: {\n id: 'SCP-004',\n severity: 'suppressed',\n description: 'Event handler attribute detected',\n },\n SCP_005: {\n id: 'SCP-005',\n severity: 'suppressed',\n description: 'Script not declared in manifest',\n },\n SCP_006: { id: 'SCP-006', severity: 'suppressed', description: 'JavaScript URL not allowed' },\n SCP_007: { id: 'SCP-007', severity: 'suppressed', description: 'Container-constrained script' },\n SCP_008: {\n id: 'SCP-008',\n severity: 'suppressed',\n description: 'Scripted content missing properties',\n },\n SCP_009: { id: 'SCP-009', severity: 'suppressed', description: 'Script execution error' },\n SCP_010: { id: 'SCP-010', severity: 'suppressed', description: 'EPUB CFI URL detected' },\n\n // Informational messages (INF-*)\n INF_001: {\n id: 'INF-001',\n severity: 'info',\n description: 'Rule is under review and severity may change',\n },\n\n // Internal checker errors (CHK-*)\n CHK_001: {\n id: 'CHK-001',\n severity: 'error',\n description: 'Custom message overrides file not found',\n },\n CHK_002: {\n id: 'CHK-002',\n severity: 'error',\n description: 'Unrecognized custom message id in overrides file',\n },\n CHK_003: {\n id: 'CHK-003',\n severity: 'error',\n description: 'Unrecognized custom message severity in overrides file',\n },\n CHK_004: {\n id: 'CHK-004',\n severity: 'error',\n description: 'Custom message contains too many parameters',\n },\n CHK_005: {\n id: 'CHK-005',\n severity: 'error',\n description: 'Custom suggestion contains too many parameters',\n },\n CHK_006: {\n id: 'CHK-006',\n severity: 'error',\n description: 'Unable to parse custom format parameter',\n },\n CHK_007: {\n id: 'CHK-007',\n severity: 'error',\n description: 'Error processing custom message file',\n },\n CHK_008: {\n id: 'CHK-008',\n severity: 'error',\n description: 'Error processing item, skipping other checks',\n },\n} as const satisfies Record<string, MessageDef>;\n\ntype MessageDefsType = typeof MessageDefs;\ntype MessageKey = keyof MessageDefsType;\n\n/**\n * MessageId provides enum-like access to message IDs.\n *\n * @example\n * ```typescript\n * MessageId.PKG_001 // 'PKG-001'\n * MessageId.OPF_010 // 'OPF-010'\n * ```\n */\nexport const MessageId = Object.fromEntries(\n Object.entries(MessageDefs).map(([key, def]) => [key, def.id]),\n) as { readonly [K in MessageKey]: MessageDefsType[K]['id'] };\n\nexport type MessageId = MessageDefsType[MessageKey]['id'];\n\n/**\n * Message info structure\n */\nexport interface MessageInfo {\n id: string;\n severity: MessageSeverity;\n description: string;\n}\n\n/**\n * Get message info by ID\n */\nexport function getMessageInfo(id: string): MessageInfo | undefined {\n const entry = Object.values(MessageDefs).find((def) => def.id === id);\n return entry;\n}\n\n/**\n * Get default severity for a message ID\n */\nexport function getDefaultSeverity(id: string): MessageSeverity {\n const info = getMessageInfo(id);\n return info?.severity ?? 'error';\n}\n\n/**\n * Get all message definitions as an array (for iteration/display)\n */\nexport function getAllMessages(): readonly MessageInfo[] {\n return Object.values(MessageDefs);\n}\n\n/**\n * Format message list for console output\n */\nexport function formatMessageList(): string {\n const lines: string[] = [];\n lines.push('ID\\tSEVERITY\\tDESCRIPTION');\n lines.push('─'.repeat(80));\n\n for (const msg of Object.values(MessageDefs)) {\n const severity = msg.severity.toUpperCase();\n lines.push(`${msg.id}\\t${severity}\\t${msg.description}`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Options for creating a validation message\n */\nexport interface CreateMessageOptions {\n /** Message ID from MessageId enum */\n id: MessageId;\n /** Human-readable message */\n message: string;\n /** Location where the issue was found */\n location?: EPUBLocation;\n /** Suggestion for fixing the issue */\n suggestion?: string;\n /** Override the default severity (use sparingly) */\n severityOverride?: Severity;\n}\n\n/**\n * Create a validation message with automatic severity lookup\n *\n * @example\n * ```typescript\n * const msg = createMessage({\n * id: MessageId.PKG_006,\n * message: 'Missing mimetype file',\n * location: { path: 'mimetype' },\n * });\n * if (msg) context.messages.push(msg);\n * ```\n */\nexport function createMessage(options: CreateMessageOptions): ValidationMessage | null {\n const { id, message, location, suggestion, severityOverride } = options;\n\n const registeredSeverity = getDefaultSeverity(id);\n\n // Skip suppressed messages unless severity is overridden\n if (registeredSeverity === 'suppressed' && !severityOverride) {\n return null;\n }\n\n const severity: Severity = severityOverride ?? (registeredSeverity as Severity);\n\n const result: ValidationMessage = {\n id,\n severity,\n message,\n };\n\n if (location) {\n result.location = location;\n }\n\n if (suggestion) {\n result.suggestion = suggestion;\n }\n\n return result;\n}\n\n/**\n * Create and push a validation message to the messages array.\n * Automatically handles suppressed messages by not pushing them.\n *\n * @example\n * ```typescript\n * pushMessage(context.messages, {\n * id: MessageId.PKG_006,\n * message: 'Missing mimetype file',\n * location: { path: 'mimetype' },\n * });\n * ```\n */\nexport function pushMessage(messages: ValidationMessage[], options: CreateMessageOptions): void {\n const msg = createMessage(options);\n if (msg) {\n messages.push(msg);\n }\n}\n","/**\n * CSS validation using css-tree\n */\n\nimport { type Atrule, type CssNode, type Declaration, type Url, parse, walk } from 'css-tree';\nimport { MessageId, pushMessage } from '../messages/index.js';\nimport type { ValidationContext } from '../types.js';\n\ninterface ParseErrorWithLocation {\n formattedMessage: string;\n line?: number;\n column?: number;\n}\n\ninterface CssLocation {\n start?: { line: number; column: number };\n}\n\n/**\n * Reference found in CSS (for @import, @font-face src, and url() declarations)\n */\nexport interface CSSReference {\n url: string;\n type: 'import' | 'font' | 'image' | 'resource';\n line?: number | undefined;\n column?: number | undefined;\n}\n\n/**\n * Result of CSS validation including extracted references\n */\nexport interface CSSValidationResult {\n /** References to other resources (imports, fonts) */\n references: CSSReference[];\n /** Font families declared via @font-face */\n fontFamilies: string[];\n}\n\n/** Standard EPUB font MIME types */\nconst BLESSED_FONT_TYPES = new Set([\n 'application/font-woff',\n 'application/font-woff2',\n 'font/woff',\n 'font/woff2',\n 'font/otf',\n 'font/ttf',\n 'application/vnd.ms-opentype',\n 'application/font-sfnt',\n 'application/x-font-ttf',\n 'application/x-font-opentype',\n 'application/x-font-truetype',\n]);\n\n/** Map file extensions to font MIME types */\nconst FONT_EXTENSION_TO_TYPE: Record<string, string> = {\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.otf': 'font/otf',\n '.ttf': 'font/ttf',\n};\n\n/**\n * Validator for CSS stylesheets\n */\nexport class CSSValidator {\n /**\n * Validate CSS content and extract references\n */\n validate(context: ValidationContext, css: string, resourcePath: string): CSSValidationResult {\n const result: CSSValidationResult = {\n references: [],\n fontFamilies: [],\n };\n\n let ast: CssNode;\n\n try {\n ast = parse(css, {\n positions: true,\n onParseError: (error) => {\n const err = error as ParseErrorWithLocation;\n const location: { path: string; line?: number; column?: number } = {\n path: resourcePath,\n };\n if (err.line !== undefined) location.line = err.line;\n if (err.column !== undefined) location.column = err.column;\n\n pushMessage(context.messages, {\n id: MessageId.CSS_008,\n message: `CSS parse error: ${error.formattedMessage}`,\n location,\n });\n },\n });\n } catch (error) {\n pushMessage(context.messages, {\n id: MessageId.CSS_008,\n message: `CSS parse error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n location: { path: resourcePath },\n });\n return result;\n }\n\n // Walk the AST to check for discouraged properties and collect references\n this.checkDiscouragedProperties(context, ast, resourcePath);\n this.checkAtRules(context, ast, resourcePath, result);\n this.checkMediaOverlayClasses(context, ast, resourcePath);\n this.extractUrlReferences(context, ast, resourcePath, result);\n\n return result;\n }\n\n private extractUrlReferences(\n context: ValidationContext,\n ast: CssNode,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n walk(ast, (node) => {\n if (node.type === 'Atrule') {\n const atRule = node;\n if (atRule.name === 'font-face') {\n return;\n }\n if (atRule.block) {\n walk(atRule.block, (blockNode) => {\n if (blockNode.type === 'Declaration') {\n this.processDeclarationForUrl(blockNode, resourcePath, result);\n }\n });\n }\n } else if (node.type === 'Rule') {\n const rule = node;\n walk(rule.block, (blockNode) => {\n if (blockNode.type === 'Declaration') {\n this.processDeclarationForUrl(blockNode, resourcePath, result);\n }\n });\n }\n });\n }\n\n private processDeclarationForUrl(\n declaration: Declaration,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n const property = declaration.property.toLowerCase();\n\n walk(declaration.value, (valueNode) => {\n if (valueNode.type === 'Url') {\n const urlValue = this.extractUrlValue(valueNode);\n if (urlValue && !urlValue.startsWith('data:')) {\n const loc = (valueNode as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = {\n path: resourcePath,\n };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n let refType: 'image' | 'font' | 'resource' = 'resource';\n if (property.includes('font')) {\n refType = 'font';\n } else if (\n property.includes('background') ||\n property.includes('list-style') ||\n property.includes('content') ||\n property.includes('border-image') ||\n property.includes('mask')\n ) {\n refType = 'image';\n }\n\n result.references.push({\n url: urlValue,\n type: refType,\n line: start?.line,\n column: start?.column,\n });\n }\n }\n });\n }\n\n /**\n * Check for forbidden and discouraged CSS properties in EPUB\n */\n private checkDiscouragedProperties(\n context: ValidationContext,\n ast: CssNode,\n resourcePath: string,\n ): void {\n walk(ast, (node) => {\n if (node.type === 'Declaration') {\n this.checkForbiddenProperties(context, node, resourcePath);\n this.checkPositionProperty(context, node, resourcePath);\n }\n });\n }\n\n /**\n * Check for forbidden CSS properties (direction, unicode-bidi)\n * These properties must not be used in EPUB content per EPUB spec\n */\n private checkForbiddenProperties(\n context: ValidationContext,\n node: Declaration,\n resourcePath: string,\n ): void {\n const property = node.property.toLowerCase();\n const forbiddenProperties = ['direction', 'unicode-bidi'];\n\n if (!forbiddenProperties.includes(property)) return;\n\n const loc = (node as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n pushMessage(context.messages, {\n id: MessageId.CSS_001,\n message: `CSS property \"${property}\" must not be included in an EPUB Style Sheet`,\n location,\n });\n }\n\n /**\n * Check position property for discouraged values\n */\n private checkPositionProperty(\n context: ValidationContext,\n node: Declaration,\n resourcePath: string,\n ): void {\n const property = node.property.toLowerCase();\n if (property !== 'position') return;\n\n const value = this.getDeclarationValue(node);\n const loc = (node as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n // CSS-006: position: fixed is discouraged\n if (value === 'fixed') {\n pushMessage(context.messages, {\n id: MessageId.CSS_006,\n message: 'CSS property \"position: fixed\" is discouraged in EPUB',\n location,\n });\n }\n\n // CSS-019: position: absolute is discouraged\n if (value === 'absolute') {\n pushMessage(context.messages, {\n id: MessageId.CSS_019,\n message: 'CSS property \"position: absolute\" should be used with caution in EPUB',\n location,\n });\n }\n }\n\n /**\n * Extract the value from a Declaration node\n */\n private getDeclarationValue(node: Declaration): string {\n const value = node.value;\n if (value.type === 'Value') {\n const first = value.children.first;\n if (first?.type === 'Identifier') {\n return first.name.toLowerCase();\n }\n }\n return '';\n }\n\n /**\n * Check at-rules (@import, @font-face)\n */\n private checkAtRules(\n context: ValidationContext,\n ast: CssNode,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n walk(ast, (node) => {\n if (node.type === 'Atrule') {\n const atRule = node;\n const ruleName = atRule.name.toLowerCase();\n\n if (ruleName === 'import') {\n this.checkImport(context, atRule, resourcePath, result);\n } else if (ruleName === 'font-face') {\n this.checkFontFace(context, atRule, resourcePath, result);\n }\n }\n });\n }\n\n /**\n * Check @import at-rule\n */\n private checkImport(\n context: ValidationContext,\n atRule: Atrule,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n const loc = (atRule as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n // Extract URL from @import prelude\n if (!atRule.prelude) {\n pushMessage(context.messages, {\n id: MessageId.CSS_002,\n message: 'Empty @import rule',\n location,\n });\n return;\n }\n\n let importUrl = '';\n\n walk(atRule.prelude, (node) => {\n if (importUrl) return;\n\n if (node.type === 'Url') {\n importUrl = this.extractUrlValue(node);\n } else if (node.type === 'String') {\n importUrl = (node as { value: string }).value;\n }\n });\n\n if (!importUrl || importUrl.trim() === '') {\n pushMessage(context.messages, {\n id: MessageId.CSS_002,\n message: 'Empty or NULL reference found in @import',\n location,\n });\n return;\n }\n\n // Add to references for cross-reference validation\n result.references.push({\n url: importUrl,\n type: 'import',\n line: start?.line,\n column: start?.column,\n });\n }\n\n /**\n * Check @font-face at-rule\n */\n private checkFontFace(\n context: ValidationContext,\n atRule: Atrule,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n const loc = (atRule as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n // Report font-face usage\n if (context.options.includeUsage) {\n pushMessage(context.messages, {\n id: MessageId.CSS_028,\n message: 'Use of @font-face declaration',\n location,\n });\n }\n\n // Check if @font-face has any declarations\n if (!atRule.block || atRule.block.children.isEmpty) {\n pushMessage(context.messages, {\n id: MessageId.CSS_019,\n message: '@font-face declaration has no attributes',\n location,\n });\n return;\n }\n\n const state = { hasSrc: false, fontFamily: null as string | null };\n\n walk(atRule.block, (node) => {\n if (node.type === 'Declaration') {\n const propName = node.property.toLowerCase();\n\n if (propName === 'font-family') {\n state.fontFamily = this.extractFontFamily(node);\n } else if (propName === 'src') {\n state.hasSrc = true;\n this.checkFontFaceSrc(context, node, resourcePath, result);\n }\n }\n });\n\n if (state.fontFamily) {\n result.fontFamilies.push(state.fontFamily);\n }\n\n if (!state.hasSrc) {\n pushMessage(context.messages, {\n id: MessageId.CSS_019,\n message: '@font-face declaration is missing src property',\n location,\n });\n }\n }\n\n /**\n * Check src property in @font-face\n */\n private checkFontFaceSrc(\n context: ValidationContext,\n decl: Declaration,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n const loc = (decl as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n // Walk through the value to find url() functions\n walk(decl.value, (node) => {\n if (node.type === 'Url') {\n const urlNode = node;\n const urlValue = this.extractUrlValue(urlNode);\n\n if (!urlValue || urlValue.trim() === '') {\n pushMessage(context.messages, {\n id: MessageId.CSS_002,\n message: 'Empty or NULL reference found in @font-face src',\n location,\n });\n return;\n }\n\n // Skip data: URLs and fragment-only URLs\n if (urlValue.startsWith('data:') || urlValue.startsWith('#')) {\n return;\n }\n\n // Add to references for cross-reference validation\n result.references.push({\n url: urlValue,\n type: 'font',\n line: start?.line,\n column: start?.column,\n });\n\n // Check font MIME type based on extension\n this.checkFontType(context, urlValue, resourcePath, location);\n }\n });\n }\n\n /**\n * Check if font type is a blessed EPUB font type\n */\n private checkFontType(\n context: ValidationContext,\n fontUrl: string,\n resourcePath: string,\n location: { path: string; line?: number; column?: number },\n ): void {\n // Extract file extension\n const urlPath = fontUrl.split('?')[0] ?? fontUrl; // Remove query string\n const extMatch = /\\.[a-zA-Z0-9]+$/.exec(urlPath);\n if (!extMatch) return;\n\n const ext = extMatch[0].toLowerCase();\n const mimeType = FONT_EXTENSION_TO_TYPE[ext];\n\n if (mimeType && !BLESSED_FONT_TYPES.has(mimeType)) {\n pushMessage(context.messages, {\n id: MessageId.CSS_007,\n message: `Font-face reference \"${fontUrl}\" refers to non-standard font type \"${mimeType}\"`,\n location,\n });\n }\n\n // Also check if the manifest has this file with a non-standard type\n const packageDoc = context.packageDocument;\n if (packageDoc) {\n // Resolve relative URL\n const cssDir = resourcePath.includes('/')\n ? resourcePath.substring(0, resourcePath.lastIndexOf('/'))\n : '';\n const resolvedPath = this.resolvePath(cssDir, fontUrl);\n\n const manifestItem = packageDoc.manifest.find((item) => item.href === resolvedPath);\n if (manifestItem && !BLESSED_FONT_TYPES.has(manifestItem.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.CSS_007,\n message: `Font-face reference \"${fontUrl}\" has non-standard media type \"${manifestItem.mediaType}\" in manifest`,\n location,\n });\n }\n }\n }\n\n /**\n * Extract URL value from Url node\n */\n private extractUrlValue(urlNode: Url): string {\n const value = urlNode.value;\n if (typeof value === 'string') {\n return value;\n }\n return '';\n }\n\n /**\n * Extract font-family value from declaration\n */\n private extractFontFamily(decl: Declaration): string | null {\n const value = decl.value;\n if (value.type === 'Value') {\n const first = value.children.first;\n if (first?.type === 'String') {\n return (first as { value: string }).value;\n }\n if (first?.type === 'Identifier') {\n return (first as { name: string }).name;\n }\n }\n return null;\n }\n\n /**\n * Resolve a relative path from a base path\n */\n private resolvePath(basePath: string, relativePath: string): string {\n // Handle absolute paths\n if (relativePath.startsWith('/')) {\n return relativePath.substring(1);\n }\n\n // Split paths into segments\n const baseSegments = basePath.split('/').filter(Boolean);\n const relativeSegments = relativePath.split('/');\n\n // Start from base directory\n const resultSegments = [...baseSegments];\n\n for (const segment of relativeSegments) {\n if (segment === '..') {\n resultSegments.pop();\n } else if (segment !== '.' && segment !== '') {\n resultSegments.push(segment);\n }\n }\n\n return resultSegments.join('/');\n }\n\n /**\n * Check for reserved media overlay class names\n */\n private checkMediaOverlayClasses(\n context: ValidationContext,\n ast: CssNode,\n resourcePath: string,\n ): void {\n const reservedClassNames = new Set([\n '-epub-media-overlay-active',\n 'media-overlay-active',\n '-epub-media-overlay-playing',\n 'media-overlay-playing',\n ]);\n\n walk(ast, (node) => {\n if (node.type === 'ClassSelector') {\n const className = node.name.toLowerCase();\n\n if (reservedClassNames.has(className)) {\n const loc = (node as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n pushMessage(context.messages, {\n id: MessageId.CSS_029,\n message: `Class name \"${className}\" is reserved for media overlays`,\n location,\n });\n }\n }\n });\n }\n}\n","import type { EPUBVersion } from '../types.js';\n\n/**\n * Represents a manifest item in the OPF\n */\nexport interface ManifestItem {\n /** Unique identifier for this item */\n id: string;\n /** Path relative to the OPF file */\n href: string;\n /** MIME media type */\n mediaType: string;\n /** Fallback item ID for non-standard media types */\n fallback?: string;\n /** Media overlay ID */\n mediaOverlay?: string;\n /** Item properties (EPUB 3) - e.g., 'nav', 'scripted', 'svg', 'remote-resources' */\n properties?: string[];\n}\n\n/**\n * Represents a spine itemref in the OPF\n */\nexport interface SpineItemRef {\n /** Reference to manifest item ID */\n idref: string;\n /** Whether this item is part of the linear reading order */\n linear: boolean;\n /** Itemref properties (EPUB 3) - e.g., 'page-spread-left', 'page-spread-right' */\n properties?: string[];\n}\n\n/**\n * Represents a guide reference (EPUB 2)\n */\nexport interface GuideReference {\n /** Type of reference (cover, toc, etc.) */\n type: string;\n /** Title for display */\n title?: string;\n /** Path to the referenced item */\n href: string;\n}\n\n/**\n * Dublin Core metadata element\n */\nexport interface DCElement {\n /** The element name (title, creator, identifier, etc.) */\n name: string;\n /** The text content */\n value: string;\n /** The id attribute, if any */\n id?: string;\n /** Additional attributes */\n attributes?: Record<string, string>;\n}\n\n/**\n * EPUB 3 meta element\n */\nexport interface MetaElement {\n /** Property name (with optional prefix) */\n property: string;\n /** The text content */\n value: string;\n /** ID of the element this meta refines */\n refines?: string;\n /** Scheme for the value */\n scheme?: string;\n /** The id attribute, if any */\n id?: string;\n}\n\n/**\n * EPUB 3 link element\n */\nexport interface LinkElement {\n /** Relationship type */\n rel: string;\n /** URL to the linked resource */\n href: string;\n /** Media type of the linked resource */\n mediaType?: string;\n /** ID of the element this link refines */\n refines?: string;\n /** Link properties */\n properties?: string[];\n /** The id attribute, if any */\n id?: string;\n /** Language tag for the linked resource */\n hreflang?: string;\n}\n\n/**\n * Parsed OPF package document\n */\nexport interface PackageDocument {\n /** EPUB version from package@version */\n version: EPUBVersion;\n /** Unique identifier reference (package@unique-identifier) */\n uniqueIdentifier: string;\n /** Package prefix declarations (EPUB 3) */\n prefixes?: Record<string, string>;\n /** Package direction (rtl, ltr, auto) */\n dir?: string;\n /** Dublin Core metadata elements */\n dcElements: DCElement[];\n /** EPUB 3 meta elements */\n metaElements: MetaElement[];\n /** EPUB 3 link elements */\n linkElements: LinkElement[];\n /** Manifest items */\n manifest: ManifestItem[];\n /** Spine item references */\n spine: SpineItemRef[];\n /** Spine toc attribute (NCX reference for EPUB 2) */\n spineToc?: string;\n /** Spine page-progression-direction */\n pageProgressionDirection?: 'ltr' | 'rtl' | 'default';\n /** Guide references (EPUB 2) */\n guide: GuideReference[];\n /** Collections (EPUB 3) */\n collections: Collection[];\n /** Whether the bindings element is present (deprecated in EPUB 3.3) */\n hasBindings?: boolean;\n /** xml:lang attribute on elements (for validation) */\n xmlLangs?: string[];\n}\n\n/**\n * Represents a collection in the OPF (EPUB 3)\n */\nexport interface Collection {\n /** Collection role (dictionary, index, preview, etc.) */\n role: string;\n /** Collection identifier */\n id?: string;\n /** Collection name/label */\n name?: string;\n /** Resource hrefs in this collection (from link elements) */\n links: string[];\n}\n\n/**\n * Core Media Types that don't require fallbacks\n * @see https://www.w3.org/TR/epub-33/#sec-core-media-types\n */\nexport const CORE_MEDIA_TYPES = new Set([\n // Image types\n 'image/gif',\n 'image/jpeg',\n 'image/png',\n 'image/svg+xml',\n 'image/webp',\n // Audio types\n 'audio/mpeg',\n 'audio/mp4',\n 'audio/ogg',\n // CSS\n 'text/css',\n // Fonts\n 'font/otf',\n 'font/ttf',\n 'font/woff',\n 'font/woff2',\n 'application/font-sfnt', // deprecated alias for font/otf, font/ttf\n 'application/font-woff', // deprecated alias for font/woff\n 'application/vnd.ms-opentype', // deprecated alias\n // Content documents\n 'application/xhtml+xml',\n 'application/x-dtbncx+xml', // NCX\n // JavaScript (EPUB 3)\n 'text/javascript',\n 'application/javascript',\n // Media overlays\n 'application/smil+xml',\n // PLS (Pronunciation Lexicon)\n 'application/pls+xml',\n]);\n\n/**\n * Check if a MIME type is a Core Media Type per EPUB 3 spec.\n * Handles media type parameters (e.g., \"audio/ogg ; codecs=opus\")\n * and the rule that all video/* types are blessed.\n */\nexport function isCoreMediaType(mimeType: string): boolean {\n if (CORE_MEDIA_TYPES.has(mimeType)) return true;\n // All video/* types are blessed per EPUB 3 spec\n if (mimeType.startsWith('video/')) return true;\n // Handle audio/ogg with codecs parameter\n if (/^audio\\/ogg\\s*;\\s*codecs=opus$/i.test(mimeType)) return true;\n // Strip media type parameters and retry\n const semicolonIndex = mimeType.indexOf(';');\n if (semicolonIndex >= 0) {\n const baseType = mimeType.substring(0, semicolonIndex).trim();\n if (CORE_MEDIA_TYPES.has(baseType)) return true;\n if (baseType.startsWith('video/')) return true;\n }\n return false;\n}\n\n/**\n * Known item property values (EPUB 3)\n */\nexport const ITEM_PROPERTIES = new Set([\n 'cover-image',\n 'mathml',\n 'nav',\n 'remote-resources',\n 'scripted',\n 'svg',\n 'switch',\n]);\n\n/**\n * Known link element property values (EPUB 3)\n */\nexport const LINK_PROPERTIES = new Set(['onix', 'marc21xml-record', 'mods-record', 'xmp-record']);\n\n/**\n * Known spine itemref property values (EPUB 3)\n */\nexport const SPINE_PROPERTIES = new Set([\n 'page-spread-left',\n 'page-spread-right',\n 'rendition:spread-none',\n 'rendition:spread-landscape',\n 'rendition:spread-portrait',\n 'rendition:spread-both',\n 'rendition:spread-auto',\n 'rendition:page-spread-center',\n 'rendition:layout-reflowable',\n 'rendition:layout-pre-paginated',\n 'rendition:orientation-auto',\n 'rendition:orientation-landscape',\n 'rendition:orientation-portrait',\n]);\n","/**\n * Types for resource reference validation\n */\n\nimport type { EPUBLocation } from '../types.js';\n\n/**\n * Types of resource references\n */\nexport enum ReferenceType {\n // Linked resources\n LINK = 'link',\n // Publication resources\n GENERIC = 'generic',\n STYLESHEET = 'stylesheet',\n MEDIA_OVERLAY = 'media-overlay',\n HYPERLINK = 'hyperlink',\n FONT = 'font',\n IMAGE = 'image',\n AUDIO = 'audio',\n VIDEO = 'video',\n TRACK = 'track',\n CITE = 'cite',\n // SVG-specific\n SVG_PAINT = 'svg-paint',\n SVG_CLIP_PATH = 'svg-clip-path',\n SVG_SYMBOL = 'svg-symbol',\n // Navigation\n REGION_BASED_NAV = 'region-based-nav',\n NAV_TOC_LINK = 'nav-toc-link',\n NAV_PAGELIST_LINK = 'nav-pagelist-link',\n OVERLAY_TEXT_LINK = 'overlay-text-link',\n SEARCH_KEY = 'search-key',\n}\n\n/**\n * Check if a reference type is a publication resource reference\n */\nexport function isPublicationResourceReference(type: ReferenceType): boolean {\n return [\n ReferenceType.GENERIC,\n ReferenceType.STYLESHEET,\n ReferenceType.FONT,\n ReferenceType.IMAGE,\n ReferenceType.AUDIO,\n ReferenceType.VIDEO,\n ReferenceType.TRACK,\n ReferenceType.MEDIA_OVERLAY,\n ReferenceType.SVG_SYMBOL,\n ReferenceType.SVG_PAINT,\n ReferenceType.SVG_CLIP_PATH,\n ].includes(type);\n}\n\n/**\n * Parsed URL information for a reference\n */\nexport interface ParsedURL {\n /** Full URL string */\n url: string;\n /** URL without fragment identifier */\n resource: string;\n /** Fragment identifier (ID), if present */\n fragment?: string;\n /** Whether the URL has a fragment */\n hasFragment: boolean;\n}\n\n/**\n * A resource reference from the EPUB\n */\nexport interface Reference {\n /** Full URL with fragment */\n url: string;\n /** Target resource without fragment */\n targetResource: string;\n /** Fragment identifier if present */\n fragment?: string;\n /** Type of reference */\n type: ReferenceType;\n /** Location where reference was found */\n location: EPUBLocation;\n /** Whether reference has intrinsic fallback */\n hasIntrinsicFallback?: boolean;\n}\n\n/**\n * A resource (manifest item) in the EPUB\n */\nexport interface Resource {\n /** URL of the resource */\n url: string;\n /** MIME type */\n mimeType: string;\n /** Whether resource is in spine */\n inSpine: boolean;\n /** Whether resource has core media type fallback */\n hasCoreMediaTypeFallback?: boolean;\n /** Whether this is the navigation document */\n isNav?: boolean;\n /** Whether this is the cover image */\n isCoverImage?: boolean;\n /** Whether this is an NCX document */\n isNcx?: boolean;\n /** IDs defined in this resource */\n ids: Set<string>;\n}\n","/**\n * URL parsing and validation utilities\n */\n\nimport type { ParsedURL } from './types.js';\n\n/**\n * Parse an EPUB-internal URL into its components\n */\nexport function parseURL(urlString: string): ParsedURL {\n const hashIndex = urlString.indexOf('#');\n\n if (hashIndex === -1) {\n return {\n url: urlString,\n resource: urlString,\n hasFragment: false,\n };\n }\n\n const resource = urlString.substring(0, hashIndex);\n const fragment = urlString.substring(hashIndex + 1);\n\n const result: ParsedURL = {\n url: urlString,\n resource,\n hasFragment: true,\n };\n\n if (fragment) {\n result.fragment = fragment;\n }\n\n return result;\n}\n\n/**\n * Check if a URL is a data URL\n */\nexport function isDataURL(url: string): boolean {\n return url.startsWith('data:');\n}\n\n/**\n * Check if a URL is a file URL\n */\nexport function isFileURL(url: string): boolean {\n return url.startsWith('file:');\n}\n\n/**\n * Check if a URL is relative (not absolute)\n */\nexport function isRelativeURL(url: string): boolean {\n const regex = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\n return regex.exec(url) === null;\n}\n\n/**\n * Check if a URL has an absolute path (starts with /)\n */\nexport function hasAbsolutePath(url: string): boolean {\n return url.startsWith('/');\n}\n\n/**\n * Check if a URL tries to escape with parent directory (..)\n */\nexport function hasParentDirectoryReference(url: string): boolean {\n return url.includes('..');\n}\n\n/**\n * Check if a URL is malformed\n */\nexport function isMalformedURL(url: string): boolean {\n if (!url) return true;\n\n try {\n // Trim leading/trailing whitespace (XML attribute values are whitespace-trimmed)\n const trimmed = url.trim();\n if (!trimmed) return true;\n // Check for invalid characters (whitespace within URL, angle brackets)\n if (/[\\s<>]/.test(trimmed)) return true;\n return false;\n } catch {\n return true;\n }\n}\n\n/**\n * Check if a URL is HTTPS\n */\nexport function isHTTPS(url: string): boolean {\n return url.startsWith('https://');\n}\n\n/**\n * Check if a URL is HTTP\n */\nexport function isHTTP(url: string): boolean {\n return url.startsWith('http://');\n}\n\n/**\n * Check if a URL is remote (not relative)\n */\nexport function isRemoteURL(url: string): boolean {\n return isHTTP(url) || isHTTPS(url);\n}\n\n/**\n * Check if a URL leaks outside the EPUB container using the dual-base resolution trick\n */\nexport function checkUrlLeaking(href: string): boolean {\n const TEST_BASE_A = 'https://a.example.org/A/';\n const TEST_BASE_B = 'https://b.example.org/B/';\n try {\n const urlA = new URL(href, TEST_BASE_A).toString();\n const urlB = new URL(href, TEST_BASE_B).toString();\n return !urlA.startsWith(TEST_BASE_A) || !urlB.startsWith(TEST_BASE_B);\n } catch {\n return false;\n }\n}\n\nexport function resolveManifestHref(opfDir: string, href: string): string {\n if (isRemoteURL(href)) return href;\n try {\n const decoded = decodeURIComponent(href);\n const path = opfDir ? `${opfDir}/${decoded}` : decoded;\n return path.normalize('NFC');\n } catch {\n const path = opfDir ? `${opfDir}/${href}` : href;\n return path.normalize('NFC');\n }\n}\n","/**\n * Content document validation using libxml2-wasm for XML parsing\n */\n\nimport { XmlDocument, type XmlElement, type XmlNode } from 'libxml2-wasm';\nimport { CSSValidator } from '../css/validator.js';\nimport { MessageId, pushMessage } from '../messages/index.js';\nimport { isCoreMediaType } from '../opf/types.js';\nimport type { ResourceRegistry } from '../references/registry.js';\nimport { ReferenceType } from '../references/types.js';\nimport { resolveManifestHref } from '../references/url.js';\nimport type { ReferenceValidator } from '../references/validator.js';\nimport type { ValidationContext } from '../types.js';\n\nconst DISCOURAGED_ELEMENTS = new Set(['base', 'embed']);\n\nconst HTML_ENTITIES = new Set([\n 'nbsp',\n 'iexcl',\n 'cent',\n 'pound',\n 'curren',\n 'yen',\n 'brvbar',\n 'sect',\n 'uml',\n 'copy',\n 'ordf',\n 'laquo',\n 'not',\n 'shy',\n 'reg',\n 'macr',\n 'deg',\n 'plusmn',\n 'sup2',\n 'sup3',\n 'acute',\n 'micro',\n 'para',\n 'middot',\n 'cedil',\n 'sup1',\n 'ordm',\n 'raquo',\n 'frac14',\n 'frac12',\n 'frac34',\n 'iquest',\n 'Agrave',\n 'Aacute',\n 'Acirc',\n 'Atilde',\n 'Auml',\n 'Aring',\n 'AElig',\n 'Ccedil',\n 'Egrave',\n 'Eacute',\n 'Ecirc',\n 'Euml',\n 'Igrave',\n 'Iacute',\n 'Icirc',\n 'Iuml',\n 'ETH',\n 'Ntilde',\n 'Ograve',\n 'Oacute',\n 'Ocirc',\n 'Otilde',\n 'Ouml',\n 'times',\n 'Oslash',\n 'Ugrave',\n 'Uacute',\n 'Ucirc',\n 'Uuml',\n 'Yacute',\n 'THORN',\n 'szlig',\n 'agrave',\n 'aacute',\n 'acirc',\n 'atilde',\n 'auml',\n 'aring',\n 'aelig',\n 'ccedil',\n 'egrave',\n 'eacute',\n 'ecirc',\n 'euml',\n 'igrave',\n 'iacute',\n 'icirc',\n 'iuml',\n 'eth',\n 'ntilde',\n 'ograve',\n 'oacute',\n 'ocirc',\n 'otilde',\n 'ouml',\n 'divide',\n 'oslash',\n 'ugrave',\n 'uacute',\n 'ucirc',\n 'uuml',\n 'yacute',\n 'thorn',\n 'yuml',\n]);\n\nexport class ContentValidator {\n validate(\n context: ValidationContext,\n registry?: ResourceRegistry,\n refValidator?: ReferenceValidator,\n ): void {\n const packageDoc = context.packageDocument;\n if (!packageDoc) {\n return;\n }\n\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n for (const item of packageDoc.manifest) {\n if (item.mediaType === 'application/xhtml+xml') {\n const fullPath = resolveManifestHref(opfDir, item.href);\n this.validateXHTMLDocument(context, fullPath, item.id, opfDir, registry, refValidator);\n } else if (item.mediaType === 'text/css' && refValidator) {\n const fullPath = resolveManifestHref(opfDir, item.href);\n this.validateCSSDocument(context, fullPath, opfDir, refValidator);\n } else if (item.mediaType === 'image/svg+xml') {\n const fullPath = resolveManifestHref(opfDir, item.href);\n if (registry) {\n this.extractSVGIDs(context, fullPath, registry);\n }\n if (context.version.startsWith('3')) {\n this.validateSVGDocument(context, fullPath, item);\n }\n if (refValidator) {\n this.extractSVGReferences(context, fullPath, opfDir, refValidator);\n }\n }\n }\n }\n\n private extractSVGIDs(\n context: ValidationContext,\n path: string,\n registry: ResourceRegistry,\n ): void {\n const svgData = context.files.get(path);\n if (!svgData) {\n return;\n }\n\n const svgContent = new TextDecoder().decode(svgData);\n let doc: XmlDocument | undefined;\n\n try {\n doc = XmlDocument.fromString(svgContent);\n // Extract IDs using XPath\n this.extractAndRegisterIDs(path, doc.root, registry);\n } catch (e) {\n pushMessage(context.messages, {\n id: MessageId.RSC_016,\n message: e instanceof Error ? e.message : 'SVG parsing failed',\n location: { path },\n });\n } finally {\n doc?.dispose();\n }\n }\n\n private validateSVGDocument(\n context: ValidationContext,\n path: string,\n manifestItem: { id: string; properties?: string[] },\n ): void {\n const svgData = context.files.get(path);\n if (!svgData) return;\n\n const svgContent = new TextDecoder().decode(svgData);\n let doc: XmlDocument | undefined;\n try {\n doc = XmlDocument.fromString(svgContent);\n } catch {\n return;\n }\n\n try {\n const root = doc.root;\n const hasRemote = this.detectSVGRemoteResources(root);\n if (hasRemote && !manifestItem.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'SVG document references remote resources but manifest item is missing \"remote-resources\" property',\n location: { path },\n });\n }\n } finally {\n doc.dispose();\n }\n }\n\n /**\n * Extract references from SVG documents: font-face-uri, xml-stylesheet PI, @import in style\n */\n private extractSVGReferences(\n context: ValidationContext,\n path: string,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const svgData = context.files.get(path);\n if (!svgData) return;\n\n const svgContent = new TextDecoder().decode(svgData);\n let doc: XmlDocument | undefined;\n try {\n doc = XmlDocument.fromString(svgContent);\n } catch {\n return;\n }\n\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n try {\n const root = doc.root;\n\n // Extract font-face-uri references as FONT type\n try {\n const fontFaceUris = root.find('.//svg:font-face-uri', {\n svg: 'http://www.w3.org/2000/svg',\n });\n for (const uri of fontFaceUris) {\n const href =\n this.getAttribute(uri as XmlElement, 'xlink:href') ??\n this.getAttribute(uri as XmlElement, 'href');\n if (!href) continue;\n if (href.startsWith('http://') || href.startsWith('https://')) {\n refValidator.addReference({\n url: href,\n targetResource: href,\n type: ReferenceType.FONT,\n location: { path, line: uri.line },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n refValidator.addReference({\n url: href,\n targetResource: resolvedPath,\n type: ReferenceType.FONT,\n location: { path, line: uri.line },\n });\n }\n }\n } catch {\n // empty\n }\n\n // Extract @import from SVG <style> elements\n try {\n const styles = root.find('.//svg:style', { svg: 'http://www.w3.org/2000/svg' });\n for (const style of styles) {\n const cssContent = (style as XmlElement).content;\n if (cssContent) {\n this.extractCSSImports(path, cssContent, opfDir, refValidator);\n }\n }\n } catch {\n // empty\n }\n\n // Extract SVG use elements (RSC-015: must have fragment identifier)\n try {\n const svgUseXlink = root.find('.//svg:use[@xlink:href]', {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n });\n const svgUseHref = root.find('.//svg:use[@href]', {\n svg: 'http://www.w3.org/2000/svg',\n });\n for (const useNode of [...svgUseXlink, ...svgUseHref]) {\n const useElem = useNode as XmlElement;\n const href =\n this.getAttribute(useElem, 'xlink:href') ?? this.getAttribute(useElem, 'href');\n if (!href) continue;\n if (href.startsWith('http://') || href.startsWith('https://')) continue;\n\n if (!href.includes('#')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_015,\n message: `SVG \"use\" element requires a fragment identifier, but found \"${href}\"`,\n location: { path, line: useNode.line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : path;\n const fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n const useRef: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource,\n type: ReferenceType.SVG_SYMBOL,\n location: { path, line: useNode.line },\n };\n if (fragment) {\n useRef.fragment = fragment;\n }\n refValidator.addReference(useRef);\n }\n } catch {\n // empty\n }\n } finally {\n doc.dispose();\n }\n\n // Extract xml-stylesheet processing instructions\n this.extractXmlStylesheetPIs(svgContent, path, docDir, opfDir, refValidator);\n }\n\n /**\n * Extract href from <?xml-stylesheet?> processing instructions\n */\n private extractXmlStylesheetPIs(\n content: string,\n path: string,\n docDir: string,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const piRegex = /<\\?xml-stylesheet\\s+([^?]*)\\?>/g;\n let match;\n while ((match = piRegex.exec(content)) !== null) {\n const attrs = match[1];\n if (!attrs) continue;\n\n // Extract href pseudo-attribute\n const hrefMatch = /href\\s*=\\s*[\"']([^\"']*)[\"']/.exec(attrs);\n if (!hrefMatch?.[1]) continue;\n const href = hrefMatch[1];\n\n const beforeMatch = content.substring(0, match.index);\n const line = beforeMatch.split('\\n').length;\n\n if (href.startsWith('http://') || href.startsWith('https://')) {\n refValidator.addReference({\n url: href,\n targetResource: href,\n type: ReferenceType.STYLESHEET,\n location: { path, line },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n refValidator.addReference({\n url: href,\n targetResource: resolvedPath,\n type: ReferenceType.STYLESHEET,\n location: { path, line },\n });\n }\n }\n }\n\n private detectSVGRemoteResources(root: XmlElement): boolean {\n try {\n const fontFaceUris = root.find('.//svg:font-face-uri', {\n svg: 'http://www.w3.org/2000/svg',\n });\n for (const uri of fontFaceUris) {\n const href =\n this.getAttribute(uri as XmlElement, 'xlink:href') ??\n this.getAttribute(uri as XmlElement, 'href');\n if (href && (href.startsWith('http://') || href.startsWith('https://'))) {\n return true;\n }\n }\n } catch {\n // empty\n }\n\n try {\n const images = root.find('.//svg:image', { svg: 'http://www.w3.org/2000/svg' });\n for (const img of images) {\n const href =\n this.getAttribute(img as XmlElement, 'xlink:href') ??\n this.getAttribute(img as XmlElement, 'href');\n if (href && (href.startsWith('http://') || href.startsWith('https://'))) {\n return true;\n }\n }\n } catch {\n // empty\n }\n\n try {\n const styles = root.find('.//svg:style', { svg: 'http://www.w3.org/2000/svg' });\n for (const style of styles) {\n const cssContent = (style as XmlElement).content;\n if (this.cssContainsRemoteUrl(cssContent)) {\n return true;\n }\n }\n } catch {\n // empty\n }\n\n return false;\n }\n\n private validateCSSDocument(\n context: ValidationContext,\n path: string,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const cssData = context.files.get(path);\n if (!cssData) {\n return;\n }\n\n const cssContent = new TextDecoder().decode(cssData);\n\n // Run CSS validation and get references\n const cssValidator = new CSSValidator();\n const result = cssValidator.validate(context, cssContent, path);\n\n // Check if CSS has remote resources and report OPF-014 if needed\n const hasRemoteResources = result.references.some(\n (ref) => ref.url.startsWith('http://') || ref.url.startsWith('https://'),\n );\n if (hasRemoteResources) {\n const packageDoc = context.packageDocument;\n if (packageDoc) {\n // Find manifest item by checking if path ends with the href\n const manifestItem = packageDoc.manifest.find(\n (item) => path.endsWith(`/${item.href}`) || path === item.href,\n );\n if (manifestItem && !manifestItem.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'CSS document references remote resources but manifest item is missing \"remote-resources\" property',\n location: { path },\n });\n }\n }\n }\n\n const cssDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n for (const ref of result.references) {\n if (ref.type === 'font') {\n if (ref.url.startsWith('http://') || ref.url.startsWith('https://')) {\n const hashIndex = ref.url.indexOf('#');\n const targetResource = hashIndex >= 0 ? ref.url.slice(0, hashIndex) : ref.url;\n refValidator.addReference({\n url: ref.url,\n targetResource,\n type: ReferenceType.FONT,\n location: { path },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(cssDir, ref.url, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n\n refValidator.addReference({\n url: ref.url,\n targetResource,\n type: ReferenceType.FONT,\n location: { path },\n });\n }\n } else if (ref.type === 'image') {\n if (ref.url.startsWith('http://') || ref.url.startsWith('https://')) {\n const hashIndex = ref.url.indexOf('#');\n const targetResource = hashIndex >= 0 ? ref.url.slice(0, hashIndex) : ref.url;\n refValidator.addReference({\n url: ref.url,\n targetResource,\n type: ReferenceType.IMAGE,\n location: { path },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(cssDir, ref.url, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n\n refValidator.addReference({\n url: ref.url,\n targetResource,\n type: ReferenceType.IMAGE,\n location: { path },\n });\n }\n } else if (ref.type === 'import') {\n const location: { path: string; line?: number } = { path };\n if (ref.line !== undefined) location.line = ref.line;\n if (ref.url.startsWith('http://') || ref.url.startsWith('https://')) {\n refValidator.addReference({\n url: ref.url,\n targetResource: ref.url,\n type: ReferenceType.STYLESHEET,\n location,\n });\n } else {\n const resolvedPath = this.resolveRelativePath(cssDir, ref.url, opfDir);\n refValidator.addReference({\n url: ref.url,\n targetResource: resolvedPath,\n type: ReferenceType.STYLESHEET,\n location,\n });\n }\n }\n }\n }\n\n private validateXHTMLDocument(\n context: ValidationContext,\n path: string,\n itemId: string,\n opfDir?: string,\n registry?: ResourceRegistry,\n refValidator?: ReferenceValidator,\n ): void {\n const data = context.files.get(path);\n if (!data) {\n return;\n }\n\n const content = new TextDecoder().decode(data);\n const packageDoc = context.packageDocument;\n if (!packageDoc) {\n return;\n }\n\n // Check for unescaped ampersands before parsing\n this.checkUnescapedAmpersands(context, path, content);\n\n // Try to parse with libxml2-wasm to check for well-formedness\n let doc: XmlDocument | null = null;\n try {\n doc = XmlDocument.fromString(content);\n } catch (error) {\n if (error instanceof Error) {\n const { message, line, column } = this.parseLibxmlError(error.message);\n\n // Skip errors for common HTML entities in EPUB 2 files\n // libxml2-wasm doesn't load external DTDs, so HTML entities like are not recognized\n // but they're valid in EPUB 2 (defined in the XHTML 1.1 DTD)\n const entityPattern = /Entity '(\\w+)' not defined/;\n const entityExec = entityPattern.exec(error.message);\n const entityName = entityExec?.[1];\n const isKnownHtmlEntity = entityName !== undefined && HTML_ENTITIES.has(entityName);\n const isEpub2 = context.version === '2.0';\n\n if (!isEpub2 || !isKnownHtmlEntity) {\n const location: { path: string; line?: number; column?: number } = { path };\n if (line !== undefined) {\n location.line = line;\n }\n if (column !== undefined) {\n location.column = column;\n }\n pushMessage(context.messages, {\n id: MessageId.HTM_004,\n message,\n location,\n });\n }\n }\n return;\n }\n\n try {\n const root = doc.root;\n\n // Check for html element with xmlns\n const nsDecls = root.nsDeclarations;\n const hasXhtmlNamespace =\n nsDecls[''] === 'http://www.w3.org/1999/xhtml' ||\n Object.values(nsDecls).some((uri) => uri === 'http://www.w3.org/1999/xhtml');\n\n if (!hasXhtmlNamespace) {\n pushMessage(context.messages, {\n id: MessageId.HTM_001,\n message:\n 'XHTML document must have html element with xmlns=\"http://www.w3.org/1999/xhtml\"',\n location: { path },\n });\n }\n\n // Check for head element\n const head = root.get('.//html:head', { html: 'http://www.w3.org/1999/xhtml' });\n if (!head) {\n pushMessage(context.messages, {\n id: MessageId.HTM_002,\n message: 'XHTML document must have a head element',\n location: { path },\n });\n }\n\n // Check for title element\n const title = root.get('.//html:title', { html: 'http://www.w3.org/1999/xhtml' });\n if (!title) {\n pushMessage(context.messages, {\n id: MessageId.HTM_003,\n message: 'XHTML document must have a title element',\n location: { path },\n });\n }\n\n // Check for body element\n const body = root.get('.//html:body', { html: 'http://www.w3.org/1999/xhtml' });\n if (!body) {\n pushMessage(context.messages, {\n id: MessageId.HTM_002,\n message: 'XHTML document must have a body element',\n location: { path },\n });\n }\n\n // Check if it's a navigation document\n const manifestItem = packageDoc.manifest.find(\n (item: { id: string; properties?: string[] }) => item.id === itemId,\n );\n const isNavItem = manifestItem?.properties?.includes('nav');\n\n if (isNavItem) {\n this.checkNavDocument(context, path, doc, root);\n }\n\n if (context.version.startsWith('3')) {\n const hasScripts = this.detectScripts(context, path, root);\n if (hasScripts && !manifestItem?.properties?.includes('scripted')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'Content document contains scripts but manifest item is missing \"scripted\" property',\n location: { path },\n });\n }\n if (!hasScripts && manifestItem?.properties?.includes('scripted')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'The property \"scripted\" should not be declared in the OPF file',\n location: { path },\n });\n }\n\n const hasMathML = this.detectMathML(context, path, root);\n if (hasMathML && !manifestItem?.properties?.includes('mathml')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'Content document contains MathML but manifest item is missing \"mathml\" property',\n location: { path },\n });\n }\n if (!hasMathML && manifestItem?.properties?.includes('mathml')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'The property \"mathml\" should not be declared in the OPF file',\n location: { path },\n });\n }\n\n const hasSVG = this.detectSVG(context, path, root);\n if (hasSVG && !manifestItem?.properties?.includes('svg')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message: 'Content document contains SVG but manifest item is missing \"svg\" property',\n location: { path },\n });\n }\n if (!hasSVG && manifestItem?.properties?.includes('svg')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'The property \"svg\" should not be declared in the OPF file',\n location: { path },\n });\n }\n\n const hasSwitch = this.detectSwitch(root);\n if (hasSwitch && !manifestItem?.properties?.includes('switch')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'Content document contains epub:switch but manifest item is missing \"switch\" property',\n location: { path },\n });\n }\n if (!hasSwitch && manifestItem?.properties?.includes('switch')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'The property \"switch\" should not be declared in the OPF file',\n location: { path },\n });\n }\n\n const hasRemoteResources = this.detectRemoteResources(context, path, root);\n if (hasRemoteResources && !manifestItem?.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'Content document references remote resources but manifest item is missing \"remote-resources\" property',\n location: { path },\n });\n }\n if (!hasRemoteResources && manifestItem?.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_018,\n message:\n 'The \"remote-resources\" property was declared in the Package Document, but no reference to remote resources has been found',\n location: { path },\n });\n }\n }\n\n // Check for discouraged elements\n this.checkDiscouragedElements(context, path, root);\n\n // Check accessibility\n this.checkAccessibility(context, path, root);\n\n // Validate images\n this.validateImages(context, path, root);\n\n // Validate epub:type attributes (EPUB 3)\n if (context.version.startsWith('3')) {\n this.validateEpubTypes(context, path, root);\n }\n\n // Validate stylesheet links\n this.validateStylesheetLinks(context, path, root);\n\n // Validate viewport meta for fixed-layout\n this.validateViewportMeta(context, path, root, manifestItem);\n\n // Extract IDs and register with registry\n if (registry) {\n this.extractAndRegisterIDs(path, root, registry);\n }\n\n // Extract hyperlinks and register with reference validator\n if (refValidator && opfDir !== undefined) {\n this.extractAndRegisterHyperlinks(context, path, root, opfDir, refValidator, !!isNavItem);\n this.extractAndRegisterStylesheets(path, root, opfDir, refValidator);\n this.extractAndRegisterImages(context, path, root, opfDir, refValidator, registry);\n this.extractAndRegisterMathMLAltimg(path, root, opfDir, refValidator);\n this.extractAndRegisterScripts(path, root, opfDir, refValidator);\n this.extractAndRegisterCiteAttributes(path, root, opfDir, refValidator);\n this.extractAndRegisterMediaElements(context, path, root, opfDir, refValidator, registry);\n this.extractAndRegisterEmbeddedElements(\n context,\n path,\n root,\n opfDir,\n refValidator,\n registry,\n );\n }\n } finally {\n doc.dispose();\n }\n }\n\n private parseLibxmlError(error: string): {\n message: string;\n line: number | undefined;\n column: number | undefined;\n } {\n // Extract line number from libxml2-wasm error message\n // Format: \"Entity: line 10: parser error : message\"\n const lineRegex = /(?:Entity:\\s*)?line\\s+(\\d+):/;\n const lineMatch = lineRegex.exec(error);\n const line = lineMatch?.[1] ? Number.parseInt(lineMatch[1], 10) : undefined;\n\n // Extract column if present\n const columnRegex = /line\\s+\\d+:\\s*(\\d+):/;\n const columnMatch = columnRegex.exec(error);\n const column = columnMatch?.[1] ? Number.parseInt(columnMatch[1], 10) : undefined;\n\n // Normalize error message\n let message = error;\n if (error.includes('Opening and ending tag mismatch')) {\n message = `Mismatched closing tag: ${error.replace('Opening and ending tag mismatch: ', '')}`;\n } else if (error.includes('mismatch')) {\n message = `Mismatched closing tag: ${error}`;\n } else {\n // Remove libxml2 prefix from other errors\n message = error.replace(/^Entity:\\s*line\\s+\\d+:\\s*(parser\\s+error\\s*:)?\\s*/, '');\n }\n\n return { message, line, column };\n }\n\n private checkUnescapedAmpersands(\n context: ValidationContext,\n path: string,\n content: string,\n ): void {\n // Find all ampersands that are not part of entity references\n const ampersandRegex = /&(?!(?:[a-zA-Z][a-zA-Z0-9]*|#\\d+|#x[0-9a-fA-F]+);)/g;\n let match;\n while ((match = ampersandRegex.exec(content)) !== null) {\n // Calculate line number\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const index = match.index ?? 0;\n const before = content.substring(0, index);\n const line = before.split('\\n').length;\n\n pushMessage(context.messages, {\n id: MessageId.HTM_012,\n message: 'Unescaped ampersand',\n location: { path, line },\n });\n }\n }\n\n private checkNavDocument(\n context: ValidationContext,\n path: string,\n _doc: XmlDocument,\n root: XmlElement,\n ): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const navElements = root.find('.//html:nav', HTML_NS);\n if (navElements.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.NAV_001,\n message: 'Navigation document must have a nav element',\n location: { path },\n });\n return;\n }\n\n // Helper to get epub:type tokens from a nav element\n const getNavTypes = (nav: XmlElement): string[] => {\n if (!('attrs' in nav)) return [];\n const epubTypeAttr = (\n nav.attrs as { name: string; value: string; prefix?: string; namespaceUri?: string }[]\n ).find(\n (attr) =>\n attr.name === 'type' &&\n attr.prefix === 'epub' &&\n attr.namespaceUri === 'http://www.idpf.org/2007/ops',\n );\n return epubTypeAttr ? epubTypeAttr.value.trim().split(/\\s+/) : [];\n };\n\n // Find the nav element with epub:type=\"toc\"\n let tocNav: (typeof navElements)[0] | undefined;\n let pageListCount = 0;\n let landmarksCount = 0;\n\n for (const nav of navElements) {\n const types = getNavTypes(nav as XmlElement);\n if (types.includes('toc') && !tocNav) {\n tocNav = nav;\n }\n if (types.includes('page-list')) pageListCount++;\n if (types.includes('landmarks')) landmarksCount++;\n }\n\n if (!tocNav) {\n pushMessage(context.messages, {\n id: MessageId.NAV_001,\n message: 'Navigation document nav element must have epub:type=\"toc\"',\n location: { path },\n });\n return;\n }\n\n const ol = tocNav.get('.//html:ol', HTML_NS);\n if (!ol) {\n pushMessage(context.messages, {\n id: MessageId.NAV_002,\n message: 'Navigation document toc nav must contain an ol element',\n location: { path },\n });\n }\n\n // Check multiple page-list or landmarks nav elements\n if (pageListCount > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Multiple occurrences of the \"page-list\" nav element',\n location: { path },\n });\n }\n if (landmarksCount > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Multiple occurrences of the \"landmarks\" nav element',\n location: { path },\n });\n }\n\n // Validate each typed nav element\n for (const nav of navElements) {\n const navElem = nav as XmlElement;\n const types = getNavTypes(navElem);\n if (types.length === 0) continue;\n\n // Non-standard nav types must have heading as first child\n const isStandard =\n types.includes('toc') || types.includes('page-list') || types.includes('landmarks');\n if (!isStandard) {\n this.checkNavFirstChildHeading(context, path, navElem);\n }\n\n // Check landmarks-specific rules\n if (types.includes('landmarks')) {\n this.checkNavLandmarks(context, path, navElem);\n }\n\n // Check anchor and span labels within nav ol\n this.checkNavLabels(context, path, navElem);\n\n // Check nav content model (ol must have li, li must have a/span or ol)\n this.checkNavContentModel(context, path, navElem);\n }\n\n // Check heading text content in the entire nav document\n this.checkNavHeadingContent(context, path, root);\n\n // Check hidden attribute values on nav elements\n this.checkNavHiddenAttribute(context, path, root);\n\n this.checkNavRemoteLinks(context, path, root);\n\n // Collect TOC nav link targets in order for reading order validation (NAV-011)\n this.collectTocLinks(context, path, tocNav as XmlElement);\n }\n\n private checkNavFirstChildHeading(\n context: ValidationContext,\n path: string,\n navElem: XmlElement,\n ): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const headingTags = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']);\n\n // Get first child element of nav\n const children = navElem.find('./html:*', HTML_NS);\n if (children.length === 0) return;\n\n const firstChild = children[0] as XmlElement;\n const localName = firstChild.name.split(':').pop() ?? firstChild.name;\n if (!headingTags.has(localName)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'nav elements other than \"toc\", \"page-list\" and \"landmarks\" must have a heading as their first child',\n location: { path },\n });\n }\n }\n\n private checkNavLandmarks(context: ValidationContext, path: string, navElem: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const EPUB_NS = 'http://www.idpf.org/2007/ops';\n\n const anchors = navElem.find('.//html:ol//html:a', HTML_NS);\n const seenLandmarks: { type: string; href: string }[] = [];\n\n for (const anchor of anchors) {\n const aElem = anchor as XmlElement;\n\n // Check for epub:type attribute\n const epubTypeAttr =\n 'attrs' in aElem\n ? (\n aElem.attrs as {\n name: string;\n value: string;\n prefix?: string;\n namespaceUri?: string;\n }[]\n ).find((attr) => attr.name === 'type' && attr.namespaceUri === EPUB_NS)\n : undefined;\n\n if (!epubTypeAttr) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Missing epub:type attribute on anchor inside \"landmarks\" nav element',\n location: { path },\n });\n continue;\n }\n\n // Check for duplicate type+href\n const href = this.getAttribute(aElem, 'href');\n const typeTokens = epubTypeAttr.value.toLowerCase().trim().split(/\\s+/);\n const normalizedHref = (href ?? '').toLowerCase().trim();\n\n for (const typeToken of typeTokens) {\n const isDuplicate = seenLandmarks.some(\n (seen) => seen.type === typeToken && seen.href === normalizedHref,\n );\n if (isDuplicate) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Another landmark was found with the same epub:type and same reference to \"${normalizedHref}\"`,\n location: { path },\n });\n }\n seenLandmarks.push({ type: typeToken, href: normalizedHref });\n }\n }\n }\n\n private checkNavLabels(context: ValidationContext, path: string, navElem: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n\n // Check anchor labels\n const anchors = navElem.find('.//html:ol//html:a', HTML_NS);\n for (const anchor of anchors) {\n if (!this.hasNavLabelContent(anchor as XmlElement)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Anchors within nav elements must contain text',\n location: { path },\n });\n }\n }\n\n // Check span labels\n const spans = navElem.find('.//html:ol//html:span', HTML_NS);\n for (const span of spans) {\n if (!this.hasNavLabelContent(span as XmlElement)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Spans within nav elements must contain text',\n location: { path },\n });\n }\n }\n }\n\n private hasNavLabelContent(element: XmlElement): boolean {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n // Check text content\n const textContent = element.content;\n if (textContent && textContent.trim().length > 0) return true;\n\n // Check img alt attributes\n const imgs = element.find('./html:img[@alt]', HTML_NS);\n for (const img of imgs) {\n const alt = this.getAttribute(img as XmlElement, 'alt');\n if (alt && alt.trim().length > 0) return true;\n }\n\n // Check aria-label on any descendant or self\n const ariaLabel = this.getAttribute(element, 'aria-label');\n if (ariaLabel && ariaLabel.trim().length > 0) return true;\n\n const ariaLabelElements = element.find('.//*[@aria-label]');\n for (const el of ariaLabelElements) {\n const label = this.getAttribute(el as XmlElement, 'aria-label');\n if (label && label.trim().length > 0) return true;\n }\n\n return false;\n }\n\n private checkNavContentModel(\n context: ValidationContext,\n path: string,\n navElem: XmlElement,\n ): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const headingTags = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup']);\n\n // Check nav direct children: only headings, hgroup, and ol are allowed\n const navChildren = navElem.find('./html:*', HTML_NS);\n for (const child of navChildren) {\n const localName = (child as XmlElement).name.split(':').pop() ?? (child as XmlElement).name;\n if (!headingTags.has(localName) && localName !== 'ol') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `element \"${localName}\" not allowed here; expected element \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hgroup\" or \"ol\"`,\n location: { path },\n });\n }\n }\n\n // Check ol elements have li children\n const olElements = navElem.find('.//html:ol', HTML_NS);\n for (const ol of olElements) {\n const liChildren = (ol as XmlElement).find('./html:li', HTML_NS);\n if (liChildren.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'element \"ol\" incomplete; missing required element \"li\"',\n location: { path },\n });\n }\n }\n\n // Check li elements content model\n const liElements = navElem.find('.//html:ol//html:li', HTML_NS);\n for (const li of liElements) {\n const liElem = li as XmlElement;\n const hasOl = liElem.get('./html:ol', HTML_NS);\n const hasAnchor = liElem.get('./html:a', HTML_NS);\n const hasSpan = liElem.get('./html:span', HTML_NS);\n\n if (!hasAnchor && !hasSpan) {\n if (hasOl) {\n // li has ol but no a/span label\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'element \"ol\" not allowed yet; expected element \"a\" or \"span\"',\n location: { path },\n });\n } else {\n // leaf li with no link\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'element \"li\" incomplete; missing required element \"ol\"',\n location: { path },\n });\n }\n } else if (hasSpan && !hasAnchor && !hasOl) {\n // li has span label but no nested ol — span implies a branch node that needs a sublist\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'element \"li\" incomplete; missing required element \"ol\"',\n location: { path },\n });\n }\n }\n }\n\n private checkNavHeadingContent(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const headingSelectors = [\n './/html:h1',\n './/html:h2',\n './/html:h3',\n './/html:h4',\n './/html:h5',\n './/html:h6',\n ];\n\n for (const selector of headingSelectors) {\n const headings = root.find(selector, HTML_NS);\n for (const heading of headings) {\n if (!this.hasNavLabelContent(heading as XmlElement)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Heading elements must contain text',\n location: { path },\n });\n }\n }\n }\n }\n\n private checkNavHiddenAttribute(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n ): void {\n const hiddenElements = root.find('.//*[@hidden]');\n for (const elem of hiddenElements) {\n const hiddenValue = this.getAttribute(elem as XmlElement, 'hidden');\n if (\n hiddenValue !== null &&\n hiddenValue !== '' &&\n hiddenValue !== 'hidden' &&\n hiddenValue !== 'until-found'\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `value of attribute \"hidden\" is invalid; must be equal to \"\", \"hidden\" or \"until-found\"`,\n location: { path },\n });\n }\n }\n }\n\n private checkNavRemoteLinks(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const navElements = root.find('.//html:nav', HTML_NS);\n\n for (const nav of navElements) {\n const navElem = nav as XmlElement;\n const epubTypeAttr =\n 'attrs' in navElem\n ? (\n navElem.attrs as {\n name: string;\n value: string;\n prefix?: string;\n namespaceUri?: string;\n }[]\n ).find(\n (attr) =>\n attr.name === 'type' &&\n attr.prefix === 'epub' &&\n attr.namespaceUri === 'http://www.idpf.org/2007/ops',\n )\n : undefined;\n const types = epubTypeAttr ? epubTypeAttr.value.trim().split(/\\s+/) : [];\n const isToc = types.includes('toc');\n const isLandmarks = types.includes('landmarks');\n const isPageList = types.includes('page-list');\n\n if (!isToc && !isLandmarks && !isPageList) continue;\n\n const navType = isToc ? 'toc' : isLandmarks ? 'landmarks' : 'page-list';\n const links = navElem.find('.//html:a[@href]', HTML_NS);\n for (const link of links) {\n const href = this.getAttribute(link as XmlElement, 'href');\n if (href && (href.startsWith('http://') || href.startsWith('https://'))) {\n pushMessage(context.messages, {\n id: MessageId.NAV_010,\n message: `\"${navType}\" nav must not link to remote resources; found link to \"${href}\"`,\n location: { path },\n });\n }\n }\n }\n }\n\n private collectTocLinks(context: ValidationContext, path: string, tocNav: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const opfDir = context.opfPath?.includes('/')\n ? context.opfPath.substring(0, context.opfPath.lastIndexOf('/'))\n : '';\n\n const tocAnchors = tocNav.find('.//html:a[@href]', HTML_NS);\n const tocLinks: NonNullable<ValidationContext['tocLinks']> = [];\n\n for (const anchor of tocAnchors) {\n const href = this.getAttribute(anchor as XmlElement, 'href')?.trim();\n if (!href || href.startsWith('http://') || href.startsWith('https://')) continue;\n\n let targetResource: string;\n let fragment: string | undefined;\n\n if (href.startsWith('#')) {\n targetResource = path;\n fragment = href.slice(1);\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n }\n\n const entry: NonNullable<ValidationContext['tocLinks']>[number] = {\n targetResource,\n location: { path, line: anchor.line },\n };\n if (fragment !== undefined) {\n entry.fragment = fragment;\n }\n tocLinks.push(entry);\n }\n\n context.tocLinks = tocLinks;\n }\n\n private detectScripts(_context: ValidationContext, _path: string, root: XmlElement): boolean {\n // Check for script elements with JavaScript types\n // Non-JavaScript types like application/ld+json don't require \"scripted\" property\n const htmlScripts = root.find('.//html:script', { html: 'http://www.w3.org/1999/xhtml' });\n for (const script of htmlScripts) {\n if (this.isScriptType(this.getAttribute(script as XmlElement, 'type'))) {\n return true;\n }\n }\n\n const svgScripts = root.find('.//svg:script', { svg: 'http://www.w3.org/2000/svg' });\n for (const script of svgScripts) {\n if (this.isScriptType(this.getAttribute(script as XmlElement, 'type'))) {\n return true;\n }\n }\n\n const form = root.get('.//html:form', { html: 'http://www.w3.org/1999/xhtml' });\n if (form) return true;\n\n const elementsWithEvents = root.find(\n './/*[@onclick or @onload or @onmouseover or @onmouseout or @onchange or @onsubmit or @onfocus or @onblur]',\n );\n if (elementsWithEvents.length > 0) return true;\n\n return false;\n }\n\n /**\n * Check if the script type is a JavaScript type that requires \"scripted\" property.\n * Per EPUB spec and Java EPUBCheck, only JavaScript types require it.\n * Data block types like application/ld+json, application/json do NOT require it.\n */\n private isScriptType(type: string | null): boolean {\n // No type attribute or empty = defaults to JavaScript\n if (!type || type.trim() === '') return true;\n\n const jsTypes = new Set([\n 'application/javascript',\n 'text/javascript',\n 'application/ecmascript',\n 'application/x-ecmascript',\n 'application/x-javascript',\n 'text/ecmascript',\n 'text/javascript1.0',\n 'text/javascript1.1',\n 'text/javascript1.2',\n 'text/javascript1.3',\n 'text/javascript1.4',\n 'text/javascript1.5',\n 'text/jscript',\n 'text/livescript',\n 'text/x-ecmascript',\n 'text/x-javascript',\n 'module', // ES modules\n ]);\n\n return jsTypes.has(type.toLowerCase());\n }\n\n private detectSwitch(root: XmlElement): boolean {\n const switchElem = root.get('.//epub:switch', { epub: 'http://www.idpf.org/2007/ops' });\n return !!switchElem;\n }\n\n private detectMathML(_context: ValidationContext, _path: string, root: XmlElement): boolean {\n const mathMLElements = root.find('.//math:*', { math: 'http://www.w3.org/1998/Math/MathML' });\n return mathMLElements.length > 0;\n }\n\n private detectSVG(_context: ValidationContext, _path: string, root: XmlElement): boolean {\n const svgElement = root.get('.//html:svg', { html: 'http://www.w3.org/1999/xhtml' });\n if (svgElement) return true;\n\n const rootSvg = root.get('.//svg:svg', { svg: 'http://www.w3.org/2000/svg' });\n if (rootSvg) return true;\n\n return false;\n }\n\n /**\n * Detect if the content document references remote resources that require\n * the \"remote-resources\" property in the manifest.\n * Per EPUB spec and Java EPUBCheck behavior:\n * - Remote images, audio, video, fonts REQUIRE the property\n * - Remote hyperlinks (<a href>) do NOT require the property\n * - Remote scripts do NOT require the property (scripted property is used instead)\n * - Remote stylesheets DO require the property\n */\n private detectRemoteResources(\n _context: ValidationContext,\n _path: string,\n root: XmlElement,\n ): boolean {\n const images = root.find('.//html:img[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const img of images) {\n const src = this.getAttribute(img as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const audio = root.find('.//html:audio[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const elem of audio) {\n const src = this.getAttribute(elem as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const video = root.find('.//html:video[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const elem of video) {\n const src = this.getAttribute(elem as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const sources = root.find('.//html:source[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const source of sources) {\n const src = this.getAttribute(source as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const objects = root.find('.//html:object[@data]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const obj of objects) {\n const data = this.getAttribute(obj as XmlElement, 'data');\n if (data && (data.startsWith('http://') || data.startsWith('https://'))) {\n return true;\n }\n }\n\n const embeds = root.find('.//html:embed[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const embed of embeds) {\n const src = this.getAttribute(embed as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const linkElements = root.find('.//html:link[@rel and @href]', {\n html: 'http://www.w3.org/1999/xhtml',\n });\n for (const linkElem of linkElements) {\n const rel = this.getAttribute(linkElem as XmlElement, 'rel');\n const href = this.getAttribute(linkElem as XmlElement, 'href');\n if (href && rel?.toLowerCase().includes('stylesheet')) {\n if (href.startsWith('http://') || href.startsWith('https://')) {\n return true;\n }\n }\n }\n\n const styleElements = root.find('.//html:style', { html: 'http://www.w3.org/1999/xhtml' });\n for (const style of styleElements) {\n const cssContent = (style as XmlElement).content;\n if (this.cssContainsRemoteUrl(cssContent)) {\n return true;\n }\n }\n\n return false;\n }\n\n private cssContainsRemoteUrl(css: string): boolean {\n const urlRegex = /url\\s*\\(\\s*[\"']?(https?:\\/\\/[^\"')]+)[\"']?\\s*\\)/gi;\n return urlRegex.test(css);\n }\n\n private checkDiscouragedElements(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n ): void {\n for (const elemName of DISCOURAGED_ELEMENTS) {\n const element = root.get(`.//html:${elemName}`, { html: 'http://www.w3.org/1999/xhtml' });\n if (element) {\n pushMessage(context.messages, {\n id: MessageId.HTM_055,\n message: `The \"${elemName}\" element is discouraged in EPUB`,\n location: { path },\n });\n }\n }\n }\n\n private checkAccessibility(context: ValidationContext, path: string, root: XmlElement): void {\n const links = root.find('.//html:a', { html: 'http://www.w3.org/1999/xhtml' });\n for (const link of links) {\n if (!this.hasAccessibleContent(link as XmlElement)) {\n pushMessage(context.messages, {\n id: MessageId.ACC_004,\n message: 'Hyperlink has no accessible text content',\n location: { path },\n });\n }\n }\n\n const images = root.find('.//html:img', { html: 'http://www.w3.org/1999/xhtml' });\n for (const img of images) {\n const altAttr = this.getAttribute(img as XmlElement, 'alt');\n if (altAttr === null) {\n pushMessage(context.messages, {\n id: MessageId.ACC_005,\n message: 'Image is missing alt attribute',\n location: { path },\n });\n }\n }\n\n const svgLinks = root.find('.//svg:a', {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n });\n for (const svgLink of svgLinks) {\n const svgElem = svgLink as XmlElement;\n const title = svgElem.get('./svg:title', { svg: 'http://www.w3.org/2000/svg' });\n const ariaLabel = this.getAttribute(svgElem, 'aria-label');\n if (!title && !ariaLabel) {\n pushMessage(context.messages, {\n id: MessageId.ACC_011,\n message: 'SVG hyperlink has no accessible name (missing title element or aria-label)',\n location: { path },\n });\n }\n }\n\n const mathElements = root.find('.//math:math', { math: 'http://www.w3.org/1998/Math/MathML' });\n for (const mathElem of mathElements) {\n const elem = mathElem as XmlElement;\n const alttext = elem.attr('alttext');\n const annotation = elem.get('./math:annotation[@encoding=\"application/x-tex\"]', {\n math: 'http://www.w3.org/1998/Math/MathML',\n });\n const ariaLabel = this.getAttribute(elem, 'aria-label');\n\n if (!alttext?.value && !annotation && !ariaLabel) {\n pushMessage(context.messages, {\n id: MessageId.ACC_009,\n message: 'MathML element should have alttext attribute or annotation for accessibility',\n location: { path },\n });\n }\n }\n }\n\n private validateImages(context: ValidationContext, path: string, root: XmlElement): void {\n const packageDoc = context.packageDocument;\n if (!packageDoc) return;\n\n const images = root.find('.//html:img[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const img of images) {\n const imgElem = img as XmlElement;\n const srcAttr = this.getAttribute(imgElem, 'src');\n if (!srcAttr) continue;\n\n const src = srcAttr;\n const opfDir = context.opfPath?.includes('/')\n ? context.opfPath.substring(0, context.opfPath.lastIndexOf('/'))\n : '';\n\n let fullPath = src;\n if (opfDir && !src.startsWith('http://') && !src.startsWith('https://')) {\n if (src.startsWith('/')) {\n fullPath = src.slice(1);\n } else {\n const parts = opfDir.split('/');\n const relParts = src.split('/');\n for (const part of relParts) {\n if (part === '..') {\n parts.pop();\n } else if (part !== '.') {\n parts.push(part);\n }\n }\n fullPath = parts.join('/');\n }\n }\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n continue;\n }\n\n const manifestItem = packageDoc.manifest.find(\n (item) => fullPath.endsWith(item.href) || item.href.endsWith(fullPath),\n );\n if (!manifestItem) {\n // Skip media type check - missing manifest item is reported by RSC-007/RSC-008\n continue;\n }\n\n const imageMediaTypes = new Set([\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n 'image/png',\n 'image/svg+xml',\n 'image/webp',\n ]);\n\n if (!imageMediaTypes.has(manifestItem.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_051,\n message: `Image has invalid media type \"${manifestItem.mediaType}\": ${src}`,\n location: { path },\n });\n }\n }\n }\n\n private validateEpubTypes(context: ValidationContext, path: string, root: XmlElement): void {\n const epubTypeElements = root.find('.//*[@epub:type]', {\n epub: 'http://www.idpf.org/2007/ops',\n });\n\n const knownPrefixes = new Set([\n '',\n 'http://idpf.org/epub/structure/v1/',\n 'http://idpf.org/epub/vocab/structure/',\n 'http://www.idpf.org/2007/ops',\n ]);\n\n for (const elem of epubTypeElements) {\n const elemTyped = elem as XmlElement;\n const epubTypeAttr = elemTyped.attr('epub:type');\n if (!epubTypeAttr?.value) continue;\n\n const epubTypeValue = epubTypeAttr.value;\n\n for (const part of epubTypeValue.split(/\\s+/)) {\n const prefix = part.includes(':') ? part.substring(0, part.indexOf(':')) : '';\n\n if (\n !knownPrefixes.has(prefix) &&\n !prefix.startsWith('http://') &&\n !prefix.startsWith('https://')\n ) {\n pushMessage(context.messages, {\n id: MessageId.OPF_088,\n message: `Unknown epub:type prefix \"${prefix}\": ${epubTypeValue}`,\n location: { path },\n });\n }\n }\n }\n }\n\n private validateStylesheetLinks(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n ): void {\n const linkElements = root.find('.//html:link[@rel]', { html: 'http://www.w3.org/1999/xhtml' });\n\n const stylesheetTitles = new Map<string, Set<string>>();\n\n for (const linkElem of linkElements) {\n const elem = linkElem as XmlElement;\n const relAttr = this.getAttribute(elem, 'rel');\n const titleAttr = this.getAttribute(elem, 'title');\n const hrefAttr = this.getAttribute(elem, 'href');\n\n if (!relAttr || !hrefAttr) continue;\n\n const rel = relAttr.toLowerCase();\n const rels = rel.split(/\\s+/);\n\n if (rels.includes('stylesheet')) {\n const isAlternate = rels.includes('alternate');\n\n if (isAlternate && !titleAttr) {\n pushMessage(context.messages, {\n id: MessageId.CSS_015,\n message: 'Alternate stylesheet must have a title attribute',\n location: { path },\n });\n }\n\n if (titleAttr) {\n const key = `${titleAttr}:${isAlternate ? 'alt' : 'persistent'}`;\n const expectedRel = isAlternate ? 'alternate' : 'persistent';\n const existing = stylesheetTitles.get(key);\n\n if (existing) {\n if (!existing.has(expectedRel)) {\n pushMessage(context.messages, {\n id: MessageId.CSS_005,\n message: `Stylesheet with title \"${titleAttr}\" conflicts with another stylesheet with same title`,\n location: { path },\n });\n }\n existing.add(expectedRel);\n } else {\n stylesheetTitles.set(key, new Set([expectedRel]));\n }\n }\n }\n }\n }\n\n private hasAccessibleContent(element: XmlElement): boolean {\n const textContent = element.content;\n if (textContent && textContent.trim().length > 0) {\n return true;\n }\n\n const ariaLabel = this.getAttribute(element, 'aria-label');\n if (ariaLabel && ariaLabel.trim().length > 0) {\n return true;\n }\n\n const img = element.get('./html:img[@alt]', { html: 'http://www.w3.org/1999/xhtml' });\n if (img) {\n const alt = this.getAttribute(img as XmlElement, 'alt');\n if (alt && alt.trim().length > 0) {\n return true;\n }\n }\n\n const title = this.getAttribute(element, 'title');\n if (title && title.trim().length > 0) {\n return true;\n }\n\n return false;\n }\n\n private getAttribute(element: XmlElement, name: string): string | null {\n if (!('attrs' in element)) return null;\n const attrs = element.attrs as { name: string; value: string }[];\n const attr = attrs.find((a) => a.name === name);\n return attr?.value ?? null;\n }\n\n private validateViewportMeta(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n manifestItem: { properties?: string[] } | undefined,\n ): void {\n const isFixedLayout = manifestItem?.properties?.includes('fixed-layout');\n const metaTags = root.find('.//html:meta[@name]', { html: 'http://www.w3.org/1999/xhtml' });\n\n let hasViewportMeta = false;\n\n for (const meta of metaTags) {\n const nameAttr = this.getAttribute(meta as XmlElement, 'name');\n if (nameAttr === 'viewport') {\n hasViewportMeta = true;\n const contentAttr = this.getAttribute(meta as XmlElement, 'content');\n\n if (isFixedLayout) {\n // Fixed-layout viewport validation\n if (!contentAttr) {\n pushMessage(context.messages, {\n id: MessageId.HTM_046,\n message:\n 'Viewport meta element should have a content attribute in fixed-layout documents',\n location: { path },\n });\n continue;\n }\n\n void contentAttr;\n } else {\n // Reflowable document viewport validation (HTM-060b)\n pushMessage(context.messages, {\n id: MessageId.HTM_060b,\n message: `EPUB reading systems must ignore viewport meta elements in reflowable documents; viewport declaration \"${contentAttr ?? ''}\" will be ignored`,\n location: { path },\n });\n }\n }\n }\n\n // Only suggest viewport for fixed-layout documents\n if (isFixedLayout && !hasViewportMeta) {\n pushMessage(context.messages, {\n id: MessageId.HTM_049,\n message: 'Fixed-layout document should include a viewport meta element',\n location: { path },\n });\n }\n }\n\n private extractAndRegisterIDs(path: string, root: XmlElement, registry: ResourceRegistry): void {\n const elementsWithId = root.find('.//*[@id]');\n for (const elem of elementsWithId) {\n const xmlElem = elem as XmlElement;\n const id = this.getAttribute(xmlElem, 'id');\n if (id) {\n registry.registerID(path, id);\n const localName = xmlElem.name.includes(':') ? xmlElem.name.split(':').pop() : xmlElem.name;\n if (localName === 'symbol') {\n registry.registerSVGSymbolID(path, id);\n }\n }\n }\n }\n\n private extractAndRegisterHyperlinks(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n isNavDocument = false,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n // Build a map from anchor line numbers to nav-specific reference types\n // when processing a nav document, to distinguish toc/page-list links from regular hyperlinks\n const navAnchorTypes = new Map<number, ReferenceType>();\n if (isNavDocument) {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const navElements = root.find('.//html:nav', HTML_NS);\n for (const nav of navElements) {\n const navElem = nav as XmlElement;\n const epubTypeAttr =\n 'attrs' in navElem\n ? (\n navElem.attrs as {\n name: string;\n value: string;\n prefix?: string;\n namespaceUri?: string;\n }[]\n ).find(\n (attr) =>\n attr.name === 'type' &&\n attr.prefix === 'epub' &&\n attr.namespaceUri === 'http://www.idpf.org/2007/ops',\n )\n : undefined;\n const types = epubTypeAttr ? epubTypeAttr.value.trim().split(/\\s+/) : [];\n let refType = ReferenceType.HYPERLINK;\n if (types.includes('toc')) refType = ReferenceType.NAV_TOC_LINK;\n else if (types.includes('page-list')) refType = ReferenceType.NAV_PAGELIST_LINK;\n\n const navAnchors = navElem.find('.//html:a[@href]', HTML_NS);\n for (const a of navAnchors) {\n navAnchorTypes.set(a.line, refType);\n }\n }\n }\n\n const links = root.find('.//html:a[@href]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const link of links) {\n // Trim whitespace (XML attribute values are whitespace-normalized by parsers)\n const href = this.getAttribute(link as XmlElement, 'href')?.trim() ?? null;\n if (href === null) continue;\n if (href === '') {\n pushMessage(context.messages, {\n id: MessageId.HTM_045,\n message: 'Encountered empty href',\n location: { path, line: link.line },\n });\n continue;\n }\n\n const line = link.line;\n const refType = isNavDocument\n ? (navAnchorTypes.get(line) ?? ReferenceType.HYPERLINK)\n : ReferenceType.HYPERLINK;\n\n if (href.startsWith('http://') || href.startsWith('https://')) {\n continue;\n }\n if (href.startsWith('mailto:') || href.startsWith('tel:')) {\n continue;\n }\n // Skip EPUB CFI references (e.g., \"package.opf#epubcfi(/6/2!/4/2/1:1)\")\n if (href.includes('#epubcfi(')) {\n continue;\n }\n if (href.startsWith('#')) {\n const targetResource = path;\n const fragment = href.slice(1);\n refValidator.addReference({\n url: href,\n targetResource,\n fragment,\n type: refType,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const fragmentPart = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource,\n type: refType,\n location: { path, line },\n };\n if (fragmentPart) {\n ref.fragment = fragmentPart;\n }\n refValidator.addReference(ref);\n }\n\n // Extract <area href> elements (M1: Java extracts these as hyperlink references)\n const areaLinks = root.find('.//html:area[@href]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const area of areaLinks) {\n const href = this.getAttribute(area as XmlElement, 'href')?.trim();\n if (!href) continue;\n\n const line = area.line;\n\n if (href.startsWith('http://') || href.startsWith('https://')) continue;\n if (href.startsWith('mailto:') || href.startsWith('tel:')) continue;\n if (href.includes('#epubcfi(')) continue;\n\n if (href.startsWith('#')) {\n refValidator.addReference({\n url: href,\n targetResource: path,\n fragment: href.slice(1),\n type: ReferenceType.HYPERLINK,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedAreaPath = this.resolveRelativePath(docDir, href, opfDir);\n const areaHashIndex = resolvedAreaPath.indexOf('#');\n const areaTarget =\n areaHashIndex >= 0 ? resolvedAreaPath.slice(0, areaHashIndex) : resolvedAreaPath;\n const areaFragment =\n areaHashIndex >= 0 ? resolvedAreaPath.slice(areaHashIndex + 1) : undefined;\n\n const areaRef: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource: areaTarget,\n type: ReferenceType.HYPERLINK,\n location: { path, line },\n };\n if (areaFragment) {\n areaRef.fragment = areaFragment;\n }\n refValidator.addReference(areaRef);\n }\n\n const svgLinks = root.find('.//svg:a', {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n });\n for (const link of svgLinks) {\n const elem = link as XmlElement;\n const href = this.getAttribute(elem, 'xlink:href') ?? this.getAttribute(elem, 'href');\n if (!href) continue;\n\n const line = link.line;\n\n if (href.startsWith('http://') || href.startsWith('https://')) {\n continue;\n }\n if (href.startsWith('#')) {\n const targetResource = path;\n const fragment = href.slice(1);\n refValidator.addReference({\n url: href,\n targetResource,\n fragment,\n type: ReferenceType.HYPERLINK,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const svgFragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n\n const svgRef: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource,\n type: ReferenceType.HYPERLINK,\n location: { path, line },\n };\n if (svgFragment) {\n svgRef.fragment = svgFragment;\n }\n refValidator.addReference(svgRef);\n }\n }\n\n private extractAndRegisterStylesheets(\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n const linkElements = root.find('.//html:link[@href]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const linkElem of linkElements) {\n const href = this.getAttribute(linkElem as XmlElement, 'href');\n const rel = this.getAttribute(linkElem as XmlElement, 'rel');\n if (!href) continue;\n\n const line = linkElem.line;\n const isStylesheet = rel?.toLowerCase().includes('stylesheet');\n const type = isStylesheet ? ReferenceType.STYLESHEET : ReferenceType.LINK;\n\n if (href.startsWith('http://') || href.startsWith('https://')) {\n // Still register remote resources\n refValidator.addReference({\n url: href,\n targetResource: href,\n type,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n\n refValidator.addReference({\n url: href,\n targetResource,\n type,\n location: { path, line },\n });\n }\n }\n\n /**\n * Parse CSS content and extract @import statements\n */\n private extractCSSImports(\n cssPath: string,\n cssContent: string,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const cssDir = cssPath.includes('/') ? cssPath.substring(0, cssPath.lastIndexOf('/')) : '';\n\n // Remove CSS comments first to avoid matching imports inside comments\n const cleanedCSS = cssContent.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n\n // Simple regex to match @import statements\n // Matches: @import \"file.css\"; @import 'file.css'; @import url(\"file.css\"); @import url(file.css);\n const importRegex =\n /@import\\s+(?:url\\s*\\(\\s*[\"']?([^\"')]+?)[\"']?\\s*\\)|[\"']([^\"']+)[\"'])[^;]*;/gi;\n\n let match;\n while ((match = importRegex.exec(cleanedCSS)) !== null) {\n const importUrl = match[1] ?? match[2];\n if (!importUrl) continue;\n\n // Calculate line number from regex match position\n const beforeMatch = cleanedCSS.substring(0, match.index);\n const line = beforeMatch.split('\\n').length;\n\n // Skip remote URLs\n if (importUrl.startsWith('http://') || importUrl.startsWith('https://')) {\n refValidator.addReference({\n url: importUrl,\n targetResource: importUrl,\n type: ReferenceType.STYLESHEET,\n location: { path: cssPath, line },\n });\n continue;\n }\n\n // Resolve relative path\n const resolvedPath = this.resolveRelativePath(cssDir, importUrl, opfDir);\n\n refValidator.addReference({\n url: importUrl,\n targetResource: resolvedPath,\n type: ReferenceType.STYLESHEET,\n location: { path: cssPath, line },\n });\n }\n }\n\n private extractAndRegisterImages(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n registry?: ResourceRegistry,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const ns = { html: 'http://www.w3.org/1999/xhtml' };\n\n // Pre-compute which picture elements have CMT source siblings for intrinsic fallback\n const pictureHasCMTSource = new Set<number>();\n if (registry) {\n const pictures = root.find('.//html:picture', ns);\n for (const pic of pictures) {\n const picElem = pic as XmlElement;\n const sources = picElem.find('html:source[@src]', ns);\n const sourcesWithSrcset = picElem.find('html:source[@srcset]', ns);\n for (const source of [...sources, ...sourcesWithSrcset]) {\n const srcAttr = this.getAttribute(source as XmlElement, 'src');\n const srcsetAttr = this.getAttribute(source as XmlElement, 'srcset');\n const sourceUrl = srcAttr ?? srcsetAttr?.split(',')[0]?.trim().split(/\\s+/)[0];\n if (!sourceUrl || sourceUrl.startsWith('http://') || sourceUrl.startsWith('https://'))\n continue;\n const resolvedSource = this.resolveRelativePath(docDir, sourceUrl, opfDir);\n const resource = registry.getResource(resolvedSource);\n if (resource && isCoreMediaType(resource.mimeType)) {\n pictureHasCMTSource.add(pic.line);\n break;\n }\n }\n }\n }\n\n const images = root.find('.//html:img[@src]', ns);\n for (const img of images) {\n const imgElem = img as XmlElement;\n const src = this.getAttribute(imgElem, 'src');\n if (!src) continue;\n\n const line = img.line;\n\n // Check if this img is inside a picture with CMT source (intrinsic fallback)\n let hasIntrinsicFallback: boolean | undefined;\n if (pictureHasCMTSource.size > 0) {\n try {\n const pictureParent = imgElem.get('ancestor::html:picture', ns);\n if (pictureParent && pictureHasCMTSource.has(pictureParent.line)) {\n hasIntrinsicFallback = true;\n }\n } catch {\n // ancestor axis may not be supported; skip\n }\n }\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: src,\n targetResource: src,\n type: ReferenceType.IMAGE,\n location: { path, line },\n };\n if (hasIntrinsicFallback) ref.hasIntrinsicFallback = true;\n refValidator.addReference(ref);\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: src,\n targetResource,\n type: ReferenceType.IMAGE,\n location: { path, line },\n };\n if (hasIntrinsicFallback) ref.hasIntrinsicFallback = true;\n if (fragment) {\n ref.fragment = fragment;\n }\n refValidator.addReference(ref);\n }\n\n // Parse srcset attribute\n const srcset = this.getAttribute(imgElem, 'srcset');\n if (srcset) {\n this.parseSrcset(srcset, docDir, opfDir, path, line, refValidator);\n }\n }\n\n // Also check for images in SVG - use separate queries to avoid XPath 'or' issues\n let svgImages: unknown[] = [];\n try {\n const svgImagesXlink = root.find('.//svg:image[@xlink:href]', {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n });\n const svgImagesHref = root.find('.//svg:image[@href]', {\n svg: 'http://www.w3.org/2000/svg',\n });\n svgImages = [...svgImagesXlink, ...svgImagesHref];\n } catch {\n // Fallback: skip SVG image extraction if namespace resolution fails\n svgImages = [];\n }\n for (const svgImg of svgImages) {\n const elem = svgImg as XmlElement;\n const href = this.getAttribute(elem, 'xlink:href') ?? this.getAttribute(elem, 'href');\n if (!href) continue;\n\n const line = (svgImg as XmlNode).line;\n\n if (href.startsWith('http://') || href.startsWith('https://')) {\n refValidator.addReference({\n url: href,\n targetResource: href,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n const svgImgRef: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource,\n type: ReferenceType.IMAGE,\n location: { path, line },\n };\n if (fragment) {\n svgImgRef.fragment = fragment;\n }\n refValidator.addReference(svgImgRef);\n }\n\n // Extract SVG use elements (RSC-015: must have fragment identifier)\n try {\n const svgUseXlink = root.find('.//svg:use[@xlink:href]', {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n });\n const svgUseHref = root.find('.//svg:use[@href]', {\n svg: 'http://www.w3.org/2000/svg',\n });\n for (const useNode of [...svgUseXlink, ...svgUseHref]) {\n const useElem = useNode as XmlElement;\n const href = this.getAttribute(useElem, 'xlink:href') ?? this.getAttribute(useElem, 'href');\n if (href === null) continue;\n\n const line = useNode.line;\n\n if (href.startsWith('http://') || href.startsWith('https://')) continue;\n\n if (href === '' || !href.includes('#')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_015,\n message: `SVG \"use\" element requires a fragment identifier, but found \"${href}\"`,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : path;\n const fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n const useRef: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource,\n type: ReferenceType.SVG_SYMBOL,\n location: { path, line },\n };\n if (fragment) {\n useRef.fragment = fragment;\n }\n refValidator.addReference(useRef);\n }\n } catch {\n // empty\n }\n\n // Check for poster images on video elements\n const videos = root.find('.//html:video[@poster]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const video of videos) {\n const poster = this.getAttribute(video as XmlElement, 'poster');\n if (!poster) continue;\n\n const line = video.line;\n\n if (poster.startsWith('http://') || poster.startsWith('https://')) {\n refValidator.addReference({\n url: poster,\n targetResource: poster,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, poster, opfDir);\n refValidator.addReference({\n url: poster,\n targetResource: resolvedPath,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n }\n }\n\n private extractAndRegisterMathMLAltimg(\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n const mathElements = root.find('.//math:math[@altimg]', {\n math: 'http://www.w3.org/1998/Math/MathML',\n });\n for (const mathElem of mathElements) {\n const altimg = this.getAttribute(mathElem as XmlElement, 'altimg');\n if (!altimg) continue;\n\n const line = mathElem.line;\n\n if (altimg.startsWith('http://') || altimg.startsWith('https://')) {\n refValidator.addReference({\n url: altimg,\n targetResource: altimg,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, altimg, opfDir);\n refValidator.addReference({\n url: altimg,\n targetResource: resolvedPath,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n }\n }\n\n private extractAndRegisterScripts(\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n const scripts = root.find('.//html:script[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const script of scripts) {\n const src = this.getAttribute(script as XmlElement, 'src');\n if (!src) continue;\n\n const line = script.line;\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n refValidator.addReference({\n url: src,\n targetResource: src,\n type: ReferenceType.GENERIC,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n refValidator.addReference({\n url: src,\n targetResource: resolvedPath,\n type: ReferenceType.GENERIC,\n location: { path, line },\n });\n }\n }\n\n /**\n * Extract cite attribute references from blockquote, q, ins, del elements\n * These need to be validated as RSC-007 if the referenced resource is missing\n */\n private extractAndRegisterCiteAttributes(\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n // Elements that can have cite attribute: blockquote, q, ins, del\n const citeElements = [\n ...root.find('.//html:blockquote[@cite]', { html: 'http://www.w3.org/1999/xhtml' }),\n ...root.find('.//html:q[@cite]', { html: 'http://www.w3.org/1999/xhtml' }),\n ...root.find('.//html:ins[@cite]', { html: 'http://www.w3.org/1999/xhtml' }),\n ...root.find('.//html:del[@cite]', { html: 'http://www.w3.org/1999/xhtml' }),\n ];\n\n for (const elem of citeElements) {\n const cite = this.getAttribute(elem as XmlElement, 'cite');\n if (!cite) continue;\n\n const line = elem.line;\n\n // Skip remote URLs - cite can reference remote resources\n if (cite.startsWith('http://') || cite.startsWith('https://')) {\n continue;\n }\n\n // Skip fragment-only references (refers to same document)\n if (cite.startsWith('#')) {\n const targetResource = path;\n const fragment = cite.slice(1);\n refValidator.addReference({\n url: cite,\n targetResource,\n fragment,\n type: ReferenceType.CITE,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, cite, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: cite,\n targetResource,\n type: ReferenceType.CITE,\n location: { path, line },\n };\n if (fragment) {\n ref.fragment = fragment;\n }\n refValidator.addReference(ref);\n }\n }\n\n private extractAndRegisterMediaElements(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n registry?: ResourceRegistry,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const ns = { html: 'http://www.w3.org/1999/xhtml' };\n\n // Process audio and video elements together to detect intrinsic source fallback.\n // Per Java EPUBCheck: a media element has intrinsic fallback if any of its\n // sources (src attr or <source> children) resolve to a core media type resource.\n for (const tagName of ['audio', 'video'] as const) {\n const isAudio = tagName === 'audio';\n const refType = isAudio ? ReferenceType.AUDIO : ReferenceType.VIDEO;\n const elements = root.find(`.//html:${tagName}`, ns);\n\n for (const elem of elements) {\n const mediaElem = elem as XmlElement;\n const pendingRefs: {\n url: string;\n targetResource: string;\n type: ReferenceType;\n line?: number;\n }[] = [];\n\n // Collect direct src attribute\n const src = this.getAttribute(mediaElem, 'src');\n if (src) {\n const line = elem.line;\n if (src.startsWith('http://') || src.startsWith('https://')) {\n pendingRefs.push({ url: src, targetResource: src, type: refType, line });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n pendingRefs.push({ url: src, targetResource: resolvedPath, type: refType, line });\n }\n }\n\n // Collect <source> children\n const sources = mediaElem.find('html:source[@src]', ns);\n for (const source of sources) {\n const sourceElem = source as XmlElement;\n const sourceSrc = this.getAttribute(sourceElem, 'src');\n if (!sourceSrc) continue;\n const line = source.line;\n if (sourceSrc.startsWith('http://') || sourceSrc.startsWith('https://')) {\n pendingRefs.push({ url: sourceSrc, targetResource: sourceSrc, type: refType, line });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, sourceSrc, opfDir);\n pendingRefs.push({ url: sourceSrc, targetResource: resolvedPath, type: refType, line });\n }\n // OPF-013: Check type attribute mismatch for source in audio/video\n if (registry) {\n this.checkMimeTypeMatch(context, path, docDir, opfDir, sourceElem, 'src', registry);\n }\n }\n\n // Check if any source resolves to a CMT resource\n let hasIntrinsicFallback = false;\n if (registry && pendingRefs.length > 1) {\n hasIntrinsicFallback = pendingRefs.some((ref) => {\n const resource = registry.getResource(ref.targetResource);\n return resource && isCoreMediaType(resource.mimeType);\n });\n }\n\n // Register all references with the shared fallback flag\n for (const ref of pendingRefs) {\n const reference: Parameters<typeof refValidator.addReference>[0] = {\n url: ref.url,\n targetResource: ref.targetResource,\n type: ref.type,\n location: ref.line !== undefined ? { path, line: ref.line } : { path },\n };\n if (hasIntrinsicFallback) reference.hasIntrinsicFallback = true;\n refValidator.addReference(reference);\n }\n }\n }\n\n // Process picture elements for MED-003 and MED-007\n this.extractAndRegisterPictureElements(context, path, root, opfDir, refValidator, registry);\n\n // Extract iframe elements with src attribute\n const iframeElements = root.find('.//html:iframe[@src]', {\n html: 'http://www.w3.org/1999/xhtml',\n });\n for (const iframe of iframeElements) {\n const src = this.getAttribute(iframe as XmlElement, 'src');\n if (!src) continue;\n\n const line = (iframe as unknown as { line?: number }).line;\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n refValidator.addReference({\n url: src,\n targetResource: src,\n type: ReferenceType.GENERIC,\n location: line !== undefined ? { path, line } : { path },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n refValidator.addReference({\n url: src,\n targetResource: resolvedPath,\n type: ReferenceType.GENERIC,\n location: line !== undefined ? { path, line } : { path },\n });\n }\n }\n\n // Extract track elements with src attribute\n const trackElements = root.find('.//html:track[@src]', {\n html: 'http://www.w3.org/1999/xhtml',\n });\n for (const track of trackElements) {\n const src = this.getAttribute(track as XmlElement, 'src');\n if (!src) continue;\n\n const line = (track as unknown as { line?: number }).line;\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n refValidator.addReference({\n url: src,\n targetResource: src,\n type: ReferenceType.TRACK,\n location: line !== undefined ? { path, line } : { path },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n refValidator.addReference({\n url: src,\n targetResource: resolvedPath,\n type: ReferenceType.TRACK,\n location: line !== undefined ? { path, line } : { path },\n });\n }\n }\n }\n\n private extractAndRegisterEmbeddedElements(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n registry?: ResourceRegistry,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const ns = { html: 'http://www.w3.org/1999/xhtml' };\n\n const addRef = (\n src: string,\n type: ReferenceType,\n line?: number,\n hasIntrinsicFallback?: boolean,\n ): void => {\n const location = line !== undefined ? { path, line } : { path };\n if (src.startsWith('http://') || src.startsWith('https://')) {\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: src,\n targetResource: src,\n type,\n location,\n };\n if (hasIntrinsicFallback) ref.hasIntrinsicFallback = true;\n refValidator.addReference(ref);\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: src,\n targetResource,\n type,\n location,\n };\n if (hashIndex >= 0) ref.fragment = resolvedPath.slice(hashIndex + 1);\n if (hasIntrinsicFallback) ref.hasIntrinsicFallback = true;\n refValidator.addReference(ref);\n }\n };\n\n // embed[@src]\n for (const elem of root.find('.//html:embed[@src]', ns)) {\n const embedElem = elem as XmlElement;\n const src = this.getAttribute(embedElem, 'src');\n if (src) addRef(src, ReferenceType.GENERIC, elem.line);\n if (registry) {\n this.checkMimeTypeMatch(context, path, docDir, opfDir, embedElem, 'src', registry);\n }\n }\n\n // input[@type='image'][@src]\n for (const elem of root.find('.//html:input[@src]', ns)) {\n const type = this.getAttribute(elem as XmlElement, 'type');\n if (type?.toLowerCase() === 'image') {\n const src = this.getAttribute(elem as XmlElement, 'src');\n if (src) addRef(src, ReferenceType.IMAGE, elem.line);\n }\n }\n\n // object[@data]\n for (const elem of root.find('.//html:object[@data]', ns)) {\n const objElem = elem as XmlElement;\n const data = this.getAttribute(objElem, 'data');\n if (!data) continue;\n // Object has intrinsic fallback if it has palpable child content\n // (non-param, non-hidden child elements)\n const allChildren = objElem.find('html:*', ns);\n const hasFallbackContent = allChildren.some((child) => {\n const c = child as XmlElement;\n return c.name !== 'param' && this.getAttribute(c, 'hidden') === null;\n });\n addRef(data, ReferenceType.GENERIC, elem.line, hasFallbackContent || undefined);\n if (registry) {\n this.checkMimeTypeMatch(context, path, docDir, opfDir, objElem, 'data', registry);\n }\n }\n }\n\n /**\n * Check if an element's type attribute matches the manifest MIME type (OPF-013)\n */\n private checkMimeTypeMatch(\n context: ValidationContext,\n path: string,\n docDir: string,\n opfDir: string,\n element: XmlElement,\n srcAttr: string,\n registry: ResourceRegistry,\n ): void {\n const typeAttr = this.getAttribute(element, 'type');\n if (!typeAttr) return;\n\n const src = this.getAttribute(element, srcAttr);\n if (!src || src.startsWith('http://') || src.startsWith('https://')) return;\n\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const resource = registry.getResource(targetResource);\n if (!resource) return;\n\n // Strip parameters from both type attribute and manifest type before comparison\n const stripParams = (t: string): string => {\n const idx = t.indexOf(';');\n return (idx >= 0 ? t.substring(0, idx) : t).trim();\n };\n const declaredType = stripParams(typeAttr);\n const manifestType = stripParams(resource.mimeType);\n\n if (declaredType && declaredType !== manifestType) {\n pushMessage(context.messages, {\n id: MessageId.OPF_013,\n message: `Resource \"${targetResource}\" is declared with MIME type \"${declaredType}\" in content, but has MIME type \"${manifestType}\" in the package document`,\n location: { path, line: element.line },\n });\n }\n }\n\n /**\n * Extract and validate picture elements (MED-003, MED-007, OPF-013)\n */\n private extractAndRegisterPictureElements(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n registry?: ResourceRegistry,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const ns = { html: 'http://www.w3.org/1999/xhtml' };\n\n const BLESSED_IMAGE_TYPES = new Set([\n 'image/gif',\n 'image/jpeg',\n 'image/png',\n 'image/svg+xml',\n 'image/webp',\n ]);\n\n const pictures = root.find('.//html:picture', ns);\n for (const pic of pictures) {\n const picElem = pic as XmlElement;\n\n // Check img inside picture (MED-003)\n const imgs = picElem.find('html:img[@src]', ns);\n for (const img of imgs) {\n const imgElem = img as XmlElement;\n const src = this.getAttribute(imgElem, 'src');\n if (!src || src.startsWith('http://') || src.startsWith('https://')) continue;\n\n if (registry) {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n const resource = registry.getResource(resolvedPath);\n if (resource && !BLESSED_IMAGE_TYPES.has(resource.mimeType)) {\n pushMessage(context.messages, {\n id: MessageId.MED_003,\n message: `Image in \"picture\" element must be a core image type, but found \"${resource.mimeType}\"`,\n location: { path, line: img.line },\n });\n }\n }\n\n // Also check srcset\n const srcset = this.getAttribute(imgElem, 'srcset');\n if (srcset && registry) {\n const entries = srcset.split(',');\n for (const entry of entries) {\n const url = entry.trim().split(/\\s+/)[0];\n if (!url || url.startsWith('http://') || url.startsWith('https://')) continue;\n const resolvedPath = this.resolveRelativePath(docDir, url, opfDir);\n const resource = registry.getResource(resolvedPath);\n if (resource && !BLESSED_IMAGE_TYPES.has(resource.mimeType)) {\n pushMessage(context.messages, {\n id: MessageId.MED_003,\n message: `Image in \"picture\" element must be a core image type, but found \"${resource.mimeType}\"`,\n location: { path, line: img.line },\n });\n }\n }\n }\n }\n\n // Check source inside picture (MED-007, OPF-013)\n // Sources may use src or srcset attribute\n const sourcesWithSrc = picElem.find('html:source[@src]', ns);\n const sourcesWithSrcset = picElem.find('html:source[@srcset]', ns);\n const allSources = new Set([...sourcesWithSrc, ...sourcesWithSrcset]);\n for (const source of allSources) {\n const sourceElem = source as XmlElement;\n const typeAttr = this.getAttribute(sourceElem, 'type');\n\n // Get source URL from src or first srcset entry\n const src = this.getAttribute(sourceElem, 'src');\n const srcset = this.getAttribute(sourceElem, 'srcset');\n const sourceUrl = src ?? srcset?.split(',')[0]?.trim().split(/\\s+/)[0];\n if (!sourceUrl || sourceUrl.startsWith('http://') || sourceUrl.startsWith('https://'))\n continue;\n\n if (registry) {\n // OPF-013: Check type mismatch (only if source has type and src attributes)\n if (src) {\n this.checkMimeTypeMatch(context, path, docDir, opfDir, sourceElem, 'src', registry);\n } else if (srcset && typeAttr) {\n // For srcset, manually check the first entry against the type attribute\n const resolvedPath = this.resolveRelativePath(docDir, sourceUrl, opfDir);\n const resource = registry.getResource(resolvedPath);\n if (resource) {\n const stripParams = (t: string): string => {\n const idx = t.indexOf(';');\n return (idx >= 0 ? t.substring(0, idx) : t).trim();\n };\n const declaredType = stripParams(typeAttr);\n const manifestType = stripParams(resource.mimeType);\n if (declaredType && declaredType !== manifestType) {\n pushMessage(context.messages, {\n id: MessageId.OPF_013,\n message: `Resource \"${resolvedPath}\" is declared with MIME type \"${declaredType}\" in content, but has MIME type \"${manifestType}\" in the package document`,\n location: { path, line: source.line },\n });\n }\n }\n }\n\n // MED-007: source in picture must have type attribute if resource is not blessed image\n const resolvedPath = this.resolveRelativePath(docDir, sourceUrl, opfDir);\n const resource = registry.getResource(resolvedPath);\n if (resource && !BLESSED_IMAGE_TYPES.has(resource.mimeType) && !typeAttr) {\n pushMessage(context.messages, {\n id: MessageId.MED_007,\n message: `Source element in \"picture\" with foreign resource type \"${resource.mimeType}\" must declare a \"type\" attribute`,\n location: { path, line: source.line },\n });\n }\n }\n }\n }\n }\n\n private parseSrcset(\n srcset: string,\n docDir: string,\n opfDir: string,\n path: string,\n line: number | undefined,\n refValidator: ReferenceValidator,\n ): void {\n // srcset format: \"url [descriptor], url [descriptor], ...\"\n const entries = srcset.split(',');\n for (const entry of entries) {\n const trimmed = entry.trim();\n if (!trimmed) continue;\n // First token is the URL, rest are descriptors (e.g., \"2x\", \"300w\")\n const url = trimmed.split(/\\s+/)[0];\n if (!url) continue;\n\n const location = line !== undefined ? { path, line } : { path };\n\n if (url.startsWith('http://') || url.startsWith('https://')) {\n refValidator.addReference({\n url,\n targetResource: url,\n type: ReferenceType.IMAGE,\n location,\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, url, opfDir);\n refValidator.addReference({\n url,\n targetResource: resolvedPath,\n type: ReferenceType.IMAGE,\n location,\n });\n }\n }\n }\n\n private resolveRelativePath(docDir: string, href: string, _opfDir: string): string {\n let decoded: string;\n try {\n decoded = decodeURIComponent(href);\n } catch {\n decoded = href;\n }\n\n const hrefWithoutFragment = decoded.split('#')[0] ?? decoded;\n const fragment = decoded.includes('#') ? decoded.split('#')[1] : '';\n\n if (hrefWithoutFragment.startsWith('/')) {\n const result = hrefWithoutFragment.slice(1).normalize('NFC');\n return fragment ? `${result}#${fragment}` : result;\n }\n\n const parts = docDir ? docDir.split('/') : [];\n const relParts = hrefWithoutFragment.split('/');\n\n for (const part of relParts) {\n if (part === '..') {\n parts.pop();\n } else if (part !== '.' && part !== '') {\n parts.push(part);\n }\n }\n\n const result = parts.join('/').normalize('NFC');\n return fragment ? `${result}#${fragment}` : result;\n }\n}\n","import type { EPUBVersion, EpubCheckResult, Severity, ValidationMessage } from '../types.js';\n\n/**\n * Build a validation result from messages\n */\nexport function buildReport(\n messages: ValidationMessage[],\n version: EPUBVersion | undefined,\n elapsedMs: number,\n): EpubCheckResult {\n const counts = countBySeverity(messages);\n\n return {\n valid: counts.fatal === 0 && counts.error === 0,\n messages,\n fatalCount: counts.fatal,\n errorCount: counts.error,\n warningCount: counts.warning,\n infoCount: counts.info,\n usageCount: counts.usage,\n version,\n elapsedMs,\n };\n}\n\n/**\n * Count messages by severity\n */\nexport function countBySeverity(messages: ValidationMessage[]): Record<Severity, number> {\n const counts: Record<Severity, number> = {\n fatal: 0,\n error: 0,\n warning: 0,\n info: 0,\n usage: 0,\n };\n\n for (const msg of messages) {\n counts[msg.severity]++;\n }\n\n return counts;\n}\n\n/**\n * Filter messages by severity\n */\nexport function filterBySeverity(\n messages: ValidationMessage[],\n severity: Severity,\n): ValidationMessage[] {\n return messages.filter((msg) => msg.severity === severity);\n}\n\n/**\n * Filter messages by path\n */\nexport function filterByPath(messages: ValidationMessage[], path: string): ValidationMessage[] {\n return messages.filter((msg) => msg.location?.path === path);\n}\n\n/**\n * Format messages as a string for display\n */\nexport function formatMessages(messages: ValidationMessage[]): string {\n return messages\n .map((msg) => {\n const loc = msg.location;\n const position = loc\n ? `${loc.path}${loc.line !== undefined ? `:${String(loc.line)}` : ''}${loc.column !== undefined ? `:${String(loc.column)}` : ''}`\n : '';\n return `${msg.severity.toUpperCase()}(${msg.id}): ${msg.message}${position ? ` [${position}]` : ''}`;\n })\n .join('\\n');\n}\n\n/**\n * Convert result to JSON report format (compatible with EPUBCheck JSON output)\n */\nexport function toJSONReport(result: EpubCheckResult): string {\n return JSON.stringify(\n {\n checker: {\n name: 'epubcheck-ts',\n version: '0.1.0',\n },\n publication: {\n version: result.version,\n },\n messages: result.messages.map((msg) => ({\n ID: msg.id,\n severity: msg.severity,\n message: msg.message,\n ...(msg.location && {\n locations: [\n {\n path: msg.location.path,\n line: msg.location.line ?? -1,\n column: msg.location.column ?? -1,\n context: msg.location.context,\n },\n ],\n }),\n ...(msg.suggestion && { suggestion: msg.suggestion }),\n })),\n fatals: result.fatalCount,\n errors: result.errorCount,\n warnings: result.warningCount,\n infos: result.infoCount,\n usages: result.usageCount,\n elapsedTime: result.elapsedMs,\n },\n null,\n 2,\n );\n}\n\n/**\n * @deprecated Use individual functions instead. This class will be removed in a future version.\n */\nexport const Report = {\n build: buildReport,\n countBySeverity,\n filterBySeverity,\n filterByPath,\n format: formatMessages,\n toJSON: toJSONReport,\n};\n","/**\n * NCX (Navigation Control XML) validation for EPUB 2.0\n */\n\nimport { XmlDocument, type XmlElement } from 'libxml2-wasm';\nimport { MessageId, pushMessage } from '../messages/index.js';\nimport type { ResourceRegistry } from '../references/registry.js';\nimport type { ValidationContext } from '../types.js';\n\n/**\n * Validator for EPUB 2 NCX navigation documents\n */\nexport class NCXValidator {\n validate(\n context: ValidationContext,\n ncxContent: string,\n ncxPath: string,\n registry?: ResourceRegistry,\n ): void {\n let doc: XmlDocument | null = null;\n try {\n doc = XmlDocument.fromString(ncxContent);\n } catch (error) {\n if (error instanceof Error) {\n pushMessage(context.messages, {\n id: MessageId.NCX_002,\n message: `NCX document is not well-formed: ${error.message}`,\n location: { path: ncxPath },\n });\n }\n return;\n }\n\n try {\n const root = doc.root;\n\n if (root.name !== 'ncx') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'NCX document must have ncx as root element',\n location: { path: ncxPath },\n });\n return;\n }\n\n const ns = root.nsDeclarations[''];\n if (ns !== 'http://www.daisy.org/z3986/2005/ncx/') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'NCX document must use namespace http://www.daisy.org/z3986/2005/ncx/',\n location: { path: ncxPath },\n });\n }\n\n this.checkUid(context, root, ncxPath);\n this.checkNavMap(context, root, ncxPath);\n this.checkContentSrc(context, root, ncxPath, registry);\n } finally {\n doc.dispose();\n }\n }\n\n private checkUid(context: ValidationContext, root: XmlElement, path: string): void {\n const uidMeta = root.get('.//ncx:head/ncx:meta[@name=\"dtb:uid\"]', {\n ncx: 'http://www.daisy.org/z3986/2005/ncx/',\n });\n\n if (!uidMeta) {\n return;\n }\n\n const uidElement = uidMeta as XmlElement;\n const uidAttr = uidElement.attr('content');\n const uidContent = uidAttr?.value;\n\n if (!uidContent || uidContent.trim() === '') {\n const line = uidElement.line;\n pushMessage(context.messages, {\n id: MessageId.NCX_006,\n message: 'NCX dtb:uid meta content should not be empty',\n location: { path, line },\n });\n return;\n }\n\n context.ncxUid = uidContent.trim();\n }\n\n private checkNavMap(context: ValidationContext, root: XmlElement, path: string): void {\n const navMapNode = root.get('.//ncx:navMap', { ncx: 'http://www.daisy.org/z3986/2005/ncx/' });\n\n if (!navMapNode) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'NCX document must have a navMap element',\n location: { path },\n });\n }\n }\n\n private checkContentSrc(\n context: ValidationContext,\n root: XmlElement,\n ncxPath: string,\n registry?: ResourceRegistry,\n ): void {\n const contentElements = root.find('.//ncx:content[@src]', {\n ncx: 'http://www.daisy.org/z3986/2005/ncx/',\n });\n\n const ncxDir = ncxPath.includes('/') ? ncxPath.substring(0, ncxPath.lastIndexOf('/')) : '';\n\n for (const contentElem of contentElements) {\n const srcAttr = (contentElem as XmlElement).attr('src');\n const src = srcAttr?.value;\n if (!src) continue;\n\n const hashIdx = src.indexOf('#');\n const srcBase = hashIdx >= 0 ? src.substring(0, hashIdx) : src;\n const fragment = hashIdx >= 0 ? src.substring(hashIdx + 1) : '';\n\n let fullPath = srcBase;\n if (ncxDir) {\n if (srcBase.startsWith('/')) {\n fullPath = srcBase.slice(1);\n } else {\n const parts = ncxDir.split('/');\n const relParts = srcBase.split('/');\n for (const part of relParts) {\n if (part === '..') {\n parts.pop();\n } else if (part !== '.') {\n parts.push(part);\n }\n }\n fullPath = parts.join('/');\n }\n }\n\n if (\n !context.files.has(fullPath) &&\n !srcBase.startsWith('http://') &&\n !srcBase.startsWith('https://')\n ) {\n const line = contentElem.line;\n pushMessage(context.messages, {\n id: MessageId.NCX_006,\n message: `NCX content src references missing file: ${src}`,\n location: { path: ncxPath, line },\n });\n } else if (fragment && registry) {\n // RSC-012: Check that fragment identifier exists in the target document\n if (!registry.hasID(fullPath, fragment)) {\n const line = contentElem.line;\n pushMessage(context.messages, {\n id: MessageId.RSC_012,\n message: `Fragment identifier is not defined`,\n location: { path: ncxPath, line },\n });\n }\n }\n }\n }\n}\n","import { strFromU8, unzipSync } from 'fflate';\n\nexport interface MimetypeCompressionInfo {\n compressionMethod: number;\n extraFieldLength: number;\n filenameLength: number;\n filename: string;\n}\n\nexport interface InvalidUtf8Filename {\n /** The filename as decoded (may be garbled) */\n filename: string;\n /** Description of the UTF-8 error */\n reason: string;\n}\n\n/**\n * A simple ZIP reader for EPUB files using fflate\n */\nexport class ZipReader {\n private files: Record<string, Uint8Array>;\n private _paths: string[];\n private _originalOrder: string[];\n private _rawData: Uint8Array;\n\n private constructor(\n files: Record<string, Uint8Array>,\n originalOrder: string[],\n rawData: Uint8Array,\n ) {\n this.files = files;\n this._originalOrder = originalOrder;\n this._paths = Object.keys(files).sort();\n this._rawData = rawData;\n }\n\n /**\n * Open a ZIP file from binary data\n */\n static open(data: Uint8Array): ZipReader {\n const raw = unzipSync(data);\n // fflate decodes filenames as Latin-1 when the ZIP UTF-8 flag is not set.\n // EPUB spec requires UTF-8 filenames, so re-decode Latin-1 names as UTF-8.\n const files: Record<string, Uint8Array> = {};\n const originalOrder: string[] = [];\n for (const key of Object.keys(raw)) {\n const corrected = reDecodeFilename(key);\n const entry = raw[key];\n if (entry) files[corrected] = entry;\n originalOrder.push(corrected);\n }\n return new ZipReader(files, originalOrder, data);\n }\n\n /**\n * Get compression info for the first entry (mimetype) from raw ZIP header\n * ZIP Local File Header format:\n * - Offset 0-3: Signature (0x04034b50)\n * - Offset 4-5: Version needed\n * - Offset 6-7: General purpose bit flag\n * - Offset 8-9: Compression method (0=stored, 8=deflated)\n * - Offset 10-13: Last mod time/date\n * - Offset 14-17: CRC-32\n * - Offset 18-21: Compressed size\n * - Offset 22-25: Uncompressed size\n * - Offset 26-27: Filename length\n * - Offset 28-29: Extra field length\n * - Offset 30+: Filename\n */\n getMimetypeCompressionInfo(): MimetypeCompressionInfo | null {\n const data = this._rawData;\n if (data.length < 30) {\n return null;\n }\n\n if (data[0] !== 0x50 || data[1] !== 0x4b || data[2] !== 0x03 || data[3] !== 0x04) {\n return null;\n }\n\n const compressionMethod = (data[8] ?? 0) | ((data[9] ?? 0) << 8);\n const filenameLength = (data[26] ?? 0) | ((data[27] ?? 0) << 8);\n const extraFieldLength = (data[28] ?? 0) | ((data[29] ?? 0) << 8);\n\n if (data.length < 30 + filenameLength) {\n return null;\n }\n\n const filenameBytes = data.slice(30, 30 + filenameLength);\n const filename = strFromU8(filenameBytes);\n\n return {\n compressionMethod,\n extraFieldLength,\n filenameLength,\n filename,\n };\n }\n\n /**\n * Get all file paths in the ZIP (sorted alphabetically)\n */\n get paths(): string[] {\n return this._paths;\n }\n\n /**\n * Get file paths in original ZIP order\n */\n get originalOrder(): string[] {\n return this._originalOrder;\n }\n\n /**\n * Check if a file exists in the ZIP\n */\n has(path: string): boolean {\n return path in this.files;\n }\n\n /**\n * Read a file as text (UTF-8)\n */\n readText(path: string): string | undefined {\n const data = this.files[path];\n if (!data) {\n return undefined;\n }\n return strFromU8(data);\n }\n\n /**\n * Read a file as binary data\n */\n readBinary(path: string): Uint8Array | undefined {\n return this.files[path];\n }\n\n /**\n * Get the size of a file in bytes\n */\n getSize(path: string): number | undefined {\n return this.files[path]?.length;\n }\n\n /**\n * List files in a directory\n */\n listDirectory(dirPath: string): string[] {\n const prefix = dirPath.endsWith('/') ? dirPath : `${dirPath}/`;\n return this._paths.filter((p) => p.startsWith(prefix));\n }\n\n /**\n * Check for filenames that are not valid UTF-8 by parsing raw ZIP data\n *\n * ZIP files store filenames as bytes. The EPUB spec requires filenames to be UTF-8.\n * This method parses the ZIP central directory to find filenames with invalid UTF-8.\n *\n * @returns Array of filenames with invalid UTF-8 encoding\n */\n getInvalidUtf8Filenames(): InvalidUtf8Filename[] {\n const invalid: InvalidUtf8Filename[] = [];\n const data = this._rawData;\n\n // Find the End of Central Directory record\n // Signature: 0x06054b50, located at end of file (may have comment after)\n let eocdOffset = -1;\n for (let i = data.length - 22; i >= 0; i--) {\n if (\n data[i] === 0x50 &&\n data[i + 1] === 0x4b &&\n data[i + 2] === 0x05 &&\n data[i + 3] === 0x06\n ) {\n eocdOffset = i;\n break;\n }\n }\n\n if (eocdOffset === -1) {\n return invalid; // Can't find EOCD, fflate will handle this error\n }\n\n // Get offset to start of central directory\n const cdOffset =\n (data[eocdOffset + 16] ?? 0) |\n ((data[eocdOffset + 17] ?? 0) << 8) |\n ((data[eocdOffset + 18] ?? 0) << 16) |\n ((data[eocdOffset + 19] ?? 0) << 24);\n\n // Parse central directory file headers\n // Signature: 0x02014b50\n let offset = cdOffset;\n while (offset < eocdOffset) {\n if (\n data[offset] !== 0x50 ||\n data[offset + 1] !== 0x4b ||\n data[offset + 2] !== 0x01 ||\n data[offset + 3] !== 0x02\n ) {\n break; // Not a central directory header\n }\n\n const filenameLength = (data[offset + 28] ?? 0) | ((data[offset + 29] ?? 0) << 8);\n const extraLength = (data[offset + 30] ?? 0) | ((data[offset + 31] ?? 0) << 8);\n const commentLength = (data[offset + 32] ?? 0) | ((data[offset + 33] ?? 0) << 8);\n\n // Extract raw filename bytes\n const filenameBytes = data.slice(offset + 46, offset + 46 + filenameLength);\n\n // Check if filename is valid UTF-8\n const utf8Error = this.validateUtf8(filenameBytes);\n if (utf8Error) {\n // Decode filename as best we can for error reporting\n const filename = strFromU8(filenameBytes);\n invalid.push({ filename, reason: utf8Error });\n }\n\n // Move to next central directory entry\n offset += 46 + filenameLength + extraLength + commentLength;\n }\n\n return invalid;\n }\n\n /**\n * Validate that bytes form a valid UTF-8 sequence\n *\n * @returns Error description if invalid, undefined if valid\n */\n private validateUtf8(bytes: Uint8Array): string | undefined {\n let i = 0;\n while (i < bytes.length) {\n const byte = bytes[i] ?? 0;\n\n if (byte <= 0x7f) {\n // ASCII (0xxxxxxx)\n i++;\n } else if ((byte & 0xe0) === 0xc0) {\n // 2-byte sequence (110xxxxx 10xxxxxx)\n if (byte < 0xc2) {\n return `Overlong encoding at byte ${String(i)}`;\n }\n if (i + 1 >= bytes.length || ((bytes[i + 1] ?? 0) & 0xc0) !== 0x80) {\n return `Invalid continuation byte at position ${String(i + 1)}`;\n }\n i += 2;\n } else if ((byte & 0xf0) === 0xe0) {\n // 3-byte sequence (1110xxxx 10xxxxxx 10xxxxxx)\n if (\n i + 2 >= bytes.length ||\n ((bytes[i + 1] ?? 0) & 0xc0) !== 0x80 ||\n ((bytes[i + 2] ?? 0) & 0xc0) !== 0x80\n ) {\n return `Invalid continuation byte in 3-byte sequence at position ${String(i)}`;\n }\n // Check for overlong encoding\n if (byte === 0xe0 && (bytes[i + 1] ?? 0) < 0xa0) {\n return `Overlong 3-byte encoding at byte ${String(i)}`;\n }\n // Check for surrogate pairs (0xD800-0xDFFF)\n if (byte === 0xed && (bytes[i + 1] ?? 0) >= 0xa0) {\n return `UTF-16 surrogate at byte ${String(i)}`;\n }\n i += 3;\n } else if ((byte & 0xf8) === 0xf0) {\n // 4-byte sequence (11110xxx 10xxxxxx 10xxxxxx 10xxxxxx)\n if (\n i + 3 >= bytes.length ||\n ((bytes[i + 1] ?? 0) & 0xc0) !== 0x80 ||\n ((bytes[i + 2] ?? 0) & 0xc0) !== 0x80 ||\n ((bytes[i + 3] ?? 0) & 0xc0) !== 0x80\n ) {\n return `Invalid continuation byte in 4-byte sequence at position ${String(i)}`;\n }\n // Check for overlong encoding\n if (byte === 0xf0 && (bytes[i + 1] ?? 0) < 0x90) {\n return `Overlong 4-byte encoding at byte ${String(i)}`;\n }\n // Check for code points > U+10FFFF\n if (byte > 0xf4 || (byte === 0xf4 && (bytes[i + 1] ?? 0) > 0x8f)) {\n return `Code point exceeds U+10FFFF at byte ${String(i)}`;\n }\n i += 4;\n } else {\n // Invalid start byte (10xxxxxx or 11111xxx)\n return `Invalid UTF-8 start byte 0x${byte.toString(16).toUpperCase()} at position ${String(i)}`;\n }\n }\n return undefined;\n }\n}\n\n/**\n * Re-decode a filename from Latin-1 to UTF-8.\n * fflate decodes filenames as Latin-1 when the ZIP UTF-8 flag is not set,\n * but EPUB requires UTF-8. If ALL non-ASCII chars are in U+0080–U+00FF\n * (Latin-1 range), the bytes may be UTF-8 decoded as Latin-1 — re-decode.\n * If any char is > U+00FF, fflate already decoded as UTF-8 correctly.\n */\nfunction reDecodeFilename(name: string): string {\n let hasNonASCII = false;\n for (let i = 0; i < name.length; i++) {\n const code = name.charCodeAt(i);\n if (code > 0xff) return name; // Already proper Unicode, not Latin-1\n if (code > 0x7f) hasNonASCII = true;\n }\n if (!hasNonASCII) return name;\n\n const bytes = new Uint8Array(name.length);\n for (let i = 0; i < name.length; i++) {\n bytes[i] = name.charCodeAt(i);\n }\n try {\n return new TextDecoder('utf-8', { fatal: true }).decode(bytes);\n } catch {\n return name;\n }\n}\n","import { MessageId, pushMessage } from '../messages/index.js';\nimport type { ValidationContext, ValidationMessage } from '../types.js';\nimport { ZipReader } from './zip.js';\n\n/**\n * Expected MIME type for EPUB files\n */\nconst EPUB_MIMETYPE = 'application/epub+zip';\n\n/**\n * Validates the OCF (Open Container Format) structure of an EPUB\n *\n * This includes:\n * - ZIP structure validation\n * - mimetype file validation\n * - META-INF/container.xml validation\n */\nexport class OCFValidator {\n /**\n * Validate the OCF container\n */\n validate(context: ValidationContext): void {\n // Open the ZIP file\n let zip: ZipReader;\n try {\n zip = ZipReader.open(context.data);\n } catch (error) {\n pushMessage(context.messages, {\n id: MessageId.PKG_001,\n message: `Failed to open EPUB file: ${error instanceof Error ? error.message : 'Unknown error'}`,\n });\n return;\n }\n\n // Store all files in context (NFC-normalize paths for consistent lookups)\n for (const path of zip.paths) {\n const data = zip.readBinary(path);\n if (data) {\n context.files.set(path.normalize('NFC'), data);\n }\n }\n\n // Validate mimetype file\n this.validateMimetype(zip, context.messages);\n\n // Validate container.xml\n this.validateContainer(zip, context);\n\n // Validate filenames\n this.validateFilenames(zip, context.messages);\n\n // Check for duplicate filenames (case folding, Unicode normalization)\n this.validateDuplicateFilenames(zip, context.messages);\n\n // Check for non-UTF8 filenames\n this.validateUtf8Filenames(zip, context.messages);\n\n // Validate empty directories\n this.validateEmptyDirectories(zip, context.messages);\n\n // Parse encryption.xml for obfuscated resources\n this.parseEncryption(zip, context);\n }\n\n /**\n * Validate the mimetype file\n *\n * Requirements:\n * - Must exist\n * - Must be first file in ZIP\n * - Must be uncompressed (compression method = 0)\n * - Must have no extra field\n * - Must contain exactly \"application/epub+zip\"\n */\n private validateMimetype(zip: ZipReader, messages: ValidationMessage[]): void {\n const compressionInfo = zip.getMimetypeCompressionInfo();\n\n if (compressionInfo === null) {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Could not read ZIP header',\n location: { path: 'mimetype' },\n });\n return;\n }\n\n if (compressionInfo.filename !== 'mimetype') {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Mimetype file must be the first file in the ZIP archive',\n location: { path: 'mimetype' },\n });\n }\n\n if (compressionInfo.extraFieldLength !== 0) {\n pushMessage(messages, {\n id: MessageId.PKG_005,\n message: `Mimetype entry must not have an extra field (found ${String(compressionInfo.extraFieldLength)} bytes)`,\n location: { path: 'mimetype' },\n });\n }\n\n if (compressionInfo.compressionMethod !== 0) {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Mimetype file must be uncompressed',\n location: { path: 'mimetype' },\n });\n }\n\n if (!zip.has('mimetype')) {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Missing mimetype file',\n location: { path: 'mimetype' },\n });\n return;\n }\n\n const content = zip.readText('mimetype');\n if (content === undefined) {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Could not read mimetype file',\n location: { path: 'mimetype' },\n });\n return;\n }\n\n // PKG-007: mimetype must exactly match \"application/epub+zip\" (no trimming)\n // This matches Java EPUBCheck behavior - any whitespace/newlines are an error\n if (content !== EPUB_MIMETYPE) {\n pushMessage(messages, {\n id: MessageId.PKG_007,\n message: `Mimetype file must contain exactly \"${EPUB_MIMETYPE}\"`,\n location: { path: 'mimetype' },\n });\n }\n }\n\n /**\n * Validate META-INF/container.xml\n */\n private validateContainer(zip: ZipReader, context: ValidationContext): void {\n const containerPath = 'META-INF/container.xml';\n\n if (!zip.has(containerPath)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_002,\n message: 'Required file META-INF/container.xml was not found',\n location: { path: containerPath },\n });\n return;\n }\n\n const content = zip.readText(containerPath);\n if (!content) {\n pushMessage(context.messages, {\n id: MessageId.RSC_002,\n message: 'Could not read META-INF/container.xml',\n location: { path: containerPath },\n });\n return;\n }\n\n // Parse container.xml to extract rootfiles\n // TODO: Use libxml2-wasm for proper XML parsing and validation\n // For now, use a simple regex extraction\n const rootfileMatches = content.matchAll(\n /<rootfile[^>]+full-path=[\"']([^\"']+)[\"'][^>]*media-type=[\"']([^\"']+)[\"'][^>]*\\/?>/g,\n );\n\n for (const match of rootfileMatches) {\n const [, path, mediaType] = match;\n if (path && mediaType) {\n context.rootfiles.push({ path, mediaType });\n\n // Set the first OPF as the main package document\n if (!context.opfPath && mediaType === 'application/oebps-package+xml') {\n context.opfPath = path;\n }\n }\n }\n\n // Also try alternative attribute order\n const altMatches = content.matchAll(\n /<rootfile[^>]+media-type=[\"']([^\"']+)[\"'][^>]*full-path=[\"']([^\"']+)[\"'][^>]*\\/?>/g,\n );\n\n for (const match of altMatches) {\n const [, mediaType, path] = match;\n if (path && mediaType) {\n // Check if already added\n const exists = context.rootfiles.some((r) => r.path === path);\n if (!exists) {\n context.rootfiles.push({ path, mediaType });\n if (!context.opfPath && mediaType === 'application/oebps-package+xml') {\n context.opfPath = path;\n }\n }\n }\n }\n\n if (context.rootfiles.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.PKG_004,\n message: 'No rootfile found in container.xml',\n location: { path: containerPath },\n });\n }\n\n // Verify rootfile paths exist\n for (const rootfile of context.rootfiles) {\n if (!zip.has(rootfile.path)) {\n pushMessage(context.messages, {\n id: MessageId.PKG_010,\n message: `Rootfile \"${rootfile.path}\" not found in EPUB`,\n location: { path: containerPath },\n });\n }\n }\n }\n\n /**\n * Validate filenames for invalid characters\n *\n * Per EPUB 3.3 spec and Java EPUBCheck:\n * - PKG-009: Disallowed characters (ASCII special chars, control chars, private use, etc.)\n * - PKG-010: Whitespace characters (warning)\n * - PKG-011: Filename ends with period\n * - PKG-012: Non-ASCII characters (usage info)\n */\n private validateFilenames(zip: ZipReader, messages: ValidationMessage[]): void {\n // Disallowed ASCII characters: \" * : < > ? \\ |\n const DISALLOWED_ASCII = new Set([0x22, 0x2a, 0x3a, 0x3c, 0x3e, 0x3f, 0x5c, 0x7c]);\n\n for (const path of zip.paths) {\n if (path === 'mimetype') continue;\n\n // Skip directory entries (paths ending with /)\n if (path.endsWith('/')) continue;\n\n const filename = path.includes('/') ? (path.split('/').pop() ?? path) : path;\n\n if (filename === '' || filename === '.' || filename === '..') {\n pushMessage(messages, {\n id: MessageId.PKG_009,\n message: `Invalid filename: \"${path}\"`,\n location: { path },\n });\n continue;\n }\n\n const disallowed: string[] = [];\n let hasSpaces = false;\n let hasNonASCII = false;\n\n for (let i = 0; i < filename.length; i++) {\n const code = filename.charCodeAt(i);\n\n // Check for disallowed ASCII characters\n if (DISALLOWED_ASCII.has(code)) {\n const char = filename[i] ?? '';\n disallowed.push(`U+${code.toString(16).toUpperCase().padStart(4, '0')} (${char})`);\n }\n // Check for control characters (C0: 0x00-0x1F, DEL: 0x7F, C1: 0x80-0x9F)\n else if (code <= 0x1f || code === 0x7f || (code >= 0x80 && code <= 0x9f)) {\n disallowed.push(`U+${code.toString(16).toUpperCase().padStart(4, '0')} (CONTROL)`);\n }\n // Check for private use area (0xE000-0xF8FF)\n else if (code >= 0xe000 && code <= 0xf8ff) {\n disallowed.push(`U+${code.toString(16).toUpperCase().padStart(4, '0')} (PRIVATE USE)`);\n }\n // Check for specials block (0xFFF0-0xFFFF)\n else if (code >= 0xfff0 && code <= 0xffff) {\n disallowed.push(`U+${code.toString(16).toUpperCase().padStart(4, '0')} (SPECIALS)`);\n }\n\n // Check for non-ASCII (PKG-012 usage)\n if (code > 0x7f) {\n hasNonASCII = true;\n }\n\n // Check for whitespace\n if (code === 0x20 || code === 0x09 || code === 0x0a || code === 0x0d) {\n hasSpaces = true;\n }\n }\n\n // Check if filename ends with period\n if (filename.endsWith('.')) {\n pushMessage(messages, {\n id: MessageId.PKG_011,\n message: `Filename must not end with a period: \"${path}\"`,\n location: { path },\n });\n }\n\n // Report disallowed characters (PKG-009)\n if (disallowed.length > 0) {\n pushMessage(messages, {\n id: MessageId.PKG_009,\n message: `Filename \"${path}\" contains disallowed characters: ${disallowed.join(', ')}`,\n location: { path },\n });\n }\n\n // Report whitespace (PKG-010 - warning)\n if (hasSpaces) {\n pushMessage(messages, {\n id: MessageId.PKG_010,\n message: `Filename \"${path}\" contains spaces`,\n location: { path },\n severityOverride: 'warning',\n });\n }\n\n // Report non-ASCII characters (PKG-012 - usage)\n if (hasNonASCII && disallowed.length === 0) {\n pushMessage(messages, {\n id: MessageId.PKG_012,\n message: `Filename \"${path}\" contains non-ASCII characters`,\n location: { path },\n });\n }\n }\n }\n\n /**\n * Check for duplicate filenames after Unicode normalization and case folding\n *\n * Per EPUB spec, filenames must be unique after applying:\n * - Unicode Canonical Case Fold Normalization (NFD + case folding)\n *\n * OPF-060: Duplicate filename after normalization\n */\n private validateDuplicateFilenames(zip: ZipReader, messages: ValidationMessage[]): void {\n const seenPaths = new Set<string>(); // exact paths\n const normalizedPaths = new Map<string, string>(); // normalized -> original\n\n for (const path of zip.paths) {\n // Skip directory entries\n if (path.endsWith('/')) continue;\n\n // First check for exact duplicate ZIP entries\n if (seenPaths.has(path)) {\n pushMessage(messages, {\n id: MessageId.OPF_060,\n message: `Duplicate ZIP entry: \"${path}\"`,\n location: { path },\n });\n continue;\n }\n seenPaths.add(path);\n\n // Apply Unicode Canonical Case Fold Normalization:\n // 1. NFD (Canonical Decomposition)\n // 2. Case folding (using full Unicode case folding)\n const normalized = this.canonicalCaseFold(path);\n\n const existing = normalizedPaths.get(normalized);\n if (existing !== undefined) {\n pushMessage(messages, {\n id: MessageId.OPF_060,\n message: `Duplicate filename after Unicode normalization: \"${path}\" conflicts with \"${existing}\"`,\n location: { path },\n });\n } else {\n normalizedPaths.set(normalized, path);\n }\n }\n }\n\n /**\n * Apply Unicode Canonical Case Fold Normalization\n *\n * This applies:\n * 1. NFD (Canonical Decomposition) - decomposes combined characters\n * 2. Full Unicode case folding\n *\n * Based on Unicode case folding rules for filename comparison.\n */\n private canonicalCaseFold(str: string): string {\n // NFD normalization first\n let result = str.normalize('NFD');\n\n // Apply full Unicode case folding\n // This handles special cases like ß -> ss, fi -> fi, etc.\n result = this.unicodeCaseFold(result);\n\n return result;\n }\n\n /**\n * Perform Unicode full case folding\n *\n * Handles special Unicode case folding rules beyond simple toLowerCase:\n * - ß (U+00DF) -> ss\n * - ẞ (U+1E9E) -> ss (capital sharp s)\n * - fi (U+FB01) -> fi\n * - fl (U+FB02) -> fl\n * - ff (U+FB00) -> ff\n * - ffi (U+FB03) -> ffi\n * - ffl (U+FB04) -> ffl\n * - ſt (U+FB05) -> st\n * - st (U+FB06) -> st\n * And other Unicode case folding rules\n */\n private unicodeCaseFold(str: string): string {\n // Common full case folding mappings that toLowerCase doesn't handle\n const caseFoldMap: Record<string, string> = {\n '\\u00DF': 'ss', // ß -> ss\n '\\u1E9E': 'ss', // ẞ -> ss (capital sharp s)\n '\\uFB00': 'ff', // ff -> ff\n '\\uFB01': 'fi', // fi -> fi\n '\\uFB02': 'fl', // fl -> fl\n '\\uFB03': 'ffi', // ffi -> ffi\n '\\uFB04': 'ffl', // ffl -> ffl\n '\\uFB05': 'st', // ſt -> st\n '\\uFB06': 'st', // st -> st\n '\\u0130': 'i\\u0307', // İ -> i + combining dot above\n };\n\n let result = '';\n for (const char of str) {\n const folded = caseFoldMap[char];\n if (folded !== undefined) {\n result += folded;\n } else {\n result += char.toLowerCase();\n }\n }\n return result;\n }\n\n /**\n * Validate that filenames are encoded as UTF-8\n *\n * PKG-027: Filenames in EPUB ZIP archives must be UTF-8 encoded\n */\n private validateUtf8Filenames(zip: ZipReader, messages: ValidationMessage[]): void {\n const invalidFilenames = zip.getInvalidUtf8Filenames();\n for (const { filename, reason } of invalidFilenames) {\n pushMessage(messages, {\n id: MessageId.PKG_027,\n message: `Filename is not valid UTF-8: \"${filename}\" (${reason})`,\n location: { path: filename },\n });\n }\n }\n\n /**\n * Parse encryption.xml to extract obfuscated resource paths.\n * Stores IDPF font obfuscation URIs in context for PKG-026 validation.\n */\n private parseEncryption(zip: ZipReader, context: ValidationContext): void {\n const encryptionPath = 'META-INF/encryption.xml';\n if (!zip.has(encryptionPath)) return;\n\n const content = zip.readText(encryptionPath);\n if (!content) return;\n\n const IDPF_OBFUSCATION = 'http://www.idpf.org/2008/embedding';\n const obfuscated = new Set<string>();\n\n // Match EncryptedData blocks (with or without namespace prefix)\n const blocks = content.matchAll(\n /<(?:\\w+:)?EncryptedData[\\s>][\\s\\S]*?<\\/(?:\\w+:)?EncryptedData>/g,\n );\n for (const block of blocks) {\n const xml = block[0];\n const algorithmMatch = /Algorithm=[\"']([^\"']+)[\"']/.exec(xml);\n const uriMatch = /<(?:\\w+:)?CipherReference[^>]+URI=[\"']([^\"']+)[\"']/.exec(xml);\n if (algorithmMatch?.[1] === IDPF_OBFUSCATION && uriMatch?.[1]) {\n obfuscated.add(uriMatch[1]);\n }\n }\n\n if (obfuscated.size > 0) {\n context.obfuscatedResources = obfuscated;\n }\n }\n\n /**\n * Validate empty directories\n */\n private validateEmptyDirectories(zip: ZipReader, messages: ValidationMessage[]): void {\n const directories = new Set<string>();\n\n for (const path of zip.paths) {\n const parts = path.split('/');\n for (let i = 1; i < parts.length; i++) {\n const dir = parts.slice(0, i).join('/') + '/';\n directories.add(dir);\n }\n }\n\n for (const dir of directories) {\n if (dir !== 'META-INF/' && dir !== 'OEBPS/' && dir !== 'OPS/') {\n const filesInDir = zip.paths.filter((p) => p.startsWith(dir) && p !== dir);\n if (filesInDir.length === 0) {\n pushMessage(messages, {\n id: MessageId.PKG_014,\n message: `Empty directory found: ${dir}`,\n location: { path: dir },\n });\n }\n }\n }\n }\n}\n","import type { EPUBVersion } from '../types.js';\nimport type {\n Collection,\n DCElement,\n GuideReference,\n LinkElement,\n ManifestItem,\n MetaElement,\n PackageDocument,\n SpineItemRef,\n} from './types.js';\n\n/**\n * Parse an OPF package document from XML string\n *\n * This is a simple parser that extracts the essential information.\n * For full schema validation, use libxml2-wasm with RelaxNG/Schematron.\n */\nexport function parseOPF(xml: string): PackageDocument {\n // Extract package element attributes\n const packageRegex =\n /<package[^>]*\\sversion=[\"']([^\"']+)[\"'][^>]*(?:\\sunique-identifier=[\"']([^\"']+)[\"'])?[^>]*>/;\n const packageRegexAlt =\n /<package[^>]*\\sunique-identifier=[\"']([^\"']+)[\"'][^>]*(?:\\sversion=[\"']([^\"']+)[\"'])?[^>]*>/;\n const packageMatch = packageRegex.exec(xml);\n const packageMatchAlt = packageRegexAlt.exec(xml);\n\n let version: EPUBVersion = '3.0';\n let uniqueIdentifier = '';\n\n if (packageMatch?.[1]) {\n version = normalizeVersion(packageMatch[1]);\n uniqueIdentifier = packageMatch[2] ?? '';\n }\n if (!uniqueIdentifier && packageMatchAlt?.[1]) {\n uniqueIdentifier = packageMatchAlt[1];\n if (!packageMatch) {\n version = normalizeVersion(packageMatchAlt[2] ?? '3.0');\n }\n }\n\n // Extract prefix declarations (EPUB 3)\n const prefixes = parsePrefixes(xml);\n\n // Extract dir attribute\n const dirRegex = /<package[^>]*\\sdir=[\"']([^\"']+)[\"']/;\n const dirMatch = dirRegex.exec(xml);\n\n // Parse metadata\n const metadataSection = extractSection(xml, 'metadata');\n const dcElements = parseDCElements(metadataSection);\n const metaElements = parseMetaElements(metadataSection);\n const linkElements = parseLinkElements(metadataSection);\n\n // Parse manifest\n const manifestSection = extractSection(xml, 'manifest');\n const manifest = parseManifestItems(manifestSection);\n\n // Parse spine\n const spineSection = extractSection(xml, 'spine');\n const spineAttrs = extractElementAttributes(xml, 'spine');\n const spineResult = parseSpine(spineSection, spineAttrs);\n\n // Parse guide (EPUB 2)\n const guideSection = extractSection(xml, 'guide');\n const guide = parseGuide(guideSection);\n\n // Parse collections (EPUB 3)\n const collections = parseCollections(xml);\n\n // Detect bindings element (deprecated in EPUB 3.3)\n const hasBindings = /<bindings[\\s>]/.test(xml);\n\n // Extract xml:lang attributes from OPF elements\n const xmlLangs: string[] = [];\n const xmlLangRegex = /xml:lang=[\"']([^\"']*?)[\"']/g;\n let langMatch;\n while ((langMatch = xmlLangRegex.exec(xml)) !== null) {\n if (langMatch[1] !== undefined) {\n xmlLangs.push(langMatch[1]);\n }\n }\n\n // Build result with proper optional property handling\n const result: PackageDocument = {\n version,\n uniqueIdentifier,\n dcElements,\n metaElements,\n linkElements,\n manifest,\n spine: spineResult.spine,\n guide,\n collections,\n };\n\n // Only add optional properties if they have values\n if (Object.keys(prefixes).length > 0) {\n result.prefixes = prefixes;\n }\n if (dirMatch?.[1]) {\n result.dir = dirMatch[1];\n }\n if (spineResult.toc) {\n result.spineToc = spineResult.toc;\n }\n if (spineResult.pageProgressionDirection) {\n result.pageProgressionDirection = spineResult.pageProgressionDirection;\n }\n if (hasBindings) {\n result.hasBindings = true;\n }\n if (xmlLangs.length > 0) {\n result.xmlLangs = xmlLangs;\n }\n\n return result;\n}\n\n/**\n * Normalize EPUB version string to supported version\n */\nfunction normalizeVersion(versionStr: string): EPUBVersion {\n const v = versionStr.trim();\n if (v === '2.0' || v === '2') return '2.0';\n if (v === '3.0' || v === '3') return '3.0';\n if (v === '3.1') return '3.1';\n if (v === '3.2') return '3.2';\n if (v === '3.3') return '3.3';\n // Default to 3.0 for unknown versions\n return '3.0';\n}\n\n/**\n * Parse prefix declarations from package element\n */\nfunction parsePrefixes(xml: string): Record<string, string> {\n const prefixes: Record<string, string> = {};\n const prefixRegex = /<package[^>]*\\sprefix=[\"']([^\"']+)[\"']/;\n const prefixMatch = prefixRegex.exec(xml);\n if (prefixMatch?.[1]) {\n const prefixStr = prefixMatch[1];\n // Format: \"prefix: uri prefix2: uri2\"\n const parts = prefixStr.split(/\\s+/);\n for (let i = 0; i < parts.length - 1; i += 2) {\n const prefix = parts[i]?.replace(/:$/, '');\n const uri = parts[i + 1];\n if (prefix && uri) {\n prefixes[prefix] = uri;\n }\n }\n }\n return prefixes;\n}\n\n/**\n * Strip XML comments from a string\n */\nfunction stripXmlComments(xml: string): string {\n return xml.replace(/<!--[\\s\\S]*?-->/g, '');\n}\n\n/**\n * Extract a section from XML by tag name (returns content between tags)\n */\nfunction extractSection(xml: string, tagName: string): string {\n // Handle both prefixed and non-prefixed tags\n const regex = new RegExp(`<(?:opf:)?${tagName}[^>]*>([\\\\s\\\\S]*?)</(?:opf:)?${tagName}>`, 'i');\n const match = regex.exec(xml);\n // Strip XML comments to avoid parsing commented-out elements\n return stripXmlComments(match?.[1] ?? '');\n}\n\n/**\n * Extract an element's opening tag attributes\n */\nfunction extractElementAttributes(xml: string, tagName: string): Record<string, string> {\n // Match the opening tag with its attributes\n const regex = new RegExp(`<(?:opf:)?${tagName}([^>]*)>`, 'i');\n const match = regex.exec(xml);\n if (match?.[1]) {\n return parseAttributes(match[1]);\n }\n return {};\n}\n\n/**\n * Parse Dublin Core metadata elements\n */\nfunction parseDCElements(metadataXml: string): DCElement[] {\n const elements: DCElement[] = [];\n\n // Match dc: prefixed elements\n const dcRegex = /<dc:(\\w+)([^>]*)>([^<]*)<\\/dc:\\1>/g;\n let match;\n while ((match = dcRegex.exec(metadataXml)) !== null) {\n const name = match[1];\n const attrsStr = match[2] ?? '';\n const value = match[3] ?? '';\n\n if (!name) continue;\n\n const attrs = parseAttributes(attrsStr);\n const id = attrs.id;\n delete attrs.id;\n\n const element: DCElement = {\n name,\n value: decodeXmlEntities(value.trim()),\n };\n\n if (id) {\n element.id = id.trim();\n }\n if (Object.keys(attrs).length > 0) {\n element.attributes = attrs;\n }\n\n elements.push(element);\n }\n\n return elements;\n}\n\n/**\n * Parse EPUB 3 meta elements\n */\nfunction parseMetaElements(metadataXml: string): MetaElement[] {\n const elements: MetaElement[] = [];\n\n // Match <meta property=\"...\">value</meta> (EPUB 3)\n const metaRegex = /<meta([^>]*property=[\"'][^\"']+[\"'][^>]*)>([^<]*)<\\/meta>/g;\n let match;\n while ((match = metaRegex.exec(metadataXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const value = match[2] ?? '';\n const attrs = parseAttributes(attrsStr);\n const property = attrs.property;\n\n if (property) {\n const element: MetaElement = {\n property,\n value: decodeXmlEntities(value.trim()),\n };\n\n if (attrs.refines) {\n element.refines = attrs.refines;\n }\n if (attrs.scheme) {\n element.scheme = attrs.scheme;\n }\n if (attrs.id) {\n element.id = attrs.id.trim();\n }\n\n elements.push(element);\n }\n }\n\n return elements;\n}\n\n/**\n * Parse EPUB 3 link elements\n */\nfunction parseLinkElements(metadataXml: string): LinkElement[] {\n const elements: LinkElement[] = [];\n\n // Match <link rel=\"...\" href=\"...\" />\n const linkRegex = /<link([^>]+)\\/?\\s*>/g;\n let match;\n while ((match = linkRegex.exec(metadataXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const attrs = parseAttributes(attrsStr);\n const rel = attrs.rel;\n const href = attrs.href;\n\n if (rel && href) {\n const element: LinkElement = {\n rel,\n href,\n };\n\n if (attrs['media-type']) {\n element.mediaType = attrs['media-type'];\n }\n if (attrs.refines) {\n element.refines = attrs.refines;\n }\n if (attrs.properties) {\n element.properties = attrs.properties.split(/\\s+/);\n }\n if (attrs.id) {\n element.id = attrs.id.trim();\n }\n if (attrs.hreflang !== undefined) {\n element.hreflang = attrs.hreflang;\n }\n\n elements.push(element);\n }\n }\n\n return elements;\n}\n\n/**\n * Parse manifest items\n */\nfunction parseManifestItems(manifestXml: string): ManifestItem[] {\n const items: ManifestItem[] = [];\n\n // Match <item ... />\n const itemRegex = /<item([^>]+)\\/?\\s*>/g;\n let match;\n while ((match = itemRegex.exec(manifestXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const attrs = parseAttributes(attrsStr);\n const id = attrs.id?.trim();\n const href = attrs.href;\n const mediaType = attrs['media-type'];\n\n if (id && href && mediaType) {\n const item: ManifestItem = {\n id,\n href: decodeXmlEntities(href),\n mediaType,\n };\n\n if (attrs.fallback) {\n item.fallback = attrs.fallback;\n }\n if (attrs['media-overlay']) {\n item.mediaOverlay = attrs['media-overlay'];\n }\n if (attrs.properties) {\n item.properties = attrs.properties.split(/\\s+/);\n }\n\n items.push(item);\n }\n }\n\n return items;\n}\n\n/**\n * Parse spine element and itemrefs\n */\nfunction parseSpine(\n spineXml: string,\n spineAttrs: Record<string, string>,\n): {\n spine: SpineItemRef[];\n toc: string | null;\n pageProgressionDirection: 'ltr' | 'rtl' | 'default' | null;\n} {\n const spine: SpineItemRef[] = [];\n\n // Use the passed-in attributes from the spine element\n const toc = spineAttrs.toc ?? null;\n const ppdRaw = spineAttrs['page-progression-direction'];\n const ppd: 'ltr' | 'rtl' | 'default' | null =\n ppdRaw === 'ltr' || ppdRaw === 'rtl' || ppdRaw === 'default' ? ppdRaw : null;\n\n // Match <itemref ... />\n const itemrefRegex = /<itemref([^>]+)\\/?\\s*>/g;\n let match;\n while ((match = itemrefRegex.exec(spineXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const attrs = parseAttributes(attrsStr);\n const idref = attrs.idref?.trim();\n\n if (idref) {\n const itemref: SpineItemRef = {\n idref,\n linear: attrs.linear !== 'no',\n };\n\n if (attrs.properties) {\n itemref.properties = attrs.properties.split(/\\s+/);\n }\n\n spine.push(itemref);\n }\n }\n\n return { spine, toc, pageProgressionDirection: ppd };\n}\n\n/**\n * Parse guide references (EPUB 2)\n */\nfunction parseGuide(guideXml: string): GuideReference[] {\n const references: GuideReference[] = [];\n\n // Match <reference ... />\n const refRegex = /<reference([^>]+)\\/?\\s*>/g;\n let match;\n while ((match = refRegex.exec(guideXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const attrs = parseAttributes(attrsStr);\n const type = attrs.type;\n const href = attrs.href;\n\n if (type && href) {\n const ref: GuideReference = {\n type,\n href: decodeXmlEntities(href),\n };\n\n if (attrs.title) {\n ref.title = attrs.title;\n }\n\n references.push(ref);\n }\n }\n\n return references;\n}\n\n/**\n * Parse XML attributes from a string\n */\nfunction parseAttributes(attrsStr: string): Record<string, string> {\n const attrs: Record<string, string> = {};\n const attrRegex = /(\\S+)=[\"']([^\"']*)[\"']/g;\n let match;\n while ((match = attrRegex.exec(attrsStr)) !== null) {\n const name = match[1];\n const value = match[2];\n if (name !== undefined && value !== undefined) {\n // Remove namespace prefix for common attributes\n const colonIdx = name.indexOf(':');\n const localName = colonIdx >= 0 ? name.slice(colonIdx + 1) : name;\n attrs[localName] = value;\n }\n }\n return attrs;\n}\n\n/**\n * Decode common XML entities\n */\nfunction decodeXmlEntities(str: string): string {\n return str\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n .replace(/'/g, \"'\")\n .replace(/"/g, '\"');\n}\n\nfunction parseCollections(xml: string): Collection[] {\n const collections: Collection[] = [];\n const collectionRegex = /<collection[^>]*\\srole=[\"']([^\"']+)[\"'][^>]*>/g;\n let collectionMatch: RegExpExecArray | null;\n\n while ((collectionMatch = collectionRegex.exec(xml)) !== null) {\n const role = collectionMatch[1];\n if (!role) continue;\n\n const collectionStart = collectionMatch.index;\n const collectionStartTag = collectionMatch[0];\n\n const idMatch = /id=[\"']([^\"']+)[\"']/.exec(collectionStartTag);\n const id = idMatch?.[1];\n\n const nameMatch = /name=[\"']([^\"']+)[\"']/.exec(collectionStartTag);\n const name = nameMatch?.[1];\n\n const links: string[] = [];\n\n const linkRegex = /<link[^>]*\\shref=[\"']([^\"']+)[\"'][^>]*\\/?>/g;\n const closingTag = `</collection>`;\n const closingIndex = xml.indexOf(closingTag, collectionStart);\n const collectionEnd = closingIndex >= 0 ? closingIndex + closingTag.length : xml.length;\n\n const collectionXml = xml.slice(collectionStart, collectionEnd);\n\n let linkMatch: RegExpExecArray | null;\n while ((linkMatch = linkRegex.exec(collectionXml)) !== null) {\n const href = linkMatch[1];\n if (href) {\n links.push(decodeXmlEntities(href));\n }\n }\n\n const collection: Collection = {\n role,\n links,\n };\n if (id) collection.id = id;\n if (name) collection.name = name;\n\n collections.push(collection);\n }\n\n return collections;\n}\n","import { MessageId, pushMessage } from '../messages/index.js';\nimport type { ValidationContext } from '../types.js';\nimport { parseOPF } from './parser.js';\nimport type { ManifestItem, PackageDocument } from './types.js';\nimport { ITEM_PROPERTIES, LINK_PROPERTIES, SPINE_PROPERTIES } from './types.js';\n\n/**\n * Validates the OPF (Open Packaging Format) package document\n *\n * This includes:\n * - Package metadata validation\n * - Manifest item validation\n * - Spine validation\n * - Fallback chain validation\n * - Guide validation (EPUB 2)\n */\nexport class OPFValidator {\n private packageDoc: PackageDocument | null = null;\n private manifestById = new Map<string, ManifestItem>();\n private manifestByHref = new Map<string, ManifestItem>();\n\n /**\n * Validate the OPF package document\n */\n validate(context: ValidationContext): void {\n const opfPath = context.opfPath;\n if (!opfPath) {\n pushMessage(context.messages, {\n id: MessageId.OPF_002,\n message: 'No package document (OPF) path found in container.xml',\n });\n return;\n }\n\n // Read OPF content\n const opfData = context.files.get(opfPath);\n if (!opfData) {\n pushMessage(context.messages, {\n id: MessageId.OPF_002,\n message: `Package document not found: ${opfPath}`,\n location: { path: opfPath },\n });\n return;\n }\n\n const opfXml = new TextDecoder().decode(opfData);\n\n // Parse OPF\n try {\n this.packageDoc = parseOPF(opfXml);\n } catch (error) {\n pushMessage(context.messages, {\n id: MessageId.OPF_002,\n message: `Failed to parse package document: ${error instanceof Error ? error.message : 'Unknown error'}`,\n location: { path: opfPath },\n });\n return;\n }\n\n // Update context with detected version\n context.version = this.packageDoc.version;\n\n // Build lookup maps\n this.buildManifestMaps();\n\n // Store package doc in context for other validators\n context.packageDocument = this.packageDoc;\n\n // Run validations\n this.validatePackageAttributes(context, opfPath);\n this.validateMetadata(context, opfPath);\n this.validateLinkElements(context, opfPath);\n this.validateManifest(context, opfPath);\n this.validateSpine(context, opfPath);\n this.validateFallbackChains(context, opfPath);\n\n if (this.packageDoc.version === '2.0') {\n this.validateGuide(context, opfPath);\n }\n\n if (this.packageDoc.version.startsWith('3.')) {\n this.validateCollections(context, opfPath);\n\n // RSC-017: bindings element is deprecated\n if (this.packageDoc.hasBindings) {\n pushMessage(context.messages, {\n id: MessageId.RSC_017,\n message: 'Use of the bindings element is deprecated',\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-092: Validate xml:lang attributes in OPF\n if (this.packageDoc.xmlLangs) {\n for (const lang of this.packageDoc.xmlLangs) {\n if (lang === '') continue;\n if (lang !== lang.trim()) {\n pushMessage(context.messages, {\n id: MessageId.OPF_092,\n message: `Language tag \"${lang}\" is not well-formed`,\n location: { path: opfPath },\n });\n } else if (!isValidLanguageTag(lang)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_092,\n message: `Language tag \"${lang}\" is not well-formed`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n\n /**\n * Build lookup maps for manifest items\n */\n private buildManifestMaps(): void {\n if (!this.packageDoc) return;\n\n for (const item of this.packageDoc.manifest) {\n this.manifestById.set(item.id, item);\n\n // Check for duplicates\n if (this.manifestByHref.has(item.href)) {\n // Will be reported in validateManifest\n }\n this.manifestByHref.set(item.href, item);\n }\n }\n\n /**\n * Validate package element attributes\n */\n private validatePackageAttributes(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n const validVersions = new Set(['2.0', '3.0', '3.1', '3.2', '3.3']);\n if (!validVersions.has(this.packageDoc.version)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_001,\n message: `Invalid package version \"${this.packageDoc.version}\"; must be one of: ${Array.from(validVersions).join(', ')}`,\n location: { path: opfPath },\n });\n }\n\n // Check unique-identifier\n if (!this.packageDoc.uniqueIdentifier) {\n pushMessage(context.messages, {\n id: MessageId.OPF_048,\n message: 'Package element is missing required unique-identifier attribute',\n location: { path: opfPath },\n });\n } else {\n // Verify the referenced identifier exists and points to dc:identifier\n const refId = this.packageDoc.uniqueIdentifier;\n const matchingDc = this.packageDoc.dcElements.find(\n (dc) => dc.name === 'identifier' && dc.id === refId,\n );\n if (!matchingDc) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `package element unique-identifier attribute does not resolve to a dc:identifier element (given reference was \"${refId}\")`,\n location: { path: opfPath },\n });\n pushMessage(context.messages, {\n id: MessageId.OPF_030,\n message: `unique-identifier \"${refId}\" does not reference an existing dc:identifier`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n /**\n * Validate metadata section\n */\n private validateMetadata(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n const dcElements = this.packageDoc.dcElements;\n\n if (dcElements.length === 0 && this.packageDoc.metaElements.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.OPF_072,\n message: 'Metadata section is empty',\n location: { path: opfPath },\n });\n return;\n }\n\n // Check required elements\n const hasIdentifier = dcElements.some((dc) => dc.name === 'identifier');\n const hasTitle = dcElements.some((dc) => dc.name === 'title');\n const hasLanguage = dcElements.some((dc) => dc.name === 'language');\n\n if (!hasIdentifier) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'Metadata must include at least one dc:identifier element',\n location: { path: opfPath },\n });\n }\n\n if (!hasTitle) {\n pushMessage(context.messages, {\n id: MessageId.OPF_016,\n message: 'Metadata must include at least one dc:title element',\n location: { path: opfPath },\n });\n }\n\n if (!hasLanguage) {\n pushMessage(context.messages, {\n id: MessageId.OPF_017,\n message: 'Metadata must include at least one dc:language element',\n location: { path: opfPath },\n });\n }\n\n // Validate dc:language format\n for (const dc of dcElements) {\n if (dc.name === 'language' && dc.value) {\n if (!isValidLanguageTag(dc.value)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_092,\n message: `Invalid language tag: \"${dc.value}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // Validate dc:date format (OPF-053)\n if (dc.name === 'date' && dc.value) {\n if (!isValidW3CDateFormat(dc.value)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_053,\n message: `Invalid date format \"${dc.value}\"; must be W3C date format (ISO 8601)`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-085: Validate UUID format for dc:identifier starting with urn:uuid:\n if (dc.name === 'identifier' && dc.value) {\n const val = dc.value.trim();\n if (val.startsWith('urn:uuid:')) {\n const uuid = val.substring(9);\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(uuid)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_085,\n message: `Invalid UUID value \"${uuid}\"`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n // OPF-052: Validate dc:creator with opf:role attribute\n if (dc.name === 'creator' && dc.attributes) {\n const opfRole = dc.attributes['opf:role'];\n if (opfRole?.startsWith('marc:')) {\n const relatorCode = opfRole.substring(5);\n const validRelatorCodes = new Set([\n 'arr',\n 'aut',\n 'aut',\n 'ccp',\n 'com',\n 'ctb',\n 'csl',\n 'edt',\n 'ill',\n 'itr',\n 'pbl',\n 'pdr',\n 'prt',\n 'trl',\n 'cre',\n 'art',\n 'ctb',\n 'edt',\n 'pfr',\n 'red',\n 'rev',\n 'spn',\n 'dsx',\n 'pmc',\n 'dte',\n 'ove',\n 'trc',\n 'ldr',\n 'led',\n 'prg',\n 'rap',\n 'rce',\n 'rpc',\n 'rtr',\n 'sad',\n 'sgn',\n 'tce',\n 'aac',\n 'acq',\n 'ant',\n 'arr',\n 'art',\n 'ard',\n 'asg',\n 'aus',\n 'aft',\n 'bdd',\n 'bdd',\n 'clb',\n 'clc',\n 'drd',\n 'edt',\n 'edt',\n 'fmd',\n 'flm',\n 'fmo',\n 'fpy',\n 'hnr',\n 'ill',\n 'ilt',\n 'img',\n 'itr',\n 'lrg',\n 'lsa',\n 'led',\n 'lee',\n 'lel',\n 'lgd',\n 'lse',\n 'mfr',\n 'mod',\n 'mon',\n 'mus',\n 'nrt',\n 'ogt',\n 'org',\n 'oth',\n 'pnt',\n 'ppa',\n 'prv',\n 'pup',\n 'red',\n 'rev',\n 'rsg',\n 'srv',\n 'stn',\n 'stl',\n 'trc',\n 'typ',\n 'vdg',\n 'voc',\n 'wac',\n 'wdc',\n ]);\n if (!validRelatorCodes.has(relatorCode)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_052,\n message: `Unknown MARC relator code \"${relatorCode}\" in dc:creator`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n\n // EPUB 3: Validate meta element property and scheme attributes\n if (this.packageDoc.version !== '2.0') {\n for (const meta of this.packageDoc.metaElements) {\n // OPF-025: property/scheme must not be a whitespace-separated list\n if (meta.property && /\\s/.test(meta.property.trim())) {\n pushMessage(context.messages, {\n id: MessageId.OPF_025,\n message: `Property value must be a single value, not a list: \"${meta.property}\"`,\n location: { path: opfPath },\n });\n }\n if (meta.scheme && /\\s/.test(meta.scheme.trim())) {\n pushMessage(context.messages, {\n id: MessageId.OPF_025,\n message: `Scheme value must be a single value, not a list: \"${meta.scheme}\"`,\n location: { path: opfPath },\n });\n }\n\n // OPF-026: property name must be well-formed (valid prefix:localname)\n if (meta.property && !/\\s/.test(meta.property.trim())) {\n const prop = meta.property.trim();\n if (prop.includes(':') && /:\\s*$/.test(prop)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_026,\n message: `Malformed property name: \"${prop}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-027: scheme must be a known value or use a prefix\n if (meta.scheme) {\n const scheme = meta.scheme.trim();\n if (scheme && !scheme.includes(':')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_027,\n message: `Undefined property: \"${scheme}\"`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n\n // EPUB 3: Validate refines attributes\n if (this.packageDoc.version !== '2.0') {\n // Collect all IDs from the OPF document\n const allIds = new Set<string>();\n for (const dc of dcElements) {\n if (dc.id) allIds.add(dc.id);\n }\n for (const meta of this.packageDoc.metaElements) {\n if (meta.id) allIds.add(meta.id);\n }\n for (const link of this.packageDoc.linkElements) {\n if (link.id) allIds.add(link.id);\n }\n for (const item of this.packageDoc.manifest) {\n allIds.add(item.id);\n }\n\n // Check for duplicate IDs across all elements\n const seenGlobalIds = new Set<string>();\n const allIdSources: { id: string; normalized: string }[] = [];\n for (const dc of dcElements) {\n if (dc.id) allIdSources.push({ id: dc.id, normalized: dc.id.trim() });\n }\n for (const meta of this.packageDoc.metaElements) {\n if (meta.id) allIdSources.push({ id: meta.id, normalized: meta.id.trim() });\n }\n for (const link of this.packageDoc.linkElements) {\n if (link.id) allIdSources.push({ id: link.id, normalized: link.id.trim() });\n }\n for (const item of this.packageDoc.manifest) {\n allIdSources.push({ id: item.id, normalized: item.id.trim() });\n }\n for (const src of allIdSources) {\n if (seenGlobalIds.has(src.normalized)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Duplicate \"${src.normalized}\"`,\n location: { path: opfPath },\n });\n }\n seenGlobalIds.add(src.normalized);\n }\n\n for (const meta of this.packageDoc.metaElements) {\n if (!meta.refines) continue;\n\n const refines = meta.refines;\n\n // RSC-005: refines must be a relative URL (not absolute)\n if (/^[a-zA-Z][a-zA-Z0-9+\\-.]*:/.test(refines)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: '@refines must be a relative URL',\n location: { path: opfPath },\n });\n continue;\n }\n\n // RSC-017: refines should use a fragment ID (start with #)\n if (!refines.startsWith('#')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_017,\n message: `@refines should instead refer to \"${refines}\" using a fragment identifier pointing to its manifest item`,\n location: { path: opfPath },\n });\n continue;\n }\n\n // RSC-005: refines fragment must target an existing ID\n const targetId = refines.substring(1);\n if (!allIds.has(targetId)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `@refines missing target id: \"${targetId}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-065: Detect refines cycles\n this.detectRefinesCycles(context, opfPath);\n }\n\n // EPUB 3: Check for dcterms:modified meta\n if (this.packageDoc.version !== '2.0') {\n const modifiedMetas = this.packageDoc.metaElements.filter(\n (meta) => meta.property === 'dcterms:modified',\n );\n const modifiedMeta = modifiedMetas[0];\n if (modifiedMetas.length > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'package dcterms:modified meta element must occur exactly once',\n location: { path: opfPath },\n });\n }\n if (!modifiedMeta) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'package dcterms:modified meta element must occur exactly once',\n location: { path: opfPath },\n });\n pushMessage(context.messages, {\n id: MessageId.OPF_054,\n message: 'EPUB 3 metadata must include a dcterms:modified meta element',\n location: { path: opfPath },\n });\n } else if (modifiedMeta.value) {\n // Check for strict CCYY-MM-DDThh:mm:ssZ format (Schematron check)\n const strictModifiedPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$/;\n if (!strictModifiedPattern.test(modifiedMeta.value.trim())) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `dcterms:modified illegal syntax (expecting: \"CCYY-MM-DDThh:mm:ssZ\")`,\n location: { path: opfPath },\n });\n }\n if (!isValidW3CDateFormat(modifiedMeta.value)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_054,\n message: `Invalid dcterms:modified date format \"${modifiedMeta.value}\"; must be W3C date format (ISO 8601)`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n\n /**\n * Validate EPUB 3 link elements in metadata\n */\n private validateLinkElements(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n for (const link of this.packageDoc.linkElements) {\n // OPF-092: Validate hreflang well-formedness\n if (link.hreflang !== undefined && link.hreflang !== '') {\n const lang = link.hreflang;\n if (lang !== lang.trim()) {\n pushMessage(context.messages, {\n id: MessageId.OPF_092,\n message: `Language tag must not have leading or trailing whitespace: \"${lang}\"`,\n location: { path: opfPath },\n });\n } else if (!isValidLanguageTag(lang)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_092,\n message: `Invalid language tag: \"${lang}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-027: Validate link properties\n if (link.properties) {\n for (const prop of link.properties) {\n if (!LINK_PROPERTIES.has(prop) && !prop.includes(':')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_027,\n message: `Undefined property: \"${prop}\"`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n const href = link.href;\n const decodedHref = tryDecodeUriComponent(href);\n\n const basePath = href.includes('#') ? href.substring(0, href.indexOf('#')) : href;\n const basePathDecoded = decodedHref.includes('#')\n ? decodedHref.substring(0, decodedHref.indexOf('#'))\n : decodedHref;\n\n if (href.startsWith('#')) {\n // OPF-098: link href must not target an element in the package document\n pushMessage(context.messages, {\n id: MessageId.OPF_098,\n message: `The \"href\" attribute must reference resources, not elements in the package document, but found URL \"${href}\".`,\n location: { path: opfPath },\n });\n continue;\n }\n\n const isRemote = /^[a-zA-Z][a-zA-Z0-9+\\-.]*:/.test(href);\n if (isRemote) {\n continue;\n }\n\n if (!link.mediaType) {\n pushMessage(context.messages, {\n id: MessageId.OPF_093,\n message:\n 'The \"media-type\" attribute is required for linked resources located in the EPUB container',\n location: { path: opfPath },\n });\n }\n\n const resolvedPath = resolvePath(opfDir, basePath);\n const resolvedPathDecoded =\n basePathDecoded !== basePath ? resolvePath(opfDir, basePathDecoded) : resolvedPath;\n\n const fileExists = context.files.has(resolvedPath) || context.files.has(resolvedPathDecoded);\n const inManifest =\n this.manifestByHref.has(basePath) || this.manifestByHref.has(basePathDecoded);\n\n if (!fileExists && !inManifest) {\n pushMessage(context.messages, {\n id: MessageId.RSC_007w,\n message: `Referenced resource \"${resolvedPath}\" could not be found in the EPUB`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n /**\n * Validate manifest section\n */\n private validateManifest(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n const seenIds = new Set<string>();\n const seenHrefs = new Set<string>();\n\n for (const item of this.packageDoc.manifest) {\n // Check for duplicate IDs\n if (seenIds.has(item.id)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_074,\n message: `Duplicate manifest item id: \"${item.id}\"`,\n location: { path: opfPath },\n });\n }\n seenIds.add(item.id);\n\n // Check for duplicate hrefs\n if (seenHrefs.has(item.href)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_074,\n message: `Duplicate manifest item href: \"${item.href}\"`,\n location: { path: opfPath },\n });\n }\n seenHrefs.add(item.href);\n\n // Check for self-referencing manifest item (OPF-099)\n // The manifest must not list the package document itself\n // Note: href may be URL-encoded (e.g., table%20us%202.png) but file paths are not\n const fullPath = resolvePath(opfPath, item.href);\n if (fullPath === opfPath) {\n pushMessage(context.messages, {\n id: MessageId.OPF_099,\n message: 'The manifest must not list the package document',\n location: { path: opfPath },\n });\n }\n\n // Check for URL leaking outside container (RSC-026)\n // Using the same trick as Java EPUBCheck: resolve against two different test bases\n // If the resolved URL doesn't start with both test base paths, it leaks outside the container\n if (!item.href.startsWith('http') && !item.href.startsWith('mailto:')) {\n const leaked = checkUrlLeaking(item.href);\n if (leaked) {\n pushMessage(context.messages, {\n id: MessageId.RSC_026,\n message: `URL \"${item.href}\" leaks outside the container (it is not a valid-relative-ocf-URL-with-fragment string)`,\n location: { path: opfPath },\n });\n }\n }\n\n // Check that referenced file exists (RSC-001 per Java EPUBCheck)\n // Also try URL-decoded version for comparison\n const decodedHref = tryDecodeUriComponent(item.href);\n const fullPathDecoded =\n decodedHref !== item.href ? resolvePath(opfPath, decodedHref).normalize('NFC') : fullPath;\n\n if (\n !context.files.has(fullPath) &&\n !context.files.has(fullPathDecoded) &&\n !item.href.startsWith('http')\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_001,\n message: `Referenced resource \"${item.href}\" could not be found in the EPUB`,\n location: { path: opfPath },\n });\n }\n\n // EPUB 3: Check for publication resources in META-INF\n if (this.packageDoc.version !== '2.0' && fullPath.startsWith('META-INF/')) {\n pushMessage(context.messages, {\n id: MessageId.PKG_025,\n message: `Publication resource must not be located in META-INF: ${item.href}`,\n location: { path: opfPath },\n });\n }\n\n // Validate media type format (RFC4288)\n if (!isValidMimeType(item.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message: `Invalid media-type format \"${item.mediaType}\" for item \"${item.id}\"`,\n location: { path: opfPath },\n });\n }\n\n // Check for deprecated media types (OEB 1.x)\n const deprecatedTypes = new Set<string>([\n 'text/x-oeb1-document',\n 'text/x-oeb1-css',\n 'application/x-oeb1-package',\n 'text/x-oeb1-html',\n ]);\n if (deprecatedTypes.has(item.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_037,\n message: `Found deprecated media-type \"${item.mediaType}\"`,\n location: { path: opfPath },\n });\n }\n\n // EPUB 3: Validate item properties\n if (this.packageDoc.version !== '2.0' && item.properties) {\n for (const prop of item.properties) {\n if (!ITEM_PROPERTIES.has(prop)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_027,\n message: `Undefined property: \"${prop}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // Check nav property requirements\n if (item.properties.includes('nav')) {\n if (item.mediaType !== 'application/xhtml+xml') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The manifest item representing the Navigation Document must be of the \"application/xhtml+xml\" type (given type was \"${item.mediaType}\")`,\n location: { path: opfPath },\n });\n pushMessage(context.messages, {\n id: MessageId.OPF_012,\n message: `Item with \"nav\" property must be XHTML, found: ${item.mediaType}`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-012: cover-image property must only be used on image media types\n if (item.properties.includes('cover-image')) {\n if (!item.mediaType.startsWith('image/')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_012,\n message: `Item with \"cover-image\" property must be an image, found: ${item.mediaType}`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n // RSC-020: Check for unencoded spaces in href\n if (item.href.includes(' ')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_020,\n message: `\"${item.href}\" is not a valid URL (Illegal character in path segment: space is not allowed)`,\n location: { path: opfPath },\n });\n }\n\n // Check for href fragment (EPUB 3)\n if (this.packageDoc.version !== '2.0' && item.href.includes('#')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_091,\n message: `Manifest item href must not contain fragment identifier: \"${item.href}\"`,\n location: { path: opfPath },\n });\n }\n\n // EPUB 3: Check remote resource constraints (RSC-006)\n if (\n this.packageDoc.version !== '2.0' &&\n (item.href.startsWith('http://') || item.href.startsWith('https://'))\n ) {\n const isAllowedRemoteType =\n item.mediaType.startsWith('audio/') ||\n item.mediaType.startsWith('video/') ||\n item.mediaType.startsWith('font/') ||\n item.mediaType === 'application/font-sfnt' ||\n item.mediaType === 'application/font-woff' ||\n item.mediaType === 'application/vnd.ms-opentype';\n\n const inSpine = this.packageDoc.spine.some((s) => s.idref === item.id);\n\n // Spine items that are remote with non-standard types are never allowed\n if (inSpine) {\n if (!isAllowedRemoteType) {\n pushMessage(context.messages, {\n id: MessageId.RSC_006,\n message: `Remote resource reference is not allowed in this context; resource \"${item.href}\" must be located in the EPUB container`,\n location: { path: opfPath },\n });\n }\n if (!item.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_006,\n message: `Manifest item \"${item.id}\" references remote resource but is missing \"remote-resources\" property`,\n location: { path: opfPath },\n });\n }\n }\n\n // Non-spine remote items with non-standard types are checked later\n // by the reference validator (which has content reference context)\n }\n }\n\n // EPUB 3: Check nav and cover-image property counts\n if (this.packageDoc.version !== '2.0') {\n const navItems = this.packageDoc.manifest.filter((item) => item.properties?.includes('nav'));\n if (navItems.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Exactly one manifest item must declare the \"nav\" property',\n location: { path: opfPath },\n });\n } else if (navItems.length > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Exactly one manifest item must declare the \"nav\" property (number of \"nav\" items: ${String(navItems.length)}).`,\n location: { path: opfPath },\n });\n }\n\n const coverItems = this.packageDoc.manifest.filter((item) =>\n item.properties?.includes('cover-image'),\n );\n if (coverItems.length > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Multiple occurrences of the \"cover-image\" property (number of \"cover-image\" items: ${String(coverItems.length)}).`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n /**\n * Validate spine section\n */\n private validateSpine(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n // Check that spine has items\n if (this.packageDoc.spine.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.OPF_033,\n message: 'Spine must contain at least one itemref',\n location: { path: opfPath },\n });\n return;\n }\n\n // Check for at least one linear item\n const hasLinear = this.packageDoc.spine.some((ref) => ref.linear);\n if (!hasLinear) {\n pushMessage(context.messages, {\n id: MessageId.OPF_033,\n message: 'Spine must contain at least one linear itemref',\n location: { path: opfPath },\n });\n }\n\n // Check for NCX reference (required in EPUB 2, optional in EPUB 3)\n const ncxId = this.packageDoc.spineToc;\n if (this.packageDoc.version === '2.0' && !ncxId) {\n // EPUB 2 requires toc attribute\n pushMessage(context.messages, {\n id: MessageId.OPF_050,\n message: 'EPUB 2 spine should have a toc attribute referencing the NCX',\n location: { path: opfPath },\n });\n } else if (!ncxId && this.packageDoc.version !== '2.0') {\n // EPUB 3: If NCX is in manifest, spine toc attribute must be set\n const hasNcxInManifest = this.packageDoc.manifest.some(\n (item) => item.mediaType === 'application/x-dtbncx+xml',\n );\n if (hasNcxInManifest) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'spine element toc attribute must be set when an NCX is included in the publication',\n location: { path: opfPath },\n });\n }\n } else if (ncxId) {\n // If toc attribute is present (EPUB 2 or 3), validate it points to NCX\n const ncxItem = this.manifestById.get(ncxId);\n if (!ncxItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_049,\n message: `Spine toc attribute references non-existent item: \"${ncxId}\"`,\n location: { path: opfPath },\n });\n } else if (ncxItem.mediaType !== 'application/x-dtbncx+xml') {\n pushMessage(context.messages, {\n id: MessageId.OPF_050,\n message: `Spine toc attribute must reference an NCX document (media-type \"application/x-dtbncx+xml\"), found: \"${ncxItem.mediaType}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n const seenIdrefs = new Set<string>();\n\n for (const itemref of this.packageDoc.spine) {\n // Check that idref references a manifest item\n const item = this.manifestById.get(itemref.idref);\n if (!item) {\n pushMessage(context.messages, {\n id: MessageId.OPF_049,\n message: `Spine itemref references non-existent manifest item: \"${itemref.idref}\"`,\n location: { path: opfPath },\n });\n continue;\n }\n\n // Check for duplicate idrefs (applies to both EPUB 2 and 3)\n if (seenIdrefs.has(itemref.idref)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_034,\n message: `Duplicate spine itemref: \"${itemref.idref}\"`,\n location: { path: opfPath },\n });\n }\n seenIdrefs.add(itemref.idref);\n\n // Check that spine items have appropriate media types\n if (!isSpineMediaType(item.mediaType)) {\n if (!item.fallback) {\n pushMessage(context.messages, {\n id: MessageId.OPF_043,\n message: `Spine item \"${item.id}\" has non-standard media type \"${item.mediaType}\" without fallback`,\n location: { path: opfPath },\n });\n } else if (!this.fallbackChainResolvesToContentDocument(item.id)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_044,\n message: `Spine item \"${item.id}\" has non-standard media type \"${item.mediaType}\" and its fallback chain does not resolve to a content document`,\n location: { path: opfPath },\n });\n }\n }\n\n // EPUB 3: Validate itemref properties\n if (this.packageDoc.version !== '2.0' && itemref.properties) {\n for (const prop of itemref.properties) {\n if (!SPINE_PROPERTIES.has(prop) && !prop.includes(':')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_012,\n message: `Unknown spine itemref property: \"${prop}\"`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n }\n\n /**\n * Validate fallback chains\n */\n private validateFallbackChains(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n for (const item of this.packageDoc.manifest) {\n if (item.fallback) {\n const visited = new Set<string>();\n let currentFallback: string | undefined = item.fallback;\n\n while (currentFallback) {\n if (visited.has(currentFallback)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_045,\n message: `Circular fallback chain detected starting from item \"${item.id}\"`,\n location: { path: opfPath },\n });\n break;\n }\n\n visited.add(currentFallback);\n const fallbackItem = this.manifestById.get(currentFallback);\n\n if (!fallbackItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_040,\n message: `Fallback item \"${currentFallback}\" not found in manifest`,\n location: { path: opfPath },\n });\n break;\n }\n\n currentFallback = fallbackItem.fallback;\n }\n }\n }\n }\n\n /**\n * Validate guide section (EPUB 2)\n */\n private validateGuide(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n for (const ref of this.packageDoc.guide) {\n // Strip fragment from href for lookup\n const hrefBase = ref.href.split('#')[0] ?? ref.href;\n const fullPath = resolvePath(opfPath, hrefBase);\n\n // Check that href references a manifest item\n const found = Array.from(this.manifestByHref.entries()).some(([href]) => {\n const itemFullPath = resolvePath(opfPath, href);\n return itemFullPath === fullPath;\n });\n\n if (!found) {\n pushMessage(context.messages, {\n id: MessageId.OPF_031,\n message: `Guide reference \"${ref.type}\" references item not in manifest: ${ref.href}`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n private detectRefinesCycles(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n // Build graph: id -> ids it refines (via meta elements that refine it)\n const refinesGraph = new Map<string, string[]>();\n for (const meta of this.packageDoc.metaElements) {\n if (!meta.refines || !meta.id) continue;\n if (!meta.refines.startsWith('#')) continue;\n const targetId = meta.refines.substring(1);\n // meta.id refines targetId — so there's an edge from meta.id to targetId\n const existing = refinesGraph.get(meta.id);\n if (existing) {\n existing.push(targetId);\n } else {\n refinesGraph.set(meta.id, [targetId]);\n }\n }\n\n // Detect cycles using DFS\n const visited = new Set<string>();\n const inStack = new Set<string>();\n const reportedCycles = new Set<string>();\n\n const dfs = (node: string): boolean => {\n if (inStack.has(node)) return true;\n if (visited.has(node)) return false;\n visited.add(node);\n inStack.add(node);\n\n const neighbors = refinesGraph.get(node) ?? [];\n for (const neighbor of neighbors) {\n if (dfs(neighbor)) {\n if (!reportedCycles.has(node)) {\n reportedCycles.add(node);\n pushMessage(context.messages, {\n id: MessageId.OPF_065,\n message: `Invalid metadata declaration, probably due to a cycle in \"refines\" metadata.`,\n location: { path: opfPath },\n });\n }\n return true;\n }\n }\n\n inStack.delete(node);\n return false;\n };\n\n for (const node of refinesGraph.keys()) {\n dfs(node);\n }\n }\n\n private validateCollections(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n const collections = this.packageDoc.collections;\n if (collections.length === 0) {\n return;\n }\n\n for (const collection of collections) {\n // RSC-005: manifest collection must not be at the top level\n if (collection.role === 'manifest') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Collection with role \"manifest\" must be a child of another collection',\n location: { path: opfPath },\n });\n }\n\n // OPF-070: collection role URL must be valid if it looks like a URL\n if (collection.role.includes(':')) {\n try {\n new URL(collection.role);\n } catch {\n pushMessage(context.messages, {\n id: MessageId.OPF_070,\n message: `Invalid collection role URL: \"${collection.role}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n if (collection.role === 'dictionary') {\n if (!collection.name || collection.name.trim() === '') {\n pushMessage(context.messages, {\n id: MessageId.OPF_072,\n message: 'Dictionary collection must have a name attribute',\n location: { path: opfPath },\n });\n }\n\n for (const linkHref of collection.links) {\n const manifestItem = this.manifestByHref.get(linkHref);\n if (!manifestItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_073,\n message: `Collection link \"${linkHref}\" references non-existent manifest item`,\n location: { path: opfPath },\n });\n continue;\n }\n\n if (\n manifestItem.mediaType !== 'application/xhtml+xml' &&\n manifestItem.mediaType !== 'image/svg+xml'\n ) {\n pushMessage(context.messages, {\n id: MessageId.OPF_074,\n message: `Dictionary collection item \"${linkHref}\" must be an XHTML or SVG document`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n if (collection.role === 'index') {\n for (const linkHref of collection.links) {\n const manifestItem = this.manifestByHref.get(linkHref);\n if (!manifestItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_073,\n message: `Collection link \"${linkHref}\" references non-existent manifest item`,\n location: { path: opfPath },\n });\n continue;\n }\n\n if (manifestItem.mediaType !== 'application/xhtml+xml') {\n pushMessage(context.messages, {\n id: MessageId.OPF_075,\n message: `Index collection item \"${linkHref}\" must be an XHTML document`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n if (collection.role === 'preview') {\n for (const linkHref of collection.links) {\n const manifestItem = this.manifestByHref.get(linkHref);\n if (!manifestItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_073,\n message: `Collection link \"${linkHref}\" references non-existent manifest item`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n }\n\n private fallbackChainResolvesToContentDocument(itemId: string): boolean {\n const visited = new Set<string>();\n let currentId: string | undefined = itemId;\n while (currentId) {\n if (visited.has(currentId)) return false;\n visited.add(currentId);\n const item = this.manifestById.get(currentId);\n if (!item) return false;\n if (isSpineMediaType(item.mediaType)) return true;\n currentId = item.fallback;\n }\n return false;\n }\n}\n\n/**\n * Check if a media type is valid for spine items\n */\nfunction isSpineMediaType(mediaType: string): boolean {\n return (\n mediaType === 'application/xhtml+xml' ||\n mediaType === 'image/svg+xml' ||\n // EPUB 2 also allows these in spine\n mediaType === 'application/x-dtbook+xml'\n );\n}\n\n/**\n * Validate a BCP 47 language tag (simplified check)\n */\nfunction isValidLanguageTag(tag: string): boolean {\n // BCP 47 language tag validation\n // Supports: primary subtag, script, region, variants, extensions, and private-use\n // Also supports grandfathered tags (simplified: allow single-letter singletons)\n const pattern =\n /^[a-zA-Z]{2,3}(-[a-zA-Z]{4})?(-[a-zA-Z]{2}|-\\d{3})?(-([a-zA-Z\\d]{5,8}|\\d[a-zA-Z\\d]{3}))*(-[a-wyzA-WYZ](-[a-zA-Z\\d]{2,8})+)*(-x(-[a-zA-Z\\d]{1,8})+)?$/;\n if (pattern.test(tag)) return true;\n // Private-use only tags (e.g., \"x-custom\")\n if (/^x(-[a-zA-Z\\d]{1,8})+$/.test(tag)) return true;\n // Grandfathered irregular tags\n const grandfathered = new Set([\n 'en-GB-oed',\n 'i-ami',\n 'i-bnn',\n 'i-default',\n 'i-enochian',\n 'i-hak',\n 'i-klingon',\n 'i-lux',\n 'i-mingo',\n 'i-navajo',\n 'i-pwn',\n 'i-tao',\n 'i-tay',\n 'i-tsu',\n 'sgn-BE-FR',\n 'sgn-BE-NL',\n 'sgn-CH-DE',\n 'art-lojban',\n 'cel-gaulish',\n 'no-bok',\n 'no-nyn',\n 'zh-guoyu',\n 'zh-hakka',\n 'zh-min',\n 'zh-min-nan',\n 'zh-xiang',\n ]);\n return grandfathered.has(tag);\n}\n\n/**\n * Resolve a relative path against a base path\n */\nfunction resolvePath(basePath: string, relativePath: string): string {\n if (relativePath.startsWith('/')) {\n return relativePath.slice(1);\n }\n\n const baseDir = basePath.includes('/') ? basePath.substring(0, basePath.lastIndexOf('/')) : '';\n\n if (!baseDir) {\n return relativePath;\n }\n\n // Handle ../ and ./ in relative path\n const parts = baseDir.split('/');\n const relParts = relativePath.split('/');\n\n for (const part of relParts) {\n if (part === '..') {\n parts.pop();\n } else if (part !== '.') {\n parts.push(part);\n }\n }\n\n return parts.join('/');\n}\n\n/**\n * Safely decode a URI component, returning the original if decoding fails\n *\n * This is needed because OPF hrefs may be URL-encoded (e.g., \"table%20us%202.png\")\n * but the actual file paths in the ZIP are not encoded (e.g., \"table us 2.png\").\n */\nfunction tryDecodeUriComponent(encoded: string): string {\n try {\n return decodeURIComponent(encoded);\n } catch {\n // If decoding fails (e.g., invalid encoding), return original\n return encoded;\n }\n}\n\n/**\n * Check if a URL \"leaks\" outside the container\n *\n * Uses the same trick as Java EPUBCheck: resolve against two different test bases.\n * If the resolved URL doesn't start with both test base paths, it \"leaks\" above root.\n *\n * Example: \"../../../../EPUB/content.xhtml\" would resolve to \"/EPUB/content.xhtml\"\n * from base \"A/\" but to something outside from base \"B/\"\n */\nfunction checkUrlLeaking(href: string): boolean {\n const TEST_BASE_A = 'https://a.example.org/A/';\n const TEST_BASE_B = 'https://b.example.org/B/';\n\n try {\n const urlA = new URL(href, TEST_BASE_A).toString();\n const urlB = new URL(href, TEST_BASE_B).toString();\n\n // If either resolved URL doesn't start with its test base path, the URL leaks\n return !urlA.startsWith(TEST_BASE_A) || !urlB.startsWith(TEST_BASE_B);\n } catch {\n // Invalid URL, don't report as leaking (other validation will catch it)\n return false;\n }\n}\n\n/**\n * Validate MIME type format according to RFC4288\n */\nfunction isValidMimeType(mediaType: string): boolean {\n // RFC 4288 allows: letters, digits, and !#$&-^_.+ in type/subtype\n const mimeTypePattern =\n /^[a-zA-Z][a-zA-Z0-9!#$&\\-^_.]*\\/[a-zA-Z0-9][a-zA-Z0-9!#$&\\-^_.+]*(?:\\s*;\\s*[a-zA-Z0-9-]+=[^;]+)?$/;\n\n if (!mimeTypePattern.test(mediaType)) {\n return false;\n }\n\n const [type, subtypeWithParams] = mediaType.split('/');\n if (!type || !subtypeWithParams) return false;\n\n const subtype = subtypeWithParams.split(';')[0]?.trim();\n if (!subtype) return false;\n\n if (type.length > 127 || subtype.length > 127) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Validate W3C date format (ISO 8601)\n * Based on Java EPUBCheck DateParser\n */\nfunction isValidW3CDateFormat(dateStr: string): boolean {\n const trimmed = dateStr.trim();\n\n const yearOnlyPattern = /^\\d{4}$/;\n if (yearOnlyPattern.test(trimmed)) {\n const year = Number(trimmed);\n return year >= 0 && year <= 9999;\n }\n\n const yearMonthPattern = /^(\\d{4})-(\\d{2})$/;\n const yearMonthMatch = yearMonthPattern.exec(trimmed);\n if (yearMonthMatch) {\n const year = Number(yearMonthMatch[1]);\n const month = Number(yearMonthMatch[2]);\n if (year < 0 || year > 9999) return false;\n if (month < 1 || month > 12) return false;\n return true;\n }\n\n const dateOnlyPattern = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n const dateMatch = dateOnlyPattern.exec(trimmed);\n if (dateMatch) {\n const year = Number(dateMatch[1]);\n const month = Number(dateMatch[2]);\n const day = Number(dateMatch[3]);\n if (year < 0 || year > 9999) return false;\n if (month < 1 || month > 12) return false;\n const daysInMonth = new Date(year, month, 0).getDate();\n if (day < 1 || day > daysInMonth) return false;\n return true;\n }\n\n const dateTimePattern =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?(Z|[+-]\\d{2}:\\d{2})?$/;\n const dateTimeMatch = dateTimePattern.exec(trimmed);\n if (dateTimeMatch) {\n const year = Number(dateTimeMatch[1]);\n const month = Number(dateTimeMatch[2]);\n const day = Number(dateTimeMatch[3]);\n if (year < 0 || year > 9999) return false;\n if (month < 1 || month > 12) return false;\n const daysInMonth = new Date(year, month, 0).getDate();\n if (day < 1 || day > daysInMonth) return false;\n\n const hours = Number(dateTimeMatch[4]);\n const minutes = Number(dateTimeMatch[5]);\n const seconds = Number(dateTimeMatch[6]);\n if (hours < 0 || hours > 23) return false;\n if (minutes < 0 || minutes > 59) return false;\n if (seconds < 0 || seconds > 59) return false;\n return true;\n }\n\n return false;\n}\n","/**\n * Registry for tracking EPUB resources and their IDs\n */\n\nimport type { Resource } from './types.js';\n\n/**\n * Registry for managing resources and their IDs\n */\nexport class ResourceRegistry {\n private resources: Map<string, Resource>;\n private ids: Map<string, Set<string>>;\n private svgSymbolIds: Map<string, Set<string>>;\n\n constructor() {\n this.resources = new Map();\n this.ids = new Map();\n this.svgSymbolIds = new Map();\n }\n\n /**\n * Register a resource from manifest\n */\n registerResource(resource: Resource): void {\n this.resources.set(resource.url, resource);\n // Also copy the IDs to the registry\n for (const id of resource.ids) {\n this.registerID(resource.url, id);\n }\n }\n\n /**\n * Register an ID in a resource\n */\n registerID(resourceURL: string, id: string): void {\n if (!id || !this.resources.has(resourceURL)) {\n return;\n }\n\n if (!this.ids.has(resourceURL)) {\n this.ids.set(resourceURL, new Set());\n }\n\n const resourceIDs = this.ids.get(resourceURL);\n resourceIDs?.add(id);\n\n // Also add to the resource object for consistency\n const resource = this.resources.get(resourceURL);\n if (resource) {\n resource.ids.add(id);\n }\n }\n\n /**\n * Get a resource by URL\n */\n getResource(url: string): Resource | undefined {\n return this.resources.get(url);\n }\n\n /**\n * Check if a resource exists\n */\n hasResource(url: string): boolean {\n return this.resources.has(url);\n }\n\n /**\n * Check if an ID exists in a resource\n */\n hasID(resourceURL: string, id: string): boolean {\n const resourceIDs = this.ids.get(resourceURL);\n return resourceIDs?.has(id) ?? false;\n }\n\n /**\n * Get the position (document order) of an ID in a resource.\n * Returns -1 if the ID is not found or is empty.\n */\n getIDPosition(resourceURL: string, id: string): number {\n if (!id) return -1;\n const resourceIDs = this.ids.get(resourceURL);\n if (!resourceIDs) return -1;\n let index = 0;\n for (const existingId of resourceIDs) {\n if (existingId === id) return index;\n index++;\n }\n return -1;\n }\n\n /**\n * Register an ID as belonging to an SVG symbol element\n */\n registerSVGSymbolID(resourceURL: string, id: string): void {\n if (!this.svgSymbolIds.has(resourceURL)) {\n this.svgSymbolIds.set(resourceURL, new Set());\n }\n this.svgSymbolIds.get(resourceURL)?.add(id);\n }\n\n /**\n * Check if an ID in a resource belongs to an SVG symbol element\n */\n isSVGSymbolID(resourceURL: string, id: string): boolean {\n return this.svgSymbolIds.get(resourceURL)?.has(id) ?? false;\n }\n\n /**\n * Get all resources\n */\n getAllResources(): Resource[] {\n return Array.from(this.resources.values());\n }\n\n /**\n * Get all resource URLs\n */\n getResourceURLs(): string[] {\n return Array.from(this.resources.keys());\n }\n\n /**\n * Get resources in spine\n */\n getSpineResources(): Resource[] {\n return Array.from(this.resources.values()).filter((r) => r.inSpine);\n }\n\n /**\n * Check if a resource is in spine\n */\n isInSpine(url: string): boolean {\n const resource = this.resources.get(url);\n return resource?.inSpine ?? false;\n }\n}\n","/**\n * Cross-reference validator for EPUB resources\n */\n\nimport { MessageId, pushMessage } from '../messages/index.js';\nimport { isCoreMediaType } from '../opf/types.js';\nimport type { EPUBVersion, ValidationContext } from '../types.js';\nimport type { ResourceRegistry } from './registry.js';\nimport type { Reference } from './types.js';\nimport { ReferenceType, isPublicationResourceReference } from './types.js';\nimport {\n checkUrlLeaking,\n hasAbsolutePath,\n hasParentDirectoryReference,\n isDataURL,\n isFileURL,\n isHTTP,\n isHTTPS,\n isMalformedURL,\n isRemoteURL,\n parseURL,\n resolveManifestHref,\n} from './url.js';\n\n/**\n * Validator for resource references\n */\nexport class ReferenceValidator {\n private registry: ResourceRegistry;\n private version: string;\n private references: Reference[] = [];\n\n constructor(registry: ResourceRegistry, version: string) {\n this.registry = registry;\n this.version = version;\n }\n\n /**\n * Register a reference for validation\n */\n addReference(reference: Reference): void {\n this.references.push(reference);\n }\n\n /**\n * Validate all registered references\n */\n validate(context: ValidationContext): void {\n for (const reference of this.references) {\n this.validateReference(context, reference);\n }\n\n this.checkRemoteResources(context);\n this.checkUndeclaredResources(context);\n this.checkReadingOrder(context);\n this.checkNonLinearReachability(context);\n }\n\n /**\n * Validate a single reference\n */\n private validateReference(context: ValidationContext, reference: Reference): void {\n // Trim leading/trailing whitespace (XML attribute values are whitespace-normalized)\n const url = reference.url.trim();\n\n // Validate data URLs first (before malformed URL check, since base64 may contain whitespace)\n // Data URLs are allowed for images/audio/video/fonts with CMT or intrinsic fallback\n // but forbidden for hyperlinks (a href, area href), nav links, and cite references\n if (isDataURL(url)) {\n if (this.version.startsWith('3.')) {\n const forbiddenDataUrlTypes = [\n ReferenceType.HYPERLINK,\n ReferenceType.NAV_TOC_LINK,\n ReferenceType.NAV_PAGELIST_LINK,\n ReferenceType.CITE,\n ];\n if (forbiddenDataUrlTypes.includes(reference.type)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_029,\n message: 'Data URLs are not allowed in this context',\n location: reference.location,\n });\n } else {\n // Check RSC-032 for data URLs with foreign MIME types\n const fallbackCheckedTypes = [\n ReferenceType.IMAGE,\n ReferenceType.AUDIO,\n ReferenceType.VIDEO,\n ReferenceType.GENERIC,\n ];\n if (fallbackCheckedTypes.includes(reference.type) && !reference.hasIntrinsicFallback) {\n const dataUrlMimeType = this.extractDataURLMimeType(url);\n if (dataUrlMimeType && !isCoreMediaType(dataUrlMimeType)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_032,\n message: `Fallback must be provided for foreign resources, but found none for data URL of type \"${dataUrlMimeType}\"`,\n location: reference.location,\n });\n }\n }\n }\n }\n return;\n }\n\n // Check for malformed URLs (after data URL check)\n if (isMalformedURL(url)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_020,\n message: `Malformed URL: ${url}`,\n location: reference.location,\n });\n return;\n }\n\n if (isFileURL(url)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_030,\n message: `File URLs are not allowed in EPUB, but found \"${url}\"`,\n location: reference.location,\n });\n return;\n }\n\n // Use targetResource if available, otherwise parse URL\n const resourcePath = reference.targetResource || parseURL(url).resource;\n const fragment = reference.fragment ?? parseURL(url).fragment;\n const hasFragment = fragment !== undefined && fragment !== '';\n\n // RSC-033: Relative URLs must not have a query component\n if (!isRemoteURL(url) && url.includes('?')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_033,\n message: `Relative URL strings must not have a query component: \"${url}\"`,\n location: reference.location,\n });\n }\n\n // Validate relative URLs\n if (!isRemoteURL(url)) {\n this.validateLocalReference(context, reference, resourcePath);\n } else {\n this.validateRemoteReference(context, reference);\n }\n\n // Validate fragments\n if (hasFragment) {\n this.validateFragment(context, reference, resourcePath, fragment);\n }\n }\n\n /**\n * Validate a local (non-remote) reference\n */\n private validateLocalReference(\n context: ValidationContext,\n reference: Reference,\n resourcePath: string,\n ): void {\n // Check for absolute paths (RSC-026: URL leaks outside container)\n if (hasAbsolutePath(resourcePath)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_026,\n message: 'Absolute paths are not allowed in EPUB',\n location: reference.location,\n });\n }\n\n // Check for parent directory references that escape the container (RSC-026)\n const forbiddenParentDirTypes = [\n ReferenceType.HYPERLINK,\n ReferenceType.NAV_TOC_LINK,\n ReferenceType.NAV_PAGELIST_LINK,\n ];\n if (\n hasParentDirectoryReference(reference.url) &&\n forbiddenParentDirTypes.includes(reference.type)\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_026,\n message: 'Parent directory references (..) are not allowed',\n location: reference.location,\n });\n } else if (\n !hasAbsolutePath(resourcePath) &&\n !hasParentDirectoryReference(reference.url) &&\n checkUrlLeaking(reference.url)\n ) {\n // RSC-026: Check if the URL leaks outside the container\n // (only when not already caught by the more specific checks above)\n pushMessage(context.messages, {\n id: MessageId.RSC_026,\n message: `URL \"${reference.url}\" leaks outside the container`,\n location: reference.location,\n });\n }\n\n // Check if target resource exists in manifest\n if (!this.registry.hasResource(resourcePath)) {\n const fileExistsInContainer = context.files.has(resourcePath);\n\n if (fileExistsInContainer) {\n // File exists but not declared in manifest - report RSC-008\n if (!context.referencedUndeclaredResources?.has(resourcePath)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_008,\n message: `Referenced resource \"${resourcePath}\" is not declared in the OPF manifest`,\n location: reference.location,\n });\n context.referencedUndeclaredResources ??= new Set();\n context.referencedUndeclaredResources.add(resourcePath);\n }\n } else {\n // File doesn't exist at all - report RSC-007\n const isLinkRef = reference.type === ReferenceType.LINK;\n pushMessage(context.messages, {\n id: isLinkRef ? MessageId.RSC_007w : MessageId.RSC_007,\n message: `Referenced resource not found in EPUB: ${resourcePath}`,\n location: reference.location,\n });\n }\n // Skip further validation since resource is not properly declared\n return;\n }\n\n const resource = this.registry.getResource(resourcePath);\n\n // Check if hyperlinks point to spine items (EPUB 3 only)\n const isHyperlinkLike =\n reference.type === ReferenceType.HYPERLINK ||\n reference.type === ReferenceType.NAV_TOC_LINK ||\n reference.type === ReferenceType.NAV_PAGELIST_LINK;\n if (this.version.startsWith('3') && isHyperlinkLike && !resource?.inSpine) {\n pushMessage(context.messages, {\n id: MessageId.RSC_011,\n message: 'Hyperlinks must reference spine items',\n location: reference.location,\n });\n }\n\n // Check if publication resources point to content documents\n // RSC-010: Hyperlinks and overlay text links must point to blessed content document types\n if (isHyperlinkLike || reference.type === ReferenceType.OVERLAY_TEXT_LINK) {\n const targetMimeType = resource?.mimeType;\n if (\n targetMimeType &&\n !this.isBlessedItemType(targetMimeType, context.version) &&\n !this.isDeprecatedBlessedItemType(targetMimeType) &&\n !resource.hasCoreMediaTypeFallback\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_010,\n message: 'Publication resource references must point to content documents',\n location: reference.location,\n });\n }\n }\n\n // RSC-032: Foreign resources (non-CMT) must have a fallback\n // Only IMAGE, AUDIO, VIDEO, and GENERIC types are checked;\n // FONT, TRACK, STYLESHEET, LINK, etc. are exempt per spec\n const fallbackCheckedTypes = [\n ReferenceType.IMAGE,\n ReferenceType.AUDIO,\n ReferenceType.VIDEO,\n ReferenceType.GENERIC,\n ];\n if (\n resource &&\n fallbackCheckedTypes.includes(reference.type) &&\n !isCoreMediaType(resource.mimeType) &&\n !resource.hasCoreMediaTypeFallback &&\n !reference.hasIntrinsicFallback\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_032,\n message: `Fallback must be provided for foreign resources, but found none for resource \"${resourcePath}\" of type \"${resource.mimeType}\"`,\n location: reference.location,\n });\n }\n }\n\n /**\n * Validate a remote reference\n */\n private validateRemoteReference(context: ValidationContext, reference: Reference): void {\n const url = reference.url;\n\n // Check remote resource restrictions\n if (isPublicationResourceReference(reference.type)) {\n // RSC-031: Remote publication resources should use HTTPS\n if (isHTTP(url) && !isHTTPS(url)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_031,\n message: 'Remote resources must use HTTPS',\n location: reference.location,\n });\n }\n const allowedRemoteRefTypes = new Set([\n ReferenceType.AUDIO,\n ReferenceType.VIDEO,\n ReferenceType.FONT,\n ]);\n\n const targetResource = reference.targetResource || url;\n const resource = this.registry.getResource(targetResource);\n\n // Allow if reference type is audio/video/font OR if the resource's MIME type\n // indicates audio/video/font (matching Java's isRemoteResourceType check)\n const isAllowedByRefType = allowedRemoteRefTypes.has(reference.type);\n const isAllowedByMimeType = resource && this.isRemoteResourceType(resource.mimeType);\n\n if (!isAllowedByRefType && !isAllowedByMimeType) {\n pushMessage(context.messages, {\n id: MessageId.RSC_006,\n message: 'Remote resources are only allowed for audio, video, and fonts',\n location: reference.location,\n });\n return;\n }\n\n if (!resource) {\n pushMessage(context.messages, {\n id: MessageId.RSC_008,\n message: `Referenced resource \"${targetResource}\" is not declared in the OPF manifest`,\n location: reference.location,\n });\n }\n }\n }\n\n /**\n * Validate a fragment identifier\n */\n private validateFragment(\n context: ValidationContext,\n reference: Reference,\n resourcePath: string,\n fragment: string,\n ): void {\n if (!fragment || !this.registry.hasResource(resourcePath)) {\n return;\n }\n\n const resource = this.registry.getResource(resourcePath);\n\n // RSC-013: Stylesheets should not have fragment identifiers\n if (reference.type === ReferenceType.STYLESHEET) {\n pushMessage(context.messages, {\n id: MessageId.RSC_013,\n message: 'Stylesheet references must not have fragment identifiers',\n location: reference.location,\n });\n return;\n }\n\n // RSC-009: Non-SVG image resources should not have fragment identifiers\n if (reference.type === ReferenceType.IMAGE && resource?.mimeType !== 'image/svg+xml') {\n pushMessage(context.messages, {\n id: MessageId.RSC_009,\n message: `Fragment identifier used on a non-SVG image resource: ${resourcePath}#${fragment}`,\n location: reference.location,\n });\n return;\n }\n\n // RSC-014: SVG fragment type mismatch\n if (resource?.mimeType === 'image/svg+xml' && reference.type === ReferenceType.HYPERLINK) {\n // svgView/viewBox fragments can only be referenced from SVG documents\n const hasSVGView = fragment.includes('svgView(') || fragment.includes('viewBox(');\n if (hasSVGView) {\n pushMessage(context.messages, {\n id: MessageId.RSC_014,\n message: 'SVG view fragments can only be referenced from SVG documents',\n location: reference.location,\n });\n }\n }\n // RSC-014: Hyperlink pointing to SVG symbol is incompatible (can be inline in XHTML too)\n if (reference.type === ReferenceType.HYPERLINK) {\n if (this.registry.isSVGSymbolID(resourcePath, fragment)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_014,\n message: `Fragment identifier \"${fragment}\" defines an incompatible resource type (SVG symbol)`,\n location: reference.location,\n });\n }\n }\n\n // Check if fragment target exists (only for resource types we parse for IDs)\n // Skip remote resources since we can't parse their content\n const parsedMimeTypes = ['application/xhtml+xml', 'image/svg+xml'];\n if (resource && parsedMimeTypes.includes(resource.mimeType) && !isRemoteURL(resourcePath)) {\n if (!this.registry.hasID(resourcePath, fragment)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_012,\n message: `Fragment identifier not found: #${fragment}`,\n location: reference.location,\n });\n }\n }\n }\n\n /**\n * Check non-spine remote resources that have non-standard types.\n * Fires RSC-006 for remote items that aren't audio/video/font types\n * and aren't referenced as audio/video/font by content documents.\n * This mirrors Java's checkItemAfterResourceValidation behavior.\n */\n private checkRemoteResources(context: ValidationContext): void {\n if (!this.version.startsWith('3')) return;\n\n // Collect remote resources that are referenced as allowed types (font/audio/video)\n const referencedAsAllowed = new Set<string>();\n for (const ref of this.references) {\n if (isRemoteURL(ref.url) || isRemoteURL(ref.targetResource)) {\n if (\n ref.type === ReferenceType.FONT ||\n ref.type === ReferenceType.AUDIO ||\n ref.type === ReferenceType.VIDEO\n ) {\n referencedAsAllowed.add(ref.targetResource);\n }\n }\n }\n\n for (const resource of this.registry.getAllResources()) {\n if (!isRemoteURL(resource.url)) continue;\n if (resource.inSpine) continue; // Already checked in OPF validator\n if (this.isRemoteResourceType(resource.mimeType)) continue;\n if (referencedAsAllowed.has(resource.url)) continue;\n\n pushMessage(context.messages, {\n id: MessageId.RSC_006,\n message: `Remote resource reference is not allowed; resource \"${resource.url}\" must be located in the EPUB container`,\n location: { path: resource.url },\n });\n }\n }\n\n /**\n * Check for resources that were never referenced\n * Following Java EPUBCheck OPFChecker30.java logic:\n * - Skip items in spine (implicitly referenced)\n * - Skip nav and NCX resources\n * - Only check for \"publication resource references\" (not HYPERLINK)\n */\n private checkUndeclaredResources(context: ValidationContext): void {\n const referencedResources = new Set(\n this.references\n .filter((ref) => {\n if (!isPublicationResourceReference(ref.type)) {\n return false;\n }\n const targetResource = ref.targetResource || parseURL(ref.url).resource;\n return this.registry.hasResource(targetResource);\n })\n .map((ref) => ref.targetResource || parseURL(ref.url).resource),\n );\n\n for (const resource of this.registry.getAllResources()) {\n if (resource.inSpine) continue;\n if (referencedResources.has(resource.url)) continue;\n if (resource.isNav) continue;\n if (resource.isNcx) continue;\n if (resource.isCoverImage) continue;\n\n pushMessage(context.messages, {\n id: MessageId.OPF_097,\n message: `Resource declared in manifest but not referenced: ${resource.url}`,\n location: { path: resource.url },\n });\n }\n }\n\n private checkReadingOrder(context: ValidationContext): void {\n if (!context.tocLinks || !context.packageDocument) return;\n\n const packageDoc = context.packageDocument;\n const spine = packageDoc.spine;\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n const spinePositionMap = new Map<string, number>();\n for (const [i, spineRef] of spine.entries()) {\n const item = packageDoc.manifest.find((m) => m.id === spineRef.idref);\n if (item) {\n spinePositionMap.set(resolveManifestHref(opfDir, item.href), i);\n }\n }\n\n let lastSpinePosition = -1;\n let lastAnchorPosition = -1;\n\n for (const link of context.tocLinks) {\n const spinePos = spinePositionMap.get(link.targetResource);\n if (spinePos === undefined) continue;\n\n if (spinePos < lastSpinePosition) {\n pushMessage(context.messages, {\n id: MessageId.NAV_011,\n message: `\"toc\" nav must be in reading order; link target \"${link.targetResource}\" is before the previous link's target in spine order`,\n location: link.location,\n });\n lastSpinePosition = spinePos;\n lastAnchorPosition = -1;\n } else {\n if (spinePos > lastSpinePosition) {\n lastSpinePosition = spinePos;\n lastAnchorPosition = -1;\n }\n\n const targetAnchorPosition = link.fragment\n ? this.registry.getIDPosition(link.targetResource, link.fragment)\n : -1;\n if (targetAnchorPosition > -1) {\n if (targetAnchorPosition < lastAnchorPosition) {\n const target = link.fragment\n ? `${link.targetResource}#${link.fragment}`\n : link.targetResource;\n pushMessage(context.messages, {\n id: MessageId.NAV_011,\n message: `\"toc\" nav must be in reading order; link target \"${target}\" is before the previous link's target in document order`,\n location: link.location,\n });\n }\n lastAnchorPosition = targetAnchorPosition;\n }\n }\n }\n }\n\n private checkNonLinearReachability(context: ValidationContext): void {\n if (!context.packageDocument) return;\n\n const spine = context.packageDocument.spine;\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n const hyperlinkTargets = new Set<string>();\n for (const ref of this.references) {\n if (\n ref.type === ReferenceType.HYPERLINK ||\n ref.type === ReferenceType.NAV_TOC_LINK ||\n ref.type === ReferenceType.NAV_PAGELIST_LINK\n ) {\n hyperlinkTargets.add(ref.targetResource);\n }\n }\n\n const hasScripts = context.packageDocument.manifest.some((m) =>\n m.properties?.includes('scripted'),\n );\n\n for (const spineItem of spine) {\n if (spineItem.linear) continue;\n\n const item = context.packageDocument.manifest.find((m) => m.id === spineItem.idref);\n if (!item) continue;\n\n const fullPath = resolveManifestHref(opfDir, item.href);\n\n if (!hyperlinkTargets.has(fullPath)) {\n pushMessage(context.messages, {\n id: hasScripts ? MessageId.OPF_096b : MessageId.OPF_096,\n message: `Non-linear content must be reachable, but found no hyperlink to \"${fullPath}\"`,\n location: { path: fullPath },\n });\n }\n }\n }\n\n /**\n * Check if a MIME type is a blessed content document type\n */\n private isBlessedItemType(mimeType: string, version: EPUBVersion): boolean {\n if (version === '2.0') {\n return mimeType === 'application/xhtml+xml' || mimeType === 'application/x-dtbook+xml';\n } else {\n return mimeType === 'application/xhtml+xml' || mimeType === 'image/svg+xml';\n }\n }\n\n /**\n * Check if a MIME type is a deprecated blessed content document type\n */\n private isDeprecatedBlessedItemType(mimeType: string): boolean {\n return mimeType === 'text/x-oeb1-document' || mimeType === 'text/html';\n }\n\n private extractDataURLMimeType(url: string): string {\n const match = /^data:([^;,]+)/.exec(url);\n return match?.[1]?.trim().toLowerCase() ?? 'text/plain';\n }\n\n private isRemoteResourceType(mimeType: string): boolean {\n return (\n mimeType.startsWith('audio/') ||\n mimeType.startsWith('video/') ||\n mimeType.startsWith('font/') ||\n mimeType === 'application/font-sfnt' ||\n mimeType === 'application/font-woff' ||\n mimeType === 'application/font-woff2' ||\n mimeType === 'application/vnd.ms-opentype'\n );\n }\n}\n","/**\n * Auto-generated compressed schema constants\n *\n * DO NOT EDIT MANUALLY - Run \"npm run generate:schemas\" to regenerate\n *\n * Schemas are gzip-compressed and base64-encoded. They are decompressed\n * lazily on first access for optimal bundle size with fast runtime access.\n *\n * Generated: 2026-01-22T05:24:32.172Z\n */\n\nimport { gunzipSync, strFromU8 } from 'fflate';\n\n/**\n * Base64-encoded gzip-compressed schema data\n */\nconst COMPRESSED_SCHEMAS: Record<string, string> = {\n 'applications.rng':\n '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',\n 'aria.rng':\n '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',\n 'block.rng':\n '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',\n 'common.rng':\n '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',\n 'container.rng':\n 'H4sIAJC0cWkCA41SvW6DMBCeyVMg9sRJu1kOeYFEHbp0vZALWMI2Oh+FvH0xf6VUkeLJvvv+fLY6taaMv5G8dvaYHHb75JRuVE5gDFDcNa0/JgVzJYUgLKG1+c5RLqwXnqnOuCYUgbaJpxUYNVnpwGsvLRj0kjPpKrQ3l9UGLcteWGbOMmiLtGDfgIEfFZ71lYAes3nTNLvmvfd+2+8P4uty/swKNLCdGD5JN5HyDMTdJlJYYvCKQ4Jj8uuVdmZR1wdm0teacUSMU5j6kWJsWUxoMcOD+FqdnOO7LocMoe0sftDF0YB+ig/wwe1/nntdltsKuFiA5lAz60+uZ1IGbxq2YUivaw2VMXaYQlh9bXG3qboCrs6q+yv9qygx/qz0B2uCDqV5AgAA',\n 'core-scripting.rng':\n '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',\n 'data.rng':\n 'H4sIAJC0cWkCA8VYTY/aMBC98yvcrLQ3kvZQqWIDq2rbbg9sD4VKvZpgEquxHRmHhX/fsROIyQcBJRHc8IzfPM+8Fwf85z2L0Y7ILRV86nxyPzqI8ECsKQ+nzp/lj/EX53k28kOJGcMSQTbfTvDUiZRKJp4nSYz3PHSFDD2+9QLBEqzoisZUHTzMuVDwVUDEIJvdTXu3SqaBSiXJctcYth4SMqcrieVh6jizEUL+h/EYPfTxQeOxAVyTDeUEcczI1FGUEZfEhJliEMWTtQhSRnh2jhn6/X3+9S/69YoWQUQYRhsh0c/l2xx9nqCFTgrQN2CO3rD8lyYao/x58L0yalar76PV0F/C+SboMVZP+qSPoXpqIqObAEtWX/KWQIxyRWRM8I4cl2BRko3dRMo5kY7XnICVktsiwffKqL6XczBj8rI5NYwsA8v3VelZtUGhTPBKdZHos+O4lq+9x8WSYpv2+c7yMVp4Z13KtyqyVwb4bJNWxYtxEhgT1BYQpBNfBNSB+cAKwwpFRJJaRefcdSvdJJJ4C8Z2EKyuIAfCkaDBcbTlERkjVBlVjwFeJa3W0dpD71RF2tomHemO0lWqLE2egkOK88S3VaWnzF7lWkLtoNs6U53g76/vEp+jMo5jz1NL8Tpu+jZwdc64fDjQyBHuls6fOa9SzkQLv7R4oIvHzq3TUsh04ZLH9NWTeUmnXm8hnX21hQyLS84xCX0ZxgLrxScFnrvDcXpfk1TINDjEDmoM/YahX46mDrw1nRR6gxmsGd7VA4WiW/AZgY5e1P4iwDG8ob7iNMzvE7PnehOY9KtdkBG6ZIMsoy8f2Gi9GMECvM0J9kZGebMP2oC0i9xEiiSr3wnLJhWL936AIhpG/SAxvO+vT12wbFI6kaW59bo9yKpiuu5JVn/Rb2KB1c3PtLIuGxgUoQHrawk21C9CA9Y3ym0gYMWGnACotGkCp9CA9Y/ibuBwHh6ER8fr9T4//Kx7tkTJ9/I/gWaj/8VHiKo2EgAA',\n 'datatypes.rng':\n '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',\n 'embed.rng':\n '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',\n 'epub-mathml3-inc.rng':\n 'H4sIAJC0cWkCA7VY23LbNhB9z1egzGNN0m4mU9uh5HHcdNIZ2/XUzkzfOhAIiRiTAAuAuvSpv9Hf65d0caFISqQsuVYeJAXE7p492D1YOrlaFjmaU6mY4KPgLDoNEOVEpIzPRsG3p5/D8+Bq/C6ZSVwUWCKuRkGmdXkZx4vFIlp8iIScxWcXF+fxHdaZ/bi7DRB4bW2VNMdLPrN7uYqVlhXRlaSxjZdijfWqpLdsIrFc9QX44fT0LP797vaRZLTAYW2hgvE7hJLvwhC+EHr/Fv+sJ/uBXDJojnMGEYEgNMGKpgh+6IwiZcEoNJWisAv3Ffqqgc6bjJJnKk+clwXTmX08FXkuFkAsIhnmM6ou3QaEQnQjuKZc1yGZgiD5CmFjAREZR5hzAVkDihDIbSy76z6IsgElBaYZMc8USumUceuqtkXoy8O3z+vQPwlSFfBDNb7t88dHAIQ1eJpUmiqEJa1xNVy9FfVhaE+UcZJXKUWZpNNRUAApRf4hhNVI8pk9dHfsiC4Be4q0QIRJwD83mdTlgQiQwUxlK+8YrBwPiOOCjoJ7wR3j11p7t7BlnWy9Ytb46h5MmhVYo0tCS91egkWuzD7bKEHc+6x/daC1oOhdexnAqsSEDngdbs2LeJlBWR5mZzsOCiqkhlL1CuOz01itONShYvuas7Sc1g5+jEW5YZfEm4wn8da5JFAy/nTrOohMG0DdrJ2BWfeIk9iVRauyoLEBgKt0hUroJeDBqYCrR9+hGoqvRDnQlJ+gZ5bntvUINJUNYPZDdZoq+7I0Xkw5DlRjd1NTjyQTjPSnqECBuGakw1Tr+UMLd8t1i4m28x4aBNwNkkErbuiMVTWrDx2V6U+sa9sk1uCkZTWJNrZ5kG1QSeyVoaP7N6IogNT1mTpVsH1vn4NMgPtLUwqNxHQAOg9GBODkigk8GAUMZFHmFM9pLTiiNNhwPoTf1ppB0UBvm3QSMdyGW9p6PGxKFXlUZofBg1O4NFfecXCBFTiwiFQEoUykvaFd//bL9XFgYclwNMvFBLdKcBDNjjqPCpHSPHLi24BxDVcD2aKDcU5lNAXVcdEPjKbmsz1imV3b3ut+euoOKwIuHjfk+ElIyIhX//79j0I2t48huAudKML9TFAqGaiGm25gchGVhC9NYYY0YE9QUmjo0LGZcoxWWh31g0+gxTPliObUjCIBPAeBJdjNLEZUMTj8+gQ7/Ra7CN+frKukYGPjn9tPMQbVSuGHGtfbnSCAQ6DuE1IURoyt2+tzNVPxQzXJGYlVJhZ/TKpZRGbsiqWji/OPF+/JOdAjEba+XFI4H5IWm2vkUe5fBgYv9KvEan1zbXWBlV9geoVUSQmbMrKp0m1tvuyF1ye8HlP32ml3SLfwNqaL4Y3rqntZ/CNfTjVvB5q1r+umiZuEhpuqz2kj0NvH1chNHWaX4qX9irLbSklyqBDtwah3WLfR/7iovfK88sRa5A6baB3Wb6X7xwEj898BAxgmXeqvYLIvX+/1LyrFr/JOyL7GMa9aMIU1ELq7X0KxgwXvsBmBvJ3fvmOWBE2vKDKjC1Sam5O338iDsdPn0L8sJrE1O9wNLkuQVUtl7FIIfQrfA7MbbjeH087QvgdZfac/QJT5bEjaMxnvk/5ZsXkH+oFQX5awYzVrn04erWMHgm0q38udPOBoU1LfqMH7DmJnl2+8xr1ds/chOXbHD3R6rQft98u3FIV2qkdWhn1Y7cqDScFndX9j/vrQnPEAkCT2f0Adv/sPYuZvzHIVAAA=',\n 'epub-nav-30.rnc':\n 'H4sIAJC0cWkCA61TX2vbMBB/jj/F4UBJ2KIkzbotgRI2VvYyytgY7FWRFVtMlows1x1Jv/tOsmM7rUr3UD2I0/393e9OEAFAwve0khYUzXlZUMbhGuLM2mIzn9d1TeoV0SadL9fr9fw+s7mMXVTvzYtq9yhEJMXeB10uFh/muih9SATRGMavcaLxGODHzbdPv+H2K/xkGc8p7LWBm++/Pm/8Dbf0TqTUCq3gi2ZVzpUtEcTwYJ5XwuO7AxCKySrhEDtOZp6s2WpBjGIxHFoffxS9I9RaUyJxnUyUdnH2b8Gd40Pkbuw0NrzkNgabcTcsoYTvSu8HaayGOqMWhIWalm3gjiMnzYA2LqszAaZy3rRKHSXAdJ5r1QLY0VKwZrpPMSHUBv/kPEgk20Z/ca5nkpZl2GSFlTxsQgjPWPy2hU1i+VEFDYWjTtmgTSOf5mSZjM5s1AhKRF5IwYQlyEa7StFoNDoGXCVVSU7Nn/9wNVpykmg2Eyrh9y96FTTlUpT2RUermfOZbvGe+tVx63dFMk4TodJ2HjjELDW6KgiXPIcjZMtOuuykVSe966SrTnrvpdPOu/VwbWNmp3Y75V6HxuAWx8NFjoNLddElIEwr68Ifhmk7LQIP9LN923tq6Yf5GJjT99jwccCr/TaD6qgLAxgYME2vFW8ClcSgFD5cKRGqJZ4t1luugXqmSZEZ/JgqRfInk6c6/BjKK6dnZExP8Nql8WF7qWs49n1E/wAgI0XDAwYAAA==',\n 'epub-nav-30.rng':\n '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',\n 'epub-nav-30.sch':\n 'H4sIAJC0cWkCA81XSXPbNhS++1e8sp1abE3RS7pYlZS4nW6H5tCm04OqyUAgJKIGAQYALamTH98HkJRIU5LV2JlEFxsk3va97y0cPl9lAu6YNlzJUXDRPw+ASaoSLhej4M9XP0XfBs/HJ0NDU5YRwMvSjILU2nwQx3mhRV9RQftKL+LEJCIu71mtZADwpmB6/T2XpbKVEfYyGJ+cAP6G0kCh+UbVcrnsL6+8novr6+t4ldpMBJBrNucrdwtP8XivKE/yuRe+PD//Jla52YqyvJg50VI2J9YyLYEno0CSu0jRQmsMmKFj7oK/pAvBgCpp2cqWtgczlawbV/w1YgzTFiwzeIuqQtpeP479dVQ9seqWSf4v671wLgzsOmdnp3+bL0/D0alV9HQawggugvGPK0KtWIOSDAJ8EQBKAxMsY9K2LLpfVhgLM+bCM/h+GJdePJ1rOVmwSHBjnYOfC/sdYNJ+K4TlOaKiaA2YATXveGdTjGGjoRXJ03sqiEwyom/NO3u60fCAp8PYUaKiX1xxaBelTE5kJFVkipkH4GFSNWLdhjitnjp1x7FOCcem82AMrzAwJ1dHUzJGSWQY0qYwLAFiIGXEVSXMlYa5IF2eVREY6EllIeVME01TTolwUPEFsdgwwFhdUFsgF0ME5p1h2+bhMGD/gxEVgkpU/5D7OApmMZKMIYieJ8jWOyIKPPfrTrP/7mtn9rVUOiMCfUk2shvvhFoyHVFimo6GladHGEixfe0ysHkUYZJp246TCb3ytvZPogh+SBm99enOuDEu9RuvADOh+axASkEUHaLbNhIstP1qkG1AJE3RGJeGJ0dUWsfhDiE3GirVBkyqCpF4VkuOswZ6nz67vgo7kihY8l+zXGmLBbDkNuXS9wCDqDuNGB+6uzWyq/8eBqdjl2W5Xfdq3YNBTeEONScdUffDuuv1gRv4rOJE6CLZefU41mGDqFXd5+9ezQ/Tran1Hml3apyGwfgGY0vZFm5YYkuaYy8rU7NNTINc+M4/QhPMt3WMGoKhL4tIzcFgxiimYZ8zWBbBY1oUl7eRIDMmjmlS3Va+vxGVLnUHlCcVNlgsskgwubAptuJ2Nqq3/ygue/23/dIAzxbxCyIsnvGv5qR0O8RUjXFCdAxhNsp6qqqiUZ+mHB4uPuLqBYN87HB8Cgj3j8UPiOIf6NT7x1CzN1E1u+9j2HDpIJoT11j2T1Gs557fT88aq+BZY7SG4fTwTpJykQwGX0wuphMsynnV+NKLt83TZet01To9a52+ap2+RuMYULfZ1miXncWmuAH5bfqstZC6NtIcRj43KbnDBrPZibAXoQ6uOzbmXLtMuvgekcLKTOSThGvH4VJA2GrAaqhqkGp4KmA+uor4pcLzCQrBHbtIusU1QjI8amv0fN/D9AeI3vpaKTdw/J776+b3l7++/HkAN7vGU2OFwoHUbBT1PlMB1MHTrzAE3NLlPm8EJMxQJhOCophBkOgUTvJ6cQ+Pp+iw+mwfn/wH3SbjRw8QAAA=',\n 'epub-prefix-attr.rng':\n 'H4sIAJC0cWkCA62SzU7DMBCE732KxT0nLlxAUZIKpMIFIQRU4uom29RS/CPboenb4zhWJAoVl/gQydnZb8dj5+tetPCFxnIlC3KdrgigrFTNZVOQ7cdjckfW5SJvDBOCGfBqaTNWkINzOqPUYMt62aTKNFRaWimhmeM73nJ3okxK5fxW+Uogj92ou90EOB6PKa/1PhBuVqtbqrSNyktTrDNd5TqDgVouAPKrJIHlHAuSJABr3HOJIJnAggyOU238rz5lzpkw04tYVquqEyjHU5bwtnm+/4SXJ3ivDigY7JWBzev2IQtfGBEwIPiuc2gHys+1zOk5dZw19wn/sP/L3iUvkyLmMzbGVHzdb2OlZr7xpDGmV2PVEhopdMKExOkY+f/pp9JOF3BmZJBm87rJaXz75eIby+yB8S0DAAA=',\n 'epub-shared-inc.rng':\n 'H4sIAJC0cWkCA61UTW/bMAy951dw7nWOtttgOCm2oVsHpMWwpcCuiszYwmwxkOgm+fel5PQjQZxTdZJA8vHx6Unl9a5r4RF9sORm2efppwzQGaqsq2fZw/JH/iW7nk/K2uuu0x4k24VCz7KGeVMo5bHVO1dPydfKBWWo22i2K9ta3ivtHLEcSSIJOVWP1Qb2veHeY8qdTwDKD3kOV++xIM9fAG9+P3wDbLFDx+E5YJ1p+wqh8bieZbjpVzl7W9fop97ViY1k6aIi08fCNNUc/twsvv6D+5/w1zTYaViTT/gFhEZ7rKDCtXU2SZCCqU/UOuLFdVWqU9Sh13vPfob+r2HocJZCqQ6ajOkTtpZNk+RRx+JqFu1WPeMleTeytbs85r7BONcndG1KC5fzeL/BU7gXStYxiofjcNBSbc0FZruGpeObimPApOU9MRbADcYb1n3LcHu3XEAYbFCRjC7eH64fIfSmAQ1GCyT5/UcIBFtMQBUB9R5WGBiYBn8InW2jGTr9X3ACuiD80MeCA+sDrtMdzjJ5dJ2QtM6JW7XbR/pjjv1OMpYTaKqwLeB2ebeAtdd1egxjVjQNWZN8kI6i1KFz7DSNT2lQ5yS6omo/Hj1ivW5p+5xVqtd+pRomlR9IHb6g+eQJakbrFLQEAAA=',\n 'epub-ssml-attrs.rng':\n 'H4sIAJC0cWkCA62Ty27CMBBF93zFNKwTQ7toFSVBVKLd0AqVInXrJJPEUvyQ7TTw980TCQRtF3hhyfKd6+M7drDY8xK+URsmRejMvZkDKBKZMpGHzu7zxX1yFtEkyDXlnGpo1ML4NHQKa5VPiMaS7kXuSZ0TYUgiuaKWxaxk9kCoENI2S9nsdM59NaoqPhrUde2xVGWdw/1s9kikMqPSGF6eKOuHUTcn8xkxB2ELNGwsuIZlrK4SW2nsMKIJQHDnujC9xQDX7QxTzJhAEJRj6LRX9Fp6TxUetVZ3hzYq6qcyqTiKPpcIPlbr5Re8v8I2KZBTyKSG1Wb37HczbLdva2gNWFxZNK3H+ZgG5Ny1P+vWV7yAf4Z3jeSoGOJpk/FVMYTSCDRmw1ZKm8qDwj69TSEFWpas9kqjad+oQwZPcjTt4id9/r+1gpaqoDHa04ZcQhuV/wdcjhV/4QVk+ErR5AcF/5kBfAMAAA==',\n 'epub-svg-30.rnc':\n 'H4sIAJC0cWkCA62QUWvCMBSF3/MrDiuMDWd8F4o4FCe0c8xt+Ji0iTYjTVyadg7nf1+iL927lxC45+Z8yQlJkFyjSJIAr/NsusHzAuuykjXH1jrMX94fx+cd648F7gbYPL3l2QMGyLmv8uwevQqcK72HKFPqVkjc0FFtxUju22J4qHyth023G9bh7lpTZ8obHAnQeO48UoRZ6MJKsOqkcyoQfCXBlGDg3jtVtD5IFk5+tcpJcHRcK4FNnmE5i6huR+NJGsS05wntEYdGjJcznCbkRELWqdb2G6yw4odBallL48GbAC0rpQXsFiz8olQ7syo+ZekZSOT/06gyRjr8pogcGjHowWPy8d7JrTr0I1gDFlAMzlp/hsZZg9sU0UEvjksS00zIH51Iw70qAgAA',\n 'epub-svg-30.rng':\n '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',\n 'epub-svg-30.sch':\n 'H4sIAJC0cWkCAz2MSw4CIRAF95yC9H5o3RkDzM4T6AEM4AwJdI98jMeXjMa3eKuq0vM7J/kKpUYmA0d1ABnIsY+0GLhdL9MJZit0dWvIdzlgqgbW1rYz4tZLUuySU1wW9NUn/HKtMIGVY+J/OpJL3Qe5lvAwoDCzx+inTvHZgxoioN3JXdG/lBXiAzfNt9mkAAAA',\n 'epub-svg-forgiving-inc.rng':\n 'H4sIAJC0cWkCA9VaX2/bNhB/76fgXKDYgFjKNgwbXCdFhmXFgC0p0nbYo2npLHOhSIGk7XiffkdSkiVZ9J8mD1UeDJtHHn/3h3fHY6bvnnJO1qA0k+Jq9H10OSIgEpkykV2NPn/6ffzL6N31q2mmaJ5TRYS+Gi2NKSZxvNlsos2PkVRZ/MPl5WWs19mIIDehJ7SepIDTJ5G5WULHicwLaticcWa2MRVCGvwpkeJ29quhWM1bu7C0WFT7/BzLQpczQ7too1aJWSlwXK9fETL9Zjwmr1/ij4zHjmEKCyaACJrD1ciKbkdxnE5SmaxyEF6wa/Jw++fNP+TuPfmYLCGnZCEVuf3w+deJ+yQf/35vhzK2Ro2TSs04NXm0/Ozf62nc5er3emmhPEv3hZBPSyDaQZ6UI2MPSxODpBlLZ4Qao9h8ZYCkFJFtC6inKkArsMT42YkUBsGTXKbAiVx4FoYZDshFpGSGOgCWifv5v5CY2UXJh6BuOJcbqxu7pFZZxd76zj48asjMetHEQpoRpokUfEtWGlL8RqhliV+Bg1VpxYCQb1kEEanch/ILope0gAsH0cCTqZd8V665XxpQG6ZxDjMklaAJ+jTCK6QyDumacobaQaAElJJKR25prfGuaR8krr/120zIG27eone9yczbkBeUkPZcEUkMta440DVUQzioYLGbGzEhQI3iIN2aWO/o07jLcxqXANyxiP256D0iJa9yWXsbay1rrKi0TXPfw0y9AL1Mqdg25WvxsWfnj98aHoxO4skp0QUkbMESxLK9cAfWQvPuZT0xEAIcZgxWoVBwU+2lQ6bcofFMa14t0aqzFi1Nzn+KjHwEUVkIOVc8ekW+EVsi8SSphuQhcTJA1bHEiVXL1OTuR8T2Dpc0HAieEiicO9RDlqnLHaNrlk5j+7NN15ZHN7vsx/2mn8btfVDyJpKjiqjF50wbG5Kqo002qB6MTu0AUsWMkLICDlyC2T+IU1lYw1Pee/Ist8izs8pvHL/ussN8ml55iMl/oOS9+gtjcJBNyxsavLpLuxHi2ZrH8zdnaQriuO7rqc/T/temtT2Bq+yHbmZ1Fwo4D/W0KqEEI0+ylCzZqactRCs3+x13orSnupTemjKNd7wPS9WzzcmCTboVxGnZsrXmrLzZBnssi7Znv2RO7eN8OMN2D8kJObZP2L1NsLbPpfDUaIFB8BTODX85x9a+cjzNxm7uWbb1oI7Z1M96SVs2Ob64DZtCHbYd5lFbWfQXTW6lLcVPS5eucLb1+BIVgqWxW17VV51rQVV+USHX4Ktk93EnDUxwtNqSMIE8cROXPyjXkgiAFAt/SeZAKOoFN5UWpVvv6wRbgCec4h3Ar0fIZY3o6iHngzM7Q9v7QCjVKBApKDo/4rT3rsQ6SUUnRuS2T9PanwMefawWDsw6VIaHHLzj4n1oVymTg0KcULGm1SEcCGSmkkacGwJk4JwVeliYd7frIaBlC2woDUvBLKfZsBBzTBGDAowt2OWwAEu+zaQYHObBeYZqXoOGALjZ7hwE3g0zybAOn97mc8kHBdm26gcH+MPQorLRBR1WTF6JRyE3A8M8sAJ5zVL4qi97pzck97ZrXvnbyLp9gXDvBCWtGxm+M+HfV8edrgozS0Lrd07saLSaJX1LHEr7PtVoNBxoZbQ6H8E3q/q9qNrmSNPt/Heh61Z3se9xyA649lWISIME23kIEf0lP0h19+kQtby6hshZiOAvZEGqvfuEiLaYDNFsRR+k+eL5EPkQa1sShmjoRkGSK3SCVFdTBG2N2fAQzWbKIN0mpRCxjP9BctigLqp1iUeeIE9rNvdGvrP6vs9/l0cIR4IA9lsF2voLHo/6g2jo/aj7shWa1w5eZz817ZQefiK0nrbb/oS3vlqNX/TON43Lf/65fvU/3sBvw5UlAAA=',\n 'epub-switch.rng':\n 'H4sIAJC0cWkCA81XXW/aMBR976/w0mfidntYiwLVJrFpUummbkh7rAkXYimxM8cpsF8/x/myQwKhg608ICW599xzzo2vHe9uE4XoGURCORs51+6Vg4D5fEHZauTMfnwa3Dh34wtvJUgUEYFYMnICKeMhxuv12l2/c7lY4evb21u8CWQUOkjhsWRIqjABIdmwlY5jCfZ5FBNJ5zSkcosJY1yqS66e6Np5NsTp3KpDF/FSI7y9unqPeZyUkUE/OlFH2A2eEhnov+l9EdzFPJEi9WUqQDMdXyDkvRkM0OUpfmgw0IALWFIGiJEIRk7mgpusqfQDdxnyta6pgshwwf00ApY7N0aPk/sPP9HDZ/TdDyAiaMkFmnybfRzqf5RDIAghy8kgdn6XHm6i5rVOrbCF/lOmc5iTfCpZdvEpRdQOFZmFOSpEwLLFQCKlSBxcRXEGX8WUCyjvdGb6JIHc/zob76R3JKuGkjSUVr6HCxW65Tjv+f72x4EgiVqS5Svwv2yoePyFFU2MF9hRt6TbjyymdoMyCSIE8rxHqEZtGNQRldV2KWMgTCeaRV6qrEe3z6qurH8WhdaK6BZYhB2nscQ+KNMkcVaVPVr5b5Sep6fNxVAgdMwets3r9gFt8D0JsBFe4P0GwRvDyw849dudV2eXiDM3s6exIeyjNsndtIIlbKTRArOmh21SBzS1vMk7XhW89VODeE/kQ52w0O3h3rMf+h1GCmeuAkZO/UKWxXicHQFI2LLDFNU1hjom1puKmdPnhTvMYndd7hDrQ61Jbv+wdgWrNdkMevbvFdmbiSlPgeqazlNZRgr4lVIBi0F2mcTEN7a3ms6CqNPgNgZ39vil5lJhHTUDynVpT+aqqIp4UGlGZ2HjQ1wF6FssyWK6v4rs7wtjAlS55lTAdgUlzObQMq5aBpZprnm31mTzsO1rH1FHT7j+c9Mafrvjr3M/8nDxTTq++AM/R1LExQ4AAA==',\n 'epub-trigger.rng':\n 'H4sIAJC0cWkCA7VW32+bMBB+71/h0Wdwuj1sikiqTkunaVs2da20xzpwAUtgW8aQ5r/f8SshBLNGTXiIAvfd3fed72z7ty9pQgrQGZdi5tx4E4eACGTIRTRznh7v3U/O7fzKjzRLU6YJokU2hWLmxMaoKaWbzcbbfPCkjuj7yeSGIsCFAoTJnAbMdlgNCXsRUQUWGQ1kqpjhK55ws6VMCGnwVaKlotGkUvnqIBkP1bpN95FK1eaxZcmMzgOTa6iizq8I8d+5Lrk+x0NctwoYwpoLIIKlMHNKxp7RPIpAV/kQwKahDPIUy1IpnJOHxY+7v2T5lfwJYkgZWUtNFr+fPk+rX9K4E0igdCpj9J9rn/aj1rnOrW6A/nOpcdqQfG5Z2gi1IvblaV2b8iCGCwM6AVZA+wk/algP1NRjxujMof8HciEwxw7o034WnzbcqlWk9TKOr2iTvfE/pu1LVUpnySA9bPlUijoGdnKXW99vVL3HghLd8R9Fo3EQioPj1cPaAKuX10HlKgONG0cHPSr9KACWmOWJuesrOa7EaXFVzDI4ZzwtFYuYGYnZ76xTWqldynbU8Btf5aZ1OLCiPYglD7pDUrAkh3kWy41P6/99W8xDsNlUwrZWG8szq6OGDAfdZk1RgM2WiwGrT7vCcCdpy3ByOctet9RybzpY8ZDhdrVV4H378rC4b1f51RwsQ2ThAAWennv7MJHlz8df3xfLt1PZDamdTQ9y0cocjryd0xDO3vsBEwEk1i4GjYdrep5+s2w2diVd+5gCVd5QbBKaclxKwm5/G5HRw4xsREYqm45ACsNFfonZr4/69sKRKrxQHnr7tLnCzq/+AQRNMij0CgAA',\n 'epub-type-attr.rng':\n 'H4sIAJC0cWkCA62SzWrDMBCE73mKrXK25fbSYmyHFtJeSiltAz1GtteOwPpBluvk7SvJJoGQ3KKb2NlvZ4fNVnvRwR+aniuZk/s4IYCyUjWXbU42P6/RE1kVi6w1TAhmwKlln7Kc7KzVKaUGO7aXbaxMS2VPKyU0s7zkHbcHyqRU1n2VqwTy1I16KI+AcRxjXusmEB6S5JEq3c/Ka1N6a4bKDgYDtVgAZHdRBMtbPIiiAKyx4RJBMoE58Y5je9AYM2tNmOgkLK1VNQiU044FfK3fn3/h4w2+qx0KBo0ysP7cvKSw9YTUE7bgEbwcLHrI2Vtm9Jw6zbr1fhfsX/R4zc9piVNCoXcOx0kMNnOxZq7Xp6eN0mgsx57QGUSPpBA7nXJ3F0fnkysW/0C0gn+kAgAA',\n 'epub-xhtml-30.rnc':\n 'H4sIAJC0cWkCA+NSVlCmBuBSVlZQCHL1cYxQ8HNXCE7OSM1NVEjLL1JwDQh1sgKTChEeIb4+ChraCsFh7joK2gq+iSUZvj6aCkgAaA6V3MOVmZecU5qSqqCkp5+bn6KfWlCapFuRUZKbo1tclq6bC7Q7N0evKC9ZCQC+OuZnAwEAAA==',\n 'epub-xhtml-30.rng':\n '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',\n 'epub-xhtml-30.sch':\n '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',\n 'epub-xhtml-inc.rng':\n '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',\n 'epub-xhtml-integration.rng':\n 'H4sIAJC0cWkCA8VbX2/bNhB/z6fg3IdtQCyv3R8MhpOiA7rtoSuGpcX6GIo6SWwoUiUpJ/72PVG2k7hV4gSNf3mIbYl3v7sj7/jnjouXV40RS/JBO3syeZ79NBFklSu0rU4m79/9Of198vL0aFF52TTSC25tw1yeTOoY2/ls5snIK1tlzlczG2bKNa2MOtdGx9VMWusi/3T8JnFO1GO0IfpOxc5Tant6JMTiu+lUPPsWf2I63TDkDyFeGeMuxTm1XT6Pq5bOhbNCGiPIUEM2BkFXito4T63FVMSaxHlNsjjfNNm8aSjKQkYplLORn4sfchnoWBhtL47T22NhXVBet/FYbD/jynCjSE1rZOy/6Wjox8Q0/XvrIg3o/5NQ0n4fRRdI9DBNw8IqpqqcX4mgrSJGsCR0EAWV2lKRCEvn++fTXQkzcebEJfMqCqFjakZS1RvFMia+NpcovWuEbFujGbLvysxbtWkwwAkrGzqZtN5VnkLIZIw+THpJc357MtEM6w3JJaVuZTo5L5zqerTE81T89/rNqw/i7V/iTNXUyCTU63/f/zEXPTGPvr6ZcGV6KEJLSpdaBX4r/n73zxvm+Wwx2+U6YH27QZQ6PCn+FRXW2t4cVGMSubb/Ic3wkx94Ktc27ImznjgZcTJbU8xukixmg9m/7IFCS+OqPez/ZBKwqh0U32gkPDvqUu7jAE83BNjZtYGKELp+qlgdWIRtrMqNUxfjQQppmdoj0Vs/0IHgO4NEx8YFB9XdYZUvoMoXEYpeQNH1EupzVJE9tAG280C/5B2dBqJuoMEw4bOEhBYkWQm6YGQo1BChJqdidIzoBrqUbnXaDSNFGOyDnLnyj6SgAbyVfPKBFECXLAB0FDQSumiWng4dobYBoiHeUo8GiOA6r6Bds9QFOWjndIWGChC95N0eUIBSV+AozRIomVri3OSOpVYdG+gGIHcF7CyirT0fBo+aRmY1o0D9N7MOLQNB51dOOzhOQiAlaDjzgJ3gPTSEyjyHHowV5aEj5+0VHjQ6Qkc+9DwSmihwBXbhKKEeF2QD3VNc5NBtbeig2gcmBsJ/gjqejlDHC62ETjZ5Ad2u5QV2toNGvcuDw283Ip6Wui/xGT/s5MIOaNr60Cvga9N0+WrULOkl0C4eevjpDz1NbTsl8LFvajJ+rPAcmsl/AUX/GYr+CxT9Vyj6b1D0yjvs0pFrBvcs8Xu6Obyv7/nUcX0kLDitK1XviE7r+IW0k5XQ5L/0USsDXWvLwOkRqL9ywfDBs9u3cwOO/QQqQSM1LC8RZW5ovGA5vcaWiyLSNjsHUQY+qXBxvYSex8TeTaACAJJUO2lUKDq292tUfLqkfMo3HZohRElbXD95MRq1hgsgqRW0NAceurgVPHShe8HI/OAnJ7c7oYtthy2x5QpGowNUhj1rHMbuDHFlfqmvRM9A512k8NibQwOjJElmw8PXAn1kGfTIHM/K/lHanJ3xhaz7dblmuNVmV70vFQyBDd0OAXuj3q6CD2ElTVuzCw2DZ5zhYnZb2ntt2N+ly0q+ZHjDgqp2Wt1rveH+WLjUUdXby4ZjNtxVKVENuEmX/eRMVSp84XNU1q/DbMkeALW5i/hIs/CYqiryD7XLmuwhgt7Zd/uxX8zWt2ZPjz4Dca0XXGc7AAA=',\n 'epub-xhtml-svg-mathml.rng':\n 'H4sIAJC0cWkCA7WSsU7DMBCG9z7FYRZQcQxiQVGSCqRShhYh2qKubnKNLcV25DhVeXuuacpQqWIpHizZ99/n/86XjHamgi36RjubsofongHa3BXalilbLl75Extlg6T00hjpgdS2iWXKVAh1LITHSu5sGTlfCtuI3JlaBr3WlQ7fQlrrAh0dRTpyl30utwm+zUPrsdNmA4DkinO4vsQCzv8HqG1etQWC8rhJGdbtmu9UMBWnQORt2dVBOhkXLm8N2kM/MvgcT59X8D6Bea7QSNg4D+OP5Uvc7bB6W8ymcDOE+dfkDoYwk0HNprd71nFdJ+KUunckekvn7DXbktNjpd7SF//aFOfkhh421ePfwkZJj8WJrsCNtghWGkwZDYdxNsIKTVQrLxsywIBu16ShsHI6x2PDCNynkeGeJg64i5H3tZ2iE9GPejb4AZqam2kcAwAA',\n 'form-datatypes.rng':\n 'H4sIAJC0cWkCA62VTW/aQBCGz/ArpsvZdnpI1SJMhFLSVoIcEipVqnpY7AFW2Q9rvW6Movz37oepkrQGO4oPINvvPvPO7Ox4clELDr9Rl0zJlLyPzwigzFTO5DYl31dX0UdyMR1OtpoKQTVYtSzHNCU7Y4pxkmjktJbbWOltIsskU6Kghq0ZZ2afUCmVsbfKvvFkv7ptbWl0lZlKY9Dm1C7dF7hga031PiVkOgSYvIsiGL3FBVHkgTlumESQVGBKNkqL2EWOBRPownNWGh/ZSuk4V1klUIakpnAzX8x+wPUXuM12KCjY5fB1tVzA+Rg+N/5LcHkazMEoJxClYx2u0SR5SQ2x3jrP/9hfflvOwVtsM6Fx0xTmsBvxzgh+Hvs8ntco8dVMQjmPVdY2iEEt24o6v1zObjPNCgM3uK24bbp5XWgsXYe2GXVgn0pKbBvZ3u1ux/6gsYlEXGWUt7laoSiUprx3pQ74OOB72TqYOQrvjhRKmt1JZlB1ht4j3p1kelFnpCvXSaQXdUbaw8k4zXPXRq2N5zS99/cZ+VV+nk6YTmH6HbdMcaXbcr50L3vnHJD/OrAzy68cDOoyH4eDCA/No0Fz7iEFMvpJo80sujqLPv16+PBIGsmj/T8+lQPznpmdqgy3irVGete6pSusDTRqcHII+lfOuxA9lupJ5M77IJW0M8Tsm/nU4vhaycjLIOh6OP3rLsR56WySNN/w6fAPcgh9dfUHAAA=',\n 'mathml3-common.rng':\n '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',\n 'mathml3-content.rng':\n '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',\n 'mathml3-inc.rng':\n 'H4sIAJC0cWkCA6VU0W6bMBR9z1fc8bRKAROyhyZKUqlRK1WDqdoSda8OOGAV28g2Sbuv37WBrlq7TG0RQoDPPefewzGLiwdRw4Fpw5VcBpMoDoDJXBVclstgu7kOz4OL1WjxKQxH4I9NxQ3gaSsGGcWroJbntMYHfd82kFJZtrRk8NmtZukZTKN4DFTCzyztOWjT1FhjURP2SkPBTK75DjUB2f5QSmU7EJUF5LSxrUZMT7JTtgJuDRir2xyXWAdT0jJpI0T1wDuOQFoU3FEha15hi8x4ZY7gUncieK/8WAda84JapSPZ9hyG6QPP2XtZr263l+uK5feRK+8Z1qp51LysLExms/MwiScx3E3XaNzNZgxX39c32Ri+Mq7OXhQgNoFM/eJ1TeFatRLbRbHXcF8c8ex14jFcMu76dgp98dZ0PhYcfeW71g+h9mgMfnQMBq6i0w3TglvLCkBtpr1tFt+ZwR2U+6H29ujA3xR+zo41xRtpWI+qrG3mhByPx+g4jZQuyVpJo7TlrSApK2lNkjhOSD4MFJqeE4eKk0kynYzCEOOJZgtBNUizDF6SOnuJS6O/ZGkAGHpp5vQJrFlNH2Tp0dKgnmjQ0B2vuX0kVA45NMRvkK5avEHqX0JP0fXEK7RlwWVet+hypdl+GbjtIOppOKRay9LDEEjnhcpbgW99byu0zkHA78osXZC/AY6d9PQnpBrNzFBzSu/2Ge6jmmi4OK3mkD5BBv8OEvPkwuiKALeX/xUM8zvQ897+19SC9OlZjX4DSOLEzA4FAAA=',\n 'mathml3-presentation.rng':\n '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',\n 'mathml3-strict-content.rng':\n 'H4sIAJC0cWkCA9VYX2/bNhB/z6fg9LQCkWU7xdAOdorF6IBidoYtKbZXWqIlYhIpkFRs79PvJNESJZOSbbQPC4Ig4u94f353PJ60+HTIUvRGhKScLb3ZZOohwkIeURYvva+vv/ofvE+Pd4sffP8OVT+vCZUIflVC0AbD3wwrGuIUHsQ/RY7WmMUFjgn6sUQ363foYTK9R5ihvzdrrQPneQp7FNhEOy5QRGQo6BZsItDWqmRc1UKYRSjEuSoEyGglW64SRJVEUokiBIjUYpwpwtQEpLTgiudHQeNEodnHjx/8+XT2Hv31sAIHv7zeo89/rr5s7tFvhPJ79ERoAv6/azd/lbXaiIIZui0qd/gOwgcOgCdAwXBOREaVIhEqWERERY6CNam1lOZe+E7tS+FnDtHVWtfwD5NESyVK5T8HwX6/n+wfJlzEwYozyYWiRRasSYzTYD6dzoPwFJAvtU4IajqfzR9md74P2YoFzjIsEJNL71xpyUJQJqf6s1l7CGrAEBUkxQcWV7JMBg29QVUdEYacHHOypluBxdFmAJyZBZDtl7BMpX/aIb1HCHQRkR1lBDGckaUHAarPh7xCAAsTDozUD/AoyE7LSVDEgDbpV/mFHYFFKmT2ZWpflsdsy1MrVlbo0YpAlUZWQCaQCLshIgQXdmh7VECM3b3T8iJoeVkENX/nVELwWpykJIMj0F/vUTXBqq5ol3020Wep9UNrHnOk2aj3QcJUpWNwk+GP3tc6s+JZxtkvqvWlkdYSZYW1gXYLCRbecFqQRwpuxUQsgvqxDwuCUxcW8WKbEheakINVwExd+dR4PcyGUe7UntVGwpbcBrTn+Iwc+1FxHUDzNHXCg+d/ieC/iw0Xpvq+ve5JY6cub1p2iPjQqToO9u0HfQcurNnz/vLNWTeLuW56LfZ/pc1Vnc16r7hGew69ted0VF/QPnheEoNTuxNVM2k8MGUHXTB60PfpT1U23T1qqH+FPMtTchiB/Zyn2Gn/JBRiATRTzNyCTCo4DC58V7CwDMWFv5FQcacbKcxiLkwSJwRTpaB9Am5s0EahXnHH6YHDfmQ6oG1QGT08Wuy2E/RSbX6G/0/+lXMbKst26T2vKuCy+K48iUYAerAat9DjvlVhRDGi6ukNiz9OCs77rznxgWRLZlfUrb/aZc20gQxT8x2v6guLoh6DrVGY0GgYvcH6xhLt7j01ckacmetdtNDJTeGB3JUzvj13LXJF0OWuG2PubLWcpm6AN9exW+vAzFS98NjnJAO6gicpQmOdZLk6XjkG1G9a9gZrYpb3swvb69jUNjTm3TxmnTk41lcHdNVvnHaKTMzynjpG0RZL8tP7a0e3M9W3B6cdOL/AauCJMvhkMX7JuG5o++VsZ6WZBy4n4huRUH7VgboTRJYf9Tz4SpVBFykNVBfASBdp9S4C/R3p8e4/rAyS5ScUAAA=',\n 'media.rng':\n 'H4sIAJC0cWkCA91azW7jNhC+5ylYL7A3S+2hQJE4XgSLbHtIWqC7LXqlJUYmIpECSXk3ffoOSckmJVGWHNlBN6fY88NvyJlvRqJXH74VOdoRISlnt4ufoh8XiLCEp5Rlt4u/vnxa/rL4sL5aZQIXBRYItJm8xreLrVLldRwLkuNvLIu4yGIm44QXJVZ0Q3OqXmLMGFfwkYPEeDbWIVupRJWoShCrm2IwfSnJA90ILF5uF4v1FUKrH5ZL9G6OP7Rc7h1KkSCAiihL8iolaSNLyRNlBDFckNtFQVKKI6yUkAYKyPF1ypOqIMxGuUZ/3j/c/YN+/xV9TrakwOiJC/Tbl8cH9PM1ukt3mCXg/L7YkFSv8pEzBbba1f7v3Spue7VrzR14D/w7iI1uKkUkQCsKzpDi6FGHje5zovVkCB2FSERO8I7YL+ArXmo5zpsv4CtBnrqbGeFK8TLHL4t4bxu3jcd7KyGtOE7ncZbACQmey3m85ZyX83gq4JBeESKpM9DEByfZRCu4lFzQjLKw71Xsn/UqtlUyWDCHM25Sr0m1WrclB41ky2myzyb4YofziqwbxVVsP7fkDmzXAaRts+B4zE0mBSD74jBixhkJoF0XRGFNdCG5jvYCke7TPBBqSx6OtVG8AGZTTAG8jiyMVStdAKct1QBQVxhGarTOBFXySiQkIsDvoa722ahco/e5urHq7zN1E+oE2pNuaq77Q4TdPuERU42GMkbEgYL6VGwfdqJve17FNZJR8XttvaeZHdaHEQc6Y2f9foARTBaO0iApe3Z68pmDgztgAol4EPUFqykqqgSNgMuWpCjVvldPzTMnugASRxaEUlAgTmeHpqKw+dUkrI7HODpW0F4yd8rEDkq2WELF4Rd4oLn7OfMvEfwP8cjFYMWY+nXypW3lssM43nrLZNnRlHATU/SU86+hHf9bq1leMhbjacmoj2YlC8ckjcXTz0xWbS5icvag3Aos4YFsn7EzxbL3e7l4ZuRZ93lsJMU6GKKSS1j99Bna9bUlNNuqeXx9panazuNKz8lwvjkcwukO3XOIsIAthwEPiLwsc5qYCpujT/WcTGjsdqVn5R/vbANoPGkQjd6FDApOI2Ikg13bTe9d3SQJYHKFl4PkJlvo6Doq4ZnX0T3T5Nth9dq+zTB112/2ptuPHQslcPLsNeOeVtw5EIsBbJkssdDP44cuMw5/u0O8VQx+Rwljr40OHR7BNxuQg8icZTeQ9kwwYYU9qkmrjI0FVykdMazcaTU7rBiL8cOKUR/d4C2co8OKVZuruTt7MDysnB7LkWHlHPG87bBymcbbSZf/GQv2psj3y4JtsjkPC/aVc3cluJHouydxdi5AhbKCHDZVCBc7yJwNMlaWHs2/4+nRqI+mFItu6AWT1ZiLSVxvr2CSQaZw1oieKRu+GOg3m/CeqmWWY5eTpz5duM5yvCH5PK7gCHCVDzyRjSfIzuYGhltHFp5qZbVRVOUk9IJ8nWADMyhPiUwEHdZJtuAEbnQnXjqcOEa3s+it3hn1pWUYiyMO4tE6cBM+/bGom9ShewpHqJ3Aqki/1wSIoOjVlb7+LSqp0AaMm01C5gBvEFw2J8+ISrjARlhKIkx+AM+n5HDbewr6po4C+H1xOO1rvTM9yLmUPuGd7hPN4McGg43qo63Gw1W9bVDWcnyHsvqjW1QNbKhH1SpzNSnP3bxdqp0RR0ZcWujplsLsZ/fMCb/X/zGHLQedltJOutd0Cu/c+l/4Z4JXpbN2X0D+MdcNofWCPxBKYB71HwNXsYeig2mUk5mxe5jG3VWcMDy7FX+cHDz0AYL4ZDyiWnXPDvXnSQxR20xhiQbhEaZo1GZkC9/lmzKGeSiG32LIZoNbJX/U1mSen54zMoJ/RsPPjX1PdLoyzE/v1lf/AVyE8WGsJwAA',\n 'meta.rng':\n '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',\n 'microdata.rng':\n 'H4sIAJC0cWkCA+1YTW/bMAw9r79Cc4GeZns9DChSJ8UO+zg029C1wK6KzcbCbMmQ5KLZrx9lx5+NHDdNumJobpGox0eJIp8VXNynCbkDqZjgU+fUe+8Q4KGIGF9OnZvrz+6ZczE7CpaSpimVBK25mtCpE2udTXxfQkLv+dITculz5YcizahmC5YwvfIp50LjX4EzBXKx2rZWaZmHOpdQ2kYUl64yuGQLSeVq6jizI0KCt65LjvfxI657GMAIbhkHwmkKUwc3JBXco1pL5aUslMLEVYSCpnQSiTBPgZe7NCNXny4//iLfvpCfYQwpJbdCkq/X80vyYULm1Wqz1Po7Dvw+aumLcQ0yAXoH5QAOiczM06QawCEJt4PMPaYhRSPHr1H8PszOuJkU2UGAVSgyOAiyydCDALPIDhv43cMM/DLnxqZffYhVGuI0W+S6WtWd3sS4RIlwXFU0Me8qmJ05FQkwQKo1b2VVI7rGGqRmsFeOZS4NkGwboEkYCxbWdw4H7miSw6y2DPxyoGfQOvw2wj4iKHJ2IIDWPFokTOkWOcHhu5wL2SJsPYpcMo8ulEgQv8nmIp/7KIHf+NlHjHh9BiKsZ4eoPylpHIL/FjiHDuu7WlHaVgBKz3ZH9Dl8SHgONwuq4BncJIz/9iCB1MtiSRWKG1sLvrm6dIsLGJEfZf1YkTloarxMyEmizw0WqarRyVKf2zqu8YdDLQpN1j3sxp0oC76Mc5Cde9MzqGJZb2CrZPThA39NZsQ29VDt8sFyKHikLGyRsZix0zO+3SqToJD2dkOh4/Zm7SQ4Xpoe+s9kSwdDxVhhIjdGIrJIuxIt7u7lII0BiITiDd85PgtwChFbV5o9oj7tKFpAiv1plM5YJPP186bNhukECONhkkdYAhk3Vbk+7PUnzgMWkC4gQnsvFFgmuF6DYWIoJSRbsvZNH8Wrr5rs+Uclo54UCXhFhW2VyzFr1vWlKNuPXYv1NDc535U2XeZPlu7dptX0yNLNw/64odON6Y1lbPhFbnXR73FVKzQdkFStDvMlBhq9I3CPeWDeFJStOz6yQI/hPyghBmrRuNLePcp/xKfTEl4Eo3b9ehGEmhY0lk6K+q5Ot+Ly2JLeIgkNwA6S0CwbLQlLkgOSsBvFviThJtRXSfgqCQ8gCTekWiUomhs9tn0OgVleBrrTBtA8tpp9QfGGpo2kfOyTQNGPDaPiW3V7E99QkLY0wR3VwnZHgb9++p8d/QUQ0Xp+LBgAAA==',\n 'ncx.rng':\n 'H4sIAJC0cWkCA9VZS3PbNhA+y78C1dkypWjc2hpaSae9ZMZuOm0OucIkRGJKAiwA6pFfnwX4AkFQ0ihx4vigIbnY5e737QOEw7f7PENbIiTl7GG6uJlP366vwkTgPMcCgZDJh2mqVLEKAkEyvGfJDRdJwGQglSgjVQoSaLUr1PxZGrvd7ibGVB6Mzufl/d2vwZv5/DZg0T6wVGKssDoU5JE+CywOPf3d0iiD2iL49PT4b5SSHM8aDTldd2auJuEvs5m5/4dsqY4JpVQqLg4rI9c/E7B0N1/Mf1uhPDlkGWXJCsVkQxmJEV3cMYSVEigRvCyukSAbIgiLQKbAFNoIntd2JiQjOWFKIojmGsU8+khVRszV76VKubhGDG8f8TPJzNV7tuGWC7dvlrYLein4it5FGZYSYRajdzRGOY4JoiymWxqXOMsOiBcKAsNZY2qxXMyX8xVSGyoBHLFCUYpZQhCsNiZ0PPS5VEQixVHEhSCRQqGGEGkMH6bv/5wGa3iLVATHiG9QqMheBRW05mc2W1cXDdBSYaHWV5NJWMMAAeRgCrAASibwvH1tLamzrJJOwi3OSrLW2TBbhEF1Z/SCVrG6BwpqC5odcNQ87b81Bb8bw5yRD+KJi0q9ZyAnCtcG4D39hWFQm/TZb8ht31Fz0LzCjZU23oAMUhIYIdF/EmVkTyOcAQcAtcBUJw9nwCnAay8vGf2/JIxAHhhNBJkXg7tAEZJ4D/TGGYH0wsBoStBff3xCmvocKwEpT/MiQ6UEuhc3t9dol9IoBXW4Z1yhFG8JMnDPgGgwKEjBBThi+eCmRh2lw4yGsIeDhbTOnxZpFy2L0Tyx+BgzZvPeZ+kzEdwme0hbVYkNG64rR5kbw2EIxMD5MSg8DnjBOGrQgsPFI3AAcYsTb59wcUkSX5oRLkF2HHVL7EIZsHlC27RWv3rVp060AzDxN4ci1CY6BbsvNE8dmEcztcAJDDHZ8O3AMUzXfji2ohtMzwd9H8IANi0YmnE1vux883Tm9vnA/3Hi/bwPaXctmBnWGqmHiU/VRahdaiMeBlWAw1h1yXhCbR6/5khdQ1JETWF2Vhwj54EC00XBGh8wtuibg/P9Imw6h2//YYlGuvB4+XYd2I3F133P9rXqU35nO9mP8da0Etfhqiv6He5kRzLGmzCDfDmRfxeX1gm7RYYPH0RMul3BebYnlfH+PBmfSIMNZreyKcN64fGx0I4oz4wczISxLGwHk4fUnuw1t8zRShgif7aetQMZqI0yrRH7iEVCrEFvLz6/M4xQYotevE+/VBkeT+se8O629awi0xJvoR3V/nreLPZHqsmSfj/2ajQ8H976Y+9bbFG0a02Dj1JOo3ZPXX2+w+EIU/a3fCthXOQ484pkQSLqyMLAMv+zj42XmRpnt5jxTO0LX+M0bwr8hOmLE/zn2iicvYMzx1wewtvnw1D178nNuYdU+3viqOYJqM3x1QUc+jEBApzvRL0NNus75eYwc+hMBsenU/ccuz6HhiPoYHF/fxfopbLAkXa6OzywKkVbKWEY+OvFDqN2Y+CaB6eY6mRsD2KtRtw+qxypummmRNtYvQuE6jqvbbVtwNYjy//aYyeGjgBzSBwG9f8R1l8AGTAiG2cYAAA=',\n 'ocf-container-30.rnc':\n 'H4sIAJC0cWkCA31Uy26DMBC89yusHJpDGtNekVDOvVbqBzhmaaz4JXupGkX599pQwGAoF/Du7O7MjgUhpIaGtRKJZgq8ZRxIRXat06VhXviyC5fIS2NB14a3CjSWP0pqX3KjkQkNbvcUGgnNZVsD2dFCmbqoGTK8WfDUaZ4BwkRhJRxdaCpQGO2LsVtfECs8MoeBj+ENHdMkZsITX/NENaRAQqRJptR9DqUMUQqP5HkRj1+x8pF1H0uqvyHh7MS5RSDf4HyQEIbs3+jrfq146NtrccZgIyT4l+4ohb76U6d4ls0FTale0HheCJriw+CJVF5TEVAWbzlgnfUhY0rGpSyJknuK22D5D8mEY7b2ppXyaBlewjKG20Y/P97JgzxnYAW1YMcIiTYxa6XgLF68wsDZ+tCHX9kXHMLNTgzMGA6rGgCddblPfbj3qPteKO9juew5duHLvKj3JMYOEZCC1vkkdFbYbJDJ958u9eKg2V5+inQgU2D3o6EeLHMMoaZorqD9Ru3MurGFEgq62OM0I5w59Qs6SlUi5AQAAA==',\n 'ocf-container-30.rng':\n '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',\n 'opf.rng':\n 'H4sIAJC0cWkCA22QsY7CMAyG5+tTRNlp2t52Sst2E6dDYmE1waQVTVo5LoW3JwUKA2SK9P/fZ8t6eXatOCGFpvOlzNNMLqtEWwLngEQMfShlzdz/KEXYwtnbtCOrfFCBaTA8EKoJS8T89sDAlx5XzY6ALk98HMd0/L7RRZblavu32pgaHSxmIsjqpUl040077FHUhIdSdv2hyFLyVqq44VuWF3OW6MBAPKm0qbvG4N2qY1V4cFjK//VvdPVgjmBxgS069Dyx773o/djTanbreInbvK/4fVyuugJzQS0LWQEAAA==',\n 'opf20.rng':\n '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',\n 'package-30.rnc':\n 'H4sIAJC0cWkCA51YX2/cNgx/76cwMmBZk8WXtA8bCgR52Qb0tdg+gGLrLlp8tifLS4Kt372UKMnUH6t3LlDkRFI/kRRJU3xXmX/6T8v3bO5U1bMjn0bW8Oq+unhSavy02728vNSiHff1IA+7D7e3v+yGcX+hdy3SQDlzR9uQDeMsOyPcNjve8SPv1bS7q+92ZpP+L/qmm1teXdS749DuWqaYehv5VMu+MUKRAB/nx5tR8r14vWFKSS9HjJ4Ukwq0sCdWoNczO/DqP21ObVc17O7EpKofA2oz9Erv+eows1vuDflfLicx9JosLczci39mDk4CDLEXXFKmaM3qAZbajBrN8DQjcvcr4k1ozmJUcuB9pf+Ix1nxyjLAwsuP9e0lal/Qh+5FkZtFBFDcNdSff/vy+x95ZzhPoS+OXDG962dcsV7s+aRwNY2i5/jzMMM5D/j7UfSt6A+TXTZD1/FGgRlX79xZDpVcpifhbRKfRv5DghMPLzbLQUPaptZH0f1X9ncn+ucr4weKEekGetlQ1AL6nj8aMX/M/57xIWDoXYGjM3vvq5/MFchh5FK90eDSsdRD3gTeCJ0zNU+g57q//K1PEBv9oe6Hnh9H9faeahQqrTVaQklXAbBf8VfwMwAuHCfumO+r6oeOH1jzRi3WDibuNEu85icwj1qr1x0DHakxkncr6bbmoCNvBbsxNlOy9a/w0l+DVKTJENwETSvHodnkaT4Ivcp0KxAzu0CbZV9gf7DZcQDh4gKCzcNo4gyJ2wxQTT0QiYkABunfU37xaGSAYdDdf335HEY35BkpOcult82noBRFN7kWo3BFBFkJ1elPHQFFEuKBxFL91xEJoHNeiOmpZ6hJQEEoAjSUbWDTMEvzeSdwlrbVaC0QOVFTtum3H+SR0a8ywFnaNsBGcqaGKHQccavJ0/z4N3yEIjda4lbQlk+NFKP+tEXXTRhbwaEkg/hTnEMLeSuwLtkmnxMfE8ZWcChxLPWHp27XGTqhJE09dbO24vCkpkhXpJ0NSWCxz/Btx1L2ru1XZvmH3yVX2Qp8V5IKIrrIPKyzsWhcFVQA2wpsTOqCgM3RgoRNuIIEyZyClE+CkjZLNBekXGQWgTDKSigmZpb2loQNRsFqNxu1Ha6/pr2nI2FEumX0zPHktB1ONoQqJXJh2ywUP5qYozGuiURFs7TFHn76k7wOATU8n/R9dB01cJa6Z133CM+UTK+nL6lj2K+ttnuBEQFY0OY4zsqDKX9ogBCwMzBpp+mUzPWaukMs9I3UKPMkI1eDa7wb8zuKG6QlQROJZoMYZdRgYn3x+RjFVSgWmAfEgosdUugRSEQYEwwHySf9Mr5phcTHpX4jd0peQmt8KVVn/topyWVkVxrhEH3ZIAd6FOeasoS6jdo02inDuc+SRRvFumPAs4gzfMivPPTigI5PJNDUaYZc8HRGgWA/0rWD3/hkHNsPdhZh6pfDMUMA4i9co7cAn0veN/w6eGcgjexZaOkDkUQO9qveoMzL1L0LIpmH4GPtRhVEAU/C890SM/5PACIGpMxgaOBoa0hp6BRkbBSlhZE8EVnfdt+d8yzzGKIsIaK2C8FpEE9z0qqR7lkpHZC0wfr12JkGJyASNDl0aG7mJM8LX6pApX4wM8x64iOT0CW1UI+eeU/e3RmzUHPCcIMlmGuZac3CuoaciEhXibv01OP6vZ+5ZIC3T8MyYMXrWZmREYloXBbtDSZnGfxSE5z2Uav98GmirjU+TVp3yadJrjXMq72zGyKVRW0ffZrwak99Vnt9dqd9ZtN9dv99Xit+XldeatDzmZBOelfGtLlUOn226WaCKx/3ZGYZVO247qfdZvxNPArQXdOC4WJ+sJid6NEuPWwnwi8MkV7qEiZ+trD76u+2BVLBUcAxw7gTh54OOcAAYq43ZBCZuon5BvUN0RxVGwAA',\n 'package-30.rng':\n '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',\n 'package-30.sch':\n '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',\n 'phrase.rng':\n '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',\n 'rdfa.rng':\n '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',\n 'revision.rng':\n 'H4sIAJC0cWkCA+1XTY+bMBC951e4rLS34PZQqWJJVqt+S9setlupVwcmxBK2kW3S7b+vbVggBhJS0d3LcgueefPeeOZFxNcPLEd7kIoKvgrehK8DBDwRKeXZKvh5/2n5LrheL+JMEsaIRCaaq4isgp3WRYSxhJw88CwUMsNc4USwgmi6oTnVfzDhXGjzU5gTh+yyx3KVlmWiSwkudr1AKH61XKKLOR60XDrAFLaUA+KEwSqAlOqQaC1VmFANrqSJIVEqkpIBr6iv0d3H25tf6Ptn9CPZASNoKyT6cv/tFr2N0B3sqW0dumm1WpTD5yLGPmpVa26BA/TfC8YsP6OTbkoNaoyL7YSLqNvT6Yk5lbB9fO8Aw5RoEpaSBrjOxw2AazWuen207QYDNGVt6z0K3rmJSHaCJg70KK8msSZ3IrQNi3G3wmRNlKsQcmDhNhe/xwbpK1cgtYrQZa6vTMZlpq/GLsOCmVctfNsCyjXIHMh+uA2WCuUcZMVluAE2yF1BV7kPHOOaxUTtxU4SZXzjUf8cGhrMp9FRYdVpfZL9EfKLi8JeIskH2fqG0+Hs500G6k/6uWBdJSGRlIxD+b093szOFNbpvaJViJaEq4JIc0WdoZ0C7o/cSIHDKRoHrpPaTUbmzcacmyNnC/06h5t/Bn7D6YwaU3WkkJ+2ow8mwv1fVYZkcqYbkgmevMyWzElDskFzLXKj/rgh/ZuGE4Y0t44XQ5rJkLwpnNeQBsbj2QzpcPf/jyH1N8yrE+P6g2G9+As++Os7YgwAAA==',\n 'ruby.rng':\n 'H4sIAJC0cWkCA9VXTY+bMBC951e4rLS3xO2hUpUlWW2rfhx222qbSr0axyGWwEaDWWX762vAbvgwDkhcwi1jz/ObeY9xCO9PaYJeGORcik3wbvU2QExQueci3gS/d1+WH4L77SKMgaQpAaR3i3xNNsFRqWyNMbCEnES8khBjkWMq04woHvGEq1dMhJBK/5R6pUKusodycwUFVQWwau92gVD4ZrlEN3M8aLmsAPfswAVDgqRsE0ARva5YwtLqML1K1ntJi5SJmvQWPX9+fPiDvn9Fv+iRpQQdJKBvu6dH9H6NnnV2meV/bkLcRa3Pmru0Pn08UFVF/OG/NGt0m6i7she3sbobolu2SYcanTNN02tcKAYJIy/MhnQQ2KHZZi4Eg8BQcm0gSkF+3hDiLmqIDYdKSFwrOSBqDWby+vQaZ2vDplL0TpdZWTtJnHybOSsCnDRptzO7ZVzgXXfJpErBfsCThDPtXkTH6FFy2gi4mFawq+wIJNevdVOFtg5R/TY0VcJtfF1fj1WXgYumk2j7cNU7vLeDOrZ0GTo56mAMssiGCs9cwM4yBgoZU8qIYlzljOLqLBm3am4jdzKGfWksVJ55dhDS0Ujv0csVprVs550+E/X43jTLN6x27KTMmFIThpQaP6KUf0Cp+caThbqu4WT709PZM2F8cMb8l0RHn6SO6USw8tMp+tMJBqAXHEBntIDFujIP2BaZzL8M5KWrYMJV5B+gvgnYnWxtYp6KzH3nc+FHkjPjvWiC9aLxzov8xovm852Fui7b2f7MNHqMeXya/ySgA0eW89xIn02QPhsvfeaXPptPegt1XdLb/phEpW+Ejrzlf5zqw3S7+AeHiezUyg4AAA==',\n 'sectional.rng':\n 'H4sIAJC0cWkCA+2aXW/TMBSGr9mvMJ00wUUT+inUZZ0AwYa0gtiGxK2buq21xA6OMwa/Hiex13w0jjNlVFTt1Zbj8/rYfp+TrJlz/uB74B6xEFNy1ulZbzoAEZcuMFmddb7ffuq+7ZxPj5wVg74PGRCjSTiBZ50158HEthny4ANZWZStbBLaLvUDyPEce5j/tiEhlItfqYgkykl2VW7IWeTyiKFk7PQIAOdltwuO2/iAbjcRXKAlJggQ6CNRRs9CHvKTqUQMThbUjXxE0pKn4Prj1bsf4MsFuHHXyIdgSRm4vJ1dgdEE3CA3HiR2Ccwgu4uCWKL0OXbsomo6V9sLex7JYu2XCMa+CKtWVTEevLqG5A70Xk/AicdP172TFT+t0ohPRFx6PCJ5OiKCCUfMQ/AeqUviIkPLzWliQhDr2FVhyDkLN2HHLio6tpw98YqdmmWrb1IpmVUuLDOvIMKnpDQ3DeI1Qy9Tq7um2M2srVLGggxDC/uBh13MrXW6y9l116Qy6qGnpnE4b5oSMBSqU26aKyzSDaM5x9xDuZO189vl2PkdLR6u9jRT38jEUklJ1ArWDIaP+1UtJ5NiI1lLj/7qAHFlLuIilFRcnkf1oRrldV/brvKw9RVs/Qaw9c1h6+th67cHm5I6wLYPsCnf7A42SVEdbIMGsA0UbIMGsA3MYRvoYRu0B5uSOsC2D7Ap3+wONklRHWzDBrANFWzDBrANzWEb6mEbtgebkjrAtg+wKd/sDjZJUR1sowawjRRsowawjcxhG+lhG7UHm5I6wLYPsCnf7A42SVEdbOMGsI0VbOMGsI3NYRvrYRu3B5uSOsC2D7Ap3+wONklRHWwrRqPACLiLeKSkLclqQFwy3py6tCgteemQ1ujLyrVLoMaN2cKf7LTsXlVXXuwDVV+lbftaShfN/rGy7cFfF83eDra11ny0BOcfxOhXNqNs+7KkqTP55YQ6jSx3octwwEXfCALKeK7JlaXNz+8paGeYLeP9vO9/4GIhGm+obRjyPQ+YIQ5NX3t8oOInl4PPZEnTHiNnMm8yMsG4y6il6NqMGtNWn8nr/VeNJr9d+vtaYuT272k58/1r58896t79jChHWvN/EyPS17cvTL3/PlYGcSIKU+9v5jK3/ybHmIDMknQQZIa1xUFJ8rlQKE5kiYfbzDNfEYedkLW9RmUWcQXPI/6IzSa2rbIF5NCKGFZ1Ce8oAeMidkh4EbLCDI4t/6dievQXkHjWLoUhAAA=',\n 'structural.rng':\n 'H4sIAJC0cWkCA91awW7bOBC95yu4LtCbrd1DgYXrpMgC2/aQ9tCkQK+0RMuEKVKhqCT9+w5J2ZacWBJHamw0J0eaNxyR8x5nKC0+PGWCPDBdcCUvJ//M/p4QJmOVcJleTr7ffZz+O/lwdbFINc0yqglYy2JOLydrY/J5FGkm6JNMZ0qnkSyiWGU5NXzJBTc/IyqlMvCvgjvOs0MfwxZGl7EpNXO2VxeELP6aTsmbMf7IdOocJmzFJSOSZuxyUrDYxjZjgmVuPDCg80TFZcakj/uKfPv/5voH+fqJ3MZrllGyUpp8vvtyQ97NyX9CxRvyhepNmZPrJGEJ4dLdfWedVX9vFtGhVz/W2E/3Qvi3/hHn5K0w76vnfZua98dCslMBl5oTVM0N3ObSMC0YfWDbS3BRs9XBhHIpmZ5ErTbUGF3sbRbRoe9FVAXjFi7yK3d8Eb2/Cvo8zloEkKPZCwGo3PqhohZ1vFY8rj3qUTczqjmd8SwXPOZmpllqp602AR1IrQSbUcG0QYESToVKg6G5DdetfigUN+CKsSQUk2pV5qEgRGygbfclY6GwXLNiS6FQLC5LChisrOVtP5Shy5xKJgJwgsoEZmUzW4KMN+ncF2l3A89hqn/iHACRpeFypTDwrcJhsBnlIWuzw0n6wNPQfNijlQnJwR2uYFTH62Aaq3hKl7Dv0jhYeBw23kj1KFiS2lkOTkrnYgVK/ah0sDA4cJ4zmfAnDHbJl4IrKGvydUhq7vDxmuYQOgqqhMrXCNV1WBmL0hZrKLRmCUcttUeilhjKIuw2A2hYYEsK1Mgs526BkVjYRsrgHcFhtaaGopBP1EomBgqFKcMSKRWqKMI0eoflMmEoBkKRplUCJT8yMyAtoDrDIHOaMsELFBFyGl6kORxYUWS48AubinkpxH0ZtqvswPcSlcRGxY3iP2rW0YuoWWoflv7dtb7vLyr0s5Dc3dlKqEcfxXF/FcD2Gd6ewJUl3IdbLuTnYzR6xg73UAq09pZfd6UCFeSGy03h+zTA9e/RwLh3f2YDauvN7P2x+rK9r/PoyQbWZRj0cIkcIlQHLOzVBDFZYjBLGlwHSSVftdmCBuhwIsfTpT2vTqJJO53pcA07F49hLto06drbeCGqAP3FqAL0FqRtRG2itLUZS5ia/s5DnLbzhlCmAVBEezzg4AjbWaOPjnDnK8dEZjy1aCb9SRSjoQRdqlHwpF0z7qhM7SkNVDHX1rgSD/szQDqseX/hcEG1yoazGE00at7OQzIGn61hj5oGD4w7qzq9ArzSeceQEwBlAld1lBOAQT2m4Y3j/RFltiYRpxHZvXB2OF8zmkAcbRr72Zl4ZfXm/aXV2/fW1iqaNnGtTMZS14a785BX/EuPYCT+PddQpXpJMMYjYCOPTsLAOq86vNup6KDgR2fiKejN+1PQ2/emYBVNGwUrk7Eo2HB3LhXOoJd/OPifSsZGRp2EjHWGdXi3HWIrFa0BjOgW2BPSXulPR9eC9iWji6aNis5gLCLWnJ0HDbEvwg9x4+VybUFOksn79Ozw7Tud1ky+dSbb77Ps75DPs1wj1f/rLBdN+8dZzmS8b7Nq7s4jm4ObT3zbukPCm9kqVX7zFvTah+rIL5ieTeSYbwhrOX6iF4R7zh94X0TVV7RXF78AQQLnXncrAAA=',\n 'tables.rng':\n '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',\n 'web-components.rng':\n 'H4sIAJC0cWkCA81YzW7bOBC+5ym4WqA3S7uHBRau7GJR7G4PaQu0KdorJY1lFhQpkFRS9+k7lGSJpiVabR00OQSJ55v/H844ffGl4uQelGZSbKI/4z8iAiKXBRPlJvpw99/q7+jF9iYtFa0qqgiihV7TTbQ3pl4niQJOv4gylqpMhE5yWdXUsIxxZg4JFUIa/FcipZXccecDt4jvKWcFNVLFoknyRhtZrYBDBcLopGeYU6aNanLTKOiEoxhqDjXcskxRddhE0faGkPS31Yr8fo0fslq1AgvYMQFE0Ao2kYGq5tRAbI1uFSKCrguZN9aH1vkteffv7T+fyJv/yft8DxUlO6nIq7vXt+SvNfkIGXmJYZPC+pwmPnMn8tpeTFh517ui1+QZN8+Pnj0rzfM5q/pMebHow4B0JgwoDvQejh/hhwp2fvCYEKCiJAyixig9gtLEl54mvT1tmpIuT4GUdQJ73lEh1nAlhatuqaxY72khH5SUppLFMQ6ppbGsMUemSRTi8r1kuRspbI4GtrIGkSbd3z4t51JD4VHTxJWEuTvq/0FfCgxraQtjhyUwBGzeq0n8vH/YxTDn345y7ROv7R7GUNCML0iXh3y6LmlQDAfr12VuTaCfcLbaN6JvdAUlw1fgsCB1Aban42w3B3vuU5vOB1QLjisw1L58zmCcQe64fJhESe4PYIfYhIhFiLhjJb7NAYBqskOALLPPkJuLxruoeq+oxs1lEnnPCpCXxLmgoDTaFOyiNBcUlGZs7wVikUteKtnUAYjZAy1C9EwWoXCbHbZJiK6CuQZeaAjxa2y+Y6KmiwkrmXF9inA7ar6B+jq37T02BMFPM8QguRVx/tKfLm8XnnpXx5DLR9Shc8Vqs9JNXUtlrqPMbpE4tiT+wpIlaadjSx72oACPAJIeJWwJ0x0KisnF92dN7Xi+Oyptq81J95fUl+3QJ8d7ottrscxXGVUL1tqhRoV+g4YQ5xK5dLiM9X1hBT6Z0EZRoWuqUIY3U5DnKyj5Vr2WyhF0OmzwsYmpOJxwJedsP7w4f1cH/KoYno/ZJxG7QYG/qQySkWgjNMy9hbuDe63EEh8B5aRkNHauRe72QCKmIzKom2sKWdt/KB8N9pYtlBJKj53JcZfktoRskVuAe9F5UUkTV+l8DDTHl2scDzOuvkdUNwIsfvlZa9GLT9rWlKmt4Bx1rXt29H6o/av6MdlRj+nLyV1+bmfwVJ8s1Rl7z8rvrMSDgk46j+IJNS/Kj8eSAHTWzRw2Ds1KwNYi9qsv5EfcmKrFU8Qv27kvRULv1CLpfokumuJXWA28/I8Mj7P1TfTkMkU/NcfbDr/CJG/lDCU0PYPTpP9KeHvzDeuam5hEFgAA',\n 'web-forms.rng':\n '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',\n 'web-forms2.rng':\n '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',\n};\n\n/**\n * Cache for decompressed schemas\n */\nconst schemaCache = new Map<string, string>();\n\n/**\n * Decode base64 string to Uint8Array\n */\nfunction base64ToUint8Array(base64: string): Uint8Array {\n // Use atob for browser compatibility, Buffer for Node.js\n if (typeof atob === 'function') {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n return new Uint8Array(Buffer.from(base64, 'base64'));\n}\n\n/**\n * Decompress a schema from its compressed form\n */\nfunction decompressSchema(compressed: string): string {\n const data = base64ToUint8Array(compressed);\n const decompressed = gunzipSync(data);\n return strFromU8(decompressed);\n}\n\n/**\n * Get schema content by filename (decompresses lazily on first access)\n */\nexport function getSchema(filename: string): string | undefined {\n // Check cache first\n const cached = schemaCache.get(filename);\n if (cached !== undefined) {\n return cached;\n }\n\n // Get compressed data\n const compressed = COMPRESSED_SCHEMAS[filename];\n if (compressed === undefined) {\n return undefined;\n }\n\n // Decompress and cache\n const schema = decompressSchema(compressed);\n schemaCache.set(filename, schema);\n return schema;\n}\n\n/**\n * Get list of available schema filenames\n */\nexport function getSchemaNames(): string[] {\n return Object.keys(COMPRESSED_SCHEMAS);\n}\n\n/**\n * Preload all schemas into cache (useful if you need all schemas upfront)\n */\nexport function preloadSchemas(): void {\n for (const filename of Object.keys(COMPRESSED_SCHEMAS)) {\n getSchema(filename);\n }\n}\n","import type { ValidationMessage } from '../types.js';\n\n/**\n * Result of parsing a libxml2 error message\n */\ninterface LibxmlErrorParseResult {\n message: string;\n line: number | undefined;\n column: number | undefined;\n}\n\n/**\n * Interface for schema validators\n */\nexport interface SchemaValidator {\n /**\n * Validate XML content against a schema\n *\n * @param xml - The XML content to validate\n * @param schemaPath - Path to the schema file\n * @returns Array of validation messages\n */\n validate(xml: string, schemaPath: string): Promise<ValidationMessage[]>;\n\n /**\n * Dispose of any resources held by the validator\n */\n dispose(): void;\n}\n\n/**\n * Base class for schema validators\n */\nexport abstract class BaseSchemaValidator implements SchemaValidator {\n protected disposed = false;\n\n abstract validate(xml: string, schemaPath: string): Promise<ValidationMessage[]>;\n\n dispose(): void {\n this.disposed = true;\n }\n\n protected checkDisposed(): void {\n if (this.disposed) {\n throw new Error('Validator has been disposed');\n }\n }\n\n /**\n * Parse libxml2-wasm error message to extract line and column numbers\n *\n * Error formats:\n * - \"Entity: line 10: parser error : message\"\n * - \"Element '{name}': This element is not expected. Expected is ( {name} ).\"\n * - \"file:10: element name: Schemas validity error : ...\"\n *\n * @param error - The error message from libxml2-wasm\n * @returns Parsed message with line and column if available\n */\n protected parseLibxmlError(error: string): LibxmlErrorParseResult {\n // Extract line number from libxml2-wasm error message\n // Format: \"Entity: line 10: parser error : message\" or \"file:10: ...\"\n const lineRegex = /(?:Entity:\\s*)?(?:file:)?(?:line\\s+)?(\\d+):/;\n const lineMatch = lineRegex.exec(error);\n const line = lineMatch?.[1] ? Number.parseInt(lineMatch[1], 10) : undefined;\n\n // Extract column if present (after line number)\n const columnRegex = /line\\s+\\d+:\\s*(\\d+):/;\n const columnMatch = columnRegex.exec(error);\n const column = columnMatch?.[1] ? Number.parseInt(columnMatch[1], 10) : undefined;\n\n // Normalize error message - remove libxml2 prefix\n let message = error;\n if (error.includes('Opening and ending tag mismatch')) {\n message = `Mismatched closing tag: ${error.replace('Opening and ending tag mismatch: ', '')}`;\n } else if (error.includes('mismatch')) {\n message = `Mismatched closing tag: ${error}`;\n } else {\n message = error\n .replace(/^Entity:\\s*line\\s+\\d+:\\s*(parser\\s+error\\s*:)?\\s*/, '')\n .replace(/^Schemas validity error:\\s*/, '')\n .replace(/^Element .*:\\s*/, '');\n }\n\n return { message, line, column };\n }\n}\n","import { MessageId, pushMessage } from '../messages/index.js';\nimport type { ValidationMessage } from '../types.js';\nimport { getSchema, getSchemaNames } from './schemas.generated.js';\nimport { BaseSchemaValidator } from './validator.js';\n\n/**\n * Load schema content by filename\n *\n * First tries to load from bundled schemas (works in all environments),\n * then falls back to fetch for custom schemas provided by URL.\n */\nasync function loadSchema(schemaPath: string): Promise<string> {\n const filename = schemaPath.split('/').pop() ?? schemaPath;\n\n // Try bundled schemas first (works in all environments)\n const bundled = getSchema(filename);\n if (bundled) {\n return bundled;\n }\n\n // If it's a URL, try to fetch it\n if (schemaPath.startsWith('http://') || schemaPath.startsWith('https://')) {\n const response = await fetch(schemaPath);\n if (!response.ok) {\n throw new Error(`Failed to load schema: ${response.statusText}`);\n }\n return await response.text();\n }\n\n throw new Error(\n `Schema not found: \"${filename}\". Available schemas: ${getSchemaNames().join(', ')}`,\n );\n}\n\n/**\n * RelaxNG schema validator using libxml2-wasm\n *\n * Note: libxml2 has deprecated RelaxNG support, so this may need\n * to be replaced in the future.\n */\n\nexport class RelaxNGValidator extends BaseSchemaValidator {\n async validate(xml: string, schemaPath: string): Promise<ValidationMessage[]> {\n this.checkDisposed();\n\n const messages: ValidationMessage[] = [];\n\n try {\n const libxml2 = await import('libxml2-wasm');\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const LibRelaxNGValidator = libxml2.RelaxNGValidator;\n const { XmlDocument } = libxml2;\n\n const doc = XmlDocument.fromString(xml);\n\n try {\n const schemaContent = await loadSchema(schemaPath);\n const schemaDoc = XmlDocument.fromString(schemaContent);\n\n try {\n const validator = LibRelaxNGValidator.fromDoc(schemaDoc);\n\n try {\n validator.validate(doc);\n } catch (error) {\n const parsed = this.parseLibxmlError(\n error instanceof Error ? error.message : 'RelaxNG validation failed',\n );\n const location: { path: string; line?: number; column?: number } = { path: schemaPath };\n if (parsed.line !== undefined) location.line = parsed.line;\n if (parsed.column !== undefined) location.column = parsed.column;\n pushMessage(messages, {\n id: MessageId.RSC_005,\n message: parsed.message,\n location,\n });\n } finally {\n validator.dispose();\n }\n } finally {\n schemaDoc.dispose();\n }\n } finally {\n doc.dispose();\n }\n } catch (error) {\n pushMessage(messages, {\n id: MessageId.RSC_005,\n message: `Failed to initialize RelaxNG validator: ${error instanceof Error ? error.message : 'Unknown error'}`,\n });\n }\n\n return messages;\n }\n}\n","import type { ValidationContext, ValidationMessage } from '../types.js';\nimport { RelaxNGValidator } from './relaxng.js';\n\n/**\n * Schema mappings for different EPUB versions and file types\n */\nconst SCHEMA_MAPPINGS = {\n // EPUB 2.0\n '2.0': {\n container: 'container.rng',\n opf: 'opf20.rng',\n // TODO: Add XHTML 2.0 schemas (NVDL format, more complex)\n },\n // EPUB 3.x (using RNG format with inlined includes)\n '3.0': {\n container: 'ocf-container-30.rng',\n opf: 'package-30.rng',\n nav: 'epub-nav-30.rng',\n xhtml: 'epub-xhtml-30.rng',\n svg: 'epub-svg-30.rng',\n },\n '3.1': {\n container: 'ocf-container-30.rng',\n opf: 'package-30.rng',\n nav: 'epub-nav-30.rng',\n xhtml: 'epub-xhtml-30.rng',\n svg: 'epub-svg-30.rng',\n },\n '3.2': {\n container: 'ocf-container-30.rng',\n opf: 'package-30.rng',\n nav: 'epub-nav-30.rng',\n xhtml: 'epub-xhtml-30.rng',\n svg: 'epub-svg-30.rng',\n },\n '3.3': {\n container: 'ocf-container-30.rng',\n opf: 'package-30.rng',\n nav: 'epub-nav-30.rng',\n xhtml: 'epub-xhtml-30.rng',\n svg: 'epub-svg-30.rng',\n },\n} as const;\n\n/**\n * Orchestrates schema validation for different EPUB files\n */\nexport class SchemaValidator {\n private context: ValidationContext;\n\n constructor(context: ValidationContext) {\n this.context = context;\n }\n\n /**\n * Run all schema validations\n */\n async validate(): Promise<void> {\n const version = this.context.version;\n\n // Get schema mappings for current version (version is guaranteed to be valid by EPUBVersion type)\n const schemas = SCHEMA_MAPPINGS[version as keyof typeof SCHEMA_MAPPINGS];\n\n // Validate container.xml\n await this.validateContainer(schemas.container);\n\n // Validate OPF\n if (this.context.opfPath) {\n await this.validateOPF(this.context.opfPath, schemas.opf);\n }\n\n // Validate manifest items with schema validation\n if (this.context.packageDocument) {\n await this.validateManifestItems(schemas);\n }\n }\n\n /**\n * Validate container.xml\n */\n private async validateContainer(schemaPath: string): Promise<void> {\n const containerPath = 'META-INF/container.xml';\n const data = this.context.files.get(containerPath);\n\n if (!data) {\n return;\n }\n\n const xml = new TextDecoder().decode(data);\n const validator = new RelaxNGValidator();\n const messages = await validator.validate(xml, schemaPath);\n\n for (const msg of messages) {\n this.addMessage({\n ...msg,\n location: { ...msg.location, path: containerPath },\n });\n }\n }\n\n /**\n * Validate OPF package document\n */\n private async validateOPF(opfPath: string, schemaPath: string): Promise<void> {\n const data = this.context.files.get(opfPath);\n\n if (!data) {\n return;\n }\n\n const xml = new TextDecoder().decode(data);\n const validator = new RelaxNGValidator();\n const messages = await validator.validate(xml, schemaPath);\n\n for (const msg of messages) {\n this.addMessage({\n ...msg,\n location: { ...msg.location, path: opfPath },\n });\n }\n }\n\n /**\n * Validate manifest items (XHTML, SVG, etc.)\n *\n * NOTE: RelaxNG validation for XHTML/SVG/NAV is currently disabled due to\n * libxml2-wasm limitations. The schemas use recursive \"anything\" patterns\n * (common.elem.anything -> common.inner.anything) with interleave/attribute\n * that libxml2 doesn't support (\"Found forbidden pattern oneOrMore//interleave//attribute\").\n *\n * Java EPUBCheck uses Jing (a more sophisticated RelaxNG validator) that handles these.\n * Content validation still happens via Schematron and custom validators.\n */\n private async validateManifestItems(_schemas: Record<string, string>): Promise<void> {\n // RelaxNG validation disabled - see comment above\n // Content is validated via Schematron (src/schema/schematron.ts) and\n // custom validators (src/content/validator.ts)\n }\n\n /**\n * Add a message to the context with proper filtering\n */\n private addMessage(message: ValidationMessage): void {\n const messages = this.context.messages;\n\n // Check max errors limit\n if (\n this.context.options.maxErrors > 0 &&\n messages.filter((m) => m.severity === 'error' || m.severity === 'fatal').length >=\n this.context.options.maxErrors\n ) {\n return;\n }\n\n // Filter by severity based on options\n if (!this.context.options.includeUsage && message.severity === 'usage') {\n return;\n }\n if (!this.context.options.includeInfo && message.severity === 'info') {\n return;\n }\n\n messages.push(message);\n }\n}\n","import { ContentValidator } from './content/index.js';\nimport { buildReport } from './core/report.js';\nimport { MessageId, pushMessage } from './messages/index.js';\nimport { NCXValidator } from './nav/index.js';\nimport { OCFValidator } from './ocf/index.js';\nimport { OPFValidator } from './opf/index.js';\nimport { isCoreMediaType } from './opf/types.js';\nimport { ResourceRegistry } from './references/registry.js';\nimport { resolveManifestHref } from './references/url.js';\nimport { ReferenceValidator } from './references/validator.js';\nimport { SchemaValidator } from './schema/orchestrator.js';\nimport type {\n EPUBVersion,\n EpubCheckOptions,\n EpubCheckResult,\n ValidationContext,\n ValidationMessage,\n} from './types.js';\n\n/**\n * Default options for EpubCheck\n */\nconst DEFAULT_OPTIONS: Required<EpubCheckOptions> = {\n version: '3.3',\n profile: 'default',\n includeUsage: false,\n includeInfo: true,\n maxErrors: 0,\n locale: 'en',\n};\n\n/**\n * Main EPUB validation class\n *\n * @example\n * ```typescript\n * import { EpubCheck } from 'epubcheck-ts';\n *\n * // Validate from a Uint8Array (works in Node.js and browsers)\n * const result = await EpubCheck.validate(epubData);\n *\n * if (result.valid) {\n * console.log('EPUB is valid!');\n * } else {\n * console.log(`Found ${result.errorCount} errors`);\n * for (const msg of result.messages) {\n * console.log(`${msg.severity}: ${msg.message}`);\n * }\n * }\n * ```\n */\nexport class EpubCheck {\n private readonly options: Required<EpubCheckOptions>;\n\n /**\n * Create a new EpubCheck instance with custom options\n */\n constructor(options: EpubCheckOptions = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n\n /**\n * Validate an EPUB file\n *\n * @param data - The EPUB file as a Uint8Array\n * @returns Validation result\n */\n async check(data: Uint8Array): Promise<EpubCheckResult> {\n const startTime = performance.now();\n\n // Initialize validation context\n const context: ValidationContext = {\n data,\n options: this.options,\n version: this.options.version,\n messages: [],\n files: new Map(),\n rootfiles: [],\n };\n\n try {\n // Step 1: Validate OCF container (ZIP structure)\n const ocfValidator = new OCFValidator();\n ocfValidator.validate(context);\n\n // Stop if fatal errors in OCF\n if (context.messages.some((m) => m.severity === 'fatal')) {\n const elapsedMs = performance.now() - startTime;\n return buildReport(context.messages, context.version, elapsedMs);\n }\n\n // Step 2: Validate package document (OPF)\n const opfValidator = new OPFValidator();\n opfValidator.validate(context);\n\n // Step 3: Create resource registry and reference validator\n const registry = new ResourceRegistry();\n const refValidator = new ReferenceValidator(registry, context.version);\n\n // Populate registry from manifest\n if (context.packageDocument) {\n this.populateRegistry(context, registry);\n this.validateObfuscatedResources(context);\n }\n\n // Step 4: Validate content documents (XHTML) and extract references\n const contentValidator = new ContentValidator();\n contentValidator.validate(context, registry, refValidator);\n\n // Step 5: Validate NCX navigation (EPUB 2 always; EPUB 3 when NCX is present)\n if (context.packageDocument) {\n this.validateNCX(context, registry);\n }\n\n // Step 6: Run cross-reference validation\n refValidator.validate(context);\n\n // Step 7: Run schema validations (RelaxNG, XSD, Schematron)\n const schemaValidator = new SchemaValidator(context);\n await schemaValidator.validate();\n } catch (error) {\n // Add fatal error for unexpected exceptions\n pushMessage(context.messages, {\n id: MessageId.PKG_025,\n message: error instanceof Error ? error.message : 'Unknown validation error',\n });\n }\n\n const elapsedMs = performance.now() - startTime;\n\n // Filter messages based on options\n const filteredMessages = context.messages.filter((msg) => {\n if (!this.options.includeUsage && msg.severity === 'usage') {\n return false;\n }\n if (!this.options.includeInfo && msg.severity === 'info') {\n return false;\n }\n return true;\n });\n\n // Build and return result\n return buildReport(filteredMessages, context.version, elapsedMs);\n }\n\n /**\n * Static method to validate an EPUB file with default options\n *\n * @param data - The EPUB file as a Uint8Array\n * @param options - Optional validation options\n * @returns Validation result\n */\n static async validate(\n data: Uint8Array,\n options: EpubCheckOptions = {},\n ): Promise<EpubCheckResult> {\n const checker = new EpubCheck(options);\n return checker.check(data);\n }\n\n /**\n * Get the current EPUB version being validated against\n */\n get version(): EPUBVersion {\n return this.options.version;\n }\n\n /**\n * Validate NCX navigation document (EPUB 2 always, EPUB 3 when NCX present)\n */\n private validateNCX(context: ValidationContext, registry: ResourceRegistry): void {\n if (!context.packageDocument) {\n return;\n }\n\n const ncxId = context.packageDocument.spineToc;\n if (!ncxId) {\n // For EPUB 3 without toc attribute, check if NCX exists in manifest\n // (NCX toc attribute missing check is handled in OPF validator)\n return;\n }\n\n // Find NCX manifest item\n const ncxItem = context.packageDocument.manifest.find((item) => item.id === ncxId);\n if (!ncxItem) {\n return;\n }\n\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n const ncxPath = resolveManifestHref(opfDir, ncxItem.href);\n\n const ncxData = context.files.get(ncxPath);\n if (!ncxData) {\n return;\n }\n\n const ncxContent = new TextDecoder().decode(ncxData);\n\n const ncxValidator = new NCXValidator();\n ncxValidator.validate(context, ncxContent, ncxPath, registry);\n\n // Check if NCX UID matches OPF unique identifier\n if (context.ncxUid && context.packageDocument.uniqueIdentifier) {\n // Find the dc:identifier whose id matches the package unique-identifier attribute\n const uniqueIdRef = context.packageDocument.uniqueIdentifier;\n const matchingIdentifier = context.packageDocument.dcElements.find(\n (dc) => dc.name === 'identifier' && dc.id === uniqueIdRef,\n );\n\n if (matchingIdentifier) {\n const opfUid = matchingIdentifier.value.trim();\n if (context.ncxUid !== opfUid) {\n pushMessage(context.messages, {\n id: MessageId.NCX_001,\n message: `NCX uid \"${context.ncxUid}\" does not match OPF unique identifier \"${opfUid}\"`,\n location: { path: ncxPath },\n });\n }\n }\n }\n }\n\n /**\n * Add a validation message to the context\n */\n protected addMessage(messages: ValidationMessage[], message: ValidationMessage): void {\n // Check max errors limit\n if (\n this.options.maxErrors > 0 &&\n messages.filter((m) => m.severity === 'error' || m.severity === 'fatal').length >=\n this.options.maxErrors\n ) {\n return;\n }\n\n // Filter by severity based on options\n if (!this.options.includeUsage && message.severity === 'usage') {\n return;\n }\n if (!this.options.includeInfo && message.severity === 'info') {\n return;\n }\n\n messages.push(message);\n }\n\n /**\n * Validate that obfuscated resources are blessed font types (PKG-026)\n */\n private validateObfuscatedResources(context: ValidationContext): void {\n if (!context.obfuscatedResources || !context.packageDocument) return;\n\n const BLESSED_FONT_TYPES = new Set([\n 'font/otf',\n 'font/ttf',\n 'font/woff',\n 'font/woff2',\n 'application/font-sfnt',\n 'application/font-woff',\n 'application/vnd.ms-opentype',\n 'application/x-font-ttf',\n ]);\n\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n for (const uri of context.obfuscatedResources) {\n const item = context.packageDocument.manifest.find(\n (m) => resolveManifestHref(opfDir, m.href) === uri,\n );\n if (item && !BLESSED_FONT_TYPES.has(item.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.PKG_026,\n message: `Obfuscated resource \"${uri}\" has media-type \"${item.mediaType}\" which is not a Font Core Media Type`,\n location: { path: uri },\n });\n }\n }\n }\n\n /**\n * Populate resource registry from package document manifest\n */\n private populateRegistry(context: ValidationContext, registry: ResourceRegistry): void {\n const packageDoc = context.packageDocument;\n if (!packageDoc) return;\n\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n const spineIdrefs = new Set(packageDoc.spine.map((item) => item.idref));\n const manifestById = new Map(packageDoc.manifest.map((item) => [item.id, item]));\n\n for (const item of packageDoc.manifest) {\n const fullPath = resolveManifestHref(opfDir, item.href);\n const properties = item.properties ?? [];\n registry.registerResource({\n url: fullPath,\n mimeType: item.mediaType,\n inSpine: spineIdrefs.has(item.id),\n hasCoreMediaTypeFallback: this.hasCMTFallback(item.id, manifestById),\n isNav: properties.includes('nav'),\n isCoverImage: properties.includes('cover-image'),\n isNcx: item.mediaType === 'application/x-dtbncx+xml',\n ids: new Set(),\n });\n }\n }\n\n /**\n * Check if a manifest item has a fallback chain reaching a Core Media Type\n */\n private hasCMTFallback(\n itemId: string,\n manifestById: Map<string, { mediaType: string; fallback?: string }>,\n ): boolean {\n const visited = new Set<string>();\n let currentId: string | undefined = itemId;\n while (currentId) {\n if (visited.has(currentId)) return false; // circular\n visited.add(currentId);\n const item = manifestById.get(currentId);\n if (!item) return false;\n if (isCoreMediaType(item.mediaType)) return true;\n currentId = item.fallback;\n }\n return false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/messages/messages.ts","../src/css/validator.ts","../src/opf/types.ts","../src/references/types.ts","../src/references/url.ts","../src/content/validator.ts","../src/core/report.ts","../src/ncx/validator.ts","../src/ocf/zip.ts","../src/ocf/validator.ts","../src/opf/parser.ts","../src/opf/validator.ts","../src/references/registry.ts","../src/references/validator.ts","../src/schema/schemas.generated.ts","../src/schema/validator.ts","../src/schema/relaxng.ts","../src/schema/orchestrator.ts","../src/checker.ts"],"names":["parse","walk","XmlDocument","targetResource","fragment","resolvedPath","resource","result","unzipSync","strFromU8","gunzipSync","elapsedMs","BLESSED_FONT_TYPES"],"mappings":"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,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA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A,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EAC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","file":"index.cjs","sourcesContent":["/**\n * Message Definitions for EPUB validation errors and warnings\n *\n * This file is the single source of truth for all message IDs, severities, and descriptions.\n * IDs are compatible with the Java EPUBCheck implementation for consistent error reporting.\n *\n * Prefix meanings:\n * - ACC: Accessibility\n * - CHK: Internal checker errors\n * - CSS: CSS validation\n * - HTM: HTML/XHTML content\n * - MED: Media (audio, video, images)\n * - NAV: Navigation document\n * - NCX: NCX (EPUB 2 navigation)\n * - OPF: Package document\n * - PKG: Package/container level\n * - RSC: Resources\n * - SCH: Schematron validation\n * - SCP: Scripting\n *\n * Severity levels:\n * - FATAL: Unrecoverable errors that prevent validation\n * - ERROR: Specification violations\n * - WARNING: Best practice violations or potential issues\n * - INFO: Informational messages\n * - USAGE: Feature usage information (off by default)\n * - SUPPRESSED: Disabled by default (can be enabled via customMessages)\n *\n * Reference: Java EPUBCheck DefaultSeverities.java and MessageBundle.properties\n */\n\nimport type { EPUBLocation, Severity, ValidationMessage } from '../types.js';\n\nexport type MessageSeverity = Severity | 'suppressed';\n\ninterface MessageDef {\n readonly id: string;\n readonly severity: MessageSeverity;\n readonly description: string;\n}\n\n/**\n * All message definitions with their IDs, severities, and descriptions.\n * Severities match Java EPUBCheck DefaultSeverities.java\n * Descriptions match Java EPUBCheck MessageBundle.properties\n */\nconst MessageDefs = {\n // Package/Container errors (PKG-*)\n PKG_001: {\n id: 'PKG-001',\n severity: 'warning',\n description: 'Validating against one version but detected another',\n },\n PKG_003: {\n id: 'PKG-003',\n severity: 'error',\n description: 'Unable to read EPUB file header, likely corrupted',\n },\n PKG_004: { id: 'PKG-004', severity: 'fatal', description: 'Corrupted EPUB ZIP header' },\n PKG_005: {\n id: 'PKG-005',\n severity: 'error',\n description: 'Mimetype file has extra field, not permitted',\n },\n PKG_006: {\n id: 'PKG-006',\n severity: 'error',\n description: 'Mimetype file entry missing or not first in archive',\n },\n PKG_007: {\n id: 'PKG-007',\n severity: 'error',\n description: 'Mimetype must contain only \"application/epub+zip\" and not be compressed',\n },\n PKG_008: { id: 'PKG-008', severity: 'fatal', description: 'Unable to read file' },\n PKG_009: {\n id: 'PKG-009',\n severity: 'error',\n description: 'File name contains characters not allowed in OCF',\n },\n PKG_010: {\n id: 'PKG-010',\n severity: 'warning',\n description: 'File name contains spaces, may cause interoperability issues',\n },\n PKG_011: {\n id: 'PKG-011',\n severity: 'error',\n description: 'File name not allowed to end with \".\"',\n },\n PKG_012: {\n id: 'PKG-012',\n severity: 'usage',\n description: 'File name contains non-ASCII characters',\n },\n PKG_013: {\n id: 'PKG-013',\n severity: 'error',\n description: 'EPUB file includes multiple OPS renditions',\n },\n PKG_014: {\n id: 'PKG-014',\n severity: 'warning',\n description: 'EPUB contains empty directory',\n },\n PKG_015: { id: 'PKG-015', severity: 'fatal', description: 'Unable to read EPUB contents' },\n PKG_016: {\n id: 'PKG-016',\n severity: 'warning',\n description: 'Use only lowercase for EPUB file extension',\n },\n PKG_017: { id: 'PKG-017', severity: 'warning', description: 'Uncommon EPUB file extension' },\n PKG_018: { id: 'PKG-018', severity: 'fatal', description: 'EPUB file could not be found' },\n PKG_020: { id: 'PKG-020', severity: 'error', description: 'OPF file could not be found' },\n PKG_021: { id: 'PKG-021', severity: 'error', description: 'Corrupted image file encountered' },\n PKG_022: {\n id: 'PKG-022',\n severity: 'warning',\n description: 'Wrong file extension for image',\n },\n PKG_023: {\n id: 'PKG-023',\n severity: 'usage',\n description: 'Validating against version 2.0, default profile used',\n },\n PKG_024: { id: 'PKG-024', severity: 'usage', description: 'Uncommon EPUB file extension' },\n PKG_025: {\n id: 'PKG-025',\n severity: 'error',\n description: 'Publication resource must not be in META-INF directory',\n },\n PKG_026: {\n id: 'PKG-026',\n severity: 'error',\n description: 'Obfuscated resource must be a Font Core Media Type',\n },\n PKG_027: {\n id: 'PKG-027',\n severity: 'fatal',\n description: 'Could not extract EPUB ZIP content, file names not UTF-8',\n },\n\n // OPF errors (OPF-*)\n OPF_001: {\n id: 'OPF-001',\n severity: 'error',\n description: 'Error parsing EPUB version',\n },\n OPF_002: {\n id: 'OPF-002',\n severity: 'fatal',\n description: 'OPF file was not found in the EPUB',\n },\n OPF_003: {\n id: 'OPF-003',\n severity: 'usage',\n description: 'Item exists in EPUB but not declared in OPF manifest',\n },\n OPF_004: {\n id: 'OPF-004',\n severity: 'warning',\n description: 'Invalid prefix declaration: leading or trailing whitespace',\n },\n OPF_005: {\n id: 'OPF-005',\n severity: 'error',\n description: 'Invalid prefix declaration: URI does not exist',\n },\n OPF_006: {\n id: 'OPF-006',\n severity: 'error',\n description: 'Invalid prefix declaration: URI is not valid',\n },\n OPF_007: {\n id: 'OPF-007',\n severity: 'warning',\n description: 'Re-declaration of reserved prefix',\n },\n OPF_008: { id: 'OPF-008', severity: 'suppressed', description: 'Duplicate entry in ZIP file' },\n OPF_009: { id: 'OPF-009', severity: 'suppressed', description: 'Duplicate manifest item ID' },\n OPF_010: {\n id: 'OPF-010',\n severity: 'error',\n description: 'Error resolving reference',\n },\n OPF_011: {\n id: 'OPF-011',\n severity: 'error',\n description: 'itemref cannot have both page-spread-right and page-spread-left',\n },\n OPF_012: {\n id: 'OPF-012',\n severity: 'error',\n description: 'Item property not defined for media type',\n },\n OPF_013: {\n id: 'OPF-013',\n severity: 'warning',\n description: 'Resource MIME type in content differs from package document',\n },\n OPF_014: {\n id: 'OPF-014',\n severity: 'error',\n description: 'Property should be declared in OPF file',\n },\n OPF_015: {\n id: 'OPF-015',\n severity: 'error',\n description: 'Property should not be declared in OPF file',\n },\n OPF_016: {\n id: 'OPF-016',\n severity: 'error',\n description: 'Rootfile element missing required full-path attribute',\n },\n OPF_017: {\n id: 'OPF-017',\n severity: 'error',\n description: 'Full-path attribute on rootfile must not be empty',\n },\n OPF_018: {\n id: 'OPF-018',\n severity: 'warning',\n description: 'remote-resources property declared but no remote references found',\n },\n OPF_021: {\n id: 'OPF-021',\n severity: 'warning',\n description: 'Use of non-registered URI scheme type in href',\n },\n OPF_025: {\n id: 'OPF-025',\n severity: 'error',\n description: 'Property value list not allowed, only one value permitted',\n },\n OPF_026: { id: 'OPF-026', severity: 'error', description: 'Malformed property value' },\n OPF_027: { id: 'OPF-027', severity: 'error', description: 'Undefined property' },\n OPF_028: { id: 'OPF-028', severity: 'error', description: 'Undeclared prefix' },\n OPF_029: {\n id: 'OPF-029',\n severity: 'error',\n description: 'File does not match media type specified in OPF',\n },\n OPF_030: {\n id: 'OPF-030',\n severity: 'error',\n description: 'Unique-identifier not found',\n },\n OPF_031: {\n id: 'OPF-031',\n severity: 'error',\n description: 'File in guide reference not declared in manifest',\n },\n OPF_032: {\n id: 'OPF-032',\n severity: 'error',\n description: 'Guide references item that is not valid OPS Content Document',\n },\n OPF_033: {\n id: 'OPF-033',\n severity: 'error',\n description: 'Spine contains no linear resources',\n },\n OPF_034: {\n id: 'OPF-034',\n severity: 'error',\n description: 'Spine contains multiple references to same manifest item',\n },\n OPF_035: {\n id: 'OPF-035',\n severity: 'warning',\n description: 'Media type text/html not appropriate for XHTML/OPS',\n },\n OPF_036: {\n id: 'OPF-036',\n severity: 'usage',\n description: 'Video type might not be supported by reading systems',\n },\n OPF_037: { id: 'OPF-037', severity: 'warning', description: 'Deprecated media-type found' },\n OPF_038: {\n id: 'OPF-038',\n severity: 'warning',\n description: 'Media type not appropriate for OEBPS 1.2 context',\n },\n OPF_039: {\n id: 'OPF-039',\n severity: 'warning',\n description: 'Media type not appropriate for OEBPS 1.2 context',\n },\n OPF_040: {\n id: 'OPF-040',\n severity: 'error',\n description: 'Fallback item could not be found',\n },\n OPF_041: {\n id: 'OPF-041',\n severity: 'error',\n description: 'Fallback-style item could not be found',\n },\n OPF_042: {\n id: 'OPF-042',\n severity: 'error',\n description: 'Not a permissible spine media-type',\n },\n OPF_043: {\n id: 'OPF-043',\n severity: 'error',\n description: 'Spine item with non-standard media-type has no fallback',\n },\n OPF_044: {\n id: 'OPF-044',\n severity: 'error',\n description: 'Spine item with non-standard media-type has no content document fallback',\n },\n OPF_045: {\n id: 'OPF-045',\n severity: 'error',\n description: 'Circular reference in fallback chain',\n },\n OPF_046: { id: 'OPF-046', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_047: {\n id: 'OPF-047',\n severity: 'usage',\n description: 'OPF using OEBPS 1.2 syntax for backwards compatibility',\n },\n OPF_048: {\n id: 'OPF-048',\n severity: 'error',\n description: 'Package tag missing required unique-identifier attribute',\n },\n OPF_049: {\n id: 'OPF-049',\n severity: 'error',\n description: 'Item id not found in manifest',\n },\n OPF_050: {\n id: 'OPF-050',\n severity: 'error',\n description: 'TOC attribute references resource with non-NCX mime type',\n },\n OPF_051: {\n id: 'OPF-051',\n severity: 'suppressed',\n description: 'Image dimensions exceed recommended size',\n },\n OPF_052: { id: 'OPF-052', severity: 'error', description: 'Role value is not valid' },\n OPF_053: {\n id: 'OPF-053',\n severity: 'warning',\n description: 'Date value does not follow recommended syntax',\n },\n OPF_054: { id: 'OPF-054', severity: 'error', description: 'Date value is not valid' },\n OPF_055: { id: 'OPF-055', severity: 'warning', description: 'Tag is empty' },\n OPF_056: { id: 'OPF-056', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_057: {\n id: 'OPF-057',\n severity: 'suppressed',\n description: 'Image file length exceeds recommended size',\n },\n OPF_058: { id: 'OPF-058', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_059: { id: 'OPF-059', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_060: {\n id: 'OPF-060',\n severity: 'error',\n description: 'Duplicate entry in ZIP file',\n },\n OPF_062: {\n id: 'OPF-062',\n severity: 'usage',\n description: 'Found Adobe page-map attribute on spine element',\n },\n OPF_063: {\n id: 'OPF-063',\n severity: 'warning',\n description: 'Referenced Adobe page-map item not found in manifest',\n },\n OPF_064: {\n id: 'OPF-064',\n severity: 'info',\n description: 'OPF declares type, validating using profile',\n },\n OPF_065: {\n id: 'OPF-065',\n severity: 'error',\n description: 'Invalid metadata declaration, probably cycle in refines',\n },\n OPF_066: {\n id: 'OPF-066',\n severity: 'error',\n description: 'Missing dc:source or source-of pagination metadata',\n },\n OPF_067: {\n id: 'OPF-067',\n severity: 'error',\n description: 'Resource must not be listed as both link and manifest item',\n },\n OPF_068: { id: 'OPF-068', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_069: { id: 'OPF-069', severity: 'suppressed', description: 'Deprecated OPF construct' },\n OPF_070: {\n id: 'OPF-070',\n severity: 'warning',\n description: 'Custom collection role is an invalid URL',\n },\n OPF_071: {\n id: 'OPF-071',\n severity: 'error',\n description: 'Index collections must only contain XHTML Content Documents',\n },\n OPF_072: { id: 'OPF-072', severity: 'usage', description: 'Metadata element is empty' },\n OPF_073: {\n id: 'OPF-073',\n severity: 'error',\n description: 'External identifiers must not appear in document type declaration',\n },\n OPF_074: {\n id: 'OPF-074',\n severity: 'error',\n description: 'Package resource declared in several manifest items',\n },\n OPF_075: {\n id: 'OPF-075',\n severity: 'error',\n description: 'Preview collections must only point to EPUB Content Documents',\n },\n OPF_076: {\n id: 'OPF-076',\n severity: 'error',\n description: 'Preview collection link URI must not include EPUB CFI',\n },\n OPF_077: {\n id: 'OPF-077',\n severity: 'warning',\n description: 'Data Navigation Document should not be in spine',\n },\n OPF_078: {\n id: 'OPF-078',\n severity: 'error',\n description: 'EPUB Dictionary must contain at least one dictionary content document',\n },\n OPF_079: {\n id: 'OPF-079',\n severity: 'warning',\n description: 'Dictionary content found, should declare dc:type dictionary',\n },\n OPF_080: {\n id: 'OPF-080',\n severity: 'warning',\n description: 'Search Key Map document should have .xml extension',\n },\n OPF_081: {\n id: 'OPF-081',\n severity: 'error',\n description: 'Resource referenced from Dictionary collection not found',\n },\n OPF_082: {\n id: 'OPF-082',\n severity: 'error',\n description: 'Dictionary collection contains more than one Search Key Map',\n },\n OPF_083: {\n id: 'OPF-083',\n severity: 'error',\n description: 'Dictionary collection contains no Search Key Map Document',\n },\n OPF_084: {\n id: 'OPF-084',\n severity: 'error',\n description: 'Dictionary collection contains invalid resource type',\n },\n OPF_085: {\n id: 'OPF-085',\n severity: 'warning',\n description: 'dc:identifier marked as UUID but is invalid UUID',\n },\n OPF_086: {\n id: 'OPF-086',\n severity: 'warning',\n description: 'Property is deprecated',\n },\n OPF_086b: {\n id: 'OPF-086b',\n severity: 'usage',\n description: 'epub:type value is deprecated',\n },\n OPF_087: {\n id: 'OPF-087',\n severity: 'usage',\n description: 'epub:type value not allowed on this document type',\n },\n OPF_088: {\n id: 'OPF-088',\n severity: 'usage',\n description: 'Unrecognized epub:type value',\n },\n OPF_089: {\n id: 'OPF-089',\n severity: 'error',\n description: 'alternate link rel keyword cannot be paired with other keywords',\n },\n OPF_090: {\n id: 'OPF-090',\n severity: 'usage',\n description: 'Encouraged to use different MIME media type',\n },\n OPF_091: {\n id: 'OPF-091',\n severity: 'error',\n description: 'Item href URL must not have fragment identifier',\n },\n OPF_092: {\n id: 'OPF-092',\n severity: 'error',\n description: 'Language tag is not well-formed',\n },\n OPF_093: {\n id: 'OPF-093',\n severity: 'error',\n description: 'media-type attribute required for linked resources in container',\n },\n OPF_094: {\n id: 'OPF-094',\n severity: 'error',\n description: 'media-type attribute required for this link type',\n },\n OPF_095: {\n id: 'OPF-095',\n severity: 'error',\n description: 'voicing links media-type must be audio MIME type',\n },\n OPF_096: {\n id: 'OPF-096',\n severity: 'error',\n description: 'Non-linear content must be reachable, no hyperlink found',\n },\n OPF_096b: {\n id: 'OPF-096b',\n severity: 'usage',\n description: 'Non-linear content has no hyperlink but scripting is present',\n },\n OPF_097: {\n id: 'OPF-097',\n severity: 'usage',\n description: 'Resource in manifest but no reference found in content documents',\n },\n OPF_098: {\n id: 'OPF-098',\n severity: 'error',\n description: 'href must reference resources, not elements in package document',\n },\n OPF_099: {\n id: 'OPF-099',\n severity: 'error',\n description: 'Manifest must not list the package document',\n },\n\n // Resource errors (RSC-*)\n RSC_001: { id: 'RSC-001', severity: 'error', description: 'File could not be found' },\n RSC_002: {\n id: 'RSC-002',\n severity: 'fatal',\n description: 'Required META-INF/container.xml could not be found',\n },\n RSC_003: {\n id: 'RSC-003',\n severity: 'error',\n description: 'No rootfile with media type application/oebps-package+xml found',\n },\n RSC_004: {\n id: 'RSC-004',\n severity: 'info',\n description: 'File is encrypted, content will not be checked',\n },\n RSC_005: { id: 'RSC-005', severity: 'error', description: 'Error while parsing file' },\n RSC_006: {\n id: 'RSC-006',\n severity: 'error',\n description: 'Remote resource reference not allowed, must be in EPUB container',\n },\n RSC_007: {\n id: 'RSC-007',\n severity: 'error',\n description: 'Referenced resource could not be found in EPUB',\n },\n RSC_007w: {\n id: 'RSC-007w',\n severity: 'warning',\n description: 'Referenced resource could not be found in EPUB',\n },\n RSC_008: {\n id: 'RSC-008',\n severity: 'error',\n description: 'Referenced resource not declared in OPF manifest',\n },\n RSC_009: {\n id: 'RSC-009',\n severity: 'warning',\n description: 'Non-SVG image resource should not have fragment identifier',\n },\n RSC_010: {\n id: 'RSC-010',\n severity: 'error',\n description: 'Reference to non-standard resource type found',\n },\n RSC_011: {\n id: 'RSC-011',\n severity: 'error',\n description: 'Found reference to resource that is not a spine item',\n },\n RSC_012: {\n id: 'RSC-012',\n severity: 'error',\n description: 'Fragment identifier is not defined',\n },\n RSC_013: {\n id: 'RSC-013',\n severity: 'error',\n description: 'Fragment identifier used in reference to stylesheet',\n },\n RSC_014: {\n id: 'RSC-014',\n severity: 'error',\n description: 'Fragment identifier defines incompatible resource type',\n },\n RSC_015: {\n id: 'RSC-015',\n severity: 'error',\n description: 'Fragment identifier required for svg use tag references',\n },\n RSC_016: { id: 'RSC-016', severity: 'fatal', description: 'Fatal error while parsing file' },\n RSC_017: { id: 'RSC-017', severity: 'warning', description: 'Warning while parsing file' },\n RSC_018: { id: 'RSC-018', severity: 'suppressed', description: 'Unused resource in package' },\n RSC_019: {\n id: 'RSC-019',\n severity: 'warning',\n description: 'EPUBs with Multiple Renditions should have META-INF/metadata.xml',\n },\n RSC_020: { id: 'RSC-020', severity: 'error', description: 'URL is not valid' },\n RSC_021: {\n id: 'RSC-021',\n severity: 'error',\n description: 'Search Key Map must point to Content Documents in spine',\n },\n RSC_022: {\n id: 'RSC-022',\n severity: 'info',\n description: 'Cannot check image details (requires Java 7+)',\n },\n RSC_023: { id: 'RSC-023', severity: 'suppressed', description: 'Informative parsing info' },\n RSC_024: { id: 'RSC-024', severity: 'usage', description: 'Informative parsing warning' },\n RSC_025: { id: 'RSC-025', severity: 'usage', description: 'Informative parsing error' },\n RSC_026: {\n id: 'RSC-026',\n severity: 'error',\n description: 'URL leaks outside container, not valid relative-ocf-URL',\n },\n RSC_027: {\n id: 'RSC-027',\n severity: 'warning',\n description: 'XML document encoded in UTF-16, should be UTF-8',\n },\n RSC_028: {\n id: 'RSC-028',\n severity: 'error',\n description: 'XML documents must be encoded in UTF-8',\n },\n RSC_029: {\n id: 'RSC-029',\n severity: 'error',\n description: 'Data URL is not allowed in this context',\n },\n RSC_030: {\n id: 'RSC-030',\n severity: 'error',\n description: 'File URLs are not allowed in EPUB',\n },\n RSC_031: {\n id: 'RSC-031',\n severity: 'warning',\n description: 'Remote resource references should use HTTPS',\n },\n RSC_032: {\n id: 'RSC-032',\n severity: 'error',\n description: 'Fallback must be provided for foreign resources',\n },\n RSC_033: {\n id: 'RSC-033',\n severity: 'error',\n description: 'Relative URL strings must not have query component',\n },\n\n // HTML/XHTML errors (HTM-*)\n HTM_001: {\n id: 'HTM-001',\n severity: 'error',\n description: 'XML-based media type must be valid XML 1.0 document',\n },\n HTM_002: {\n id: 'HTM-002',\n severity: 'warning',\n description: 'XML parser does not support xml version verification',\n },\n HTM_003: {\n id: 'HTM-003',\n severity: 'error',\n description: 'External entities not allowed in EPUB v3 documents',\n },\n HTM_004: { id: 'HTM-004', severity: 'error', description: 'Irregular DOCTYPE found' },\n HTM_005: { id: 'HTM-005', severity: 'usage', description: 'External reference found' },\n HTM_006: { id: 'HTM-006', severity: 'suppressed', description: 'Required attribute missing' },\n HTM_007: {\n id: 'HTM-007',\n severity: 'warning',\n description: 'Empty or whitespace-only value of ssml:ph attribute',\n },\n HTM_008: { id: 'HTM-008', severity: 'suppressed', description: 'Invalid ID value' },\n HTM_009: {\n id: 'HTM-009',\n severity: 'error',\n description: 'DOCTYPE is obsolete or irregular, can be removed',\n },\n HTM_010: {\n id: 'HTM-010',\n severity: 'usage',\n description: 'Namespace unusual for epub prefix',\n },\n HTM_011: { id: 'HTM-011', severity: 'error', description: 'Entity is undeclared' },\n HTM_012: { id: 'HTM-012', severity: 'suppressed', description: 'Missing DOCTYPE declaration' },\n HTM_013: { id: 'HTM-013', severity: 'suppressed', description: 'Invalid DOCTYPE' },\n HTM_014: { id: 'HTM-014', severity: 'suppressed', description: 'Invalid content' },\n HTM_015: { id: 'HTM-015', severity: 'suppressed', description: 'Attribute not allowed' },\n HTM_016: { id: 'HTM-016', severity: 'suppressed', description: 'Invalid attribute value' },\n HTM_017: {\n id: 'HTM-017',\n severity: 'suppressed',\n description: 'Heading hierarchy not sequential',\n },\n HTM_018: { id: 'HTM-018', severity: 'suppressed', description: 'Empty heading element' },\n HTM_019: {\n id: 'HTM-019',\n severity: 'suppressed',\n description: 'Anchors linking within same file',\n },\n HTM_020: { id: 'HTM-020', severity: 'suppressed', description: 'SSML phoneme attribute' },\n HTM_021: { id: 'HTM-021', severity: 'suppressed', description: 'Invalid hyperlink target' },\n HTM_022: { id: 'HTM-022', severity: 'suppressed', description: 'Empty href attribute' },\n HTM_023: { id: 'HTM-023', severity: 'suppressed', description: 'External hyperlink' },\n HTM_024: {\n id: 'HTM-024',\n severity: 'suppressed',\n description: 'Hyperlink to non-document resource',\n },\n HTM_025: {\n id: 'HTM-025',\n severity: 'warning',\n description: 'Non-registered URI scheme type in href',\n },\n HTM_027: { id: 'HTM-027', severity: 'suppressed', description: 'SVG switch element' },\n HTM_028: { id: 'HTM-028', severity: 'suppressed', description: 'Invalid lang attribute value' },\n HTM_029: { id: 'HTM-029', severity: 'suppressed', description: 'Invalid character reference' },\n HTM_033: { id: 'HTM-033', severity: 'suppressed', description: 'Invalid attribute for element' },\n HTM_036: { id: 'HTM-036', severity: 'suppressed', description: 'Deprecated HTML construct' },\n HTM_038: { id: 'HTM-038', severity: 'suppressed', description: 'Deprecated HTML construct' },\n HTM_044: {\n id: 'HTM-044',\n severity: 'usage',\n description: 'Namespace URI included but not used',\n },\n HTM_045: { id: 'HTM-045', severity: 'usage', description: 'Encountered empty href' },\n HTM_046: {\n id: 'HTM-046',\n severity: 'error',\n description: 'Fixed layout document has no viewport meta element',\n },\n HTM_047: {\n id: 'HTM-047',\n severity: 'error',\n description: 'Viewport metadata has syntax error',\n },\n HTM_048: {\n id: 'HTM-048',\n severity: 'error',\n description: 'SVG Fixed-Layout must have viewBox attribute on outermost svg',\n },\n HTM_049: { id: 'HTM-049', severity: 'suppressed', description: 'Heading level skip' },\n HTM_050: { id: 'HTM-050', severity: 'suppressed', description: 'Deprecated HTML construct' },\n HTM_051: {\n id: 'HTM-051',\n severity: 'warning',\n description: 'Found Microdata but no RDFa, EDUPUB recommends RDFa Lite',\n },\n HTM_052: {\n id: 'HTM-052',\n severity: 'error',\n description: 'region-based property only allowed in Data Navigation Documents',\n },\n HTM_053: { id: 'HTM-053', severity: 'suppressed', description: 'Deprecated HTML construct' },\n HTM_054: {\n id: 'HTM-054',\n severity: 'error',\n description: 'Custom attribute namespace must not include certain strings',\n },\n HTM_055: {\n id: 'HTM-055',\n severity: 'usage',\n description: 'Element should not be used (discouraged construct)',\n },\n HTM_056: {\n id: 'HTM-056',\n severity: 'error',\n description: 'Viewport metadata missing required dimension',\n },\n HTM_057: {\n id: 'HTM-057',\n severity: 'error',\n description: 'Viewport value must be positive number or device keyword',\n },\n HTM_058: {\n id: 'HTM-058',\n severity: 'error',\n description: 'HTML documents must be UTF-8, but UTF-16 detected',\n },\n HTM_059: {\n id: 'HTM-059',\n severity: 'error',\n description: 'Viewport property must not be defined more than once',\n },\n HTM_060a: {\n id: 'HTM-060a',\n severity: 'usage',\n description: 'Secondary viewport meta in fixed-layout will be ignored',\n },\n HTM_060b: {\n id: 'HTM-060b',\n severity: 'usage',\n description: 'Viewport meta in reflowable documents will be ignored',\n },\n HTM_061: {\n id: 'HTM-061',\n severity: 'error',\n description: 'Invalid custom data attribute',\n },\n\n // CSS errors (CSS-*)\n CSS_001: {\n id: 'CSS-001',\n severity: 'error',\n description: 'Property must not be included in EPUB Style Sheet',\n },\n CSS_002: { id: 'CSS-002', severity: 'error', description: 'Empty or NULL reference found' },\n CSS_003: {\n id: 'CSS-003',\n severity: 'warning',\n description: 'CSS encoded in UTF-16, should be UTF-8',\n },\n CSS_004: {\n id: 'CSS-004',\n severity: 'error',\n description: 'CSS documents must be encoded in UTF-8',\n },\n CSS_005: {\n id: 'CSS-005',\n severity: 'usage',\n description: 'Conflicting alternate style tags found',\n },\n CSS_006: {\n id: 'CSS-006',\n severity: 'usage',\n description: 'CSS selector specifies fixed position',\n },\n CSS_007: {\n id: 'CSS-007',\n severity: 'info',\n description: 'Font-face reference to non-standard font type',\n },\n CSS_008: {\n id: 'CSS-008',\n severity: 'error',\n description: 'Error occurred while parsing CSS',\n },\n CSS_009: { id: 'CSS-009', severity: 'suppressed', description: 'Invalid CSS for fixed layout' },\n CSS_010: { id: 'CSS-010', severity: 'suppressed', description: 'CSS property not allowed' },\n CSS_011: { id: 'CSS-011', severity: 'suppressed', description: 'Viewport dimensions in CSS' },\n CSS_012: { id: 'CSS-012', severity: 'suppressed', description: 'Invalid font-face src format' },\n CSS_013: { id: 'CSS-013', severity: 'suppressed', description: 'CSS construct suppressed' },\n CSS_015: {\n id: 'CSS-015',\n severity: 'error',\n description: 'Alternative style sheets must have a title',\n },\n CSS_016: { id: 'CSS-016', severity: 'suppressed', description: 'Vendor-specific CSS property' },\n CSS_017: { id: 'CSS-017', severity: 'suppressed', description: 'Non-standard pseudo element' },\n CSS_019: {\n id: 'CSS-019',\n severity: 'warning',\n description: 'CSS font-face declaration has no attributes',\n },\n CSS_020: { id: 'CSS-020', severity: 'suppressed', description: 'Embedded font resource' },\n CSS_021: { id: 'CSS-021', severity: 'suppressed', description: 'Unusual font reference' },\n CSS_022: { id: 'CSS-022', severity: 'suppressed', description: 'OpenType font feature' },\n CSS_023: { id: 'CSS-023', severity: 'suppressed', description: 'Invalid @font-face rule' },\n CSS_024: { id: 'CSS-024', severity: 'suppressed', description: 'CSS construct suppressed' },\n CSS_025: { id: 'CSS-025', severity: 'suppressed', description: 'CSS construct suppressed' },\n CSS_028: { id: 'CSS-028', severity: 'usage', description: 'Use of font-face declaration' },\n CSS_029: {\n id: 'CSS-029',\n severity: 'usage',\n description: 'CSS class found but no property declared in package document',\n },\n CSS_030: {\n id: 'CSS-030',\n severity: 'error',\n description: 'Package declares media overlay styling but no CSS found',\n },\n\n // Navigation errors (NAV-*)\n NAV_001: {\n id: 'NAV-001',\n severity: 'error',\n description: 'Navigation Document must have a nav element with epub:type=\"toc\"',\n },\n NAV_002: { id: 'NAV-002', severity: 'suppressed', description: 'Missing toc nav element' },\n NAV_003: {\n id: 'NAV-003',\n severity: 'error',\n description: 'Navigation Document must have page list when content has page breaks',\n },\n NAV_004: {\n id: 'NAV-004',\n severity: 'usage',\n description: 'Navigation Document should contain full heading hierarchy in EDUPUB',\n },\n NAV_005: {\n id: 'NAV-005',\n severity: 'usage',\n description: 'Content has audio elements but nav has no listing of audio clips',\n },\n NAV_006: {\n id: 'NAV-006',\n severity: 'usage',\n description: 'Content has figure elements but nav has no listing of figures',\n },\n NAV_007: {\n id: 'NAV-007',\n severity: 'usage',\n description: 'Content has table elements but nav has no listing of tables',\n },\n NAV_008: {\n id: 'NAV-008',\n severity: 'usage',\n description: 'Content has video elements but nav has no listing of video clips',\n },\n NAV_009: {\n id: 'NAV-009',\n severity: 'error',\n description: 'Region-based navigation links must point to Fixed-Layout Documents',\n },\n NAV_010: {\n id: 'NAV-010',\n severity: 'error',\n description: 'Nav must not link to remote resources',\n },\n NAV_011: {\n id: 'NAV-011',\n severity: 'warning',\n description: 'Nav must be in reading order',\n },\n\n // NCX errors (NCX-*)\n NCX_001: {\n id: 'NCX-001',\n severity: 'error',\n description: 'NCX identifier does not match OPF identifier',\n },\n NCX_002: { id: 'NCX-002', severity: 'suppressed', description: 'Invalid NCX reference' },\n NCX_003: { id: 'NCX-003', severity: 'suppressed', description: 'NavPoint missing text content' },\n NCX_004: {\n id: 'NCX-004',\n severity: 'usage',\n description: 'NCX identifier should not have leading or trailing whitespace',\n },\n NCX_005: { id: 'NCX-005', severity: 'suppressed', description: 'NCX required for EPUB 2' },\n NCX_006: { id: 'NCX-006', severity: 'usage', description: 'Empty text label in NCX document' },\n\n // Accessibility errors (ACC-*)\n ACC_001: { id: 'ACC-001', severity: 'suppressed', description: 'Image missing alt text' },\n ACC_002: {\n id: 'ACC-002',\n severity: 'suppressed',\n description: 'Missing schema:accessibilityFeature metadata',\n },\n ACC_003: { id: 'ACC-003', severity: 'suppressed', description: 'Missing accessibility metadata' },\n ACC_004: {\n id: 'ACC-004',\n severity: 'suppressed',\n description: 'Html a element must have text',\n },\n ACC_005: {\n id: 'ACC-005',\n severity: 'suppressed',\n description: 'Table heading cells should use th elements',\n },\n ACC_006: {\n id: 'ACC-006',\n severity: 'suppressed',\n description: 'Tables should include thead element',\n },\n ACC_007: {\n id: 'ACC-007',\n severity: 'suppressed',\n description: 'Content Documents do not use epub:type for semantic inflection',\n },\n ACC_008: { id: 'ACC-008', severity: 'suppressed', description: 'Page numbering has gaps' },\n ACC_009: {\n id: 'ACC-009',\n severity: 'usage',\n description: 'MathML should have alttext attribute or annotation-xml child',\n },\n ACC_010: {\n id: 'ACC-010',\n severity: 'suppressed',\n description: 'Missing schema:accessMode metadata',\n },\n ACC_011: {\n id: 'ACC-011',\n severity: 'usage',\n description: 'SVG hyperlink has no accessible name',\n },\n ACC_012: {\n id: 'ACC-012',\n severity: 'suppressed',\n description: 'Table elements should include caption element',\n },\n ACC_013: {\n id: 'ACC-013',\n severity: 'suppressed',\n description: 'Complex image missing aria-describedby',\n },\n ACC_014: { id: 'ACC-014', severity: 'suppressed', description: 'Empty table header cell' },\n ACC_015: {\n id: 'ACC-015',\n severity: 'suppressed',\n description: 'Table missing summary or caption',\n },\n ACC_016: { id: 'ACC-016', severity: 'suppressed', description: 'Visual adjustments not allowed' },\n ACC_017: { id: 'ACC-017', severity: 'suppressed', description: 'Missing schema.org accessMode' },\n\n // Media errors (MED-*)\n MED_001: { id: 'MED-001', severity: 'suppressed', description: 'Invalid media type' },\n MED_002: { id: 'MED-002', severity: 'suppressed', description: 'Media overlay error' },\n MED_003: {\n id: 'MED-003',\n severity: 'error',\n description: 'Picture img must reference core media type resources',\n },\n MED_004: { id: 'MED-004', severity: 'error', description: 'Image file header may be corrupted' },\n MED_005: {\n id: 'MED-005',\n severity: 'error',\n description: 'Media Overlay audio reference to non-standard audio type',\n },\n MED_006: { id: 'MED-006', severity: 'suppressed', description: 'Invalid media fallback chain' },\n MED_007: {\n id: 'MED-007',\n severity: 'error',\n description: 'Picture source must define type for foreign resources',\n },\n MED_008: {\n id: 'MED-008',\n severity: 'error',\n description: 'clipBegin must not be after clipEnd',\n },\n MED_009: {\n id: 'MED-009',\n severity: 'error',\n description: 'clipBegin must not be same as clipEnd',\n },\n MED_010: {\n id: 'MED-010',\n severity: 'error',\n description: 'Content Document from Media Overlay must specify media-overlay attribute',\n },\n MED_011: {\n id: 'MED-011',\n severity: 'error',\n description: 'Content Document referenced from multiple Media Overlay Documents',\n },\n MED_012: {\n id: 'MED-012',\n severity: 'error',\n description: 'media-overlay attribute does not match Media Overlay ID',\n },\n MED_013: {\n id: 'MED-013',\n severity: 'error',\n description: 'Media Overlay from media-overlay attribute has no reference to Content Document',\n },\n MED_014: {\n id: 'MED-014',\n severity: 'error',\n description: 'Media overlay audio URLs must not have fragment',\n },\n MED_015: {\n id: 'MED-015',\n severity: 'usage',\n description: 'Media overlay text references must be in reading order',\n },\n MED_016: {\n id: 'MED-016',\n severity: 'warning',\n description: 'Media Overlays total duration should be sum of all durations',\n },\n MED_017: {\n id: 'MED-017',\n severity: 'warning',\n description: 'URL fragment should indicate element ID',\n },\n MED_018: {\n id: 'MED-018',\n severity: 'warning',\n description: 'URL fragment should be SVG fragment identifier',\n },\n\n // Scripting errors (SCP-*)\n SCP_001: { id: 'SCP-001', severity: 'suppressed', description: 'Scripting used in publication' },\n SCP_002: {\n id: 'SCP-002',\n severity: 'suppressed',\n description: 'Script in spine content document',\n },\n SCP_003: { id: 'SCP-003', severity: 'suppressed', description: 'Inline script element' },\n SCP_004: {\n id: 'SCP-004',\n severity: 'suppressed',\n description: 'Event handler attribute detected',\n },\n SCP_005: {\n id: 'SCP-005',\n severity: 'suppressed',\n description: 'Script not declared in manifest',\n },\n SCP_006: { id: 'SCP-006', severity: 'suppressed', description: 'JavaScript URL not allowed' },\n SCP_007: { id: 'SCP-007', severity: 'suppressed', description: 'Container-constrained script' },\n SCP_008: {\n id: 'SCP-008',\n severity: 'suppressed',\n description: 'Scripted content missing properties',\n },\n SCP_009: { id: 'SCP-009', severity: 'suppressed', description: 'Script execution error' },\n SCP_010: { id: 'SCP-010', severity: 'suppressed', description: 'EPUB CFI URL detected' },\n\n // Informational messages (INF-*)\n INF_001: {\n id: 'INF-001',\n severity: 'info',\n description: 'Rule is under review and severity may change',\n },\n\n // Internal checker errors (CHK-*)\n CHK_001: {\n id: 'CHK-001',\n severity: 'error',\n description: 'Custom message overrides file not found',\n },\n CHK_002: {\n id: 'CHK-002',\n severity: 'error',\n description: 'Unrecognized custom message id in overrides file',\n },\n CHK_003: {\n id: 'CHK-003',\n severity: 'error',\n description: 'Unrecognized custom message severity in overrides file',\n },\n CHK_004: {\n id: 'CHK-004',\n severity: 'error',\n description: 'Custom message contains too many parameters',\n },\n CHK_005: {\n id: 'CHK-005',\n severity: 'error',\n description: 'Custom suggestion contains too many parameters',\n },\n CHK_006: {\n id: 'CHK-006',\n severity: 'error',\n description: 'Unable to parse custom format parameter',\n },\n CHK_007: {\n id: 'CHK-007',\n severity: 'error',\n description: 'Error processing custom message file',\n },\n CHK_008: {\n id: 'CHK-008',\n severity: 'error',\n description: 'Error processing item, skipping other checks',\n },\n} as const satisfies Record<string, MessageDef>;\n\ntype MessageDefsType = typeof MessageDefs;\ntype MessageKey = keyof MessageDefsType;\n\n/**\n * MessageId provides enum-like access to message IDs.\n *\n * @example\n * ```typescript\n * MessageId.PKG_001 // 'PKG-001'\n * MessageId.OPF_010 // 'OPF-010'\n * ```\n */\nexport const MessageId = Object.fromEntries(\n Object.entries(MessageDefs).map(([key, def]) => [key, def.id]),\n) as { readonly [K in MessageKey]: MessageDefsType[K]['id'] };\n\nexport type MessageId = MessageDefsType[MessageKey]['id'];\n\n/**\n * Message info structure\n */\nexport interface MessageInfo {\n id: string;\n severity: MessageSeverity;\n description: string;\n}\n\n/**\n * Get message info by ID\n */\nexport function getMessageInfo(id: string): MessageInfo | undefined {\n const entry = Object.values(MessageDefs).find((def) => def.id === id);\n return entry;\n}\n\n/**\n * Get default severity for a message ID\n */\nexport function getDefaultSeverity(id: string): MessageSeverity {\n const info = getMessageInfo(id);\n return info?.severity ?? 'error';\n}\n\n/**\n * Get all message definitions as an array (for iteration/display)\n */\nexport function getAllMessages(): readonly MessageInfo[] {\n return Object.values(MessageDefs);\n}\n\n/**\n * Format message list for console output\n */\nexport function formatMessageList(): string {\n const lines: string[] = [];\n lines.push('ID\\tSEVERITY\\tDESCRIPTION');\n lines.push('─'.repeat(80));\n\n for (const msg of Object.values(MessageDefs)) {\n const severity = msg.severity.toUpperCase();\n lines.push(`${msg.id}\\t${severity}\\t${msg.description}`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Options for creating a validation message\n */\nexport interface CreateMessageOptions {\n /** Message ID from MessageId enum */\n id: MessageId;\n /** Human-readable message */\n message: string;\n /** Location where the issue was found */\n location?: EPUBLocation;\n /** Suggestion for fixing the issue */\n suggestion?: string;\n /** Override the default severity (use sparingly) */\n severityOverride?: Severity;\n}\n\n/**\n * Create a validation message with automatic severity lookup\n *\n * @example\n * ```typescript\n * const msg = createMessage({\n * id: MessageId.PKG_006,\n * message: 'Missing mimetype file',\n * location: { path: 'mimetype' },\n * });\n * if (msg) context.messages.push(msg);\n * ```\n */\nexport function createMessage(options: CreateMessageOptions): ValidationMessage | null {\n const { id, message, location, suggestion, severityOverride } = options;\n\n const registeredSeverity = getDefaultSeverity(id);\n\n // Skip suppressed messages unless severity is overridden\n if (registeredSeverity === 'suppressed' && !severityOverride) {\n return null;\n }\n\n const severity: Severity = severityOverride ?? (registeredSeverity as Severity);\n\n const result: ValidationMessage = {\n id,\n severity,\n message,\n };\n\n if (location) {\n result.location = location;\n }\n\n if (suggestion) {\n result.suggestion = suggestion;\n }\n\n return result;\n}\n\n/**\n * Create and push a validation message to the messages array.\n * Automatically handles suppressed messages by not pushing them.\n *\n * @example\n * ```typescript\n * pushMessage(context.messages, {\n * id: MessageId.PKG_006,\n * message: 'Missing mimetype file',\n * location: { path: 'mimetype' },\n * });\n * ```\n */\nexport function pushMessage(messages: ValidationMessage[], options: CreateMessageOptions): void {\n const msg = createMessage(options);\n if (msg) {\n messages.push(msg);\n }\n}\n","/**\n * CSS validation using css-tree\n */\n\nimport { type Atrule, type CssNode, type Declaration, type Url, parse, walk } from 'css-tree';\nimport { MessageId, pushMessage } from '../messages/index.js';\nimport type { ValidationContext } from '../types.js';\n\ninterface ParseErrorWithLocation {\n formattedMessage: string;\n line?: number;\n column?: number;\n}\n\ninterface CssLocation {\n start?: { line: number; column: number };\n}\n\n/**\n * Reference found in CSS (for @import, @font-face src, and url() declarations)\n */\nexport interface CSSReference {\n url: string;\n type: 'import' | 'font' | 'image' | 'resource';\n line?: number | undefined;\n column?: number | undefined;\n}\n\n/**\n * Result of CSS validation including extracted references\n */\nexport interface CSSValidationResult {\n /** References to other resources (imports, fonts) */\n references: CSSReference[];\n /** Font families declared via @font-face */\n fontFamilies: string[];\n}\n\n/** Standard EPUB font MIME types */\nconst BLESSED_FONT_TYPES = new Set([\n 'application/font-woff',\n 'application/font-woff2',\n 'font/woff',\n 'font/woff2',\n 'font/otf',\n 'font/ttf',\n 'application/vnd.ms-opentype',\n 'application/font-sfnt',\n 'application/x-font-ttf',\n 'application/x-font-opentype',\n 'application/x-font-truetype',\n]);\n\n/** Map file extensions to font MIME types */\nconst FONT_EXTENSION_TO_TYPE: Record<string, string> = {\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.otf': 'font/otf',\n '.ttf': 'font/ttf',\n};\n\n/**\n * Validator for CSS stylesheets\n */\nexport class CSSValidator {\n /**\n * Validate CSS content and extract references\n */\n validate(context: ValidationContext, css: string, resourcePath: string): CSSValidationResult {\n const result: CSSValidationResult = {\n references: [],\n fontFamilies: [],\n };\n\n let ast: CssNode;\n\n try {\n ast = parse(css, {\n positions: true,\n onParseError: (error) => {\n const err = error as ParseErrorWithLocation;\n const location: { path: string; line?: number; column?: number } = {\n path: resourcePath,\n };\n if (err.line !== undefined) location.line = err.line;\n if (err.column !== undefined) location.column = err.column;\n\n pushMessage(context.messages, {\n id: MessageId.CSS_008,\n message: `CSS parse error: ${error.formattedMessage}`,\n location,\n });\n },\n });\n } catch (error) {\n pushMessage(context.messages, {\n id: MessageId.CSS_008,\n message: `CSS parse error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n location: { path: resourcePath },\n });\n return result;\n }\n\n // Walk the AST to check for discouraged properties and collect references\n this.checkDiscouragedProperties(context, ast, resourcePath);\n this.checkAtRules(context, ast, resourcePath, result);\n this.checkMediaOverlayClasses(context, ast, resourcePath);\n this.extractUrlReferences(context, ast, resourcePath, result);\n\n return result;\n }\n\n private extractUrlReferences(\n context: ValidationContext,\n ast: CssNode,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n walk(ast, (node) => {\n if (node.type === 'Atrule') {\n const atRule = node;\n if (atRule.name === 'font-face') {\n return;\n }\n if (atRule.block) {\n walk(atRule.block, (blockNode) => {\n if (blockNode.type === 'Declaration') {\n this.processDeclarationForUrl(blockNode, resourcePath, result);\n }\n });\n }\n } else if (node.type === 'Rule') {\n const rule = node;\n walk(rule.block, (blockNode) => {\n if (blockNode.type === 'Declaration') {\n this.processDeclarationForUrl(blockNode, resourcePath, result);\n }\n });\n }\n });\n }\n\n private processDeclarationForUrl(\n declaration: Declaration,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n const property = declaration.property.toLowerCase();\n\n walk(declaration.value, (valueNode) => {\n if (valueNode.type === 'Url') {\n const urlValue = this.extractUrlValue(valueNode);\n if (urlValue && !urlValue.startsWith('data:')) {\n const loc = (valueNode as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = {\n path: resourcePath,\n };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n let refType: 'image' | 'font' | 'resource' = 'resource';\n if (property.includes('font')) {\n refType = 'font';\n } else if (\n property.includes('background') ||\n property.includes('list-style') ||\n property.includes('content') ||\n property.includes('border-image') ||\n property.includes('mask')\n ) {\n refType = 'image';\n }\n\n result.references.push({\n url: urlValue,\n type: refType,\n line: start?.line,\n column: start?.column,\n });\n }\n }\n });\n }\n\n /**\n * Check for forbidden and discouraged CSS properties in EPUB\n */\n private checkDiscouragedProperties(\n context: ValidationContext,\n ast: CssNode,\n resourcePath: string,\n ): void {\n walk(ast, (node) => {\n if (node.type === 'Declaration') {\n this.checkForbiddenProperties(context, node, resourcePath);\n this.checkPositionProperty(context, node, resourcePath);\n }\n });\n }\n\n /**\n * Check for forbidden CSS properties (direction, unicode-bidi)\n * These properties must not be used in EPUB content per EPUB spec\n */\n private checkForbiddenProperties(\n context: ValidationContext,\n node: Declaration,\n resourcePath: string,\n ): void {\n const property = node.property.toLowerCase();\n const forbiddenProperties = ['direction', 'unicode-bidi'];\n\n if (!forbiddenProperties.includes(property)) return;\n\n const loc = (node as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n pushMessage(context.messages, {\n id: MessageId.CSS_001,\n message: `CSS property \"${property}\" must not be included in an EPUB Style Sheet`,\n location,\n });\n }\n\n /**\n * Check position property for discouraged values\n */\n private checkPositionProperty(\n context: ValidationContext,\n node: Declaration,\n resourcePath: string,\n ): void {\n const property = node.property.toLowerCase();\n if (property !== 'position') return;\n\n const value = this.getDeclarationValue(node);\n const loc = (node as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n // CSS-006: position: fixed is discouraged\n if (value === 'fixed') {\n pushMessage(context.messages, {\n id: MessageId.CSS_006,\n message: 'CSS property \"position: fixed\" is discouraged in EPUB',\n location,\n });\n }\n }\n\n /**\n * Extract the value from a Declaration node\n */\n private getDeclarationValue(node: Declaration): string {\n const value = node.value;\n if (value.type === 'Value') {\n const first = value.children.first;\n if (first?.type === 'Identifier') {\n return first.name.toLowerCase();\n }\n }\n return '';\n }\n\n /**\n * Check at-rules (@import, @font-face)\n */\n private checkAtRules(\n context: ValidationContext,\n ast: CssNode,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n walk(ast, (node) => {\n if (node.type === 'Atrule') {\n const atRule = node;\n const ruleName = atRule.name.toLowerCase();\n\n if (ruleName === 'import') {\n this.checkImport(context, atRule, resourcePath, result);\n } else if (ruleName === 'font-face') {\n this.checkFontFace(context, atRule, resourcePath, result);\n }\n }\n });\n }\n\n /**\n * Check @import at-rule\n */\n private checkImport(\n context: ValidationContext,\n atRule: Atrule,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n const loc = (atRule as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n // Extract URL from @import prelude\n if (!atRule.prelude) {\n pushMessage(context.messages, {\n id: MessageId.CSS_002,\n message: 'Empty @import rule',\n location,\n });\n return;\n }\n\n let importUrl = '';\n\n walk(atRule.prelude, (node) => {\n if (importUrl) return;\n\n if (node.type === 'Url') {\n importUrl = this.extractUrlValue(node);\n } else if (node.type === 'String') {\n importUrl = (node as { value: string }).value;\n }\n });\n\n if (!importUrl || importUrl.trim() === '') {\n pushMessage(context.messages, {\n id: MessageId.CSS_002,\n message: 'Empty or NULL reference found in @import',\n location,\n });\n return;\n }\n\n // Add to references for cross-reference validation\n result.references.push({\n url: importUrl,\n type: 'import',\n line: start?.line,\n column: start?.column,\n });\n }\n\n /**\n * Check @font-face at-rule\n */\n private checkFontFace(\n context: ValidationContext,\n atRule: Atrule,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n const loc = (atRule as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n // Report font-face usage\n if (context.options.includeUsage) {\n pushMessage(context.messages, {\n id: MessageId.CSS_028,\n message: 'Use of @font-face declaration',\n location,\n });\n }\n\n // Check if @font-face has any declarations\n if (!atRule.block || atRule.block.children.isEmpty) {\n pushMessage(context.messages, {\n id: MessageId.CSS_019,\n message: '@font-face declaration has no attributes',\n location,\n });\n return;\n }\n\n const state = { hasSrc: false, fontFamily: null as string | null };\n\n walk(atRule.block, (node) => {\n if (node.type === 'Declaration') {\n const propName = node.property.toLowerCase();\n\n if (propName === 'font-family') {\n state.fontFamily = this.extractFontFamily(node);\n } else if (propName === 'src') {\n state.hasSrc = true;\n this.checkFontFaceSrc(context, node, resourcePath, result);\n }\n }\n });\n\n if (state.fontFamily) {\n result.fontFamilies.push(state.fontFamily);\n }\n\n if (!state.hasSrc) {\n pushMessage(context.messages, {\n id: MessageId.CSS_019,\n message: '@font-face declaration is missing src property',\n location,\n });\n }\n }\n\n /**\n * Check src property in @font-face\n */\n private checkFontFaceSrc(\n context: ValidationContext,\n decl: Declaration,\n resourcePath: string,\n result: CSSValidationResult,\n ): void {\n const loc = (decl as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n // Walk through the value to find url() functions\n walk(decl.value, (node) => {\n if (node.type === 'Url') {\n const urlNode = node;\n const urlValue = this.extractUrlValue(urlNode);\n\n if (!urlValue || urlValue.trim() === '') {\n pushMessage(context.messages, {\n id: MessageId.CSS_002,\n message: 'Empty or NULL reference found in @font-face src',\n location,\n });\n return;\n }\n\n // Skip data: URLs and fragment-only URLs\n if (urlValue.startsWith('data:') || urlValue.startsWith('#')) {\n return;\n }\n\n // Add to references for cross-reference validation\n result.references.push({\n url: urlValue,\n type: 'font',\n line: start?.line,\n column: start?.column,\n });\n\n // Check font MIME type based on extension\n this.checkFontType(context, urlValue, resourcePath, location);\n }\n });\n }\n\n /**\n * Check if font type is a blessed EPUB font type\n */\n private checkFontType(\n context: ValidationContext,\n fontUrl: string,\n resourcePath: string,\n location: { path: string; line?: number; column?: number },\n ): void {\n // Extract file extension\n const urlPath = fontUrl.split('?')[0] ?? fontUrl; // Remove query string\n const extMatch = /\\.[a-zA-Z0-9]+$/.exec(urlPath);\n if (!extMatch) return;\n\n const ext = extMatch[0].toLowerCase();\n const mimeType = FONT_EXTENSION_TO_TYPE[ext];\n\n if (mimeType && !BLESSED_FONT_TYPES.has(mimeType)) {\n pushMessage(context.messages, {\n id: MessageId.CSS_007,\n message: `Font-face reference \"${fontUrl}\" refers to non-standard font type \"${mimeType}\"`,\n location,\n });\n }\n\n // Also check if the manifest has this file with a non-standard type\n const packageDoc = context.packageDocument;\n if (packageDoc) {\n // Resolve relative URL\n const cssDir = resourcePath.includes('/')\n ? resourcePath.substring(0, resourcePath.lastIndexOf('/'))\n : '';\n const resolvedPath = this.resolvePath(cssDir, fontUrl);\n\n const manifestItem = packageDoc.manifest.find((item) => item.href === resolvedPath);\n if (manifestItem && !BLESSED_FONT_TYPES.has(manifestItem.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.CSS_007,\n message: `Font-face reference \"${fontUrl}\" has non-standard media type \"${manifestItem.mediaType}\" in manifest`,\n location,\n });\n }\n }\n }\n\n /**\n * Extract URL value from Url node\n */\n private extractUrlValue(urlNode: Url): string {\n const value = urlNode.value;\n if (typeof value === 'string') {\n return value;\n }\n return '';\n }\n\n /**\n * Extract font-family value from declaration\n */\n private extractFontFamily(decl: Declaration): string | null {\n const value = decl.value;\n if (value.type === 'Value') {\n const first = value.children.first;\n if (first?.type === 'String') {\n return (first as { value: string }).value;\n }\n if (first?.type === 'Identifier') {\n return (first as { name: string }).name;\n }\n }\n return null;\n }\n\n /**\n * Resolve a relative path from a base path\n */\n private resolvePath(basePath: string, relativePath: string): string {\n // Handle absolute paths\n if (relativePath.startsWith('/')) {\n return relativePath.substring(1);\n }\n\n // Split paths into segments\n const baseSegments = basePath.split('/').filter(Boolean);\n const relativeSegments = relativePath.split('/');\n\n // Start from base directory\n const resultSegments = [...baseSegments];\n\n for (const segment of relativeSegments) {\n if (segment === '..') {\n resultSegments.pop();\n } else if (segment !== '.' && segment !== '') {\n resultSegments.push(segment);\n }\n }\n\n return resultSegments.join('/');\n }\n\n /**\n * Check for reserved media overlay class names\n */\n private checkMediaOverlayClasses(\n context: ValidationContext,\n ast: CssNode,\n resourcePath: string,\n ): void {\n const reservedClassNames = new Set([\n '-epub-media-overlay-active',\n 'media-overlay-active',\n '-epub-media-overlay-playing',\n 'media-overlay-playing',\n ]);\n\n walk(ast, (node) => {\n if (node.type === 'ClassSelector') {\n const className = node.name.toLowerCase();\n\n if (reservedClassNames.has(className)) {\n const loc = (node as CssNode & { loc?: CssLocation }).loc;\n const start = loc?.start;\n const location: { path: string; line?: number; column?: number } = { path: resourcePath };\n if (start) {\n location.line = start.line;\n location.column = start.column;\n }\n\n pushMessage(context.messages, {\n id: MessageId.CSS_029,\n message: `Class name \"${className}\" is reserved for media overlays`,\n location,\n });\n }\n }\n });\n }\n}\n","import type { EPUBVersion } from '../types.js';\n\n/**\n * Represents a manifest item in the OPF\n */\nexport interface ManifestItem {\n /** Unique identifier for this item */\n id: string;\n /** Path relative to the OPF file */\n href: string;\n /** MIME media type */\n mediaType: string;\n /** Fallback item ID for non-standard media types */\n fallback?: string;\n /** Media overlay ID */\n mediaOverlay?: string;\n /** Item properties (EPUB 3) - e.g., 'nav', 'scripted', 'svg', 'remote-resources' */\n properties?: string[];\n}\n\n/**\n * Represents a spine itemref in the OPF\n */\nexport interface SpineItemRef {\n /** Optional ID attribute on the itemref element */\n id?: string;\n /** Reference to manifest item ID */\n idref: string;\n /** Whether this item is part of the linear reading order */\n linear: boolean;\n /** Itemref properties (EPUB 3) - e.g., 'page-spread-left', 'page-spread-right' */\n properties?: string[];\n}\n\n/**\n * Represents a guide reference (EPUB 2)\n */\nexport interface GuideReference {\n /** Type of reference (cover, toc, etc.) */\n type: string;\n /** Title for display */\n title?: string;\n /** Path to the referenced item */\n href: string;\n}\n\n/**\n * Dublin Core metadata element\n */\nexport interface DCElement {\n /** The element name (title, creator, identifier, etc.) */\n name: string;\n /** The text content */\n value: string;\n /** The id attribute, if any */\n id?: string;\n /** Additional attributes */\n attributes?: Record<string, string>;\n}\n\n/**\n * EPUB 3 meta element\n */\nexport interface MetaElement {\n /** Property name (with optional prefix) */\n property: string;\n /** The text content */\n value: string;\n /** ID of the element this meta refines */\n refines?: string;\n /** Scheme for the value */\n scheme?: string;\n /** The id attribute, if any */\n id?: string;\n}\n\n/**\n * EPUB 3 link element\n */\nexport interface LinkElement {\n /** Relationship type */\n rel: string;\n /** URL to the linked resource */\n href: string;\n /** Media type of the linked resource */\n mediaType?: string;\n /** ID of the element this link refines */\n refines?: string;\n /** Link properties */\n properties?: string[];\n /** The id attribute, if any */\n id?: string;\n /** Language tag for the linked resource */\n hreflang?: string;\n}\n\n/**\n * Parsed OPF package document\n */\nexport interface PackageDocument {\n /** EPUB version from package@version */\n version: EPUBVersion;\n /** Unique identifier reference (package@unique-identifier) */\n uniqueIdentifier: string;\n /** Package prefix declarations (EPUB 3) */\n prefixes?: Record<string, string>;\n /** Package direction (rtl, ltr, auto) */\n dir?: string;\n /** Dublin Core metadata elements */\n dcElements: DCElement[];\n /** EPUB 3 meta elements */\n metaElements: MetaElement[];\n /** EPUB 3 link elements */\n linkElements: LinkElement[];\n /** Manifest items */\n manifest: ManifestItem[];\n /** Spine item references */\n spine: SpineItemRef[];\n /** Spine toc attribute (NCX reference for EPUB 2) */\n spineToc?: string;\n /** Spine page-progression-direction */\n pageProgressionDirection?: 'ltr' | 'rtl' | 'default';\n /** Guide references (EPUB 2) */\n guide: GuideReference[];\n /** Collections (EPUB 3) */\n collections: Collection[];\n /** Whether the bindings element is present (deprecated in EPUB 3.3) */\n hasBindings?: boolean;\n /** xml:lang attribute on elements (for validation) */\n xmlLangs?: string[];\n}\n\n/**\n * Represents a collection in the OPF (EPUB 3)\n */\nexport interface Collection {\n /** Collection role (dictionary, index, preview, etc.) */\n role: string;\n /** Collection identifier */\n id?: string;\n /** Collection name/label */\n name?: string;\n /** Resource hrefs in this collection (from link elements) */\n links: string[];\n}\n\n/**\n * Core Media Types that don't require fallbacks\n * @see https://www.w3.org/TR/epub-33/#sec-core-media-types\n */\nexport const CORE_MEDIA_TYPES = new Set([\n // Image types\n 'image/gif',\n 'image/jpeg',\n 'image/png',\n 'image/svg+xml',\n 'image/webp',\n // Audio types\n 'audio/mpeg',\n 'audio/mp4',\n 'audio/ogg',\n // CSS\n 'text/css',\n // Fonts\n 'font/otf',\n 'font/ttf',\n 'font/woff',\n 'font/woff2',\n 'application/font-sfnt', // deprecated alias for font/otf, font/ttf\n 'application/font-woff', // deprecated alias for font/woff\n 'application/vnd.ms-opentype', // deprecated alias\n // Content documents\n 'application/xhtml+xml',\n 'application/x-dtbncx+xml', // NCX\n // JavaScript (EPUB 3)\n 'text/javascript',\n 'application/javascript',\n // Media overlays\n 'application/smil+xml',\n // PLS (Pronunciation Lexicon)\n 'application/pls+xml',\n]);\n\n/**\n * Check if a MIME type is a Core Media Type per EPUB 3 spec.\n * Handles media type parameters (e.g., \"audio/ogg ; codecs=opus\")\n * and the rule that all video/* types are blessed.\n */\nexport function isCoreMediaType(mimeType: string): boolean {\n if (CORE_MEDIA_TYPES.has(mimeType)) return true;\n // All video/* types are blessed per EPUB 3 spec\n if (mimeType.startsWith('video/')) return true;\n // Handle audio/ogg with codecs parameter\n if (/^audio\\/ogg\\s*;\\s*codecs=opus$/i.test(mimeType)) return true;\n // Strip media type parameters and retry\n const semicolonIndex = mimeType.indexOf(';');\n if (semicolonIndex >= 0) {\n const baseType = mimeType.substring(0, semicolonIndex).trim();\n if (CORE_MEDIA_TYPES.has(baseType)) return true;\n if (baseType.startsWith('video/')) return true;\n }\n return false;\n}\n\n/**\n * Known item property values (EPUB 3)\n */\nexport const ITEM_PROPERTIES = new Set([\n 'cover-image',\n 'mathml',\n 'nav',\n 'remote-resources',\n 'scripted',\n 'svg',\n 'switch',\n]);\n\n/**\n * Known link element property values (EPUB 3)\n */\nexport const LINK_PROPERTIES = new Set(['onix', 'marc21xml-record', 'mods-record', 'xmp-record']);\n\n/**\n * Known spine itemref property values (EPUB 3)\n */\nexport const SPINE_PROPERTIES = new Set([\n 'page-spread-left',\n 'page-spread-right',\n 'rendition:spread-none',\n 'rendition:spread-landscape',\n 'rendition:spread-portrait',\n 'rendition:spread-both',\n 'rendition:spread-auto',\n 'rendition:page-spread-center',\n 'rendition:layout-reflowable',\n 'rendition:layout-pre-paginated',\n 'rendition:orientation-auto',\n 'rendition:orientation-landscape',\n 'rendition:orientation-portrait',\n]);\n","/**\n * Types for resource reference validation\n */\n\nimport type { EPUBLocation } from '../types.js';\n\n/**\n * Types of resource references\n */\nexport enum ReferenceType {\n // Linked resources\n LINK = 'link',\n // Publication resources\n GENERIC = 'generic',\n STYLESHEET = 'stylesheet',\n MEDIA_OVERLAY = 'media-overlay',\n HYPERLINK = 'hyperlink',\n FONT = 'font',\n IMAGE = 'image',\n AUDIO = 'audio',\n VIDEO = 'video',\n TRACK = 'track',\n CITE = 'cite',\n // SVG-specific\n SVG_PAINT = 'svg-paint',\n SVG_CLIP_PATH = 'svg-clip-path',\n SVG_SYMBOL = 'svg-symbol',\n // Navigation\n REGION_BASED_NAV = 'region-based-nav',\n NAV_TOC_LINK = 'nav-toc-link',\n NAV_PAGELIST_LINK = 'nav-pagelist-link',\n OVERLAY_TEXT_LINK = 'overlay-text-link',\n SEARCH_KEY = 'search-key',\n}\n\nconst PUBLICATION_RESOURCE_TYPES = new Set([\n ReferenceType.GENERIC,\n ReferenceType.STYLESHEET,\n ReferenceType.FONT,\n ReferenceType.IMAGE,\n ReferenceType.AUDIO,\n ReferenceType.VIDEO,\n ReferenceType.TRACK,\n ReferenceType.MEDIA_OVERLAY,\n ReferenceType.SVG_SYMBOL,\n ReferenceType.SVG_PAINT,\n ReferenceType.SVG_CLIP_PATH,\n]);\n\n/**\n * Check if a reference type is a publication resource reference\n */\nexport function isPublicationResourceReference(type: ReferenceType): boolean {\n return PUBLICATION_RESOURCE_TYPES.has(type);\n}\n\n/**\n * Parsed URL information for a reference\n */\nexport interface ParsedURL {\n /** Full URL string */\n url: string;\n /** URL without fragment identifier */\n resource: string;\n /** Fragment identifier (ID), if present */\n fragment?: string;\n /** Whether the URL has a fragment */\n hasFragment: boolean;\n}\n\n/**\n * A resource reference from the EPUB\n */\nexport interface Reference {\n /** Full URL with fragment */\n url: string;\n /** Target resource without fragment */\n targetResource: string;\n /** Fragment identifier if present */\n fragment?: string;\n /** Type of reference */\n type: ReferenceType;\n /** Location where reference was found */\n location: EPUBLocation;\n /** Whether reference has intrinsic fallback */\n hasIntrinsicFallback?: boolean;\n}\n\n/**\n * A resource (manifest item) in the EPUB\n */\nexport interface Resource {\n /** URL of the resource */\n url: string;\n /** MIME type */\n mimeType: string;\n /** Whether resource is in spine */\n inSpine: boolean;\n /** Whether resource has core media type fallback */\n hasCoreMediaTypeFallback?: boolean;\n /** Whether this is the navigation document */\n isNav?: boolean;\n /** Whether this is the cover image */\n isCoverImage?: boolean;\n /** Whether this is an NCX document */\n isNcx?: boolean;\n /** IDs defined in this resource */\n ids: Set<string>;\n}\n","/**\n * URL parsing and validation utilities\n */\n\nimport type { ParsedURL } from './types.js';\n\n/**\n * Parse an EPUB-internal URL into its components\n */\nexport function parseURL(urlString: string): ParsedURL {\n const hashIndex = urlString.indexOf('#');\n\n if (hashIndex === -1) {\n return {\n url: urlString,\n resource: urlString,\n hasFragment: false,\n };\n }\n\n const resource = urlString.substring(0, hashIndex);\n const fragment = urlString.substring(hashIndex + 1);\n\n const result: ParsedURL = {\n url: urlString,\n resource,\n hasFragment: true,\n };\n\n if (fragment) {\n result.fragment = fragment;\n }\n\n return result;\n}\n\n/**\n * Check if a URL is a data URL\n */\nexport function isDataURL(url: string): boolean {\n return url.startsWith('data:');\n}\n\n/**\n * Check if a URL is a file URL\n */\nexport function isFileURL(url: string): boolean {\n return url.startsWith('file:');\n}\n\n/**\n * Check if a URL is relative (not absolute)\n */\nexport function isRelativeURL(url: string): boolean {\n const regex = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\n return regex.exec(url) === null;\n}\n\n/**\n * Check if a URL has an absolute path (starts with /)\n */\nexport function hasAbsolutePath(url: string): boolean {\n return url.startsWith('/');\n}\n\n/**\n * Check if a URL tries to escape with parent directory (..)\n */\nexport function hasParentDirectoryReference(url: string): boolean {\n return url.includes('..');\n}\n\n/**\n * Check if a URL is malformed\n */\nexport function isMalformedURL(url: string): boolean {\n if (!url) return true;\n\n try {\n // Trim leading/trailing whitespace (XML attribute values are whitespace-trimmed)\n const trimmed = url.trim();\n if (!trimmed) return true;\n // Check for invalid characters (whitespace within URL, angle brackets)\n if (/[\\s<>]/.test(trimmed)) return true;\n return false;\n } catch {\n return true;\n }\n}\n\n/**\n * Check if a URL is HTTPS\n */\nexport function isHTTPS(url: string): boolean {\n return url.startsWith('https://');\n}\n\n/**\n * Check if a URL is HTTP\n */\nexport function isHTTP(url: string): boolean {\n return url.startsWith('http://');\n}\n\n/**\n * Check if a URL is remote (not relative)\n */\nexport function isRemoteURL(url: string): boolean {\n return isHTTP(url) || isHTTPS(url);\n}\n\n/**\n * Check if a URL leaks outside the EPUB container using the dual-base resolution trick\n */\nexport function checkUrlLeaking(href: string): boolean {\n const TEST_BASE_A = 'https://a.example.org/A/';\n const TEST_BASE_B = 'https://b.example.org/B/';\n try {\n const urlA = new URL(href, TEST_BASE_A).toString();\n const urlB = new URL(href, TEST_BASE_B).toString();\n return !urlA.startsWith(TEST_BASE_A) || !urlB.startsWith(TEST_BASE_B);\n } catch {\n return false;\n }\n}\n\nexport function resolveManifestHref(opfDir: string, href: string): string {\n if (isRemoteURL(href)) return href;\n try {\n const decoded = decodeURIComponent(href);\n const path = opfDir ? `${opfDir}/${decoded}` : decoded;\n return path.normalize('NFC');\n } catch {\n const path = opfDir ? `${opfDir}/${href}` : href;\n return path.normalize('NFC');\n }\n}\n","/**\n * Content document validation using libxml2-wasm for XML parsing\n */\n\nimport { XmlDocument, type XmlElement, type XmlNode } from 'libxml2-wasm';\nimport { CSSValidator } from '../css/validator.js';\nimport { MessageId, pushMessage } from '../messages/index.js';\nimport { isCoreMediaType } from '../opf/types.js';\nimport type { ResourceRegistry } from '../references/registry.js';\nimport { ReferenceType } from '../references/types.js';\nimport { resolveManifestHref } from '../references/url.js';\nimport type { ReferenceValidator } from '../references/validator.js';\nimport type { ValidationContext } from '../types.js';\n\nconst DISCOURAGED_ELEMENTS = new Set(['base', 'embed', 'rp']);\n\nconst ABSOLUTE_URI_RE = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\n\nconst IMAGE_MAGIC: readonly {\n mime: string;\n bytes: readonly number[];\n extensions: readonly string[];\n}[] = [\n { mime: 'image/jpeg', bytes: [0xff, 0xd8], extensions: ['.jpg', '.jpeg', '.jpe'] },\n { mime: 'image/gif', bytes: [0x47, 0x49, 0x46, 0x38], extensions: ['.gif'] },\n { mime: 'image/png', bytes: [0x89, 0x50, 0x4e, 0x47], extensions: ['.png'] },\n { mime: 'image/webp', bytes: [0x52, 0x49, 0x46, 0x46], extensions: ['.webp'] },\n];\n\nfunction stripMimeParams(t: string): string {\n const idx = t.indexOf(';');\n return (idx >= 0 ? t.substring(0, idx) : t).trim();\n}\n\n// EPUB Structural Semantics Vocabulary — deprecated values (OPF-086b)\nconst EPUB_SSV_DEPRECATED = new Set([\n 'annoref',\n 'annotation',\n 'biblioentry',\n 'bridgehead',\n 'endnote',\n 'help',\n 'marginalia',\n 'note',\n 'rearnote',\n 'rearnotes',\n 'sidebar',\n 'subchapter',\n 'warning',\n]);\n\n// EPUB SSV values disallowed on XHTML content documents (OPF-087)\nconst EPUB_SSV_DISALLOWED_ON_CONTENT = new Set([\n 'aside',\n 'figure',\n 'list',\n 'list-item',\n 'table',\n 'table-cell',\n 'table-row',\n]);\n\n// All known EPUB SSV values (non-exhaustive, for OPF-088 unknown detection)\nconst EPUB_SSV_ALL = new Set([\n ...EPUB_SSV_DEPRECATED,\n ...EPUB_SSV_DISALLOWED_ON_CONTENT,\n 'abstract',\n 'acknowledgments',\n 'afterword',\n 'appendix',\n 'assessment',\n 'assessments',\n 'backlink',\n 'backmatter',\n 'balloon',\n 'bibliography',\n 'biblioref',\n 'bodymatter',\n 'case-study',\n 'chapter',\n 'colophon',\n 'concluding-sentence',\n 'conclusion',\n 'contributors',\n 'copyright-page',\n 'cover',\n 'covertitle',\n 'credit',\n 'credits',\n 'dedication',\n 'division',\n 'endnotes',\n 'epigraph',\n 'epilogue',\n 'errata',\n 'fill-in-the-blank-problem',\n 'footnote',\n 'footnotes',\n 'foreword',\n 'frontmatter',\n 'fulltitle',\n 'general-problem',\n 'glossary',\n 'glossdef',\n 'glossref',\n 'glossterm',\n 'halftitle',\n 'halftitlepage',\n 'imprimatur',\n 'imprint',\n 'index',\n 'index-editor-note',\n 'index-entry',\n 'index-entry-list',\n 'index-group',\n 'index-headnotes',\n 'index-legend',\n 'index-locator',\n 'index-locator-list',\n 'index-locator-range',\n 'index-term',\n 'index-term-categories',\n 'index-term-category',\n 'index-xref-preferred',\n 'index-xref-related',\n 'introduction',\n 'keyword',\n 'keywords',\n 'label',\n 'landmarks',\n 'learning-objective',\n 'learning-objectives',\n 'learning-outcome',\n 'learning-outcomes',\n 'learning-resource',\n 'learning-resources',\n 'learning-standard',\n 'learning-standards',\n 'loa',\n 'loi',\n 'lot',\n 'lov',\n 'match-problem',\n 'multiple-choice-problem',\n 'noteref',\n 'notice',\n 'ordinal',\n 'other-credits',\n 'page-list',\n 'pagebreak',\n 'panel',\n 'panel-group',\n 'part',\n 'practice',\n 'practices',\n 'preamble',\n 'preface',\n 'prologue',\n 'pullquote',\n 'qna',\n 'question',\n 'referrer',\n 'revision-history',\n 'seriespage',\n 'sound-area',\n 'subtitle',\n 'tip',\n 'title',\n 'titlepage',\n 'toc',\n 'toc-brief',\n 'topic-sentence',\n 'true-false-problem',\n 'volume',\n]);\n\n// HTML5 valid datetime for <time datetime=\"...\">\n// See https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-time-element\nconst TIME_RE = /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d{1,3})?)?$/;\nconst TZ_RE = /(?:Z|[+-](?:[01]\\d|2[0-3]):?[0-5]\\d)$/;\nconst DATE_RE = /^\\d{4,}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$/;\nconst ISO_DURATION_RE = /^P(?:\\d+D)?(?:T(?:\\d+H)?(?:\\d+M)?(?:\\d+(?:\\.\\d{1,3})?S)?)?$/;\n// Informal duration: whitespace-separated components like \"9123W\", \"343H\", \"1M\", \"12S\"\nconst INFORMAL_DURATION_RE = /^\\s*(?:\\d+(?:\\.\\d{1,3})?[WDHMS]\\s*)+$/;\n\nfunction isValidDatetime(value: string): boolean {\n const trimmed = value.trim();\n if (trimmed === '') return false;\n\n // ISO duration: P...\n if (trimmed.startsWith('P')) {\n if (!ISO_DURATION_RE.test(trimmed)) return false;\n if (trimmed === 'P' || trimmed === 'PT') return false;\n // T must be followed by at least one time component\n if (trimmed.endsWith('T')) return false;\n return true;\n }\n\n // Informal duration: \"9123W\", \"343H\", \"1M\", \"12S\", \"123W 123H 32D 12S\"\n if (INFORMAL_DURATION_RE.test(value)) return true;\n\n // Year: YYYY\n if (/^\\d{4,}$/.test(trimmed)) return true;\n // Month: YYYY-MM\n if (/^\\d{4,}-(?:0[1-9]|1[0-2])$/.test(trimmed)) return true;\n // Yearless date: MM-DD or --MM-DD\n if (/^-?-?(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$/.test(trimmed)) return true;\n // Date: YYYY-MM-DD\n if (DATE_RE.test(trimmed)) return true;\n // Week: YYYY-Www\n if (/^\\d{4,}-W(?:0[1-9]|[1-4]\\d|5[0-3])$/.test(trimmed)) return true;\n // Time: HH:MM[:SS[.frac]]\n if (TIME_RE.test(trimmed)) return true;\n\n // Datetime: date separator time [timezone]\n const dtMatch = /^(\\d{4,}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01]))[T ]([\\s\\S]+)$/.exec(trimmed);\n if (dtMatch?.[2]) {\n let timePart: string = dtMatch[2];\n // Strip timezone suffix\n const tzMatch = TZ_RE.exec(timePart);\n if (tzMatch) timePart = timePart.substring(0, timePart.length - tzMatch[0].length);\n return TIME_RE.test(timePart);\n }\n\n return false;\n}\n\nconst HTML_ENTITIES = new Set([\n 'nbsp',\n 'iexcl',\n 'cent',\n 'pound',\n 'curren',\n 'yen',\n 'brvbar',\n 'sect',\n 'uml',\n 'copy',\n 'ordf',\n 'laquo',\n 'not',\n 'shy',\n 'reg',\n 'macr',\n 'deg',\n 'plusmn',\n 'sup2',\n 'sup3',\n 'acute',\n 'micro',\n 'para',\n 'middot',\n 'cedil',\n 'sup1',\n 'ordm',\n 'raquo',\n 'frac14',\n 'frac12',\n 'frac34',\n 'iquest',\n 'Agrave',\n 'Aacute',\n 'Acirc',\n 'Atilde',\n 'Auml',\n 'Aring',\n 'AElig',\n 'Ccedil',\n 'Egrave',\n 'Eacute',\n 'Ecirc',\n 'Euml',\n 'Igrave',\n 'Iacute',\n 'Icirc',\n 'Iuml',\n 'ETH',\n 'Ntilde',\n 'Ograve',\n 'Oacute',\n 'Ocirc',\n 'Otilde',\n 'Ouml',\n 'times',\n 'Oslash',\n 'Ugrave',\n 'Uacute',\n 'Ucirc',\n 'Uuml',\n 'Yacute',\n 'THORN',\n 'szlig',\n 'agrave',\n 'aacute',\n 'acirc',\n 'atilde',\n 'auml',\n 'aring',\n 'aelig',\n 'ccedil',\n 'egrave',\n 'eacute',\n 'ecirc',\n 'euml',\n 'igrave',\n 'iacute',\n 'icirc',\n 'iuml',\n 'eth',\n 'ntilde',\n 'ograve',\n 'oacute',\n 'ocirc',\n 'otilde',\n 'ouml',\n 'divide',\n 'oslash',\n 'ugrave',\n 'uacute',\n 'ucirc',\n 'uuml',\n 'yacute',\n 'thorn',\n 'yuml',\n]);\n\nexport class ContentValidator {\n private cssWithRemoteResources = new Set<string>();\n\n validate(\n context: ValidationContext,\n registry?: ResourceRegistry,\n refValidator?: ReferenceValidator,\n ): void {\n const packageDoc = context.packageDocument;\n if (!packageDoc) {\n return;\n }\n\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n // Process CSS files first so cssWithRemoteResources is populated before XHTML checks\n if (refValidator) {\n for (const item of packageDoc.manifest) {\n if (item.mediaType === 'text/css') {\n const fullPath = resolveManifestHref(opfDir, item.href);\n this.validateCSSDocument(context, fullPath, opfDir, refValidator);\n }\n }\n }\n\n for (const item of packageDoc.manifest) {\n if (item.mediaType === 'application/xhtml+xml') {\n const fullPath = resolveManifestHref(opfDir, item.href);\n this.validateXHTMLDocument(context, fullPath, item.id, opfDir, registry, refValidator);\n } else if (item.mediaType === 'image/svg+xml') {\n const fullPath = resolveManifestHref(opfDir, item.href);\n if (registry) {\n this.extractSVGIDs(context, fullPath, registry);\n }\n if (context.version.startsWith('3')) {\n this.validateSVGDocument(context, fullPath, item);\n }\n if (refValidator) {\n this.extractSVGReferences(context, fullPath, opfDir, refValidator);\n }\n }\n\n this.validateMediaFile(context, item, opfDir);\n }\n }\n\n private validateMediaFile(\n context: ValidationContext,\n item: { href: string; mediaType: string; id: string },\n opfDir: string,\n ): void {\n const declaredType = item.mediaType;\n const magicEntry = IMAGE_MAGIC.find((m) => m.mime === declaredType);\n if (!magicEntry) return;\n\n const fullPath = resolveManifestHref(opfDir, item.href);\n const fileData = context.files.get(fullPath);\n if (!fileData) return;\n\n const bytes = typeof fileData === 'string' ? new TextEncoder().encode(fileData) : fileData;\n\n // MED-004: File too small to contain a valid image header\n if (bytes.length < 4) {\n pushMessage(context.messages, {\n id: MessageId.MED_004,\n message: 'Image file header may be corrupted',\n location: { path: fullPath },\n });\n pushMessage(context.messages, {\n id: MessageId.PKG_021,\n message: 'Corrupted image file encountered',\n location: { path: fullPath },\n });\n return;\n }\n\n // OPF-029: Magic bytes don't match declared MIME type\n const headerMatches = magicEntry.bytes.every((b, i) => bytes[i] === b);\n if (!headerMatches) {\n const actualType = IMAGE_MAGIC.find((m) => m.bytes.every((b, i) => bytes[i] === b));\n pushMessage(context.messages, {\n id: MessageId.OPF_029,\n message: `File does not match declared media type \"${declaredType}\"${actualType ? ` (appears to be ${actualType.mime})` : ''}`,\n location: { path: fullPath },\n });\n return;\n }\n\n // PKG-022: File extension doesn't match declared MIME type\n const ext = item.href.includes('.')\n ? item.href.substring(item.href.lastIndexOf('.')).toLowerCase()\n : '';\n if (ext && !magicEntry.extensions.includes(ext)) {\n pushMessage(context.messages, {\n id: MessageId.PKG_022,\n message: `Wrong file extension \"${ext}\" for declared media type \"${declaredType}\"`,\n location: { path: fullPath },\n });\n }\n }\n\n private extractSVGIDs(\n context: ValidationContext,\n path: string,\n registry: ResourceRegistry,\n ): void {\n const svgData = context.files.get(path);\n if (!svgData) {\n return;\n }\n\n const svgContent = new TextDecoder().decode(svgData);\n let doc: XmlDocument | undefined;\n\n try {\n doc = XmlDocument.fromString(svgContent);\n // Extract IDs using XPath\n this.extractAndRegisterIDs(path, doc.root, registry);\n } catch (e) {\n pushMessage(context.messages, {\n id: MessageId.RSC_016,\n message: e instanceof Error ? e.message : 'SVG parsing failed',\n location: { path },\n });\n } finally {\n doc?.dispose();\n }\n }\n\n private validateSVGDocument(\n context: ValidationContext,\n path: string,\n manifestItem: { id: string; properties?: string[] },\n ): void {\n const svgData = context.files.get(path);\n if (!svgData) return;\n\n const svgContent = new TextDecoder().decode(svgData);\n let doc: XmlDocument | undefined;\n try {\n doc = XmlDocument.fromString(svgContent);\n } catch {\n return;\n }\n\n try {\n const root = doc.root;\n const hasRemote = this.detectSVGRemoteResources(root);\n if (hasRemote && !manifestItem.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'SVG document references remote resources but manifest item is missing \"remote-resources\" property',\n location: { path },\n });\n }\n\n this.checkDuplicateIDs(context, path, root);\n this.checkSVGInvalidIDs(context, path, root);\n this.validateSvgEpubType(context, path, root);\n this.checkUnknownEpubAttributes(context, path, root);\n } finally {\n doc.dispose();\n }\n }\n\n /**\n * Extract references from SVG documents: font-face-uri, xml-stylesheet PI, @import in style\n */\n private extractSVGReferences(\n context: ValidationContext,\n path: string,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const svgData = context.files.get(path);\n if (!svgData) return;\n\n const svgContent = new TextDecoder().decode(svgData);\n let doc: XmlDocument | undefined;\n try {\n doc = XmlDocument.fromString(svgContent);\n } catch {\n return;\n }\n\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n try {\n const root = doc.root;\n\n // Extract font-face-uri references as FONT type\n try {\n const fontFaceUris = root.find('.//svg:font-face-uri', {\n svg: 'http://www.w3.org/2000/svg',\n });\n for (const uri of fontFaceUris) {\n const href =\n this.getAttribute(uri as XmlElement, 'xlink:href') ??\n this.getAttribute(uri as XmlElement, 'href');\n if (!href) continue;\n if (href.startsWith('http://') || href.startsWith('https://')) {\n refValidator.addReference({\n url: href,\n targetResource: href,\n type: ReferenceType.FONT,\n location: { path, line: uri.line },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n refValidator.addReference({\n url: href,\n targetResource: resolvedPath,\n type: ReferenceType.FONT,\n location: { path, line: uri.line },\n });\n }\n }\n } catch {\n // empty\n }\n\n // Extract @import from SVG <style> elements\n try {\n const styles = root.find('.//svg:style', { svg: 'http://www.w3.org/2000/svg' });\n for (const style of styles) {\n const cssContent = (style as XmlElement).content;\n if (cssContent) {\n this.extractCSSImports(path, cssContent, opfDir, refValidator);\n }\n }\n } catch {\n // empty\n }\n\n this.extractSVGUseReferences(context, path, root, docDir, opfDir, refValidator);\n } finally {\n doc.dispose();\n }\n\n // Extract xml-stylesheet processing instructions\n this.extractXmlStylesheetPIs(svgContent, path, docDir, opfDir, refValidator);\n }\n\n /**\n * Extract href from <?xml-stylesheet?> processing instructions\n */\n private extractXmlStylesheetPIs(\n content: string,\n path: string,\n docDir: string,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const piRegex = /<\\?xml-stylesheet\\s+([^?]*)\\?>/g;\n let match;\n while ((match = piRegex.exec(content)) !== null) {\n const attrs = match[1];\n if (!attrs) continue;\n\n // Extract href pseudo-attribute\n const hrefMatch = /href\\s*=\\s*[\"']([^\"']*)[\"']/.exec(attrs);\n if (!hrefMatch?.[1]) continue;\n const href = hrefMatch[1];\n\n const beforeMatch = content.substring(0, match.index);\n const line = beforeMatch.split('\\n').length;\n\n if (href.startsWith('http://') || href.startsWith('https://')) {\n refValidator.addReference({\n url: href,\n targetResource: href,\n type: ReferenceType.STYLESHEET,\n location: { path, line },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n refValidator.addReference({\n url: href,\n targetResource: resolvedPath,\n type: ReferenceType.STYLESHEET,\n location: { path, line },\n });\n }\n }\n }\n\n private extractSVGUseReferences(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n docDir: string,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n try {\n const svgUseXlink = root.find('.//svg:use[@xlink:href]', {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n });\n const svgUseHref = root.find('.//svg:use[@href]', {\n svg: 'http://www.w3.org/2000/svg',\n });\n for (const useNode of [...svgUseXlink, ...svgUseHref]) {\n const useElem = useNode as XmlElement;\n const href = this.getAttribute(useElem, 'xlink:href') ?? this.getAttribute(useElem, 'href');\n if (href === null) continue;\n if (href.startsWith('http://') || href.startsWith('https://')) continue;\n\n const line = useNode.line;\n\n if (href === '' || !href.includes('#')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_015,\n message: `SVG \"use\" element requires a fragment identifier, but found \"${href}\"`,\n location: { path, line },\n });\n continue;\n }\n\n if (href.startsWith('#')) {\n refValidator.addReference({\n url: href,\n targetResource: path,\n fragment: href.slice(1),\n type: ReferenceType.SVG_SYMBOL,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : path;\n const fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n const useRef: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource,\n type: ReferenceType.SVG_SYMBOL,\n location: { path, line },\n };\n if (fragment) {\n useRef.fragment = fragment;\n }\n refValidator.addReference(useRef);\n }\n } catch {\n // XPath may fail on malformed documents\n }\n }\n\n private detectSVGRemoteResources(root: XmlElement): boolean {\n try {\n const fontFaceUris = root.find('.//svg:font-face-uri', {\n svg: 'http://www.w3.org/2000/svg',\n });\n for (const uri of fontFaceUris) {\n const href =\n this.getAttribute(uri as XmlElement, 'xlink:href') ??\n this.getAttribute(uri as XmlElement, 'href');\n if (href && (href.startsWith('http://') || href.startsWith('https://'))) {\n return true;\n }\n }\n } catch {\n // empty\n }\n\n try {\n const images = root.find('.//svg:image', { svg: 'http://www.w3.org/2000/svg' });\n for (const img of images) {\n const href =\n this.getAttribute(img as XmlElement, 'xlink:href') ??\n this.getAttribute(img as XmlElement, 'href');\n if (href && (href.startsWith('http://') || href.startsWith('https://'))) {\n return true;\n }\n }\n } catch {\n // empty\n }\n\n try {\n const styles = root.find('.//svg:style', { svg: 'http://www.w3.org/2000/svg' });\n for (const style of styles) {\n const cssContent = (style as XmlElement).content;\n if (this.cssContainsRemoteUrl(cssContent)) {\n return true;\n }\n }\n } catch {\n // empty\n }\n\n return false;\n }\n\n private validateCSSDocument(\n context: ValidationContext,\n path: string,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const cssData = context.files.get(path);\n if (!cssData) {\n return;\n }\n\n const cssContent = new TextDecoder().decode(cssData);\n\n // Run CSS validation and get references\n const cssValidator = new CSSValidator();\n const result = cssValidator.validate(context, cssContent, path);\n\n // Track CSS files with remote resources for XHTML manifest item checks\n const hasRemoteResources = result.references.some(\n (ref) => ref.url.startsWith('http://') || ref.url.startsWith('https://'),\n );\n if (hasRemoteResources) {\n this.cssWithRemoteResources.add(path);\n\n // Check the CSS manifest item itself for remote-resources property\n const packageDoc = context.packageDocument;\n if (packageDoc) {\n const manifestItem = packageDoc.manifest.find(\n (item) => path.endsWith(`/${item.href}`) || path === item.href,\n );\n if (manifestItem && !manifestItem.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'CSS document references remote resources but manifest item is missing \"remote-resources\" property',\n location: { path },\n });\n }\n }\n }\n\n const cssDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n for (const ref of result.references) {\n if (ref.type === 'font') {\n if (ref.url.startsWith('http://') || ref.url.startsWith('https://')) {\n const hashIndex = ref.url.indexOf('#');\n const targetResource = hashIndex >= 0 ? ref.url.slice(0, hashIndex) : ref.url;\n refValidator.addReference({\n url: ref.url,\n targetResource,\n type: ReferenceType.FONT,\n location: { path },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(cssDir, ref.url, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n\n refValidator.addReference({\n url: ref.url,\n targetResource,\n type: ReferenceType.FONT,\n location: { path },\n });\n }\n } else if (ref.type === 'image') {\n if (ref.url.startsWith('http://') || ref.url.startsWith('https://')) {\n const hashIndex = ref.url.indexOf('#');\n const targetResource = hashIndex >= 0 ? ref.url.slice(0, hashIndex) : ref.url;\n refValidator.addReference({\n url: ref.url,\n targetResource,\n type: ReferenceType.IMAGE,\n location: { path },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(cssDir, ref.url, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n\n refValidator.addReference({\n url: ref.url,\n targetResource,\n type: ReferenceType.IMAGE,\n location: { path },\n });\n }\n } else if (ref.type === 'import') {\n const location: { path: string; line?: number } = { path };\n if (ref.line !== undefined) location.line = ref.line;\n if (ref.url.startsWith('http://') || ref.url.startsWith('https://')) {\n refValidator.addReference({\n url: ref.url,\n targetResource: ref.url,\n type: ReferenceType.STYLESHEET,\n location,\n });\n } else {\n const resolvedPath = this.resolveRelativePath(cssDir, ref.url, opfDir);\n refValidator.addReference({\n url: ref.url,\n targetResource: resolvedPath,\n type: ReferenceType.STYLESHEET,\n location,\n });\n }\n }\n }\n }\n\n private validateXHTMLDocument(\n context: ValidationContext,\n path: string,\n itemId: string,\n opfDir?: string,\n registry?: ResourceRegistry,\n refValidator?: ReferenceValidator,\n ): void {\n const data = context.files.get(path);\n if (!data) {\n return;\n }\n\n const content = new TextDecoder().decode(data);\n const packageDoc = context.packageDocument;\n if (!packageDoc) {\n return;\n }\n\n // Check for unescaped ampersands before parsing\n this.checkUnescapedAmpersands(context, path, content);\n\n // HTM-004 (EPUB 3): Obsolete/irregular DOCTYPE — scan raw string since libxml2 doesn't expose DOCTYPE\n if (context.version !== '2.0') {\n const doctypeMatch = /<!DOCTYPE\\s+html\\b([\\s\\S]*?)>/i.exec(content);\n if (doctypeMatch) {\n const inner = doctypeMatch[1] ?? '';\n const hasPublic = /\\bPUBLIC\\b/i.test(inner);\n const hasSystem = /\\bSYSTEM\\b/i.test(inner);\n const isLegacyCompat = /['\"]about:legacy-compat['\"]/.test(inner);\n if (hasPublic || (hasSystem && !isLegacyCompat)) {\n pushMessage(context.messages, {\n id: MessageId.HTM_004,\n message: 'Irregular DOCTYPE found; expected \"<!DOCTYPE html>\"',\n location: { path },\n });\n }\n }\n }\n\n // HTM-003 (EPUB 3): External entity declarations not allowed\n if (context.version !== '2.0') {\n const entityRe = /<!ENTITY\\s+\\w+\\s+(?:SYSTEM|PUBLIC)\\s/gi;\n let entityMatch = entityRe.exec(content);\n while (entityMatch) {\n pushMessage(context.messages, {\n id: MessageId.HTM_003,\n message: 'External entities are not allowed in EPUB 3 content documents',\n location: { path },\n });\n entityMatch = entityRe.exec(content);\n }\n }\n\n // Check for XML 1.1 before parsing (libxml2 may reject it)\n const xmlVersionMatch = /<\\?xml\\s[^?]*version\\s*=\\s*[\"']([^\"']+)[\"']/.exec(content);\n if (xmlVersionMatch?.[1] && xmlVersionMatch[1] !== '1.0') {\n pushMessage(context.messages, {\n id: MessageId.HTM_001,\n message: `XML version \"${xmlVersionMatch[1]}\" is not allowed; must be \"1.0\"`,\n location: { path },\n });\n return;\n }\n\n // Try to parse with libxml2-wasm to check for well-formedness\n let doc: XmlDocument | null = null;\n try {\n doc = XmlDocument.fromString(content);\n } catch (error) {\n if (error instanceof Error) {\n const { message, line, column } = this.parseLibxmlError(error.message);\n\n // Skip errors for common HTML entities in EPUB 2 files\n // libxml2-wasm doesn't load external DTDs, so HTML entities like are not recognized\n // but they're valid in EPUB 2 (defined in the XHTML 1.1 DTD)\n const entityPattern = /Entity '(\\w+)' not defined/;\n const entityExec = entityPattern.exec(error.message);\n const entityName = entityExec?.[1];\n const isKnownHtmlEntity = entityName !== undefined && HTML_ENTITIES.has(entityName);\n const isEpub2 = context.version === '2.0';\n\n if (!isEpub2 || !isKnownHtmlEntity) {\n const location: { path: string; line?: number; column?: number } = { path };\n if (line !== undefined) {\n location.line = line;\n }\n if (column !== undefined) {\n location.column = column;\n }\n // Entity-related errors are fatal (RSC-016) per Java EPUBCheck behavior\n const isEntityError =\n error.message.includes(\"Entity '\") || error.message.includes('EntityRef:');\n pushMessage(context.messages, {\n id: isEntityError ? MessageId.RSC_016 : MessageId.HTM_004,\n message,\n location,\n });\n }\n }\n return;\n }\n\n try {\n const root = doc.root;\n\n // Check for html element with xmlns\n const nsDecls = root.nsDeclarations;\n const hasXhtmlNamespace =\n nsDecls[''] === 'http://www.w3.org/1999/xhtml' ||\n Object.values(nsDecls).some((uri) => uri === 'http://www.w3.org/1999/xhtml');\n\n if (!hasXhtmlNamespace) {\n pushMessage(context.messages, {\n id: MessageId.HTM_001,\n message:\n 'XHTML document must have html element with xmlns=\"http://www.w3.org/1999/xhtml\"',\n location: { path },\n });\n }\n\n // Check for head element\n const head = root.get('.//html:head', { html: 'http://www.w3.org/1999/xhtml' });\n if (!head) {\n pushMessage(context.messages, {\n id: MessageId.HTM_002,\n message: 'XHTML document must have a head element',\n location: { path },\n });\n }\n\n // Check for title element\n const title = root.get('.//html:title', { html: 'http://www.w3.org/1999/xhtml' });\n if (!title) {\n pushMessage(context.messages, {\n id: MessageId.RSC_017,\n message: 'The \"head\" element should have a \"title\" child element',\n location: { path },\n });\n } else {\n const titleText = (title as XmlElement).content.trim();\n if (titleText === '') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"title\" element must not be empty',\n location: { path, line: title.line },\n });\n }\n }\n\n // Check for body element\n const body = root.get('.//html:body', { html: 'http://www.w3.org/1999/xhtml' });\n if (!body) {\n pushMessage(context.messages, {\n id: MessageId.HTM_002,\n message: 'XHTML document must have a body element',\n location: { path },\n });\n }\n\n // Check if it's a navigation document\n const manifestItem = packageDoc.manifest.find(\n (item: { id: string; properties?: string[] }) => item.id === itemId,\n );\n const isNavItem = manifestItem?.properties?.includes('nav');\n\n if (isNavItem) {\n this.checkNavDocument(context, path, doc, root);\n }\n\n if (context.version.startsWith('3')) {\n const hasScripts = this.detectScripts(context, path, root);\n if (hasScripts && !manifestItem?.properties?.includes('scripted')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'Content document contains scripts but manifest item is missing \"scripted\" property',\n location: { path },\n });\n }\n if (!hasScripts && manifestItem?.properties?.includes('scripted')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'The property \"scripted\" should not be declared in the OPF file',\n location: { path },\n });\n }\n\n const hasMathML = this.detectMathML(context, path, root);\n if (hasMathML && !manifestItem?.properties?.includes('mathml')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'Content document contains MathML but manifest item is missing \"mathml\" property',\n location: { path },\n });\n }\n if (!hasMathML && manifestItem?.properties?.includes('mathml')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'The property \"mathml\" should not be declared in the OPF file',\n location: { path },\n });\n }\n\n const hasSVG = this.detectSVG(context, path, root);\n if (hasSVG && !manifestItem?.properties?.includes('svg')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message: 'Content document contains SVG but manifest item is missing \"svg\" property',\n location: { path },\n });\n }\n if (!hasSVG && manifestItem?.properties?.includes('svg')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'The property \"svg\" should not be declared in the OPF file',\n location: { path },\n });\n }\n\n const hasSwitch = this.detectSwitch(root);\n if (hasSwitch && !manifestItem?.properties?.includes('switch')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'Content document contains epub:switch but manifest item is missing \"switch\" property',\n location: { path },\n });\n }\n if (!hasSwitch && manifestItem?.properties?.includes('switch')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'The property \"switch\" should not be declared in the OPF file',\n location: { path },\n });\n }\n\n const hasRemoteResources = this.detectRemoteResources(context, path, root, opfDir);\n if (hasRemoteResources && !manifestItem?.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message:\n 'Content document references remote resources but manifest item is missing \"remote-resources\" property',\n location: { path },\n });\n }\n if (!hasRemoteResources && manifestItem?.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_018,\n message:\n 'The \"remote-resources\" property was declared in the Package Document, but no reference to remote resources has been found',\n location: { path },\n });\n }\n }\n\n // Check for discouraged elements\n this.checkDiscouragedElements(context, path, root);\n\n // Check SSML ph attributes\n this.checkSSMLPh(context, path, root, content);\n\n // Check obsolete HTML attributes and elements\n this.checkObsoleteHTML(context, path, root);\n\n // Check for duplicate IDs\n this.checkDuplicateIDs(context, path, root);\n\n // Check img src empty\n this.checkImgSrcEmpty(context, path, root);\n\n // Check style element in body\n this.checkStyleInBody(context, path, root);\n\n // Validate inline CSS in <style> elements\n this.validateInlineStyles(context, path, root);\n\n // Check HTTP-equiv charset constraints\n this.checkHttpEquivCharset(context, path, root);\n\n // Check lang/xml:lang mismatch\n this.checkLangMismatch(context, path, root);\n\n // Check DPUB-ARIA deprecated roles\n this.checkDpubAriaDeprecated(context, path, root);\n\n // Check table border attribute\n this.checkTableBorder(context, path, root);\n\n // Check time element constraints\n this.checkTimeElement(context, path, root);\n\n // Check MathML annotation constraints\n this.checkMathMLAnnotations(context, path, root);\n\n // Check reserved custom namespaces (HTM-054)\n this.checkReservedNamespace(context, path, content);\n\n // Check invalid data-* attributes (HTM-061)\n this.checkDataAttributes(context, path, root);\n\n // Check accessibility\n this.checkAccessibility(context, path, root);\n\n // Validate images\n this.validateImages(context, path, root);\n\n // Validate epub:type attributes (EPUB 3)\n if (context.version.startsWith('3')) {\n this.validateEpubTypes(context, path, root);\n }\n\n // Validate epub:switch and epub:trigger (deprecated)\n this.validateEpubSwitch(context, path, root);\n this.validateEpubTrigger(context, path, root);\n\n // Validate CSS in style attributes\n this.validateStyleAttributes(context, path, root);\n\n // Validate stylesheet links\n this.validateStylesheetLinks(context, path, root);\n\n // Validate viewport meta for fixed-layout\n this.validateViewportMeta(context, path, root, manifestItem);\n\n // Extract IDs and register with registry\n if (registry) {\n this.extractAndRegisterIDs(path, root, registry);\n }\n\n // Extract hyperlinks and register with reference validator\n if (refValidator && opfDir !== undefined) {\n this.extractAndRegisterHyperlinks(context, path, root, opfDir, refValidator, !!isNavItem);\n this.extractAndRegisterStylesheets(path, root, opfDir, refValidator);\n this.extractAndRegisterImages(context, path, root, opfDir, refValidator, registry);\n this.extractAndRegisterMathMLAltimg(path, root, opfDir, refValidator);\n this.extractAndRegisterScripts(path, root, opfDir, refValidator);\n this.extractAndRegisterCiteAttributes(path, root, opfDir, refValidator);\n this.extractAndRegisterMediaElements(context, path, root, opfDir, refValidator, registry);\n this.extractAndRegisterEmbeddedElements(\n context,\n path,\n root,\n opfDir,\n refValidator,\n registry,\n );\n }\n } finally {\n doc.dispose();\n }\n }\n\n private parseLibxmlError(error: string): {\n message: string;\n line: number | undefined;\n column: number | undefined;\n } {\n // Extract line number from libxml2-wasm error message\n // Format: \"Entity: line 10: parser error : message\"\n const lineRegex = /(?:Entity:\\s*)?line\\s+(\\d+):/;\n const lineMatch = lineRegex.exec(error);\n const line = lineMatch?.[1] ? Number.parseInt(lineMatch[1], 10) : undefined;\n\n // Extract column if present\n const columnRegex = /line\\s+\\d+:\\s*(\\d+):/;\n const columnMatch = columnRegex.exec(error);\n const column = columnMatch?.[1] ? Number.parseInt(columnMatch[1], 10) : undefined;\n\n // Normalize error message\n let message = error;\n if (error.includes('Opening and ending tag mismatch')) {\n message = `Mismatched closing tag: ${error.replace('Opening and ending tag mismatch: ', '')}`;\n } else if (error.includes('mismatch')) {\n message = `Mismatched closing tag: ${error}`;\n } else {\n // Remove libxml2 prefix from other errors\n message = error.replace(/^Entity:\\s*line\\s+\\d+:\\s*(parser\\s+error\\s*:)?\\s*/, '');\n }\n\n return { message, line, column };\n }\n\n private checkUnescapedAmpersands(\n context: ValidationContext,\n path: string,\n content: string,\n ): void {\n // Find all ampersands that are not part of entity references\n const ampersandRegex = /&(?!(?:[a-zA-Z][a-zA-Z0-9]*|#\\d+|#x[0-9a-fA-F]+);)/g;\n let match;\n while ((match = ampersandRegex.exec(content)) !== null) {\n // Calculate line number\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const index = match.index ?? 0;\n const before = content.substring(0, index);\n const line = before.split('\\n').length;\n\n pushMessage(context.messages, {\n id: MessageId.HTM_012,\n message: 'Unescaped ampersand',\n location: { path, line },\n });\n }\n }\n\n private checkNavDocument(\n context: ValidationContext,\n path: string,\n _doc: XmlDocument,\n root: XmlElement,\n ): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const navElements = root.find('.//html:nav', HTML_NS);\n if (navElements.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.NAV_001,\n message: 'Navigation document must have a nav element',\n location: { path },\n });\n return;\n }\n\n // Helper to get epub:type tokens from a nav element\n const getNavTypes = (nav: XmlElement): string[] => {\n if (!('attrs' in nav)) return [];\n const epubTypeAttr = (\n nav.attrs as { name: string; value: string; prefix?: string; namespaceUri?: string }[]\n ).find(\n (attr) =>\n attr.name === 'type' &&\n attr.prefix === 'epub' &&\n attr.namespaceUri === 'http://www.idpf.org/2007/ops',\n );\n return epubTypeAttr ? epubTypeAttr.value.trim().split(/\\s+/) : [];\n };\n\n // Find the nav element with epub:type=\"toc\"\n let tocNav: (typeof navElements)[0] | undefined;\n let pageListCount = 0;\n let landmarksCount = 0;\n\n for (const nav of navElements) {\n const types = getNavTypes(nav as XmlElement);\n if (types.includes('toc') && !tocNav) {\n tocNav = nav;\n }\n if (types.includes('page-list')) pageListCount++;\n if (types.includes('landmarks')) landmarksCount++;\n }\n\n if (!tocNav) {\n pushMessage(context.messages, {\n id: MessageId.NAV_001,\n message: 'Navigation document nav element must have epub:type=\"toc\"',\n location: { path },\n });\n return;\n }\n\n const ol = tocNav.get('.//html:ol', HTML_NS);\n if (!ol) {\n pushMessage(context.messages, {\n id: MessageId.NAV_002,\n message: 'Navigation document toc nav must contain an ol element',\n location: { path },\n });\n }\n\n // Check multiple page-list or landmarks nav elements\n if (pageListCount > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Multiple occurrences of the \"page-list\" nav element',\n location: { path },\n });\n }\n if (landmarksCount > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Multiple occurrences of the \"landmarks\" nav element',\n location: { path },\n });\n }\n\n // Validate each typed nav element\n for (const nav of navElements) {\n const navElem = nav as XmlElement;\n const types = getNavTypes(navElem);\n if (types.length === 0) continue;\n\n // Non-standard nav types must have heading as first child\n const isStandard =\n types.includes('toc') || types.includes('page-list') || types.includes('landmarks');\n if (!isStandard) {\n this.checkNavFirstChildHeading(context, path, navElem);\n }\n\n // Check landmarks-specific rules\n if (types.includes('landmarks')) {\n this.checkNavLandmarks(context, path, navElem);\n }\n\n // Check anchor and span labels within nav ol\n this.checkNavLabels(context, path, navElem);\n\n // Check nav content model (ol must have li, li must have a/span or ol)\n this.checkNavContentModel(context, path, navElem);\n }\n\n // Check heading text content in the entire nav document\n this.checkNavHeadingContent(context, path, root);\n\n // Check hidden attribute values on nav elements\n this.checkNavHiddenAttribute(context, path, root);\n\n this.checkNavRemoteLinks(context, path, root);\n\n // Collect TOC nav link targets in order for reading order validation (NAV-011)\n this.collectTocLinks(context, path, tocNav as XmlElement);\n }\n\n private checkNavFirstChildHeading(\n context: ValidationContext,\n path: string,\n navElem: XmlElement,\n ): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const headingTags = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']);\n\n // Get first child element of nav\n const children = navElem.find('./html:*', HTML_NS);\n if (children.length === 0) return;\n\n const firstChild = children[0] as XmlElement;\n const localName = firstChild.name.split(':').pop() ?? firstChild.name;\n if (!headingTags.has(localName)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'nav elements other than \"toc\", \"page-list\" and \"landmarks\" must have a heading as their first child',\n location: { path },\n });\n }\n }\n\n private checkNavLandmarks(context: ValidationContext, path: string, navElem: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const EPUB_NS = 'http://www.idpf.org/2007/ops';\n\n const anchors = navElem.find('.//html:ol//html:a', HTML_NS);\n const seenLandmarks: { type: string; href: string }[] = [];\n\n for (const anchor of anchors) {\n const aElem = anchor as XmlElement;\n\n // Check for epub:type attribute\n const epubTypeAttr =\n 'attrs' in aElem\n ? (\n aElem.attrs as {\n name: string;\n value: string;\n prefix?: string;\n namespaceUri?: string;\n }[]\n ).find((attr) => attr.name === 'type' && attr.namespaceUri === EPUB_NS)\n : undefined;\n\n if (!epubTypeAttr) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Missing epub:type attribute on anchor inside \"landmarks\" nav element',\n location: { path },\n });\n continue;\n }\n\n // Check for duplicate type+href\n const href = this.getAttribute(aElem, 'href');\n const typeTokens = epubTypeAttr.value.toLowerCase().trim().split(/\\s+/);\n const normalizedHref = (href ?? '').toLowerCase().trim();\n\n for (const typeToken of typeTokens) {\n const isDuplicate = seenLandmarks.some(\n (seen) => seen.type === typeToken && seen.href === normalizedHref,\n );\n if (isDuplicate) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Another landmark was found with the same epub:type and same reference to \"${normalizedHref}\"`,\n location: { path },\n });\n }\n seenLandmarks.push({ type: typeToken, href: normalizedHref });\n }\n }\n }\n\n private checkNavLabels(context: ValidationContext, path: string, navElem: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n\n // Check anchor labels\n const anchors = navElem.find('.//html:ol//html:a', HTML_NS);\n for (const anchor of anchors) {\n if (!this.hasNavLabelContent(anchor as XmlElement)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Anchors within nav elements must contain text',\n location: { path },\n });\n }\n }\n\n // Check span labels\n const spans = navElem.find('.//html:ol//html:span', HTML_NS);\n for (const span of spans) {\n if (!this.hasNavLabelContent(span as XmlElement)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Spans within nav elements must contain text',\n location: { path },\n });\n }\n }\n }\n\n private hasNavLabelContent(element: XmlElement): boolean {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n // Check text content\n const textContent = element.content;\n if (textContent && textContent.trim().length > 0) return true;\n\n // Check img alt attributes\n const imgs = element.find('./html:img[@alt]', HTML_NS);\n for (const img of imgs) {\n const alt = this.getAttribute(img as XmlElement, 'alt');\n if (alt && alt.trim().length > 0) return true;\n }\n\n // Check aria-label on any descendant or self\n const ariaLabel = this.getAttribute(element, 'aria-label');\n if (ariaLabel && ariaLabel.trim().length > 0) return true;\n\n const ariaLabelElements = element.find('.//*[@aria-label]');\n for (const el of ariaLabelElements) {\n const label = this.getAttribute(el as XmlElement, 'aria-label');\n if (label && label.trim().length > 0) return true;\n }\n\n return false;\n }\n\n private checkNavContentModel(\n context: ValidationContext,\n path: string,\n navElem: XmlElement,\n ): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const headingTags = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup']);\n\n // Check nav direct children: only headings, hgroup, and ol are allowed\n const navChildren = navElem.find('./html:*', HTML_NS);\n for (const child of navChildren) {\n const localName = (child as XmlElement).name.split(':').pop() ?? (child as XmlElement).name;\n if (!headingTags.has(localName) && localName !== 'ol') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `element \"${localName}\" not allowed here; expected element \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hgroup\" or \"ol\"`,\n location: { path },\n });\n }\n }\n\n // Check ol elements have li children\n const olElements = navElem.find('.//html:ol', HTML_NS);\n for (const ol of olElements) {\n const liChildren = (ol as XmlElement).find('./html:li', HTML_NS);\n if (liChildren.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'element \"ol\" incomplete; missing required element \"li\"',\n location: { path },\n });\n }\n }\n\n // Check li elements content model\n const liElements = navElem.find('.//html:ol//html:li', HTML_NS);\n for (const li of liElements) {\n const liElem = li as XmlElement;\n const hasOl = liElem.get('./html:ol', HTML_NS);\n const hasAnchor = liElem.get('./html:a', HTML_NS);\n const hasSpan = liElem.get('./html:span', HTML_NS);\n\n if (!hasAnchor && !hasSpan) {\n if (hasOl) {\n // li has ol but no a/span label\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'element \"ol\" not allowed yet; expected element \"a\" or \"span\"',\n location: { path },\n });\n } else {\n // leaf li with no link\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'element \"li\" incomplete; missing required element \"ol\"',\n location: { path },\n });\n }\n } else if (hasSpan && !hasAnchor && !hasOl) {\n // li has span label but no nested ol — span implies a branch node that needs a sublist\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'element \"li\" incomplete; missing required element \"ol\"',\n location: { path },\n });\n }\n }\n }\n\n private checkNavHeadingContent(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const headingSelectors = [\n './/html:h1',\n './/html:h2',\n './/html:h3',\n './/html:h4',\n './/html:h5',\n './/html:h6',\n ];\n\n for (const selector of headingSelectors) {\n const headings = root.find(selector, HTML_NS);\n for (const heading of headings) {\n if (!this.hasNavLabelContent(heading as XmlElement)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Heading elements must contain text',\n location: { path },\n });\n }\n }\n }\n }\n\n private checkNavHiddenAttribute(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n ): void {\n const hiddenElements = root.find('.//*[@hidden]');\n for (const elem of hiddenElements) {\n const hiddenValue = this.getAttribute(elem as XmlElement, 'hidden');\n if (\n hiddenValue !== null &&\n hiddenValue !== '' &&\n hiddenValue !== 'hidden' &&\n hiddenValue !== 'until-found'\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `value of attribute \"hidden\" is invalid; must be equal to \"\", \"hidden\" or \"until-found\"`,\n location: { path },\n });\n }\n }\n }\n\n private checkNavRemoteLinks(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const navElements = root.find('.//html:nav', HTML_NS);\n\n for (const nav of navElements) {\n const navElem = nav as XmlElement;\n const epubTypeAttr =\n 'attrs' in navElem\n ? (\n navElem.attrs as {\n name: string;\n value: string;\n prefix?: string;\n namespaceUri?: string;\n }[]\n ).find(\n (attr) =>\n attr.name === 'type' &&\n attr.prefix === 'epub' &&\n attr.namespaceUri === 'http://www.idpf.org/2007/ops',\n )\n : undefined;\n const types = epubTypeAttr ? epubTypeAttr.value.trim().split(/\\s+/) : [];\n const isToc = types.includes('toc');\n const isLandmarks = types.includes('landmarks');\n const isPageList = types.includes('page-list');\n\n if (!isToc && !isLandmarks && !isPageList) continue;\n\n const navType = isToc ? 'toc' : isLandmarks ? 'landmarks' : 'page-list';\n const links = navElem.find('.//html:a[@href]', HTML_NS);\n for (const link of links) {\n const href = this.getAttribute(link as XmlElement, 'href');\n if (href && (href.startsWith('http://') || href.startsWith('https://'))) {\n pushMessage(context.messages, {\n id: MessageId.NAV_010,\n message: `\"${navType}\" nav must not link to remote resources; found link to \"${href}\"`,\n location: { path },\n });\n }\n }\n }\n }\n\n private collectTocLinks(context: ValidationContext, path: string, tocNav: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const opfDir = context.opfPath?.includes('/')\n ? context.opfPath.substring(0, context.opfPath.lastIndexOf('/'))\n : '';\n\n const tocAnchors = tocNav.find('.//html:a[@href]', HTML_NS);\n const tocLinks: NonNullable<ValidationContext['tocLinks']> = [];\n\n for (const anchor of tocAnchors) {\n const href = this.getAttribute(anchor as XmlElement, 'href')?.trim();\n if (!href || href.startsWith('http://') || href.startsWith('https://')) continue;\n\n let targetResource: string;\n let fragment: string | undefined;\n\n if (href.startsWith('#')) {\n targetResource = path;\n fragment = href.slice(1);\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n }\n\n const entry: NonNullable<ValidationContext['tocLinks']>[number] = {\n targetResource,\n location: { path, line: anchor.line },\n };\n if (fragment !== undefined) {\n entry.fragment = fragment;\n }\n tocLinks.push(entry);\n }\n\n context.tocLinks = tocLinks;\n }\n\n private detectScripts(_context: ValidationContext, _path: string, root: XmlElement): boolean {\n // Check for script elements with JavaScript types\n // Non-JavaScript types like application/ld+json don't require \"scripted\" property\n const htmlScripts = root.find('.//html:script', { html: 'http://www.w3.org/1999/xhtml' });\n for (const script of htmlScripts) {\n if (this.isScriptType(this.getAttribute(script as XmlElement, 'type'))) {\n return true;\n }\n }\n\n const svgScripts = root.find('.//svg:script', { svg: 'http://www.w3.org/2000/svg' });\n for (const script of svgScripts) {\n if (this.isScriptType(this.getAttribute(script as XmlElement, 'type'))) {\n return true;\n }\n }\n\n const form = root.get('.//html:form', { html: 'http://www.w3.org/1999/xhtml' });\n if (form) return true;\n\n const elementsWithEvents = root.find(\n './/*[@onclick or @onload or @onmouseover or @onmouseout or @onchange or @onsubmit or @onfocus or @onblur]',\n );\n if (elementsWithEvents.length > 0) return true;\n\n return false;\n }\n\n /**\n * Check if the script type is a JavaScript type that requires \"scripted\" property.\n * Per EPUB spec and Java EPUBCheck, only JavaScript types require it.\n * Data block types like application/ld+json, application/json do NOT require it.\n */\n private isScriptType(type: string | null): boolean {\n // No type attribute or empty = defaults to JavaScript\n if (!type || type.trim() === '') return true;\n\n const jsTypes = new Set([\n 'application/javascript',\n 'text/javascript',\n 'application/ecmascript',\n 'application/x-ecmascript',\n 'application/x-javascript',\n 'text/ecmascript',\n 'text/javascript1.0',\n 'text/javascript1.1',\n 'text/javascript1.2',\n 'text/javascript1.3',\n 'text/javascript1.4',\n 'text/javascript1.5',\n 'text/jscript',\n 'text/livescript',\n 'text/x-ecmascript',\n 'text/x-javascript',\n 'module', // ES modules\n ]);\n\n return jsTypes.has(type.toLowerCase());\n }\n\n private detectSwitch(root: XmlElement): boolean {\n const switchElem = root.get('.//epub:switch', { epub: 'http://www.idpf.org/2007/ops' });\n return !!switchElem;\n }\n\n private detectMathML(_context: ValidationContext, _path: string, root: XmlElement): boolean {\n const mathMLElements = root.find('.//math:*', { math: 'http://www.w3.org/1998/Math/MathML' });\n return mathMLElements.length > 0;\n }\n\n private detectSVG(_context: ValidationContext, _path: string, root: XmlElement): boolean {\n const svgElement = root.get('.//html:svg', { html: 'http://www.w3.org/1999/xhtml' });\n if (svgElement) return true;\n\n const rootSvg = root.get('.//svg:svg', { svg: 'http://www.w3.org/2000/svg' });\n if (rootSvg) return true;\n\n return false;\n }\n\n /**\n * Detect if the content document references remote resources that require\n * the \"remote-resources\" property in the manifest.\n * Per EPUB spec and Java EPUBCheck behavior:\n * - Remote images, audio, video, fonts REQUIRE the property\n * - Remote hyperlinks (<a href>) do NOT require the property\n * - Remote scripts do NOT require the property (scripted property is used instead)\n * - Remote stylesheets DO require the property\n */\n private detectRemoteResources(\n _context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir?: string,\n ): boolean {\n const images = root.find('.//html:img[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const img of images) {\n const src = this.getAttribute(img as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const audio = root.find('.//html:audio[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const elem of audio) {\n const src = this.getAttribute(elem as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const video = root.find('.//html:video[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const elem of video) {\n const src = this.getAttribute(elem as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const sources = root.find('.//html:source[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const source of sources) {\n const src = this.getAttribute(source as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const objects = root.find('.//html:object[@data]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const obj of objects) {\n const data = this.getAttribute(obj as XmlElement, 'data');\n if (data && (data.startsWith('http://') || data.startsWith('https://'))) {\n return true;\n }\n }\n\n const embeds = root.find('.//html:embed[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const embed of embeds) {\n const src = this.getAttribute(embed as XmlElement, 'src');\n if (src && (src.startsWith('http://') || src.startsWith('https://'))) {\n return true;\n }\n }\n\n const linkElements = root.find('.//html:link[@rel and @href]', {\n html: 'http://www.w3.org/1999/xhtml',\n });\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n for (const linkElem of linkElements) {\n const rel = this.getAttribute(linkElem as XmlElement, 'rel');\n const href = this.getAttribute(linkElem as XmlElement, 'href');\n if (href && rel?.toLowerCase().includes('stylesheet')) {\n if (href.startsWith('http://') || href.startsWith('https://')) {\n return true;\n }\n // Check if locally-linked CSS file contains remote resources\n const resolvedCss = this.resolveRelativePath(docDir, href, opfDir ?? '');\n if (this.cssWithRemoteResources.has(resolvedCss)) {\n return true;\n }\n }\n }\n\n const styleElements = root.find('.//html:style', { html: 'http://www.w3.org/1999/xhtml' });\n for (const style of styleElements) {\n const cssContent = (style as XmlElement).content;\n if (this.cssContainsRemoteUrl(cssContent)) {\n return true;\n }\n }\n\n return false;\n }\n\n private cssContainsRemoteUrl(css: string): boolean {\n const urlRegex = /url\\s*\\(\\s*[\"']?(https?:\\/\\/[^\"')]+)[\"']?\\s*\\)/gi;\n return urlRegex.test(css);\n }\n\n private checkDiscouragedElements(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n ): void {\n for (const elemName of DISCOURAGED_ELEMENTS) {\n const element = root.get(`.//html:${elemName}`, { html: 'http://www.w3.org/1999/xhtml' });\n if (element) {\n pushMessage(context.messages, {\n id: MessageId.HTM_055,\n message: `The \"${elemName}\" element is discouraged in EPUB`,\n location: { path },\n });\n }\n }\n }\n\n private checkSSMLPh(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n content: string,\n ): void {\n // Use regex since XPath namespace handling for attributes varies across parsers\n const ssmlPhPattern = /\\bssml:ph\\s*=\\s*\"([^\"]*)\"/g;\n let match;\n while ((match = ssmlPhPattern.exec(content)) !== null) {\n if (match[1]?.trim() === '') {\n const line = content.substring(0, match.index).split('\\n').length;\n pushMessage(context.messages, {\n id: MessageId.HTM_007,\n message: 'The ssml:ph attribute value should not be empty',\n location: { path, line },\n });\n }\n }\n }\n\n private checkObsoleteHTML(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n\n // Obsolete global attributes\n const obsoleteGlobalAttrs = ['contextmenu', 'dropzone'];\n for (const attr of obsoleteGlobalAttrs) {\n try {\n const elements = root.find(`.//*[@${attr}]`);\n for (const el of elements) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The \"${attr}\" attribute is obsolete`,\n location: { path, line: el.line },\n });\n }\n } catch {\n // XPath may fail on malformed documents\n }\n }\n\n // Obsolete element-specific attributes\n const obsoleteElementAttrs: [string, string][] = [\n ['typemustmatch', './/html:object[@typemustmatch]'],\n ['pubdate', './/html:time[@pubdate]'],\n ['seamless', './/html:iframe[@seamless]'],\n ];\n for (const [attr, xpath] of obsoleteElementAttrs) {\n try {\n const elements = root.find(xpath, HTML_NS);\n for (const el of elements) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The \"${attr}\" attribute is obsolete`,\n location: { path, line: el.line },\n });\n }\n } catch {\n // XPath may fail on malformed documents\n }\n }\n\n // Obsolete elements\n try {\n const keygens = root.find('.//html:keygen', HTML_NS);\n for (const keygen of keygens) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"keygen\" element is obsolete',\n location: { path, line: keygen.line },\n });\n }\n } catch {\n // XPath may fail on malformed documents\n }\n\n // Obsolete menu features: type attribute on menu, command element\n try {\n const menuTypes = root.find('.//html:menu[@type]', HTML_NS);\n for (const menuType of menuTypes) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"type\" attribute on the \"menu\" element is obsolete',\n location: { path, line: menuType.line },\n });\n }\n } catch {\n // XPath may fail on malformed documents\n }\n try {\n const commands = root.find('.//html:command', HTML_NS);\n for (const command of commands) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"command\" element is obsolete',\n location: { path, line: command.line },\n });\n }\n } catch {\n // XPath may fail on malformed documents\n }\n }\n\n private checkDuplicateIDs(context: ValidationContext, path: string, root: XmlElement): void {\n const seen = new Map<string, number>();\n const elements = root.find('.//*[@id]');\n for (const elem of elements) {\n const id = this.getAttribute(elem as XmlElement, 'id');\n if (id) {\n if (seen.has(id)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Duplicate ID \"${id}\"`,\n location: { path, line: elem.line },\n });\n } else {\n seen.set(id, elem.line);\n }\n }\n }\n }\n\n private checkImgSrcEmpty(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n try {\n const imgs = root.find('.//html:img[@src]', HTML_NS);\n for (const img of imgs) {\n const src = this.getAttribute(img as XmlElement, 'src');\n if (src !== null && src.trim() === '') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"src\" attribute must not be empty',\n location: { path, line: img.line },\n });\n }\n }\n } catch {\n // empty\n }\n }\n\n private checkStyleInBody(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n try {\n const bodyStyles = root.find('.//html:body//html:style', HTML_NS);\n for (const style of bodyStyles) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"style\" element must not appear in the document body',\n location: { path, line: style.line },\n });\n }\n } catch {\n // empty\n }\n }\n\n private checkHttpEquivCharset(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n try {\n const metas = root.find('.//html:head/html:meta', HTML_NS);\n let hasCharsetMeta = false;\n let hasHttpEquivContentType = false;\n\n for (const meta of metas) {\n const el = meta as XmlElement;\n const charset = this.getAttribute(el, 'charset');\n if (charset !== null) {\n hasCharsetMeta = true;\n }\n\n const httpEquiv = this.getAttribute(el, 'http-equiv');\n if (httpEquiv?.toLowerCase() === 'content-type') {\n hasHttpEquivContentType = true;\n const contentAttr = (this.getAttribute(el, 'content') ?? '').trim();\n if (!/^text\\/html;\\s*charset=utf-8$/i.test(contentAttr)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The meta element in encoding declaration state must have the value \"text/html; charset=utf-8\"`,\n location: { path, line: el.line },\n });\n }\n }\n }\n\n if (hasCharsetMeta && hasHttpEquivContentType) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'The document must not contain both a meta charset declaration and a meta http-equiv Content-Type declaration',\n location: { path },\n });\n }\n } catch {\n // empty\n }\n }\n\n private checkSVGInvalidIDs(context: ValidationContext, path: string, root: XmlElement): void {\n // SVG IDs must match XML Name production: cannot start with a digit\n const XML_NAME_START_RE = /^[a-zA-Z_:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF]/;\n const elements = root.find('.//*[@id]');\n for (const elem of elements) {\n const id = this.getAttribute(elem as XmlElement, 'id');\n if (id && !XML_NAME_START_RE.test(id)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Invalid ID value \"${id}\"`,\n location: { path, line: elem.line },\n });\n }\n }\n // Also check root element\n const rootId = this.getAttribute(root, 'id');\n if (rootId && !XML_NAME_START_RE.test(rootId)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Invalid ID value \"${rootId}\"`,\n location: { path, line: root.line },\n });\n }\n }\n\n private validateInlineStyles(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n try {\n const styles = root.find('.//html:style', HTML_NS);\n for (const style of styles) {\n const cssContent = (style as XmlElement).content;\n if (cssContent) {\n const cssValidator = new CSSValidator();\n cssValidator.validate(context, cssContent, path);\n }\n }\n } catch {\n // empty\n }\n }\n\n private checkLangMismatch(context: ValidationContext, path: string, root: XmlElement): void {\n const lang = root.attr('lang')?.value ?? null;\n const xmlLang = root.attr('lang', 'xml')?.value ?? null;\n if (lang !== null && xmlLang !== null && lang.toLowerCase() !== xmlLang.toLowerCase()) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The lang and xml:lang attributes must have the same value',\n location: { path, line: root.line },\n });\n }\n }\n\n private checkDpubAriaDeprecated(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n ): void {\n const DEPRECATED_ROLES = ['doc-endnote', 'doc-biblioentry'];\n try {\n const elements = root.find('.//*[@role]');\n for (const elem of elements) {\n const roleAttr = this.getAttribute(elem as XmlElement, 'role');\n if (!roleAttr) continue;\n const roles = roleAttr.split(/\\s+/);\n for (const role of DEPRECATED_ROLES) {\n if (roles.includes(role)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_017,\n message: `The \"${role}\" role is deprecated and should not be used`,\n location: { path, line: elem.line },\n });\n }\n }\n }\n } catch {\n // empty\n }\n }\n\n private validateEpubSwitch(context: ValidationContext, path: string, root: XmlElement): void {\n const EPUB_NS = { epub: 'http://www.idpf.org/2007/ops' };\n try {\n const switches = root.find('.//epub:switch', EPUB_NS);\n for (const sw of switches) {\n pushMessage(context.messages, {\n id: MessageId.RSC_017,\n message: 'The \"epub:switch\" element is deprecated',\n location: { path, line: sw.line },\n });\n\n const swElem = sw as XmlElement;\n const cases: XmlNode[] = [];\n const defaults: XmlNode[] = [];\n let defaultBeforeCase = false;\n\n // Iterate child elements\n try {\n const childCases = swElem.find('./epub:case', EPUB_NS);\n const childDefaults = swElem.find('./epub:default', EPUB_NS);\n cases.push(...childCases);\n defaults.push(...childDefaults);\n\n // Check ordering: default must come after all cases\n const firstDefault = childDefaults[0];\n const lastCase = childCases[childCases.length - 1];\n if (firstDefault && lastCase && firstDefault.line < lastCase.line) {\n defaultBeforeCase = true;\n }\n } catch {\n // empty\n }\n\n if (cases.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'The \"epub:switch\" element must contain at least one \"epub:case\" child element',\n location: { path, line: sw.line },\n });\n }\n\n if (defaults.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"epub:switch\" element must contain an \"epub:default\" child element',\n location: { path, line: sw.line },\n });\n }\n\n const secondDefault = defaults[1];\n if (secondDefault) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'The \"epub:switch\" element must not contain more than one \"epub:default\" child element',\n location: { path, line: secondDefault.line },\n });\n }\n\n const firstDefaultElem = defaults[0];\n if (defaultBeforeCase && firstDefaultElem) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"epub:default\" element must appear after all \"epub:case\" elements',\n location: { path, line: firstDefaultElem.line },\n });\n }\n\n // Check each case has required-namespace attribute\n for (const c of cases) {\n const caseElem = c as XmlElement;\n const reqNs = caseElem.attr('required-namespace');\n if (!reqNs) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"epub:case\" element must have a \"required-namespace\" attribute',\n location: { path, line: c.line },\n });\n }\n }\n\n // Check for nested <math> inside <math> (invalid MathML)\n try {\n const MATH_NS = { m: 'http://www.w3.org/1998/Math/MathML' };\n const nestedMath = swElem.find('.//m:math//m:math', MATH_NS);\n for (const nested of nestedMath) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"math\" element must not be nested inside another \"math\" element',\n location: { path, line: nested.line },\n });\n }\n } catch {\n // empty\n }\n }\n } catch {\n // empty\n }\n }\n\n private validateEpubTrigger(context: ValidationContext, path: string, root: XmlElement): void {\n const EPUB_NS = { epub: 'http://www.idpf.org/2007/ops' };\n try {\n const triggers = root.find('.//epub:trigger', EPUB_NS);\n if (triggers.length === 0) return;\n\n // Collect all IDs in the document once for IDREF checking\n const allIds = new Set<string>();\n try {\n const idElements = root.find('.//*[@id]');\n for (const el of idElements) {\n const idAttr = this.getAttribute(el as XmlElement, 'id');\n if (idAttr) allIds.add(idAttr);\n }\n } catch {\n // XPath may fail on malformed documents\n }\n\n for (const trigger of triggers) {\n pushMessage(context.messages, {\n id: MessageId.RSC_017,\n message: 'The \"epub:trigger\" element is deprecated',\n location: { path, line: trigger.line },\n });\n\n const triggerElem = trigger as XmlElement;\n\n // Check ref attribute\n const ref = triggerElem.attr('ref');\n if (ref?.value && !allIds.has(ref.value)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The \"ref\" attribute value \"${ref.value}\" does not reference a valid ID in the document`,\n location: { path, line: trigger.line },\n });\n }\n\n // Check ev:observer attribute\n const observer = triggerElem.attr('observer', 'ev') ?? triggerElem.attr('ev:observer');\n if (observer?.value && !allIds.has(observer.value)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The \"ev:observer\" attribute value \"${observer.value}\" does not reference a valid ID in the document`,\n location: { path, line: trigger.line },\n });\n }\n }\n } catch {\n // XPath may fail on malformed documents\n }\n }\n\n private validateStyleAttributes(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n ): void {\n try {\n const elements = root.find('.//*[@style]');\n for (const elem of elements) {\n const style = this.getAttribute(elem as XmlElement, 'style');\n if (!style) continue;\n // Wrap in a dummy rule so the CSS parser can handle it as a stylesheet\n const wrappedCss = `* { ${style} }`;\n const cssValidator = new CSSValidator();\n cssValidator.validate(context, wrappedCss, path);\n }\n } catch {\n // empty\n }\n }\n\n private validateSvgEpubType(context: ValidationContext, path: string, root: XmlElement): void {\n // SVG elements where epub:type IS allowed\n const ALLOWED_ELEMENTS = new Set([\n 'svg',\n 'a',\n 'audio',\n 'canvas',\n 'circle',\n 'ellipse',\n 'g',\n 'iframe',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'switch',\n 'symbol',\n 'text',\n 'textPath',\n 'tspan',\n 'unknown',\n 'use',\n 'video',\n ]);\n\n const EPUB_NS = { epub: 'http://www.idpf.org/2007/ops' };\n try {\n const elements = root.find('.//*[@epub:type]', EPUB_NS);\n for (const elem of elements) {\n const elemTyped = elem as XmlElement;\n const localName = elemTyped.name;\n // Also check the root element itself\n if (!ALLOWED_ELEMENTS.has(localName)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Attribute \"epub:type\" not allowed on SVG element \"${localName}\"`,\n location: { path, line: elem.line },\n });\n }\n }\n // Check root element too\n const rootEpubType = root.attr('type', 'epub');\n if (rootEpubType && !ALLOWED_ELEMENTS.has(root.name)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Attribute \"epub:type\" not allowed on SVG element \"${root.name}\"`,\n location: { path, line: root.line },\n });\n }\n } catch {\n // empty\n }\n }\n\n private checkUnknownEpubAttributes(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n ): void {\n const KNOWN_EPUB_ATTRS = new Set(['type']);\n\n const checkElement = (elem: XmlElement): void => {\n if (!('attrs' in elem)) return;\n for (const attr of elem.attrs) {\n if (attr.prefix === 'epub' && !KNOWN_EPUB_ATTRS.has(attr.name)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Attribute \"epub:${attr.name}\" not allowed`,\n location: { path, line: elem.line },\n });\n }\n }\n };\n\n // Check root element\n checkElement(root);\n\n // Check all descendant elements\n try {\n const allElements = root.find('.//*');\n for (const elem of allElements) {\n checkElement(elem as XmlElement);\n }\n } catch {\n // empty\n }\n }\n\n private checkTableBorder(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n try {\n const tables = root.find('.//html:table[@border]', HTML_NS);\n for (const table of tables) {\n const border = this.getAttribute(table as XmlElement, 'border');\n if (border !== null && border !== '' && border !== '1') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The value of the \"border\" attribute on the \"table\" element must be either \"1\" or the empty string`,\n location: { path, line: table.line },\n });\n }\n }\n } catch {\n // empty\n }\n }\n\n private checkTimeElement(context: ValidationContext, path: string, root: XmlElement): void {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n\n // Check nested time elements\n try {\n const nestedTimes = root.find('.//html:time//html:time', HTML_NS);\n for (const nested of nestedTimes) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The element \"time\" must not appear as a descendant of the \"time\" element',\n location: { path, line: nested.line },\n });\n }\n } catch {\n // empty\n }\n\n // Check datetime attribute format\n try {\n const times = root.find('.//html:time[@datetime]', HTML_NS);\n for (const time of times) {\n const datetime = this.getAttribute(time as XmlElement, 'datetime');\n if (datetime !== null && !isValidDatetime(datetime)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The \"datetime\" attribute value \"${datetime}\" is not a valid date, time, or duration`,\n location: { path, line: time.line },\n });\n }\n }\n } catch {\n // empty\n }\n }\n\n private checkMathMLAnnotations(context: ValidationContext, path: string, root: XmlElement): void {\n const MATH_NS = { math: 'http://www.w3.org/1998/Math/MathML' };\n const CONTENT_MATHML_ENCODINGS = new Set(['mathml-content', 'application/mathml-content+xml']);\n const CONTENT_MATHML_ELEMENTS = new Set([\n 'apply',\n 'bind',\n 'ci',\n 'cn',\n 'cs',\n 'csymbol',\n 'cbytes',\n 'cerror',\n 'share',\n 'piecewise',\n 'lambda',\n 'set',\n 'list',\n 'vector',\n 'matrix',\n 'matrixrow',\n 'interval',\n ]);\n\n const contentMathMLNames = [...CONTENT_MATHML_ELEMENTS];\n\n // Check annotation-xml elements\n try {\n const annotations = root.find('.//math:annotation-xml', MATH_NS);\n for (const anno of annotations) {\n const el = anno as XmlElement;\n const encoding = this.getAttribute(el, 'encoding');\n const name = this.getAttribute(el, 'name');\n\n if (encoding) {\n const encodingLower = encoding.toLowerCase();\n if (CONTENT_MATHML_ENCODINGS.has(encodingLower)) {\n // Content MathML encoding requires name=\"contentequiv\"\n if (!name) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'The \"annotation-xml\" element with Content MathML encoding must have a \"name\" attribute with value \"contentequiv\"',\n location: { path, line: el.line },\n });\n } else if (name !== 'contentequiv') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The \"name\" attribute on \"annotation-xml\" with Content MathML encoding must be \"contentequiv\", but found \"${name}\"`,\n location: { path, line: el.line },\n });\n }\n } else {\n // Non-Content encoding: check for Content MathML elements inside\n for (const cElemName of contentMathMLNames) {\n try {\n const found = el.get(`./math:${cElemName}`, MATH_NS);\n if (found) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Content MathML element \"${cElemName}\" found in annotation-xml with encoding \"${encoding}\"`,\n location: { path, line: found.line },\n });\n break;\n }\n } catch {\n // empty\n }\n }\n }\n\n // Check reversed XHTML MIME type\n if (encodingLower === 'application/xml+xhtml') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'The encoding \"application/xml+xhtml\" is not valid; use \"application/xhtml+xml\" instead',\n location: { path, line: el.line },\n });\n }\n }\n }\n } catch {\n // empty\n }\n\n // Check Content MathML elements directly in math (not inside annotation-xml)\n for (const elemName of contentMathMLNames) {\n try {\n const found = root.get(`.//math:math/math:${elemName}`, MATH_NS);\n if (found) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Content MathML element \"${elemName}\" must not appear as a direct child of \"math\"; use \"semantics\" with \"annotation-xml\" instead`,\n location: { path, line: found.line },\n });\n break;\n }\n } catch {\n // empty\n }\n }\n }\n\n private checkReservedNamespace(context: ValidationContext, path: string, content: string): void {\n // HTM-054: Custom namespace URIs must not contain \"w3.org\" or \"idpf.org\" in their host\n const nsPattern = /xmlns:(\\w+)=\"([^\"]+)\"/g;\n const STANDARD_PREFIXES = new Set([\n 'xml',\n 'xmlns',\n 'xlink',\n 'epub',\n 'ops',\n 'dc',\n 'dcterms',\n 'svg',\n 'math',\n 'ssml',\n 'ev',\n 'xsi',\n ]);\n const STANDARD_NAMESPACES = new Set([\n 'http://www.w3.org/XML/1998/namespace',\n 'http://www.w3.org/2000/xmlns/',\n 'http://www.w3.org/1999/xhtml',\n 'http://www.w3.org/1999/xlink',\n 'http://www.w3.org/2000/svg',\n 'http://www.w3.org/1998/Math/MathML',\n 'http://www.idpf.org/2007/ops',\n 'http://purl.org/dc/elements/1.1/',\n 'http://purl.org/dc/terms/',\n 'http://www.w3.org/2001/10/synthesis',\n 'http://www.w3.org/2001/xml-events',\n 'http://www.w3.org/2001/XMLSchema-instance',\n ]);\n\n let match;\n while ((match = nsPattern.exec(content)) !== null) {\n const prefix = match[1] ?? '';\n const uri = match[2] ?? '';\n if (STANDARD_PREFIXES.has(prefix) || STANDARD_NAMESPACES.has(uri)) continue;\n\n try {\n const url = new URL(uri);\n const host = url.hostname.toLowerCase();\n for (const reserved of ['w3.org', 'idpf.org']) {\n if (host.includes(reserved)) {\n const line = content.substring(0, match.index).split('\\n').length;\n pushMessage(context.messages, {\n id: MessageId.HTM_054,\n message: `Custom attribute namespace (\"${uri}\") must not include the string \"${reserved}\" in its domain`,\n location: { path, line },\n });\n }\n }\n } catch {\n // Not a valid URL, skip\n }\n }\n }\n\n private checkDataAttributes(context: ValidationContext, path: string, root: XmlElement): void {\n const elements = root.find('.//*');\n const XML_NCNAME_RE =\n /^[a-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF][a-z0-9._\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF-]*$/;\n\n for (const elem of elements) {\n const el = elem as XmlElement;\n if (!('attrs' in el)) continue;\n const attrs = el.attrs as { name: string; value: string }[];\n for (const attr of attrs) {\n if (!attr.name.startsWith('data-')) continue;\n const suffix = attr.name.substring(5);\n if (suffix.length === 0 || !XML_NCNAME_RE.test(suffix) || /[A-Z]/.test(attr.name)) {\n pushMessage(context.messages, {\n id: MessageId.HTM_061,\n message: `\"${attr.name}\" is not a valid custom data attribute (it must have at least one character after the hyphen, be XML-compatible, and not contain ASCII uppercase letters)`,\n location: { path, line: el.line },\n });\n }\n }\n }\n }\n\n private checkAccessibility(context: ValidationContext, path: string, root: XmlElement): void {\n const links = root.find('.//html:a', { html: 'http://www.w3.org/1999/xhtml' });\n for (const link of links) {\n if (!this.hasAccessibleContent(link as XmlElement)) {\n pushMessage(context.messages, {\n id: MessageId.ACC_004,\n message: 'Hyperlink has no accessible text content',\n location: { path },\n });\n }\n }\n\n const images = root.find('.//html:img', { html: 'http://www.w3.org/1999/xhtml' });\n for (const img of images) {\n const altAttr = this.getAttribute(img as XmlElement, 'alt');\n if (altAttr === null) {\n pushMessage(context.messages, {\n id: MessageId.ACC_005,\n message: 'Image is missing alt attribute',\n location: { path },\n });\n }\n }\n\n const svgLinks = root.find('.//svg:a', {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n });\n for (const svgLink of svgLinks) {\n const svgElem = svgLink as XmlElement;\n const title = svgElem.get('./svg:title', { svg: 'http://www.w3.org/2000/svg' });\n const ariaLabel = this.getAttribute(svgElem, 'aria-label');\n if (!title && !ariaLabel) {\n pushMessage(context.messages, {\n id: MessageId.ACC_011,\n message: 'SVG hyperlink has no accessible name (missing title element or aria-label)',\n location: { path },\n });\n }\n }\n\n const mathElements = root.find('.//math:math', { math: 'http://www.w3.org/1998/Math/MathML' });\n for (const mathElem of mathElements) {\n const elem = mathElem as XmlElement;\n const alttext = elem.attr('alttext');\n const annotation = elem.get('./math:annotation[@encoding=\"application/x-tex\"]', {\n math: 'http://www.w3.org/1998/Math/MathML',\n });\n const ariaLabel = this.getAttribute(elem, 'aria-label');\n\n if (!alttext?.value && !annotation && !ariaLabel) {\n pushMessage(context.messages, {\n id: MessageId.ACC_009,\n message: 'MathML element should have alttext attribute or annotation for accessibility',\n location: { path },\n });\n }\n }\n }\n\n private validateImages(context: ValidationContext, path: string, root: XmlElement): void {\n const packageDoc = context.packageDocument;\n if (!packageDoc) return;\n\n const images = root.find('.//html:img[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const img of images) {\n const imgElem = img as XmlElement;\n const srcAttr = this.getAttribute(imgElem, 'src');\n if (!srcAttr) continue;\n\n const src = srcAttr;\n const opfDir = context.opfPath?.includes('/')\n ? context.opfPath.substring(0, context.opfPath.lastIndexOf('/'))\n : '';\n\n let fullPath = src;\n if (opfDir && !src.startsWith('http://') && !src.startsWith('https://')) {\n if (src.startsWith('/')) {\n fullPath = src.slice(1);\n } else {\n const parts = opfDir.split('/');\n const relParts = src.split('/');\n for (const part of relParts) {\n if (part === '..') {\n parts.pop();\n } else if (part !== '.') {\n parts.push(part);\n }\n }\n fullPath = parts.join('/');\n }\n }\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n continue;\n }\n\n const manifestItem = packageDoc.manifest.find(\n (item) => fullPath.endsWith(item.href) || item.href.endsWith(fullPath),\n );\n if (!manifestItem) {\n // Skip media type check - missing manifest item is reported by RSC-007/RSC-008\n continue;\n }\n\n const imageMediaTypes = new Set([\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n 'image/png',\n 'image/svg+xml',\n 'image/webp',\n ]);\n\n if (!imageMediaTypes.has(manifestItem.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_051,\n message: `Image has invalid media type \"${manifestItem.mediaType}\": ${src}`,\n location: { path },\n });\n }\n }\n }\n\n private validateEpubTypes(context: ValidationContext, path: string, root: XmlElement): void {\n const epubTypeElements = root.find('.//*[@epub:type]', {\n epub: 'http://www.idpf.org/2007/ops',\n });\n\n for (const elem of epubTypeElements) {\n const elemTyped = elem as XmlElement;\n const epubTypeAttr = elemTyped.attr('type', 'epub');\n if (!epubTypeAttr?.value) continue;\n\n for (const part of epubTypeAttr.value.split(/\\s+/)) {\n if (!part) continue;\n const hasPrefix = part.includes(':');\n const localName = hasPrefix ? part.substring(part.indexOf(':') + 1) : part;\n\n // Prefixed values from non-standard vocabs are allowed since EPUB 3.2\n if (hasPrefix) continue;\n\n // Check against the default EPUB Structural Semantics Vocabulary\n if (EPUB_SSV_DEPRECATED.has(localName)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_086b,\n message: `epub:type value \"${localName}\" is deprecated`,\n location: { path, line: elem.line },\n });\n } else if (EPUB_SSV_DISALLOWED_ON_CONTENT.has(localName)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_087,\n message: `epub:type value \"${localName}\" is not allowed on documents of type \"application/xhtml+xml\"`,\n location: { path, line: elem.line },\n });\n } else if (!EPUB_SSV_ALL.has(localName)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_088,\n message: `Unrecognized epub:type value \"${localName}\"`,\n location: { path, line: elem.line },\n });\n }\n }\n }\n }\n\n private validateStylesheetLinks(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n ): void {\n const linkElements = root.find('.//html:link[@rel]', { html: 'http://www.w3.org/1999/xhtml' });\n\n const stylesheetTitles = new Map<string, Set<string>>();\n\n for (const linkElem of linkElements) {\n const elem = linkElem as XmlElement;\n const relAttr = this.getAttribute(elem, 'rel');\n const titleAttr = this.getAttribute(elem, 'title');\n const hrefAttr = this.getAttribute(elem, 'href');\n\n if (!relAttr || !hrefAttr) continue;\n\n const rel = relAttr.toLowerCase();\n const rels = rel.split(/\\s+/);\n\n if (rels.includes('stylesheet')) {\n const isAlternate = rels.includes('alternate');\n\n if (isAlternate && !titleAttr) {\n pushMessage(context.messages, {\n id: MessageId.CSS_015,\n message: 'Alternate stylesheet must have a title attribute',\n location: { path },\n });\n }\n\n if (titleAttr) {\n const key = `${titleAttr}:${isAlternate ? 'alt' : 'persistent'}`;\n const expectedRel = isAlternate ? 'alternate' : 'persistent';\n const existing = stylesheetTitles.get(key);\n\n if (existing) {\n if (!existing.has(expectedRel)) {\n pushMessage(context.messages, {\n id: MessageId.CSS_005,\n message: `Stylesheet with title \"${titleAttr}\" conflicts with another stylesheet with same title`,\n location: { path },\n });\n }\n existing.add(expectedRel);\n } else {\n stylesheetTitles.set(key, new Set([expectedRel]));\n }\n }\n }\n }\n }\n\n private hasAccessibleContent(element: XmlElement): boolean {\n const textContent = element.content;\n if (textContent && textContent.trim().length > 0) {\n return true;\n }\n\n const ariaLabel = this.getAttribute(element, 'aria-label');\n if (ariaLabel && ariaLabel.trim().length > 0) {\n return true;\n }\n\n const img = element.get('./html:img[@alt]', { html: 'http://www.w3.org/1999/xhtml' });\n if (img) {\n const alt = this.getAttribute(img as XmlElement, 'alt');\n if (alt && alt.trim().length > 0) {\n return true;\n }\n }\n\n const title = this.getAttribute(element, 'title');\n if (title && title.trim().length > 0) {\n return true;\n }\n\n return false;\n }\n\n private getAttribute(element: XmlElement, name: string): string | null {\n if (!('attrs' in element)) return null;\n const attrs = element.attrs as { name: string; value: string }[];\n const attr = attrs.find((a) => a.name === name);\n return attr?.value ?? null;\n }\n\n private validateViewportMeta(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n manifestItem: { properties?: string[] } | undefined,\n ): void {\n const isFixedLayout = manifestItem?.properties?.includes('fixed-layout');\n const metaTags = root.find('.//html:meta[@name]', { html: 'http://www.w3.org/1999/xhtml' });\n\n let hasViewportMeta = false;\n\n for (const meta of metaTags) {\n const nameAttr = this.getAttribute(meta as XmlElement, 'name');\n if (nameAttr === 'viewport') {\n hasViewportMeta = true;\n const contentAttr = this.getAttribute(meta as XmlElement, 'content');\n\n if (isFixedLayout) {\n // Fixed-layout viewport validation\n if (!contentAttr) {\n pushMessage(context.messages, {\n id: MessageId.HTM_046,\n message:\n 'Viewport meta element should have a content attribute in fixed-layout documents',\n location: { path },\n });\n continue;\n }\n } else {\n // Reflowable document viewport validation (HTM-060b)\n pushMessage(context.messages, {\n id: MessageId.HTM_060b,\n message: `EPUB reading systems must ignore viewport meta elements in reflowable documents; viewport declaration \"${contentAttr ?? ''}\" will be ignored`,\n location: { path },\n });\n }\n }\n }\n\n // Only suggest viewport for fixed-layout documents\n if (isFixedLayout && !hasViewportMeta) {\n pushMessage(context.messages, {\n id: MessageId.HTM_049,\n message: 'Fixed-layout document should include a viewport meta element',\n location: { path },\n });\n }\n }\n\n private extractAndRegisterIDs(path: string, root: XmlElement, registry: ResourceRegistry): void {\n const elementsWithId = root.find('.//*[@id]');\n for (const elem of elementsWithId) {\n const xmlElem = elem as XmlElement;\n const id = this.getAttribute(xmlElem, 'id');\n if (id) {\n registry.registerID(path, id);\n const localName = xmlElem.name.includes(':') ? xmlElem.name.split(':').pop() : xmlElem.name;\n if (localName === 'symbol') {\n registry.registerSVGSymbolID(path, id);\n }\n }\n }\n }\n\n private extractAndRegisterHyperlinks(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n isNavDocument = false,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n // Build a map from anchor line numbers to nav-specific reference types\n // when processing a nav document, to distinguish toc/page-list links from regular hyperlinks\n const navAnchorTypes = new Map<string, ReferenceType>();\n if (isNavDocument) {\n const HTML_NS = { html: 'http://www.w3.org/1999/xhtml' };\n const navElements = root.find('.//html:nav', HTML_NS);\n for (const nav of navElements) {\n const navElem = nav as XmlElement;\n const epubTypeAttr =\n 'attrs' in navElem\n ? (\n navElem.attrs as {\n name: string;\n value: string;\n prefix?: string;\n namespaceUri?: string;\n }[]\n ).find(\n (attr) =>\n attr.name === 'type' &&\n attr.prefix === 'epub' &&\n attr.namespaceUri === 'http://www.idpf.org/2007/ops',\n )\n : undefined;\n const types = epubTypeAttr ? epubTypeAttr.value.trim().split(/\\s+/) : [];\n let refType = ReferenceType.HYPERLINK;\n if (types.includes('toc')) refType = ReferenceType.NAV_TOC_LINK;\n else if (types.includes('page-list')) refType = ReferenceType.NAV_PAGELIST_LINK;\n\n const navAnchors = navElem.find('.//html:a[@href]', HTML_NS);\n for (const a of navAnchors) {\n const anchorHref = this.getAttribute(a as XmlElement, 'href') ?? '';\n navAnchorTypes.set(`${String(a.line)}:${anchorHref}`, refType);\n }\n }\n }\n\n const links = root.find('.//html:a[@href]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const link of links) {\n // Trim whitespace (XML attribute values are whitespace-normalized by parsers)\n const href = this.getAttribute(link as XmlElement, 'href')?.trim() ?? null;\n if (href === null) continue;\n if (href === '') {\n pushMessage(context.messages, {\n id: MessageId.HTM_045,\n message: 'Encountered empty href',\n location: { path, line: link.line },\n });\n continue;\n }\n\n const line = link.line;\n const refType = isNavDocument\n ? (navAnchorTypes.get(`${String(line)}:${href}`) ?? ReferenceType.HYPERLINK)\n : ReferenceType.HYPERLINK;\n\n if (ABSOLUTE_URI_RE.test(href)) {\n continue;\n }\n // Skip EPUB CFI references (e.g., \"package.opf#epubcfi(/6/2!/4/2/1:1)\")\n if (href.includes('#epubcfi(')) {\n continue;\n }\n if (href.startsWith('#')) {\n const targetResource = path;\n const fragment = href.slice(1);\n refValidator.addReference({\n url: href,\n targetResource,\n fragment,\n type: refType,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const fragmentPart = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource,\n type: refType,\n location: { path, line },\n };\n if (fragmentPart) {\n ref.fragment = fragmentPart;\n }\n refValidator.addReference(ref);\n }\n\n // Extract <area href> elements (M1: Java extracts these as hyperlink references)\n const areaLinks = root.find('.//html:area[@href]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const area of areaLinks) {\n const href = this.getAttribute(area as XmlElement, 'href')?.trim();\n if (!href) continue;\n\n const line = area.line;\n\n if (ABSOLUTE_URI_RE.test(href)) continue;\n if (href.includes('#epubcfi(')) continue;\n\n if (href.startsWith('#')) {\n refValidator.addReference({\n url: href,\n targetResource: path,\n fragment: href.slice(1),\n type: ReferenceType.HYPERLINK,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedAreaPath = this.resolveRelativePath(docDir, href, opfDir);\n const areaHashIndex = resolvedAreaPath.indexOf('#');\n const areaTarget =\n areaHashIndex >= 0 ? resolvedAreaPath.slice(0, areaHashIndex) : resolvedAreaPath;\n const areaFragment =\n areaHashIndex >= 0 ? resolvedAreaPath.slice(areaHashIndex + 1) : undefined;\n\n const areaRef: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource: areaTarget,\n type: ReferenceType.HYPERLINK,\n location: { path, line },\n };\n if (areaFragment) {\n areaRef.fragment = areaFragment;\n }\n refValidator.addReference(areaRef);\n }\n\n const svgLinks = root.find('.//svg:a', {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n });\n for (const link of svgLinks) {\n const elem = link as XmlElement;\n const href = this.getAttribute(elem, 'xlink:href') ?? this.getAttribute(elem, 'href');\n if (!href) continue;\n\n const line = link.line;\n\n if (href.startsWith('http://') || href.startsWith('https://')) {\n continue;\n }\n if (href.startsWith('#')) {\n const targetResource = path;\n const fragment = href.slice(1);\n refValidator.addReference({\n url: href,\n targetResource,\n fragment,\n type: ReferenceType.HYPERLINK,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const svgFragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n\n const svgRef: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource,\n type: ReferenceType.HYPERLINK,\n location: { path, line },\n };\n if (svgFragment) {\n svgRef.fragment = svgFragment;\n }\n refValidator.addReference(svgRef);\n }\n }\n\n private extractAndRegisterStylesheets(\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n const linkElements = root.find('.//html:link[@href]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const linkElem of linkElements) {\n const href = this.getAttribute(linkElem as XmlElement, 'href');\n const rel = this.getAttribute(linkElem as XmlElement, 'rel');\n if (!href) continue;\n // Java EPUBCheck only registers <link> references with rel=\"stylesheet\"\n // Skip <link> elements that only have itemprop or other non-rel attributes\n if (!rel?.toLowerCase().includes('stylesheet')) continue;\n\n const line = linkElem.line;\n const type = ReferenceType.STYLESHEET;\n\n if (href.startsWith('http://') || href.startsWith('https://')) {\n // Still register remote resources\n refValidator.addReference({\n url: href,\n targetResource: href,\n type,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n\n refValidator.addReference({\n url: href,\n targetResource,\n type,\n location: { path, line },\n });\n }\n }\n\n /**\n * Parse CSS content and extract @import statements\n */\n private extractCSSImports(\n cssPath: string,\n cssContent: string,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const cssDir = cssPath.includes('/') ? cssPath.substring(0, cssPath.lastIndexOf('/')) : '';\n\n // Remove CSS comments first to avoid matching imports inside comments\n const cleanedCSS = cssContent.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n\n // Simple regex to match @import statements\n // Matches: @import \"file.css\"; @import 'file.css'; @import url(\"file.css\"); @import url(file.css);\n const importRegex =\n /@import\\s+(?:url\\s*\\(\\s*[\"']?([^\"')]+?)[\"']?\\s*\\)|[\"']([^\"']+)[\"'])[^;]*;/gi;\n\n let match;\n while ((match = importRegex.exec(cleanedCSS)) !== null) {\n const importUrl = match[1] ?? match[2];\n if (!importUrl) continue;\n\n // Calculate line number from regex match position\n const beforeMatch = cleanedCSS.substring(0, match.index);\n const line = beforeMatch.split('\\n').length;\n\n // Skip remote URLs\n if (importUrl.startsWith('http://') || importUrl.startsWith('https://')) {\n refValidator.addReference({\n url: importUrl,\n targetResource: importUrl,\n type: ReferenceType.STYLESHEET,\n location: { path: cssPath, line },\n });\n continue;\n }\n\n // Resolve relative path\n const resolvedPath = this.resolveRelativePath(cssDir, importUrl, opfDir);\n\n refValidator.addReference({\n url: importUrl,\n targetResource: resolvedPath,\n type: ReferenceType.STYLESHEET,\n location: { path: cssPath, line },\n });\n }\n }\n\n private extractAndRegisterImages(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n registry?: ResourceRegistry,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const ns = { html: 'http://www.w3.org/1999/xhtml' };\n\n // Pre-compute which picture elements have CMT source siblings for intrinsic fallback\n const pictureHasCMTSource = new Set<number>();\n if (registry) {\n const pictures = root.find('.//html:picture', ns);\n for (const pic of pictures) {\n const picElem = pic as XmlElement;\n const sources = picElem.find('html:source[@src]', ns);\n const sourcesWithSrcset = picElem.find('html:source[@srcset]', ns);\n for (const source of [...sources, ...sourcesWithSrcset]) {\n const srcAttr = this.getAttribute(source as XmlElement, 'src');\n const srcsetAttr = this.getAttribute(source as XmlElement, 'srcset');\n const sourceUrl = srcAttr ?? srcsetAttr?.split(',')[0]?.trim().split(/\\s+/)[0];\n if (!sourceUrl || sourceUrl.startsWith('http://') || sourceUrl.startsWith('https://'))\n continue;\n const resolvedSource = this.resolveRelativePath(docDir, sourceUrl, opfDir);\n const resource = registry.getResource(resolvedSource);\n if (resource && isCoreMediaType(resource.mimeType)) {\n pictureHasCMTSource.add(pic.line);\n break;\n }\n }\n }\n }\n\n const images = root.find('.//html:img[@src]', ns);\n for (const img of images) {\n const imgElem = img as XmlElement;\n const src = this.getAttribute(imgElem, 'src');\n if (!src) continue;\n\n const line = img.line;\n\n // Check if this img is inside a picture with CMT source (intrinsic fallback)\n let hasIntrinsicFallback: boolean | undefined;\n if (pictureHasCMTSource.size > 0) {\n try {\n const pictureParent = imgElem.get('ancestor::html:picture', ns);\n if (pictureParent && pictureHasCMTSource.has(pictureParent.line)) {\n hasIntrinsicFallback = true;\n }\n } catch {\n // ancestor axis may not be supported; skip\n }\n }\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: src,\n targetResource: src,\n type: ReferenceType.IMAGE,\n location: { path, line },\n };\n if (hasIntrinsicFallback) ref.hasIntrinsicFallback = true;\n refValidator.addReference(ref);\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: src,\n targetResource,\n type: ReferenceType.IMAGE,\n location: { path, line },\n };\n if (hasIntrinsicFallback) ref.hasIntrinsicFallback = true;\n if (fragment) {\n ref.fragment = fragment;\n }\n refValidator.addReference(ref);\n }\n\n // Parse srcset attribute\n const srcset = this.getAttribute(imgElem, 'srcset');\n if (srcset) {\n this.parseSrcset(srcset, docDir, opfDir, path, line, refValidator);\n }\n }\n\n // Also check for images in SVG - use separate queries to avoid XPath 'or' issues\n let svgImages: unknown[] = [];\n try {\n const svgImagesXlink = root.find('.//svg:image[@xlink:href]', {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n });\n const svgImagesHref = root.find('.//svg:image[@href]', {\n svg: 'http://www.w3.org/2000/svg',\n });\n svgImages = [...svgImagesXlink, ...svgImagesHref];\n } catch {\n // Fallback: skip SVG image extraction if namespace resolution fails\n svgImages = [];\n }\n for (const svgImg of svgImages) {\n const elem = svgImg as XmlElement;\n const href = this.getAttribute(elem, 'xlink:href') ?? this.getAttribute(elem, 'href');\n if (!href) continue;\n\n const line = (svgImg as XmlNode).line;\n\n if (href.startsWith('http://') || href.startsWith('https://')) {\n refValidator.addReference({\n url: href,\n targetResource: href,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, href, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n const svgImgRef: Parameters<typeof refValidator.addReference>[0] = {\n url: href,\n targetResource,\n type: ReferenceType.IMAGE,\n location: { path, line },\n };\n if (fragment) {\n svgImgRef.fragment = fragment;\n }\n refValidator.addReference(svgImgRef);\n }\n\n this.extractSVGUseReferences(context, path, root, docDir, opfDir, refValidator);\n\n // Check for poster images on video elements\n const videos = root.find('.//html:video[@poster]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const video of videos) {\n const poster = this.getAttribute(video as XmlElement, 'poster');\n if (!poster) continue;\n\n const line = video.line;\n\n if (poster.startsWith('http://') || poster.startsWith('https://')) {\n refValidator.addReference({\n url: poster,\n targetResource: poster,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, poster, opfDir);\n refValidator.addReference({\n url: poster,\n targetResource: resolvedPath,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n }\n }\n\n private extractAndRegisterMathMLAltimg(\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n const mathElements = root.find('.//math:math[@altimg]', {\n math: 'http://www.w3.org/1998/Math/MathML',\n });\n for (const mathElem of mathElements) {\n const altimg = this.getAttribute(mathElem as XmlElement, 'altimg');\n if (!altimg) continue;\n\n const line = mathElem.line;\n\n if (altimg.startsWith('http://') || altimg.startsWith('https://')) {\n refValidator.addReference({\n url: altimg,\n targetResource: altimg,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, altimg, opfDir);\n refValidator.addReference({\n url: altimg,\n targetResource: resolvedPath,\n type: ReferenceType.IMAGE,\n location: { path, line },\n });\n }\n }\n\n private extractAndRegisterScripts(\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n const scripts = root.find('.//html:script[@src]', { html: 'http://www.w3.org/1999/xhtml' });\n for (const script of scripts) {\n const src = this.getAttribute(script as XmlElement, 'src');\n if (!src) continue;\n\n const line = script.line;\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n refValidator.addReference({\n url: src,\n targetResource: src,\n type: ReferenceType.GENERIC,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n refValidator.addReference({\n url: src,\n targetResource: resolvedPath,\n type: ReferenceType.GENERIC,\n location: { path, line },\n });\n }\n }\n\n /**\n * Extract cite attribute references from blockquote, q, ins, del elements\n * These need to be validated as RSC-007 if the referenced resource is missing\n */\n private extractAndRegisterCiteAttributes(\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n\n // Elements that can have cite attribute: blockquote, q, ins, del\n const citeElements = [\n ...root.find('.//html:blockquote[@cite]', { html: 'http://www.w3.org/1999/xhtml' }),\n ...root.find('.//html:q[@cite]', { html: 'http://www.w3.org/1999/xhtml' }),\n ...root.find('.//html:ins[@cite]', { html: 'http://www.w3.org/1999/xhtml' }),\n ...root.find('.//html:del[@cite]', { html: 'http://www.w3.org/1999/xhtml' }),\n ];\n\n for (const elem of citeElements) {\n const cite = this.getAttribute(elem as XmlElement, 'cite');\n if (!cite) continue;\n\n const line = elem.line;\n\n // Skip remote URLs - cite can reference remote resources\n if (cite.startsWith('http://') || cite.startsWith('https://')) {\n continue;\n }\n\n // Skip fragment-only references (refers to same document)\n if (cite.startsWith('#')) {\n const targetResource = path;\n const fragment = cite.slice(1);\n refValidator.addReference({\n url: cite,\n targetResource,\n fragment,\n type: ReferenceType.CITE,\n location: { path, line },\n });\n continue;\n }\n\n const resolvedPath = this.resolveRelativePath(docDir, cite, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const fragment = hashIndex >= 0 ? resolvedPath.slice(hashIndex + 1) : undefined;\n\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: cite,\n targetResource,\n type: ReferenceType.CITE,\n location: { path, line },\n };\n if (fragment) {\n ref.fragment = fragment;\n }\n refValidator.addReference(ref);\n }\n }\n\n private extractAndRegisterMediaElements(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n registry?: ResourceRegistry,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const ns = { html: 'http://www.w3.org/1999/xhtml' };\n\n // Process audio and video elements together to detect intrinsic source fallback.\n // Per Java EPUBCheck: a media element has intrinsic fallback if any of its\n // sources (src attr or <source> children) resolve to a core media type resource.\n for (const tagName of ['audio', 'video'] as const) {\n const isAudio = tagName === 'audio';\n const refType = isAudio ? ReferenceType.AUDIO : ReferenceType.VIDEO;\n const elements = root.find(`.//html:${tagName}`, ns);\n\n for (const elem of elements) {\n const mediaElem = elem as XmlElement;\n const pendingRefs: {\n url: string;\n targetResource: string;\n type: ReferenceType;\n line?: number;\n }[] = [];\n\n // Collect direct src attribute\n const src = this.getAttribute(mediaElem, 'src');\n if (src) {\n const line = elem.line;\n if (src.startsWith('http://') || src.startsWith('https://')) {\n pendingRefs.push({ url: src, targetResource: src, type: refType, line });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n pendingRefs.push({ url: src, targetResource: resolvedPath, type: refType, line });\n }\n }\n\n // Collect <source> children\n const sources = mediaElem.find('html:source[@src]', ns);\n for (const source of sources) {\n const sourceElem = source as XmlElement;\n const sourceSrc = this.getAttribute(sourceElem, 'src');\n if (!sourceSrc) continue;\n const line = source.line;\n if (sourceSrc.startsWith('http://') || sourceSrc.startsWith('https://')) {\n pendingRefs.push({ url: sourceSrc, targetResource: sourceSrc, type: refType, line });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, sourceSrc, opfDir);\n pendingRefs.push({ url: sourceSrc, targetResource: resolvedPath, type: refType, line });\n }\n // OPF-013: Check type attribute mismatch for source in audio/video\n if (registry) {\n this.checkMimeTypeMatch(context, path, docDir, opfDir, sourceElem, 'src', registry);\n }\n }\n\n // Check if any source resolves to a CMT resource\n let hasIntrinsicFallback = false;\n if (registry && pendingRefs.length > 1) {\n hasIntrinsicFallback = pendingRefs.some((ref) => {\n const resource = registry.getResource(ref.targetResource);\n return resource && isCoreMediaType(resource.mimeType);\n });\n }\n\n // Register all references with the shared fallback flag\n for (const ref of pendingRefs) {\n const reference: Parameters<typeof refValidator.addReference>[0] = {\n url: ref.url,\n targetResource: ref.targetResource,\n type: ref.type,\n location: ref.line !== undefined ? { path, line: ref.line } : { path },\n };\n if (hasIntrinsicFallback) reference.hasIntrinsicFallback = true;\n refValidator.addReference(reference);\n }\n }\n }\n\n // Process picture elements for MED-003 and MED-007\n this.extractAndRegisterPictureElements(context, path, root, opfDir, refValidator, registry);\n\n // Extract iframe elements with src attribute\n const iframeElements = root.find('.//html:iframe[@src]', {\n html: 'http://www.w3.org/1999/xhtml',\n });\n for (const iframe of iframeElements) {\n const src = this.getAttribute(iframe as XmlElement, 'src');\n if (!src) continue;\n\n const line = (iframe as unknown as { line?: number }).line;\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n refValidator.addReference({\n url: src,\n targetResource: src,\n type: ReferenceType.GENERIC,\n location: line !== undefined ? { path, line } : { path },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n refValidator.addReference({\n url: src,\n targetResource: resolvedPath,\n type: ReferenceType.GENERIC,\n location: line !== undefined ? { path, line } : { path },\n });\n }\n }\n\n // Extract track elements with src attribute\n const trackElements = root.find('.//html:track[@src]', {\n html: 'http://www.w3.org/1999/xhtml',\n });\n for (const track of trackElements) {\n const src = this.getAttribute(track as XmlElement, 'src');\n if (!src) continue;\n\n const line = (track as unknown as { line?: number }).line;\n\n if (src.startsWith('http://') || src.startsWith('https://')) {\n refValidator.addReference({\n url: src,\n targetResource: src,\n type: ReferenceType.TRACK,\n location: line !== undefined ? { path, line } : { path },\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n refValidator.addReference({\n url: src,\n targetResource: resolvedPath,\n type: ReferenceType.TRACK,\n location: line !== undefined ? { path, line } : { path },\n });\n }\n }\n }\n\n private extractAndRegisterEmbeddedElements(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n registry?: ResourceRegistry,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const ns = { html: 'http://www.w3.org/1999/xhtml' };\n\n const addRef = (\n src: string,\n type: ReferenceType,\n line?: number,\n hasIntrinsicFallback?: boolean,\n ): void => {\n const location = line !== undefined ? { path, line } : { path };\n if (src.startsWith('http://') || src.startsWith('https://')) {\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: src,\n targetResource: src,\n type,\n location,\n };\n if (hasIntrinsicFallback) ref.hasIntrinsicFallback = true;\n refValidator.addReference(ref);\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const ref: Parameters<typeof refValidator.addReference>[0] = {\n url: src,\n targetResource,\n type,\n location,\n };\n if (hashIndex >= 0) ref.fragment = resolvedPath.slice(hashIndex + 1);\n if (hasIntrinsicFallback) ref.hasIntrinsicFallback = true;\n refValidator.addReference(ref);\n }\n };\n\n // embed[@src]\n for (const elem of root.find('.//html:embed[@src]', ns)) {\n const embedElem = elem as XmlElement;\n const src = this.getAttribute(embedElem, 'src');\n if (src) addRef(src, ReferenceType.GENERIC, elem.line);\n if (registry) {\n this.checkMimeTypeMatch(context, path, docDir, opfDir, embedElem, 'src', registry);\n }\n }\n\n // input[@type='image'][@src]\n for (const elem of root.find('.//html:input[@src]', ns)) {\n const type = this.getAttribute(elem as XmlElement, 'type');\n if (type?.toLowerCase() === 'image') {\n const src = this.getAttribute(elem as XmlElement, 'src');\n if (src) addRef(src, ReferenceType.IMAGE, elem.line);\n }\n }\n\n // object[@data]\n for (const elem of root.find('.//html:object[@data]', ns)) {\n const objElem = elem as XmlElement;\n const data = this.getAttribute(objElem, 'data');\n if (!data) continue;\n // Object has intrinsic fallback if it has palpable child content\n // (non-param, non-hidden child elements)\n const allChildren = objElem.find('html:*', ns);\n const hasFallbackContent = allChildren.some((child) => {\n const c = child as XmlElement;\n return c.name !== 'param' && this.getAttribute(c, 'hidden') === null;\n });\n addRef(data, ReferenceType.GENERIC, elem.line, hasFallbackContent || undefined);\n if (registry) {\n this.checkMimeTypeMatch(context, path, docDir, opfDir, objElem, 'data', registry);\n }\n }\n }\n\n /**\n * Check if an element's type attribute matches the manifest MIME type (OPF-013)\n */\n private checkMimeTypeMatch(\n context: ValidationContext,\n path: string,\n docDir: string,\n opfDir: string,\n element: XmlElement,\n srcAttr: string,\n registry: ResourceRegistry,\n ): void {\n const typeAttr = this.getAttribute(element, 'type');\n if (!typeAttr) return;\n\n const src = this.getAttribute(element, srcAttr);\n if (!src || src.startsWith('http://') || src.startsWith('https://')) return;\n\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n const hashIndex = resolvedPath.indexOf('#');\n const targetResource = hashIndex >= 0 ? resolvedPath.slice(0, hashIndex) : resolvedPath;\n const resource = registry.getResource(targetResource);\n if (!resource) return;\n\n const declaredType = stripMimeParams(typeAttr);\n const manifestType = stripMimeParams(resource.mimeType);\n\n if (declaredType && declaredType !== manifestType) {\n pushMessage(context.messages, {\n id: MessageId.OPF_013,\n message: `Resource \"${targetResource}\" is declared with MIME type \"${declaredType}\" in content, but has MIME type \"${manifestType}\" in the package document`,\n location: { path, line: element.line },\n });\n }\n }\n\n /**\n * Extract and validate picture elements (MED-003, MED-007, OPF-013)\n */\n private extractAndRegisterPictureElements(\n context: ValidationContext,\n path: string,\n root: XmlElement,\n opfDir: string,\n refValidator: ReferenceValidator,\n registry?: ResourceRegistry,\n ): void {\n const docDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : '';\n const ns = { html: 'http://www.w3.org/1999/xhtml' };\n\n const BLESSED_IMAGE_TYPES = new Set([\n 'image/gif',\n 'image/jpeg',\n 'image/png',\n 'image/svg+xml',\n 'image/webp',\n ]);\n\n const pictures = root.find('.//html:picture', ns);\n for (const pic of pictures) {\n const picElem = pic as XmlElement;\n\n // Check img inside picture (MED-003)\n const imgs = picElem.find('html:img[@src]', ns);\n for (const img of imgs) {\n const imgElem = img as XmlElement;\n const src = this.getAttribute(imgElem, 'src');\n if (!src || src.startsWith('http://') || src.startsWith('https://')) continue;\n\n if (registry) {\n const resolvedPath = this.resolveRelativePath(docDir, src, opfDir);\n const resource = registry.getResource(resolvedPath);\n if (resource && !BLESSED_IMAGE_TYPES.has(resource.mimeType)) {\n pushMessage(context.messages, {\n id: MessageId.MED_003,\n message: `Image in \"picture\" element must be a core image type, but found \"${resource.mimeType}\"`,\n location: { path, line: img.line },\n });\n }\n }\n\n // Also check srcset\n const srcset = this.getAttribute(imgElem, 'srcset');\n if (srcset && registry) {\n const entries = srcset.split(',');\n for (const entry of entries) {\n const url = entry.trim().split(/\\s+/)[0];\n if (!url || url.startsWith('http://') || url.startsWith('https://')) continue;\n const resolvedPath = this.resolveRelativePath(docDir, url, opfDir);\n const resource = registry.getResource(resolvedPath);\n if (resource && !BLESSED_IMAGE_TYPES.has(resource.mimeType)) {\n pushMessage(context.messages, {\n id: MessageId.MED_003,\n message: `Image in \"picture\" element must be a core image type, but found \"${resource.mimeType}\"`,\n location: { path, line: img.line },\n });\n }\n }\n }\n }\n\n // Check source inside picture (MED-007, OPF-013)\n // Sources may use src or srcset attribute\n const sourcesWithSrc = picElem.find('html:source[@src]', ns);\n const sourcesWithSrcset = picElem.find('html:source[@srcset]', ns);\n const allSources = new Set([...sourcesWithSrc, ...sourcesWithSrcset]);\n for (const source of allSources) {\n const sourceElem = source as XmlElement;\n const typeAttr = this.getAttribute(sourceElem, 'type');\n\n // Get source URL from src or first srcset entry\n const src = this.getAttribute(sourceElem, 'src');\n const srcset = this.getAttribute(sourceElem, 'srcset');\n const sourceUrl = src ?? srcset?.split(',')[0]?.trim().split(/\\s+/)[0];\n if (!sourceUrl || sourceUrl.startsWith('http://') || sourceUrl.startsWith('https://'))\n continue;\n\n if (registry) {\n // OPF-013: Check type mismatch (only if source has type and src attributes)\n if (src) {\n this.checkMimeTypeMatch(context, path, docDir, opfDir, sourceElem, 'src', registry);\n } else if (srcset && typeAttr) {\n // For srcset, manually check the first entry against the type attribute\n const resolvedPath = this.resolveRelativePath(docDir, sourceUrl, opfDir);\n const resource = registry.getResource(resolvedPath);\n if (resource) {\n const declaredType = stripMimeParams(typeAttr);\n const manifestType = stripMimeParams(resource.mimeType);\n if (declaredType && declaredType !== manifestType) {\n pushMessage(context.messages, {\n id: MessageId.OPF_013,\n message: `Resource \"${resolvedPath}\" is declared with MIME type \"${declaredType}\" in content, but has MIME type \"${manifestType}\" in the package document`,\n location: { path, line: source.line },\n });\n }\n }\n }\n\n // MED-007: source in picture must have type attribute if resource is not blessed image\n const resolvedPath = this.resolveRelativePath(docDir, sourceUrl, opfDir);\n const resource = registry.getResource(resolvedPath);\n if (resource && !BLESSED_IMAGE_TYPES.has(resource.mimeType) && !typeAttr) {\n pushMessage(context.messages, {\n id: MessageId.MED_007,\n message: `Source element in \"picture\" with foreign resource type \"${resource.mimeType}\" must declare a \"type\" attribute`,\n location: { path, line: source.line },\n });\n }\n }\n }\n }\n }\n\n private parseSrcset(\n srcset: string,\n docDir: string,\n opfDir: string,\n path: string,\n line: number | undefined,\n refValidator: ReferenceValidator,\n ): void {\n // srcset format: \"url [descriptor], url [descriptor], ...\"\n const entries = srcset.split(',');\n for (const entry of entries) {\n const trimmed = entry.trim();\n if (!trimmed) continue;\n // First token is the URL, rest are descriptors (e.g., \"2x\", \"300w\")\n const url = trimmed.split(/\\s+/)[0];\n if (!url) continue;\n\n const location = line !== undefined ? { path, line } : { path };\n\n if (url.startsWith('http://') || url.startsWith('https://')) {\n refValidator.addReference({\n url,\n targetResource: url,\n type: ReferenceType.IMAGE,\n location,\n });\n } else {\n const resolvedPath = this.resolveRelativePath(docDir, url, opfDir);\n refValidator.addReference({\n url,\n targetResource: resolvedPath,\n type: ReferenceType.IMAGE,\n location,\n });\n }\n }\n }\n\n private resolveRelativePath(docDir: string, href: string, _opfDir: string): string {\n let decoded: string;\n try {\n decoded = decodeURIComponent(href);\n } catch {\n decoded = href;\n }\n\n const hrefWithoutFragment = decoded.split('#')[0] ?? decoded;\n const fragment = decoded.includes('#') ? decoded.split('#')[1] : '';\n\n if (hrefWithoutFragment.startsWith('/')) {\n const result = hrefWithoutFragment.slice(1).normalize('NFC');\n return fragment ? `${result}#${fragment}` : result;\n }\n\n const parts = docDir ? docDir.split('/') : [];\n const relParts = hrefWithoutFragment.split('/');\n\n for (const part of relParts) {\n if (part === '..') {\n parts.pop();\n } else if (part !== '.' && part !== '') {\n parts.push(part);\n }\n }\n\n const result = parts.join('/').normalize('NFC');\n return fragment ? `${result}#${fragment}` : result;\n }\n}\n","import type { EPUBVersion, EpubCheckResult, Severity, ValidationMessage } from '../types.js';\n\n/**\n * Build a validation result from messages\n */\nexport function buildReport(\n messages: ValidationMessage[],\n version: EPUBVersion | undefined,\n elapsedMs: number,\n): EpubCheckResult {\n const counts = countBySeverity(messages);\n\n return {\n valid: counts.fatal === 0 && counts.error === 0,\n messages,\n fatalCount: counts.fatal,\n errorCount: counts.error,\n warningCount: counts.warning,\n infoCount: counts.info,\n usageCount: counts.usage,\n version,\n elapsedMs,\n };\n}\n\n/**\n * Count messages by severity\n */\nexport function countBySeverity(messages: ValidationMessage[]): Record<Severity, number> {\n const counts: Record<Severity, number> = {\n fatal: 0,\n error: 0,\n warning: 0,\n info: 0,\n usage: 0,\n };\n\n for (const msg of messages) {\n counts[msg.severity]++;\n }\n\n return counts;\n}\n\n/**\n * Filter messages by severity\n */\nexport function filterBySeverity(\n messages: ValidationMessage[],\n severity: Severity,\n): ValidationMessage[] {\n return messages.filter((msg) => msg.severity === severity);\n}\n\n/**\n * Filter messages by path\n */\nexport function filterByPath(messages: ValidationMessage[], path: string): ValidationMessage[] {\n return messages.filter((msg) => msg.location?.path === path);\n}\n\n/**\n * Format messages as a string for display\n */\nexport function formatMessages(messages: ValidationMessage[]): string {\n return messages\n .map((msg) => {\n const loc = msg.location;\n const position = loc\n ? `${loc.path}${loc.line !== undefined ? `:${String(loc.line)}` : ''}${loc.column !== undefined ? `:${String(loc.column)}` : ''}`\n : '';\n return `${msg.severity.toUpperCase()}(${msg.id}): ${msg.message}${position ? ` [${position}]` : ''}`;\n })\n .join('\\n');\n}\n\n/**\n * Convert result to JSON report format (compatible with EPUBCheck JSON output)\n */\nexport function toJSONReport(result: EpubCheckResult): string {\n return JSON.stringify(\n {\n checker: {\n name: 'epubcheck-ts',\n version: '0.1.0',\n },\n publication: {\n version: result.version,\n },\n messages: result.messages.map((msg) => ({\n ID: msg.id,\n severity: msg.severity,\n message: msg.message,\n ...(msg.location && {\n locations: [\n {\n path: msg.location.path,\n line: msg.location.line ?? -1,\n column: msg.location.column ?? -1,\n context: msg.location.context,\n },\n ],\n }),\n ...(msg.suggestion && { suggestion: msg.suggestion }),\n })),\n fatals: result.fatalCount,\n errors: result.errorCount,\n warnings: result.warningCount,\n infos: result.infoCount,\n usages: result.usageCount,\n elapsedTime: result.elapsedMs,\n },\n null,\n 2,\n );\n}\n\n/**\n * @deprecated Use individual functions instead. This class will be removed in a future version.\n */\nexport const Report = {\n build: buildReport,\n countBySeverity,\n filterBySeverity,\n filterByPath,\n format: formatMessages,\n toJSON: toJSONReport,\n};\n","/**\n * NCX (Navigation Control XML) validation for EPUB 2.0\n */\n\nimport { XmlDocument, type XmlElement } from 'libxml2-wasm';\nimport { MessageId, pushMessage } from '../messages/index.js';\nimport type { ResourceRegistry } from '../references/registry.js';\nimport type { ValidationContext } from '../types.js';\n\n/**\n * Validator for EPUB 2 NCX navigation documents\n */\nexport class NCXValidator {\n validate(\n context: ValidationContext,\n ncxContent: string,\n ncxPath: string,\n registry?: ResourceRegistry,\n ): void {\n let doc: XmlDocument | null = null;\n try {\n doc = XmlDocument.fromString(ncxContent);\n } catch (error) {\n if (error instanceof Error) {\n pushMessage(context.messages, {\n id: MessageId.NCX_002,\n message: `NCX document is not well-formed: ${error.message}`,\n location: { path: ncxPath },\n });\n }\n return;\n }\n\n try {\n const root = doc.root;\n\n if (root.name !== 'ncx') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'NCX document must have ncx as root element',\n location: { path: ncxPath },\n });\n return;\n }\n\n const ns = root.nsDeclarations[''];\n if (ns !== 'http://www.daisy.org/z3986/2005/ncx/') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'NCX document must use namespace http://www.daisy.org/z3986/2005/ncx/',\n location: { path: ncxPath },\n });\n }\n\n this.checkUid(context, root, ncxPath);\n this.checkNavMap(context, root, ncxPath);\n this.checkContentSrc(context, root, ncxPath, registry);\n } finally {\n doc.dispose();\n }\n }\n\n private checkUid(context: ValidationContext, root: XmlElement, path: string): void {\n const uidMeta = root.get('.//ncx:head/ncx:meta[@name=\"dtb:uid\"]', {\n ncx: 'http://www.daisy.org/z3986/2005/ncx/',\n });\n\n if (!uidMeta) {\n return;\n }\n\n const uidElement = uidMeta as XmlElement;\n const uidAttr = uidElement.attr('content');\n const uidContent = uidAttr?.value;\n\n if (!uidContent || uidContent.trim() === '') {\n const line = uidElement.line;\n pushMessage(context.messages, {\n id: MessageId.NCX_006,\n message: 'NCX dtb:uid meta content should not be empty',\n location: { path, line },\n });\n return;\n }\n\n context.ncxUid = uidContent.trim();\n }\n\n private checkNavMap(context: ValidationContext, root: XmlElement, path: string): void {\n const navMapNode = root.get('.//ncx:navMap', { ncx: 'http://www.daisy.org/z3986/2005/ncx/' });\n\n if (!navMapNode) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'NCX document must have a navMap element',\n location: { path },\n });\n }\n }\n\n private checkContentSrc(\n context: ValidationContext,\n root: XmlElement,\n ncxPath: string,\n registry?: ResourceRegistry,\n ): void {\n const contentElements = root.find('.//ncx:content[@src]', {\n ncx: 'http://www.daisy.org/z3986/2005/ncx/',\n });\n\n const ncxDir = ncxPath.includes('/') ? ncxPath.substring(0, ncxPath.lastIndexOf('/')) : '';\n\n for (const contentElem of contentElements) {\n const srcAttr = (contentElem as XmlElement).attr('src');\n const src = srcAttr?.value;\n if (!src) continue;\n\n const hashIdx = src.indexOf('#');\n const srcBase = hashIdx >= 0 ? src.substring(0, hashIdx) : src;\n const fragment = hashIdx >= 0 ? src.substring(hashIdx + 1) : '';\n\n let fullPath = srcBase;\n if (ncxDir) {\n if (srcBase.startsWith('/')) {\n fullPath = srcBase.slice(1);\n } else {\n const parts = ncxDir.split('/');\n const relParts = srcBase.split('/');\n for (const part of relParts) {\n if (part === '..') {\n parts.pop();\n } else if (part !== '.') {\n parts.push(part);\n }\n }\n fullPath = parts.join('/');\n }\n }\n\n if (\n !context.files.has(fullPath) &&\n !srcBase.startsWith('http://') &&\n !srcBase.startsWith('https://')\n ) {\n const line = contentElem.line;\n pushMessage(context.messages, {\n id: MessageId.NCX_006,\n message: `NCX content src references missing file: ${src}`,\n location: { path: ncxPath, line },\n });\n } else if (fragment && registry) {\n // RSC-012: Check that fragment identifier exists in the target document\n if (!registry.hasID(fullPath, fragment)) {\n const line = contentElem.line;\n pushMessage(context.messages, {\n id: MessageId.RSC_012,\n message: `Fragment identifier is not defined`,\n location: { path: ncxPath, line },\n });\n }\n }\n }\n }\n}\n","import { strFromU8, unzipSync } from 'fflate';\n\nexport interface MimetypeCompressionInfo {\n compressionMethod: number;\n extraFieldLength: number;\n filenameLength: number;\n filename: string;\n}\n\nexport interface InvalidUtf8Filename {\n /** The filename as decoded (may be garbled) */\n filename: string;\n /** Description of the UTF-8 error */\n reason: string;\n}\n\n/**\n * A simple ZIP reader for EPUB files using fflate\n */\nexport class ZipReader {\n private files: Record<string, Uint8Array>;\n private _paths: string[];\n private _originalOrder: string[];\n private _rawData: Uint8Array;\n\n private constructor(\n files: Record<string, Uint8Array>,\n originalOrder: string[],\n rawData: Uint8Array,\n ) {\n this.files = files;\n this._originalOrder = originalOrder;\n this._paths = Object.keys(files).sort();\n this._rawData = rawData;\n }\n\n /**\n * Open a ZIP file from binary data\n */\n static open(data: Uint8Array): ZipReader {\n const raw = unzipSync(data);\n // fflate decodes filenames as Latin-1 when the ZIP UTF-8 flag is not set.\n // EPUB spec requires UTF-8 filenames, so re-decode Latin-1 names as UTF-8.\n const files: Record<string, Uint8Array> = {};\n const originalOrder: string[] = [];\n for (const key of Object.keys(raw)) {\n const corrected = reDecodeFilename(key);\n const entry = raw[key];\n if (entry) files[corrected] = entry;\n originalOrder.push(corrected);\n }\n return new ZipReader(files, originalOrder, data);\n }\n\n /**\n * Get compression info for the first entry (mimetype) from raw ZIP header\n * ZIP Local File Header format:\n * - Offset 0-3: Signature (0x04034b50)\n * - Offset 4-5: Version needed\n * - Offset 6-7: General purpose bit flag\n * - Offset 8-9: Compression method (0=stored, 8=deflated)\n * - Offset 10-13: Last mod time/date\n * - Offset 14-17: CRC-32\n * - Offset 18-21: Compressed size\n * - Offset 22-25: Uncompressed size\n * - Offset 26-27: Filename length\n * - Offset 28-29: Extra field length\n * - Offset 30+: Filename\n */\n getMimetypeCompressionInfo(): MimetypeCompressionInfo | null {\n const data = this._rawData;\n if (data.length < 30) {\n return null;\n }\n\n if (data[0] !== 0x50 || data[1] !== 0x4b || data[2] !== 0x03 || data[3] !== 0x04) {\n return null;\n }\n\n const compressionMethod = (data[8] ?? 0) | ((data[9] ?? 0) << 8);\n const filenameLength = (data[26] ?? 0) | ((data[27] ?? 0) << 8);\n const extraFieldLength = (data[28] ?? 0) | ((data[29] ?? 0) << 8);\n\n if (data.length < 30 + filenameLength) {\n return null;\n }\n\n const filenameBytes = data.slice(30, 30 + filenameLength);\n const filename = strFromU8(filenameBytes);\n\n return {\n compressionMethod,\n extraFieldLength,\n filenameLength,\n filename,\n };\n }\n\n /**\n * Get all file paths in the ZIP (sorted alphabetically)\n */\n get paths(): string[] {\n return this._paths;\n }\n\n /**\n * Get file paths in original ZIP order\n */\n get originalOrder(): string[] {\n return this._originalOrder;\n }\n\n /**\n * Check if a file exists in the ZIP\n */\n has(path: string): boolean {\n return path in this.files;\n }\n\n /**\n * Read a file as text (UTF-8)\n */\n readText(path: string): string | undefined {\n const data = this.files[path];\n if (!data) {\n return undefined;\n }\n return strFromU8(data);\n }\n\n /**\n * Read a file as binary data\n */\n readBinary(path: string): Uint8Array | undefined {\n return this.files[path];\n }\n\n /**\n * Get the size of a file in bytes\n */\n getSize(path: string): number | undefined {\n return this.files[path]?.length;\n }\n\n /**\n * List files in a directory\n */\n listDirectory(dirPath: string): string[] {\n const prefix = dirPath.endsWith('/') ? dirPath : `${dirPath}/`;\n return this._paths.filter((p) => p.startsWith(prefix));\n }\n\n /**\n * Check for filenames that are not valid UTF-8 by parsing raw ZIP data\n *\n * ZIP files store filenames as bytes. The EPUB spec requires filenames to be UTF-8.\n * This method parses the ZIP central directory to find filenames with invalid UTF-8.\n *\n * @returns Array of filenames with invalid UTF-8 encoding\n */\n getInvalidUtf8Filenames(): InvalidUtf8Filename[] {\n const invalid: InvalidUtf8Filename[] = [];\n const data = this._rawData;\n\n // Find the End of Central Directory record\n // Signature: 0x06054b50, located at end of file (may have comment after)\n let eocdOffset = -1;\n for (let i = data.length - 22; i >= 0; i--) {\n if (\n data[i] === 0x50 &&\n data[i + 1] === 0x4b &&\n data[i + 2] === 0x05 &&\n data[i + 3] === 0x06\n ) {\n eocdOffset = i;\n break;\n }\n }\n\n if (eocdOffset === -1) {\n return invalid; // Can't find EOCD, fflate will handle this error\n }\n\n // Get offset to start of central directory\n const cdOffset =\n (data[eocdOffset + 16] ?? 0) |\n ((data[eocdOffset + 17] ?? 0) << 8) |\n ((data[eocdOffset + 18] ?? 0) << 16) |\n ((data[eocdOffset + 19] ?? 0) << 24);\n\n // Parse central directory file headers\n // Signature: 0x02014b50\n let offset = cdOffset;\n while (offset < eocdOffset) {\n if (\n data[offset] !== 0x50 ||\n data[offset + 1] !== 0x4b ||\n data[offset + 2] !== 0x01 ||\n data[offset + 3] !== 0x02\n ) {\n break; // Not a central directory header\n }\n\n const filenameLength = (data[offset + 28] ?? 0) | ((data[offset + 29] ?? 0) << 8);\n const extraLength = (data[offset + 30] ?? 0) | ((data[offset + 31] ?? 0) << 8);\n const commentLength = (data[offset + 32] ?? 0) | ((data[offset + 33] ?? 0) << 8);\n\n // Extract raw filename bytes\n const filenameBytes = data.slice(offset + 46, offset + 46 + filenameLength);\n\n // Check if filename is valid UTF-8\n const utf8Error = this.validateUtf8(filenameBytes);\n if (utf8Error) {\n // Decode filename as best we can for error reporting\n const filename = strFromU8(filenameBytes);\n invalid.push({ filename, reason: utf8Error });\n }\n\n // Move to next central directory entry\n offset += 46 + filenameLength + extraLength + commentLength;\n }\n\n return invalid;\n }\n\n /**\n * Validate that bytes form a valid UTF-8 sequence\n *\n * @returns Error description if invalid, undefined if valid\n */\n private validateUtf8(bytes: Uint8Array): string | undefined {\n let i = 0;\n while (i < bytes.length) {\n const byte = bytes[i] ?? 0;\n\n if (byte <= 0x7f) {\n // ASCII (0xxxxxxx)\n i++;\n } else if ((byte & 0xe0) === 0xc0) {\n // 2-byte sequence (110xxxxx 10xxxxxx)\n if (byte < 0xc2) {\n return `Overlong encoding at byte ${String(i)}`;\n }\n if (i + 1 >= bytes.length || ((bytes[i + 1] ?? 0) & 0xc0) !== 0x80) {\n return `Invalid continuation byte at position ${String(i + 1)}`;\n }\n i += 2;\n } else if ((byte & 0xf0) === 0xe0) {\n // 3-byte sequence (1110xxxx 10xxxxxx 10xxxxxx)\n if (\n i + 2 >= bytes.length ||\n ((bytes[i + 1] ?? 0) & 0xc0) !== 0x80 ||\n ((bytes[i + 2] ?? 0) & 0xc0) !== 0x80\n ) {\n return `Invalid continuation byte in 3-byte sequence at position ${String(i)}`;\n }\n // Check for overlong encoding\n if (byte === 0xe0 && (bytes[i + 1] ?? 0) < 0xa0) {\n return `Overlong 3-byte encoding at byte ${String(i)}`;\n }\n // Check for surrogate pairs (0xD800-0xDFFF)\n if (byte === 0xed && (bytes[i + 1] ?? 0) >= 0xa0) {\n return `UTF-16 surrogate at byte ${String(i)}`;\n }\n i += 3;\n } else if ((byte & 0xf8) === 0xf0) {\n // 4-byte sequence (11110xxx 10xxxxxx 10xxxxxx 10xxxxxx)\n if (\n i + 3 >= bytes.length ||\n ((bytes[i + 1] ?? 0) & 0xc0) !== 0x80 ||\n ((bytes[i + 2] ?? 0) & 0xc0) !== 0x80 ||\n ((bytes[i + 3] ?? 0) & 0xc0) !== 0x80\n ) {\n return `Invalid continuation byte in 4-byte sequence at position ${String(i)}`;\n }\n // Check for overlong encoding\n if (byte === 0xf0 && (bytes[i + 1] ?? 0) < 0x90) {\n return `Overlong 4-byte encoding at byte ${String(i)}`;\n }\n // Check for code points > U+10FFFF\n if (byte > 0xf4 || (byte === 0xf4 && (bytes[i + 1] ?? 0) > 0x8f)) {\n return `Code point exceeds U+10FFFF at byte ${String(i)}`;\n }\n i += 4;\n } else {\n // Invalid start byte (10xxxxxx or 11111xxx)\n return `Invalid UTF-8 start byte 0x${byte.toString(16).toUpperCase()} at position ${String(i)}`;\n }\n }\n return undefined;\n }\n}\n\n/**\n * Re-decode a filename from Latin-1 to UTF-8.\n * fflate decodes filenames as Latin-1 when the ZIP UTF-8 flag is not set,\n * but EPUB requires UTF-8. If ALL non-ASCII chars are in U+0080–U+00FF\n * (Latin-1 range), the bytes may be UTF-8 decoded as Latin-1 — re-decode.\n * If any char is > U+00FF, fflate already decoded as UTF-8 correctly.\n */\nfunction reDecodeFilename(name: string): string {\n let hasNonASCII = false;\n for (let i = 0; i < name.length; i++) {\n const code = name.charCodeAt(i);\n if (code > 0xff) return name; // Already proper Unicode, not Latin-1\n if (code > 0x7f) hasNonASCII = true;\n }\n if (!hasNonASCII) return name;\n\n const bytes = new Uint8Array(name.length);\n for (let i = 0; i < name.length; i++) {\n bytes[i] = name.charCodeAt(i);\n }\n try {\n return new TextDecoder('utf-8', { fatal: true }).decode(bytes);\n } catch {\n return name;\n }\n}\n","import { MessageId, pushMessage } from '../messages/index.js';\nimport type { ValidationContext, ValidationMessage } from '../types.js';\nimport { ZipReader } from './zip.js';\n\n/**\n * Expected MIME type for EPUB files\n */\nconst EPUB_MIMETYPE = 'application/epub+zip';\n\n/**\n * Validates the OCF (Open Container Format) structure of an EPUB\n *\n * This includes:\n * - ZIP structure validation\n * - mimetype file validation\n * - META-INF/container.xml validation\n */\nexport class OCFValidator {\n /**\n * Validate the OCF container\n */\n validate(context: ValidationContext): void {\n // Open the ZIP file\n let zip: ZipReader;\n try {\n zip = ZipReader.open(context.data);\n } catch (error) {\n pushMessage(context.messages, {\n id: MessageId.PKG_001,\n message: `Failed to open EPUB file: ${error instanceof Error ? error.message : 'Unknown error'}`,\n });\n return;\n }\n\n // Store all files in context (NFC-normalize paths for consistent lookups)\n for (const path of zip.paths) {\n const data = zip.readBinary(path);\n if (data) {\n context.files.set(path.normalize('NFC'), data);\n }\n }\n\n // Validate mimetype file\n this.validateMimetype(zip, context.messages);\n\n // Validate container.xml\n this.validateContainer(zip, context);\n\n // Validate filenames\n this.validateFilenames(zip, context.messages);\n\n // Check for duplicate filenames (case folding, Unicode normalization)\n this.validateDuplicateFilenames(zip, context.messages);\n\n // Check for non-UTF8 filenames\n this.validateUtf8Filenames(zip, context.messages);\n\n // Validate empty directories\n this.validateEmptyDirectories(zip, context.messages);\n\n // Parse encryption.xml for obfuscated resources\n this.parseEncryption(zip, context);\n }\n\n /**\n * Validate the mimetype file\n *\n * Requirements:\n * - Must exist\n * - Must be first file in ZIP\n * - Must be uncompressed (compression method = 0)\n * - Must have no extra field\n * - Must contain exactly \"application/epub+zip\"\n */\n private validateMimetype(zip: ZipReader, messages: ValidationMessage[]): void {\n const compressionInfo = zip.getMimetypeCompressionInfo();\n\n if (compressionInfo === null) {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Could not read ZIP header',\n location: { path: 'mimetype' },\n });\n return;\n }\n\n if (compressionInfo.filename !== 'mimetype') {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Mimetype file must be the first file in the ZIP archive',\n location: { path: 'mimetype' },\n });\n }\n\n if (compressionInfo.extraFieldLength !== 0) {\n pushMessage(messages, {\n id: MessageId.PKG_005,\n message: `Mimetype entry must not have an extra field (found ${String(compressionInfo.extraFieldLength)} bytes)`,\n location: { path: 'mimetype' },\n });\n }\n\n if (compressionInfo.compressionMethod !== 0) {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Mimetype file must be uncompressed',\n location: { path: 'mimetype' },\n });\n }\n\n if (!zip.has('mimetype')) {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Missing mimetype file',\n location: { path: 'mimetype' },\n });\n return;\n }\n\n const content = zip.readText('mimetype');\n if (content === undefined) {\n pushMessage(messages, {\n id: MessageId.PKG_006,\n message: 'Could not read mimetype file',\n location: { path: 'mimetype' },\n });\n return;\n }\n\n // PKG-007: mimetype must exactly match \"application/epub+zip\" (no trimming)\n // This matches Java EPUBCheck behavior - any whitespace/newlines are an error\n if (content !== EPUB_MIMETYPE) {\n pushMessage(messages, {\n id: MessageId.PKG_007,\n message: `Mimetype file must contain exactly \"${EPUB_MIMETYPE}\"`,\n location: { path: 'mimetype' },\n });\n }\n }\n\n /**\n * Validate META-INF/container.xml\n */\n private validateContainer(zip: ZipReader, context: ValidationContext): void {\n const containerPath = 'META-INF/container.xml';\n\n if (!zip.has(containerPath)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_002,\n message: 'Required file META-INF/container.xml was not found',\n location: { path: containerPath },\n });\n return;\n }\n\n const content = zip.readText(containerPath);\n if (!content) {\n pushMessage(context.messages, {\n id: MessageId.RSC_002,\n message: 'Could not read META-INF/container.xml',\n location: { path: containerPath },\n });\n return;\n }\n\n // Parse container.xml to extract rootfiles\n // TODO: Use libxml2-wasm for proper XML parsing and validation\n // For now, use a simple regex extraction\n const rootfileMatches = content.matchAll(\n /<rootfile[^>]+full-path=[\"']([^\"']+)[\"'][^>]*media-type=[\"']([^\"']+)[\"'][^>]*\\/?>/g,\n );\n\n for (const match of rootfileMatches) {\n const [, path, mediaType] = match;\n if (path && mediaType) {\n context.rootfiles.push({ path, mediaType });\n\n // Set the first OPF as the main package document\n if (!context.opfPath && mediaType === 'application/oebps-package+xml') {\n context.opfPath = path;\n }\n }\n }\n\n // Also try alternative attribute order\n const altMatches = content.matchAll(\n /<rootfile[^>]+media-type=[\"']([^\"']+)[\"'][^>]*full-path=[\"']([^\"']+)[\"'][^>]*\\/?>/g,\n );\n\n for (const match of altMatches) {\n const [, mediaType, path] = match;\n if (path && mediaType) {\n // Check if already added\n const exists = context.rootfiles.some((r) => r.path === path);\n if (!exists) {\n context.rootfiles.push({ path, mediaType });\n if (!context.opfPath && mediaType === 'application/oebps-package+xml') {\n context.opfPath = path;\n }\n }\n }\n }\n\n if (context.rootfiles.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.PKG_004,\n message: 'No rootfile found in container.xml',\n location: { path: containerPath },\n });\n }\n\n // Verify rootfile paths exist\n for (const rootfile of context.rootfiles) {\n if (!zip.has(rootfile.path)) {\n pushMessage(context.messages, {\n id: MessageId.PKG_010,\n message: `Rootfile \"${rootfile.path}\" not found in EPUB`,\n location: { path: containerPath },\n });\n }\n }\n }\n\n /**\n * Validate filenames for invalid characters\n *\n * Per EPUB 3.3 spec and Java EPUBCheck:\n * - PKG-009: Disallowed characters (ASCII special chars, control chars, private use, etc.)\n * - PKG-010: Whitespace characters (warning)\n * - PKG-011: Filename ends with period\n * - PKG-012: Non-ASCII characters (usage info)\n */\n private validateFilenames(zip: ZipReader, messages: ValidationMessage[]): void {\n // Disallowed ASCII characters: \" * : < > ? \\ |\n const DISALLOWED_ASCII = new Set([0x22, 0x2a, 0x3a, 0x3c, 0x3e, 0x3f, 0x5c, 0x7c]);\n\n for (const path of zip.paths) {\n if (path === 'mimetype') continue;\n\n // Skip directory entries (paths ending with /)\n if (path.endsWith('/')) continue;\n\n const filename = path.includes('/') ? (path.split('/').pop() ?? path) : path;\n\n if (filename === '' || filename === '.' || filename === '..') {\n pushMessage(messages, {\n id: MessageId.PKG_009,\n message: `Invalid filename: \"${path}\"`,\n location: { path },\n });\n continue;\n }\n\n const disallowed: string[] = [];\n let hasSpaces = false;\n let hasNonASCII = false;\n\n for (let i = 0; i < filename.length; i++) {\n const code = filename.charCodeAt(i);\n\n // Check for disallowed ASCII characters\n if (DISALLOWED_ASCII.has(code)) {\n const char = filename[i] ?? '';\n disallowed.push(`U+${code.toString(16).toUpperCase().padStart(4, '0')} (${char})`);\n }\n // Check for control characters (C0: 0x00-0x1F, DEL: 0x7F, C1: 0x80-0x9F)\n else if (code <= 0x1f || code === 0x7f || (code >= 0x80 && code <= 0x9f)) {\n disallowed.push(`U+${code.toString(16).toUpperCase().padStart(4, '0')} (CONTROL)`);\n }\n // Check for private use area (0xE000-0xF8FF)\n else if (code >= 0xe000 && code <= 0xf8ff) {\n disallowed.push(`U+${code.toString(16).toUpperCase().padStart(4, '0')} (PRIVATE USE)`);\n }\n // Check for specials block (0xFFF0-0xFFFF)\n else if (code >= 0xfff0 && code <= 0xffff) {\n disallowed.push(`U+${code.toString(16).toUpperCase().padStart(4, '0')} (SPECIALS)`);\n }\n\n // Check for non-ASCII (PKG-012 usage)\n if (code > 0x7f) {\n hasNonASCII = true;\n }\n\n // Check for whitespace\n if (code === 0x20 || code === 0x09 || code === 0x0a || code === 0x0d) {\n hasSpaces = true;\n }\n }\n\n // Check if filename ends with period\n if (filename.endsWith('.')) {\n pushMessage(messages, {\n id: MessageId.PKG_011,\n message: `Filename must not end with a period: \"${path}\"`,\n location: { path },\n });\n }\n\n // Report disallowed characters (PKG-009)\n if (disallowed.length > 0) {\n pushMessage(messages, {\n id: MessageId.PKG_009,\n message: `Filename \"${path}\" contains disallowed characters: ${disallowed.join(', ')}`,\n location: { path },\n });\n }\n\n // Report whitespace (PKG-010 - warning)\n if (hasSpaces) {\n pushMessage(messages, {\n id: MessageId.PKG_010,\n message: `Filename \"${path}\" contains spaces`,\n location: { path },\n severityOverride: 'warning',\n });\n }\n\n // Report non-ASCII characters (PKG-012 - usage)\n if (hasNonASCII && disallowed.length === 0) {\n pushMessage(messages, {\n id: MessageId.PKG_012,\n message: `Filename \"${path}\" contains non-ASCII characters`,\n location: { path },\n });\n }\n }\n }\n\n /**\n * Check for duplicate filenames after Unicode normalization and case folding\n *\n * Per EPUB spec, filenames must be unique after applying:\n * - Unicode Canonical Case Fold Normalization (NFD + case folding)\n *\n * OPF-060: Duplicate filename after normalization\n */\n private validateDuplicateFilenames(zip: ZipReader, messages: ValidationMessage[]): void {\n const seenPaths = new Set<string>(); // exact paths\n const normalizedPaths = new Map<string, string>(); // normalized -> original\n\n for (const path of zip.paths) {\n // Skip directory entries\n if (path.endsWith('/')) continue;\n\n // First check for exact duplicate ZIP entries\n if (seenPaths.has(path)) {\n pushMessage(messages, {\n id: MessageId.OPF_060,\n message: `Duplicate ZIP entry: \"${path}\"`,\n location: { path },\n });\n continue;\n }\n seenPaths.add(path);\n\n // Apply Unicode Canonical Case Fold Normalization:\n // 1. NFD (Canonical Decomposition)\n // 2. Case folding (using full Unicode case folding)\n const normalized = this.canonicalCaseFold(path);\n\n const existing = normalizedPaths.get(normalized);\n if (existing !== undefined) {\n pushMessage(messages, {\n id: MessageId.OPF_060,\n message: `Duplicate filename after Unicode normalization: \"${path}\" conflicts with \"${existing}\"`,\n location: { path },\n });\n } else {\n normalizedPaths.set(normalized, path);\n }\n }\n }\n\n /**\n * Apply Unicode Canonical Case Fold Normalization\n *\n * This applies:\n * 1. NFD (Canonical Decomposition) - decomposes combined characters\n * 2. Full Unicode case folding\n *\n * Based on Unicode case folding rules for filename comparison.\n */\n private canonicalCaseFold(str: string): string {\n // NFD normalization first\n let result = str.normalize('NFD');\n\n // Apply full Unicode case folding\n // This handles special cases like ß -> ss, fi -> fi, etc.\n result = this.unicodeCaseFold(result);\n\n return result;\n }\n\n /**\n * Perform Unicode full case folding\n *\n * Handles special Unicode case folding rules beyond simple toLowerCase:\n * - ß (U+00DF) -> ss\n * - ẞ (U+1E9E) -> ss (capital sharp s)\n * - fi (U+FB01) -> fi\n * - fl (U+FB02) -> fl\n * - ff (U+FB00) -> ff\n * - ffi (U+FB03) -> ffi\n * - ffl (U+FB04) -> ffl\n * - ſt (U+FB05) -> st\n * - st (U+FB06) -> st\n * And other Unicode case folding rules\n */\n private unicodeCaseFold(str: string): string {\n // Common full case folding mappings that toLowerCase doesn't handle\n const caseFoldMap: Record<string, string> = {\n '\\u00DF': 'ss', // ß -> ss\n '\\u1E9E': 'ss', // ẞ -> ss (capital sharp s)\n '\\uFB00': 'ff', // ff -> ff\n '\\uFB01': 'fi', // fi -> fi\n '\\uFB02': 'fl', // fl -> fl\n '\\uFB03': 'ffi', // ffi -> ffi\n '\\uFB04': 'ffl', // ffl -> ffl\n '\\uFB05': 'st', // ſt -> st\n '\\uFB06': 'st', // st -> st\n '\\u0130': 'i\\u0307', // İ -> i + combining dot above\n };\n\n let result = '';\n for (const char of str) {\n const folded = caseFoldMap[char];\n if (folded !== undefined) {\n result += folded;\n } else {\n result += char.toLowerCase();\n }\n }\n return result;\n }\n\n /**\n * Validate that filenames are encoded as UTF-8\n *\n * PKG-027: Filenames in EPUB ZIP archives must be UTF-8 encoded\n */\n private validateUtf8Filenames(zip: ZipReader, messages: ValidationMessage[]): void {\n const invalidFilenames = zip.getInvalidUtf8Filenames();\n for (const { filename, reason } of invalidFilenames) {\n pushMessage(messages, {\n id: MessageId.PKG_027,\n message: `Filename is not valid UTF-8: \"${filename}\" (${reason})`,\n location: { path: filename },\n });\n }\n }\n\n /**\n * Parse encryption.xml to extract obfuscated resource paths.\n * Stores IDPF font obfuscation URIs in context for PKG-026 validation.\n */\n private parseEncryption(zip: ZipReader, context: ValidationContext): void {\n const encryptionPath = 'META-INF/encryption.xml';\n if (!zip.has(encryptionPath)) return;\n\n const content = zip.readText(encryptionPath);\n if (!content) return;\n\n const IDPF_OBFUSCATION = 'http://www.idpf.org/2008/embedding';\n const obfuscated = new Set<string>();\n\n // Match EncryptedData blocks (with or without namespace prefix)\n const blocks = content.matchAll(\n /<(?:\\w+:)?EncryptedData[\\s>][\\s\\S]*?<\\/(?:\\w+:)?EncryptedData>/g,\n );\n for (const block of blocks) {\n const xml = block[0];\n const algorithmMatch = /Algorithm=[\"']([^\"']+)[\"']/.exec(xml);\n const uriMatch = /<(?:\\w+:)?CipherReference[^>]+URI=[\"']([^\"']+)[\"']/.exec(xml);\n if (algorithmMatch?.[1] === IDPF_OBFUSCATION && uriMatch?.[1]) {\n obfuscated.add(uriMatch[1]);\n }\n }\n\n if (obfuscated.size > 0) {\n context.obfuscatedResources = obfuscated;\n }\n }\n\n /**\n * Validate empty directories\n */\n private validateEmptyDirectories(zip: ZipReader, messages: ValidationMessage[]): void {\n const directories = new Set<string>();\n\n for (const path of zip.paths) {\n const parts = path.split('/');\n for (let i = 1; i < parts.length; i++) {\n const dir = parts.slice(0, i).join('/') + '/';\n directories.add(dir);\n }\n }\n\n for (const dir of directories) {\n if (dir !== 'META-INF/' && dir !== 'OEBPS/' && dir !== 'OPS/') {\n const filesInDir = zip.paths.filter((p) => p.startsWith(dir) && p !== dir);\n if (filesInDir.length === 0) {\n pushMessage(messages, {\n id: MessageId.PKG_014,\n message: `Empty directory found: ${dir}`,\n location: { path: dir },\n });\n }\n }\n }\n }\n}\n","import type { EPUBVersion } from '../types.js';\nimport type {\n Collection,\n DCElement,\n GuideReference,\n LinkElement,\n ManifestItem,\n MetaElement,\n PackageDocument,\n SpineItemRef,\n} from './types.js';\n\n/**\n * Parse an OPF package document from XML string\n *\n * This is a simple parser that extracts the essential information.\n * For full schema validation, use libxml2-wasm with RelaxNG/Schematron.\n */\nexport function parseOPF(xml: string): PackageDocument {\n // Extract package element attributes\n const packageRegex =\n /<package[^>]*\\sversion=[\"']([^\"']+)[\"'][^>]*(?:\\sunique-identifier=[\"']([^\"']+)[\"'])?[^>]*>/;\n const packageRegexAlt =\n /<package[^>]*\\sunique-identifier=[\"']([^\"']+)[\"'][^>]*(?:\\sversion=[\"']([^\"']+)[\"'])?[^>]*>/;\n const packageMatch = packageRegex.exec(xml);\n const packageMatchAlt = packageRegexAlt.exec(xml);\n\n let version: EPUBVersion = '3.0';\n let uniqueIdentifier = '';\n\n if (packageMatch?.[1]) {\n version = normalizeVersion(packageMatch[1]);\n uniqueIdentifier = packageMatch[2] ?? '';\n }\n if (!uniqueIdentifier && packageMatchAlt?.[1]) {\n uniqueIdentifier = packageMatchAlt[1];\n if (!packageMatch) {\n version = normalizeVersion(packageMatchAlt[2] ?? '3.0');\n }\n }\n\n // Extract prefix declarations (EPUB 3)\n const prefixes = parsePrefixes(xml);\n\n // Extract dir attribute\n const dirRegex = /<package[^>]*\\sdir=[\"']([^\"']+)[\"']/;\n const dirMatch = dirRegex.exec(xml);\n\n // Parse metadata\n const metadataSection = extractSection(xml, 'metadata');\n const dcElements = parseDCElements(metadataSection);\n const metaElements = parseMetaElements(metadataSection);\n const linkElements = parseLinkElements(metadataSection);\n\n // Parse manifest\n const manifestSection = extractSection(xml, 'manifest');\n const manifest = parseManifestItems(manifestSection);\n\n // Parse spine\n const spineSection = extractSection(xml, 'spine');\n const spineAttrs = extractElementAttributes(xml, 'spine');\n const spineResult = parseSpine(spineSection, spineAttrs);\n\n // Parse guide (EPUB 2)\n const guideSection = extractSection(xml, 'guide');\n const guide = parseGuide(guideSection);\n\n // Parse collections (EPUB 3)\n const collections = parseCollections(xml);\n\n // Detect bindings element (deprecated in EPUB 3.3)\n const hasBindings = /<bindings[\\s>]/.test(xml);\n\n // Extract xml:lang attributes from OPF elements\n const xmlLangs: string[] = [];\n const xmlLangRegex = /xml:lang=[\"']([^\"']*?)[\"']/g;\n let langMatch;\n while ((langMatch = xmlLangRegex.exec(xml)) !== null) {\n if (langMatch[1] !== undefined) {\n xmlLangs.push(langMatch[1]);\n }\n }\n\n // Build result with proper optional property handling\n const result: PackageDocument = {\n version,\n uniqueIdentifier,\n dcElements,\n metaElements,\n linkElements,\n manifest,\n spine: spineResult.spine,\n guide,\n collections,\n };\n\n // Only add optional properties if they have values\n if (Object.keys(prefixes).length > 0) {\n result.prefixes = prefixes;\n }\n if (dirMatch?.[1]) {\n result.dir = dirMatch[1];\n }\n if (spineResult.toc) {\n result.spineToc = spineResult.toc;\n }\n if (spineResult.pageProgressionDirection) {\n result.pageProgressionDirection = spineResult.pageProgressionDirection;\n }\n if (hasBindings) {\n result.hasBindings = true;\n }\n if (xmlLangs.length > 0) {\n result.xmlLangs = xmlLangs;\n }\n\n return result;\n}\n\n/**\n * Normalize EPUB version string to supported version\n */\nfunction normalizeVersion(versionStr: string): EPUBVersion {\n const v = versionStr.trim();\n if (v === '2.0' || v === '2') return '2.0';\n if (v === '3.0' || v === '3') return '3.0';\n if (v === '3.1') return '3.1';\n if (v === '3.2') return '3.2';\n if (v === '3.3') return '3.3';\n // Default to 3.0 for unknown versions\n return '3.0';\n}\n\n/**\n * Parse prefix declarations from package element\n */\nfunction parsePrefixes(xml: string): Record<string, string> {\n const prefixes: Record<string, string> = {};\n const prefixRegex = /<package[^>]*\\sprefix=[\"']([^\"']+)[\"']/;\n const prefixMatch = prefixRegex.exec(xml);\n if (prefixMatch?.[1]) {\n const prefixStr = prefixMatch[1];\n // Format: \"prefix: uri prefix2: uri2\"\n const parts = prefixStr.split(/\\s+/);\n for (let i = 0; i < parts.length - 1; i += 2) {\n const prefix = parts[i]?.replace(/:$/, '');\n const uri = parts[i + 1];\n if (prefix && uri) {\n prefixes[prefix] = uri;\n }\n }\n }\n return prefixes;\n}\n\n/**\n * Strip XML comments from a string\n */\nfunction stripXmlComments(xml: string): string {\n return xml.replace(/<!--[\\s\\S]*?-->/g, '');\n}\n\n/**\n * Extract a section from XML by tag name (returns content between tags)\n */\nfunction extractSection(xml: string, tagName: string): string {\n // Handle both prefixed and non-prefixed tags\n const regex = new RegExp(`<(?:opf:)?${tagName}[^>]*>([\\\\s\\\\S]*?)</(?:opf:)?${tagName}>`, 'i');\n const match = regex.exec(xml);\n // Strip XML comments to avoid parsing commented-out elements\n return stripXmlComments(match?.[1] ?? '');\n}\n\n/**\n * Extract an element's opening tag attributes\n */\nfunction extractElementAttributes(xml: string, tagName: string): Record<string, string> {\n // Match the opening tag with its attributes\n const regex = new RegExp(`<(?:opf:)?${tagName}([^>]*)>`, 'i');\n const match = regex.exec(xml);\n if (match?.[1]) {\n return parseAttributes(match[1]);\n }\n return {};\n}\n\n/**\n * Parse Dublin Core metadata elements\n */\nfunction parseDCElements(metadataXml: string): DCElement[] {\n const elements: DCElement[] = [];\n\n // Match dc: prefixed elements\n const dcRegex = /<dc:(\\w+)([^>]*)>([^<]*)<\\/dc:\\1>/g;\n let match;\n while ((match = dcRegex.exec(metadataXml)) !== null) {\n const name = match[1];\n const attrsStr = match[2] ?? '';\n const value = match[3] ?? '';\n\n if (!name) continue;\n\n const attrs = parseAttributes(attrsStr);\n const id = attrs.id;\n delete attrs.id;\n\n const element: DCElement = {\n name,\n value: decodeXmlEntities(value.trim()),\n };\n\n if (id) {\n element.id = id.trim();\n }\n if (Object.keys(attrs).length > 0) {\n element.attributes = attrs;\n }\n\n elements.push(element);\n }\n\n return elements;\n}\n\n/**\n * Parse EPUB 3 meta elements\n */\nfunction parseMetaElements(metadataXml: string): MetaElement[] {\n const elements: MetaElement[] = [];\n\n // Match <meta property=\"...\">value</meta> (EPUB 3)\n const metaRegex = /<meta([^>]*property=[\"'][^\"']+[\"'][^>]*)>([^<]*)<\\/meta>/g;\n let match;\n while ((match = metaRegex.exec(metadataXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const value = match[2] ?? '';\n const attrs = parseAttributes(attrsStr);\n const property = attrs.property;\n\n if (property) {\n const element: MetaElement = {\n property,\n value: decodeXmlEntities(value.trim()),\n };\n\n if (attrs.refines) {\n element.refines = attrs.refines;\n }\n if (attrs.scheme) {\n element.scheme = attrs.scheme;\n }\n if (attrs.id) {\n element.id = attrs.id.trim();\n }\n\n elements.push(element);\n }\n }\n\n return elements;\n}\n\n/**\n * Parse EPUB 3 link elements\n */\nfunction parseLinkElements(metadataXml: string): LinkElement[] {\n const elements: LinkElement[] = [];\n\n // Match <link rel=\"...\" href=\"...\" />\n const linkRegex = /<link([^>]+)\\/?\\s*>/g;\n let match;\n while ((match = linkRegex.exec(metadataXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const attrs = parseAttributes(attrsStr);\n const rel = attrs.rel;\n const href = attrs.href;\n\n if (rel && href) {\n const element: LinkElement = {\n rel,\n href,\n };\n\n if (attrs['media-type']) {\n element.mediaType = attrs['media-type'];\n }\n if (attrs.refines) {\n element.refines = attrs.refines;\n }\n if (attrs.properties) {\n element.properties = attrs.properties.split(/\\s+/);\n }\n if (attrs.id) {\n element.id = attrs.id.trim();\n }\n if (attrs.hreflang !== undefined) {\n element.hreflang = attrs.hreflang;\n }\n\n elements.push(element);\n }\n }\n\n return elements;\n}\n\n/**\n * Parse manifest items\n */\nfunction parseManifestItems(manifestXml: string): ManifestItem[] {\n const items: ManifestItem[] = [];\n\n // Match <item ... />\n const itemRegex = /<item([^>]+)\\/?\\s*>/g;\n let match;\n while ((match = itemRegex.exec(manifestXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const attrs = parseAttributes(attrsStr);\n const id = attrs.id?.trim();\n const href = attrs.href;\n const mediaType = attrs['media-type'];\n\n if (id && href && mediaType) {\n const item: ManifestItem = {\n id,\n href: decodeXmlEntities(href),\n mediaType,\n };\n\n if (attrs.fallback) {\n item.fallback = attrs.fallback;\n }\n if (attrs['media-overlay']) {\n item.mediaOverlay = attrs['media-overlay'];\n }\n if (attrs.properties) {\n item.properties = attrs.properties.split(/\\s+/);\n }\n\n items.push(item);\n }\n }\n\n return items;\n}\n\n/**\n * Parse spine element and itemrefs\n */\nfunction parseSpine(\n spineXml: string,\n spineAttrs: Record<string, string>,\n): {\n spine: SpineItemRef[];\n toc: string | null;\n pageProgressionDirection: 'ltr' | 'rtl' | 'default' | null;\n} {\n const spine: SpineItemRef[] = [];\n\n // Use the passed-in attributes from the spine element\n const toc = spineAttrs.toc ?? null;\n const ppdRaw = spineAttrs['page-progression-direction'];\n const ppd: 'ltr' | 'rtl' | 'default' | null =\n ppdRaw === 'ltr' || ppdRaw === 'rtl' || ppdRaw === 'default' ? ppdRaw : null;\n\n // Match <itemref ... />\n const itemrefRegex = /<itemref([^>]+)\\/?\\s*>/g;\n let match;\n while ((match = itemrefRegex.exec(spineXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const attrs = parseAttributes(attrsStr);\n const idref = attrs.idref?.trim();\n\n if (idref) {\n const itemref: SpineItemRef = {\n idref,\n linear: attrs.linear !== 'no',\n };\n\n if (attrs.id) {\n itemref.id = attrs.id.trim();\n }\n\n if (attrs.properties) {\n itemref.properties = attrs.properties.split(/\\s+/);\n }\n\n spine.push(itemref);\n }\n }\n\n return { spine, toc, pageProgressionDirection: ppd };\n}\n\n/**\n * Parse guide references (EPUB 2)\n */\nfunction parseGuide(guideXml: string): GuideReference[] {\n const references: GuideReference[] = [];\n\n // Match <reference ... />\n const refRegex = /<reference([^>]+)\\/?\\s*>/g;\n let match;\n while ((match = refRegex.exec(guideXml)) !== null) {\n const attrsStr = match[1] ?? '';\n const attrs = parseAttributes(attrsStr);\n const type = attrs.type;\n const href = attrs.href;\n\n if (type && href) {\n const ref: GuideReference = {\n type,\n href: decodeXmlEntities(href),\n };\n\n if (attrs.title) {\n ref.title = attrs.title;\n }\n\n references.push(ref);\n }\n }\n\n return references;\n}\n\n/**\n * Parse XML attributes from a string\n */\nfunction parseAttributes(attrsStr: string): Record<string, string> {\n const attrs: Record<string, string> = {};\n const attrRegex = /(\\S+)=[\"']([^\"']*)[\"']/g;\n let match;\n while ((match = attrRegex.exec(attrsStr)) !== null) {\n const name = match[1];\n const value = match[2];\n if (name !== undefined && value !== undefined) {\n attrs[name] = value;\n // Also store by local name for convenience\n const colonIdx = name.indexOf(':');\n if (colonIdx >= 0) {\n const localName = name.slice(colonIdx + 1);\n if (!(localName in attrs)) {\n attrs[localName] = value;\n }\n }\n }\n }\n return attrs;\n}\n\n/**\n * Decode common XML entities\n */\nfunction decodeXmlEntities(str: string): string {\n return str\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n .replace(/'/g, \"'\")\n .replace(/"/g, '\"');\n}\n\nfunction parseCollections(xml: string): Collection[] {\n const collections: Collection[] = [];\n const collectionRegex = /<collection[^>]*\\srole=[\"']([^\"']+)[\"'][^>]*>/g;\n let collectionMatch: RegExpExecArray | null;\n\n while ((collectionMatch = collectionRegex.exec(xml)) !== null) {\n const role = collectionMatch[1];\n if (!role) continue;\n\n const collectionStart = collectionMatch.index;\n const collectionStartTag = collectionMatch[0];\n\n const idMatch = /id=[\"']([^\"']+)[\"']/.exec(collectionStartTag);\n const id = idMatch?.[1];\n\n const nameMatch = /name=[\"']([^\"']+)[\"']/.exec(collectionStartTag);\n const name = nameMatch?.[1];\n\n const links: string[] = [];\n\n const linkRegex = /<link[^>]*\\shref=[\"']([^\"']+)[\"'][^>]*\\/?>/g;\n const closingTag = `</collection>`;\n const closingIndex = xml.indexOf(closingTag, collectionStart);\n const collectionEnd = closingIndex >= 0 ? closingIndex + closingTag.length : xml.length;\n\n const collectionXml = xml.slice(collectionStart, collectionEnd);\n\n let linkMatch: RegExpExecArray | null;\n while ((linkMatch = linkRegex.exec(collectionXml)) !== null) {\n const href = linkMatch[1];\n if (href) {\n links.push(decodeXmlEntities(href));\n }\n }\n\n const collection: Collection = {\n role,\n links,\n };\n if (id) collection.id = id;\n if (name) collection.name = name;\n\n collections.push(collection);\n }\n\n return collections;\n}\n","import { MessageId, pushMessage } from '../messages/index.js';\nimport { checkUrlLeaking } from '../references/url.js';\nimport type { ValidationContext } from '../types.js';\nimport { parseOPF } from './parser.js';\nimport type { ManifestItem, PackageDocument } from './types.js';\nimport { ITEM_PROPERTIES, LINK_PROPERTIES, SPINE_PROPERTIES } from './types.js';\n\nconst VALID_VERSIONS = new Set(['2.0', '3.0', '3.1', '3.2', '3.3']);\n\nconst DEPRECATED_MEDIA_TYPES = new Set([\n 'text/x-oeb1-document',\n 'text/x-oeb1-css',\n 'application/x-oeb1-package',\n 'text/x-oeb1-html',\n]);\n\nconst VALID_RELATOR_CODES = new Set([\n 'abr',\n 'acp',\n 'act',\n 'adi',\n 'adp',\n 'aft',\n 'anl',\n 'anm',\n 'ann',\n 'ant',\n 'ape',\n 'apl',\n 'app',\n 'aqt',\n 'arc',\n 'ard',\n 'arr',\n 'art',\n 'asg',\n 'asn',\n 'ato',\n 'att',\n 'auc',\n 'aud',\n 'aui',\n 'aus',\n 'aut',\n 'bdd',\n 'bjd',\n 'bkd',\n 'bkp',\n 'blw',\n 'bnd',\n 'bpd',\n 'brd',\n 'brl',\n 'bsl',\n 'cas',\n 'ccp',\n 'chr',\n 'clb',\n 'cli',\n 'cll',\n 'clr',\n 'clt',\n 'cmm',\n 'cmp',\n 'cmt',\n 'cnd',\n 'cng',\n 'cns',\n 'coe',\n 'col',\n 'com',\n 'con',\n 'cor',\n 'cos',\n 'cot',\n 'cou',\n 'cov',\n 'cpc',\n 'cpe',\n 'cph',\n 'cpl',\n 'cpt',\n 'cre',\n 'crp',\n 'crr',\n 'crt',\n 'csl',\n 'csp',\n 'cst',\n 'ctb',\n 'cte',\n 'ctg',\n 'ctr',\n 'cts',\n 'ctt',\n 'cur',\n 'cwt',\n 'dbp',\n 'dfd',\n 'dfe',\n 'dft',\n 'dgc',\n 'dgg',\n 'dgs',\n 'dis',\n 'dln',\n 'dnc',\n 'dnr',\n 'dpc',\n 'dpt',\n 'drm',\n 'drt',\n 'dsr',\n 'dst',\n 'dtc',\n 'dte',\n 'dtm',\n 'dto',\n 'dub',\n 'edc',\n 'edm',\n 'edt',\n 'egr',\n 'elg',\n 'elt',\n 'eng',\n 'enj',\n 'etr',\n 'evp',\n 'exp',\n 'fac',\n 'fds',\n 'fld',\n 'flm',\n 'fmd',\n 'fmk',\n 'fmo',\n 'fmp',\n 'fnd',\n 'fpy',\n 'frg',\n 'gis',\n 'grt',\n 'his',\n 'hnr',\n 'hst',\n 'ill',\n 'ilu',\n 'ins',\n 'inv',\n 'isb',\n 'itr',\n 'ive',\n 'ivr',\n 'jud',\n 'jug',\n 'lbr',\n 'lbt',\n 'ldr',\n 'led',\n 'lee',\n 'lel',\n 'len',\n 'let',\n 'lgd',\n 'lie',\n 'lil',\n 'lit',\n 'lsa',\n 'lse',\n 'lso',\n 'ltg',\n 'lyr',\n 'mcp',\n 'mdc',\n 'med',\n 'mfp',\n 'mfr',\n 'mod',\n 'mon',\n 'mrb',\n 'mrk',\n 'msd',\n 'mte',\n 'mtk',\n 'mus',\n 'nrt',\n 'opn',\n 'org',\n 'orm',\n 'osp',\n 'oth',\n 'own',\n 'pad',\n 'pan',\n 'pat',\n 'pbd',\n 'pbl',\n 'pdr',\n 'pfr',\n 'pht',\n 'plt',\n 'pma',\n 'pmn',\n 'pop',\n 'ppm',\n 'ppt',\n 'pra',\n 'prc',\n 'prd',\n 'pre',\n 'prf',\n 'prg',\n 'prm',\n 'prn',\n 'pro',\n 'prp',\n 'prs',\n 'prt',\n 'prv',\n 'pta',\n 'pte',\n 'ptf',\n 'pth',\n 'ptt',\n 'pup',\n 'rbr',\n 'rcd',\n 'rce',\n 'rcp',\n 'rdd',\n 'red',\n 'ren',\n 'res',\n 'rev',\n 'rpc',\n 'rps',\n 'rpt',\n 'rpy',\n 'rse',\n 'rsg',\n 'rsp',\n 'rsr',\n 'rst',\n 'rth',\n 'rtm',\n 'sad',\n 'sce',\n 'scl',\n 'scr',\n 'sds',\n 'sec',\n 'sgd',\n 'sgn',\n 'sht',\n 'sll',\n 'sng',\n 'spk',\n 'spn',\n 'spy',\n 'srv',\n 'std',\n 'stg',\n 'stl',\n 'stm',\n 'stn',\n 'str',\n 'tcd',\n 'tch',\n 'ths',\n 'tld',\n 'tlp',\n 'trc',\n 'trl',\n 'tyd',\n 'tyg',\n 'uvp',\n 'vac',\n 'vdg',\n 'voc',\n 'wac',\n 'wal',\n 'wam',\n 'wat',\n 'wdc',\n 'wde',\n 'win',\n 'wit',\n 'wpr',\n 'wst',\n]);\n\nconst DEPRECATED_LINK_REL = new Set([\n 'marc21xml-record',\n 'mods-record',\n 'onix-record',\n 'xmp-record',\n 'xml-signature',\n]);\n\nconst GRANDFATHERED_LANG_TAGS = new Set([\n 'en-GB-oed',\n 'i-ami',\n 'i-bnn',\n 'i-default',\n 'i-enochian',\n 'i-hak',\n 'i-klingon',\n 'i-lux',\n 'i-mingo',\n 'i-navajo',\n 'i-pwn',\n 'i-tao',\n 'i-tay',\n 'i-tsu',\n 'sgn-BE-FR',\n 'sgn-BE-NL',\n 'sgn-CH-DE',\n 'art-lojban',\n 'cel-gaulish',\n 'no-bok',\n 'no-nyn',\n 'zh-guoyu',\n 'zh-hakka',\n 'zh-min',\n 'zh-min-nan',\n 'zh-xiang',\n]);\n\n/**\n * Validates the OPF (Open Packaging Format) package document\n *\n * This includes:\n * - Package metadata validation\n * - Manifest item validation\n * - Spine validation\n * - Fallback chain validation\n * - Guide validation (EPUB 2)\n */\nexport class OPFValidator {\n private packageDoc: PackageDocument | null = null;\n private manifestById = new Map<string, ManifestItem>();\n private manifestByHref = new Map<string, ManifestItem>();\n\n /**\n * Validate the OPF package document\n */\n validate(context: ValidationContext): void {\n const opfPath = context.opfPath;\n if (!opfPath) {\n pushMessage(context.messages, {\n id: MessageId.OPF_002,\n message: 'No package document (OPF) path found in container.xml',\n });\n return;\n }\n\n // Read OPF content\n const opfData = context.files.get(opfPath);\n if (!opfData) {\n pushMessage(context.messages, {\n id: MessageId.OPF_002,\n message: `Package document not found: ${opfPath}`,\n location: { path: opfPath },\n });\n return;\n }\n\n const opfXml = new TextDecoder().decode(opfData);\n\n // Parse OPF\n try {\n this.packageDoc = parseOPF(opfXml);\n } catch (error) {\n pushMessage(context.messages, {\n id: MessageId.OPF_002,\n message: `Failed to parse package document: ${error instanceof Error ? error.message : 'Unknown error'}`,\n location: { path: opfPath },\n });\n return;\n }\n\n // Update context with detected version\n context.version = this.packageDoc.version;\n\n // Build lookup maps\n this.buildManifestMaps();\n\n // Store package doc in context for other validators\n context.packageDocument = this.packageDoc;\n\n // Run validations\n this.validatePackageAttributes(context, opfPath);\n this.validateMetadata(context, opfPath);\n this.validateLinkElements(context, opfPath);\n this.validateManifest(context, opfPath);\n this.validateSpine(context, opfPath);\n this.validateFallbackChains(context, opfPath);\n\n if (this.packageDoc.version === '2.0') {\n this.validateGuide(context, opfPath);\n }\n\n if (this.packageDoc.version.startsWith('3.')) {\n this.validateCollections(context, opfPath);\n\n // RSC-017: bindings element is deprecated\n if (this.packageDoc.hasBindings) {\n pushMessage(context.messages, {\n id: MessageId.RSC_017,\n message: 'Use of the bindings element is deprecated',\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-092: Validate xml:lang attributes in OPF\n if (this.packageDoc.xmlLangs) {\n for (const lang of this.packageDoc.xmlLangs) {\n if (lang === '') continue;\n if (lang !== lang.trim() || !isValidLanguageTag(lang)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_092,\n message: `Language tag \"${lang}\" is not well-formed`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n\n /**\n * Build lookup maps for manifest items\n */\n private buildManifestMaps(): void {\n if (!this.packageDoc) return;\n\n for (const item of this.packageDoc.manifest) {\n this.manifestById.set(item.id, item);\n\n // Check for duplicates\n if (this.manifestByHref.has(item.href)) {\n // Will be reported in validateManifest\n }\n this.manifestByHref.set(item.href, item);\n }\n }\n\n /**\n * Validate package element attributes\n */\n private validatePackageAttributes(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n if (!VALID_VERSIONS.has(this.packageDoc.version)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_001,\n message: `Invalid package version \"${this.packageDoc.version}\"; must be one of: ${Array.from(VALID_VERSIONS).join(', ')}`,\n location: { path: opfPath },\n });\n }\n\n // Check unique-identifier\n if (!this.packageDoc.uniqueIdentifier) {\n pushMessage(context.messages, {\n id: MessageId.OPF_048,\n message: 'Package element is missing required unique-identifier attribute',\n location: { path: opfPath },\n });\n } else {\n // Verify the referenced identifier exists and points to dc:identifier\n const refId = this.packageDoc.uniqueIdentifier;\n const matchingDc = this.packageDoc.dcElements.find(\n (dc) => dc.name === 'identifier' && dc.id === refId,\n );\n if (!matchingDc) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `package element unique-identifier attribute does not resolve to a dc:identifier element (given reference was \"${refId}\")`,\n location: { path: opfPath },\n });\n pushMessage(context.messages, {\n id: MessageId.OPF_030,\n message: `unique-identifier \"${refId}\" does not reference an existing dc:identifier`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n /**\n * Validate metadata section\n */\n private validateMetadata(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n const dcElements = this.packageDoc.dcElements;\n\n if (dcElements.length === 0 && this.packageDoc.metaElements.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.OPF_072,\n message: 'Metadata section is empty',\n location: { path: opfPath },\n });\n return;\n }\n\n // Check required elements\n const hasIdentifier = dcElements.some((dc) => dc.name === 'identifier');\n const hasTitle = dcElements.some((dc) => dc.name === 'title');\n const hasLanguage = dcElements.some((dc) => dc.name === 'language');\n\n if (!hasIdentifier) {\n pushMessage(context.messages, {\n id: MessageId.OPF_015,\n message: 'Metadata must include at least one dc:identifier element',\n location: { path: opfPath },\n });\n }\n\n if (!hasTitle) {\n pushMessage(context.messages, {\n id: MessageId.OPF_016,\n message: 'Metadata must include at least one dc:title element',\n location: { path: opfPath },\n });\n }\n\n if (!hasLanguage) {\n pushMessage(context.messages, {\n id: MessageId.OPF_017,\n message: 'Metadata must include at least one dc:language element',\n location: { path: opfPath },\n });\n }\n\n // Validate dc:language format\n for (const dc of dcElements) {\n if (dc.name === 'language' && dc.value) {\n if (!isValidLanguageTag(dc.value)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_092,\n message: `Invalid language tag: \"${dc.value}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // Validate dc:date format (OPF-053)\n if (dc.name === 'date' && dc.value) {\n if (!isValidW3CDateFormat(dc.value)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_053,\n message: `Invalid date format \"${dc.value}\"; must be W3C date format (ISO 8601)`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-085: Validate UUID format for dc:identifier starting with urn:uuid:\n if (dc.name === 'identifier' && dc.value) {\n const val = dc.value.trim();\n if (val.startsWith('urn:uuid:')) {\n const uuid = val.substring(9);\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(uuid)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_085,\n message: `Invalid UUID value \"${uuid}\"`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n // OPF-052: Validate dc:creator with opf:role attribute\n if (dc.name === 'creator' && dc.attributes) {\n const role = dc.attributes['opf:role'];\n if (role && !VALID_RELATOR_CODES.has(role) && !role.startsWith('oth.')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_052,\n message: `Invalid role value \"${role}\" in dc:creator`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n // EPUB 3: Validate meta element property and scheme attributes\n if (this.packageDoc.version !== '2.0') {\n for (const meta of this.packageDoc.metaElements) {\n // OPF-025: property/scheme must not be a whitespace-separated list\n if (meta.property && /\\s/.test(meta.property.trim())) {\n pushMessage(context.messages, {\n id: MessageId.OPF_025,\n message: `Property value must be a single value, not a list: \"${meta.property}\"`,\n location: { path: opfPath },\n });\n }\n if (meta.scheme && /\\s/.test(meta.scheme.trim())) {\n pushMessage(context.messages, {\n id: MessageId.OPF_025,\n message: `Scheme value must be a single value, not a list: \"${meta.scheme}\"`,\n location: { path: opfPath },\n });\n }\n\n // OPF-026: property name must be well-formed (valid prefix:localname)\n if (meta.property && !/\\s/.test(meta.property.trim())) {\n const prop = meta.property.trim();\n if (prop.includes(':') && /:\\s*$/.test(prop)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_026,\n message: `Malformed property name: \"${prop}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-027: scheme must be a known value or use a prefix\n if (meta.scheme) {\n const scheme = meta.scheme.trim();\n if (scheme && !scheme.includes(':')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_027,\n message: `Undefined property: \"${scheme}\"`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n\n // EPUB 3: Validate refines attributes\n if (this.packageDoc.version !== '2.0') {\n // Collect all IDs from the OPF document\n const allIds = new Set<string>();\n for (const dc of dcElements) {\n if (dc.id) allIds.add(dc.id);\n }\n for (const meta of this.packageDoc.metaElements) {\n if (meta.id) allIds.add(meta.id);\n }\n for (const link of this.packageDoc.linkElements) {\n if (link.id) allIds.add(link.id);\n }\n for (const item of this.packageDoc.manifest) {\n allIds.add(item.id);\n }\n\n // Check for duplicate IDs across all elements\n const seenGlobalIds = new Set<string>();\n const allIdSources: { id: string; normalized: string }[] = [];\n for (const dc of dcElements) {\n if (dc.id) allIdSources.push({ id: dc.id, normalized: dc.id.trim() });\n }\n for (const meta of this.packageDoc.metaElements) {\n if (meta.id) allIdSources.push({ id: meta.id, normalized: meta.id.trim() });\n }\n for (const link of this.packageDoc.linkElements) {\n if (link.id) allIdSources.push({ id: link.id, normalized: link.id.trim() });\n }\n for (const item of this.packageDoc.manifest) {\n allIdSources.push({ id: item.id, normalized: item.id.trim() });\n }\n for (const itemref of this.packageDoc.spine) {\n if (itemref.id) allIdSources.push({ id: itemref.id, normalized: itemref.id.trim() });\n }\n for (const src of allIdSources) {\n if (seenGlobalIds.has(src.normalized)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Duplicate \"${src.normalized}\"`,\n location: { path: opfPath },\n });\n }\n seenGlobalIds.add(src.normalized);\n }\n\n for (const meta of this.packageDoc.metaElements) {\n if (!meta.refines) continue;\n\n const refines = meta.refines;\n\n // RSC-005: refines must be a relative URL (not absolute)\n if (/^[a-zA-Z][a-zA-Z0-9+\\-.]*:/.test(refines)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: '@refines must be a relative URL',\n location: { path: opfPath },\n });\n continue;\n }\n\n // RSC-017: refines should use a fragment ID (start with #)\n // Only fire when refines resolves to a manifest item href (Java compat)\n if (!refines.startsWith('#')) {\n const isManifestHref = this.packageDoc.manifest.some((item) => item.href === refines);\n if (isManifestHref) {\n pushMessage(context.messages, {\n id: MessageId.RSC_017,\n message: `@refines should instead refer to \"${refines}\" using a fragment identifier pointing to its manifest item`,\n location: { path: opfPath },\n });\n }\n continue;\n }\n\n // RSC-005: refines fragment must target an existing ID\n const targetId = refines.substring(1);\n if (!allIds.has(targetId)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `@refines missing target id: \"${targetId}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-065: Detect refines cycles\n this.detectRefinesCycles(context, opfPath);\n }\n\n // EPUB 3: Validate meta element vocabulary (D-vocabularies Schematron)\n if (this.packageDoc.version !== '2.0') {\n this.validateMetaPropertiesVocab(context, opfPath, dcElements);\n }\n\n // EPUB 3: Check for dcterms:modified meta\n if (this.packageDoc.version !== '2.0') {\n const modifiedMetas = this.packageDoc.metaElements.filter(\n (meta) => meta.property === 'dcterms:modified',\n );\n const modifiedMeta = modifiedMetas[0];\n if (modifiedMetas.length > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'package dcterms:modified meta element must occur exactly once',\n location: { path: opfPath },\n });\n }\n if (!modifiedMeta) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'package dcterms:modified meta element must occur exactly once',\n location: { path: opfPath },\n });\n pushMessage(context.messages, {\n id: MessageId.OPF_054,\n message: 'EPUB 3 metadata must include a dcterms:modified meta element',\n location: { path: opfPath },\n });\n } else if (modifiedMeta.value) {\n // Check for strict CCYY-MM-DDThh:mm:ssZ format (Schematron check)\n const strictModifiedPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$/;\n if (!strictModifiedPattern.test(modifiedMeta.value.trim())) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `dcterms:modified illegal syntax (expecting: \"CCYY-MM-DDThh:mm:ssZ\")`,\n location: { path: opfPath },\n });\n }\n if (!isValidW3CDateFormat(modifiedMeta.value)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_054,\n message: `Invalid dcterms:modified date format \"${modifiedMeta.value}\"; must be W3C date format (ISO 8601)`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n\n /**\n * Validate EPUB 3 meta element vocabulary (D-vocabularies: meta-properties)\n * Ports package-30.sch Schematron patterns for authority, term, belongs-to-collection,\n * collection-type, display-seq, file-as, group-position, identifier-type, meta-auth,\n * role, source-of, and title-type.\n */\n private validateMetaPropertiesVocab(\n context: ValidationContext,\n opfPath: string,\n dcElements: { name: string; value: string; id?: string; attributes?: Record<string, string> }[],\n ): void {\n if (!this.packageDoc) return;\n\n const metaElements = this.packageDoc.metaElements;\n\n // Build meta id → property map\n const metaIdToProp = new Map<string, string>();\n for (const meta of metaElements) {\n if (meta.id) metaIdToProp.set(meta.id.trim(), meta.property.trim());\n }\n\n // opf.dc.subject.authority-term: for each dc:subject with an id, check authority/term counts\n for (const dc of dcElements) {\n if (dc.name !== 'subject' || !dc.id) continue;\n const subjectId = dc.id.trim();\n // Schematron uses substring(refines, 2) which strips first char, so \"#id\".substring(1) = \"id\"\n const authorityCount = metaElements.filter(\n (m) => m.property.trim() === 'authority' && m.refines?.trim().substring(1) === subjectId,\n ).length;\n const termCount = metaElements.filter(\n (m) => m.property.trim() === 'term' && m.refines?.trim().substring(1) === subjectId,\n ).length;\n if (authorityCount > 1 || termCount > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'Only one pair of authority and term properties can be associated with a dc:subject',\n location: { path: opfPath },\n });\n } else if (authorityCount === 1 && termCount === 0) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'A term property must be associated with a dc:subject when an authority is specified',\n location: { path: opfPath },\n });\n } else if (authorityCount === 0 && termCount === 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'An authority property must be associated with a dc:subject when a term is specified',\n location: { path: opfPath },\n });\n }\n }\n\n // Track seen (property + \":\" + refines) for cardinality checks\n const seenPropertyRefines = new Set<string>();\n\n for (const meta of metaElements) {\n const prop = meta.property.trim();\n const refines = meta.refines?.trim();\n\n switch (prop) {\n case 'authority': {\n // Must refine a dc:subject: concat('#', id) = refines\n const ok = dcElements.some(\n (dc) => dc.name === 'subject' && dc.id && '#' + dc.id.trim() === refines,\n );\n if (!ok) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Property \"authority\" must refine a \"subject\" property.',\n location: { path: opfPath },\n });\n }\n break;\n }\n\n case 'term': {\n // Must refine a dc:subject: concat('#', id) = refines\n const ok = dcElements.some(\n (dc) => dc.name === 'subject' && dc.id && '#' + dc.id.trim() === refines,\n );\n if (!ok) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Property \"term\" must refine a \"subject\" property.',\n location: { path: opfPath },\n });\n }\n break;\n }\n\n case 'belongs-to-collection': {\n // If refines, target (by substring(1)) must be another belongs-to-collection meta\n if (refines) {\n const targetId = refines.substring(1);\n if (metaIdToProp.get(targetId) !== 'belongs-to-collection') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'Property \"belongs-to-collection\" can only refine other \"belongs-to-collection\" properties.',\n location: { path: opfPath },\n });\n }\n }\n break;\n }\n\n case 'collection-type': {\n // Must refine a belongs-to-collection meta (no refines = error too)\n if (!refines) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Property \"collection-type\" must refine a \"belongs-to-collection\" property.',\n location: { path: opfPath },\n });\n } else {\n const targetId = refines.substring(1);\n if (metaIdToProp.get(targetId) !== 'belongs-to-collection') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'Property \"collection-type\" must refine a \"belongs-to-collection\" property.',\n location: { path: opfPath },\n });\n }\n }\n // Cardinality\n const ctKey = `${prop}:${refines ?? ''}`;\n if (seenPropertyRefines.has(ctKey)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n '\"collection-type\" cannot be declared more than once to refine the same \"belongs-to-collection\" expression.',\n location: { path: opfPath },\n });\n }\n seenPropertyRefines.add(ctKey);\n break;\n }\n\n case 'display-seq': {\n const key = `${prop}:${refines ?? ''}`;\n if (seenPropertyRefines.has(key)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n '\"display-seq\" cannot be declared more than once to refine the same expression.',\n location: { path: opfPath },\n });\n }\n seenPropertyRefines.add(key);\n break;\n }\n\n case 'file-as': {\n const key = `${prop}:${refines ?? ''}`;\n if (seenPropertyRefines.has(key)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: '\"file-as\" cannot be declared more than once to refine the same expression.',\n location: { path: opfPath },\n });\n }\n seenPropertyRefines.add(key);\n break;\n }\n\n case 'group-position': {\n const key = `${prop}:${refines ?? ''}`;\n if (seenPropertyRefines.has(key)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n '\"group-position\" cannot be declared more than once to refine the same expression.',\n location: { path: opfPath },\n });\n }\n seenPropertyRefines.add(key);\n break;\n }\n\n case 'identifier-type': {\n // Must refine dc:identifier or dc:source: concat('#', id) = refines\n const ok = dcElements.some(\n (dc) =>\n (dc.name === 'identifier' || dc.name === 'source') &&\n dc.id &&\n '#' + dc.id.trim() === refines,\n );\n if (!ok) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'Property \"identifier-type\" must refine an \"identifier\" or \"source\" property.',\n location: { path: opfPath },\n });\n }\n // Cardinality\n const itKey = `${prop}:${refines ?? ''}`;\n if (seenPropertyRefines.has(itKey)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n '\"identifier-type\" cannot be declared more than once to refine the same expression.',\n location: { path: opfPath },\n });\n }\n seenPropertyRefines.add(itKey);\n break;\n }\n\n case 'meta-auth': {\n pushMessage(context.messages, {\n id: MessageId.RSC_017,\n message: 'Use of the meta-auth property is deprecated',\n location: { path: opfPath },\n });\n break;\n }\n\n case 'role': {\n // Must refine dc:creator, dc:contributor, or dc:publisher: concat('#', id) = refines\n const ok = dcElements.some(\n (dc) =>\n (dc.name === 'creator' || dc.name === 'contributor' || dc.name === 'publisher') &&\n dc.id &&\n '#' + dc.id.trim() === refines,\n );\n if (!ok) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'Property \"role\" must refine a \"creator\", \"contributor\", or \"publisher\" property.',\n location: { path: opfPath },\n });\n }\n break;\n }\n\n case 'source-of': {\n // Value must be 'pagination'\n if (meta.value.trim() !== 'pagination') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"source-of\" property must have the value \"pagination\"',\n location: { path: opfPath },\n });\n }\n // Must refine dc:source: uses substring(refines, 2) form\n const hasSourceRefines = dcElements.some(\n (dc) => dc.name === 'source' && dc.id && refines?.substring(1) === dc.id.trim(),\n );\n if (!hasSourceRefines) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'The \"source-of\" property must refine a \"source\" property.',\n location: { path: opfPath },\n });\n }\n // Cardinality\n const soKey = `${prop}:${refines ?? ''}`;\n if (seenPropertyRefines.has(soKey)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n '\"source-of\" cannot be declared more than once to refine the same \"source\" expression.',\n location: { path: opfPath },\n });\n }\n seenPropertyRefines.add(soKey);\n break;\n }\n\n case 'title-type': {\n // Must refine dc:title: concat('#', id) = refines\n const ok = dcElements.some(\n (dc) => dc.name === 'title' && dc.id && '#' + dc.id.trim() === refines,\n );\n if (!ok) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Property \"title-type\" must refine a \"title\" property.',\n location: { path: opfPath },\n });\n }\n // Cardinality\n const ttKey = `${prop}:${refines ?? ''}`;\n if (seenPropertyRefines.has(ttKey)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n '\"title-type\" cannot be declared more than once to refine the same \"title\" expression.',\n location: { path: opfPath },\n });\n }\n seenPropertyRefines.add(ttKey);\n break;\n }\n }\n }\n }\n\n /**\n * Validate EPUB 3 link elements in metadata\n */\n private validateLinkElements(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n for (const link of this.packageDoc.linkElements) {\n // OPF-092: Validate hreflang well-formedness\n if (link.hreflang !== undefined && link.hreflang !== '') {\n const lang = link.hreflang;\n if (lang !== lang.trim()) {\n pushMessage(context.messages, {\n id: MessageId.OPF_092,\n message: `Language tag must not have leading or trailing whitespace: \"${lang}\"`,\n location: { path: opfPath },\n });\n } else if (!isValidLanguageTag(lang)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_092,\n message: `Invalid language tag: \"${lang}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-027: Validate link properties\n if (link.properties) {\n for (const prop of link.properties) {\n if (!LINK_PROPERTIES.has(prop) && !prop.includes(':')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_027,\n message: `Undefined property: \"${prop}\"`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n // Parse rel keywords\n const relKeywords = link.rel ? link.rel.trim().split(/\\s+/).filter(Boolean) : [];\n const hasRecord = relKeywords.includes('record');\n const hasVoicing = relKeywords.includes('voicing');\n const hasAlternate = relKeywords.includes('alternate');\n\n // OPF-089: alternate must not be combined with other rel keywords\n if (hasAlternate && relKeywords.length > 1) {\n pushMessage(context.messages, {\n id: MessageId.OPF_089,\n message: `The \"alternate\" keyword must not be combined with other keywords in the \"rel\" attribute`,\n location: { path: opfPath },\n });\n }\n\n // OPF-086: deprecated rel keywords\n for (const kw of relKeywords) {\n if (DEPRECATED_LINK_REL.has(kw)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_086,\n message: `The rel keyword \"${kw}\" is deprecated`,\n location: { path: opfPath },\n });\n }\n }\n\n // RSC-005: \"record\" links must not have a refines attribute\n if (hasRecord && link.refines) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n '\"record\" links only applies to the Publication (must not have a \"refines\" attribute).',\n location: { path: opfPath },\n });\n }\n\n // RSC-005: \"voicing\" links must have a refines attribute\n if (hasVoicing && !link.refines) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: '\"voicing\" links must have a \"refines\" attribute.',\n location: { path: opfPath },\n });\n }\n\n const href = link.href;\n const decodedHref = tryDecodeUriComponent(href);\n\n const basePath = href.includes('#') ? href.substring(0, href.indexOf('#')) : href;\n const basePathDecoded = decodedHref.includes('#')\n ? decodedHref.substring(0, decodedHref.indexOf('#'))\n : decodedHref;\n\n if (href.startsWith('#')) {\n // OPF-098: link href must not target an element in the package document\n pushMessage(context.messages, {\n id: MessageId.OPF_098,\n message: `The \"href\" attribute must reference resources, not elements in the package document, but found URL \"${href}\".`,\n location: { path: opfPath },\n });\n continue;\n }\n\n const isRemote = /^[a-zA-Z][a-zA-Z0-9+\\-.]*:/.test(href);\n\n // OPF-095: voicing media-type must be audio (applies to both local and remote)\n if (hasVoicing && link.mediaType && !link.mediaType.startsWith('audio/')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_095,\n message: `The \"voicing\" link media type must be an audio type, but found \"${link.mediaType}\"`,\n location: { path: opfPath },\n });\n }\n\n // OPF-094: record/voicing require media-type for remote URLs\n if (isRemote && !link.mediaType && (hasRecord || hasVoicing)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_094,\n message: `The \"media-type\" attribute is required for \"record\" and \"voicing\" links`,\n location: { path: opfPath },\n });\n }\n\n if (isRemote) {\n continue;\n }\n\n if (!link.mediaType) {\n pushMessage(context.messages, {\n id: MessageId.OPF_093,\n message:\n 'The \"media-type\" attribute is required for linked resources located in the EPUB container',\n location: { path: opfPath },\n });\n }\n\n const resolvedPath = resolvePath(opfPath, basePath);\n const resolvedPathDecoded =\n basePathDecoded !== basePath ? resolvePath(opfPath, basePathDecoded) : resolvedPath;\n\n const fileExists = context.files.has(resolvedPath) || context.files.has(resolvedPathDecoded);\n const inManifest =\n this.manifestByHref.has(basePath) || this.manifestByHref.has(basePathDecoded);\n\n if (!fileExists && !inManifest) {\n pushMessage(context.messages, {\n id: MessageId.RSC_007w,\n message: `Referenced resource \"${resolvedPath}\" could not be found in the EPUB`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n /**\n * Validate manifest section\n */\n private validateManifest(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n const seenIds = new Set<string>();\n const seenHrefs = new Set<string>();\n\n for (const item of this.packageDoc.manifest) {\n // Check for duplicate IDs\n if (seenIds.has(item.id)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_074,\n message: `Duplicate manifest item id: \"${item.id}\"`,\n location: { path: opfPath },\n });\n }\n seenIds.add(item.id);\n\n // Check for duplicate hrefs\n if (seenHrefs.has(item.href)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_074,\n message: `Duplicate manifest item href: \"${item.href}\"`,\n location: { path: opfPath },\n });\n }\n seenHrefs.add(item.href);\n\n // Check for self-referencing manifest item (OPF-099)\n // The manifest must not list the package document itself\n // Note: href may be URL-encoded (e.g., table%20us%202.png) but file paths are not\n const fullPath = resolvePath(opfPath, item.href);\n if (fullPath === opfPath) {\n pushMessage(context.messages, {\n id: MessageId.OPF_099,\n message: 'The manifest must not list the package document',\n location: { path: opfPath },\n });\n }\n\n // Check for URL leaking outside container (RSC-026)\n // Using the same trick as Java EPUBCheck: resolve against two different test bases\n // If the resolved URL doesn't start with both test base paths, it leaks outside the container\n if (!item.href.startsWith('http') && !item.href.startsWith('mailto:')) {\n const leaked = checkUrlLeaking(item.href);\n if (leaked) {\n pushMessage(context.messages, {\n id: MessageId.RSC_026,\n message: `URL \"${item.href}\" leaks outside the container (it is not a valid-relative-ocf-URL-with-fragment string)`,\n location: { path: opfPath },\n });\n }\n }\n\n // Check that referenced file exists (RSC-001 per Java EPUBCheck)\n // Also try URL-decoded version for comparison\n const decodedHref = tryDecodeUriComponent(item.href);\n const fullPathDecoded =\n decodedHref !== item.href ? resolvePath(opfPath, decodedHref).normalize('NFC') : fullPath;\n\n if (\n !context.files.has(fullPath) &&\n !context.files.has(fullPathDecoded) &&\n !item.href.startsWith('http')\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_001,\n message: `Referenced resource \"${item.href}\" could not be found in the EPUB`,\n location: { path: opfPath },\n });\n }\n\n // EPUB 3: Check for publication resources in META-INF\n if (this.packageDoc.version !== '2.0' && fullPath.startsWith('META-INF/')) {\n pushMessage(context.messages, {\n id: MessageId.PKG_025,\n message: `Publication resource must not be located in META-INF: ${item.href}`,\n location: { path: opfPath },\n });\n }\n\n // Validate media type format (RFC4288)\n if (!isValidMimeType(item.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_014,\n message: `Invalid media-type format \"${item.mediaType}\" for item \"${item.id}\"`,\n location: { path: opfPath },\n });\n }\n\n // Check for deprecated media types (OEB 1.x)\n if (DEPRECATED_MEDIA_TYPES.has(item.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_037,\n message: `Found deprecated media-type \"${item.mediaType}\"`,\n location: { path: opfPath },\n });\n }\n\n // EPUB 3: Validate item properties\n if (this.packageDoc.version !== '2.0' && item.properties) {\n for (const prop of item.properties) {\n if (!ITEM_PROPERTIES.has(prop)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_027,\n message: `Undefined property: \"${prop}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n // Check nav property requirements\n if (item.properties.includes('nav')) {\n if (item.mediaType !== 'application/xhtml+xml') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `The manifest item representing the Navigation Document must be of the \"application/xhtml+xml\" type (given type was \"${item.mediaType}\")`,\n location: { path: opfPath },\n });\n pushMessage(context.messages, {\n id: MessageId.OPF_012,\n message: `Item with \"nav\" property must be XHTML, found: ${item.mediaType}`,\n location: { path: opfPath },\n });\n }\n }\n\n // OPF-012: cover-image property must only be used on image media types\n if (item.properties.includes('cover-image')) {\n if (!item.mediaType.startsWith('image/')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_012,\n message: `Item with \"cover-image\" property must be an image, found: ${item.mediaType}`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n // RSC-020: Check for unencoded spaces in href\n if (item.href.includes(' ')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_020,\n message: `\"${item.href}\" is not a valid URL (Illegal character in path segment: space is not allowed)`,\n location: { path: opfPath },\n });\n }\n\n // Check for href fragment (EPUB 3)\n if (this.packageDoc.version !== '2.0' && item.href.includes('#')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_091,\n message: `Manifest item href must not contain fragment identifier: \"${item.href}\"`,\n location: { path: opfPath },\n });\n }\n\n // EPUB 3: Check remote resource constraints (RSC-006)\n if (\n this.packageDoc.version !== '2.0' &&\n (item.href.startsWith('http://') || item.href.startsWith('https://'))\n ) {\n const isAllowedRemoteType =\n item.mediaType.startsWith('audio/') ||\n item.mediaType.startsWith('video/') ||\n item.mediaType.startsWith('font/') ||\n item.mediaType === 'application/font-sfnt' ||\n item.mediaType === 'application/font-woff' ||\n item.mediaType === 'application/font-woff2' ||\n item.mediaType === 'application/vnd.ms-opentype';\n\n const inSpine = this.packageDoc.spine.some((s) => s.idref === item.id);\n\n // Spine items that are remote with non-standard types are never allowed\n if (inSpine) {\n if (!isAllowedRemoteType) {\n pushMessage(context.messages, {\n id: MessageId.RSC_006,\n message: `Remote resource reference is not allowed in this context; resource \"${item.href}\" must be located in the EPUB container`,\n location: { path: opfPath },\n });\n }\n if (!item.properties?.includes('remote-resources')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_006,\n message: `Manifest item \"${item.id}\" references remote resource but is missing \"remote-resources\" property`,\n location: { path: opfPath },\n });\n }\n }\n\n // Non-spine remote items with non-standard types are checked later\n // by the reference validator (which has content reference context)\n }\n }\n\n // EPUB 3: Check nav and cover-image property counts\n if (this.packageDoc.version !== '2.0') {\n const navItems = this.packageDoc.manifest.filter((item) => item.properties?.includes('nav'));\n if (navItems.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Exactly one manifest item must declare the \"nav\" property',\n location: { path: opfPath },\n });\n } else if (navItems.length > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Exactly one manifest item must declare the \"nav\" property (number of \"nav\" items: ${String(navItems.length)}).`,\n location: { path: opfPath },\n });\n }\n\n const coverItems = this.packageDoc.manifest.filter((item) =>\n item.properties?.includes('cover-image'),\n );\n if (coverItems.length > 1) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: `Multiple occurrences of the \"cover-image\" property (number of \"cover-image\" items: ${String(coverItems.length)}).`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n /**\n * Validate spine section\n */\n private validateSpine(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n // Check that spine has items\n if (this.packageDoc.spine.length === 0) {\n pushMessage(context.messages, {\n id: MessageId.OPF_033,\n message: 'Spine must contain at least one itemref',\n location: { path: opfPath },\n });\n return;\n }\n\n // Check for at least one linear item\n const hasLinear = this.packageDoc.spine.some((ref) => ref.linear);\n if (!hasLinear) {\n pushMessage(context.messages, {\n id: MessageId.OPF_033,\n message: 'Spine must contain at least one linear itemref',\n location: { path: opfPath },\n });\n }\n\n // Check for NCX reference (required in EPUB 2, optional in EPUB 3)\n const ncxId = this.packageDoc.spineToc;\n if (this.packageDoc.version === '2.0' && !ncxId) {\n // EPUB 2 requires toc attribute\n pushMessage(context.messages, {\n id: MessageId.OPF_050,\n message: 'EPUB 2 spine should have a toc attribute referencing the NCX',\n location: { path: opfPath },\n });\n } else if (!ncxId && this.packageDoc.version !== '2.0') {\n // EPUB 3: If NCX is in manifest, spine toc attribute must be set\n const hasNcxInManifest = this.packageDoc.manifest.some(\n (item) => item.mediaType === 'application/x-dtbncx+xml',\n );\n if (hasNcxInManifest) {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message:\n 'spine element toc attribute must be set when an NCX is included in the publication',\n location: { path: opfPath },\n });\n }\n } else if (ncxId) {\n // If toc attribute is present (EPUB 2 or 3), validate it points to NCX\n const ncxItem = this.manifestById.get(ncxId);\n if (!ncxItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_049,\n message: `Spine toc attribute references non-existent item: \"${ncxId}\"`,\n location: { path: opfPath },\n });\n } else if (ncxItem.mediaType !== 'application/x-dtbncx+xml') {\n pushMessage(context.messages, {\n id: MessageId.OPF_050,\n message: `Spine toc attribute must reference an NCX document (media-type \"application/x-dtbncx+xml\"), found: \"${ncxItem.mediaType}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n const seenIdrefs = new Set<string>();\n\n for (const itemref of this.packageDoc.spine) {\n // Check that idref references a manifest item\n const item = this.manifestById.get(itemref.idref);\n if (!item) {\n pushMessage(context.messages, {\n id: MessageId.OPF_049,\n message: `Spine itemref references non-existent manifest item: \"${itemref.idref}\"`,\n location: { path: opfPath },\n });\n continue;\n }\n\n // Check for duplicate idrefs (applies to both EPUB 2 and 3)\n if (seenIdrefs.has(itemref.idref)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_034,\n message: `Duplicate spine itemref: \"${itemref.idref}\"`,\n location: { path: opfPath },\n });\n }\n seenIdrefs.add(itemref.idref);\n\n // Check that spine items have appropriate media types\n if (!isSpineMediaType(item.mediaType)) {\n if (!item.fallback) {\n pushMessage(context.messages, {\n id: MessageId.OPF_043,\n message: `Spine item \"${item.id}\" has non-standard media type \"${item.mediaType}\" without fallback`,\n location: { path: opfPath },\n });\n } else if (!this.fallbackChainResolvesToContentDocument(item.id)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_044,\n message: `Spine item \"${item.id}\" has non-standard media type \"${item.mediaType}\" and its fallback chain does not resolve to a content document`,\n location: { path: opfPath },\n });\n }\n }\n\n // EPUB 3: Validate itemref properties\n if (this.packageDoc.version !== '2.0' && itemref.properties) {\n for (const prop of itemref.properties) {\n if (!SPINE_PROPERTIES.has(prop) && !prop.includes(':')) {\n pushMessage(context.messages, {\n id: MessageId.OPF_012,\n message: `Unknown spine itemref property: \"${prop}\"`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n }\n\n /**\n * Validate fallback chains\n */\n private validateFallbackChains(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n for (const item of this.packageDoc.manifest) {\n if (item.fallback) {\n const visited = new Set<string>();\n let currentFallback: string | undefined = item.fallback;\n\n while (currentFallback) {\n if (visited.has(currentFallback)) {\n pushMessage(context.messages, {\n id: MessageId.OPF_045,\n message: `Circular fallback chain detected starting from item \"${item.id}\"`,\n location: { path: opfPath },\n });\n break;\n }\n\n visited.add(currentFallback);\n const fallbackItem = this.manifestById.get(currentFallback);\n\n if (!fallbackItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_040,\n message: `Fallback item \"${currentFallback}\" not found in manifest`,\n location: { path: opfPath },\n });\n break;\n }\n\n currentFallback = fallbackItem.fallback;\n }\n }\n }\n }\n\n /**\n * Validate guide section (EPUB 2)\n */\n private validateGuide(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n for (const ref of this.packageDoc.guide) {\n // Strip fragment from href for lookup\n const hrefBase = ref.href.split('#')[0] ?? ref.href;\n const fullPath = resolvePath(opfPath, hrefBase);\n\n // Check that href references a manifest item\n const found = Array.from(this.manifestByHref.entries()).some(([href]) => {\n const itemFullPath = resolvePath(opfPath, href);\n return itemFullPath === fullPath;\n });\n\n if (!found) {\n pushMessage(context.messages, {\n id: MessageId.OPF_031,\n message: `Guide reference \"${ref.type}\" references item not in manifest: ${ref.href}`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n private detectRefinesCycles(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n // Build graph: id -> ids it refines (via meta elements that refine it)\n const refinesGraph = new Map<string, string[]>();\n for (const meta of this.packageDoc.metaElements) {\n if (!meta.refines || !meta.id) continue;\n if (!meta.refines.startsWith('#')) continue;\n const targetId = meta.refines.substring(1);\n // meta.id refines targetId — so there's an edge from meta.id to targetId\n const existing = refinesGraph.get(meta.id);\n if (existing) {\n existing.push(targetId);\n } else {\n refinesGraph.set(meta.id, [targetId]);\n }\n }\n\n // Detect cycles using DFS\n const visited = new Set<string>();\n const inStack = new Set<string>();\n const reportedCycles = new Set<string>();\n\n const dfs = (node: string): boolean => {\n if (inStack.has(node)) return true;\n if (visited.has(node)) return false;\n visited.add(node);\n inStack.add(node);\n\n const neighbors = refinesGraph.get(node) ?? [];\n for (const neighbor of neighbors) {\n if (dfs(neighbor)) {\n if (!reportedCycles.has(node)) {\n reportedCycles.add(node);\n pushMessage(context.messages, {\n id: MessageId.OPF_065,\n message: `Invalid metadata declaration, probably due to a cycle in \"refines\" metadata.`,\n location: { path: opfPath },\n });\n }\n return true;\n }\n }\n\n inStack.delete(node);\n return false;\n };\n\n for (const node of refinesGraph.keys()) {\n dfs(node);\n }\n }\n\n private validateCollections(context: ValidationContext, opfPath: string): void {\n if (!this.packageDoc) return;\n\n const collections = this.packageDoc.collections;\n if (collections.length === 0) {\n return;\n }\n\n for (const collection of collections) {\n // RSC-005: manifest collection must not be at the top level\n if (collection.role === 'manifest') {\n pushMessage(context.messages, {\n id: MessageId.RSC_005,\n message: 'Collection with role \"manifest\" must be a child of another collection',\n location: { path: opfPath },\n });\n }\n\n // OPF-070: collection role URL must be valid if it looks like a URL\n if (collection.role.includes(':')) {\n try {\n new URL(collection.role);\n } catch {\n pushMessage(context.messages, {\n id: MessageId.OPF_070,\n message: `Invalid collection role URL: \"${collection.role}\"`,\n location: { path: opfPath },\n });\n }\n }\n\n if (collection.role === 'dictionary') {\n if (!collection.name || collection.name.trim() === '') {\n pushMessage(context.messages, {\n id: MessageId.OPF_072,\n message: 'Dictionary collection must have a name attribute',\n location: { path: opfPath },\n });\n }\n\n for (const linkHref of collection.links) {\n const manifestItem = this.manifestByHref.get(linkHref);\n if (!manifestItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_073,\n message: `Collection link \"${linkHref}\" references non-existent manifest item`,\n location: { path: opfPath },\n });\n continue;\n }\n\n if (\n manifestItem.mediaType !== 'application/xhtml+xml' &&\n manifestItem.mediaType !== 'image/svg+xml'\n ) {\n pushMessage(context.messages, {\n id: MessageId.OPF_074,\n message: `Dictionary collection item \"${linkHref}\" must be an XHTML or SVG document`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n if (collection.role === 'index') {\n for (const linkHref of collection.links) {\n const manifestItem = this.manifestByHref.get(linkHref);\n if (!manifestItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_073,\n message: `Collection link \"${linkHref}\" references non-existent manifest item`,\n location: { path: opfPath },\n });\n continue;\n }\n\n if (manifestItem.mediaType !== 'application/xhtml+xml') {\n pushMessage(context.messages, {\n id: MessageId.OPF_075,\n message: `Index collection item \"${linkHref}\" must be an XHTML document`,\n location: { path: opfPath },\n });\n }\n }\n }\n\n if (collection.role === 'preview') {\n for (const linkHref of collection.links) {\n const manifestItem = this.manifestByHref.get(linkHref);\n if (!manifestItem) {\n pushMessage(context.messages, {\n id: MessageId.OPF_073,\n message: `Collection link \"${linkHref}\" references non-existent manifest item`,\n location: { path: opfPath },\n });\n }\n }\n }\n }\n }\n\n private fallbackChainResolvesToContentDocument(itemId: string): boolean {\n const visited = new Set<string>();\n let currentId: string | undefined = itemId;\n while (currentId) {\n if (visited.has(currentId)) return false;\n visited.add(currentId);\n const item = this.manifestById.get(currentId);\n if (!item) return false;\n if (isSpineMediaType(item.mediaType)) return true;\n currentId = item.fallback;\n }\n return false;\n }\n}\n\n/**\n * Check if a media type is valid for spine items\n */\nfunction isSpineMediaType(mediaType: string): boolean {\n return (\n mediaType === 'application/xhtml+xml' ||\n mediaType === 'image/svg+xml' ||\n // EPUB 2 also allows these in spine\n mediaType === 'application/x-dtbook+xml'\n );\n}\n\n/**\n * Validate a BCP 47 language tag (simplified check)\n */\nfunction isValidLanguageTag(tag: string): boolean {\n // BCP 47 language tag validation\n // Supports: primary subtag, script, region, variants, extensions, and private-use\n // Also supports grandfathered tags (simplified: allow single-letter singletons)\n const pattern =\n /^[a-zA-Z]{2,3}(-[a-zA-Z]{4})?(-[a-zA-Z]{2}|-\\d{3})?(-([a-zA-Z\\d]{5,8}|\\d[a-zA-Z\\d]{3}))*(-[a-wyzA-WYZ](-[a-zA-Z\\d]{2,8})+)*(-x(-[a-zA-Z\\d]{1,8})+)?$/;\n if (pattern.test(tag)) return true;\n // Private-use only tags (e.g., \"x-custom\")\n if (/^x(-[a-zA-Z\\d]{1,8})+$/.test(tag)) return true;\n return GRANDFATHERED_LANG_TAGS.has(tag);\n}\n\n/**\n * Resolve a relative path against a base path\n */\nfunction resolvePath(basePath: string, relativePath: string): string {\n if (relativePath.startsWith('/')) {\n return relativePath.slice(1);\n }\n\n const baseDir = basePath.includes('/') ? basePath.substring(0, basePath.lastIndexOf('/')) : '';\n\n if (!baseDir) {\n return relativePath;\n }\n\n // Handle ../ and ./ in relative path\n const parts = baseDir.split('/');\n const relParts = relativePath.split('/');\n\n for (const part of relParts) {\n if (part === '..') {\n parts.pop();\n } else if (part !== '.') {\n parts.push(part);\n }\n }\n\n return parts.join('/');\n}\n\n/**\n * Safely decode a URI component, returning the original if decoding fails\n *\n * This is needed because OPF hrefs may be URL-encoded (e.g., \"table%20us%202.png\")\n * but the actual file paths in the ZIP are not encoded (e.g., \"table us 2.png\").\n */\nfunction tryDecodeUriComponent(encoded: string): string {\n try {\n return decodeURIComponent(encoded);\n } catch {\n // If decoding fails (e.g., invalid encoding), return original\n return encoded;\n }\n}\n\n/**\n * Validate MIME type format according to RFC4288\n */\nfunction isValidMimeType(mediaType: string): boolean {\n // RFC 4288 allows: letters, digits, and !#$&-^_.+ in type/subtype\n const mimeTypePattern =\n /^[a-zA-Z][a-zA-Z0-9!#$&\\-^_.]*\\/[a-zA-Z0-9][a-zA-Z0-9!#$&\\-^_.+]*(?:\\s*;\\s*[a-zA-Z0-9-]+=[^;]+)?$/;\n\n if (!mimeTypePattern.test(mediaType)) {\n return false;\n }\n\n const [type, subtypeWithParams] = mediaType.split('/');\n if (!type || !subtypeWithParams) return false;\n\n const subtype = subtypeWithParams.split(';')[0]?.trim();\n if (!subtype) return false;\n\n if (type.length > 127 || subtype.length > 127) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Validate W3C date format (ISO 8601)\n * Based on Java EPUBCheck DateParser\n */\nfunction isValidW3CDateFormat(dateStr: string): boolean {\n const trimmed = dateStr.trim();\n\n const yearOnlyPattern = /^\\d{4}$/;\n if (yearOnlyPattern.test(trimmed)) {\n const year = Number(trimmed);\n return year >= 0 && year <= 9999;\n }\n\n const yearMonthPattern = /^(\\d{4})-(\\d{2})$/;\n const yearMonthMatch = yearMonthPattern.exec(trimmed);\n if (yearMonthMatch) {\n const year = Number(yearMonthMatch[1]);\n const month = Number(yearMonthMatch[2]);\n if (year < 0 || year > 9999) return false;\n if (month < 1 || month > 12) return false;\n return true;\n }\n\n const dateOnlyPattern = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n const dateMatch = dateOnlyPattern.exec(trimmed);\n if (dateMatch) {\n const year = Number(dateMatch[1]);\n const month = Number(dateMatch[2]);\n const day = Number(dateMatch[3]);\n if (year < 0 || year > 9999) return false;\n if (month < 1 || month > 12) return false;\n const daysInMonth = new Date(year, month, 0).getDate();\n if (day < 1 || day > daysInMonth) return false;\n return true;\n }\n\n const dateTimePattern =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?(Z|[+-]\\d{2}:\\d{2})?$/;\n const dateTimeMatch = dateTimePattern.exec(trimmed);\n if (dateTimeMatch) {\n const year = Number(dateTimeMatch[1]);\n const month = Number(dateTimeMatch[2]);\n const day = Number(dateTimeMatch[3]);\n if (year < 0 || year > 9999) return false;\n if (month < 1 || month > 12) return false;\n const daysInMonth = new Date(year, month, 0).getDate();\n if (day < 1 || day > daysInMonth) return false;\n\n const hours = Number(dateTimeMatch[4]);\n const minutes = Number(dateTimeMatch[5]);\n const seconds = Number(dateTimeMatch[6]);\n if (hours < 0 || hours > 23) return false;\n if (minutes < 0 || minutes > 59) return false;\n if (seconds < 0 || seconds > 59) return false;\n return true;\n }\n\n return false;\n}\n","/**\n * Registry for tracking EPUB resources and their IDs\n */\n\nimport type { Resource } from './types.js';\n\n/**\n * Registry for managing resources and their IDs\n */\nexport class ResourceRegistry {\n private resources: Map<string, Resource>;\n private ids: Map<string, Set<string>>;\n private svgSymbolIds: Map<string, Set<string>>;\n\n constructor() {\n this.resources = new Map();\n this.ids = new Map();\n this.svgSymbolIds = new Map();\n }\n\n /**\n * Register a resource from manifest\n */\n registerResource(resource: Resource): void {\n this.resources.set(resource.url, resource);\n // Also copy the IDs to the registry\n for (const id of resource.ids) {\n this.registerID(resource.url, id);\n }\n }\n\n /**\n * Register an ID in a resource\n */\n registerID(resourceURL: string, id: string): void {\n if (!id || !this.resources.has(resourceURL)) {\n return;\n }\n\n if (!this.ids.has(resourceURL)) {\n this.ids.set(resourceURL, new Set());\n }\n\n const resourceIDs = this.ids.get(resourceURL);\n resourceIDs?.add(id);\n\n // Also add to the resource object for consistency\n const resource = this.resources.get(resourceURL);\n if (resource) {\n resource.ids.add(id);\n }\n }\n\n /**\n * Get a resource by URL\n */\n getResource(url: string): Resource | undefined {\n return this.resources.get(url);\n }\n\n /**\n * Check if a resource exists\n */\n hasResource(url: string): boolean {\n return this.resources.has(url);\n }\n\n /**\n * Check if an ID exists in a resource\n */\n hasID(resourceURL: string, id: string): boolean {\n const resourceIDs = this.ids.get(resourceURL);\n return resourceIDs?.has(id) ?? false;\n }\n\n /**\n * Get the position (document order) of an ID in a resource.\n * Returns -1 if the ID is not found or is empty.\n */\n getIDPosition(resourceURL: string, id: string): number {\n if (!id) return -1;\n const resourceIDs = this.ids.get(resourceURL);\n if (!resourceIDs) return -1;\n let index = 0;\n for (const existingId of resourceIDs) {\n if (existingId === id) return index;\n index++;\n }\n return -1;\n }\n\n /**\n * Register an ID as belonging to an SVG symbol element\n */\n registerSVGSymbolID(resourceURL: string, id: string): void {\n if (!this.svgSymbolIds.has(resourceURL)) {\n this.svgSymbolIds.set(resourceURL, new Set());\n }\n this.svgSymbolIds.get(resourceURL)?.add(id);\n }\n\n /**\n * Check if an ID in a resource belongs to an SVG symbol element\n */\n isSVGSymbolID(resourceURL: string, id: string): boolean {\n return this.svgSymbolIds.get(resourceURL)?.has(id) ?? false;\n }\n\n /**\n * Get all resources\n */\n getAllResources(): Resource[] {\n return Array.from(this.resources.values());\n }\n\n /**\n * Get all resource URLs\n */\n getResourceURLs(): string[] {\n return Array.from(this.resources.keys());\n }\n\n /**\n * Get resources in spine\n */\n getSpineResources(): Resource[] {\n return Array.from(this.resources.values()).filter((r) => r.inSpine);\n }\n\n /**\n * Check if a resource is in spine\n */\n isInSpine(url: string): boolean {\n const resource = this.resources.get(url);\n return resource?.inSpine ?? false;\n }\n}\n","/**\n * Cross-reference validator for EPUB resources\n */\n\nimport { MessageId, pushMessage } from '../messages/index.js';\nimport { isCoreMediaType } from '../opf/types.js';\nimport type { EPUBVersion, ValidationContext } from '../types.js';\nimport type { ResourceRegistry } from './registry.js';\nimport type { Reference } from './types.js';\nimport { ReferenceType, isPublicationResourceReference } from './types.js';\nimport {\n checkUrlLeaking,\n hasAbsolutePath,\n hasParentDirectoryReference,\n isDataURL,\n isFileURL,\n isHTTP,\n isHTTPS,\n isMalformedURL,\n isRemoteURL,\n parseURL,\n resolveManifestHref,\n} from './url.js';\n\n/**\n * Validator for resource references\n */\nexport class ReferenceValidator {\n private registry: ResourceRegistry;\n private version: string;\n private references: Reference[] = [];\n\n constructor(registry: ResourceRegistry, version: string) {\n this.registry = registry;\n this.version = version;\n }\n\n /**\n * Register a reference for validation\n */\n addReference(reference: Reference): void {\n this.references.push(reference);\n }\n\n /**\n * Validate all registered references\n */\n validate(context: ValidationContext): void {\n for (const reference of this.references) {\n this.validateReference(context, reference);\n }\n\n this.checkRemoteResources(context);\n this.checkUndeclaredResources(context);\n this.checkReadingOrder(context);\n this.checkNonLinearReachability(context);\n }\n\n /**\n * Validate a single reference\n */\n private validateReference(context: ValidationContext, reference: Reference): void {\n // Trim leading/trailing whitespace (XML attribute values are whitespace-normalized)\n const url = reference.url.trim();\n\n // Validate data URLs first (before malformed URL check, since base64 may contain whitespace)\n // Data URLs are allowed for images/audio/video/fonts with CMT or intrinsic fallback\n // but forbidden for hyperlinks (a href, area href), nav links, and cite references\n if (isDataURL(url)) {\n if (this.version.startsWith('3.')) {\n const forbiddenDataUrlTypes = [\n ReferenceType.HYPERLINK,\n ReferenceType.NAV_TOC_LINK,\n ReferenceType.NAV_PAGELIST_LINK,\n ReferenceType.CITE,\n ];\n if (forbiddenDataUrlTypes.includes(reference.type)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_029,\n message: 'Data URLs are not allowed in this context',\n location: reference.location,\n });\n } else {\n // Check RSC-032 for data URLs with foreign MIME types\n const fallbackCheckedTypes = [\n ReferenceType.IMAGE,\n ReferenceType.AUDIO,\n ReferenceType.VIDEO,\n ReferenceType.GENERIC,\n ];\n if (fallbackCheckedTypes.includes(reference.type) && !reference.hasIntrinsicFallback) {\n const dataUrlMimeType = this.extractDataURLMimeType(url);\n if (dataUrlMimeType && !isCoreMediaType(dataUrlMimeType)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_032,\n message: `Fallback must be provided for foreign resources, but found none for data URL of type \"${dataUrlMimeType}\"`,\n location: reference.location,\n });\n }\n }\n }\n }\n return;\n }\n\n // Check for malformed URLs (after data URL check)\n if (isMalformedURL(url)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_020,\n message: `Malformed URL: ${url}`,\n location: reference.location,\n });\n return;\n }\n\n if (isFileURL(url)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_030,\n message: `File URLs are not allowed in EPUB, but found \"${url}\"`,\n location: reference.location,\n });\n return;\n }\n\n // Use targetResource if available, otherwise parse URL\n const resourcePath = reference.targetResource || parseURL(url).resource;\n const fragment = reference.fragment ?? parseURL(url).fragment;\n const hasFragment = fragment !== undefined && fragment !== '';\n\n // RSC-033: Relative URLs must not have a query component\n if (!isRemoteURL(url) && url.includes('?')) {\n pushMessage(context.messages, {\n id: MessageId.RSC_033,\n message: `Relative URL strings must not have a query component: \"${url}\"`,\n location: reference.location,\n });\n }\n\n // Validate relative URLs\n if (!isRemoteURL(url)) {\n this.validateLocalReference(context, reference, resourcePath);\n } else {\n this.validateRemoteReference(context, reference);\n }\n\n // Validate fragments\n if (hasFragment) {\n this.validateFragment(context, reference, resourcePath, fragment);\n }\n }\n\n /**\n * Validate a local (non-remote) reference\n */\n private validateLocalReference(\n context: ValidationContext,\n reference: Reference,\n resourcePath: string,\n ): void {\n // Check for absolute paths (RSC-026: URL leaks outside container)\n if (hasAbsolutePath(resourcePath)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_026,\n message: 'Absolute paths are not allowed in EPUB',\n location: reference.location,\n });\n }\n\n // Check for parent directory references that escape the container (RSC-026)\n const forbiddenParentDirTypes = [\n ReferenceType.HYPERLINK,\n ReferenceType.NAV_TOC_LINK,\n ReferenceType.NAV_PAGELIST_LINK,\n ];\n if (\n hasParentDirectoryReference(reference.url) &&\n forbiddenParentDirTypes.includes(reference.type)\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_026,\n message: 'Parent directory references (..) are not allowed',\n location: reference.location,\n });\n } else if (\n !hasAbsolutePath(resourcePath) &&\n !hasParentDirectoryReference(reference.url) &&\n checkUrlLeaking(reference.url)\n ) {\n // RSC-026: Check if the URL leaks outside the container\n // (only when not already caught by the more specific checks above)\n pushMessage(context.messages, {\n id: MessageId.RSC_026,\n message: `URL \"${reference.url}\" leaks outside the container`,\n location: reference.location,\n });\n }\n\n // Check if target resource exists in manifest\n if (!this.registry.hasResource(resourcePath)) {\n const fileExistsInContainer = context.files.has(resourcePath);\n\n if (fileExistsInContainer) {\n // File exists but not declared in manifest - report RSC-008\n if (!context.referencedUndeclaredResources?.has(resourcePath)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_008,\n message: `Referenced resource \"${resourcePath}\" is not declared in the OPF manifest`,\n location: reference.location,\n });\n context.referencedUndeclaredResources ??= new Set();\n context.referencedUndeclaredResources.add(resourcePath);\n }\n } else {\n // File doesn't exist at all - report RSC-007\n const isLinkRef = reference.type === ReferenceType.LINK;\n pushMessage(context.messages, {\n id: isLinkRef ? MessageId.RSC_007w : MessageId.RSC_007,\n message: `Referenced resource not found in EPUB: ${resourcePath}`,\n location: reference.location,\n });\n }\n // Skip further validation since resource is not properly declared\n return;\n }\n\n const resource = this.registry.getResource(resourcePath);\n\n // Check if hyperlinks point to spine items (EPUB 3 only)\n const isHyperlinkLike =\n reference.type === ReferenceType.HYPERLINK ||\n reference.type === ReferenceType.NAV_TOC_LINK ||\n reference.type === ReferenceType.NAV_PAGELIST_LINK;\n if (this.version.startsWith('3') && isHyperlinkLike && !resource?.inSpine) {\n pushMessage(context.messages, {\n id: MessageId.RSC_011,\n message: 'Hyperlinks must reference spine items',\n location: reference.location,\n });\n }\n\n // Check if publication resources point to content documents\n // RSC-010: Hyperlinks and overlay text links must point to blessed content document types\n if (isHyperlinkLike || reference.type === ReferenceType.OVERLAY_TEXT_LINK) {\n const targetMimeType = resource?.mimeType;\n if (\n targetMimeType &&\n !this.isBlessedItemType(targetMimeType, context.version) &&\n !this.isDeprecatedBlessedItemType(targetMimeType) &&\n !resource.hasCoreMediaTypeFallback\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_010,\n message: 'Publication resource references must point to content documents',\n location: reference.location,\n });\n }\n }\n\n // RSC-032: Foreign resources (non-CMT) must have a fallback\n // Only IMAGE, AUDIO, VIDEO, and GENERIC types are checked;\n // FONT, TRACK, STYLESHEET, LINK, etc. are exempt per spec\n const fallbackCheckedTypes = [\n ReferenceType.IMAGE,\n ReferenceType.AUDIO,\n ReferenceType.VIDEO,\n ReferenceType.GENERIC,\n ];\n if (\n resource &&\n fallbackCheckedTypes.includes(reference.type) &&\n !isCoreMediaType(resource.mimeType) &&\n !resource.hasCoreMediaTypeFallback &&\n !reference.hasIntrinsicFallback\n ) {\n pushMessage(context.messages, {\n id: MessageId.RSC_032,\n message: `Fallback must be provided for foreign resources, but found none for resource \"${resourcePath}\" of type \"${resource.mimeType}\"`,\n location: reference.location,\n });\n }\n }\n\n /**\n * Validate a remote reference\n */\n private validateRemoteReference(context: ValidationContext, reference: Reference): void {\n const url = reference.url;\n\n // Check remote resource restrictions\n if (isPublicationResourceReference(reference.type)) {\n // RSC-031: Remote publication resources should use HTTPS\n if (isHTTP(url) && !isHTTPS(url)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_031,\n message: 'Remote resources must use HTTPS',\n location: reference.location,\n });\n }\n const allowedRemoteRefTypes = new Set([\n ReferenceType.AUDIO,\n ReferenceType.VIDEO,\n ReferenceType.FONT,\n ]);\n\n const targetResource = reference.targetResource || url;\n const resource = this.registry.getResource(targetResource);\n\n // Allow if reference type is audio/video/font OR if the resource's MIME type\n // indicates audio/video/font (matching Java's isRemoteResourceType check)\n const isAllowedByRefType = allowedRemoteRefTypes.has(reference.type);\n const isAllowedByMimeType = resource && this.isRemoteResourceType(resource.mimeType);\n\n if (!isAllowedByRefType && !isAllowedByMimeType) {\n pushMessage(context.messages, {\n id: MessageId.RSC_006,\n message: 'Remote resources are only allowed for audio, video, and fonts',\n location: reference.location,\n });\n return;\n }\n\n if (!resource) {\n pushMessage(context.messages, {\n id: MessageId.RSC_008,\n message: `Referenced resource \"${targetResource}\" is not declared in the OPF manifest`,\n location: reference.location,\n });\n }\n }\n }\n\n /**\n * Validate a fragment identifier\n */\n private validateFragment(\n context: ValidationContext,\n reference: Reference,\n resourcePath: string,\n fragment: string,\n ): void {\n if (!fragment || !this.registry.hasResource(resourcePath)) {\n return;\n }\n\n const resource = this.registry.getResource(resourcePath);\n\n // RSC-013: Stylesheets should not have fragment identifiers\n if (reference.type === ReferenceType.STYLESHEET) {\n pushMessage(context.messages, {\n id: MessageId.RSC_013,\n message: 'Stylesheet references must not have fragment identifiers',\n location: reference.location,\n });\n return;\n }\n\n // RSC-009: Non-SVG image resources should not have fragment identifiers\n if (reference.type === ReferenceType.IMAGE && resource?.mimeType !== 'image/svg+xml') {\n pushMessage(context.messages, {\n id: MessageId.RSC_009,\n message: `Fragment identifier used on a non-SVG image resource: ${resourcePath}#${fragment}`,\n location: reference.location,\n });\n return;\n }\n\n // RSC-014: SVG fragment type mismatch\n if (resource?.mimeType === 'image/svg+xml' && reference.type === ReferenceType.HYPERLINK) {\n // svgView/viewBox fragments can only be referenced from SVG documents\n const hasSVGView = fragment.includes('svgView(') || fragment.includes('viewBox(');\n if (hasSVGView) {\n pushMessage(context.messages, {\n id: MessageId.RSC_014,\n message: 'SVG view fragments can only be referenced from SVG documents',\n location: reference.location,\n });\n }\n }\n // RSC-014: Hyperlink pointing to SVG symbol is incompatible (can be inline in XHTML too)\n if (reference.type === ReferenceType.HYPERLINK) {\n if (this.registry.isSVGSymbolID(resourcePath, fragment)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_014,\n message: `Fragment identifier \"${fragment}\" defines an incompatible resource type (SVG symbol)`,\n location: reference.location,\n });\n }\n }\n\n // Check if fragment target exists (only for resource types we parse for IDs)\n // Skip remote resources since we can't parse their content\n // Skip svgView() fragments — they are functional, not ID-based\n const parsedMimeTypes = ['application/xhtml+xml', 'image/svg+xml'];\n if (\n resource &&\n parsedMimeTypes.includes(resource.mimeType) &&\n !isRemoteURL(resourcePath) &&\n !fragment.includes('svgView(') &&\n reference.type !== ReferenceType.SVG_SYMBOL\n ) {\n if (!this.registry.hasID(resourcePath, fragment)) {\n pushMessage(context.messages, {\n id: MessageId.RSC_012,\n message: `Fragment identifier not found: #${fragment}`,\n location: reference.location,\n });\n }\n }\n }\n\n /**\n * Check non-spine remote resources that have non-standard types.\n * Fires RSC-006 for remote items that aren't audio/video/font types\n * and aren't referenced as audio/video/font by content documents.\n * This mirrors Java's checkItemAfterResourceValidation behavior.\n */\n private checkRemoteResources(context: ValidationContext): void {\n if (!this.version.startsWith('3')) return;\n\n // Collect remote resources that are referenced as allowed types (font/audio/video)\n const referencedAsAllowed = new Set<string>();\n for (const ref of this.references) {\n if (isRemoteURL(ref.url) || isRemoteURL(ref.targetResource)) {\n if (\n ref.type === ReferenceType.FONT ||\n ref.type === ReferenceType.AUDIO ||\n ref.type === ReferenceType.VIDEO\n ) {\n referencedAsAllowed.add(ref.targetResource);\n }\n }\n }\n\n for (const resource of this.registry.getAllResources()) {\n if (!isRemoteURL(resource.url)) continue;\n if (resource.inSpine) continue; // Already checked in OPF validator\n if (this.isRemoteResourceType(resource.mimeType)) continue;\n if (referencedAsAllowed.has(resource.url)) continue;\n\n pushMessage(context.messages, {\n id: MessageId.RSC_006,\n message: `Remote resource reference is not allowed; resource \"${resource.url}\" must be located in the EPUB container`,\n location: { path: resource.url },\n });\n }\n }\n\n /**\n * Check for resources that were never referenced\n * Following Java EPUBCheck OPFChecker30.java logic:\n * - Skip items in spine (implicitly referenced)\n * - Skip nav and NCX resources\n * - Only check for \"publication resource references\" (not HYPERLINK)\n */\n private checkUndeclaredResources(context: ValidationContext): void {\n const referencedResources = new Set(\n this.references\n .filter((ref) => {\n if (!isPublicationResourceReference(ref.type)) {\n return false;\n }\n const targetResource = ref.targetResource || parseURL(ref.url).resource;\n return this.registry.hasResource(targetResource);\n })\n .map((ref) => ref.targetResource || parseURL(ref.url).resource),\n );\n\n for (const resource of this.registry.getAllResources()) {\n if (resource.inSpine) continue;\n if (referencedResources.has(resource.url)) continue;\n if (resource.isNav) continue;\n if (resource.isNcx) continue;\n if (resource.isCoverImage) continue;\n\n pushMessage(context.messages, {\n id: MessageId.OPF_097,\n message: `Resource declared in manifest but not referenced: ${resource.url}`,\n location: { path: resource.url },\n });\n }\n }\n\n private checkReadingOrder(context: ValidationContext): void {\n if (!context.tocLinks || !context.packageDocument) return;\n\n const packageDoc = context.packageDocument;\n const spine = packageDoc.spine;\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n const spinePositionMap = new Map<string, number>();\n for (const [i, spineRef] of spine.entries()) {\n const item = packageDoc.manifest.find((m) => m.id === spineRef.idref);\n if (item) {\n spinePositionMap.set(resolveManifestHref(opfDir, item.href), i);\n }\n }\n\n let lastSpinePosition = -1;\n let lastAnchorPosition = -1;\n\n for (const link of context.tocLinks) {\n const spinePos = spinePositionMap.get(link.targetResource);\n if (spinePos === undefined) continue;\n\n if (spinePos < lastSpinePosition) {\n pushMessage(context.messages, {\n id: MessageId.NAV_011,\n message: `\"toc\" nav must be in reading order; link target \"${link.targetResource}\" is before the previous link's target in spine order`,\n location: link.location,\n });\n lastSpinePosition = spinePos;\n lastAnchorPosition = -1;\n } else {\n if (spinePos > lastSpinePosition) {\n lastSpinePosition = spinePos;\n lastAnchorPosition = -1;\n }\n\n const targetAnchorPosition = link.fragment\n ? this.registry.getIDPosition(link.targetResource, link.fragment)\n : -1;\n if (targetAnchorPosition > -1) {\n if (targetAnchorPosition < lastAnchorPosition) {\n const target = link.fragment\n ? `${link.targetResource}#${link.fragment}`\n : link.targetResource;\n pushMessage(context.messages, {\n id: MessageId.NAV_011,\n message: `\"toc\" nav must be in reading order; link target \"${target}\" is before the previous link's target in document order`,\n location: link.location,\n });\n }\n lastAnchorPosition = targetAnchorPosition;\n }\n }\n }\n }\n\n private checkNonLinearReachability(context: ValidationContext): void {\n if (!context.packageDocument) return;\n\n const spine = context.packageDocument.spine;\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n const hyperlinkTargets = new Set<string>();\n for (const ref of this.references) {\n if (\n ref.type === ReferenceType.HYPERLINK ||\n ref.type === ReferenceType.NAV_TOC_LINK ||\n ref.type === ReferenceType.NAV_PAGELIST_LINK\n ) {\n hyperlinkTargets.add(ref.targetResource);\n }\n }\n\n const hasScripts = context.packageDocument.manifest.some((m) =>\n m.properties?.includes('scripted'),\n );\n\n for (const spineItem of spine) {\n if (spineItem.linear) continue;\n\n const item = context.packageDocument.manifest.find((m) => m.id === spineItem.idref);\n if (!item) continue;\n\n const fullPath = resolveManifestHref(opfDir, item.href);\n\n if (!hyperlinkTargets.has(fullPath)) {\n pushMessage(context.messages, {\n id: hasScripts ? MessageId.OPF_096b : MessageId.OPF_096,\n message: `Non-linear content must be reachable, but found no hyperlink to \"${fullPath}\"`,\n location: { path: fullPath },\n });\n }\n }\n }\n\n /**\n * Check if a MIME type is a blessed content document type\n */\n private isBlessedItemType(mimeType: string, version: EPUBVersion): boolean {\n if (version === '2.0') {\n return mimeType === 'application/xhtml+xml' || mimeType === 'application/x-dtbook+xml';\n } else {\n return mimeType === 'application/xhtml+xml' || mimeType === 'image/svg+xml';\n }\n }\n\n /**\n * Check if a MIME type is a deprecated blessed content document type\n */\n private isDeprecatedBlessedItemType(mimeType: string): boolean {\n return mimeType === 'text/x-oeb1-document' || mimeType === 'text/html';\n }\n\n private extractDataURLMimeType(url: string): string {\n const match = /^data:([^;,]+)/.exec(url);\n return match?.[1]?.trim().toLowerCase() ?? 'text/plain';\n }\n\n private isRemoteResourceType(mimeType: string): boolean {\n return (\n mimeType.startsWith('audio/') ||\n mimeType.startsWith('video/') ||\n mimeType.startsWith('font/') ||\n mimeType === 'application/font-sfnt' ||\n mimeType === 'application/font-woff' ||\n mimeType === 'application/font-woff2' ||\n mimeType === 'application/vnd.ms-opentype'\n );\n }\n}\n","/**\n * Auto-generated compressed schema constants\n *\n * DO NOT EDIT MANUALLY - Run \"npm run generate:schemas\" to regenerate\n *\n * Schemas are gzip-compressed and base64-encoded. They are decompressed\n * lazily on first access for optimal bundle size with fast runtime access.\n *\n * Generated: 2026-01-22T05:24:32.172Z\n */\n\nimport { gunzipSync, strFromU8 } from 'fflate';\n\n/**\n * Base64-encoded gzip-compressed schema data\n */\nconst COMPRESSED_SCHEMAS: Record<string, string> = {\n 'applications.rng':\n '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',\n 'aria.rng':\n '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',\n 'block.rng':\n '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',\n 'common.rng':\n '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',\n 'container.rng':\n 'H4sIAJC0cWkCA41SvW6DMBCeyVMg9sRJu1kOeYFEHbp0vZALWMI2Oh+FvH0xf6VUkeLJvvv+fLY6taaMv5G8dvaYHHb75JRuVE5gDFDcNa0/JgVzJYUgLKG1+c5RLqwXnqnOuCYUgbaJpxUYNVnpwGsvLRj0kjPpKrQ3l9UGLcteWGbOMmiLtGDfgIEfFZ71lYAes3nTNLvmvfd+2+8P4uty/swKNLCdGD5JN5HyDMTdJlJYYvCKQ4Jj8uuVdmZR1wdm0teacUSMU5j6kWJsWUxoMcOD+FqdnOO7LocMoe0sftDF0YB+ig/wwe1/nntdltsKuFiA5lAz60+uZ1IGbxq2YUivaw2VMXaYQlh9bXG3qboCrs6q+yv9qygx/qz0B2uCDqV5AgAA',\n 'core-scripting.rng':\n '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',\n 'data.rng':\n 'H4sIAJC0cWkCA8VYTY/aMBC98yvcrLQ3kvZQqWIDq2rbbg9sD4VKvZpgEquxHRmHhX/fsROIyQcBJRHc8IzfPM+8Fwf85z2L0Y7ILRV86nxyPzqI8ECsKQ+nzp/lj/EX53k28kOJGcMSQTbfTvDUiZRKJp4nSYz3PHSFDD2+9QLBEqzoisZUHTzMuVDwVUDEIJvdTXu3SqaBSiXJctcYth4SMqcrieVh6jizEUL+h/EYPfTxQeOxAVyTDeUEcczI1FGUEZfEhJliEMWTtQhSRnh2jhn6/X3+9S/69YoWQUQYRhsh0c/l2xx9nqCFTgrQN2CO3rD8lyYao/x58L0yalar76PV0F/C+SboMVZP+qSPoXpqIqObAEtWX/KWQIxyRWRM8I4cl2BRko3dRMo5kY7XnICVktsiwffKqL6XczBj8rI5NYwsA8v3VelZtUGhTPBKdZHos+O4lq+9x8WSYpv2+c7yMVp4Z13KtyqyVwb4bJNWxYtxEhgT1BYQpBNfBNSB+cAKwwpFRJJaRefcdSvdJJJ4C8Z2EKyuIAfCkaDBcbTlERkjVBlVjwFeJa3W0dpD71RF2tomHemO0lWqLE2egkOK88S3VaWnzF7lWkLtoNs6U53g76/vEp+jMo5jz1NL8Tpu+jZwdc64fDjQyBHuls6fOa9SzkQLv7R4oIvHzq3TUsh04ZLH9NWTeUmnXm8hnX21hQyLS84xCX0ZxgLrxScFnrvDcXpfk1TINDjEDmoM/YahX46mDrw1nRR6gxmsGd7VA4WiW/AZgY5e1P4iwDG8ob7iNMzvE7PnehOY9KtdkBG6ZIMsoy8f2Gi9GMECvM0J9kZGebMP2oC0i9xEiiSr3wnLJhWL936AIhpG/SAxvO+vT12wbFI6kaW59bo9yKpiuu5JVn/Rb2KB1c3PtLIuGxgUoQHrawk21C9CA9Y3ym0gYMWGnACotGkCp9CA9Y/ibuBwHh6ER8fr9T4//Kx7tkTJ9/I/gWaj/8VHiKo2EgAA',\n 'datatypes.rng':\n 'H4sIAJC0cWkCA81b/1fbNhD/vX+FF/b2klA5BLquY1DWrvDGG1AeoW97M2mf4iiJh79NUiDp0v99J8kODvEXxXbZ+AHL1un0udNJdycpB0czzzXuCGVO4B82uuZOwyC+HQwdf3zY+HB9gl41jl4/OxhT7HmYGkDts8PGhPNwv9OhxMUzf2wGdNzxWYdxOrX5lJKO5DPEHPN5SM6cAcV0vmx1f39v3u/JRrs7O93OH+dnPXtCPIziFqzx+plhHAydO9HhvjM8bCyrkB14XuBLCkFDRo5PDB975IHIPH0X1QMFJaP1atMlM8fGbqMT8ekoRgVcr45PChgDRXnevWLmvVLcXeyPp3hMYGBJbh9vf7l88UMG628QMtaH8PqqA2PE5AB2u2i3sxV3ZiCUC0r1tUQjvhui4rARc6gI5PSdUYQBLGHGhqkgwIaqdX/xywV0VowgaTJpQBSfEta0ztV1GI9f4DXwyXt6HtCI2YZ2rdCs8TjoPPSiCba8+PqmAALoDUW2PYjZXwOMnhaOXj6QXlXjPL9+/9vxRRGUiCx9YKK6WoD0CqdqTJiHpapWwIOB4ytCoqhScURVm8xV1cT0YSJ5IZ+nsuXBLYldnqwLMTjkiJPn+GfEH/NJ43X3oCNrHuaiYLIBGE5m/AGBeKumUJ8Lp06uSFikVEGWKrusqAXFtePpIhGkmWhkZWVEXB8NMElBZU8Cx04s3WkLd1J5eTRJkYRQSd5ahnN2fHp1mqox7M8/QFWmvqImOlpTrFYb8CBwmekQPpKNJtxzO3Rk7/346uUWDkPiD50ZepvXiWjyfWdKgY0obt1h1xkieEdhwInPHey6c8SmlAZTf0iGaABvIbYJMwzJt2AEhfQbKyaTlYkHLHCnGZOlBM+VcUsxj0352RNYgWxOqBknErnsHexj2YYRvlE/Kw1L+adio3D8EcXLtCZpHh5MGCT60bLGF7uvXm0xYnPIstALc1er0e7L7stloz3zBx1bE7BEIc85ZbiREHMYNPAyFkaf36A/d9CP32x9+x32wp+2b9DNx0/97U52ldmu6npi6OAJ10Y1xW6WktaxsIDzvSBjzJ07cupzMia02DZUHgqGYNOAzX2OZyRaQIAb8iN2yFH8mM7oJRuaUcPUkVzHW9EfhQFzEtyKgMbkuSAf8ayIMOqpUId5iOK6WkyGo5EbYA4uvIqtUIJd5E+9gaaJyD5ThVM1m6ygssVyLHOYZgeexzPbnTLZeqfqAqDgJOdAKUinfn2QVuPuMmvpxxvW364KQ0YbJiOCCydDBUttkqWl9Z8JDfTyeiXfSj6/3jgroYeyc5ezUcc8J87oi+aWIJX/RFQssiE5NyAohXJPzhd0MnVdZLuBfYvAA08f+d2N2V1iKgK7GjmKENqGCJEnuBUlksDQ9MPEfF6L6fNMLsvomjes3bLASfe39+HxfV+WE8XmjamqW0eS9pF9rlpoZRj/df/QT7LDyQIGbcEWHtPrPTsZKpoAd4GNB/kb1SENQkIzsv78ADaXoRPtoW+4T5LFEz7PhsRObNDlbw2AWpvWjYOs/X7furHls71vbFsfDRgD0Pp2dm0bGkcTp3CFYV5yhcmYuiEh9gQJtzshzGHdbmeLAOJP4URsuRRu0IpOzEtByx37eAbKYOKwpLbtnyT7N244wYOMfEbT5TSdEC9myNx+bNhZbqdIyzKEyTdjSWIOaHDPxOJoBxBozcCXA5XYu7gl8/uApu9m6krVWjQtSDTMNhQ+WYO3fcs961v4Td/yL/rW7W99+Z31+hY5VnWjE/UtvFR09ErVCXp+rergaQXv+4JGV11llFCT5PUgfPKgJnNqFgXHMu5By7gHqbinaMIqKb9azJRUYsnIqQA6TBVCATKkwObUd/6eRoFaAn0mrgyxN1mRFKMPV2eKWX6vG2ztDcldPPY2Y/fy/x7yyNDBICIFlwUb8HL8qyRU3t86kZeSUfZtis7THXCJ5VwxLprz5TiaoH8wDN+utJ5smZXzEQVpTnB6mp17WvGwioiA7J8XX+oD44JnrgCoiRBEhDsS16ILj91+C8XvFiT9Knhd7MGjW5e7GE5hnmaFE5q4m81LFd2+A1dx2YzLR9dQo15+bUWFc5BwNST+p/t870vrqNc6gsZL8pjqPG6oS57JXvwtmkY7bmS0rd/f/Xou3HBqC6MNbYx2SzuMqeJo4DOfaDoWSVtluCLDf/4FrEuVd788hZDinEdTxszDuCoiPq204nhNU1pBWl1aEGv/odgU6a4sPrLr1tETCA+bGrC3IQccYR8CJ31liEaC3JQ8vqYRNK1rox+tL/8r7Y3dYFBZfYrJ/09/zT9h3b7ZXqBky2jVFuXWJirW0YRG0PpYaRueFBSN5x0eQ4iHvMCD01wGJzJyQPXHU6Swq5LoHL0ngqSCA/hHEYwW9T0ht3qUOlcAkp5Ni1SqQ7v7lLEtaBRHRXpXEv5DywgFTOyWtg/90clUZInbGgkbqmeB+r2Mb8/Dhm3IPBlsHGksH9n58uZ5lh0ANwaZls3hEqpbJS5ARyqwfZ5dqEdXEWbboXbNgL8CyjBwS9xx20Sp64Xm+qdW5fsKSqq/0jPO0nk+s6mTPBCqj6c5DOypWOey883SPThwTQZWJkZt6MSELeT6LkfOM0y6vDacz8k9La0r0fnHT5k7HF2wNGlu7VmivHbelHLeVcO1aiUt3FdwXDwcilOLanu+P/e3f5b/65k4SWBCskpb5Al0z1tw9PTw+hSpph24AdXMDyRtpe27pvUGnWA0kv72pba/1TrlGQXUi80kVwxJuLyDVTR+peJ51YVUMMhOkXhHIiwIOYouiOmpXDGKmqxCLft7iJQ7jjX/KCIJfTn2dS6DivXy8rkLhAO4jHS7qT+L7OqgE/1E7PWzfwF2X7UVVDYAAA==',\n 'embed.rng':\n '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',\n 'epub-mathml3-inc.rng':\n 'H4sIAJC0cWkCA7VY23LbNhB9z1egzGNN0m4mU9uh5HHcdNIZ2/XUzkzfOhAIiRiTAAuAuvSpv9Hf65d0caFISqQsuVYeJAXE7p492D1YOrlaFjmaU6mY4KPgLDoNEOVEpIzPRsG3p5/D8+Bq/C6ZSVwUWCKuRkGmdXkZx4vFIlp8iIScxWcXF+fxHdaZ/bi7DRB4bW2VNMdLPrN7uYqVlhXRlaSxjZdijfWqpLdsIrFc9QX44fT0LP797vaRZLTAYW2hgvE7hJLvwhC+EHr/Fv+sJ/uBXDJojnMGEYEgNMGKpgh+6IwiZcEoNJWisAv3Ffqqgc6bjJJnKk+clwXTmX08FXkuFkAsIhnmM6ou3QaEQnQjuKZc1yGZgiD5CmFjAREZR5hzAVkDihDIbSy76z6IsgElBaYZMc8USumUceuqtkXoy8O3z+vQPwlSFfBDNb7t88dHAIQ1eJpUmiqEJa1xNVy9FfVhaE+UcZJXKUWZpNNRUAApRf4hhNVI8pk9dHfsiC4Be4q0QIRJwD83mdTlgQiQwUxlK+8YrBwPiOOCjoJ7wR3j11p7t7BlnWy9Ytb46h5MmhVYo0tCS91egkWuzD7bKEHc+6x/daC1oOhdexnAqsSEDngdbs2LeJlBWR5mZzsOCiqkhlL1CuOz01itONShYvuas7Sc1g5+jEW5YZfEm4wn8da5JFAy/nTrOohMG0DdrJ2BWfeIk9iVRauyoLEBgKt0hUroJeDBqYCrR9+hGoqvRDnQlJ+gZ5bntvUINJUNYPZDdZoq+7I0Xkw5DlRjd1NTjyQTjPSnqECBuGakw1Tr+UMLd8t1i4m28x4aBNwNkkErbuiMVTWrDx2V6U+sa9sk1uCkZTWJNrZ5kG1QSeyVoaP7N6IogNT1mTpVsH1vn4NMgPtLUwqNxHQAOg9GBODkigk8GAUMZFHmFM9pLTiiNNhwPoTf1ppB0UBvm3QSMdyGW9p6PGxKFXlUZofBg1O4NFfecXCBFTiwiFQEoUykvaFd//bL9XFgYclwNMvFBLdKcBDNjjqPCpHSPHLi24BxDVcD2aKDcU5lNAXVcdEPjKbmsz1imV3b3ut+euoOKwIuHjfk+ElIyIhX//79j0I2t48huAudKML9TFAqGaiGm25gchGVhC9NYYY0YE9QUmjo0LGZcoxWWh31g0+gxTPliObUjCIBPAeBJdjNLEZUMTj8+gQ7/Ra7CN+frKukYGPjn9tPMQbVSuGHGtfbnSCAQ6DuE1IURoyt2+tzNVPxQzXJGYlVJhZ/TKpZRGbsiqWji/OPF+/JOdAjEba+XFI4H5IWm2vkUe5fBgYv9KvEan1zbXWBlV9geoVUSQmbMrKp0m1tvuyF1ye8HlP32ml3SLfwNqaL4Y3rqntZ/CNfTjVvB5q1r+umiZuEhpuqz2kj0NvH1chNHWaX4qX9irLbSklyqBDtwah3WLfR/7iovfK88sRa5A6baB3Wb6X7xwEj898BAxgmXeqvYLIvX+/1LyrFr/JOyL7GMa9aMIU1ELq7X0KxgwXvsBmBvJ3fvmOWBE2vKDKjC1Sam5O338iDsdPn0L8sJrE1O9wNLkuQVUtl7FIIfQrfA7MbbjeH087QvgdZfac/QJT5bEjaMxnvk/5ZsXkH+oFQX5awYzVrn04erWMHgm0q38udPOBoU1LfqMH7DmJnl2+8xr1ds/chOXbHD3R6rQft98u3FIV2qkdWhn1Y7cqDScFndX9j/vrQnPEAkCT2f0Adv/sPYuZvzHIVAAA=',\n 'epub-nav-30.rnc':\n 'H4sIAJC0cWkCA61TX2vbMBB/jj/F4UBJ2KIkzbotgRI2VvYyytgY7FWRFVtMlows1x1Jv/tOsmM7rUr3UD2I0/393e9OEAFAwve0khYUzXlZUMbhGuLM2mIzn9d1TeoV0SadL9fr9fw+s7mMXVTvzYtq9yhEJMXeB10uFh/muih9SATRGMavcaLxGODHzbdPv+H2K/xkGc8p7LWBm++/Pm/8Dbf0TqTUCq3gi2ZVzpUtEcTwYJ5XwuO7AxCKySrhEDtOZp6s2WpBjGIxHFoffxS9I9RaUyJxnUyUdnH2b8Gd40Pkbuw0NrzkNgabcTcsoYTvSu8HaayGOqMWhIWalm3gjiMnzYA2LqszAaZy3rRKHSXAdJ5r1QLY0VKwZrpPMSHUBv/kPEgk20Z/ca5nkpZl2GSFlTxsQgjPWPy2hU1i+VEFDYWjTtmgTSOf5mSZjM5s1AhKRF5IwYQlyEa7StFoNDoGXCVVSU7Nn/9wNVpykmg2Eyrh9y96FTTlUpT2RUermfOZbvGe+tVx63dFMk4TodJ2HjjELDW6KgiXPIcjZMtOuuykVSe966SrTnrvpdPOu/VwbWNmp3Y75V6HxuAWx8NFjoNLddElIEwr68Ifhmk7LQIP9LN923tq6Yf5GJjT99jwccCr/TaD6qgLAxgYME2vFW8ClcSgFD5cKRGqJZ4t1luugXqmSZEZ/JgqRfInk6c6/BjKK6dnZExP8Nql8WF7qWs49n1E/wAgI0XDAwYAAA==',\n 'epub-nav-30.rng':\n 'H4sIAJC0cWkCA+x9+5/btnLvzz5/Bevcm7NOrN3YjtMcH8ep48eJb2PH9TonuXXclpK4EmtKlElpHznJ/97vAHyAJJ4kJO26zqc93l0MhgNgMBgM5nH/2/NFEpxGWR6ny2+u3zr84noQLSfpNF7Ovrn+0+uno6+vf/vgT/dnWbhYhFmwzL+5Pl+vV/eOjs7Ozg7P7hym2ezo1l/+8pej8/l6kVwPgG+Z3wsrsCxKwvPljMEt86NJuliF63gcJ/H64ihcLtM1fk3Rwr7Ne0erzbjxnXi6OmEYbn/xxT8fpau8gFR9JV9nm8l6k0Uc6zTERy5W0Q/xOAuzC9kQgPjW0S/PfziezKNFOCp75Ncf/CkI7v/TaBR84uO/YDTaHsJnyyReRtPgJEsXAc3hiK3J6M4Xh9lyFpzF63mQYq2zeBrlrOMVH1h+OhstwvV8kXygA4yXk92OrEEI9uoiXe6OgGl0go8Hy3ARfXMdezFdJhds/6EtvDdNJ5tFtOTi4kHw6skPD38JXvwt4Ds2OEmz4PvXz38I7t4LHjHCg8eEL2bShXC0//vk/lEbK/+W74FtB2VnRn4Il7NNOIuClyGkdbSGUA9GQRYV0xov8X+TZEOSPhgn6eRdEObBMppEeQ6huOsZaX+Ird1pfhj8wn7KIsjweMIWT0VVtFjhDGGsc8QH2WUjQibyEc6bh0mSnkXTbkeMkgGp/jt4PY/zgLAF4clJNFnnwSI+j6aj4vwMFul0k0T5X4OzeZoAij5+V4uy7BLk83STTIM8XqzQcRwFSXSyDtIN/v8kWM9p+cq1S+J8fXgDaGXb5vSubtewqf2S9kd9CINH8mgdrNOgnhv6bRrnIf0W4Nx/t1mBgHUGYidoBSvxrea4MsRGwQFO7nvjMI8wk0GURNQXs4oxZhhouAzuk+h7cEM6vGW6fJVullPwxmoVjpNIO9LmOI8hxCAraFNoB6waVPuvkFDBSRSSmpET5etgEi7/vKbFyyoagZqR8mmy/uvo09n6r5y/h7A05oBQxL/pxq8hLo+yOEzi30AaBEAParYr+ItTJ1yvs8NwebGeQxVVngI/x8l0EmZTqYC3+m+fMu/hEpIE44zHm3XEz1yMmM1DvgonkYq036Is/TF7nmZsPTjqEk35F/rb8uIFULEFZH84akHdP2piUvNcsSi0XY2LQqMq9rXDmIoe9YDaxEP+RFkShafiELPopElhvFxGAt9U3WWwTRYTpqn9qftHAnXGSWqRoJmlSYoPOc1SdxLur6PzdU17lzVkI2+uozDydvf2XOxeDjBSoc2EdCVTyoFC43tSsN2jJMxzCL4rIgeeF8Mr6VdqPDrtRTl5q3kW5hpOfEnt0Xa+fYIOyu9mqcVn5bxbjWlPpxPf47Zs+ajY58/TaZS4HVWXgi0L+h2OI/mqVfNVSBzn84dPuyVDG6j2KUqb7NhDlKoHu87CJY6EDNRb7KYdjpkR43+84hgvDblXw4r08zxaBpsVdhhY8WaAuw7u+PfH0/RBwMbCTCG46aQmvZtbPTUC7WGpR7rr3UqBJllsqcaWH+LyGE+EtVSAxbe+XpqhVrgggRIzILuh1pLLkblFytUDTlc0IWFi0loxuKnIzO1+DogmpCp5wrWO17iR+sFFFgJPqJhGrcbVcy2xAuUuqa5wHKxqkZFE55+weq07meW3+aIpPi82KilYp++iZbXu/ajgy62gQuAF+81RYbMXBrAmtVilBuxai4Zt3/JbaiLbs1DauqrlUC7IJotFFu3c54VupWl82GD4rlBp2dWAhc1jP0sN3JbTJPZhQJN5Gk+Egx1/Og2TTRTQw9w318k+DI2r+7h3/QGT6dkpbtGsQx8UGF64SaBItTDcP2qStYuVYgeZj0NjGlcH2ECRmhRvDb4ODlJyk3DtX0rTkBUSqm6SMBvnkwfJOuuyAP89WyeqpnCzTlttTb7RydvyFYI9NtA8i8ob/hQG8xB6Hb13RcvTOEuX3IJ+BvUkYj3puYA9PQS4N2AjwIK/KlDBzE17jX4+ZLDHmIolXoAKbZG9OgCIP6rB4L9UvDPIucEHk4I+wueRUb0zFUNqL90EcM0BQFBwvGhsge3LlnK2FXukZBaTOtEm3obBr0l5KPiGN1476LYXLb83W4ohFI30MCbDXeGth8j+/I/iz2WPxnCKtj+CT9mGovmWoC8IkHyhnD7rrxSLarPpapmp0sBaAEopJxrJudC6iGCPk8u2ZX/Jph5LeQnzIT/y9YW3S8g6HMfLaXTuCV04ocf2d1G1ab1JJD5oBSOIjYSFTHomBWjYxaCcNhVnNtvV1yRMxUy8dGuFClxC/v7s+NlrvKmf4pWTBk1HWVi8seOBZRqMcRugPxcEcL+Wh6+ePTTvt3rxFKNqAyiHBZAkHEcJPeQPm2huk/Cxa0hlOYFVxpcpAFcv3Z3bzdYBu6BooPGzZeoRq9azBaDWEitIhdAUSB8uK5nrjmj9bpHdagcE8VlXfY2wAdrK7f2jGrYfdScRfCxWWZxmcLlQkSgDUs/uPJ7NVacRc9fYghKuHiBnbMXAxMadSFq+NVR2KKFROb3mqzBDo5hl29E5XoC2/4AnGsEMxu7HpS/w1XIuIe8J3BZx6L1mw1SRIkoH+YOKwMZsxgzr3H1ZKT9hZGq2KuMsPaPHtBFzjziv2Ls+HcrPH5Kn2N2qw2HR4ZCgLE1W0i+O0myEQ/oszSobr9vH4VJOpzxDoPYzvHbtPJ/e43unviHAYw2n2TL4Jrh+cOP3gzf/8Z9vDz/DD//5Zvzd2zfJD2/fhA/fvlm+ePvm3b++ZX/Pj9++iZ7wtpOn/G+rlxwue8XbCH79mrfh3zfpj28J5sb18vKhv3KUVmsFrz17zDnt2eNXT55aPOW35pBz1YCJ+vX4c7eBgBTjyqqo0qOtxIkSLzN0HuYRjDO4nE0bpni7DzH+9k7+PMznIyvUjMXRCoNTpeX1W7hPDt0WrrgQqEQefobTcAjDnDUHNu4Y/QYx+vbNF6O/vO0zksNVmsOyd6qb8xLEB6lffPbmFkhl9H7Wh15oOKNlNMOkamkWwXzQrZzgtjGJEbuKsgn525QGGZOYvfXFFyRpaWb4Uh78esi/eOPbG//XZZrgZRDqDize7oHXBAoPSMCXf7/xrTO5NjzYAhxypjVYUJxorEA5tAYMmgYP0ZJtJcCDmdbPSuF/onVcy+a2fHsNX+00c5J8XJZXiB1OCupjPCQYkANSIoLi7hrD1GInLcuVdHpmVSkxr54pVZc6NITHRESwG+FhJUQIwXLE3OQDdEfUykmAdxnSgOnfBXRgZjgu+rKTHy8tOPgnLDzn4GweT+YBvLvu8cabZJq6Gfzw9GbwFP//6BU3Z1dKfuvxUTI9IENQxrs3UEGvJwVkUfQv2Pb6gzfBn0affnL++K9vP7t/xCBqzZ6wlTp94zZXT8+LH18/wdMVQiBg3IbNbUy2OMSupFmGgBmKnKH5y4OfPv/iiy++KzohniScTkv3pOr9qjNff4X9bl30oZiGPyN+KV1jFVZZitf9BSFaESwoQ6TDJNzAJU6Yf1JRKTCCP4vhySxOkmAMIxqCI2CRYC7YDcKoQxZhY+EjCFbJMiwqPbzFFEiBH3D/pdCKYvKKThHCgYJZhCe5iO7ITMcTVtGaT5kcYryl2Q18VQmUQ7pthUpZNV8Cjaw2+N5H9GB3r1e0r+nfYdT99OrZYTjO0wQ2Bs9k1njVC9P9vB36HIE5SpMERREhQPMd39J/jnHn/DMLKmK9dMaGa9dolME/grN7DDb4oxYqjekFI+kMAB0popQj9QF+LvzckilNqcJsu83vu67OJE1S5f2ANbINXE0kAse/ub4I83cjmszrbDJp1xMAuSuXLxZ4Do9gHiDkBON8zPKuDnywwMFG/VVjef7s+RO2Ji7X7QqpC0NO4D211pFyzCAYMQ60FJzkQAkdBIjcU5HxpMhb4DIh1dlyWGY9cFojMMioRZWXkQIJXkTnqpG+4s1bnezCAWrUfFlsfQ8R1gTEH9tU5NhbwTtm4GvXzu41CDHqyeejDZakiPvUhEeOfno4KsNDvZOuYZhpHL7fRJkyQvc5QQT/BpDYaWdzKcPwH/IPOJBVeW8oiKoiyx8BSElVSzdtvXxJaC5dPpqOIzUaO+Ibr6mqAdDZh0Dqf40uECYPYPepbb3dW8rOdANLBDvTD23oO2bwwbHuNPeyu5lJpvFE15bpmzFEDCfnWQm8XenOQ1dGeTSBirW+GK3SJJ4oCSxjqo4L8OAlA98qiUVAtYGypxzKQJBv0ZJDaxmn5yN2vxrZMFvRIygeKnru69bjcvdVv36QZZSt0xWMzKcxmVfSpcS/VuIXYESaYzrwaBPPYl8YoSQuJM/5/ahj+pENNvH9/cOdW/v58LlSTd8G11MGzh3rdMFCySgST3wm6UgmBlqFwBPoVqXSIp4gMQd+GsEMAtP3GpqDUr0oYQPECxawVg/DsmuhgXov9zm6rasG8+9oUxHP2eELgS8sRfxmyZLOjNOpUsA/efT8YXHneVqAfwfwXUl6cmwhDTdBih8K4leRKcL5YMDLHwQpmTImHkrfJPyoziTy9DbFZ5Oj4Pdp+s5nJhFDzqGrN6k8opaL8VG+WZGBVJelhW8WAbLK+/O/Z8oKp0Ok3lFOE/NDFXjQY3Cta/KGmtrDLE0gZhLBz8wLMlxUk7RimcEoVyso22zE3lCCUye1BWEoujFyXdaeC4OxbdZrf0Od4PZ8ndL9wSuaoJhu5A05BRbhnuENH8hM/eLDEck2TG2WGYrUL3cjUg2PZ6lH8goR4QvfSRRNt8ZAJ/EM1+mtoZ8hWdvKF7J5FDIjsid08cIbKnrt8Ierti74wBWvo0oxG4zP37Yj0jwKmkUYe5PYyMkIK6+3PQBZsPGJaxx6O+kInU/+KPH5PpZKvBkEQHVjHYqU2zB8YSui7LxqSTA5zIA297jiXmeQIeMiflsHSBbNPE4o3Mm3S24ehdmkelr0g4320fboZY7S9av+YIQJclj7w7aKl3618Rw7tI5KG4yNZb31hQ3eaR5R4Xa1La4h7B61FKBbhcso8YYPkSIeDx/k9EJmGm88vc78qRaEy9P5Tbmx40m89ng1r1B6u57XGH0JhQrjtq7p9Qf86UQ1TnjALZYUUYWTbUT3I7/T7NEcIOL0ahIQELNH63h54kPBqdB6szZUGLd3566J9meDqMkWLPw+8PmyDVQI/dkHKpR+bAQVOjjlTCnjv1ecfmwPAj4vJ3sDn2cR4tGsUeH0ZEAQ8K3nW93itS+CT6zeLsUVRr+X2Aqtr4tsjdDXTbPGiKS42+SAbd5mq494u9G2MG7pVit8hfkO+EWZAKlfjP6u3zVSX1fwGqPPa3iN1ddVXMBYVKbziXRrV+n6C97uqzVKb3dWcnuCbAyntoWeDPhKFcjfpbDC6PtmISD2ebOo0HpSqCt8nlSYCp9XDaPCan+gkOsI3Oi460a+iib3EMzJjBM3g/KCc5MFFAELwiHhFswiFiEC4L14QSkI2Sd5ST0HEv2ZQCqUHi9k9fpg1B4frUeIqENaQy8nXI1z8m6ZniXRdMZckryiPkFokZhGxgtSVBVbTmNvxkPCOcYk+HwhZjgRWROnmFKvfgsFWhSkXc23gFdIDOMDKYLDVmABrygRSbia+3tu4DjL6oJ+sSIS2itCFLOMve59jtHrnp8Co19PNMKKHe9blhYovQ4+WsVsZ3rGCevmxu/YM9xpKk9MLxjPQ1LtfKI8SdO170WnpAW+D6RZkrISst5xehbGjZy0fhDykqi+NzstuuexA4fH11XCuELkJmIEQ686AyH1+W7LcfpzXWb4sDRCeQs/KHGoexZxq02SvN94Fh/vl16FZr4ZN4rI+MC5jr15czJ0aVWwSYnOoUQ5r25910P+0CLCykvgQoGrDO3iRCJyKqZaYlQuHCVsplSvmVLz5Gw0Oa9aSn94sQm+R4x08Iiej6PsZomGJdcmgBNUw07PKO4D+jDSAuX36mC+URUMlVOqnQQ7i1VjptQ91LdIKJJTbp8qRilbTkQMjIfqgDtcsLPo/QZO09PgAOm/45wSdLageO4fnnu/+I9n+uFlkcPg54evXjzD4uG7jWoY1VeLTEYsSwilqxnRN08JvswlgcodKMYETYPmkGyJwueq/jTIMU5kSidVJfClqSajXt7pEDx5+dN3AcxxyBnJKtsfRKvN+B5Ny82A/cg9fopfgHCG3HvVmrA0VDnKEnxWfy0H7HrCM01VTOCPr5QZaott8ZSq1UMneRd8ChXqr0L5el1CG86jJ0l4il0lpMFt7OuyRkYVjlhXtG6KA0PZ+O7m73Qnmory6jz9hJKoRol2DU1bCU0CF2ZlEKwyzQPSehQFZyyyEFB6BBYQVoYMVp+opNQLnEL3iNGxp8kERiUIWaV7eiSdHLJ8YSREWM12LkTIqsYiexmCEOCzZXyCixW2Lh3oZVl85rJCWw3bDhe54P+FpyGsGSSuSmnBMCQ80pIScQlRX8+WMHoAlImySg5BvMy48KILbIanCm6euz/F9qaSHvG0jpfMKdsIDo/ykGgsdZ0q67GsKIDQfJhE55S5tM6DoWZOoRvS7RoQA6I/7mMz8uNe2BupP3Tf+O7Ryy//WYGaVpAE772jo7Ozs8OzO0gcNjt6/eqIKpAx2XLr1uj20SdVaRn5fmx9S5Y7r13uqichzx4L0lA17YfIKiklAjw07PMvHlFOcDMFIsvICOF4enBTF2s7w0E3ytyBr6UB5+3Afyti+w/fnhUwALulUPMD7X4PZBxb0XGsJ+R4KHM+f/3jvz55YSKlAJMvTNHmhZBj41YtAXW0DJ2VIrusgZJWUj5JxgGXvdpOKSlDy5OLK3KJLuLlD9FyBueiB7e0OUQtiBEKADSrP/ecUCQYotSxr6KVaVKFJLfNsdeJbYdS8Rrp+CwpIVAlNaxxMEWUSteSGsrQ2aWqU2BEIrjFydPBiEPqFg+xYJwfnlB6UtmMIWUGknOq56voYjNrHFWzA/k1oDBLtD5hnUg9PspOJnf+8vVXn5RPd6Mywaz0Iyzh2NEmAxr68RN2ER/hdySeYo/89HQM2wnS0aKcVTQdjfEbpcpFwoDmjUs+NTR654lRomonQx2Ms7Fu8syqTvgkOR516ONwWaeadPlOo2Ov88nMFPDvyMLKh0hkD0rtOaquOyZu/PL2119/Uvifjb48vG3V6fZXt76qOt05/GcbXmulMe2Xkjoc/fZw9O/IH/tPn/wfZiP4/NfRr6iL8vmRuulQn77aYj1L0nESdlbVmFt1oGDB4fuiyEDPsu9FmZk3ioQ3LB1UfoHr+jmusoxDxIT29GhB+PjF2rB60jIOspXs0jvwPCpLDRTYTIR2amTIiGzhHEhh8SXjHOoo6hQ4HMIy6xErX4AjfAiv4EUnGS03i7Eli4gVL5qDE2pdWO44aTkKGVK14vnknDkyUG8k/xomAJSlI9xIesZ9K7yQ1NS7+8jS//g1f/v5UDIUJYxU13pZyna5EBWKFqnytasv9Pg5PuWPO1JDXb6IqwBOw94iUPY/pBXTbYjtDSil+PmY7ZfRU7yvjSZUbHHEcswNRAerNyl2HjGSCj2BhrgWsJkukkB4uFzpigb2yQV/8Gv+2Q1e9eQe/rnLc8ELP4o1UgjWkCV+IBn7/n6rKMz8dyza7/nvi9zu6+rLkGkDnKaTOn5bcZDytJDyW79egdUirHNSOtlJVDjx53N6XLM1DWBaD978Go/e3Hv79s2vE/bvZ/eCz9/8R4A1wKx/rm79DJ3r2h16CYOXNUHCKLbuKoom8xEdu3gRifNbt44+iUDxf5JXHx4njZsUHzl8SbB4PHlyTlk9BM+94eYfEf3DZDVHvmz5AW955BzEq/D389Hh523GVh07pllmKoyejS1rMw4Z1fZrMw49pXXVMf2M3A+FO1dqlFvTpBwzvQcZygu9B84hpPeYNqy27ONwnalT7tFdczKQzrwTQDKuwIebZYzMUx3qe1W7dCLip1c/cGT6rzqY9qbRabn2kzw/Y/97Z1TVaMCRBQM8W/8hF6rFexvNq1u/wZM4ryt2+sco1AAdsHtRA9SPHLlA2I77a0UtRUgh+8eXf/gjBv47cq3HjqCD0Qga4ReMrt9v4Z/bb2+Myt9RU+k2V15/v4N/bvk6LqYb7q80hO6Dg5dcu32Mo+JlUdbx8Y1vX6OF//I9SjqyH55TVcSGSvyPWzfv/HHj22NWEbICL6Gelx1twZXo6b/fD4LPyk7BZ29+fvz9czqGpT2Cz9An+OyGtRoz5KDBn9dzy4OFwQ5ZroLxb/4B7uI/3/5jF4Okdx7LMSof44YMcbejpec1y9EKFTAHjBbDulf/eEDXXfZji69vfLuDwcOoAdsGW/ARYgPZW6PD0hM4MnuqPDI8McHBm9fB20K+XKrZQzDEePD0cSSXb/4O/h1y+9fPfx+JPQupTT/fcJlim5mwUFrbk+b4UmBaz9MQvv7ZaJGygFO8yLAFtV/PqvCt09O7oCQZHuBbGowV9FkUvbODtHEBEE82K9C6DnDPtTV0KrUiO5eEPXJGUfWmN3/Yr45yInt4awg85EdA/dznbNfRVtd/M4sP9X3Z/Z41Sak2F25akzWcUKtQmT7zU1Yev6n+wc9cFTRP4qxOUeCH4C1QiWJuPXzcXCa1+8NB9083Bvsr8FH9t/zG2fuez6u8bANnlXBCfd/s/YUYbjKQTHk2wUcOYUL25xxZl0P1NRtCxWdbl2j989PQmsyS9y4PbtV8tPBXiBNUe6dXi2E23395+/m/sP/1s3FEwoQQ1H4mcoG6mzfw9FT/uourJis2bXk/EAtm9zPfHbx5OHoajk7YefuV9Xlr9crDQoBsnnoYYOWDZVq/Xvo8/wSbYAqdY5XFkDxmEqG0VeEgZjflHFHRpUlq33gIVR1r37uXk16tvU8xyFFXzucUmMXCy13Ps4KvFCGH9O+kDvWShrdJo8MozFMZGLbdCmJ1hJ2qcpgs0pgHGt8L/sa08+C4dBotoiyfYzxsPq2Cjb2OTlbRHKkugic8NPceK75Pg9ZV2hfLa/IpqvmE3OpwdQ1P5TceNp8xS+0mv+gwABYMLl5q2ljvHxU06GPLBWSd2Ekx7txUAlKguhuDieR3Qgxmo40qWTbiM5UfqJAoa5MXLEO1l5HILcqKpUJHh6UCtP1SEU3apSIAb0tVI7NYqqpG/afX6o7k73ISJ9G3tcdII1sc63dN0iH4pmi6VkeBl03/KJuuiXVAUfY6Dz559eTvz46fvQ7yebpJEDnPgmzHiLMtvPKDA3oGDiAQFhD/PMgbiP6oA2G7U9Dgsu4KCbPCYuobnCct2SuyI2Jz2x26tXppYsuRLVFcDBHA5IfJ/V150C9cbzGoOjS/Ei6yZWMjwvMqZ+D62OgwCn34B3jRrZtB/AF3SsVXGukAtItcT2W1tgfX2DHCymeW+L8t2m6itZ7Ocp0+vVZN2LeIKHeckxqLdB7K5pIr6F8ZU9QixFCMvSUYqJ+9YBBK7poFAyNJJxgYgC/BICCz2RUyWSHfF227nBKNotalMHZD126aR/u+3epR9n27+f4bimmruHxXEuiFSbUuh4ChZIsrqIXCJwYhHEeULcs/xs0SHuNTTyjnYT7nWVU8IaxC830ixXNVLsTP+8EGFRxXVz8o05MTUvZ9YWM3B0/IKCfWHHcNj+igLJz5QpeuWGYbT+iy6L95gBm4b4qcrJ7QoiJ/5o//NiV1FbXeEOslQ/sAM5xYittCQxdA9ErBCjbHX1PMltpApbBycAmM7PvdevuVWlZhdKBLlNZKwrpAO6OsWFsDaQ2oHdAmHB9KyjowO6CrdQopaZPC7YC+8kBTEtYE2B1F/FA0kSVC7YC28nRVktUE2AVF/IRWEyS274Ce6pBXUtSC2BFNTFPQ0iRA7IKmUt1Q09SE2AFNHZ1FSZsCcgc0lgqQkrQmwA4okihRSuKUsDuhU39u7+DEFqxsCgPM4+K34DWBcusL62VvfhETsZrtL5wknQGGQ/iywIjYBpnRRcILRFXooIYjKqulYgG+A0CA2JPC8IXfHAxfgLY3fBElWsMXAXgzfNXIXA1fqJ6TxxOBBgVYfOtr8fqkgCqsT2bAFBZw0SjQ8XyTza9iAg/nlIW7aevqXubU3ZEIc1YnkVHdD2XLY4+z7WxnfUFsjVIh34Q2pWzDQ4S7iO2MSEFAo1VJQhnkSJUsaDtTvdkyyLMXaQ0BUWdoVfei6ilaCVG8w76KEvZ7Po9XOZcW1NVeWghlWszSglGlkxYMwJe0EJBdUWkhmxj4XorOrVprjtCrKTtczUICorCxNL3RsFwzWYzQ/t7YcniZIOp1Ds+JrDVSuod7R8zCIb1jFZM0uSNlIY8ZrFvwUJkMmEuBIO4A6AMTd+bygWka55R/fID9VRzgBDkgvGDarMjr/DQOJyEeOb2gpMzjlPHCE4Xxgu7E2UTIHucB3zAOaYi8E+R6n8MCmvaRBczhQdxLLKd+TBmOkIiQHsfFbwlP8g16ImSXmgK+rFpYci/8GHOQNUONQD9jHVMynYYz3CB09WMoO4Q9mOnb58UwLYzlquJJW12VntZxp6CjbpJ641V+dT/wbOvfXB9CB849BRlVi0y/Z8mObOly6PEg3KCc8/0jBt2zN8maJFr3RlJqh70RsJ3XuzcTHf17Y7P37szEYO/eixDFA6K8/+fTMdmdendfwSlmPXTxeXmS3t150EX/7lF2io3GT8v+WJhKNhQJxWD07k31Q9/17n0KC3x/ITBw4Od50l7A9vXfXczW9wKFtG0DKE+gzg2jDzliNEyHlFaojFz2P0DO4e4Uy0nuKFZDZ1MMp+iQ34q1kJPU0OH7kFCp7goqWu3qeSwBFfzqcdb4BUG16EKjVxuU+l6hoEQK1V8HwaFGEh1BCH11iiTp3ZfS+3uXJcJdSjGFHYgB04faWsh8N+mvFaB2Y+cg8SBQhRug2gzWkbKdXs5Kdofc1n4pCk8pnJ8dxiaKaOuhNUS3WiCnm4zyhQEalyyERu1ibM7G3oJi5sddOZXT1XcMGDQzDuq+U9U2Ygf8qzkyvrOF3w5+5gDmETfTzmws4ccEyC3grI+9CbwVhGuwgXOCdEZwDuHLCi5i8+stLqV4oD1TxDTQ3upoelFEX1xrjM3GvmS1FHyaVI9M1RTa4eITpUAmNirlXJVl0F1ZFvlZ79sJRXg9r9bAuzgTdrrhAyzqhWUM1MkFKqs1+js7u8tQMy4eWIlN6m4vIqiLtYRg5OkERE2/LyHRxnjl38taA+IZJ20ACxuwreRrkMNi3/ndcx0tBj24afAOfL7QYB4mujWI4wEPN/0e4+xVLimnKGRpM2+pJPC9XazMVZiquFF5gxebt2UEF+TR9pXSlmy2keR1tWPKAAvZMdfKdXozJaDrCGgNZ4hVnKI0M7zhTgvtr1VB+Zs/F/B/3qu4lwzSq/BX4v8wjgJheMX7Vme8Dp3Lh8JWT0ehY0OT6gWugqzZjNsNio4NM4LbTjeO1lYYyVXNzpxZ0jZEnqgkRFe6lOHSVLUd8BgcHoDnKPKMWGZUSuB13mNe7Jl1K8Kwc17qDhEzVOsZF4MQGMCRQRkRoohlbpOHxnCTrEfma+v1Bqi1MGv0ujQirTnsbQk22Vc+fPHW5BN3ISft71HUNfE7C7xG922IPSv6LIWfYi53KwIlMubyCcJiQlHdYoLHlPUFio2Sh5tV3ofjok/wkvWxFY2KT14aIamakm2JS/33PnzBqRh/DxFqwORRmKq+5CxWFYi2IWAdabYUtcY5363Q1cozx1vu+WgTIrRggcR3MV7E9WpiC9haUWz1uzRSsD34bUk/+Xc+fKnX5hd3aafA4FHKtb/gLN1aCLYh1SxptJRmyjndrRSTSh4b6VWkF9WKKp7gMnhUJg8NnpQ5zyhPJpcwZSpJQWgVqPcqn8rheRVGTaQfhuRpjKlb195JQshxqfZZu2a6bSSmm8tLa8zEqqIniCa80vrzVqm1Nz+xIo5U5HH0tUVG7QbVv9gR3dM3SaUZsQeULcgH2RWPvqXVaCSj1QgRmzheuSCx0hnZzLREi2pJBPFi4MX+57GErv89t8HWI6nrFVDsvoV7n86txHzZo97bvOHpqLNUhOhDZX7z7WpBrVyQioOslTvWcjM3kiMLYrQmXZHzmPmI5jwHOJneXmx4Zu1HPN+qJmd2QeEifAdfVPTkvkylUCtfz28GcO6bRAEesDEvlMI3jzj8ajMu83zyvgXCMC/sf5DDIeUIJgvh9TmMhagclESnEbLVZuk6hSP59aILoUsQ9hCkJ8F/MVz/hTzmSRIgdw86ZEEWxshfEQY/P3z14hnyiJMZUcxzm2ESuJ1RnuG+kzZYpefJ0icY8gkrciYYMEnyDCsQDcs1bJ9tWHGA9Mo4rClu+zCBQ6dwBlP/BmYqxEt4WZYkav2FMfQ6TQsMBz/feRTAtxwpFcA54fpmgI3O7NI/f//w9c9/4+mC5Yxgq2tczeNdOenPaZMLcz4B96F6F85IWsTTcuu+nsNcj/8Ll8FmllwEc+zJw+BRC3iJHG3BGZMFKL1OehfyeSOb92k0LUUAngUgDWlFWQUuhwWxOcjsjjKjrqzQlCePeInzouy5WAJ9xP5w8f9Z/XNq6CjSTTW64xOuqzfh6AKw3Ukoa7/julD9TLXi59/vdsyyt7btjnz6uB45VcGnixNVx2fLT1NQsgD9cdcsoLeM73Ff0MTQHwiIZox4Jn5WTdaIbRjqTbNGDQSIhp3OntwCt91ZO/8Fg6cZAS+NqjlcPOcihBiMpohmZPydF56SVodhQRqohw6BvIOCMEUFgSoypE9ZmJeMYhxc2bvNSrRvNP7bZ00Y9rh8vt4gVOT70heVWxlCnSFBeYsA7+KX1tTJLhJwh0zVoPLbg2KJWHCNC2F1OmYtUSKYLUGSIUmttfam2kL/ksymbHy+TLWd6fI0iubUb3cEUgbb1WoUH9/OaHa2It5HIaCzMa6FnU9bJcryWg+kKq7RzEdjl8MGx9vaqZQH68Xuw+P03LVfHwqxauQI1bjCu/TrS2vZPwuRs8W1M19V1169PpWjFt2kUSDbptc6HDt3yaKoz0LgfB6Nccfts/isL9RIJKrqJOG06oyy1Hnesy+MHajg3OhqqlVjb1tuya4rasnXxhAVwrEdBTY0+ZaP8KNSbn+cdscAsGl6NrBwkSohYyelrRe0zbSdlzzV5cAgbjnS1aDUd7aZLp23Xq+Iv0aiIZEH6Sb6yy+/MPv0GazV7LGDHKaDPLwQiiDbPll11Gh9jHVT2zajFfVjBUpkqFrmMFDQQ55NeZ6e2SLaVgT/OSPES7Aput4gcxQ2gmPWLai6wTJeLLK8tK8sHVLzE/oyw7Yh+hr9f8eJtvUy99Ik3dbI8H65KD0uGRP4mmUT2pVzRTB4g3P3I9RGY+8rA4XmDNNl2DBRVFRv90UPO/7s0xQJ4Po9yG3eKA7P/m0YH7aRoqh1DtsPSNpRZWaQ5Mxq3pskAEgiNio/0snCZe4yOptHyxHJ3xmuv92MjgoMOaUJ4WmCbbu4QdO/E5Jm7p/gQ2KJjB37Nz7aH81mmYcn0WiTSTLDdS6w2+BWqmyscSl8slhBR0MJftSjxzM3t+dHC3tfYtGDwGBGBCk6P2I0+zIeVqi2le9pKzfhan78aLg91dCSYYzpl+D9MtPyFlgKIMEzllUxhFNVmVyM/uySXYzgHdKLMcL0+cUYiL8EYwK6K8VxjbnaK9eJ7GTivAV8ofSMRxDBS6oqCteeaXCMJMGohb4giELEMSQOPEjg9izIKNRyIIPwxoACtqvFf8JE7Zf9ap4yBfNQzXYd89ELPq7AB9/DATShiPFoeiN4jetY4ZGP5mF+90Dg5phHFBsc8whksH99XxVF+PqV4l5hYvfKvDVLmmxe43Gm5d2HAKB8yvRL4dqBv9iLSYK2f1UmanRCkgF4e0+ukfllMpYjs8beswTLdp5W6hneK4PWfGfAPz3hyJVlNUs/+2eoj1prlOhmz6MAtmZRokfHodTui0FrXFvgzwr5ZWLPenb3yp0V0xnQx/rYvHUIqw7nx9ieG2NrXoy1nBh748MS05U6isvJ2SsjFQxiKl2rr1ubJtOiZq1DwVr7arX6UrX+6tReRSYqJ2evTFSwh+kObDK8bBBcVl86coebrv0tV3/D9Xe7vZI320txq7XipY2Wl35aTtkjTqFqbew5aWPNSRstJ228cVKJ6UpxUjk5e+WkgkeMyKf6BAaPABA8pfRL+BNnKOpjz1PsydaWrRg5Os5iAL6YS0B2pfhLmKW9sljNPAb8p6HeiPF3mhmEO1GI8EtEWUdz6FRRxtkNne25DcDWzEZU6XiN2n2xWo3rSnFaPUV7ZbSKf0w6VrhYaRnt4BgQSXQj+HGzXm1KVQt/c9C2AG2vcBFBWp2LALypXTWyq6V51bO0X+WrYh8D/nfjqV4DQ6lPGLwqDgO8PYMB2Jq/iBAde1G7L+6qcV0p5qqnaK+8VbGMSYRt9BLseAMPLV6ItpBeGxfhtXGQXaBEK7rQ7k1yVbiuluCqpmi/cqvkGSNv6S1Zx5txk7McDFoAduAsvVGL2v1x1pU0bNVTtGfOsjNuvdfy1b9tUv4T56v39lz13pqn3ms56r03fioxbYubCvyHCEm9bGFfDdJUGdHqNq8++OXy7nU3FFxuQo4p0G6H1+w9D3nEfkYl38Kkgj4OJpXGJJtMKkSO1qRCAN5MKjWyq2VSqWdpvyaVinlMZ/kq1D+8/w1JsOAPHRwDsDjP8ZPDgQ5o+xOdqNEe6QTg7UyvkV2tQ72epd5MJqbaYwnmgjRhHpOb5Ftpppu+J3/FX6bH0Wmqfx6Ni6z9NGPBj0iVmMG3s3gwnaYOT6bT1P7RFERpn03R7u3htMJ1tZ5Oqyna7+NpyT5GNtM7czTZ7Bly/SE1Y8llDt4dAHbgMr2HB7X747Ir6eVRT9GeuczS00P/TvEDQX6XRWGhtrk4Wjq4WRqcLD26WG7JwdKYIKTI3cBmywubtZ4pXIu9urCS3VPEmQUrjeC6GyKj8IqibTaoRnbB2Qp97fkKwNaMRUTpOIvafbFWjeuK81Y9adtnropr5IpfI2HiOEmR+nZH+RL1RmltmsTvKOkLQntSba7EXaZJ3EHmxZdIjomQ3NV89AOlE1dmUlB144LAwbJvb9fXW/X92fSvpEV/sD1fvJ8lcb5GsmrkCcdlynw7s0wJYmfrn+uPn+8p0O41ZUlhGdI5u80djp25/akDUnQch2ZfLFeh8stzfVMK5hHlyF2n6iguVVa6vh3lZ5990rYVip0ypWQ7adsqTuh5klrukJL35btzi4dkpjf8vgSJaYYqBGsKiPmOzm91jh1lX5z/tZswPulwRmT2ZmMai/acQLu3k6LCdbXOimqK/N9tbc+CkuN2zeobQzg3ycAIRTlwANpy+E9LZD1Cysgp61b4LjsEfG/so71BvdZ92V+cd4Vq6ydS909WQp8ZzdI6g5F911mWwpvEuRspRf16ddLQ2iai7ddrDFdS544sCW3PmUFW2X6Tg7ozSS9qKSmtey+NktHSFFyyLzcH7k/nqPa6egf+FmXpj9lzZMmVioNEtB3yj3d7mJCIwp072YzgtkOGn1aGyTYeF7dw5/OjFOOGk6mcASvJHTxDmmMuvhMHw3tib3cHOTrxjWZf4rtCdTkuFLRL+iSR7tvvY/bwS5MHfG9XQp5AHBjaOoJd92g5pUzg25HtlSDQK+A22VNTvUL7Y0c1TR1UU5QRtJVtoEMn29DsS7ZVqLZ16So/cIjED9mA5NQVHiQ6ge9zNCB9doWqT7Loj0r3R6X7o9JtJZhbW1/hLCo2qjOV45OzWh5ae4x2pYYyC3KjXVZmnacBLQG7aUHZ74I06VVjvCmbrJIAKwi9paDwQahqeKhqiFUNz1oN/Qc98HaGzLwf7PWsVEqMuov+fiYqL9u/nRE1ehXG3/2sxrU9Jab4wiFjdw86w8eb3seb3sebnrNC0dyGiuNRbNyCRjHourndB5mp/v7K0/CxouVOjzKtfkXyPoer79T+6oshaDP3+bv6Vqj2atZT3Mx6XQL7Swd/e7RaP3m1VqkGli6j9t+UCXKb3LBuaX2ar/TV9tTqpCrXLpu+7pAGDFOMGr/cw5Sq3bLJMKY/niZTlMLujls56n5jlo9YnkK5O9rtXShsahH3uEyUJ4QpoWuxscwHwusoK24S07XDgSDc+E0Hwlp/IKz9HQglqgEHQucybqXo4zsNLrfQK517dC8F7du6tYgvV2S4wb2UbGY+exzxDVT5KU4dsqlM7ZOpgCItu/lLpVKM3VC3ugfppsrVfsewpy3DyGCs4bYNZP16bwS7pDKWG8FXucQtXzHKQ1lVRiHOJ1GCMm1RusmDJ5yJrG8aZbzyI1TCC/HRIvsbPuqw2eNT+y2D0Wi3O9q97ZUK15VycKynaDiX91FYGkqg7t7R5swBXMFw7YwvhK8VHbuKpllJamvKCj25j5YsVeolw22R3WMY3YvOvoeh8TuA/Wip11+KJB9Z8OR8BZFI9ryL4FEoaDEciYMJnsHbO0lxGrWOUhzEm7OUiE4lMYSPGTGZXoasDkiz7Jzf6jwguXkVzG8PRXBnKIIvhyK4OxTBV0MRMKuWAYn27OpESOZlPoBdRUmWnNQnTPKYE0uRIeooyQ8tTPL7CI8xy5m1kljABwevQlSqvnWjiFu75RC3dss+bu2WPm7tlr+4tRLV5XAznfNZdrUw9+zW42lt6EsX0tqxojpbinIr+WZvYUGNE01DaHFuWW222+Vmu+2w2W7bb7bb+s12299mK1F93GwfwmYr+WZ/m03U/jSEFjqe1Wa7U262Ow6b7Y79Zruj32x3/G22EtXHzfYhbLaSb/a32cSbkobQ4j5ktdm+LDfblw6b7Uv7zfalfrN96W+zlag+brYPYbOVfLO/zSZaFTSEFrYDq812t9xsdx022137zXZXv9nu+ttsJaqPm+1D2Gwl3+xvs4kWOA2hhZ3NarN9VW62rxw221f2m+0r/Wb7yt9mK1F93GwfwmYr+WZ/m020VmsIFWzShg33N4Isdhvr5bDjuD+n9a7jRGl3HgfxtvtEdFfqBbsxV2rKNX4oncch/cuP/llH/2ajf5AxvbbYeNvKk8h9WDFTnXekHXrIhNMpBK+h0i9/5wmeR2uE49k9ezCfmAlit5YnKZcxxZfshUzRwVrKlEPRiZkSxpecaeK7UoKmOV17cZdpMN+uOZ8lo32POj/6DHhVJaD8mi3vszR5AXWM8iLrdvUth+zbVR/7LNz1kLTZuGswb1m52yi3tRXaH7qMVYfkNO64/FCHF/ayw9ubzCJJdE515debbHc+EIXTxYB80WzDFz4QD6dTDAUpdKn17p4cIRRHeFFVh//iUFiHd7CvrVNMqLa8TgHjrcJOA9/luHRn0azHbTZMIjH3jEOnaRwmqfNlPVwRuf0u3r0+eBKJCXG2GEDYg7ZFmL3ftLOdbNd60Y9LkIlkvRH41towg8TeUeLQD66gU8zKu8Nx2N7Otj3RhNyqTMY4BWoLCLCRl7iknbiEwVfdSwnXp+8Cnv19+i3D03jmyg9171ZYum2/PAqzybyP/Swc4+DFja1X38m7ZXqWRNMZi5/oheIEkvoMSRl7dV6t4HwbO6dyqFMIsAoGvXIITObwkHbaFnXXNElX837mTuyISbLJexpLJ8itEvdaat6z1xJDLep7zNS5Gnp9OVrFbIF79sUxIqZRceibISuGcKVw6HnOqv736QrFNOq7kWZJmuduMrrqGy+nUa8dCCUtS6fQ+XtyBtiC7h49awf0yWbA+7oraawfoMKe5OKnvqy42iQJNyb06Px+2YuJ1+lkO68xzfvFXi62jTujAT1UAe3d8kWlKqAOIKpsvSusRuhnf0cDsPX9jAjS3c2o3de9rMZ1Oe5kA/WyPr2Hi8ghgqq1C/slw+yZCtPcbYn4tV1etiTJM/3JpXpf7UUmVXLGgBonVzzBXOhk0kMOUzzd8F8cnm54B/unm4Ii7dNNAePt6aaB73IIp3LeekimAV17XI8HGI763qx7m4762Ve2n3yqyfT7eYATJYFJauQogq0PIA6XCIJdwyYYPCTgQnjQjw6ig8DtBQcjSis2GIQ3oSFguxwiY7Btra+pafCH+9mq9i8BdmTvGGIBSNeOq+rFAjDojrmOG+Z9j2JWEBH7EbK14DQ578EzD3SYnPfKRDMc3MFrj8Hbe+1xarReexzEm9eeiO5yiNf+jx7OPf0nyhwiMDz6zop8tJcdKO4rA3aaCsMWfMpA+Bbk4PZbkMNbb8GCGt0WLEB8bcEGusui4Qx6/OvX/UPdjA2O2stmFHeYATvdELVbkQDwRbbAfEPSX+y3I7uC2m5GRo1uKzIAXxtRQHY5tmHfh/B2P3+8LCzIXji5Zk8Dbn7TMfhYE0jpn0U/u7hnsYuUvXcWo0bvnMVA/PlmCeguS6Fzx8tn/2tr1ZOqYe/kCNq1Ub2nB1NnIn2+EAo8vqcHwnrPW3i9olJTTN4cu/J5JS8OmXeyi9vrq4Lm4OESCgt3kt9v/q9uFAqtW/CwdJlWZ+3akVe2MO3AEa3jhdIxvNVulXuY0VV11KYarkDVmYUtxxQveQQH3xmKlXi2zOGgWjxso4f96QZg66ONSGnvaimQr5OtGrs+L3a/MRgyY/sex3YDN9oCp3fIhmwLXa74jxYX6o8fOF0uczgTYYmsjiIJe+wtJrm58x3wVzQ5fMN2HNOIV43QiqPHgGDnVZGyO3KpDwT3aescwSDGKJAIyFt+5nL0hkT9vcZgStXveRwfBZKvrOhNLvQrkCTssTeB1Nz72xFI3R1mod5Hi3E03Vk82xyrNx3Fi1lzCzkp90+IYopko0huEhx7T+7b+dCrCHnKJzWJtvG5zxZwpytV0cVMJ/n7SB3h7CpX4DDPBCc8vQRodMqjAVXIBUzxb6LnfH9E8O+IWKXH0WYJT7oI3oXklnyKF85RFr3foEz4dBQmXoieR/Fs7gXTWTxdC4aG/og2ObaJYI7pjynOPSGaRpO0maKnP64kbWX7GXR6nUTryXyVxWkWrwV/gv7kjRHVIJos7TCRJErHOSxOuFqXwqT1DfyEWI0oW6Fg5mQArUzMQ2iWj06lfpHBqQLTMBMt4QPuF5gRde0QtNrfNYFJZweujxAPV8z2caSVrZ0zzFl69pBCfY3JNOWOxk+YVdbuJtO+NYt7EAjl5Z178KwoZj/gMs59DOz9Sj8PMcvjYJ5RfpUebvm9ZgUZldIk6fG13vWj8wSKh3uvsxgn0yWup80DPE9bYtnb40hTLVWYn+smnQGcdsIoWqzqA97ebNzWc9XHgoS2ugODIHqC9cWKGgHb1GEaBLXGc3o3XSYC8T3mkOnWDsQL8JrJzdNNNgGvArpVcXnbA6KDU8EU1Zlqg8f6rqD4mGN/YGC11KVs0IMri+uHgrhGq6luO9sly4gCx06rc6MHSfweo6BIbNwVQcV9SEFRo1VJ0jzM5yP68wA6+G1KQYbYKHtFY1zzgEHdP+K/tBoHv5B1b2uqR79mu5LcJpM/yC+WEwXtLcjQAXSzTluQg8df3jAVw282244+CX+7sBtSBMNP5ntMxbVUMaRGq3ITUL7JXvzf8HBgB/GWnmHKO6cB/Sqm3F36OCFmfwughM2DxSaB4z/KDvLjrjDKFUgcDXPNa3CBQzxojVXcS+I7V2IpVOteqqrDLlyOPR3VTQIGlS1sjlg9t4a8qoWy0lj8y5Go1WRnaPL1Jcwh67BHu9OvcZCSrJhiu77kMMUWLVwU2c8BV8QdPBVZN3tPxSaRWo/FJqg3z0UZ2m29SMo+BjsFkqxpDVkGBJ1XBHcaBj4fSHHSwewZ5UAzvxSn6RHCwSVRvboK1UFsVGoODAgp6+qQPWv9QccuaquAePNW37sHEiHeqfUXaMfr8zC6GNMqyBLa1IsF3wCR8YdRc0mug7p9s//bs/QMcdCX+cu99nxMNjOkdil0VwZvfyIycOsDkROjOwc5hK/jT8S2NT+c+hutZ/I+j29eThcR09BXaBGX+YAy6J4isnQ9bz6GSrTs4W9cPhJ99M0v0uPVavtZO9rsui/zeYfb93EsSTbK/iV+d8ft/Yjs7lvBTerVk78/O372mu53FUsLXk8dW/8yfwGkwTL/5rpo3YjOJ9GqMjNwSMA9ACfeP2I/dZpozVVtfMFUrWzqVI3xVNmCAAx5S56kyo9NkjBXdmRFn1SN0xjWPnkTpNNMiZNcIBP4ciqpXV+oP4qHQpboTdVOdtUTiETlkMA3mXoyuGcJOZ3So4hy5Fk4m+kA5jEcVZaq1lW6ovdHNYWrzXqRTpXYsVsmykaI3c35BCfKOzXEOKI8puw7JiB4HUyUvAigZKMcB6gMQWiibYeTIczLBoD1HIF6Mw0ZyBOM7Eiadv18TJCXRdebuOJ8DSDNdBVA5PlgBMI5ipe3SLmTCXClm5ZNZByxbmmn48QwI8Th+lakDDYB4MzXgzCNQA+i2ygcArna1RuaQFK8PClbUQqDVBXTdJIaEesWDNOhbc6yVDMOrcSi5mxB56UawrCX4yVeZdQnR7p8F11M0zOlxGIApP5piATERjPT9Pqkb4Vzn3aMHAbKVGiGMzDFIsXzqX7ADMTAwwzGwMQMZgE2NoCkuvXjENqtwEB0C7AKc/WZS83or2nWymlqhX1KA1B4S6khsA+NQo3uH5pZQjMsUup27kJlatcKNmQmxs0Cqh3zZT2NUygyEB+6DtE7nWCgdu3MEYNNNIMm3c40b9gNGJeOis14Ees+ssmpCIAagOJyNiuK0NHApDNIfHX7aZrgJmsay1kY01uQBmAe6XSOVcouo/rNVAAZtn8BpZcjBZBeAhRAWXhmmsQCUrvROYhJ+SonQid3ChiDiJul6+qbKzIE6mRzbglLFgelkg+TxAjOS4tYeftiIONNrhRaDID0MXxIKZY40Abe6xQAo4GZ4lSKDXimEb1o4q461hPF4ZgFRQ8X53QHUe5KDgT1Jzo50YgQBsb0kwUENPQ2PeA5StxoVB0GRAFi5N6iAUHJiDGmQgsD5yVcldSszoG0Vy0GYtB+GAy0l3yOZ2bozfpVTMKxelfVEFgXwzInsHVoASBW9KRkOBpOQwNnls58eiBsNgu2wyGQJMwnXHf9xsbG9TnRHMVMrmLG5xAESkwTeKzkAFJek8m/PDrRNUPrUDIPtee4ZimJJACdDYfa1UxF/6McWhLPlHM8R3io+nZ/qm0NxxppTrUxYqXdhKYKhhHlbNNMpMrJPsWijw1GFaUxBcq81lamWWTsAHUTf5xSt5+qDTD0qKle93yEkoRUGUXDGzXMSM9EAqCWm/MRaRGQZSepDaAREVblBM6+GksSgZIfWbxEj3PtfExTStc1gpPnSqObsW+zQ9fiywRIpknjYCHfgUxLXgljgUvPNMVyoR7g6CROMI+Q4kZOEaBNrIAtmKvFbw1hGkiaaRcBzcapSFPl1irbTTiwxSxGVEPZ4DOMrACxwWQaYQljwkVe8zYw0ZIUckBO4LRqZGsSCu83OCnWF6M4zzeRew8rwdPsQa8khr3U7ZRHuEvhV7demBJsCqPQ63bEPOq03nYnsu8tZyMc9eq7hqLPqYWEl31mBHt1BG0ycSWSPti7s+WELtaWAhgmg/QMQSC4kFPpQuxQHTQZtHF3GOksMCIcvs588bWDxFvNaJxF4TsjKyMdNCVJSzPpNoFDRuP9Du3smc+jp5XoPLJ9h3HBb8bwgXT837j7mXP2/I3igeJJ8CODL9xteGd7fxsOb+1wU9BmTOFTwPnyuxGnRJ/IZ8h4DOl8tjOmwc5EnZAQo1u/+GX2qN/yKul6yegQNF2L5H488lgAW5wdZxV5VgOBgmvXPr3WQMj00nj6rRYG77fjMI+MQERdDaRIodDoNdRpqoFsoFtvA9fQBB4NZGLQWt9cGVSuc1EmzGjkh91KyoJL5M7lzyWru7/VKTWN/tTDvLK6u3ofblmyvbh/vyzJpt67Y5ZMOOwpmrUrWhSECG1KMsZZekZHO3s+gGWkLzXdrHESL1MhAgl6+KIRTyUJg/KUd06uymybyi0mr+vowdtRzKW6pSlMsJ4xZX5fvHmSRZ39GrykDki4lJURnfS7vZbOwK2VWk6dziueQ/jSZEVsXvLECQjbSoUciAUw9wgcbX/HSsIMv3l2SVd8WGz0+GXnO298QuxrYHi6+wdPCbBIJcg6OSS2ZvD2ubo4Tdp0XRzEW8YuEd22wj/EjwyL/2hjwgp4QjZM0W+gGpqKUMQ1OEGiiGxw7r/m9OOy0EjKNQgbs/OdoLognn/h8OYTa39cw3IGfgzDGZjDqi029pbGSiJ11LTUrYakVRQY8vTZL8+f1JEgvSja+0VCJrEuQU4lmegblpRGl4bGa+KZ7nGy/4xQMtnvkBKt0UMX1c0B+cMPe9jeelo03TlkP0J5T9VJwNmk1afDWp3sVDL5ups5UeeLqxuVi3oSheRlOWoepK68t7NESMLVwFi+cGV+1foTz4b0PFypixO1/grY4DF9CFfudFnWPVy5lD0U7FjGqocr8/MXAfkrfFjMmv7hq98YDE9evsfh0UZQoWvcRrSbVgwuXYTvoiCeos4Y97UMUDiTZ/2Hd/FSWkag9cUBSkQve2iL8fwaDyUcsTe7X1NMbEdqdTeV4TuYylBr/yAh9BBAHUlEPe1FEUFb72NGlM4AwgB8bWABmesORvHvPBatDwqw+NbX4m1WAVXcpsyA7ZQQ+nRHPMP6HPePjJJ9l+9n8Okmjdf1Qmt8ha+ns5ma3Y4scrE159pzTPgk/xTi8mZDym4o0JLbqXek8C72jpOmmqLjvSMelpRF4B/gd8fUx+LSJwm+c2b/qoxA+2v+rCWtvdc/u3NnEQpULUKlclzmZqNZX/A2HJsa02HLH5OU/FdbCKQSw+bAEWmaxNkkUVXW7FLQBvdCA+5JgrnRQEETWPp9zaew9iEytNa6W73O9jzC10FlExO4qLr5UofGdddaaVQwgarKKwORaa9lxMfhfL1I7oq4IBgbKyo6Yl3Df+f59N46fRctg380/n5tha9H2TL4Jrg++vbNF6O/vP38pvqH643OfxS/OdsCVQzsshq8i6/10BPguiKdDeZnOba7BmxPuqwAdfA1/7qPu85+S7hsaSt0fzjo/unGZ9tarVIGuixY0WfAmu3KnFXf82zyIOpLWyluinX1bRTqY/W412mnvKBDnu8O13ZIMNhVYeq+oFwUSovqA/h6jWB0pYAsOLWoAXdheu2Wit+ML3ZVSpJ9S2cG0BeIR2953chLUkOynP/29xnhdVV7btigubA3bBC0tWGDTbPOsMEAfBk2BGTb8urYShlbYZaKrsha1M542f6L5c1PbR5ursO4lS1eekvrUNV5MZSQKSW0+XHutdckrgUxkYC0KZTSiD/OkGljpRo4tx+2Iydkw1AMxGYoFoORDceKVumQjxpjbr/INnp4P3pr2Wo4esvJ0gmr13ibL8SUQzRUZh85BCK0AspfoFCF6moJp3J+/LwjVMxvWnSmQCGyPcrK5Z+4rL/gjmJkgImBAyYeWaDEdcV4oJwitRt6RxQ7HEV6AaqTgG3J1iRMM6LivNNx4XeIISt4b+zAemN7zhvrGW/sj+9KVFeL7cr58SR6CubRrTn8+/GHObLZFQ7+mYP7QWb/cg9atEvv77m+QnW1lr6cn6Ijueh1l7dzhWRFQ7Z4hySE8HYMcIGCo8Ek2dBNX+pjwAhpTLzTDfPhFNmlJkDetidclhum3PrxnIYdPOF8qfT7kbCglsOEyTykLFeU8rL/e5uIDS/Qfd6E5cjKjHZ+sCVpOiCeV8S0wCINGOJuar9L11j1ntdsV3uuloBbKn8p4yQFyc1mNcVUgFvla1un35W3S+pabmOkFZsrje2NdvVY6wyQW6eZbSalG3TVpvGBBtAO6ORbVVU2S2hUU8qgtkRqUXNIp0Udd4rpbbuKnkX1PM9V8zx6P4oYW1FiNjXdbPxPnCu57T/2pDu6PdYmc36x4hu6wcxdL0OmKPHNotocLfOr/HBv8oxdOVNTGVM7d4g2FftiFqqbnpr90f9OYFwusR72YomBW0slTo7Rs5yD+RJMwhzovcv7j8Vgt9nGeHx6mQv3MUsRK9AAhwAk8G8UJXPToUVcQ6NbRVwDo24bQ4SejPWly/TQ3D92AZ79zynJyqjUbrF1q/LnksUBdplk77F0KmZTLV0HRK3zCrBb0nw7Ur0biSCe+uXcaNO1ILZj8m5HSWWkknzPY9hi6ElbJ9iOj5Hs1DX5GW+msYWy8pDAirAT+tEh7oTA7QNPGDlGZYWDeYs/qedAr6z0H4tBWdnGeParrOzm4O2wyxWTglIW+XClYFvYbMnTUrKdpU81sncSYeYUojDfgIfZLgyzC/7AE7BeXDyyH+3FIwO3FimcOp2BiUP4kiQitm091wnfOET5K/3DgLybg52q1W1Y+JWIjFV68YOqFQwyREB2Jleh3Aptaq0WlcFYEViVgfwBlXECmcp2oayMGgfcvHmCcadHh55qdJuL9mUzkrGlmhahWUkPwVBO4UGkcKZWvVMIjRZJdhabfB2M0bmcpIAt4F8DVkQoiHOKlEcyZVSeIf6AnJ9G7lEFsn2kSlLbaFazvSzGwN9FThTpDjbdk3iGVB7ag+oR3431Uz0/oHhP+xOKw1sfUQVhujOqAPF1SDXQ+T2lHENZqwDTYs4cs59rHFfU2c99Ra421k1u8G+5LZviTIGxOBAkrtw2lwfZNbDtSNymyQqJZ9obNNm9VfRQnsUdbxYODeoVAuIpwxgUoJV0KH53khBFHxcpUVJokBQlmEdp0US5V4mhTeJn05dx3nZi2TtrpL83Km50HZc4VhWn0AOXs13FV/EP8g1XOhD1coR7BPLx94L8yxBqtQPfunq8Jlc6RfZejqBwYeVr4eCGweDt3TD4UnOurNZa4Y/BYfmu6sL2d8yQ4t3WFbrxtWHJPxqolukinW6aeRUGoKMryQY52FzREYNDREKdRukpeUIt/YfZcxGVJduP06GvBLcOjjOCtINSilq2Nff521sVZou91YX1s7fao9vu3hqUNruBCSMa8n7fwBXmF0tfdF1e6UG151Dy/6Ms2qosaiZXQ2lBWAYHWEgb6E6i9WS+ymLQOGT4WxOXl8DPsCsi1MYr0Y9EbbrqZEP25nvbFUEOaXoFeEMSCYK8PCl5u8LSyhNU5RvNBKTK1M3PNmSUNK2gOo0zo9ZQ9I5E2i+//BJQfWfUDIc9lgnagJX0oNIy/+RuhpUfBKrMps12XTCCdsK8cnR53KiCChrNXkqoyM8npfG90e6fgPqcUlDQBtA7a4ki35Wg1k1Ob4YIlxdUptz4fC3XZL3iFm1vSt9pqWFC6pkv0+md8sWJRsfyGc3C8CiOZjsv9g5fWKbiPMwjIcKpbd1ETvQx3laCn5a8S/shpESlM0RIjrLm/alEIp5lxgyt1SA4W7FRqOx+FWzr1qLKzCpcoVqYyILV79CT0dsr8J7lKNWE0xNXIvPZejWi7Nmn5QseKkVfwNbp0BEtVDlb10WGs2/0fpMr2548O2EiY0adS8hInlOCN1dB9AfbyQq035gu++xbZHu38dJqjUyFUBi39xNKcihs56BS7HP/nnISVpY/rWzvxaRxda/eawTaa7ZTHcFPTmmHfY9aMkmUBVWAvpDJ3ltIfv2gRAQfAm5zPoF9QMjz3M9eJKAcR3gIiuLlajPYCtXBCgvSZEDgTBdrshlsXhTQTSj5w5AM6BKEw7ImqDCu53gRnfmcSlz1lu6GQh1Cz3w5SdLcK328Ahmw+uTzAis2+sY/VjLJYhcNyCohwbzyyp6byD8jeRVE03HimzOnWTikuoEMXWTwEO6DcVAopRQnPxb94kxPvZOZw4fdKwtlQ3LEdNFtMqYTeN84ZJ2PvUoLsKVffFmW+lztE+hYAxIBSfBlC6ad+0PpW7GKl7AKxz4X5V10QVV7/GIk7y+fKwOUokfYYHzD8lFJ0cHI6Zd1ONLqxugXsW8hSRnRI898xHD6PsgYUt8nGUO6wFnmGyeerryj9HviMpxe9+YqRDoBr/hAoU98fq94hG5Yca8OxiydeZa/UFn8a/rkIeyTvYEv/s0ngfhDmvg0EHCEfrX9PJrAPwNvpMxz5DROE0Mkco8vRO+86oGE0C/Lk0hvlusaijBJYbvyzPA4dLH6XmdyM17EXse9yVd++XONzGCbFVQYnzO5TmfNQlpDEZ6mCcy13lf8LIRF2Cunn80jnc3S/uFEUvtTZwZXuL/VNnQr9wGZLVvhitGBUJcA3ywnNAfjdNrXHUNhEFeS1gXaKXXcsG6gTgTaFXVkoFeTVbfuiJ7Cwq+kqNG+O5p0aXfbALulqnxoMBHXhNsVjVw6q2kT23dFk16E7UF+8YcTDUV1864oEp5e1HR1gHZLHXvCMVEnAO2WuuopyERhC3BnVOJZSUNa1boreqp3KTVRLZCdUabbA7vWJqrXMSVJLYhd0UVPbGqa6tYd0kO3Ii1JNcBOqdIk5uyC7JCyphONlDIRZIeUMQuoljABYod0cZu8ljARZGeUqbP6N1p3RU/z/VRNmQxuRzSWT7FK4poAu6KKPeeqaRKad0URexBWUyQ074gi/qSspEhs3hlFxaO0hqgGxI7oMlhI9mAbKd/GNTSJADuiqnxfV1LVBNgdVfyNXkeWCLE7uvCYqCOqat4RRbqCQ43WHdJT+BpoqWrA7JS2ymXBQF8Lboc0GjStNsiOKKt9KJSUtUF2SZnhqtGB2SVthstGB+Z/2PvWbjduI8HP/he9zjlZOxGvbGcyO1Ec52j8is5Kto+kTLJrZ9ZNsi9vj0g2wyZ1pczMf98qPLoBNIDGqx+UmOPYErtQKKAKVUChUDUmbSQuxE6aADImZRhdYieshRiVLusBTQUZkzKbbZIBRqKKBssYaRI/j0YRhttYKGo/j0WR9bpl/LsWHvFjJakFGIsqHjVkJkuGGIkuIfTISFkHZizaSASTmSzh83gUYQyUjaT2+0g0sTAqI03S91Fpsvp0VZCxKDPEc5nptDYYjWoSI2YhUvg+Ik1WPSsDjEYVCVWzECV8H4umNtrNTJcKMxZtLGjOTJgEMBZVNPDOTJT4fTSaaOyehSgRYCSqhPg/I2EdmLFoo2GEZrrE7yPRJEUiGinTQI1EHw9pNJImA4xFFQmLNNMkfB6GogSZBX6oCExGMgwMl0TgQLtJ/A6EYU39XIehTfyyiGFN/GKHYT3m98njnRnqtO9sKM7kWRC4fCV9usSQpn64talOzTQcTlJ5iwTP7Gpn5L65Gg3L2Xx07wCN5VUQ1UIfeRN4j0X90kfe+H53UU/1UTe+D7mj7/pIVCHHpdPmu1VBxqWsL0xdBzYuhdabgg7MuLT13P1ooEair2tcjESaQEe7E+2YKsvlqAE2Ga2d6iqnfAkF+saqqsJ6Yzmgt+Vmj1vwoLoqLwkqUz2Vd7SuChl09vX+dbGtDpDW2K2mCm31FcgLpvs1nn6AfiZsHzA+ERHbQULNEny12R/41w8++kBXXB1q1cPp9HXRgP2XBHYAoYYeha9v6vWjU/UKUP8nJI8+gdRDJ9mHP36y+N3ffv3Trz7M/jv7xfOv/+3JiycvsxpSTW/XGaTTrTOIXsPCgDRr8R+zBuPH5E89k/eYS12bXy7ZebAr3hEFPkVcmD06ESoM07LR5VErtDtag2YTP5qzdW+LW1PRxC9QcoyZ6b+AGgZ3xqb/AXUky9u3lvqhKt7QyowdjllygdvycAs0kpzqrBlbIh9+cfP5Q/J7Sy/iiKGWCYWBXumrmX+nypR4/otduYaUjqavy+p0qnbGrzm47YHuhEyyVrlDPUmtCyvQjH/0KNCM4O4Fmgk51gLNBCJZgWYB2zxKX9L5cq5iN0zpOpENrK2llLSu0mOnb2u9dTHDK90xLrBMOORol/Lwd0qw9yDdkup+fXXcB6HMVnkbE+xOMFly4c+O0ur2qdKNm2pNOU9dw89hT2JHBgUJuoVB1UYdidb25Tk1epp7tgy3VSUm2Ncvr2aGk+YyFlR0X6Jkh6KldNfHahtTje5dsNS3WqlLqdLUdUq1RUoDs2qnqeI5ZKppUdNZGf/iDOeO7MXpeF7hedrvyPQl3gTus2+xLyY6rGcP2WEt3IWHD84qPRwomfjICCOzsou4bupDbtxaCt/s9WCE82XA/aE0o/oKK1qu9NoIQO1qIRxwOSlzgzrXVQXoKbXW5ZJF17sVjGGz4bCqmvXktZR8VlHfAkq5dgbZUmuo7WWTe4oiCePEy1NemaQWXo+OETaVVmH7E4CBAXhe3VM17niIE0rWOBziCC3WQxyBSHaIE7DN4xB3rO47hcUnOccJnDDPTM+murNV1+rboXbmHoNt9+jWJfANgAUsAcTuvgQILdYlQCCSLQEB23UJdGfmfVkC7RHdugR8ZZ9cpznLPiHCKvsEIpnsC9iust+dmXdX9ge+nGUDN6ykL4vtNvQgDevPceUJFyN9yw7KcNrWHJTfTLXgOKrZrLbJFxqf+6CqjifZG9zZK9u+Oi+ssMKM8h0eSDyUkmQSb1wXhCJ6Y5SRRTLwxTKcl+ynQC9sIE2pzpRaKk13oNLn4Q6X2rEaaJI/99KEZdv3xQb4GktXvlrB288FHl6KVs3YrlTE1ryZ9nLFkQKla3Vm5M/mmVnD7wIhIXNBv4TORQ0JEQVmBMwExWDyhwgfzRfhIEfGaINqawxiYJsoS1Pd9xTBCvlyaQxWIN/6nDEunhhyr476kV2rrz3u1D18MT2OmIRemAQuGJOGlw2Po5PQphRcjQTuMD/44Jc8AEwJ1Gtiq6L2Lzi6yTcwipcoop4t36+4uCFR/Gsm/3ce8i9kg+71RfY4IhN6Iecs/5IhiNwiuawl54XTNRpdQnxWRM+9gXkVkluYRXVcgOFh5ta8f3Z3wMbeGkvRyZh+b4FbCxK4OlaUMvbKYl/h8Sx2vS2F/No+UcpN0G12LCB3AIzrVJFRSZHLY0Ypqx09e/LsaxJ+aDystDzknIDK+bvtb2/IOOQ56tGV7cw2wYyGStBfPnv8ghzvsufF5rzN4enmG5IzD76aCO1GUjqTgy9n8KX0Ylut8va5iKrL4WaqOuawhfOcKY7+hqL3Iqu7lDTI3VHCImzMiRknhXJGeg/ZHnpxEiBnlDhdvSgJkDNKWJzlNl/DIUVIxaMKHsJ481fCHESPqGGcuvFbbqDthWywHQ8GfPQeM0WpVeKk5Qckvp8uxOw/2U8fCHH+v/gxX9w+XnyD4f7/+c///SED+W/4r10rU5z35QneBJzQWiyPRf7KyNKXkLs/Y9AZgmcUPlDf0d7h9C/07MwH8BmQ220p0rtD8XfgWSBg7I2DB6UNdbQfFyN7XywXdGgj2Ve6FSB9yltIL9P6l2IJV5toST+9+STb5cdX58O0D4DUjl5AnD9McnOirgn9OGwIgtyfIAVSMgdhZ0pv8Pfw/W8X37qscWtrKV/mWx+rQ63BAyF8k2g0rqqw/BLawRpIUr6bXUEc0ODUMe63XV8bEgkTKQd9tIaHhMakfMp3ixOLAY5G+S5/A6/MNu3mRCVdBRjWQdsl0Jb9zSXzW4gvG7UUfwIHR8sS8si/yTYVqJJyj5HUzelOq2hJovDmQVKxEtOIOekqdFQQJDZfRfd5k9iTWcIY3EACRseOdXvs7hncHHxTFts1dcuQZvQQ8T+x8f9099IY07ILpEgOEEdHS6d5EodL1wg7ullUcm5wsiJye1gUQUKkjd5LiDOuJG5nHonY++ILfnYF/S6rN+5+WLg8g1cZgc3wzUcV0K4u8uPqLqThodyDjjiJxXpT+o/1i8CgEIVv7WNJaCppvhDFJsqN+e1m89GwezIdp3wtJiVMVLZaYXd52EPBIcNyfV8d7ZdLPzAgkxLnSNIp8oascGWuoBhcoduHoGrwq74262tl5np0tq9C0fHFQ6nw5jGKRTvAWSmX/heEOvXhpHHIlhTMjT0QjgF1dQ1vnk7XNASF6xoFxei6Ru7fS9fozi+R61ehZtQ9F+/be/cU2K67AXJphYVYy1Ox470u2Mwv9tVpcSz+fi6xBqonUjqL3rs40Buru14CUm/rdBLroYV58xgtrBVTNy1suAVrnJ7cncBmMkMvCXU2E0R/bP2ZA+pmWdE66eZjvi4rq2J+jhBU6Lu6mTRPp5gpNeFaWWw/ukoWOp9aH4ukjKqMSce+CimoEVeopPHoyqzDaw9NRtrGqLEud98hHSYoJCcFRjWTVYPRkAe8MP1TVb3K/tWgyyimdMqMURauzSQEo6szsfcAfSY179dBbXOp4aE6YArgBb/ZG+btR9iWLqxV8HY10NkHp0MWH+KvW2M3uVE6fZzNcFBXdAft7eXNl0OapO569bBJtHGMUdKs93fIKolWRh/8oUupCek0iz25qc6Wb7M8a9LYZrtqfYYAZvTF8QHoaKRFWezGjYAYjRrFkM6oMYrCjZqEYHSjJvYeYNSk5u+JUUutp7os8NBTtHGMntKw8B3SU6LCcDv/Y8U/+/kfIYz6hbRP6AAg5EQ4AIT24zsA2s4DdIvY+qpawk7lKgN8TuXYNupU3uHfu3Qqb9WEffuzxigqAg3Bo68gnXgB9QEzuKWqy3UBWyBcSLYdzy0kRbeqo28AIPvzASued7URtk6njAgt4bpIaD66Kmr7DtBEQmN8Q32wlEXyXaEqXR4LFJvGrM/uqExvc8WvhgvY7vOcYddfuyycrPodZAYv7E6xPxEQTD0CKqe7kiiGdGuJURS+miQEo68nsfeAFSU1Txzd0CXNY1HRxjHLSjO0SLs35DoSF4bTSip3+cZukJ4gBGTEtR7DCZp0q4lSFb6YxPajryWhc3Up2UDzrWiHHBad2Lg+rq7u5/fKHZzIsZv6iNIRfg9lTdrG6Gp1ORkLy/TsfiJfBumXp+kNSPPJ+AQEismTVynC27xhrYhgFHqTdreJtQ53x7yWS+zau3HpAIN/ISITnr32Pcd4DFAsSQZr45Eqg7VwT5jBybKmzeBAyZJnyAinfdERGH1rmh6SZmuR79dgjLb14v7204EqxyR7wuCrOpkn4Zsnf4XcCdX+FqSyfgB/WG7PR/wvFCwqVqcH1Z4WEedOBNUT8RJvXuCf82b79kafkrFvYrvFM3paiGLuKp5GLC5iq6BCDPoEMN0uWwXpnH5E05klAd3w2ec0g7IknxuPHol/+Osw1kHW+eZcAV+dC0yMsi3hZEJ0e00e7MMjR873BxkspTXsCTcZ9r0tHpK6hAdwsdHVBo0IqgKWIxQaJCYB3kg2L8jrooCn4tAJXHXC/NUlpmWCGQMXYL7dwp3n/av7HILFCZKXxxJuQkHHZE+hc+wUTkzQlj5Dhw32HuF0K5YqDvs9KKE3wz1jRsGpsaN/ZsMpPNKjsXgCV4vHSLTZOwaSytpJ6IarkeD/ZL0Pp0g4PEajjEmEbpsvY2rDS7hGjZwMC1/ptkp3YNGzybRNl7+b3ydzwIEeKGuEwUCx+HGYc45GmMZyjUnayN0gQbP+ElDfU40q1G/izbyUq1/9poayHgWbtn6TgjDJgULG2VFYI2njUDXlmZGeaqlOo6RKqjubbis+ySrTlMDyT44vbm/mXhyC6m+HrRjqiGewG6MqgjZzVxAU3lk9MKpsyoGBpFINErqJPQ0CKZHPcSVU/CwQku7WeIqXDu9hyog5smuNnwK7RpgFoZ2OhqSKXReHYr/GKufZh824aATF7zPioMZzDbxtLWCt4ElJJHDI+Gw8sHi0ETKNevfXtNXMXTqN3JXGkbP7mKlpGG/KhSR/N29iOeBQaZxEbRZjVbqVi8PsyiUZqECnimjXenbJllB3ff6nr7A1yC/qFUwABcUtQHjesNti1wxQyQ8J9qvOwJx5OqTgrdoUliiicJw52WekCKaw0G3ghw7IXsQhCYekgbuQJoGadRqERpj02RfwqMFYfOFUbcBxmKZ+AhuvS7LrZmm7LVaHlxR8VWpCOSiS0CcV7KbedS8rTYJ+LysPKtWWVod12p2thqLIxGjXZ4nXZ4nv6rPEwR4YGpfhSC93NG+8TTrCY//W//SFW4TuExjJIPi+gRnMHmhez8Sbg4me1HR794q79dTz4hOGJ9nmDKng6RPO+lRC7bn89hYOB/gTVFz6/plYeORqIa6afgYP0JMr+4neUomqvv/Q3tXkbqrfIWkI1/0/nOs7s+r3zhkymO7XZRuJV/5TpSDRdH9V/1f1f1X/c8w/YlysIyUgCbIZ9oweKTzKHj0QbWh99QoA1PwgqLu5QWhnY0OosJkardIOtTDdQjXJg9eEOIk+R7H5JpPbhRdyYheeZS7L92/v8yaLi40GeDJ6V0UEugmoiv0qzg+WurSNNNX4fhZS8uVH2JaNFZhCJN1dI24h7hWrGwW3o0n0fXUwFtvjC3YYZdyVeeMzZ/laYIi3NV3hN928il/t64fQFU8JRcOwKJNPjRBcnai3GiwheFUbvqzLfFtBYTHJirXIncjjS9swU/LnHv0QPVcSHttk5Qdch0SuH75Z3N/fE9WyOIPI7lfVuhPvKV2k58fTw6YoadzsKcrH+sRfgUpypyrY0PgiyOLGg8D3bzranUTflgMLO/Q5QEn1BwBiWw/2N4/tB2vhvgXhVFm3IRwo2VZERph2OzJtpKXzGSSo5QjmTBYI1txyT7eFeKG9WJ1A0/vIS1JaaT34SYyqdU0+RQi6IAmw+2pU4l97liKlxLYOKUSqRShiG+pAIPSBG78UcSMqSoPFaT8lDhER2RQcMSGecyBtEz7Nqpavy+pcM2eYueCo97FYkHCfMqqfTVdHtR1TKxSRxVU/e/eKq1p0cvewKZ665LXnU1CUYDFJnGYFCq6QlEuw+9Ib/2g/fXUgBjqB6WnrOWN0QXpetgsNwo4cDignOH1IdeUeHrZ5qXooXU4n+rHZz8MdCAcGxByP+zHO5aSsp9QeqdmBMC62JT4YBztGLm6A6YvquHhVvMWCV4nmdF/BkEvozLr6OlDmuE0ZfLTCwqzkvDECVfpseF/JgeJnFi5tYHma51T5PrgBaGqQGAtGS99tBaMp4Hh83ear4q7artv9ZIe3HZCBy9R1qVyXR1txc/nzMK97NSUby31PrW0FYJRa2ySXEBTGWeB7G/l8lbBcte8zAbHoUX4+VTB6CLeABRpZ+Yg9AxXScs62eHIrDQmRKio1CUphuQejJT6jw7E6pEE3TmnTbiWpiGdxympEEe31doy8hK6CfxV8R8FPXSc4bCF5uAst1jA4oVuqIXVMlymBQfst8Q5WpKA+FQf0bedGOhCid+cKcRHdTaueZtJZ541v8Ka2Mxi2nRprOKZHy0kGdClvmE3W6QYm0rT/FOFcX8VKlq9vzEqEmfjl9taVvZ3RDDVVxttr7ZBT5dOWEq37uL7dM8o/yL5+c4LCEPggOsCd3LfxcXUoUzzo5gkYLcmpSu7Hu0NFlM4DneO2j5+fZ3kYG2CnN8R+5zJ2jw57cd99zAGyqKDDNGBR/cCamhYWR31Bi+vCVsKlnHli12tL4hBrf4BVJdeu91pVX7KmneXEccYsJ/0Jy+9k5cOMiErdXpPmWPb+HZ016d2Xz7T519p2mcH+6fIqO+o1IOf6qhOKgjUCIaFeEwMDEqONfRxhvRdOjFW4nU2np4Rn9l56yrE85zjLTKh55zMIt6J+Ey4wrQdmFpsPVpFEoG+VH07nY0LR1CE35f+XPpsdMWfIs2hyxRT71yXkgkfOpskq1a155SObnvW9rlbgagW8V69QCumuKDd3EbR2Md6X65QHEQ2xBmUgfR021sE0agNl4scxCEMhOUHJ0MW2WuX28P6vABTelK6zlwBP63V8V9G//F8IWIHoaLKo2wIXohqS+0lXb1ChP7zwoBbRiHklrMrVZdQBxT+1aMBDkGL/QMxjFC4bjbmQQSGWxhhchtvJGe2/tPOXuNCrWRw98izISGKKCRrF2hz8Zo/HkxGm0bStIJuoaj6NTpVPRRD9NtqSpcFCe+Q+2qtSos7wOR0ksWGvndQbwLRmL9LYXYCJizJs8zVnczNi6Y2OJsIl3bwNYLwiTFasoUpkniLUfyJTFE/BOGZnKmPjYWJAl57urDbm/0COF3IWe4agXWtDMKQzN5SgcHsjtp+rwRFoDLA4YuuZmRyJtKvNCZu4xEanI2weVoe0jTE7qqyG2h2CJ1Dtq0IZanlS0TC87ZEoHdP4CNbEyfrgqchetJ37/+DtnKv/D5Gms0eExHBzJDSfqzVqSQwwRkLjmdkikbL3whRF+gM7s5bYDqli5mGGsGmMFVKENNQIIZpA/a8IY6gJSkPB8AZIpHNM+9PaEyfzc18Ur9zOPn8ByK6lwfbpLA2hJtzSCM3namlaEgMsjdB4ZpZGpOx66Amat8S2RhU0D1uDTWNsjSKmobYG0QRqekUcQ21NGgqGtzUinWPamtZ4ONma/Xm3hDgKm7X5joB0zQxtms7QMFLCTY2EYCJjY3y+bBttgNmRmicwFjK+OQUEaOjrLxqSMNdrfSj3YWU59C3T5V81CZKHWaGNYwxLRxD9TEvnqXmgbu/Ir599GYSMoYyMkdgx7YxoOJwszRFry1sNzZMd5CxeQWX4zGRyCI50FoeSFG5wxPZztzcCrQHmRmydwNpI6OZnbETyxrU1ELMsp3R2sjOdVqltTEd4fArOYdsYC6PK3jQGRhXZaexLVzLdzEt6SryMhaD7nWwFOBlKeyj21wiRPV5DRp267hoKgiCdoaD0hBsKsf2EhkLIa2Y2FAKtDoZCo+l0ueu9nmwZe3OgmMi9GWdHe+vT4lspcOgf09Sqvev67tPTuo2hdgRdNriaHMyH0inH51SyTtdQHZBh2NoxeMqNnLChT2Z0E+Q+SfpK6nF12PXT5SulGolRjgB+lr6z+j0sPWkbY+mNC8nXyLVuOIIyp2Yi1NKZ1UsaukRJHtIKC1bVyQpDinb7ee35k67lhUbp7C5SEG5129Zzt7kNpQFHs7Zt/1HlakyuxmREY6KItYcpgZYxhkRdE8P64LAKSL6sqy1gnsIV1+hpt2wrpDimVbG/ICCahCrk93TqnZESruElBHMNLxCJDNDvUvMgb9QA2QSDHVxkMAHlv7UNU7u5upzyUFm0cYzW0nA6fIOZqr5DgD4SNYxbvG1PWb2X8PFwhxG2posBwJAwtlatnOcXWpuiUt4ou86G0pAA26btddd53XXOatepiLVPQG8RtetU18RFKu9GFztp7lW1rezRQ18iRFdhk4bpVDalI1xpi+1HVNudzgM0sdi6Xxe77GG905+q9HssOdI2ZtF1hz9kVB/pbYoznrDQehYmaIwGuymlH9YM/Z7A0ZVJ27ivRgrvXK6YkWSrV8xAUhUsltANVbG4W/Q0LjG7vRSrPz5xEuwllRMf8kByzsIs9rUc5kjXGX1k9WdRLMSazPWhWGV1/raGP0FC7UUG++9Tdn9XQo02/KEt6OuqHqTlElw3OkU9aFGX9PSAe2kwKFCCg2YBh1qdC3iiAsU6t/Xi/vZTNhzvMg6PASdVUrwHmskR/tKTyRHY8HgLZeCLdSTpxokiJQq9kFvH75sQ/5JLgsU//1C4dhnJ8aOLd2hk1e/sbQh1MPZwf8wPNzAOgVP2BrhqZI2u3R2EhlzoyKurW+UcbTh/+mJXx2KK4tCsXNWOBZW2UEsYhdpCI09NOTgBQN2pI3zYRt3IMo/eET5J76E1dINKOEn7BDjLb9fZ6a7IKBvrrNxniBbdQNkSeofNXw22dnXKl9vij2zjII+Gw1v3908RYXWb/QASVm63GeRjYzaUN3ff6vMWzpv9hkLbdr8BSrXhV3o1W9R/FMfq++Oz6mg4qhDWCDseSkO3lduOzGeRKnNi2vg5ZXwP3O/J0tXTB6tDEVy94Uui5N7o0ndT1LoyDv3bvvhd1DUz98XUZxD8a141DaAZlTREMJRkiY6BBPnIxZL6kawRULlV0grhiDhog6XtQJirErSgAxXF7E6vyY0pfjX6DJa4NQetC6dImLk3p0V1XLwq3mKFNG83voldY5fddJ9Z7canrHGXs8rrArzONS42TNuOuyCYIxwjlib6659ePnua8eVX63dBwoQwlUom3Wjh+PXOm9ND2NyV4pAts4517sIKv5ASedCU6Rj2N1c903uLYCnATLaPIaWUSEP4U/as2J8p3RTZUOX8hvAJDHCOQkl+ssc7uHV2e6x2WX5ANycZOZAMEosCSsB+keJ/WnmXXKaEWNifePEXVuPTx3/Nvvs2ewGV5XZ5BvOekaX220eQRmaZPW6HlX1TgAMXIpPlm95fmDifeuwa8uGhDygLPDOdqgw2jjAb2WOufZKJpDTNRG/DP9AxHsdi3frcAXTMN5uE+Gjl3kTIDtWhem1zeLlvAyS8FRx67a5fA0GNqLsdd/SMM70gY99BnAj8I7RCYkPXKtf6/swW93Q8m/YwXxDrRLcL+62mqDn9+22+rYfaBhmk1ZTpnQNkX9NT+qOsaeM6f2onYTOnm5MUU8AWmL2udjN4Cu06cgm3edgcqX7g5/2p3IIZPe9l99xAIsF1hKlKMP3czgiDd50SGb2l5D9Yd9OM7PL9WamfIc1mp3bZIBOF+kD2uvRb6W+31TLfZk13Nd9t4AoDk8dcYTWtPcQ1Dldcg5hBsqXaVetUBguuS7dbUtw2EUKyz8sPMBVbyIOQCCnq8yMc11BY5mMOuUj5WMOWf0YVBr7e4g3cYoMJI/5o4nd7BOcy1tJ17apd2Q7ze6MiR+tn/mZc1uqLEeu7RDkDTnEsV6bPa0hIsjMrE03QdxrtISwT04mtgcBjM2aD3Bzz3Q4yQ/IfH2FsAoNx5WGn33TWeBAtq6x+0/FBhCI/uc6HFr/Fm9LxmTjJvNkJA24SUO0rPOPoAdChZPy4gjM2bJ+LowqRxMCJOtIUwgGaBG+ivkbYjLn14R+oInoCG51B82UFF4uQwkFE58odDQlm3hBg4zq3cGdj3GnsLboKchm9LquzkTda1SHyXd3OBfIMwhk2+MrYemP4AwABDHg61ugE4BG7vK37dSFv4Xxd2JBnuy5sgFJdFyoIh4oQlLuJfb2lYAtInBQa0cd7XubeyYkMTdPF+WnnODorTlxlUQ2nIvMFwbmLusvDaYmMJ0Qv35f5HoMbC/TWQ2QjbtWY9wT9iVD5IIOdLY94THIjLWuvno3vusy31cZemo6AZPCU5QFscDF2E5Tdgwycofflfl3dszAJAuURJEHg3UMkKJ3WAAkKkiw8QkQ3lLYTO7mpDv5uyVD1xKbfUzPl2+J46jZNp5m682FQAsI3y9YSgAbaUUvyaFcQoIzufYJPCLxD4Imwcnuwg7Cf7a9Fq2oL1oauZIR2X8cI7byKCSG2NUwAUq1gAVna9Ru66LqPF/uXHIS/EoUrXMa5Ndwcq/PBt1EIhdgm4Hk6EZyANgEbqmO+LsEmBswHOgsDpuRE15N3s2OhZkBz2CwWeOAlC3QYnSws2uAYwd22dAkQ7MEiasl6dSwPp0V9PhyqY+vi06P29jr6KOJWu/apYT4Jdi2cwTMYFmq1Ld0V8bZ0V8NAiFULw/dkSrjBNakObjQVTm6I2olpR5yDgSoS2xP95duYzlmAwgvRWiGzM4LmauQ8wQ4t37/O6ZmKwptCdAkciRX56i00LVfZtxCcf1euWM5Vish9XVN457XN6FQHZoJLtczF6WnOqsnHo0aKjzKmgV/ECp3c3BXl5i4iSFVCdl+uYx6gWd6cRlzqaUZruukXv5rfmdICRnG+J820md7ZCB9HoUlYx3YddoKE0fB49ghS7aPPlHWV/ums4yaqo16Hea2hVVN9LrLiBJeh9ssAHmwH9zPf7xdfwfUpXC52apsyTB5OMtrA3UvGSLW6yRhMMj+ZhG8wR5nYy6ieMt25ER27CLWAIADgNAQB7M70QRre8GblLbxXgxgnRJexbc7v6R1ztnyb5XUNbjQSmsmjN4MP9Qldb90ZnqvvTZLyzhqvz3il/1Y6b47tmxNVRl/8uUiucVNJmPqQwZLdJeuDBzix+HMK4K5hWANnDcOptWkYDpNKw8j45uHKCytvNWRpK5kzHrNk2lrbFfLdpx2Hjt/+8u6zWAS/iUXwT7EIfhuL4J9jERCD0IPE77EG2cKO9Eijt2q89Q3GCwRakafa2bP8+Op8ULP0Tf0GA+vcs0ws8Cd3rUyqLruqZDKJNn3cLXwfoYzTlMEf/+QpzBJrSt62zeTO3rncNQHEJ529SwdljwY9c/A2SLqVyebjkMLZ0NsrpQ1kUnFVsCbJVihUYefop5dvhR7T6xH5u9GPgTALdXDuSUQ0nJ80M5dm6fSd/EnZEVtojJQlxC9DiFd2kN7MIEmzgqRcJy2+Tizf+IukQ4xb0FtQIptuxzNYA61E94aMwIzaKx6s8i1cVn6bnzfMnpA2PpEjAO4ROoIE2WNHECJd8EiLLclCEBD6rQSxYVQh0TZVG+k/CpdIlHTJFIPoDjz+aTBFVUhV5ykGl0gUAu7OoQc1k3ROVtRSlcuxi4yqImjov/00YP9Eco1PVptvQ3JgggKrOuE2+ozFz4PQcZHB2oKd1ZMkJ9IgnsRxfDOkrw15XWvaAnxg8848XsETrLrEx7bPy9UdDARGui8gPa2QDcTqnWGikmSIDBf7D+TVwZBKeHx+Oh0ePXx4V5ev4TUTSMmr8ua2fEjudu5Ou+1vF8uyfkhaNU6eMXJ3PH/y2PigS/8AGjNI4+NnuHdE04UXTOmyfLQWER46QUhLpG0ltIIzvLZkmHEnCZ9yg3fdntTVlajV+YhX6CnoWhcYo7gs1sskw+R3wSlGuS5rfAUfkTaopas4HjFNX13nm4iHWi0+vGI7CdFu4Zju8hpyI4j3pRFTFps1RkBVQgwC5GVLMUR4yAm5wo6n1fkUKxkE3zZfFttkiEDC0sj+VoigicFT3e+TTNMRDPbrPI2awItBqiqUgM1YzdODbrBMDJYCKuKeotnkifCuT9h1d7GmzVbHcdFaSnjDyywl2bp8R0K1sufAkbSmk657HiySRIlgWEltwxXIX6UEFixi48SG7yIwSTjMRZrlc58QFTxoLCyn/TRzyqPBTfPat4DYTgXRtAKQYB01FcuSMjyp7NM9qFP+VR9tHptEUaANMkK+JvocshGkshBFDrkWtknS2tuehCIciWKMlEyV1wlEk705nR9dzELMj7LbcgP5KGdIF9Znmh1VNK5y7nrPWbck0Qd3oHZsTqyZzArsxG1HliRTUe5mqHvAL/hqjlTR18DpN4278/ZUtsU+3nHL77pQksh38zAyPdd6lqdHeSnI5gIp0JPsqABNHZX5cHwWweXD3fxWO3tkml5s5spt5dQVhYvqssElR0wnlZ5R8VfkKcMSFFz7mMgEBRdeBg7MKfrO+7qYZryYwEc0FyOJ95B4W13uwSML1nstvSYLnaUUfV38fgi4PMCJ8OKnhebfHGZ3P4TjLLWjkJxAMBxjHK9eynNMIv7DA3NMdXrdRwy1j/C4yzyW3ewpw7AdLqulO78rz999nh/Kfc+96pXvo/F9JP1O/WqDXPeuoNhKonCJ+x5caaaimOM1BcrTdfv1vm6/eFbJ6zWVHLWwPe/2WCsUVMMCL60G2avUEGV3eXI3SUgOoOqJo5lpeE9Sd9N4x3ceKm89uSG52X/9gQB+8MFHH3TjUf9Iv/2SfpIETPOJBoLLH9q4bk0DKKwCTzC2ui8sgFvzCQM/tXTR+Ev26WP4D3vCwOeipqVZ2XT+F//v/8uOxab9XfrIIXIICFxtCxvIFtgFyVZeST/zj0sc51H7iVpDElJ4fGuAIM9NSniBov0OdZlk4vmHff66xFRz9rHhRZ/tO3LwXLfT6e4ZoMXfZ7djoux2yQzXPzifGmIyBiZScWSwoYRTwaV2ajIwofa0JFAxn5gIqifiiGhYGk6GpJNmQE2j/yanBXXt5ES0en1yUqj7fzAyRnjOKDw8sz4OcH17h5icy+Lhm0Kha2PqRDnThK1moALZX8+XzTJMTA5n6fb9oetDW81DOcPMsM9ekyOjdJ2fA7w7c5uf+lQc3CC3UMCQljx0gcacMm6QmHnGEXKmXGc39iau089+XJdQjrMqDKC78g0S7wIKpaPJFNkrDiac+ebJpmHq+XevuVeQXrhKao4Phini372mSEE6qXyOLnT2Su5+ldvpm3qn8u2XIW78Ga9hdthnr+mRUY4ma7oZMeJgJZMdTS7WRoY/panLqnn+aJh89tlr8mWUV0NkmPnG82mYev7da+4VpO+mlh3hgKO/gDFXMO7JE6L+qmL24rGBLHMZjTX8LrjEcfqef/1vT148eZnl6zXLOQOe4z1LrR8m1WJaE9OwyVe/wYoIL9bQda9xTTMkwPjNUxe562yVJDOS44EOfI5ukEtIcOAGqalOPxQLmgAK07mLffc7eMlIddPuX9/GOFuLTxPuAeRrRvOkkO++kyIi7Z2D4BrT3ZtX8zDws+8oBJTjDIIlYTKOgn73HIaE1G4pxMQuQ5oKMa2T6Szegvgdxzuo5zRk+tTLOmQCEjBkEXWSfLvdtFlGuslnT5qVqkwO+5cAyqXEWiaXhgDj59boIh9sICyjl2EI9KsX8RLCeSyRJteYyVfCvvt5S2SkcdtIcfR0uJgNC8v4t1vy/tN/Cg8CljV137ZBvKOry7xw3A1ujuiXcXLtk7wjqXcuUtY2g8CIMF5Co0GeWKXSJHEGuslHL4JFdENQSrPQ2cglEP40i4jnoYXoO0LTUPGj3ygFdGNsIkmaPxP18M2P+BaZq+Ksbm8jVdsBjg+ul4GsDCAOK6162VVrc85e8tFrIkV0l+3JaAPITZPDAfwmSEH7DkySkGbFNlUtmP+Edbq47GkTn2YZpkwA8ZquLmrXqXqNCgbqdLhNF+wayn/AkVsH76UF3TzoIZOM+VtNswvf/Ka1RTYP633Y5qvirtriAwbTvVYL4ne31UGdeKfVpJgwEc6++1EtIx1jC9I8zzCMg3/3GoeC9BIVXTekT56u/qBA0xMYN66wfMtGrtDvnlyRkJpLGedbjULEo6lU/FW7xWNlwUExKe21r0OMeI7FroLftWg6z058keOjQkfEnz+Uhz3uLHgQOuj0hs2CrRMPWq2TOX9ZSDQLg4mC7/SGzYKJ/NnIwSgrIsEsDKoY42QherPbvO40Gj363dPoSUgv+8yllk4wTZQM5jdf2i4Sb56bnAbGAdDvnpRLSC/uer95rmueFP/rfQXpKCcK9oLZPAzv630Z5RiD4Fn/jDF/5LNnyJ+I8uLEk+QDME0HfPObixaZq0bOyZ1dN7TWdJFF7/ic4TXBTb5eIFIpJvW0N6mDDFPPv3tNv4LUrTqh4gyKMGNNCiPrmEo/HaEgnWRMmErJNib47j+mFukkYyIpnWyDorta31EJaEM3FyOEF+dbcCibRm8tm9QJGEVMHjWWFD8SbssYNY5VlAfKlqlSY2A0QrTs1epzOiGCtgz3zbl644QJ9PH8CcNN2VELyaq92ESHB2bECxDrbAgx8khtRe5Y08ujMpNhUqkJghlJNkXehEloT+Gg8E4pfFvK1iitLUistAqdzUbpaSbAX8jEKRpXyNQp9RcyAUP6Tik8Sx5jEjD6OVa4WCezESxl0P5CxadlXIESp9FHmHheDI9UQT4dEliWcMaUy4J8jRQj1sVcpEgZsbcQ8TkZVYbEOQwSIefEQh7dUVCaENiYDAW/xgoQ7WKy3VhgcVVLiQQnOZUn1l9O2dSPK6cCq7ztZk9u6aCuCCipWGt6hATfIuWToPeRzmtyzQj9LTHTe1VQdo+6Jlrx8F4R1lLLAd1QQF5r2Jawh7ywiFsVvJuW+241i7ValN9R/g8PDdoZqL+0NFMxrsRIU+cvNX3FpN27w6mnyZRpEmWzG1CEsmRW1kqK2NRbj4YkYQ4oXRSao3m+FZnSe6xmmnt6/iZNs3YClJWAZWyF1VnBfTaIl5U3Pg2n3002CCVdky06e/n9V98/EowFhmPTGOxTlT2mj2sgeKe98XFWUYxeb/XkVUTBdYUa1r5qJC+0Xn7KdPiJq+NoJCJivXIZH3mtiqLsv7ngzRN3x4GFvMNm3dACxW5SpQ7n4qLST0OIgIkTNbaUqRMb5LfyzUTt3zlr0aaYtmQrYSDRQtd2Nh+R605AgMAJUzSyuClTGihsPonGfTsm8OQXEkFszj7CISLFTOhqLlKmGb23kInzM6qMqfPpbToFBMm7pODWGIkk4RHvamREbFDEJPEQUaEQflEQHgEQazgHrKAgrDkVFgeIlkXe0Wz0W2foAYLUTM7IsiRNZoA48fapO6TQTEyMMsX+FitSvJvZSJQ6bn+BamZmXHmSZjJoO9agSNwlAb4tzK+o8FukIBH0cxEiaazeAkRnY1ThaWfPWw+Rpgm7oYDl5nw0RlvRr7ECQ7uYjcjII/YXGjYn44qNMIf+gkMbJ+2KgkJSRaPowLdYwUH0sxEbcaz+QkNmY1yRaWYvyESR5gm7IoCYitAkMDRNYZTAEPTe9xg079vw96xqHqh35WZ3iIra6U/Wc63KrkhvsIbpZPkcXsO0y81h2dsi1fj3BMs/LGItXAUU11CL9yPU4r2KROws2CB1NEFEoqwCetVSZU5hTT5GKyTsYNjAitFWcOIgcHnyA+SLsGdk4WrY6X0Go21TdsQg88NduaoXfV7EDqBJtPVyrPbiQpuhaQTLO0MYmf2es2AUBRXPUATIrarlf8CGoFdAKFiQeLAe/IVDIS1cNDjx0wiG2/j7xIJhGaZzuU39FkKYLNtyCSxIJFgP/iKhkBYuEpz4aUTCbfx9IsGwDNM5aYMRrmTeDAU96OfI/RDvZI4umiF9h+rkegtzM/2jCrHELm/h5a3Tdsbq6xsFFT5FCikin4vTWRyot9CQqRhVYJqp8xYWbJmuE+rJLvevzOU19q8ixYSgn4ucSGP1FhQ6G6NKSjt73qJCmibshgHWxp0xraYZKSyAfj7CIow1QFiU2qJjCAufvQBhgaYJu2kALS98mjJe0SIT9CxnimumdB7b2d8jDfbsRpWqoJU5/qMbSU6D1qfHkxvHzhpYkF9jgAL/nmCdkm68F2pT72P4Fcqzzw7f04Wf1DpCE7QKqViNvgxbMQxah6R54u4osDlyPz5sf6iY/SDpiYmzHz/IPjzC3iO83jW2fpebUwLjt0gxIejnIifSWL0Fhc7GqJLSzl5QLBlpnrArBnj8+7kwV+yjn6PFhnYyH8mRBx0gPGxaRpYfYRq9tQ1vnbYzBnu6M0vQ6S5afAD9fGRHGGuA4OBsjCw1fPYCRAaaJuyGAkIlb6OwkCrfccKC6EcPFrncA7PEDn95VsuyjyDPDYP95RmbJuymAVzmxhSp7HMCqcZOroLtJdgiX4Jkm3BudPFuOB0k4dg6bWcNrM0TxL8nkHRvT1B6sQx1KwX5jULFO87H0jJsdAGP8LE0zRN3JwH3pcBU4RLJ/DApMT3CSY3jDxauiTJk6mc0WNh8M2b6dq9ttGBsXoBTV63B2CuR2f3Dima2AwHoq/roLpMhQmQfx1wky4f2QCnQI/MRjSNE9xgTUElAiTQS7dBPHfXnHxzw3c1F23KZvcErgwnAJApXEJjgxUdxDNFxt0WQkiUtvTRs5LJz3QG/v6tmICOTcik5Ux0i+eG2ZZ+/LrEiqjnjXAsRKd5CV3Nx52pG7y0s4vyMqnTV+Qy6VhKQJO+WgkNZWKNokZKx7rtSgst5Jyr17M9WtZztCAx1GJ5Br5CmCbthgJD92ci6U+y9IEE/G00gjjVAWHA2RhYWPnth6x6bJ+yKAFI2mESGfo0UGtaFv9h0jykXnjXgMrZpikh4rywuNKOuLVHIvFUxa5y0K8akom4uSwxrTITxsawSbmcLq6XIm8UyzaMy2mfYBnZLKObdrbPhB3WwwXp2lotNASRSo4udeV9wNnX4h1e1TXn8kbrCqvUjdUVKyY+VtEInXAE6QxC/kVWGIq4BS7fFkL5T2o/NU5zCQzyMZ9hemeY9dHJFuoSncAXHuIC9XL/uLl8CaU1U1EKkWBcTpSy6qKxigwX+aJgdtm6myI6kik/YCvLKk+TeJQUvNpbjB/0au4ZoF3PxDCkj9hcmNifjCpIwh/5CRBsn7YphvzdKTnUfKzbSfnluSVFG9AldQhrZlGkgB8jdKAqq/4JHUR53tXPR719/9m0Q+x6/Ei9rCxQoIrG7jGa2xxaWqB0Gbx7fHTn6Vfd9taMbEM/C0W27a9Xoayrj961qdGfVBCmoSepFKwu3Z7R1kR9Xd5Zw7QYg0qy1HU1t1wap0Uxy3sDGLFHB53RFmvs1QMj66IqN9/oQBGvU9aEIorcJb9un7pBCr6CXreXuqAGIXZBNR0ZHtMXX5Hid5HgV5HiN43Ot5Xcr4yTzHc74y3zLu3FlXua1v8w37VN3KKwQuwVKYn4mfhg3mNtWmcBAXTyJIo6IwmIIknbHQA/5MYf6mWaRZADRUsk7emcFU53JANls5npk8ZR4E7BP4O1Td0iht6V4PFEFlHyNlU7axTtj9OewHmSu+S8GxtdxV4IgB/7LgDZO2hUFPZR7GPTJfJ/WQsQuhLar93AxDHSC7LLPfzUIDB53RSgC4b8qWgTJu2z2COfauDLI19hVQbuYy02zMmJ/YWJzMq4gCXPoL0S0cdKuKOh9ebKcx8jXWOGhXSRN1sAD4JykRR6iv7SwSRhXWoRJ85cW2jhpVwKo12Ng2iQ6z4IHkQJ84ueuSSWhn04v/oW/bIXM7SbmwafIxY/IJ3ug/R7mOxKZ6S3fhN2jqrlGPLwXDrZM1wmHa2ZItxS2sQ851RoJ70w1aXnmQuQO53ZsyeO8CJE9aJuyowbSUhqGfU4gg74FYi4jWi4oRHGAoiajeplUmQlae+NX2ZGkMGj9edTaceyMw4JEghyZFyH5Hr8KaTdzOVJ3xh0iSGxmxpYkYSZDRIk2T9wdBS6Oxjyg+C1WiBD9bARIHKu/8JDZGFdwmtnzFxpsmrAbBvjGVuiLfY4WGdrJxQdmBQSRBsdtzTZgdUCfvSqNASuayevIi1qQ74B1TVun7YzCljvzFS75GLuySQezsQbScP2Fh07IuKLTTmAfL6vKFrXHPsfyk3VyTWXvLnQKX/zFjnNuXMETOe2vs1jrtJ01sKfS+AiKfU4g59jJbDSXMuggISLTMroQNdPYx9ejuZIVfovlKKK/gEqy1zQCSdaLKEz+i4WI27grpRFPf12LTRN20wBujqXxApV/T7AqSTdXx++Yjt9x3/ck1gfv1BWVusyCdBVdiKPrq3bhOigTW/Uh/j2BMgmsPhSYXvRylEiiEIH0SbyGiTdQBS5oWU1QX0kW4aCtgE99JUt3uHX9RYr/mTMDwFJf5EuYcbDlJtVwdzod6kcPH97/ZnWzKU935+VNWT3E5vRf6wP8cnfaGa++dIpC6tg5eEtLrrdgiVhGFi6fYRsETEIxQLdtg9UrCDzfFusNMrSJqjVyUwH3Y6q+r0DeysimYLHfXNg4rWAajoi23S3o+vvq2OyIjBxvAP14reIP5DJHMwV/XUdu42yDY4iO2xaHA5zOyubCxshMDufHSwV7ICsZlik46ThsGyM5igG6bRosYTXDFeWrPjY2cF5sVLGHsZFjmYCNrsO2sLFBMUC3bYMSIo4qUMfHt72cFED9mNntI5CfLaIpWOo+fhtXBSzDdK602Rzzw50jcxlsAHflXmLYSzFNxl+3KehlMEMzUPdKI8Dmxl8EDGCugD+Gs4BmMrY6jLyXp4hjiI6bFqu7/ADbqT5ecjAvTiq4w/jIkEzARccxW3jIMaTvtIWvttXhrn08bGQgh/PjoII9kIUMyxQ8dBy2jYkcxQDdCg32q+25FlJEmxnZQHqyUu0hlJkczyTsdB28laENkkG6Fpq8dtCsBMiTlQLeUC4CikkY6DBaK++wfeoOW2i4QCwbr6qRZRTKj2cS5kCmERxTcM1pwDa2UQTJu1TAe/2zHCyAdZH+WIZkMubF+F85hvSdNvBwT1mupApwJhYKkF5c7PYQxsgWzwS8dB+8hZ0CkkG6bpqAd08siGriKAfzYqeCO4yXDMkEjHQcs4WLHEP6TlX4Xq3awIVwMFKvcizT8TBGszYoBui2bXAoiYunl40czo+NCvZANjIsU7DRcdg2NnIUA3QrNthWm3O/OuVwvmyUsAezkWCZho1Ow7azkaIYoNu2wRFyW+a9TKRQfiyUMAcykOCYgn1OA7YxjyJI3mUL/ibH15i9nGNgfqyTcQfyjiKZgnluY7Zxj2FI32kDf1tVJ5ftaAPnxUEVexgLOZYJeOg6bAsTGxQDdCs0OBYugTkNnCcbZeyhbKRYJmGj27CtbGQoBui2abDZVnWd90cANHBebFSxh7GRY5mAja7DtrCxQTFAt3IDh7vgBs6fjdE3wRzLVGyMuwduUAzQbdOAVo7q4aFQXsqVgRLeMO4RFBOwzmm0Fr7R9qk7FKBPx2p9htdn/S5TCdaTf91eQtnYYpqEm+5TYGWqgGag7ptGuC1yUK0czIuxCu4wnjIkE7DTccwWTnIM6TsV4W3V6VpCEMqXewLmYOYBjml45zBgO+sQQfIuG/BDvimW8Da1N9C4BfRiXwd/GAcbNBMw0XnkFj62OIboWGohZoG0MdM5E2K3VTQrJ0g06TPsHkb6pJz0nm3aAIrp9rKQF9x1Z1+LNZR1x2nY1j9UK8ugeeLuWmBAkPdbPg7mxzAZdyDPKJIp2OY2ZhvnGIb0nQrwEL7ocNPUwHlyUMYeykKKZRIeug3bykSGYoBu2wbn7fbvZwePdwvox0gVfyAnOZopWOk6chsvGxxDdNy0+Pu+99IQQbw4KOAM4x0gmIBrDuO08Atbp+2sga3Py1N56r8jbOC8uKViD2MZxzIB31yHbWFeg2KAbpsGQoY7Ewdds8lJDaL4Nn7WPMdxWriFrdN21sJWq14eAYgfj1qcgTyqVlPwqH+cNh5B6+jOMEvLkz2mj15nt8dql+1KKHy9hvCKm+N+Q1KvpM/kMmxqGGnKmuGY8sNkz79++viv2XffZi8gh9Muz+BCNPvTy2dPs98+yp7x1jwDkfZ/v/BIO2VNaqSn/AYT7DTuy5BkSRa8mEJpEMT1qjpEpJqzYMbVOwhiKYtgcBKpHiYa1JT8WUcxxbKG35uKlWFaSiMAFqKE70aqGox41DkUx1PJg1zT0EhlyUKkCAAgVBcK7KeavYGUVH0LIDBfxJBiBERmLQMQvgMEutcE4qp98f3xGcRptL8ZWXE+ljeQK6naAv5Wmok8q1g+f9j2k2KM5iSE0lcb6VFCIxjDdq12DaLBPPTtN8boA7zjI3SzzOtihG4ws8gN5Pnb3RzujjkkD4Stlt4E//n50wVZgOvsB6o/3mbPilOOvTzKfrk9/R5xZVwb/XJz+r3J4mJ/8JNAQit1XWssjZLQW+73YrmBLgAfC5tAQWV0Crs+ZMQ4TJOC1SVrpcQUYGnJdnc2sPLTf9FX7JagwOlYA9n9gNUJklL3g1k3HHPbD71j2xYJR30HGma9uANCjkTsKLY7eS6tZFhQbHNY4cHjMyDewds1pmkSYo1jhYAIE49KSsA1p/sHIjXo4oAM7/BIHZ7qwR9QKzfMNiV8L3bLYg3wkKMY1MT+xJCBYNQ1ZEHeSLX5nehSd01m+WvPoW36KPc2TL8oSZrd2oI+PcsZetXdWoKtu2y0+o/YGkvnYhvp2I6WIm2qjeOmEC1gxk0dyMsdZON+kEHZnmKPaQ6MZfE9FbQL/dYthEUXual2mZUT0SOZhFlQJOqvWRDUmiBXcnawv2vEjSwek9AbtoSIIGBLiM2ct4SUSMuWUB5Fqi2hDut1S3jdEg6wJdSIGt9QtCva1XzakBk8A/JnRIjOVsk/H+gSIPYYKSJn1X4jrlFIbq55392CU0cdt/x9sYSMOLsDeHEgG/KAvnlpiEjllpQksChoqwf9L8Uy+7Kh26SjU49CQ+VLNpSamg8+MnfLwVs4W49m8mwWpAFKZTwUhNadX5+Ey7hu4DS1ru6P8O5vV62N7kwtlNkpC7pVflYgfFvBa5hCfosX7Jw1jmUN07pBwbgFETDmtOiBN4/vdFRCnYRvt/m2Vj+mHh7M4Z5U/ekdmAI53yHVUAot35b/cBuWBnrG3DrXp2rHFvqx2ICD3vwW0q3ZfAZL9SBrrZzZOwqKALcG3LKlpJC32+peC1VtVQUsfDzbPq5tH2/LzfnY0e0CwPG8fGv5XC3/A0rg9BIvQsneBQXydbkuqj50IpAVW35el73YRCArNlJ2zDIXkHRzc6zOBwsInCvyte37slrbpvuEz9Vt349WXhfbNdQZsoDQikY2YQJJLrdw4BIhxBWVfEcrb96G2cwG91GvjuXhBBFeh0MF98VJOsNdJKitCv4FIpt9Tvv4IruHMymUwTpmn3MMX2RlTaGaipppSaVtvGeFLDVXb+CXROlzPyDb14KYQ17/o8O2tpHRff0dEJLt6z98iMWSoFbS/gb0fgliVh1v9ueH1LoseEcPBfnu2QJLGhrq9+xreI6AzmpZp0CbfxTHynrJjcbmJt8LFQdxUrvNgjfOXitgqjnsqtlZzF3TgbpTaTDDR5yhqKAQ6lyyeS87h767IvuwBI9n051pUXR8JJ0Yhnarb4xgoEwmIoRCjgDiiU6ZFVdXab0Fy9WqB8NQXwAUVQEI736sRWjnIy0hRbcr6EKlOs+2o1fDCNKMQ7uihhxLmD/X+YK26aIjfhHeRRLYmiA2TqXOcLARviVxCapia3KK2OyUE3ZVRJ20eIKtgcL/tsEwuz7NmvQJYw7U42SFJ9DkBE//dVXHBXtc3wpB0dLw9tX++Vff5E/Brdtop93h9HaEqpijxFLTeHAcf53fFiuI1DOyyuoNxknKPr35NIP6tvQvOGXkF5d46gHcxCN4nulAv4IpRCVWW0PJfSPMu7qxEXvQYPmOsfEAa6A4QiKYn3786KMffyoXPz76299+/GlF/vurj//46I8f//jvP9V/+9VPf/v8IWmoRbMr90+L/eYEKWM/k+BAxIEQJxXQipIkRr4D0Q+DjcJxDJ/GjwGIae5FfIfQDOAhH4ELPZf8GAOnzEvv06XzmCvwkLUzzOMMwvx8WZ0j6mF3EeJzb15VMRVGGjyREieKeJXqqp1gfF2t8mVKhMoVdgqUuBgT3tfTzURMaXYduro6H3m6gFQ4X6dEV8KGiqcOSfjMRlw9hjOF9FV3J2JW3xZzWv+qa4ceZT/+e/a3X3/80U/1r40ffwVNFTMlqnzzc8WMC+LTcnmEhI9/+FCczfh3K7LaME6m9F03nfIbFtMrFm3YqcXD0hpdKXC0rwXdarg2Mb2h0QWbGt7WyK9rJuVloxVMD2Tl7zpeWma2PQ/o/Sf9rOh/DZRwMpjtMkyF9PUq1DMWarpjMLBR/OguzsaXc1ONkW4vzbtVddgivHNAf89K9pZAl9WsC9nv3hi0iETvindQonlz6D6zapSidrdgl4kRx9fsVN0HqDQJkJ6u+komOAa15bsuJ5Y63Ou7M6SFNvFCNUVmY2Q0RyEGKcgkBRklvVkyGKauabpAAXntJSAc+iog74mAsLOzu4xIDeZutfbVQn4K1/UOXj12V4/d5B6799rFRhcp/P/1daFeF+r7tlAHXllsZiHnfSNa7/0iu4AF8X5Lb0gKIXINPFy+JdVSDZp1Sdy7Dpp3yaMj8tSfwMtPBsbKkUSVC8vf0nm/E5UoqR2VPRp02FFpHrvEj0qZsAt98N9xtuvm3ntnZdB35sQ80s26Xn/qmGajuLd754FoSHEch47ijk/iugt4j7bFKdZbd7fhvd7kHGKTLTjDSDwWnDqQIVbcyAf+a0634XO6aTHl19Rw70xqOOMW8N1KzGTybLmKfF9E49VcXZ65um4Q3yu/6XVvcs03e91UjJ5v1iOxh8m/N8xjT5Pfrac3kuaO7ySs+eOabJ4c+g+QxALoImL2B5bMgqe5zT6ir4Pbd6AZn/2PJ8sA2gwzaQZQBeuFbjStqo2ME//o+mTdc9tq7ik4yWVMekl5OfgsILgUXBDqkywkzJWkWUjrsmY5caZfSs2AB1lSCvb34wznvBjSmet3LtW7ZVF62cPoa0BNsECQPpmKkBE7x/0vBoNmp3uoPl+ThAR/+c2XC57/67bIT5DKj+98leSFJHVdQN50NRhzWR3XTfZD04KSy1AJ6Rjhqbqap7EvFNWU2sIjbcPXP/z5Xx+Rf2d/JSkcPvp19uLfvn2Q/Tp7lp/unj39uP+ltTaVRnE4Lxf1680CetmUr2HtLeA8MlZWY+jYK3uFMA0wevyJ0pxt4PXmLj9mALp6NVH2CsZ+zJBSE5IfsV8WlKw6A6uR/VyufxYtPfMcNKAg/vBtdaLQbFllmMB3m1W3FAU5NwIWSN3xM8xBUW7235P0lD8/aKTytsJFhXODTZop4+ixOEWXvPyU/YwS8QhJ+hlT81X77dvsDLl/4U9Nnj6eO63p7KPyprjJAPN5BQs43z7I4Px9KB4QEk9QDqNp8jFr8/0drNv7sgaY8pStK1j0++oE5GFmP0IpS9oGhGbF8ViBriFNjck9nkNayexr2g1Lv/V645F9qxFFh6RVrzfW/RN+T5apqsHVTf4Dn5BbyKwbxhu3dNLtALRIIUWcOL5uMp6vBAkGIaGf11l9KFblbbkCWt4+IAsWSaPihZJoUAGEZiioaFIFbdYJEys78fbaEnd8rd3cnXbb396cqldFsxeyvQ7EIT/ev83Irk8YuWk4mwKmrlyRYfXm4RMEqHizKiBLpmhzECnJZfjhFyWk38a/yt872Q7v7+9hKg+3N6AbH372ySf/C4yPIIdE7qR+YOQiJb0T0Qwf/YmokvjSptk9VQViy+1pEeDA0ErERpx8dPLD3YeCVNqQ6BI+KmgkaRBwqU2tO+aQmYf1tyzBUbjvn/sGNG725zZrnQFz6wdiZju+P2/AuEExah5j8mzsTrLNwtlEA0pMugTilpHY0I3zwB6pOwg3aym18bKbMrF9VlSGTmlTdZjtFlZdJA42VjdYe0JCpzSHsrz48JruHB3LbJCC/z68pUT18ZRCpeSliDE5D8VB2XkHdhR3FvpNE2mJW3E3c0k2zrgfv4MJga0xac73V8qxgG+/8n31uqC7ZPKv76pT8Qh+FQvUne6gE2I/SH7ufVGsYeNfZcsiy/FSCf8MVJL2dJ+AG/DVNoczAG0PJLM9ItkPERn8GSFqPA+YTA3k8IRDNznC24T2e7LFcpoiR40sy3TrJHWJeNDshQ1Qtm24LR5AzV6tUItp/S+K4lW+fw3BVhdFcnlcCXruEkguttvyUF8WzWISr/lTW96CQ+myJrjc5ZvLohjdkBdFMGSbg2Sll0RwtX27gQufS6P54iTjKB6DLoFg0d15EfTel6fVZS2++u1uWUnJg2ZPMrrqL47gHy5NK5+gpsFl6eTz/tW+ur8wmi9sg0wqws2ZYneHZKc78cgvU6b6Bcy+Exhp48igngl6v7pQvCrl6S7Lm3tO8GhIzhJdE0Il3k8JjgaLK0PyfBjvrJr7It6NaxEw53uhLyTvou5yCH8g7ivTx9z4AT0Ppo/0kG/8Ss7Tpq/s6Gr6vDF9oAcy41c8+5g+4mbS9A139MZvdPNs+2xDjVtC0zcQI+MnstExfiV7CiOvwRravqGlNH5Ho2T6yPS/8bOZoUSrqR97riDdnM1azefl942/lwcSepQA+Fv3wOuAyyO9EjXdH6k3WyY4WXl5XzW1k26+IkRJa7t3uOtrpjHmdrQb1bQDad9tf9OJZyL4koT/tK52FoUlBq1gkhESNYO2hgYEwZ0sUoc/fHfO/gR3BdmXGBtRHFncDjFe+LmN3lndwesaqJXOJ28BRdypPWNd8iAdfnMATvp8D7E0hIrFmx01eaSl/DvrhAYaiXFBzYVCuW/XM4kg4l1/xYS5iQBasAijF0BQEz8AlhW894yudq5STb1QNUVivsp3MqlwM3I8gi6isYXmRvxNjaVhMycv8S4F/sH5Q2YAh08Y/AJ/Ob46H7KnwLkzGKbsIx6j95ubTzAmKvvrs6cNlvxw2EIrIjMYMgNdQclSiG7cEKIapJx15GpolR8g0ApgGjRLWNYQSlU3UVgw8wjIxiOIKvzvL2STtF6X9GKeCxnpH9cZhNORruDP5DqIyzWpoNlggXrer0FrKLi/rA5v4RXS3Sn79He/+5fFZ598+gkGecIkPHn5IPv6+ZdPnj3I/ndRVjwUTGwC0J9BiOg/yu02z76pznu6mPSQ/4TIf6dH/iD716LEUdFeGgR/hmssnBeIsKdSisMkcXXAyBXsEInMQgDrroTKEusMKIA9HE4BJlltI96w0xfV7ekeweGiDeaB4H0Kf9jXPJwvy4SonPvfkJgcWEPwTOtUnncPn0L5+i0G6Xz2cMUHtqgZVhjcJ599+tlvPnUQdbp2e4VXUue4lr9+c+itAl6DBO5hfDVFDy20ce+G8HqxdIDwM/ONaGtZw3rQB8vDmhDjSpTHfvqOSOig/tPyLagoA3meZaH5yVi9Wvr/7X3tkhy3keB/P0WfHBs3Y3GG+rB9ElcmQxJlm7EkLZPSri+GvHN1d/VMLbu7mlXd87EeR9xr3Ovdk1wmUB8AKhNAVVcVZkbtXUlkJwpIJBKJRCI/6huzRiqhhEgRyRCzGRXjVzm3/rD4rjqMrR8p+DRuad+LJ25wPqpwoYo1OEvcC7ESZ1yVe0j9BWotDZunO7gfctCL+Jps0DH7v8LuCVPftGxBLW4FpNfYVgFBz8tPbkC2EAenaFlDRWp1gDUe6BqDPQCkqbL5KdIN+dI71VVmlkLPoZ/eA7Jx3Fn9bjCXU+YkXWWO1rWH+LCFEiZahLZvXebysyHlk1hNXkbZ5Bc4CW2W8bUDfAIGhYgdv2w0izIgc4JXda7hOt/CZuDgi91aaPkc/BLMFimLBnoOcbA8ZkGgp2SJSYCu5VlqRm1xxmmPMeaWMV5qmoqKc/MUzbrtoLfiY7R/EAUsX38vAH7za7kTlQkUipV7BIP2dRfKLBxdfXcZZX8tOyBq3ysaH7Ssiak3taT3xK/IlVYgdtIMeFT7FvIXajA5CxXknIahWHdkUf3bUpCbxR34g9aoBGFZO9Tx6bWrIS0mjV91nLP2KbGb9Al25mO+V4vOJC48tJ6kgFrQKc/UKOq6ZLa/GiBvWrSAVWHE/cxTvLq0Npua11nNaiDokquWvuSNkyaRCiPuqS4SobXx979tq7o1uu4+uQKB5gEmAd8la6hp4j5kuBOaPpxpqigGaF9C9EQEtPMB34ExNcfrgTuKndnvBRGtV/sWdxfNIm/G0Z8vbzYX/OtxrOwiA/ajklNAmXXL205NSx/DRAuR9jxe/LCe6VAifIm8LXQOHEOL3AmyvC29u2XKxGWq/ymzF67WyOpXKxspHR2F4O3B+ZdTyu86E5e3gdYMQd4RHsZi6lcHy7XCtbi8Zw9ZQo27dXjdPNiSss4UmXN4A4o90mF6+Q1ZOIbRQPbZIXYOHW8s6s5E3SvpGnkWZZYrCXyepbuNfycaXN7JdSi1a43P/rqDh8FF0nA/a2wt/y5pTMkOv3msTdm8Z1s2c/Nq53NVrjssX+Pkw+l8UtShF59jCF2lBuBfoss0mUsQdLmA194tPJivkg90CoFahWDsmbV6YbOqs3b0EtDtnsfIWU7VBTv4t9IBwIHw83QVJWubWchikJmLj9OF8pbOFjZfy1dvBi6kGZgpNbBtY8Hclgk8FrfNgbwDTJufkRLWyuS+RjGKRCSD8A3tBh6/i1ZFfvqeZ4B7GLGkMzmeDuxhtIob6Fo4OrSH8Wr563rGL/cXdayZh72qdaXCac1IPK2y/7l62/F7Ly/Go9lPhfVAIXUCdOrERoNe+ECShWEDFdjDaM7HL4fsVROiNTrQs6Vxz2dr8AcDHxT23Si+TmYpuBVtLhqNur4DLdMcvJw4tEuwY+olwd2mmk0Sz2LMWOXqsm5Irr4J3vMySHrKMtqXMRldoyQVLEf+e+FKWtOEvW12dbKVaPJk7IeENrvxvluzphA5CxM81Ew8sX0eg0IHZ3489/UOgzITtOfXgv55HkOmiNpZy++88N+kzQk4NqvAn1waBTLmgwPQjc6406NOVC4CcwCrwBbmJk1GNOubaxKimQ7Ny0RljpuD22SQgeEx41xNc6EPDAXZX4Nr5za5jF9It5JBkEhnUMQfAqgUOcjbkeSRKwt+NE5pzQ/G0aB0IDkR8VREy6bByW/GDqMnYfCw7j/jA8+tUd7/TkVCm6aA0e+HfYgsY0RHv9X45N41oIO+HKj6lXNF+z9Yd/ieeFIyo7lg7HmVrMElWnudUWAQH0RTR96JmYTfFqAw5cjEHOTlif4K7geWu9hQRydDUCc/Snoy7KgC9+TGDrYquaA0agpofMQKlrHYX4KhVvEzY6AZHz2nnVVssK6GVjVtjjWjztgLwemlqlY6NkogmDiLRjCkCqlose2Eo1e0ms6h4BitSkhof4qENpqrMLkcm15MFdbbhdR4YPK0THbTDayqgZa8cZO67Tn+K9DpBC2xYOStChyfg2G+OCeoBbK98NSwPu4gGo5VpCBd/5yxNCfrHe3btoHnIzqGK2MinTPIBT+UnkSQxLHCFUXIJTagAZQRuSa0MqLCAsh2wRO0aFdA4yMmWZI2TCqg8RHDHcGYs0pAAKRwO9JY1ZDx0ZI3njaybRFhcEyiPg97STBVHumOBlPG4zld/+cOLEi0qATjEyMOGcxQk1UccM1ZLVMuRjZOINqYHkyJBB7mKtpCwtbrQttODfD4rIbrTMdyVIAQV72SybjHeA0cgGrA5zTVKkAICcuxmQIJYOuotjh7l1XB4yMopQy9PxVQgG1QCDkmdEUFjo8cGw9dA8ZHSohnOO1W0bXnwQktuSNzqEOkiaSrGh7gSKuaFSCIBszqv2HXv43etFkyitE2WTEBTeeaE7pi5Zi1TFvVkmNaaB1iVvQdoIaMvzqSpkxJjxo0PmK4pCRaNSCAjQ74iTaDVYBAGwyMqpj4yXOLQfIhEiNGs7+ufx9kG+nIOzYS4k7reV1CfntaA05ZCaip4KKRONWAULdoklkVnijvv/1dD1txGI5PUq4GBDOuttvnCeQBSZgzM/64S+D1f8BHYhJl1xNxgTFzL1GBAfTrmmS0mm3Cx0fx4w4ju9DJ29dKlUIJVtoQBG64+bZldjN/7mhg6jLbSES5CnM1LMS9SxCKuXopsEDKAXonerJD/JFWsBmHfvrnc6aXZf37IHqEMk8HMwEizA4Op/AyQqX6PYC6y4WmhEMJWYsmU8ClQ76mCRUQqeL0bbH318y2heCuLKVNMtJYni7o+zqk68+36cDqhf+mx/nRel3AZSqIy+VuqmEBjLDl4lreSSpoANNFwV608UIDDunb6sye0MU+D3l5eZ/iXt2JvT2JWSfiYAzwPFksoOQnaJHR8uQvkIZZ5Jxm6DaHxv0Rzja0YxCBCOM/UUECOClArkiYDOLAkVBp0mOkXGNclyFVwYK2pzYahLJzQHpMuPjOPI9fcJ+JMyhlrsbaqUp1FtFGO4jroO9vy2izjGaQ/nPYp3d9lk7urybJ+RDp8AAqJhKa1jFrSICXR1xm+tmxhoRwWy2ZjPEP1cGBbsCQbhaz0WLWaFnywDwoLI+R4PcNn9M7DPoc9EbL403WvrK7vkNnXR3fkQBMhpCezv/9dCxHxKXpT0zEL7u6aDoed+ikv8hPwXn0jqshQy6JjPQ/rAkhaTwly26tZZYxo/xyrBJLnvdlVm+4HM5BJAwtgPwOdjkbOnGKAgrg61QRk4+CVMABDnZzPelDnm4VzK7kz+dMuCM8pvGQfDflzlyAbjILHH6vbyiDWZ289wXnkhPSI0dQnnvhDItYsbAccho4CIIV73EoGg3GR7LcAJy+FvRiXG6eNnZpy2Y3JcFQZ2ALK7ONPQJzhp13gzOuNCc0DhZN83GWnmhrvfAW5GJw7mgOZxbIdyuOXADqj1r1OE7+Z3zkakAIzhdKE2vZVDXpXqya2ngui6ZN7wut7okchGxUcp2VspegZGUsV0yyJXEinzVxNCFWNIU/+p5xbMYQxhe6tuoa2q9amkMtf8D8zsSaAT5K+mwdIRoAGNEAQInpCgrdckjRgCibcYQCEEcrAHHkkl+xg3HUkSD+M4bYEsRPjVk7CbJRhIWpizKM9b/B6a7jgbt61IAQwW1cLZEKEOB9m7Op14AQl4sZd7EoAQGWD/YbUwomIFKcF3ENCLB8KCu47VdCguw/Bi0FEmQHMmgpkCB7kFvEGhJkF3KLWEOC7EOWtypIiHBlocowEcsKLAhq7IGowYKgxh6LGiwU1RhW04GBkGPOIw0WCjUb3cLuUla50GChULPQLaTQLW4zrHQLqCyWtykLbqFPBQtyIbW08j5pkb7hkJPGXCg1k/s69sScCWUeX5IAcFiA91fGPW8VzxVPOyMVa53FbJgHCmXarrwFOGs6R0ANCaDSIs1plbaGjI9WteIkagY0QL4HyXPMciqwEIk2uSxxCiSQlGjvBCjr3HNZm6FavQWUpVeDbn4f10CdqeVkaJZWYUHSeY7mrVUsHJPERYH9EsiATGqhRA1+2MQokgWAi8/y3NdrPwb/McivA8HM9LNIFq3zOnPsUGZ4DWeXD76CMlPVw2wQwPZW0Y02wBngUGlXCFZRX76WysHRX7qUFmtdocDYCzVouKwWbXacPKMM51ed7hCPEllbQP222GwwVPqLFqulT81yQof2CtApTPMW0SRAYh51oekUPc0WQbJrwiVuvW3lViuKBTE5ZCG7JAMRRTo56Dra7iCVBhTom3JdY5ZxqNDHZJXZZGySNkGWAX31CBp61McRJGQ9wxVomOShDG4qKABiFQ/RyBngEGezxsa0qy7VJsTOL7cTm9NfBYdwneNTBGqwAHl3SolC53LRoQGFepvsl5CqFYqRicBypvBUmZxXKd2vh0dEkqeZ68iO7nYB+5WGbOiB4t0SInWj1aqoStI4noASybZKIj6YtG+Rg1OjLZco12wRMDtz4kjPXMKDBEKUXMbFQejwEBdI4HTm7lhBQiRVwX3GZFSpQQHkPMNt1e8B5HstYujdasJDRBcWYo5RITXo8OgV5a2fzNMZ1NgGt0zUxJ6iVEWkJq8glvvVS6iwaTSAz8oI8hdruLBCBPkiS1cibHy1/PIEKoHmZePTbH0+uQKZO0khVUMGFV9yETeu0wVHAkEO3+UY/OmW5z8qQygfOiT6C5ERcv5KsV8SEcD1KAZaFTH1j/jxfoqmy/hNeqX04Xxn3DIPB8toCms4r8F+R6RA4ft4uWzioA7qDJR5Bcfn7EOLidC004eFSz+wBHMBXOXIWgxIeSYxIOdZumtZPeQVdtfv1KBMb0sT7qvdcpu8nWXJBlWaEVAZfYarTTSfx/MTyHh6XnvwNIsqV4NBap5oVaXpESkqPnn6Lv/N0dm7T9+dvH929tnJ1+/hb/ifd6fPbt+dij8ey9+x4dG/PMP/XMTJ+cX2dh5vthe3V8l8e3H87Pg2Pltdv79N1rez1e1qdbs5u97O3t8eHa2L+srHz46OQGbdHP/js0df/HN7kRxB0w/Ht/hWulsdo7TLN9EsPobOYJRvHgt8S4rgvFxBKes4397UyqWxHLL6MdLZqIRcQPJ0mcxp0DzKL2Id5rdGMN8tpt+Nlsk5x32y0226oceeptttuqJhM5DZccZ8F4F9GTChoREkRu0wn1m63K3AuACzcZN6GS+27fHOkLc6oIZKLx5fHnil63PIdMQQZrbdoWeBWS67xC6a43pyS2WW4y6/Sndr2KosfJZksyWzUjwVm5Taj5t2G3BaOBe2I5AcHxh85unV2qddyfq2NhdQ6um/QD2yt1pF82x3Ne3AE8kcBGzJC9v4eutMo5EDZ4NMLayPhFAtm7wEJvK0cBK9lBBXzkztkqd8D5X/4R7qLG0OCYkyYGiyC9/T4d3bLsIYBEX97NXlTDr6NR470cni25M/vv/Hl/8Ux1L9VzxwzqJv3599/Ov7s93P7/HPt2fT796fLV+Kv5zNvn9/9uHflB+xVfwD/LD4o/wLtrj48/uz/O37s+RF0cX5n96fZW9kFzf/U/kBPhX/rF/Dj9gffrJ6VfSJf8BPsGX6F/mPaAn/EoDLfy/6Q0j5Of4oPt/8KFHCz/HP2EAAypHnz+EvJaIILT7FBrdn25/kX3AgAN6eXf2HnBq2LoC3OLxohZ/jP4gJNOx02Aq18EQcBGpN30HPgVoESe7fpLCNOkgFA3d4I6yzOeGf6xRM69ji+GCSQM3GpH/4zeOy23ZIaZi13URHuHf/gVsJ6X8rSX0rqAqaW03AY2j4qavN8W/e/RP+6cAo4CWQoPZnEallkxd+QvGn9EOsXlKdV0Dagrri3EXpn/H0YK5IqLQyoHYa/RZndgq2VbQXuOd1vrzZ0LGnsG7IR1H2QQFX55/3BYOxSVW/G2Q+BdbLkim86Ko3UIf7kD7nHjyqNDQaV/OG3acBQ1MIDReMV4EsKHBOoaRD6Gp9N+imoRGGbkw26ep3Y6PeDbppaAxINyIl4DfVyHUljjrLR0N2KCcoCM9FYl5GFDiaTi1gkNhbqoFuD8G/VxiWRNXn4DElLRutbU74sMCjLMz7YyCcx3hCqm5d9wDppTzEyB1T2JeUrbL3cNm4w4G+FG9nF/VDwH1go5vVKoaf6lCte4A0lN/Mk/9ybVd+rQ0JhI83o6CdwKVeR3tQfgTPvPM4rYvC3oeVTS/x5UNk96ldTu4B4tEMbzX3ShaDcjEFF7MPXkhHu23KI72OrwgbsGYOF0PxDc7TdO5oMo2YFgMRZxmDEVa5/w6+XcsFUU3L9lWZxqCKWcgeLZp2D9XAsYOH1RnUc3doaDpmozLnCt7X0LxY33DbdpWASRxNv/XLiJ2mhBnJZUpymJO8t1HjXWgQ2kqC5BfJQpNXg/K2HBMSSJ0rrnq6K5mwofc/plj4RZIp+dLvz+or27Cay8gs4kM6T02r6nO8KQiKgdfgYfE7Lb4H5cZee7MahmhSVsQQ5lMseCE8oTAIeYnFMHZ5LEGlQWYCmvgWjvdJuphAHZoY7j+iH81q82gyjWcRfnsF/w9eqNgVDDRfFr1NMMmyKBC1vJlsATKBLCZxJnqSTlgTaQeaFCae/BOowSGrcEAjsg6HsP/S5ikF1LQZdzJSaTTpw0hlYhLGvqfNKrx5WzVCmGuqGyga5n56VbtE6je6C2xCFO48o6kf0pNotOGEx9L494Z7f5Ezzgu4fHH4DKswHO4Jh3vCQVU83BMOi/9A7gmGLsQpY7QidjfefzU0Aitvy4+7dKu4kbd+l7N8byGB1NTptVNhhH5Pr2GjFShuGdz5tjG4DfWkeDeG72Ht3K96mfaepzhBReubn9+86PX8fNCqPAghQyEcdLhoqWROaLMtaNZtI8rrTFhUBopeZ4kxGDKvnt95uwZ/k4YzvOZtvrQdi3gkzuxfn7gazdMdvEtCEkZIwma72mBfiyz6AGkH+Fa5iBdy9OJq5B4FkidBmowsWbhG8mhYt3GSSmnqRVoQcKkwT9g0G/DctHHANkogyo6HL9N0Y4MXrhtEk0HcFyAEye2/UGAGnG+ZuHNrJOcU0KaNtZ+xGtFaSiFva52MF2Q0MgVGRBn2aB4zuxvjlJYOyUrV1MEFrxbD10gxZwSl9DvwYouRxGinH8/9CzWF0UeVvARxh7MPECjocmLxuhZBZ80bXS0/RWCjRTYiKsNdp0REKZMfgt68+HtvW9fsbN+NawuEhXbiUOYukI0Gusyqwf0JLrrP4YigN25z4qmhWo00LwjqW8OcQuQ7hrus67qNrj1oIKI5bWEqyggf+4bbStWZeVCkD4r0QZH+5SnS7pfFxM/ff7m1GaC3zXmOq/QTX/jHnqy3i2iVLJWkY62DPaCPq4YdqV+pOUSMCqDt7xvqwpqRJkPhPabj+6iqxv1TM14Jm2ab0FbxgZaix+Eo4+kaU3/H5KU34Myo/anTZJdj2ALi+bnftra/PdJvi/09nSmMYFkxtQHHSD2vWaPPMRZNDHpHPEbYZAW9MgCTwM0lQMxYekqINKQSKWnYDGKgxdOFlVf5x4wJqc9SpvTzSh6zdAmoLOOqxMhMWQwMjFCQEodBHqNPmQ8BtFQqSxh47qYcgBHV8AULw+xBzNTQjGb5iAdjAEdSWkXolAcY8cUtAxyuTGI9mV2JOY9mwq7a7jDiy6MwlVHw907OAWyets7eAQYmYwi/u3IVsVBFyAR6SRVQU464vAU88uxxOSj9ltNEYoz1fIhWa595Q/KrsEf4EGaCeA31lR7arKbxJWREhXPyjkTZ2t4TUedg3jRrUFNPcUkeNRVu2ydOo/sBH0qEXsUdpXQVYgEILndNJAakkZY/0mQRzcjT0EuHZBKz/149DYvu8w3cVRYYeGxOo9lWRGdBYlOPprzznnPCBEbernZCtV2iaBrvHX+e5JtldONvDLwr2UbkPQBsgeJagGzK2Oka1S36GnzsJBxEAH3Y0P5B1I3a9sCYXasMob60de7ZpmR4uLk6JMbyen6f0O5JA3WYvhgFdagJiUjeGTyDqjNTE3pyST0ZErjXzbl21HTJFKF6mtAHqpd7PRGhQHpoFyScFDoAGFlrul7g4a2f5DXfG/xo01bto51eC8tk8512tPaup6et16k6ymaUOIgiBXvOpi50EGwaBDN3mQjF4uPOgvHxbWQt7vkVHAZvROf0c1IxUYoelFelfUJJ1ZBH2SxL8xyKxVoJRln33RQjKoIYLRyFERqOdI4CCUZ7a6EEo62jYIJtlcinj76X6WHaN8dNG3GHXMnulXeEF74fd9GyEP73SSsWeIPZ8F4hfe9SNz/E9NlQrIGzqTXVyL4G9FEPHWqg3X+352OL9hdiS30oxTnucQT1Ia/OId/MIVnLHUrWMvLOfwDZge5qjpu7mlHrHiaeDxKgHC4c+5D7fZTc44eU7uFT6v8SfRqXKbCAkVmC5bgry9a1wWwigYdZQLbHJr2KsA5qIjkISYW/uf9GxhOlWR9XC5UF5/Z4LjRMh5opGavFBzlYcCFW0Lu9AFuxxek8fufoBhsdHzkaPRHwP7hmIJHHHu0avNoQtzsxiSHYYc8UeCNXwvrlRUofUiMcUiP8olMj3NcSactoGgvpOKaiOLZX6L2tc/Yws1t5xQmlMuy1+5n/ECONQOTtQZHxM+CFyQkHT6p9+JeVLhyyrwD+TDCPe+9Zhs/b99ytTE4hhE+ZLXP3XazICxYnGQo+PqnuZYHmCuk6zqp9H/wj0yB0TubD+QZpH+OxsYwsNpLqcKFaDbFaaPp4gPlHHmyxbci9ISPgRn2HhXwfcRZk4PtYXHzkjP/9VU9wRszZSgS4s/l50S7ObvAfvNIJk+Oop324kcOMKq/GQWY7+xBseUMNPdDwtsRmW61wDNQ1XU0BLNWoDN5SL6sEAl2zEHQawhHGP9BwTCYAy2gyUxedYkGFEfm9Bkyx0Oh/yIzlMiEZk61cBVKJzAYkQnOAMVIc2TxfC5ROxi0HOuCoFsViwFFt75oDDnuZLhY55+DWcVwb+xbJ/JiNpUHJNIBDbq3mCANKmCJzIZNkTQVSGQ/vSPa8JjJjSKP9TOd7Bj27DD22A6xISMkcrBqUTGU55OHaHGGMpbS/DdkuZpC/k8kBVUEa+TuDp8kycBilomH/phPrBLn8xjWkkW/1DizL6BmQBzEt2TnPtjYKkMp6O9gK9bu3gqzjw7FMWoirZlAyuUfPrtTIcBx8dzewGIMvDomnhk88ZVlzkVabZlcF1MzUHZxZTSTG49UDm47PpnUKeItoZRm2gt6H45lE9sDdh7Pjzm1KrfACvS+JJnzxhs6702XOwTHeijH8rDrEInJ1NrUYAzptkz8mDC4mg3kKEo60xPMHfXex9C0ratBrrsKIOhydLHI/4Zdv0qt+rXINfEYRs+buh7fyaLK92UiXE91rEMBoRVuV7mTQWZzB1+/y3xxBHNLtNIWYqtWt3Oq30wjc0WB+t9F1kh8fvcs/PXl29tnJ1+8/PX4GX3zzWPSlchuOffBCfeAJG+9GUphDZttDCsWB3h1b5xUYOVLwATiEP4xsqQ8huuCBpN895HN7sOkS72tuyntb8+SXG58wRDSv5cIoxornW84MacKNgpIllL4CU1LXuAF/D1UQ6Cuw8bHvDZhEqWkgIFC2Xas58jB04QjiYxPgKdLZKDC64ZW6NfMyx5ZCRZoDukfglAYES3IosCyMUnHhcANvdQO3MTTnPFcBjO04pFuu3vlIuytoeYRQcbQHoeIrVHxkRSAh0E9oFpa45upA1jCiMHY371nxab+HcgObg6X+ENh7qMz1sCtz2e4tRW1+5hqmQcmq/s63Zl6IeTWyX+ZsIrLrTa45L+KhV5wxxNwP2SkP2Sm9dAnBQJwyoQI9GS+QOtFAZwx9YvxcVD0mSrFRE++BDEvUIIMhANCRHeDLnrnBwOX+8YJtcrMoy5J6VuYC6WBjkQpgi4Wy6hvs2pED39hfZTuvNjGph7n7Dzm6+9eyD9Ub70P1xsLrEfKtCidItFZqHsL1voOMmdMeBW2ZLIoUs3UmqaasuzNnYQObMWTjQVIdJNXDk1S2NDVqzkhTWGhAXVhIUJf3Yz6nQUeDQxOVHiRFM8IDB0GTa4tI04FScta0KHB9Mk9nO6SUkF1PcS7lXyZI7lcvoUejEXyKXf23k5PJC+HENZ8ssnQ1wcRFq+WXJ5CvCMhymq3PJ1fJ9mKCvhQZ+Hfkk5OTp79qJjviWEhxkNT4R0+PFC4jhtFhgz3yeAVJRpKZ09vgdbqWtEY2Mrmo5pH1zWtorswtvp5B0hxtx69zbDNZ53/4xLiaSIh2HdG/h4XWRyDeCqqXUg09fmZyh9TJ8pQJujN/bC9qzrZIJeRDsByvz4EPEWNEeJIuJsl8gl1K3nzxfLJNJyD1T+LVZnszkfMRDEnj3AbTpH6E7vjCcva/3uXvPx3+yeRaKWLXJZtKpCezV6b6+tVPf/m3H16/7df2Y1pqWY7sp+YrUoceDbbGz29etBnNPCb0TVCuAREqVX+oyYVq1fRP/PPIeRxtvu6FfjXaQCO2FGgBrzfqQX2YKh/95Q/1klxw4C2WitXQ+sZQ1pizVqlJbbWG4Bl2btHjwcVzbS92BzemccrbRXCTXWmPe3vtMc/xTsZd/mLQkStIF6M2E/N2rjhie0paJXN4rmntcDMMS23ja0U+tj7V5vqbT3+CX0hgMp9wUyEELUZ8DkpPpUijallp4zkURVpFkwlk6cvxX8IQGy2FjiN7ld+nVReTQot9NIFKZfArvIZPkD3mE+hO5guFTygViEfcv3SP7s897MENFzkwFfQzHn+g4r8b6nkTZuhF36NK3VpxnlUOj0127XOcPCvTjntoY1XbPTcJj060rpLEkZfCBlzbbzWUviCinHD6eqrXiRnc23Fw5OYl3inqEU6uV8vJCfzfCiwy5CbS25bzMeQfhTw2P72+2MJHlMeG0TC/VHmbbSZlSs0fNR4+qyG7QCqU8yAUV/Og8bh7Gxjf/CAXReUktVd/5VfpS2ekLtfpVpdm3yfFxgVfx8vw8CZbqwztRc0e3yBJdnXsWWUfWFkV+cx/A9CGRFvuC/jiBHJgplhluTFOt0wVlikU/QD82yVcCuK5wxpEYMccBWWrmqaNLSj0L/0grIwkL5NpFmU3YCl6Gm1kQWzA/7EY8lOYRVN78+xNsCX2YvRgbmbPM4oQeH0ymqcA3ZPN9FF6ZDKFHN1YTOnAzWCeHPD23//0+enn2vJ3Xe7i4OpzxfWzcMBFbwzU47rrdNEvHS6DM4Xk4DKmfE7oKFTk5yffS5Vs327Uh46+pdS+RjcllmPuf61V/AG0iwB7O30eL35YzzwxQd2/ZdpmfivdOaL0O/GasN7R5uYmG/zGLBAWJoSf37wc+lZXP4SRUtwE049o/WZWsxrFlFsmr11rJ88QGjY581bv0612eN/bip9YYXMsPuKfy/hgpKMi0ug3R+I/706f3b47FX88Ln6Pz1bX72+T9e1sdbta3W7Orrez97f/cvzs+PZoHZ/Dyl3Gx8+OjrBe0fE/Pnv0xT+hatERNP9wfCs99Y+rCkbHZjRT/Sznek8XZrhoPZ9Ui4nVfGDB0E4HNtKLSXGeiUb6odR4dpdDoH0C9OsY2kMfsySDNpfYQ/X2CRGA4OEBn8gHd0llx3szfSFtXpLJa7Lt3Zm6RJtfQNjC5snjx1dXV6dXX56m2fnjv716+fjzr7/+6jEiLIultPoevv1aXmTafffFZ599/hg29EmMJNUyI3p+/Plnj/ObNZhg88T382S+WZQd/A/YQ8Z3psmBMDpoW7Lkg1OPY6PeogVnRfkEEECDMYQcTzQDtNQTwXa8vAGjMzDfZrIEMi0fTT4kwr6MnLeWA2B74E5dJjPcSLpR2M1JhmdFA65uJNrlQ1fxGmQoXVZMg5/wZ/nhx5+/m0CfWLMRIdw2c99O4g3WiCCPEhUp9X1Ayvva6i9lgdjtAg7CATp9ggzAGPfrE8NWWcwi8wXWgsMQC08PjZPJ27evXiqvFQPiluegb27k47c3ekD7JxjSOgxehU8UYpSfwlA4kjdq37558e0waEVZEp2eL9NppDBeJ/VetXjVyMht1tRaCnIka6hWdyqeyl03Vs704R6rsryQ720/gdhawIGZXqE/EHQGnCk8hsRLGdb+OV3v/t//+b/5RMztdyfQ3YkUheDhNptAaB7Iiieir2Q9SXcZ/Aec8qBsECD7aPLNCq1hTydJLiSkkJ7y8J18ssXSoeUr3ScAB7E6i9aiLxSlEXT455+gZakvF+8R/yq6+maVPMX+1+Lf6VOhQnyzyp+WzaVAgA6BdP8KGkg8aZ5Z3+3O88c/7qZg/XsMAYdX/3u6Oz+dnSfPkvkfvv7qd1//evYVkCebRKIvOSnwFeDeDXGupwWW/myA+MJ+zaK8Oq8au0AIXdTWJmVFRVM2qxL5CYkeJW7HfpYhcCgsMBXdWn6mHtLt3neoTgNf0ztctz0o2tF4SPasGN9ar5jjCis/adrmPMaBj/CvzAeeN07v+fo4r+HFBnSv9n5rTiqMZKnc29SoPqrIKYBrtOiSeF3paHW0rr6Xr4LnZIo+IS9ictnNru8rwobarJScHGzHMoNZnw7ItWQ66vaQ0I5GPrucqxOy92anMAn0NuHxZrCXUFCnOrBk8KFqD65MjdAQROYkh/QuUGA2Wc9EbIgIBsGWv+7jf6XCV+mKpRKsApo4YVINCKBhg1V6x6+5RgUK1XIYZr/Jmx9efvu3yes/Td5KD0BUx3GGT+Q8i8+rOwLxv1+TMTwFTfqcHYH+36U5QiL59xJLDiFd6Kuf1hxZX3B5KVouq7hvM0YiraG4iary1RyljYTVRy++b6JtPw00iwFEmLCy3zH70yIUjz2+9NZKgIjWFI8KaRQtGoq/+DVNp3mcYWErz4Ow0QGQOIIg6G/NmTQp0a5fqAJdm2H66C9LNxE8Llj6NDmrDSuVS2kNNHQdhphXiIjeLUJNqUCCAoaBHyws2lF5oovERHEOG52DrmACHGy3JqD7nIdNXmdoqUYCUbb1F8/f/PDH1t62zCbi1JvLJyqcRqSIu9oflWqT8tgYTQaljL7leZyodjzvgzFsFnOObU+hzCocrmbUQkd+Y4QNPxMVbpvBZrvL2B1TkGOoKVTyzTINo41FEJF5voppwnUzWTdS0/ex9+VRXyocGA1qWBxb62FSsZ3UPhVgQgYgKLrLnXj4ugN62AtEBtRa/3BuqbODUjy7GFBfb65TMaQSQNdaJ5Zd2FTiO6ATSyS7qMTyS9YIUhDQ0H0duRXUL2cgiJRXGSbHOPNxIYG079soz0U31XNAYDLozxLdSGH20YEc9ZLw9MA27a5JolfnHakau99bEknlQLMrxx9khtqO4CdYNGs3x7Jv5zRVJAadpcdSjjPTYdbU3AyNRzJN9qyLBIA+nRr49tKx0rxT3Jb6QKsfCDbUqLgjLVSpa1QXx8n7+xfYOMfeu+Xdml8PwcN9uJLUhqFWz6WKaLRhMaLNqsYIlM16Tq2MJbqIuBPkxcmwJgZ4S0ODeO3jaLtXK67Y7e49zX25f0Qk73b51WN8LRH/evVy/xREdyWa0i3h/OXmHg7i1etG04+Ovr/Bg88iuT7B5qNe4uS40gOv4yVOdqHO9E5d4hrocbg0kuiKD617XTaBmhKKV16bLa9Q/7SqX9g01qAu1js2jB0BXDIFF6JEHNGWoHqCduRD02/1jhkTDPR8uRApAyZH68IL6v14Addd8LWmXvlbHUPYGVRIuYByffKI5vhSoFa29Efw2/KLzkyKfY4vKmtP6vYMWryuQg9/V1zC7+QLsI6jL5tW3zokFJRjh4SqSjEQx+KLna046k6W6Tm4lFrPUuH7KVNuyo+GdWMQ8xDx3Noyo/M/hFtU7g1Sg5IOyOArjp7Bf7+Io3llWCwhq3gbCW+OMqvJETqhP5rAND88EtBHkCBRpp1+BOmGiv9imqBHky0Yypdg1Ic/JVDM41h0Kv71Ot3GcvT/gACQaP3ftxN4C5zgMCJSATMInafotwv2cFhW2KzoDC3XYy4+RH7G1IwmhqeTt+nkCvqazyfJVjSLo9que1p7ISP9xUIp7jV40lQrqm07YJdzlGUeF4UWe1HlJkgVIw3Rha9yjr7hwpV7lL0oFpzbj8VsVabiMOozCERbAUiVDBtuv4vafhjAVHdBx18mIYeHjXoZ+WyA4VgANnuyDIoCuCWswC1vZBQqWSUSZPJCKiRlLkrnpSCjg6IZcviddPsNNHpYuZAGnXsadvLzoJOf72m43HN0WdQ41OhF1b9Qew6S6K/HJkB1DqDKyx4DkNQ1qDAU4wOGcMMOi4igUlCFEYYKxSIxVPiZszwCeX+DHtcQdAkuaSFRkPQJeXJN/xMKdgRdBcxPEhKBZAEIBOWCVRRUaQYnwLElVCUgMGcNf4hAEaVsFnRpLsGxPA26OLt5EhSBbVaWfw+EwCI5DyylAQN0Xy5T5AXZJhZVC827IckzTefBbBHCiyVmSROdYm2UoPv3dJ2GxgEe80Naq7YZ1C8PisEKXh7CHvBZUBEaTadBDWPzxdiSU9fwgkrHoJwf1B4Z9KEA0gMEVRyjoDsuj1ZB7xQfpkGvtfku6OxzmcIg1PAfg268ZBt044FHatDDZjoPel2bzsOedkGl3tXow1cXkSy+FLlreWMnOHYEfbYeWwOuSbOb3rBkEcCAdMmCGj+zsY+palFyWac5ktkgSbPC50Ff8r8IOvqXQUf/bdDRfxd09N8HHV2UVAx6VZ/PPV38hjvD0b/n4w78I4MJJyj9im9zFulUyK+QdFpHQR//I3Acni2D6toQQBj2lo0Ow6O/butvAynsk6AYrCDdcqiNuo2my5h3WBbgsO6iIZ5tDEPUMvihAs71UVB7zBa3SVAEAjxSGc+oQUcPu/p7Ro53l09X8fQEU2NJEYWJ5qtfvmCllgwAEa2CuuYEF13QKrjoCr0KSwjNC+tbvNtudmFdbMGDEQozBcXB08eBixnyDnp2TcCIUG6tCyg5GqCKFiTp6DIbz9DZtlkw2Bo07TOMcpGzPaQXbaQo4Mp12OPHPLOY0ZkUfDKzkDVC3KVFyFxiLYYqYxE7ksU34TGdi7cNota18+6+jDcV0ZwiiLRIpjL586ufXkI0qAh2nKcQ/w7Z44vozUm+g2hMCNcsQjwhWhTjNUVH81TUwplCURasBCZyIUI9rSuscbOKPkA/kIgc4kRh73LVZLQ0O5B0QyuFbVCzLKMnstk/kaGW4I96LmJkOeKzRV+ElETqkvmNhQrMQpnUQ741WTqyO13kqI+eqXrC3RIp/E2sytGnE6gO/WjyaVEG6dgVp95tsNfRZYJlHiEY93nxoZm6gQ3EZaxTZPnLAgjeabjDRKQ6U8GN7lX9kOFtyBSUQ1qDclcWOUYxxrjqBbeY2FoQJn0V5b+axkAOqA1XRvjij7DhxFaMdmJXFPHZBRYQCp7M+joA26SB8u9otoxyNZHjPn2JIPae+lJLue3ZlVHp0po1Syfy51/RGd61VkX1B3dDqVJZs7VbC+hqnYkacwmkD0jApeEUWLbYl67kScrXS7hxCt+/Tl9nKRjPgK8hdcM8vu7yISQ0jlFz7/LtNq0qWtHZn7oqcKIc3SlapECQl9vDebLJiyh7esFjJQ/7wgL70gL7rQX2Owvs9xqsRU0zYBM6/WQN8C0kYV60WhwAVH/YvlnNa6+MlGqX7tsXyTXuYvHVSGmRBMoDKWhKLkL1u3sNqnBkB0mh3QBUVXotCevK/Cs/SxSKql94jZnQVKt+96Fa6bvkJFsyDN3qbp31Fanqj6KNkFTeJdu5bkw9Gb3adInTlMl2zpdfKNi1V+zb3NlQZBk7DkePMHXF01/9f7A7DCAayQgA',\n 'epub-nav-30.sch':\n 'H4sIAJC0cWkCA81XSXPbNhS++1e8sp1abE3RS7pYlZS4nW6H5tCm04OqyUAgJKIGAQYALamTH98HkJRIU5LV2JlEFxsk3va97y0cPl9lAu6YNlzJUXDRPw+ASaoSLhej4M9XP0XfBs/HJ0NDU5YRwMvSjILU2nwQx3mhRV9RQftKL+LEJCIu71mtZADwpmB6/T2XpbKVEfYyGJ+cAP6G0kCh+UbVcrnsL6+8novr6+t4ldpMBJBrNucrdwtP8XivKE/yuRe+PD//Jla52YqyvJg50VI2J9YyLYEno0CSu0jRQmsMmKFj7oK/pAvBgCpp2cqWtgczlawbV/w1YgzTFiwzeIuqQtpeP479dVQ9seqWSf4v671wLgzsOmdnp3+bL0/D0alV9HQawggugvGPK0KtWIOSDAJ8EQBKAxMsY9K2LLpfVhgLM+bCM/h+GJdePJ1rOVmwSHBjnYOfC/sdYNJ+K4TlOaKiaA2YATXveGdTjGGjoRXJ03sqiEwyom/NO3u60fCAp8PYUaKiX1xxaBelTE5kJFVkipkH4GFSNWLdhjitnjp1x7FOCcem82AMrzAwJ1dHUzJGSWQY0qYwLAFiIGXEVSXMlYa5IF2eVREY6EllIeVME01TTolwUPEFsdgwwFhdUFsgF0ME5p1h2+bhMGD/gxEVgkpU/5D7OApmMZKMIYieJ8jWOyIKPPfrTrP/7mtn9rVUOiMCfUk2shvvhFoyHVFimo6GladHGEixfe0ysHkUYZJp246TCb3ytvZPogh+SBm99enOuDEu9RuvADOh+axASkEUHaLbNhIstP1qkG1AJE3RGJeGJ0dUWsfhDiE3GirVBkyqCpF4VkuOswZ6nz67vgo7kihY8l+zXGmLBbDkNuXS9wCDqDuNGB+6uzWyq/8eBqdjl2W5Xfdq3YNBTeEONScdUffDuuv1gRv4rOJE6CLZefU41mGDqFXd5+9ezQ/Tran1Hml3apyGwfgGY0vZFm5YYkuaYy8rU7NNTINc+M4/QhPMt3WMGoKhL4tIzcFgxiimYZ8zWBbBY1oUl7eRIDMmjmlS3Va+vxGVLnUHlCcVNlgsskgwubAptuJ2Nqq3/ygue/23/dIAzxbxCyIsnvGv5qR0O8RUjXFCdAxhNsp6qqqiUZ+mHB4uPuLqBYN87HB8Cgj3j8UPiOIf6NT7x1CzN1E1u+9j2HDpIJoT11j2T1Gs557fT88aq+BZY7SG4fTwTpJykQwGX0wuphMsynnV+NKLt83TZet01To9a52+ap2+RuMYULfZ1miXncWmuAH5bfqstZC6NtIcRj43KbnDBrPZibAXoQ6uOzbmXLtMuvgekcLKTOSThGvH4VJA2GrAaqhqkGp4KmA+uor4pcLzCQrBHbtIusU1QjI8amv0fN/D9AeI3vpaKTdw/J776+b3l7++/HkAN7vGU2OFwoHUbBT1PlMB1MHTrzAE3NLlPm8EJMxQJhOCophBkOgUTvJ6cQ+Pp+iw+mwfn/wH3SbjRw8QAAA=',\n 'epub-prefix-attr.rng':\n 'H4sIAJC0cWkCA62SzU7DMBCE732KxT0nLlxAUZIKpMIFIQRU4uom29RS/CPboenb4zhWJAoVl/gQydnZb8dj5+tetPCFxnIlC3KdrgigrFTNZVOQ7cdjckfW5SJvDBOCGfBqaTNWkINzOqPUYMt62aTKNFRaWimhmeM73nJ3okxK5fxW+Uogj92ou90EOB6PKa/1PhBuVqtbqrSNyktTrDNd5TqDgVouAPKrJIHlHAuSJABr3HOJIJnAggyOU238rz5lzpkw04tYVquqEyjHU5bwtnm+/4SXJ3ivDigY7JWBzev2IQtfGBEwIPiuc2gHys+1zOk5dZw19wn/sP/L3iUvkyLmMzbGVHzdb2OlZr7xpDGmV2PVEhopdMKExOkY+f/pp9JOF3BmZJBm87rJaXz75eIby+yB8S0DAAA=',\n 'epub-shared-inc.rng':\n 'H4sIAJC0cWkCA61UTW/bMAy951dw7nWOtttgOCm2oVsHpMWwpcCuiszYwmwxkOgm+fel5PQjQZxTdZJA8vHx6Unl9a5r4RF9sORm2efppwzQGaqsq2fZw/JH/iW7nk/K2uuu0x4k24VCz7KGeVMo5bHVO1dPydfKBWWo22i2K9ta3ivtHLEcSSIJOVWP1Qb2veHeY8qdTwDKD3kOV++xIM9fAG9+P3wDbLFDx+E5YJ1p+wqh8bieZbjpVzl7W9fop97ViY1k6aIi08fCNNUc/twsvv6D+5/w1zTYaViTT/gFhEZ7rKDCtXU2SZCCqU/UOuLFdVWqU9Sh13vPfob+r2HocJZCqQ6ajOkTtpZNk+RRx+JqFu1WPeMleTeytbs85r7BONcndG1KC5fzeL/BU7gXStYxiofjcNBSbc0FZruGpeObimPApOU9MRbADcYb1n3LcHu3XEAYbFCRjC7eH64fIfSmAQ1GCyT5/UcIBFtMQBUB9R5WGBiYBn8InW2jGTr9X3ACuiD80MeCA+sDrtMdzjJ5dJ2QtM6JW7XbR/pjjv1OMpYTaKqwLeB2ebeAtdd1egxjVjQNWZN8kI6i1KFz7DSNT2lQ5yS6omo/Hj1ivW5p+5xVqtd+pRomlR9IHb6g+eQJakbrFLQEAAA=',\n 'epub-ssml-attrs.rng':\n 'H4sIAJC0cWkCA62Ty27CMBBF93zFNKwTQ7toFSVBVKLd0AqVInXrJJPEUvyQ7TTw980TCQRtF3hhyfKd6+M7drDY8xK+URsmRejMvZkDKBKZMpGHzu7zxX1yFtEkyDXlnGpo1ML4NHQKa5VPiMaS7kXuSZ0TYUgiuaKWxaxk9kCoENI2S9nsdM59NaoqPhrUde2xVGWdw/1s9kikMqPSGF6eKOuHUTcn8xkxB2ELNGwsuIZlrK4SW2nsMKIJQHDnujC9xQDX7QxTzJhAEJRj6LRX9Fp6TxUetVZ3hzYq6qcyqTiKPpcIPlbr5Re8v8I2KZBTyKSG1Wb37HczbLdva2gNWFxZNK3H+ZgG5Ny1P+vWV7yAf4Z3jeSoGOJpk/FVMYTSCDRmw1ZKm8qDwj69TSEFWpas9kqjad+oQwZPcjTt4id9/r+1gpaqoDHa04ZcQhuV/wdcjhV/4QVk+ErR5AcF/5kBfAMAAA==',\n 'epub-svg-30.rnc':\n 'H4sIAJC0cWkCA62QUWvCMBSF3/MrDiuMDWd8F4o4FCe0c8xt+Ji0iTYjTVyadg7nf1+iL927lxC45+Z8yQlJkFyjSJIAr/NsusHzAuuykjXH1jrMX94fx+cd648F7gbYPL3l2QMGyLmv8uwevQqcK72HKFPqVkjc0FFtxUju22J4qHyth023G9bh7lpTZ8obHAnQeO48UoRZ6MJKsOqkcyoQfCXBlGDg3jtVtD5IFk5+tcpJcHRcK4FNnmE5i6huR+NJGsS05wntEYdGjJcznCbkRELWqdb2G6yw4odBallL48GbAC0rpQXsFiz8olQ7syo+ZekZSOT/06gyRjr8pogcGjHowWPy8d7JrTr0I1gDFlAMzlp/hsZZg9sU0UEvjksS00zIH51Iw70qAgAA',\n 'epub-svg-30.rng':\n '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',\n 'epub-svg-30.sch':\n 'H4sIAJC0cWkCAz2MSw4CIRAF95yC9H5o3RkDzM4T6AEM4AwJdI98jMeXjMa3eKuq0vM7J/kKpUYmA0d1ABnIsY+0GLhdL9MJZit0dWvIdzlgqgbW1rYz4tZLUuySU1wW9NUn/HKtMIGVY+J/OpJL3Qe5lvAwoDCzx+inTvHZgxoioN3JXdG/lBXiAzfNt9mkAAAA',\n 'epub-svg-forgiving-inc.rng':\n 'H4sIAJC0cWkCA9VaX2/bNhB/76fgXKDYgFjKNgwbXCdFhmXFgC0p0nbYo2npLHOhSIGk7XiffkdSkiVZ9J8mD1UeDJtHHn/3h3fHY6bvnnJO1qA0k+Jq9H10OSIgEpkykV2NPn/6ffzL6N31q2mmaJ5TRYS+Gi2NKSZxvNlsos2PkVRZ/MPl5WWs19mIIDehJ7SepIDTJ5G5WULHicwLaticcWa2MRVCGvwpkeJ29quhWM1bu7C0WFT7/BzLQpczQ7too1aJWSlwXK9fETL9Zjwmr1/ij4zHjmEKCyaACJrD1ciKbkdxnE5SmaxyEF6wa/Jw++fNP+TuPfmYLCGnZCEVuf3w+deJ+yQf/35vhzK2Ro2TSs04NXm0/Ozf62nc5er3emmhPEv3hZBPSyDaQZ6UI2MPSxODpBlLZ4Qao9h8ZYCkFJFtC6inKkArsMT42YkUBsGTXKbAiVx4FoYZDshFpGSGOgCWifv5v5CY2UXJh6BuOJcbqxu7pFZZxd76zj48asjMetHEQpoRpokUfEtWGlL8RqhliV+Bg1VpxYCQb1kEEanch/ILope0gAsH0cCTqZd8V665XxpQG6ZxDjMklaAJ+jTCK6QyDumacobaQaAElJJKR25prfGuaR8krr/120zIG27eone9yczbkBeUkPZcEUkMta440DVUQzioYLGbGzEhQI3iIN2aWO/o07jLcxqXANyxiP256D0iJa9yWXsbay1rrKi0TXPfw0y9AL1Mqdg25WvxsWfnj98aHoxO4skp0QUkbMESxLK9cAfWQvPuZT0xEAIcZgxWoVBwU+2lQ6bcofFMa14t0aqzFi1Nzn+KjHwEUVkIOVc8ekW+EVsi8SSphuQhcTJA1bHEiVXL1OTuR8T2Dpc0HAieEiicO9RDlqnLHaNrlk5j+7NN15ZHN7vsx/2mn8btfVDyJpKjiqjF50wbG5Kqo002qB6MTu0AUsWMkLICDlyC2T+IU1lYw1Pee/Ist8izs8pvHL/ussN8ml55iMl/oOS9+gtjcJBNyxsavLpLuxHi2ZrH8zdnaQriuO7rqc/T/temtT2Bq+yHbmZ1Fwo4D/W0KqEEI0+ylCzZqactRCs3+x13orSnupTemjKNd7wPS9WzzcmCTboVxGnZsrXmrLzZBnssi7Znv2RO7eN8OMN2D8kJObZP2L1NsLbPpfDUaIFB8BTODX85x9a+cjzNxm7uWbb1oI7Z1M96SVs2Ob64DZtCHbYd5lFbWfQXTW6lLcVPS5eucLb1+BIVgqWxW17VV51rQVV+USHX4Ktk93EnDUxwtNqSMIE8cROXPyjXkgiAFAt/SeZAKOoFN5UWpVvv6wRbgCec4h3Ar0fIZY3o6iHngzM7Q9v7QCjVKBApKDo/4rT3rsQ6SUUnRuS2T9PanwMefawWDsw6VIaHHLzj4n1oVymTg0KcULGm1SEcCGSmkkacGwJk4JwVeliYd7frIaBlC2woDUvBLKfZsBBzTBGDAowt2OWwAEu+zaQYHObBeYZqXoOGALjZ7hwE3g0zybAOn97mc8kHBdm26gcH+MPQorLRBR1WTF6JRyE3A8M8sAJ5zVL4qi97pzck97ZrXvnbyLp9gXDvBCWtGxm+M+HfV8edrgozS0Lrd07saLSaJX1LHEr7PtVoNBxoZbQ6H8E3q/q9qNrmSNPt/Heh61Z3se9xyA649lWISIME23kIEf0lP0h19+kQtby6hshZiOAvZEGqvfuEiLaYDNFsRR+k+eL5EPkQa1sShmjoRkGSK3SCVFdTBG2N2fAQzWbKIN0mpRCxjP9BctigLqp1iUeeIE9rNvdGvrP6vs9/l0cIR4IA9lsF2voLHo/6g2jo/aj7shWa1w5eZz817ZQefiK0nrbb/oS3vlqNX/TON43Lf/65fvU/3sBvw5UlAAA=',\n 'epub-switch.rng':\n 'H4sIAJC0cWkCA81XXW/aMBR976/w0mfidntYiwLVJrFpUummbkh7rAkXYimxM8cpsF8/x/myQwKhg608ICW599xzzo2vHe9uE4XoGURCORs51+6Vg4D5fEHZauTMfnwa3Dh34wtvJUgUEYFYMnICKeMhxuv12l2/c7lY4evb21u8CWQUOkjhsWRIqjABIdmwlY5jCfZ5FBNJ5zSkcosJY1yqS66e6Np5NsTp3KpDF/FSI7y9unqPeZyUkUE/OlFH2A2eEhnov+l9EdzFPJEi9WUqQDMdXyDkvRkM0OUpfmgw0IALWFIGiJEIRk7mgpusqfQDdxnyta6pgshwwf00ApY7N0aPk/sPP9HDZ/TdDyAiaMkFmnybfRzqf5RDIAghy8kgdn6XHm6i5rVOrbCF/lOmc5iTfCpZdvEpRdQOFZmFOSpEwLLFQCKlSBxcRXEGX8WUCyjvdGb6JIHc/zob76R3JKuGkjSUVr6HCxW65Tjv+f72x4EgiVqS5Svwv2yoePyFFU2MF9hRt6TbjyymdoMyCSIE8rxHqEZtGNQRldV2KWMgTCeaRV6qrEe3z6qurH8WhdaK6BZYhB2nscQ+KNMkcVaVPVr5b5Sep6fNxVAgdMwets3r9gFt8D0JsBFe4P0GwRvDyw849dudV2eXiDM3s6exIeyjNsndtIIlbKTRArOmh21SBzS1vMk7XhW89VODeE/kQ52w0O3h3rMf+h1GCmeuAkZO/UKWxXicHQFI2LLDFNU1hjom1puKmdPnhTvMYndd7hDrQ61Jbv+wdgWrNdkMevbvFdmbiSlPgeqazlNZRgr4lVIBi0F2mcTEN7a3ms6CqNPgNgZ39vil5lJhHTUDynVpT+aqqIp4UGlGZ2HjQ1wF6FssyWK6v4rs7wtjAlS55lTAdgUlzObQMq5aBpZprnm31mTzsO1rH1FHT7j+c9Mafrvjr3M/8nDxTTq++AM/R1LExQ4AAA==',\n 'epub-trigger.rng':\n 'H4sIAJC0cWkCA7VW32+bMBB+71/h0Wdwuj1sikiqTkunaVs2da20xzpwAUtgW8aQ5r/f8SshBLNGTXiIAvfd3fed72z7ty9pQgrQGZdi5tx4E4eACGTIRTRznh7v3U/O7fzKjzRLU6YJokU2hWLmxMaoKaWbzcbbfPCkjuj7yeSGIsCFAoTJnAbMdlgNCXsRUQUWGQ1kqpjhK55ws6VMCGnwVaKlotGkUvnqIBkP1bpN95FK1eaxZcmMzgOTa6iizq8I8d+5Lrk+x0NctwoYwpoLIIKlMHNKxp7RPIpAV/kQwKahDPIUy1IpnJOHxY+7v2T5lfwJYkgZWUtNFr+fPk+rX9K4E0igdCpj9J9rn/aj1rnOrW6A/nOpcdqQfG5Z2gi1IvblaV2b8iCGCwM6AVZA+wk/algP1NRjxujMof8HciEwxw7o034WnzbcqlWk9TKOr2iTvfE/pu1LVUpnySA9bPlUijoGdnKXW99vVL3HghLd8R9Fo3EQioPj1cPaAKuX10HlKgONG0cHPSr9KACWmOWJuesrOa7EaXFVzDI4ZzwtFYuYGYnZ76xTWqldynbU8Btf5aZ1OLCiPYglD7pDUrAkh3kWy41P6/99W8xDsNlUwrZWG8szq6OGDAfdZk1RgM2WiwGrT7vCcCdpy3ByOctet9RybzpY8ZDhdrVV4H378rC4b1f51RwsQ2ThAAWennv7MJHlz8df3xfLt1PZDamdTQ9y0cocjryd0xDO3vsBEwEk1i4GjYdrep5+s2w2diVd+5gCVd5QbBKaclxKwm5/G5HRw4xsREYqm45ACsNFfonZr4/69sKRKrxQHnr7tLnCzq/+AQRNMij0CgAA',\n 'epub-type-attr.rng':\n 'H4sIAJC0cWkCA62SzWrDMBCE73mKrXK25fbSYmyHFtJeSiltAz1GtteOwPpBluvk7SvJJoGQ3KKb2NlvZ4fNVnvRwR+aniuZk/s4IYCyUjWXbU42P6/RE1kVi6w1TAhmwKlln7Kc7KzVKaUGO7aXbaxMS2VPKyU0s7zkHbcHyqRU1n2VqwTy1I16KI+AcRxjXusmEB6S5JEq3c/Ka1N6a4bKDgYDtVgAZHdRBMtbPIiiAKyx4RJBMoE58Y5je9AYM2tNmOgkLK1VNQiU044FfK3fn3/h4w2+qx0KBo0ysP7cvKSw9YTUE7bgEbwcLHrI2Vtm9Jw6zbr1fhfsX/R4zc9piVNCoXcOx0kMNnOxZq7Xp6eN0mgsx57QGUSPpBA7nXJ3F0fnkysW/0C0gn+kAgAA',\n 'epub-xhtml-30.rnc':\n 'H4sIAJC0cWkCA+NSVlCmBuBSVlZQCHL1cYxQ8HNXCE7OSM1NVEjLL1JwDQh1sgKTChEeIb4+ChraCsFh7joK2gq+iSUZvj6aCkgAaA6V3MOVmZecU5qSqqCkp5+bn6KfWlCapFuRUZKbo1tclq6bC7Q7N0evKC9ZCQC+OuZnAwEAAA==',\n 'epub-xhtml-30.rng':\n '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',\n 'epub-xhtml-30.sch':\n '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',\n 'epub-xhtml-inc.rng':\n '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',\n 'epub-xhtml-integration.rng':\n 'H4sIAJC0cWkCA8VbX2/bNhB/z6fg3IdtQCyv3R8MhpOiA7rtoSuGpcX6GIo6SWwoUiUpJ/72PVG2k7hV4gSNf3mIbYl3v7sj7/jnjouXV40RS/JBO3syeZ79NBFklSu0rU4m79/9Of198vL0aFF52TTSC25tw1yeTOoY2/ls5snIK1tlzlczG2bKNa2MOtdGx9VMWusi/3T8JnFO1GO0IfpOxc5Tant6JMTiu+lUPPsWf2I63TDkDyFeGeMuxTm1XT6Pq5bOhbNCGiPIUEM2BkFXito4T63FVMSaxHlNsjjfNNm8aSjKQkYplLORn4sfchnoWBhtL47T22NhXVBet/FYbD/jynCjSE1rZOy/6Wjox8Q0/XvrIg3o/5NQ0n4fRRdI9DBNw8IqpqqcX4mgrSJGsCR0EAWV2lKRCEvn++fTXQkzcebEJfMqCqFjakZS1RvFMia+NpcovWuEbFujGbLvysxbtWkwwAkrGzqZtN5VnkLIZIw+THpJc357MtEM6w3JJaVuZTo5L5zqerTE81T89/rNqw/i7V/iTNXUyCTU63/f/zEXPTGPvr6ZcGV6KEJLSpdaBX4r/n73zxvm+Wwx2+U6YH27QZQ6PCn+FRXW2t4cVGMSubb/Ic3wkx94Ktc27ImznjgZcTJbU8xukixmg9m/7IFCS+OqPez/ZBKwqh0U32gkPDvqUu7jAE83BNjZtYGKELp+qlgdWIRtrMqNUxfjQQppmdoj0Vs/0IHgO4NEx8YFB9XdYZUvoMoXEYpeQNH1EupzVJE9tAG280C/5B2dBqJuoMEw4bOEhBYkWQm6YGQo1BChJqdidIzoBrqUbnXaDSNFGOyDnLnyj6SgAbyVfPKBFECXLAB0FDQSumiWng4dobYBoiHeUo8GiOA6r6Bds9QFOWjndIWGChC95N0eUIBSV+AozRIomVri3OSOpVYdG+gGIHcF7CyirT0fBo+aRmY1o0D9N7MOLQNB51dOOzhOQiAlaDjzgJ3gPTSEyjyHHowV5aEj5+0VHjQ6Qkc+9DwSmihwBXbhKKEeF2QD3VNc5NBtbeig2gcmBsJ/gjqejlDHC62ETjZ5Ad2u5QV2toNGvcuDw283Ip6Wui/xGT/s5MIOaNr60Cvga9N0+WrULOkl0C4eevjpDz1NbTsl8LFvajJ+rPAcmsl/AUX/GYr+CxT9Vyj6b1D0yjvs0pFrBvcs8Xu6Obyv7/nUcX0kLDitK1XviE7r+IW0k5XQ5L/0USsDXWvLwOkRqL9ywfDBs9u3cwOO/QQqQSM1LC8RZW5ovGA5vcaWiyLSNjsHUQY+qXBxvYSex8TeTaACAJJUO2lUKDq292tUfLqkfMo3HZohRElbXD95MRq1hgsgqRW0NAceurgVPHShe8HI/OAnJ7c7oYtthy2x5QpGowNUhj1rHMbuDHFlfqmvRM9A512k8NibQwOjJElmw8PXAn1kGfTIHM/K/lHanJ3xhaz7dblmuNVmV70vFQyBDd0OAXuj3q6CD2ElTVuzCw2DZ5zhYnZb2ntt2N+ly0q+ZHjDgqp2Wt1rveH+WLjUUdXby4ZjNtxVKVENuEmX/eRMVSp84XNU1q/DbMkeALW5i/hIs/CYqiryD7XLmuwhgt7Zd/uxX8zWt2ZPjz4Dca0XXGc7AAA=',\n 'epub-xhtml-svg-mathml.rng':\n 'H4sIAJC0cWkCA7WSsU7DMBCG9z7FYRZQcQxiQVGSCqRShhYh2qKubnKNLcV25DhVeXuuacpQqWIpHizZ99/n/86XjHamgi36RjubsofongHa3BXalilbLl75Extlg6T00hjpgdS2iWXKVAh1LITHSu5sGTlfCtuI3JlaBr3WlQ7fQlrrAh0dRTpyl30utwm+zUPrsdNmA4DkinO4vsQCzv8HqG1etQWC8rhJGdbtmu9UMBWnQORt2dVBOhkXLm8N2kM/MvgcT59X8D6Bea7QSNg4D+OP5Uvc7bB6W8ymcDOE+dfkDoYwk0HNprd71nFdJ+KUunckekvn7DXbktNjpd7SF//aFOfkhh421ePfwkZJj8WJrsCNtghWGkwZDYdxNsIKTVQrLxsywIBu16ShsHI6x2PDCNynkeGeJg64i5H3tZ2iE9GPejb4AZqam2kcAwAA',\n 'form-datatypes.rng':\n 'H4sIAJC0cWkCA62VTW/aQBCGz/ArpsvZdnpI1SJMhFLSVoIcEipVqnpY7AFW2Q9rvW6Movz37oepkrQGO4oPINvvPvPO7Ox4clELDr9Rl0zJlLyPzwigzFTO5DYl31dX0UdyMR1OtpoKQTVYtSzHNCU7Y4pxkmjktJbbWOltIsskU6Kghq0ZZ2afUCmVsbfKvvFkv7ptbWl0lZlKY9Dm1C7dF7hga031PiVkOgSYvIsiGL3FBVHkgTlumESQVGBKNkqL2EWOBRPownNWGh/ZSuk4V1klUIakpnAzX8x+wPUXuM12KCjY5fB1tVzA+Rg+N/5LcHkazMEoJxClYx2u0SR5SQ2x3jrP/9hfflvOwVtsM6Fx0xTmsBvxzgh+Hvs8ntco8dVMQjmPVdY2iEEt24o6v1zObjPNCgM3uK24bbp5XWgsXYe2GXVgn0pKbBvZ3u1ux/6gsYlEXGWUt7laoSiUprx3pQ74OOB72TqYOQrvjhRKmt1JZlB1ht4j3p1kelFnpCvXSaQXdUbaw8k4zXPXRq2N5zS99/cZ+VV+nk6YTmH6HbdMcaXbcr50L3vnHJD/OrAzy68cDOoyH4eDCA/No0Fz7iEFMvpJo80sujqLPv16+PBIGsmj/T8+lQPznpmdqgy3irVGete6pSusDTRqcHII+lfOuxA9lupJ5M77IJW0M8Tsm/nU4vhaycjLIOh6OP3rLsR56WySNN/w6fAPcgh9dfUHAAA=',\n 'mathml3-common.rng':\n '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',\n 'mathml3-content.rng':\n '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',\n 'mathml3-inc.rng':\n 'H4sIAJC0cWkCA6VU0W6bMBR9z1fc8bRKAROyhyZKUqlRK1WDqdoSda8OOGAV28g2Sbuv37WBrlq7TG0RQoDPPefewzGLiwdRw4Fpw5VcBpMoDoDJXBVclstgu7kOz4OL1WjxKQxH4I9NxQ3gaSsGGcWroJbntMYHfd82kFJZtrRk8NmtZukZTKN4DFTCzyztOWjT1FhjURP2SkPBTK75DjUB2f5QSmU7EJUF5LSxrUZMT7JTtgJuDRir2xyXWAdT0jJpI0T1wDuOQFoU3FEha15hi8x4ZY7gUncieK/8WAda84JapSPZ9hyG6QPP2XtZr263l+uK5feRK+8Z1qp51LysLExms/MwiScx3E3XaNzNZgxX39c32Ri+Mq7OXhQgNoFM/eJ1TeFatRLbRbHXcF8c8ex14jFcMu76dgp98dZ0PhYcfeW71g+h9mgMfnQMBq6i0w3TglvLCkBtpr1tFt+ZwR2U+6H29ujA3xR+zo41xRtpWI+qrG3mhByPx+g4jZQuyVpJo7TlrSApK2lNkjhOSD4MFJqeE4eKk0kynYzCEOOJZgtBNUizDF6SOnuJS6O/ZGkAGHpp5vQJrFlNH2Tp0dKgnmjQ0B2vuX0kVA45NMRvkK5avEHqX0JP0fXEK7RlwWVet+hypdl+GbjtIOppOKRay9LDEEjnhcpbgW99byu0zkHA78osXZC/AY6d9PQnpBrNzFBzSu/2Ge6jmmi4OK3mkD5BBv8OEvPkwuiKALeX/xUM8zvQ897+19SC9OlZjX4DSOLEzA4FAAA=',\n 'mathml3-presentation.rng':\n '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',\n 'mathml3-strict-content.rng':\n 'H4sIAJC0cWkCA9VYX2/bNhB/z6fg9LQCkWU7xdAOdorF6IBidoYtKbZXWqIlYhIpkFRs79PvJNESJZOSbbQPC4Ig4u94f353PJ60+HTIUvRGhKScLb3ZZOohwkIeURYvva+vv/ofvE+Pd4sffP8OVT+vCZUIflVC0AbD3wwrGuIUHsQ/RY7WmMUFjgn6sUQ363foYTK9R5ihvzdrrQPneQp7FNhEOy5QRGQo6BZsItDWqmRc1UKYRSjEuSoEyGglW64SRJVEUokiBIjUYpwpwtQEpLTgiudHQeNEodnHjx/8+XT2Hv31sAIHv7zeo89/rr5s7tFvhPJ79ERoAv6/azd/lbXaiIIZui0qd/gOwgcOgCdAwXBOREaVIhEqWERERY6CNam1lOZe+E7tS+FnDtHVWtfwD5NESyVK5T8HwX6/n+wfJlzEwYozyYWiRRasSYzTYD6dzoPwFJAvtU4IajqfzR9md74P2YoFzjIsEJNL71xpyUJQJqf6s1l7CGrAEBUkxQcWV7JMBg29QVUdEYacHHOypluBxdFmAJyZBZDtl7BMpX/aIb1HCHQRkR1lBDGckaUHAarPh7xCAAsTDozUD/AoyE7LSVDEgDbpV/mFHYFFKmT2ZWpflsdsy1MrVlbo0YpAlUZWQCaQCLshIgQXdmh7VECM3b3T8iJoeVkENX/nVELwWpykJIMj0F/vUTXBqq5ol3020Wep9UNrHnOk2aj3QcJUpWNwk+GP3tc6s+JZxtkvqvWlkdYSZYW1gXYLCRbecFqQRwpuxUQsgvqxDwuCUxcW8WKbEheakINVwExd+dR4PcyGUe7UntVGwpbcBrTn+Iwc+1FxHUDzNHXCg+d/ieC/iw0Xpvq+ve5JY6cub1p2iPjQqToO9u0HfQcurNnz/vLNWTeLuW56LfZ/pc1Vnc16r7hGew69ted0VF/QPnheEoNTuxNVM2k8MGUHXTB60PfpT1U23T1qqH+FPMtTchiB/Zyn2Gn/JBRiATRTzNyCTCo4DC58V7CwDMWFv5FQcacbKcxiLkwSJwRTpaB9Am5s0EahXnHH6YHDfmQ6oG1QGT08Wuy2E/RSbX6G/0/+lXMbKst26T2vKuCy+K48iUYAerAat9DjvlVhRDGi6ukNiz9OCs77rznxgWRLZlfUrb/aZc20gQxT8x2v6guLoh6DrVGY0GgYvcH6xhLt7j01ckacmetdtNDJTeGB3JUzvj13LXJF0OWuG2PubLWcpm6AN9exW+vAzFS98NjnJAO6gicpQmOdZLk6XjkG1G9a9gZrYpb3swvb69jUNjTm3TxmnTk41lcHdNVvnHaKTMzynjpG0RZL8tP7a0e3M9W3B6cdOL/AauCJMvhkMX7JuG5o++VsZ6WZBy4n4huRUH7VgboTRJYf9Tz4SpVBFykNVBfASBdp9S4C/R3p8e4/rAyS5ScUAAA=',\n 'media.rng':\n 'H4sIAJC0cWkCA91azW7jNhC+5ylYL7A3S+2hQJE4XgSLbHtIWqC7LXqlJUYmIpECSXk3ffoOSckmJVGWHNlBN6fY88NvyJlvRqJXH74VOdoRISlnt4ufoh8XiLCEp5Rlt4u/vnxa/rL4sL5aZQIXBRYItJm8xreLrVLldRwLkuNvLIu4yGIm44QXJVZ0Q3OqXmLMGFfwkYPEeDbWIVupRJWoShCrm2IwfSnJA90ILF5uF4v1FUKrH5ZL9G6OP7Rc7h1KkSCAiihL8iolaSNLyRNlBDFckNtFQVKKI6yUkAYKyPF1ypOqIMxGuUZ/3j/c/YN+/xV9TrakwOiJC/Tbl8cH9PM1ukt3mCXg/L7YkFSv8pEzBbba1f7v3Spue7VrzR14D/w7iI1uKkUkQCsKzpDi6FGHje5zovVkCB2FSERO8I7YL+ArXmo5zpsv4CtBnrqbGeFK8TLHL4t4bxu3jcd7KyGtOE7ncZbACQmey3m85ZyX83gq4JBeESKpM9DEByfZRCu4lFzQjLKw71Xsn/UqtlUyWDCHM25Sr0m1WrclB41ky2myzyb4YofziqwbxVVsP7fkDmzXAaRts+B4zE0mBSD74jBixhkJoF0XRGFNdCG5jvYCke7TPBBqSx6OtVG8AGZTTAG8jiyMVStdAKct1QBQVxhGarTOBFXySiQkIsDvoa722ahco/e5urHq7zN1E+oE2pNuaq77Q4TdPuERU42GMkbEgYL6VGwfdqJve17FNZJR8XttvaeZHdaHEQc6Y2f9foARTBaO0iApe3Z68pmDgztgAol4EPUFqykqqgSNgMuWpCjVvldPzTMnugASRxaEUlAgTmeHpqKw+dUkrI7HODpW0F4yd8rEDkq2WELF4Rd4oLn7OfMvEfwP8cjFYMWY+nXypW3lssM43nrLZNnRlHATU/SU86+hHf9bq1leMhbjacmoj2YlC8ckjcXTz0xWbS5icvag3Aos4YFsn7EzxbL3e7l4ZuRZ93lsJMU6GKKSS1j99Bna9bUlNNuqeXx9panazuNKz8lwvjkcwukO3XOIsIAthwEPiLwsc5qYCpujT/WcTGjsdqVn5R/vbANoPGkQjd6FDApOI2Ikg13bTe9d3SQJYHKFl4PkJlvo6Doq4ZnX0T3T5Nth9dq+zTB112/2ptuPHQslcPLsNeOeVtw5EIsBbJkssdDP44cuMw5/u0O8VQx+Rwljr40OHR7BNxuQg8icZTeQ9kwwYYU9qkmrjI0FVykdMazcaTU7rBiL8cOKUR/d4C2co8OKVZuruTt7MDysnB7LkWHlHPG87bBymcbbSZf/GQv2psj3y4JtsjkPC/aVc3cluJHouydxdi5AhbKCHDZVCBc7yJwNMlaWHs2/4+nRqI+mFItu6AWT1ZiLSVxvr2CSQaZw1oieKRu+GOg3m/CeqmWWY5eTpz5duM5yvCH5PK7gCHCVDzyRjSfIzuYGhltHFp5qZbVRVOUk9IJ8nWADMyhPiUwEHdZJtuAEbnQnXjqcOEa3s+it3hn1pWUYiyMO4tE6cBM+/bGom9ShewpHqJ3Aqki/1wSIoOjVlb7+LSqp0AaMm01C5gBvEFw2J8+ISrjARlhKIkx+AM+n5HDbewr6po4C+H1xOO1rvTM9yLmUPuGd7hPN4McGg43qo63Gw1W9bVDWcnyHsvqjW1QNbKhH1SpzNSnP3bxdqp0RR0ZcWujplsLsZ/fMCb/X/zGHLQedltJOutd0Cu/c+l/4Z4JXpbN2X0D+MdcNofWCPxBKYB71HwNXsYeig2mUk5mxe5jG3VWcMDy7FX+cHDz0AYL4ZDyiWnXPDvXnSQxR20xhiQbhEaZo1GZkC9/lmzKGeSiG32LIZoNbJX/U1mSen54zMoJ/RsPPjX1PdLoyzE/v1lf/AVyE8WGsJwAA',\n 'meta.rng':\n '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',\n 'microdata.rng':\n 'H4sIAJC0cWkCA+1YTW/bMAw9r79Cc4GeZns9DChSJ8UO+zg029C1wK6KzcbCbMmQ5KLZrx9lx5+NHDdNumJobpGox0eJIp8VXNynCbkDqZjgU+fUe+8Q4KGIGF9OnZvrz+6ZczE7CpaSpimVBK25mtCpE2udTXxfQkLv+dITculz5YcizahmC5YwvfIp50LjX4EzBXKx2rZWaZmHOpdQ2kYUl64yuGQLSeVq6jizI0KCt65LjvfxI657GMAIbhkHwmkKUwc3JBXco1pL5aUslMLEVYSCpnQSiTBPgZe7NCNXny4//iLfvpCfYQwpJbdCkq/X80vyYULm1Wqz1Po7Dvw+aumLcQ0yAXoH5QAOiczM06QawCEJt4PMPaYhRSPHr1H8PszOuJkU2UGAVSgyOAiyydCDALPIDhv43cMM/DLnxqZffYhVGuI0W+S6WtWd3sS4RIlwXFU0Me8qmJ05FQkwQKo1b2VVI7rGGqRmsFeOZS4NkGwboEkYCxbWdw4H7miSw6y2DPxyoGfQOvw2wj4iKHJ2IIDWPFokTOkWOcHhu5wL2SJsPYpcMo8ulEgQv8nmIp/7KIHf+NlHjHh9BiKsZ4eoPylpHIL/FjiHDuu7WlHaVgBKz3ZH9Dl8SHgONwuq4BncJIz/9iCB1MtiSRWKG1sLvrm6dIsLGJEfZf1YkTloarxMyEmizw0WqarRyVKf2zqu8YdDLQpN1j3sxp0oC76Mc5Cde9MzqGJZb2CrZPThA39NZsQ29VDt8sFyKHikLGyRsZix0zO+3SqToJD2dkOh4/Zm7SQ4Xpoe+s9kSwdDxVhhIjdGIrJIuxIt7u7lII0BiITiDd85PgtwChFbV5o9oj7tKFpAiv1plM5YJPP186bNhukECONhkkdYAhk3Vbk+7PUnzgMWkC4gQnsvFFgmuF6DYWIoJSRbsvZNH8Wrr5rs+Uclo54UCXhFhW2VyzFr1vWlKNuPXYv1NDc535U2XeZPlu7dptX0yNLNw/64odON6Y1lbPhFbnXR73FVKzQdkFStDvMlBhq9I3CPeWDeFJStOz6yQI/hPyghBmrRuNLePcp/xKfTEl4Eo3b9ehGEmhY0lk6K+q5Ot+Ly2JLeIgkNwA6S0CwbLQlLkgOSsBvFviThJtRXSfgqCQ8gCTekWiUomhs9tn0OgVleBrrTBtA8tpp9QfGGpo2kfOyTQNGPDaPiW3V7E99QkLY0wR3VwnZHgb9++p8d/QUQ0Xp+LBgAAA==',\n 'ncx.rng':\n 'H4sIAJC0cWkCA9VZS3PbNhA+y78C1dkypWjc2hpaSae9ZMZuOm0OucIkRGJKAiwA6pFfnwX4AkFQ0ihx4vigIbnY5e737QOEw7f7PENbIiTl7GG6uJlP366vwkTgPMcCgZDJh2mqVLEKAkEyvGfJDRdJwGQglSgjVQoSaLUr1PxZGrvd7ibGVB6Mzufl/d2vwZv5/DZg0T6wVGKssDoU5JE+CywOPf3d0iiD2iL49PT4b5SSHM8aDTldd2auJuEvs5m5/4dsqY4JpVQqLg4rI9c/E7B0N1/Mf1uhPDlkGWXJCsVkQxmJEV3cMYSVEigRvCyukSAbIgiLQKbAFNoIntd2JiQjOWFKIojmGsU8+khVRszV76VKubhGDG8f8TPJzNV7tuGWC7dvlrYLein4it5FGZYSYRajdzRGOY4JoiymWxqXOMsOiBcKAsNZY2qxXMyX8xVSGyoBHLFCUYpZQhCsNiZ0PPS5VEQixVHEhSCRQqGGEGkMH6bv/5wGa3iLVATHiG9QqMheBRW05mc2W1cXDdBSYaHWV5NJWMMAAeRgCrAASibwvH1tLamzrJJOwi3OSrLW2TBbhEF1Z/SCVrG6BwpqC5odcNQ87b81Bb8bw5yRD+KJi0q9ZyAnCtcG4D39hWFQm/TZb8ht31Fz0LzCjZU23oAMUhIYIdF/EmVkTyOcAQcAtcBUJw9nwCnAay8vGf2/JIxAHhhNBJkXg7tAEZJ4D/TGGYH0wsBoStBff3xCmvocKwEpT/MiQ6UEuhc3t9dol9IoBXW4Z1yhFG8JMnDPgGgwKEjBBThi+eCmRh2lw4yGsIeDhbTOnxZpFy2L0Tyx+BgzZvPeZ+kzEdwme0hbVYkNG64rR5kbw2EIxMD5MSg8DnjBOGrQgsPFI3AAcYsTb59wcUkSX5oRLkF2HHVL7EIZsHlC27RWv3rVp060AzDxN4ci1CY6BbsvNE8dmEcztcAJDDHZ8O3AMUzXfji2ohtMzwd9H8IANi0YmnE1vux883Tm9vnA/3Hi/bwPaXctmBnWGqmHiU/VRahdaiMeBlWAw1h1yXhCbR6/5khdQ1JETWF2Vhwj54EC00XBGh8wtuibg/P9Imw6h2//YYlGuvB4+XYd2I3F133P9rXqU35nO9mP8da0Etfhqiv6He5kRzLGmzCDfDmRfxeX1gm7RYYPH0RMul3BebYnlfH+PBmfSIMNZreyKcN64fGx0I4oz4wczISxLGwHk4fUnuw1t8zRShgif7aetQMZqI0yrRH7iEVCrEFvLz6/M4xQYotevE+/VBkeT+se8O629awi0xJvoR3V/nreLPZHqsmSfj/2ajQ8H976Y+9bbFG0a02Dj1JOo3ZPXX2+w+EIU/a3fCthXOQ484pkQSLqyMLAMv+zj42XmRpnt5jxTO0LX+M0bwr8hOmLE/zn2iicvYMzx1wewtvnw1D178nNuYdU+3viqOYJqM3x1QUc+jEBApzvRL0NNus75eYwc+hMBsenU/ccuz6HhiPoYHF/fxfopbLAkXa6OzywKkVbKWEY+OvFDqN2Y+CaB6eY6mRsD2KtRtw+qxypummmRNtYvQuE6jqvbbVtwNYjy//aYyeGjgBzSBwG9f8R1l8AGTAiG2cYAAA=',\n 'ocf-container-30.rnc':\n 'H4sIAJC0cWkCA31Uy26DMBC89yusHJpDGtNekVDOvVbqBzhmaaz4JXupGkX599pQwGAoF/Du7O7MjgUhpIaGtRKJZgq8ZRxIRXat06VhXviyC5fIS2NB14a3CjSWP0pqX3KjkQkNbvcUGgnNZVsD2dFCmbqoGTK8WfDUaZ4BwkRhJRxdaCpQGO2LsVtfECs8MoeBj+ENHdMkZsITX/NENaRAQqRJptR9DqUMUQqP5HkRj1+x8pF1H0uqvyHh7MS5RSDf4HyQEIbs3+jrfq146NtrccZgIyT4l+4ohb76U6d4ls0FTale0HheCJriw+CJVF5TEVAWbzlgnfUhY0rGpSyJknuK22D5D8mEY7b2ppXyaBlewjKG20Y/P97JgzxnYAW1YMcIiTYxa6XgLF68wsDZ+tCHX9kXHMLNTgzMGA6rGgCddblPfbj3qPteKO9juew5duHLvKj3JMYOEZCC1vkkdFbYbJDJ958u9eKg2V5+inQgU2D3o6EeLHMMoaZorqD9Ru3MurGFEgq62OM0I5w59Qs6SlUi5AQAAA==',\n 'ocf-container-30.rng':\n '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',\n 'opf.rng':\n 'H4sIAJC0cWkCA22QsY7CMAyG5+tTRNlp2t52Sst2E6dDYmE1waQVTVo5LoW3JwUKA2SK9P/fZ8t6eXatOCGFpvOlzNNMLqtEWwLngEQMfShlzdz/KEXYwtnbtCOrfFCBaTA8EKoJS8T89sDAlx5XzY6ALk98HMd0/L7RRZblavu32pgaHSxmIsjqpUl040077FHUhIdSdv2hyFLyVqq44VuWF3OW6MBAPKm0qbvG4N2qY1V4cFjK//VvdPVgjmBxgS069Dyx773o/djTanbreInbvK/4fVyuugJzQS0LWQEAAA==',\n 'opf20.rng':\n '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',\n 'package-30.rnc':\n 'H4sIAJC0cWkCA51YX2/cNgx/76cwMmBZk8WXtA8bCgR52Qb0tdg+gGLrLlp8tifLS4Kt372UKMnUH6t3LlDkRFI/kRRJU3xXmX/6T8v3bO5U1bMjn0bW8Oq+unhSavy02728vNSiHff1IA+7D7e3v+yGcX+hdy3SQDlzR9uQDeMsOyPcNjve8SPv1bS7q+92ZpP+L/qmm1teXdS749DuWqaYehv5VMu+MUKRAB/nx5tR8r14vWFKSS9HjJ4Ukwq0sCdWoNczO/DqP21ObVc17O7EpKofA2oz9Erv+eows1vuDflfLicx9JosLczci39mDk4CDLEXXFKmaM3qAZbajBrN8DQjcvcr4k1ozmJUcuB9pf+Ix1nxyjLAwsuP9e0lal/Qh+5FkZtFBFDcNdSff/vy+x95ZzhPoS+OXDG962dcsV7s+aRwNY2i5/jzMMM5D/j7UfSt6A+TXTZD1/FGgRlX79xZDpVcpifhbRKfRv5DghMPLzbLQUPaptZH0f1X9ncn+ucr4weKEekGetlQ1AL6nj8aMX/M/57xIWDoXYGjM3vvq5/MFchh5FK90eDSsdRD3gTeCJ0zNU+g57q//K1PEBv9oe6Hnh9H9faeahQqrTVaQklXAbBf8VfwMwAuHCfumO+r6oeOH1jzRi3WDibuNEu85icwj1qr1x0DHakxkncr6bbmoCNvBbsxNlOy9a/w0l+DVKTJENwETSvHodnkaT4Ivcp0KxAzu0CbZV9gf7DZcQDh4gKCzcNo4gyJ2wxQTT0QiYkABunfU37xaGSAYdDdf335HEY35BkpOcult82noBRFN7kWo3BFBFkJ1elPHQFFEuKBxFL91xEJoHNeiOmpZ6hJQEEoAjSUbWDTMEvzeSdwlrbVaC0QOVFTtum3H+SR0a8ywFnaNsBGcqaGKHQccavJ0/z4N3yEIjda4lbQlk+NFKP+tEXXTRhbwaEkg/hTnEMLeSuwLtkmnxMfE8ZWcChxLPWHp27XGTqhJE09dbO24vCkpkhXpJ0NSWCxz/Btx1L2ru1XZvmH3yVX2Qp8V5IKIrrIPKyzsWhcFVQA2wpsTOqCgM3RgoRNuIIEyZyClE+CkjZLNBekXGQWgTDKSigmZpb2loQNRsFqNxu1Ha6/pr2nI2FEumX0zPHktB1ONoQqJXJh2ywUP5qYozGuiURFs7TFHn76k7wOATU8n/R9dB01cJa6Z133CM+UTK+nL6lj2K+ttnuBEQFY0OY4zsqDKX9ogBCwMzBpp+mUzPWaukMs9I3UKPMkI1eDa7wb8zuKG6QlQROJZoMYZdRgYn3x+RjFVSgWmAfEgosdUugRSEQYEwwHySf9Mr5phcTHpX4jd0peQmt8KVVn/topyWVkVxrhEH3ZIAd6FOeasoS6jdo02inDuc+SRRvFumPAs4gzfMivPPTigI5PJNDUaYZc8HRGgWA/0rWD3/hkHNsPdhZh6pfDMUMA4i9co7cAn0veN/w6eGcgjexZaOkDkUQO9qveoMzL1L0LIpmH4GPtRhVEAU/C890SM/5PACIGpMxgaOBoa0hp6BRkbBSlhZE8EVnfdt+d8yzzGKIsIaK2C8FpEE9z0qqR7lkpHZC0wfr12JkGJyASNDl0aG7mJM8LX6pApX4wM8x64iOT0CW1UI+eeU/e3RmzUHPCcIMlmGuZac3CuoaciEhXibv01OP6vZ+5ZIC3T8MyYMXrWZmREYloXBbtDSZnGfxSE5z2Uav98GmirjU+TVp3yadJrjXMq72zGyKVRW0ffZrwak99Vnt9dqd9ZtN9dv99Xit+XldeatDzmZBOelfGtLlUOn226WaCKx/3ZGYZVO247qfdZvxNPArQXdOC4WJ+sJid6NEuPWwnwi8MkV7qEiZ+trD76u+2BVLBUcAxw7gTh54OOcAAYq43ZBCZuon5BvUN0RxVGwAA',\n 'package-30.rng':\n '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',\n 'package-30.sch':\n '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',\n 'phrase.rng':\n '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',\n 'rdfa.rng':\n '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',\n 'revision.rng':\n 'H4sIAJC0cWkCA+1XTY+bMBC951e4rLS34PZQqWJJVqt+S9setlupVwcmxBK2kW3S7b+vbVggBhJS0d3LcgueefPeeOZFxNcPLEd7kIoKvgrehK8DBDwRKeXZKvh5/2n5LrheL+JMEsaIRCaaq4isgp3WRYSxhJw88CwUMsNc4USwgmi6oTnVfzDhXGjzU5gTh+yyx3KVlmWiSwkudr1AKH61XKKLOR60XDrAFLaUA+KEwSqAlOqQaC1VmFANrqSJIVEqkpIBr6iv0d3H25tf6Ptn9CPZASNoKyT6cv/tFr2N0B3sqW0dumm1WpTD5yLGPmpVa26BA/TfC8YsP6OTbkoNaoyL7YSLqNvT6Yk5lbB9fO8Aw5RoEpaSBrjOxw2AazWuen207QYDNGVt6z0K3rmJSHaCJg70KK8msSZ3IrQNi3G3wmRNlKsQcmDhNhe/xwbpK1cgtYrQZa6vTMZlpq/GLsOCmVctfNsCyjXIHMh+uA2WCuUcZMVluAE2yF1BV7kPHOOaxUTtxU4SZXzjUf8cGhrMp9FRYdVpfZL9EfKLi8JeIskH2fqG0+Hs500G6k/6uWBdJSGRlIxD+b093szOFNbpvaJViJaEq4JIc0WdoZ0C7o/cSIHDKRoHrpPaTUbmzcacmyNnC/06h5t/Bn7D6YwaU3WkkJ+2ow8mwv1fVYZkcqYbkgmevMyWzElDskFzLXKj/rgh/ZuGE4Y0t44XQ5rJkLwpnNeQBsbj2QzpcPf/jyH1N8yrE+P6g2G9+As++Os7YgwAAA==',\n 'ruby.rng':\n 'H4sIAJC0cWkCA9VXTY+bMBC951e4rLS3xO2hUpUlWW2rfhx222qbSr0axyGWwEaDWWX762vAbvgwDkhcwi1jz/ObeY9xCO9PaYJeGORcik3wbvU2QExQueci3gS/d1+WH4L77SKMgaQpAaR3i3xNNsFRqWyNMbCEnES8khBjkWMq04woHvGEq1dMhJBK/5R6pUKusodycwUFVQWwau92gVD4ZrlEN3M8aLmsAPfswAVDgqRsE0ARva5YwtLqML1K1ntJi5SJmvQWPX9+fPiDvn9Fv+iRpQQdJKBvu6dH9H6NnnV2meV/bkLcRa3Pmru0Pn08UFVF/OG/NGt0m6i7she3sbobolu2SYcanTNN02tcKAYJIy/MhnQQ2KHZZi4Eg8BQcm0gSkF+3hDiLmqIDYdKSFwrOSBqDWby+vQaZ2vDplL0TpdZWTtJnHybOSsCnDRptzO7ZVzgXXfJpErBfsCThDPtXkTH6FFy2gi4mFawq+wIJNevdVOFtg5R/TY0VcJtfF1fj1WXgYumk2j7cNU7vLeDOrZ0GTo56mAMssiGCs9cwM4yBgoZU8qIYlzljOLqLBm3am4jdzKGfWksVJ55dhDS0Ujv0csVprVs550+E/X43jTLN6x27KTMmFIThpQaP6KUf0Cp+caThbqu4WT709PZM2F8cMb8l0RHn6SO6USw8tMp+tMJBqAXHEBntIDFujIP2BaZzL8M5KWrYMJV5B+gvgnYnWxtYp6KzH3nc+FHkjPjvWiC9aLxzov8xovm852Fui7b2f7MNHqMeXya/ySgA0eW89xIn02QPhsvfeaXPptPegt1XdLb/phEpW+Ejrzlf5zqw3S7+AeHiezUyg4AAA==',\n 'sectional.rng':\n 'H4sIAJC0cWkCA+2aXW/TMBSGr9mvMJ00wUUT+inUZZ0AwYa0gtiGxK2buq21xA6OMwa/Hiex13w0jjNlVFTt1Zbj8/rYfp+TrJlz/uB74B6xEFNy1ulZbzoAEZcuMFmddb7ffuq+7ZxPj5wVg74PGRCjSTiBZ50158HEthny4ANZWZStbBLaLvUDyPEce5j/tiEhlItfqYgkykl2VW7IWeTyiKFk7PQIAOdltwuO2/iAbjcRXKAlJggQ6CNRRs9CHvKTqUQMThbUjXxE0pKn4Prj1bsf4MsFuHHXyIdgSRm4vJ1dgdEE3CA3HiR2Ccwgu4uCWKL0OXbsomo6V9sLex7JYu2XCMa+CKtWVTEevLqG5A70Xk/AicdP172TFT+t0ohPRFx6PCJ5OiKCCUfMQ/AeqUviIkPLzWliQhDr2FVhyDkLN2HHLio6tpw98YqdmmWrb1IpmVUuLDOvIMKnpDQ3DeI1Qy9Tq7um2M2srVLGggxDC/uBh13MrXW6y9l116Qy6qGnpnE4b5oSMBSqU26aKyzSDaM5x9xDuZO189vl2PkdLR6u9jRT38jEUklJ1ArWDIaP+1UtJ5NiI1lLj/7qAHFlLuIilFRcnkf1oRrldV/brvKw9RVs/Qaw9c1h6+th67cHm5I6wLYPsCnf7A42SVEdbIMGsA0UbIMGsA3MYRvoYRu0B5uSOsC2D7Ap3+wONklRHWzDBrANFWzDBrANzWEb6mEbtgebkjrAtg+wKd/sDjZJUR1sowawjRRsowawjcxhG+lhG7UHm5I6wLYPsCnf7A42SVEdbOMGsI0VbOMGsI3NYRvrYRu3B5uSOsC2D7Ap3+wONklRHWwrRqPACLiLeKSkLclqQFwy3py6tCgteemQ1ujLyrVLoMaN2cKf7LTsXlVXXuwDVV+lbftaShfN/rGy7cFfF83eDra11ny0BOcfxOhXNqNs+7KkqTP55YQ6jSx3octwwEXfCALKeK7JlaXNz+8paGeYLeP9vO9/4GIhGm+obRjyPQ+YIQ5NX3t8oOInl4PPZEnTHiNnMm8yMsG4y6il6NqMGtNWn8nr/VeNJr9d+vtaYuT272k58/1r58896t79jChHWvN/EyPS17cvTL3/PlYGcSIKU+9v5jK3/ybHmIDMknQQZIa1xUFJ8rlQKE5kiYfbzDNfEYedkLW9RmUWcQXPI/6IzSa2rbIF5NCKGFZ1Ce8oAeMidkh4EbLCDI4t/6dievQXkHjWLoUhAAA=',\n 'structural.rng':\n 'H4sIAJC0cWkCA91awW7bOBC95yu4LtCbrd1DgYXrpMgC2/aQ9tCkQK+0RMuEKVKhqCT9+w5J2ZacWBJHamw0J0eaNxyR8x5nKC0+PGWCPDBdcCUvJ//M/p4QJmOVcJleTr7ffZz+O/lwdbFINc0yqglYy2JOLydrY/J5FGkm6JNMZ0qnkSyiWGU5NXzJBTc/IyqlMvCvgjvOs0MfwxZGl7EpNXO2VxeELP6aTsmbMf7IdOocJmzFJSOSZuxyUrDYxjZjgmVuPDCg80TFZcakj/uKfPv/5voH+fqJ3MZrllGyUpp8vvtyQ97NyX9CxRvyhepNmZPrJGEJ4dLdfWedVX9vFtGhVz/W2E/3Qvi3/hHn5K0w76vnfZua98dCslMBl5oTVM0N3ObSMC0YfWDbS3BRs9XBhHIpmZ5ErTbUGF3sbRbRoe9FVAXjFi7yK3d8Eb2/Cvo8zloEkKPZCwGo3PqhohZ1vFY8rj3qUTczqjmd8SwXPOZmpllqp602AR1IrQSbUcG0QYESToVKg6G5DdetfigUN+CKsSQUk2pV5qEgRGygbfclY6GwXLNiS6FQLC5LChisrOVtP5Shy5xKJgJwgsoEZmUzW4KMN+ncF2l3A89hqn/iHACRpeFypTDwrcJhsBnlIWuzw0n6wNPQfNijlQnJwR2uYFTH62Aaq3hKl7Dv0jhYeBw23kj1KFiS2lkOTkrnYgVK/ah0sDA4cJ4zmfAnDHbJl4IrKGvydUhq7vDxmuYQOgqqhMrXCNV1WBmL0hZrKLRmCUcttUeilhjKIuw2A2hYYEsK1Mgs526BkVjYRsrgHcFhtaaGopBP1EomBgqFKcMSKRWqKMI0eoflMmEoBkKRplUCJT8yMyAtoDrDIHOaMsELFBFyGl6kORxYUWS48AubinkpxH0ZtqvswPcSlcRGxY3iP2rW0YuoWWoflv7dtb7vLyr0s5Dc3dlKqEcfxXF/FcD2Gd6ewJUl3IdbLuTnYzR6xg73UAq09pZfd6UCFeSGy03h+zTA9e/RwLh3f2YDauvN7P2x+rK9r/PoyQbWZRj0cIkcIlQHLOzVBDFZYjBLGlwHSSVftdmCBuhwIsfTpT2vTqJJO53pcA07F49hLto06drbeCGqAP3FqAL0FqRtRG2itLUZS5ia/s5DnLbzhlCmAVBEezzg4AjbWaOPjnDnK8dEZjy1aCb9SRSjoQRdqlHwpF0z7qhM7SkNVDHX1rgSD/szQDqseX/hcEG1yoazGE00at7OQzIGn61hj5oGD4w7qzq9ArzSeceQEwBlAld1lBOAQT2m4Y3j/RFltiYRpxHZvXB2OF8zmkAcbRr72Zl4ZfXm/aXV2/fW1iqaNnGtTMZS14a785BX/EuPYCT+PddQpXpJMMYjYCOPTsLAOq86vNup6KDgR2fiKejN+1PQ2/emYBVNGwUrk7Eo2HB3LhXOoJd/OPifSsZGRp2EjHWGdXi3HWIrFa0BjOgW2BPSXulPR9eC9iWji6aNis5gLCLWnJ0HDbEvwg9x4+VybUFOksn79Ozw7Tud1ky+dSbb77Ps75DPs1wj1f/rLBdN+8dZzmS8b7Nq7s4jm4ObT3zbukPCm9kqVX7zFvTah+rIL5ieTeSYbwhrOX6iF4R7zh94X0TVV7RXF78AQQLnXncrAAA=',\n 'tables.rng':\n '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',\n 'web-components.rng':\n 'H4sIAJC0cWkCA81YzW7bOBC+5ym4WqA3S7uHBRau7GJR7G4PaQu0KdorJY1lFhQpkFRS9+k7lGSJpiVabR00OQSJ55v/H844ffGl4uQelGZSbKI/4z8iAiKXBRPlJvpw99/q7+jF9iYtFa0qqgiihV7TTbQ3pl4niQJOv4gylqpMhE5yWdXUsIxxZg4JFUIa/FcipZXccecDt4jvKWcFNVLFoknyRhtZrYBDBcLopGeYU6aNanLTKOiEoxhqDjXcskxRddhE0faGkPS31Yr8fo0fslq1AgvYMQFE0Ao2kYGq5tRAbI1uFSKCrguZN9aH1vkteffv7T+fyJv/yft8DxUlO6nIq7vXt+SvNfkIGXmJYZPC+pwmPnMn8tpeTFh517ui1+QZN8+Pnj0rzfM5q/pMebHow4B0JgwoDvQejh/hhwp2fvCYEKCiJAyixig9gtLEl54mvT1tmpIuT4GUdQJ73lEh1nAlhatuqaxY72khH5SUppLFMQ6ppbGsMUemSRTi8r1kuRspbI4GtrIGkSbd3z4t51JD4VHTxJWEuTvq/0FfCgxraQtjhyUwBGzeq0n8vH/YxTDn345y7ROv7R7GUNCML0iXh3y6LmlQDAfr12VuTaCfcLbaN6JvdAUlw1fgsCB1Aban42w3B3vuU5vOB1QLjisw1L58zmCcQe64fJhESe4PYIfYhIhFiLhjJb7NAYBqskOALLPPkJuLxruoeq+oxs1lEnnPCpCXxLmgoDTaFOyiNBcUlGZs7wVikUteKtnUAYjZAy1C9EwWoXCbHbZJiK6CuQZeaAjxa2y+Y6KmiwkrmXF9inA7ar6B+jq37T02BMFPM8QguRVx/tKfLm8XnnpXx5DLR9Shc8Vqs9JNXUtlrqPMbpE4tiT+wpIlaadjSx72oACPAJIeJWwJ0x0KisnF92dN7Xi+Oyptq81J95fUl+3QJ8d7ottrscxXGVUL1tqhRoV+g4YQ5xK5dLiM9X1hBT6Z0EZRoWuqUIY3U5DnKyj5Vr2WyhF0OmzwsYmpOJxwJedsP7w4f1cH/KoYno/ZJxG7QYG/qQySkWgjNMy9hbuDe63EEh8B5aRkNHauRe72QCKmIzKom2sKWdt/KB8N9pYtlBJKj53JcZfktoRskVuAe9F5UUkTV+l8DDTHl2scDzOuvkdUNwIsfvlZa9GLT9rWlKmt4Bx1rXt29H6o/av6MdlRj+nLyV1+bmfwVJ8s1Rl7z8rvrMSDgk46j+IJNS/Kj8eSAHTWzRw2Ds1KwNYi9qsv5EfcmKrFU8Qv27kvRULv1CLpfokumuJXWA28/I8Mj7P1TfTkMkU/NcfbDr/CJG/lDCU0PYPTpP9KeHvzDeuam5hEFgAA',\n 'web-forms.rng':\n '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',\n 'web-forms2.rng':\n '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',\n};\n\n/**\n * Cache for decompressed schemas\n */\nconst schemaCache = new Map<string, string>();\n\n/**\n * Decode base64 string to Uint8Array\n */\nfunction base64ToUint8Array(base64: string): Uint8Array {\n // Use atob for browser compatibility, Buffer for Node.js\n if (typeof atob === 'function') {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n return new Uint8Array(Buffer.from(base64, 'base64'));\n}\n\n/**\n * Decompress a schema from its compressed form\n */\nfunction decompressSchema(compressed: string): string {\n const data = base64ToUint8Array(compressed);\n const decompressed = gunzipSync(data);\n return strFromU8(decompressed);\n}\n\n/**\n * Get schema content by filename (decompresses lazily on first access)\n */\nexport function getSchema(filename: string): string | undefined {\n // Check cache first\n const cached = schemaCache.get(filename);\n if (cached !== undefined) {\n return cached;\n }\n\n // Get compressed data\n const compressed = COMPRESSED_SCHEMAS[filename];\n if (compressed === undefined) {\n return undefined;\n }\n\n // Decompress and cache\n const schema = decompressSchema(compressed);\n schemaCache.set(filename, schema);\n return schema;\n}\n\n/**\n * Get list of available schema filenames\n */\nexport function getSchemaNames(): string[] {\n return Object.keys(COMPRESSED_SCHEMAS);\n}\n\n/**\n * Preload all schemas into cache (useful if you need all schemas upfront)\n */\nexport function preloadSchemas(): void {\n for (const filename of Object.keys(COMPRESSED_SCHEMAS)) {\n getSchema(filename);\n }\n}\n","import type { ValidationMessage } from '../types.js';\n\n/**\n * Result of parsing a libxml2 error message\n */\ninterface LibxmlErrorParseResult {\n message: string;\n line: number | undefined;\n column: number | undefined;\n}\n\n/**\n * Interface for schema validators\n */\nexport interface SchemaValidator {\n /**\n * Validate XML content against a schema\n *\n * @param xml - The XML content to validate\n * @param schemaPath - Path to the schema file\n * @returns Array of validation messages\n */\n validate(xml: string, schemaPath: string): Promise<ValidationMessage[]>;\n\n /**\n * Dispose of any resources held by the validator\n */\n dispose(): void;\n}\n\n/**\n * Base class for schema validators\n */\nexport abstract class BaseSchemaValidator implements SchemaValidator {\n protected disposed = false;\n\n abstract validate(xml: string, schemaPath: string): Promise<ValidationMessage[]>;\n\n dispose(): void {\n this.disposed = true;\n }\n\n protected checkDisposed(): void {\n if (this.disposed) {\n throw new Error('Validator has been disposed');\n }\n }\n\n /**\n * Parse libxml2-wasm error message to extract line and column numbers\n *\n * Error formats:\n * - \"Entity: line 10: parser error : message\"\n * - \"Element '{name}': This element is not expected. Expected is ( {name} ).\"\n * - \"file:10: element name: Schemas validity error : ...\"\n *\n * @param error - The error message from libxml2-wasm\n * @returns Parsed message with line and column if available\n */\n protected parseLibxmlError(error: string): LibxmlErrorParseResult {\n // Extract line number from libxml2-wasm error message\n // Format: \"Entity: line 10: parser error : message\" or \"file:10: ...\"\n const lineRegex = /(?:Entity:\\s*)?(?:file:)?(?:line\\s+)?(\\d+):/;\n const lineMatch = lineRegex.exec(error);\n const line = lineMatch?.[1] ? Number.parseInt(lineMatch[1], 10) : undefined;\n\n // Extract column if present (after line number)\n const columnRegex = /line\\s+\\d+:\\s*(\\d+):/;\n const columnMatch = columnRegex.exec(error);\n const column = columnMatch?.[1] ? Number.parseInt(columnMatch[1], 10) : undefined;\n\n // Normalize error message - remove libxml2 prefix\n let message = error;\n if (error.includes('Opening and ending tag mismatch')) {\n message = `Mismatched closing tag: ${error.replace('Opening and ending tag mismatch: ', '')}`;\n } else if (error.includes('mismatch')) {\n message = `Mismatched closing tag: ${error}`;\n } else {\n message = error\n .replace(/^Entity:\\s*line\\s+\\d+:\\s*(parser\\s+error\\s*:)?\\s*/, '')\n .replace(/^Schemas validity error:\\s*/, '')\n .replace(/^Element .*:\\s*/, '');\n }\n\n return { message, line, column };\n }\n}\n","import { MessageId, pushMessage } from '../messages/index.js';\nimport type { ValidationMessage } from '../types.js';\nimport { getSchema, getSchemaNames } from './schemas.generated.js';\nimport { BaseSchemaValidator } from './validator.js';\n\n/**\n * Load schema content by filename\n *\n * First tries to load from bundled schemas (works in all environments),\n * then falls back to fetch for custom schemas provided by URL.\n */\nasync function loadSchema(schemaPath: string): Promise<string> {\n const filename = schemaPath.split('/').pop() ?? schemaPath;\n\n // Try bundled schemas first (works in all environments)\n const bundled = getSchema(filename);\n if (bundled) {\n return bundled;\n }\n\n // If it's a URL, try to fetch it\n if (schemaPath.startsWith('http://') || schemaPath.startsWith('https://')) {\n const response = await fetch(schemaPath);\n if (!response.ok) {\n throw new Error(`Failed to load schema: ${response.statusText}`);\n }\n return await response.text();\n }\n\n throw new Error(\n `Schema not found: \"${filename}\". Available schemas: ${getSchemaNames().join(', ')}`,\n );\n}\n\n/**\n * RelaxNG schema validator using libxml2-wasm\n *\n * Note: libxml2 has deprecated RelaxNG support, so this may need\n * to be replaced in the future.\n */\n\nexport class RelaxNGValidator extends BaseSchemaValidator {\n async validate(xml: string, schemaPath: string): Promise<ValidationMessage[]> {\n this.checkDisposed();\n\n const messages: ValidationMessage[] = [];\n\n try {\n const libxml2 = await import('libxml2-wasm');\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const LibRelaxNGValidator = libxml2.RelaxNGValidator;\n const { XmlDocument } = libxml2;\n\n const doc = XmlDocument.fromString(xml);\n\n try {\n const schemaContent = await loadSchema(schemaPath);\n const schemaDoc = XmlDocument.fromString(schemaContent);\n\n try {\n const validator = LibRelaxNGValidator.fromDoc(schemaDoc);\n\n try {\n validator.validate(doc);\n } catch (error) {\n const parsed = this.parseLibxmlError(\n error instanceof Error ? error.message : 'RelaxNG validation failed',\n );\n const location: { path: string; line?: number; column?: number } = { path: schemaPath };\n if (parsed.line !== undefined) location.line = parsed.line;\n if (parsed.column !== undefined) location.column = parsed.column;\n pushMessage(messages, {\n id: MessageId.RSC_005,\n message: parsed.message,\n location,\n });\n } finally {\n validator.dispose();\n }\n } finally {\n schemaDoc.dispose();\n }\n } finally {\n doc.dispose();\n }\n } catch (error) {\n pushMessage(messages, {\n id: MessageId.RSC_005,\n message: `Failed to initialize RelaxNG validator: ${error instanceof Error ? error.message : 'Unknown error'}`,\n });\n }\n\n return messages;\n }\n}\n","import type { ValidationContext, ValidationMessage } from '../types.js';\nimport { RelaxNGValidator } from './relaxng.js';\n\n/**\n * Schema mappings for different EPUB versions and file types\n */\nconst SCHEMA_MAPPINGS = {\n // EPUB 2.0\n '2.0': {\n container: 'container.rng',\n opf: 'opf20.rng',\n // TODO: Add XHTML 2.0 schemas (NVDL format, more complex)\n },\n // EPUB 3.x (using RNG format with inlined includes)\n '3.0': {\n container: 'ocf-container-30.rng',\n opf: 'package-30.rng',\n nav: 'epub-nav-30.rng',\n xhtml: 'epub-xhtml-30.rng',\n svg: 'epub-svg-30.rng',\n },\n '3.1': {\n container: 'ocf-container-30.rng',\n opf: 'package-30.rng',\n nav: 'epub-nav-30.rng',\n xhtml: 'epub-xhtml-30.rng',\n svg: 'epub-svg-30.rng',\n },\n '3.2': {\n container: 'ocf-container-30.rng',\n opf: 'package-30.rng',\n nav: 'epub-nav-30.rng',\n xhtml: 'epub-xhtml-30.rng',\n svg: 'epub-svg-30.rng',\n },\n '3.3': {\n container: 'ocf-container-30.rng',\n opf: 'package-30.rng',\n nav: 'epub-nav-30.rng',\n xhtml: 'epub-xhtml-30.rng',\n svg: 'epub-svg-30.rng',\n },\n} as const;\n\n/**\n * Orchestrates schema validation for different EPUB files\n */\nexport class SchemaValidator {\n private context: ValidationContext;\n\n constructor(context: ValidationContext) {\n this.context = context;\n }\n\n /**\n * Run all schema validations\n */\n async validate(): Promise<void> {\n const version = this.context.version;\n\n // Get schema mappings for current version (version is guaranteed to be valid by EPUBVersion type)\n const schemas = SCHEMA_MAPPINGS[version as keyof typeof SCHEMA_MAPPINGS];\n\n // Validate container.xml\n await this.validateContainer(schemas.container);\n\n // Validate OPF\n if (this.context.opfPath) {\n await this.validateOPF(this.context.opfPath, schemas.opf);\n }\n\n // Validate manifest items with schema validation\n if (this.context.packageDocument) {\n await this.validateManifestItems(schemas);\n }\n }\n\n /**\n * Validate container.xml\n */\n private async validateContainer(schemaPath: string): Promise<void> {\n const containerPath = 'META-INF/container.xml';\n const data = this.context.files.get(containerPath);\n\n if (!data) {\n return;\n }\n\n const xml = new TextDecoder().decode(data);\n const validator = new RelaxNGValidator();\n const messages = await validator.validate(xml, schemaPath);\n\n for (const msg of messages) {\n this.addMessage({\n ...msg,\n location: { ...msg.location, path: containerPath },\n });\n }\n }\n\n /**\n * Validate OPF package document\n */\n private async validateOPF(opfPath: string, schemaPath: string): Promise<void> {\n const data = this.context.files.get(opfPath);\n\n if (!data) {\n return;\n }\n\n const xml = new TextDecoder().decode(data);\n const validator = new RelaxNGValidator();\n const messages = await validator.validate(xml, schemaPath);\n\n for (const msg of messages) {\n this.addMessage({\n ...msg,\n location: { ...msg.location, path: opfPath },\n });\n }\n }\n\n /**\n * Validate manifest items (XHTML, SVG, etc.)\n *\n * NOTE: RelaxNG validation for XHTML/SVG/NAV is currently disabled due to\n * libxml2-wasm limitations. The schemas use recursive \"anything\" patterns\n * (common.elem.anything -> common.inner.anything) with interleave/attribute\n * that libxml2 doesn't support (\"Found forbidden pattern oneOrMore//interleave//attribute\").\n *\n * Java EPUBCheck uses Jing (a more sophisticated RelaxNG validator) that handles these.\n * Content validation still happens via Schematron and custom validators.\n */\n private async validateManifestItems(_schemas: Record<string, string>): Promise<void> {\n // RelaxNG validation disabled - see comment above\n // Content is validated via Schematron (src/schema/schematron.ts) and\n // custom validators (src/content/validator.ts)\n }\n\n /**\n * Add a message to the context with proper filtering\n */\n private addMessage(message: ValidationMessage): void {\n const messages = this.context.messages;\n\n // Check max errors limit\n if (\n this.context.options.maxErrors > 0 &&\n messages.filter((m) => m.severity === 'error' || m.severity === 'fatal').length >=\n this.context.options.maxErrors\n ) {\n return;\n }\n\n // Filter by severity based on options\n if (!this.context.options.includeUsage && message.severity === 'usage') {\n return;\n }\n if (!this.context.options.includeInfo && message.severity === 'info') {\n return;\n }\n\n messages.push(message);\n }\n}\n","import { ContentValidator } from './content/index.js';\nimport { buildReport } from './core/report.js';\nimport { MessageId, pushMessage } from './messages/index.js';\nimport { NCXValidator } from './nav/index.js';\nimport { OCFValidator } from './ocf/index.js';\nimport { OPFValidator } from './opf/index.js';\nimport { isCoreMediaType } from './opf/types.js';\nimport { ResourceRegistry } from './references/registry.js';\nimport { resolveManifestHref } from './references/url.js';\nimport { ReferenceValidator } from './references/validator.js';\nimport { SchemaValidator } from './schema/orchestrator.js';\nimport type {\n EPUBVersion,\n EpubCheckOptions,\n EpubCheckResult,\n ValidationContext,\n ValidationMessage,\n} from './types.js';\n\n/**\n * Default options for EpubCheck\n */\nconst DEFAULT_OPTIONS: Required<EpubCheckOptions> = {\n version: '3.3',\n profile: 'default',\n includeUsage: false,\n includeInfo: true,\n maxErrors: 0,\n locale: 'en',\n};\n\n/**\n * Main EPUB validation class\n *\n * @example\n * ```typescript\n * import { EpubCheck } from 'epubcheck-ts';\n *\n * // Validate from a Uint8Array (works in Node.js and browsers)\n * const result = await EpubCheck.validate(epubData);\n *\n * if (result.valid) {\n * console.log('EPUB is valid!');\n * } else {\n * console.log(`Found ${result.errorCount} errors`);\n * for (const msg of result.messages) {\n * console.log(`${msg.severity}: ${msg.message}`);\n * }\n * }\n * ```\n */\nexport class EpubCheck {\n private readonly options: Required<EpubCheckOptions>;\n\n /**\n * Create a new EpubCheck instance with custom options\n */\n constructor(options: EpubCheckOptions = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n\n /**\n * Validate an EPUB file\n *\n * @param data - The EPUB file as a Uint8Array\n * @returns Validation result\n */\n async check(data: Uint8Array): Promise<EpubCheckResult> {\n const startTime = performance.now();\n\n // Initialize validation context\n const context: ValidationContext = {\n data,\n options: this.options,\n version: this.options.version,\n messages: [],\n files: new Map(),\n rootfiles: [],\n };\n\n try {\n // Step 1: Validate OCF container (ZIP structure)\n const ocfValidator = new OCFValidator();\n ocfValidator.validate(context);\n\n // Stop if fatal errors in OCF\n if (context.messages.some((m) => m.severity === 'fatal')) {\n const elapsedMs = performance.now() - startTime;\n return buildReport(context.messages, context.version, elapsedMs);\n }\n\n // Step 2: Validate package document (OPF)\n const opfValidator = new OPFValidator();\n opfValidator.validate(context);\n\n // Step 3: Create resource registry and reference validator\n const registry = new ResourceRegistry();\n const refValidator = new ReferenceValidator(registry, context.version);\n\n // Populate registry from manifest\n if (context.packageDocument) {\n this.populateRegistry(context, registry);\n this.validateObfuscatedResources(context);\n }\n\n // Step 4: Validate content documents (XHTML) and extract references\n const contentValidator = new ContentValidator();\n contentValidator.validate(context, registry, refValidator);\n\n // Step 5: Validate NCX navigation (EPUB 2 always; EPUB 3 when NCX is present)\n if (context.packageDocument) {\n this.validateNCX(context, registry);\n }\n\n // Step 6: Run cross-reference validation\n refValidator.validate(context);\n\n // Step 7: Run schema validations (RelaxNG, XSD, Schematron)\n const schemaValidator = new SchemaValidator(context);\n await schemaValidator.validate();\n } catch (error) {\n // Add fatal error for unexpected exceptions\n pushMessage(context.messages, {\n id: MessageId.PKG_025,\n message: error instanceof Error ? error.message : 'Unknown validation error',\n });\n }\n\n const elapsedMs = performance.now() - startTime;\n\n // Filter messages based on options\n const filteredMessages = context.messages.filter((msg) => {\n if (!this.options.includeUsage && msg.severity === 'usage') {\n return false;\n }\n if (!this.options.includeInfo && msg.severity === 'info') {\n return false;\n }\n return true;\n });\n\n // Build and return result\n return buildReport(filteredMessages, context.version, elapsedMs);\n }\n\n /**\n * Static method to validate an EPUB file with default options\n *\n * @param data - The EPUB file as a Uint8Array\n * @param options - Optional validation options\n * @returns Validation result\n */\n static async validate(\n data: Uint8Array,\n options: EpubCheckOptions = {},\n ): Promise<EpubCheckResult> {\n const checker = new EpubCheck(options);\n return checker.check(data);\n }\n\n /**\n * Get the current EPUB version being validated against\n */\n get version(): EPUBVersion {\n return this.options.version;\n }\n\n /**\n * Validate NCX navigation document (EPUB 2 always, EPUB 3 when NCX present)\n */\n private validateNCX(context: ValidationContext, registry: ResourceRegistry): void {\n if (!context.packageDocument) {\n return;\n }\n\n const ncxId = context.packageDocument.spineToc;\n if (!ncxId) {\n // For EPUB 3 without toc attribute, check if NCX exists in manifest\n // (NCX toc attribute missing check is handled in OPF validator)\n return;\n }\n\n // Find NCX manifest item\n const ncxItem = context.packageDocument.manifest.find((item) => item.id === ncxId);\n if (!ncxItem) {\n return;\n }\n\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n const ncxPath = resolveManifestHref(opfDir, ncxItem.href);\n\n const ncxData = context.files.get(ncxPath);\n if (!ncxData) {\n return;\n }\n\n const ncxContent = new TextDecoder().decode(ncxData);\n\n const ncxValidator = new NCXValidator();\n ncxValidator.validate(context, ncxContent, ncxPath, registry);\n\n // Check if NCX UID matches OPF unique identifier\n if (context.ncxUid && context.packageDocument.uniqueIdentifier) {\n // Find the dc:identifier whose id matches the package unique-identifier attribute\n const uniqueIdRef = context.packageDocument.uniqueIdentifier;\n const matchingIdentifier = context.packageDocument.dcElements.find(\n (dc) => dc.name === 'identifier' && dc.id === uniqueIdRef,\n );\n\n if (matchingIdentifier) {\n const opfUid = matchingIdentifier.value.trim();\n if (context.ncxUid !== opfUid) {\n pushMessage(context.messages, {\n id: MessageId.NCX_001,\n message: `NCX uid \"${context.ncxUid}\" does not match OPF unique identifier \"${opfUid}\"`,\n location: { path: ncxPath },\n });\n }\n }\n }\n }\n\n /**\n * Add a validation message to the context\n */\n protected addMessage(messages: ValidationMessage[], message: ValidationMessage): void {\n // Check max errors limit\n if (\n this.options.maxErrors > 0 &&\n messages.filter((m) => m.severity === 'error' || m.severity === 'fatal').length >=\n this.options.maxErrors\n ) {\n return;\n }\n\n // Filter by severity based on options\n if (!this.options.includeUsage && message.severity === 'usage') {\n return;\n }\n if (!this.options.includeInfo && message.severity === 'info') {\n return;\n }\n\n messages.push(message);\n }\n\n /**\n * Validate that obfuscated resources are blessed font types (PKG-026)\n */\n private validateObfuscatedResources(context: ValidationContext): void {\n if (!context.obfuscatedResources || !context.packageDocument) return;\n\n const BLESSED_FONT_TYPES = new Set([\n 'font/otf',\n 'font/ttf',\n 'font/woff',\n 'font/woff2',\n 'application/font-sfnt',\n 'application/font-woff',\n 'application/vnd.ms-opentype',\n 'application/x-font-ttf',\n ]);\n\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n for (const uri of context.obfuscatedResources) {\n const item = context.packageDocument.manifest.find(\n (m) => resolveManifestHref(opfDir, m.href) === uri,\n );\n if (item && !BLESSED_FONT_TYPES.has(item.mediaType)) {\n pushMessage(context.messages, {\n id: MessageId.PKG_026,\n message: `Obfuscated resource \"${uri}\" has media-type \"${item.mediaType}\" which is not a Font Core Media Type`,\n location: { path: uri },\n });\n }\n }\n }\n\n /**\n * Populate resource registry from package document manifest\n */\n private populateRegistry(context: ValidationContext, registry: ResourceRegistry): void {\n const packageDoc = context.packageDocument;\n if (!packageDoc) return;\n\n const opfPath = context.opfPath ?? '';\n const opfDir = opfPath.includes('/') ? opfPath.substring(0, opfPath.lastIndexOf('/')) : '';\n\n const spineIdrefs = new Set(packageDoc.spine.map((item) => item.idref));\n const manifestById = new Map(packageDoc.manifest.map((item) => [item.id, item]));\n\n for (const item of packageDoc.manifest) {\n const fullPath = resolveManifestHref(opfDir, item.href);\n const properties = item.properties ?? [];\n registry.registerResource({\n url: fullPath,\n mimeType: item.mediaType,\n inSpine: spineIdrefs.has(item.id),\n hasCoreMediaTypeFallback: this.hasCMTFallback(item.id, manifestById),\n isNav: properties.includes('nav'),\n isCoverImage: properties.includes('cover-image'),\n isNcx: item.mediaType === 'application/x-dtbncx+xml',\n ids: new Set(),\n });\n }\n }\n\n /**\n * Check if a manifest item has a fallback chain reaching a Core Media Type\n */\n private hasCMTFallback(\n itemId: string,\n manifestById: Map<string, { mediaType: string; fallback?: string }>,\n ): boolean {\n const visited = new Set<string>();\n let currentId: string | undefined = itemId;\n while (currentId) {\n if (visited.has(currentId)) return false; // circular\n visited.add(currentId);\n const item = manifestById.get(currentId);\n if (!item) return false;\n if (isCoreMediaType(item.mediaType)) return true;\n currentId = item.fallback;\n }\n return false;\n }\n}\n"]}
|