parser-frontmatter-ts/tests/constants.test.js

168 lines
28 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const src_1 = require("../src");
describe('Constants', () => {
describe('AUDIENCE_VALUES', () => {
it('should contain all valid audience levels', () => {
expect(src_1.AUDIENCE_VALUES).toContain('all');
expect(src_1.AUDIENCE_VALUES).toContain('beginner');
expect(src_1.AUDIENCE_VALUES).toContain('intermediate');
expect(src_1.AUDIENCE_VALUES).toContain('expert');
expect(src_1.AUDIENCE_VALUES).toHaveLength(4);
});
});
describe('DOC_PURPOSE_VALUES', () => {
it('should contain all valid doc purposes', () => {
expect(src_1.DOC_PURPOSE_VALUES).toContain('reference');
expect(src_1.DOC_PURPOSE_VALUES).toContain('tutorial');
expect(src_1.DOC_PURPOSE_VALUES).toContain('troubleshooting');
expect(src_1.DOC_PURPOSE_VALUES).toContain('conceptual');
expect(src_1.DOC_PURPOSE_VALUES).toContain('guide');
expect(src_1.DOC_PURPOSE_VALUES).toContain('specification');
expect(src_1.DOC_PURPOSE_VALUES).toHaveLength(6);
});
});
describe('PROFILE_VALUES', () => {
it('should contain all valid profile types', () => {
const expectedProfiles = [
'scraped', 'research', 'technical', 'code', 'data', 'changelog',
'legal', 'test', 'schema', 'troubleshoot', 'meeting', 'faq', 'config'
];
expectedProfiles.forEach(profile => {
expect(src_1.PROFILE_VALUES).toContain(profile);
});
expect(src_1.PROFILE_VALUES).toHaveLength(13);
});
});
describe('DEFAULTS', () => {
it('should have correct default values', () => {
expect(src_1.DEFAULTS.profile).toBe('data');
expect(src_1.DEFAULTS.audience).toBe('all');
expect(src_1.DEFAULTS.extractionConfidence).toBe(1.0);
expect(src_1.DEFAULTS.contentQuality).toBe(1.5);
expect(src_1.DEFAULTS.complexity).toBe(3);
});
it('should have confidence in valid range', () => {
expect(src_1.DEFAULTS.extractionConfidence).toBeGreaterThanOrEqual(0);
expect(src_1.DEFAULTS.extractionConfidence).toBeLessThanOrEqual(1);
});
it('should have quality in valid range', () => {
expect(src_1.DEFAULTS.contentQuality).toBeGreaterThanOrEqual(0);
expect(src_1.DEFAULTS.contentQuality).toBeLessThanOrEqual(2);
});
});
describe('PARSER_PROFILES', () => {
it('should have profiles for all parsers', () => {
const expectedParsers = [
'fss-parse-pdf',
'fss-parse-word',
'fss-parse-excel',
'fss-parse-image',
'fss-parse-audio',
'fss-parse-video',
'fss-parse-email',
'fss-parse-presentation',
'fss-parse-data',
'fss-parse-diagram'
];
expectedParsers.forEach(parser => {
expect(src_1.PARSER_PROFILES[parser]).toBeDefined();
});
});
it('should use valid profile types', () => {
Object.values(src_1.PARSER_PROFILES).forEach(profile => {
expect(src_1.PROFILE_VALUES).toContain(profile);
});
});
it('should have appropriate profiles for parser types', () => {
expect(src_1.PARSER_PROFILES['fss-parse-pdf']).toBe('technical');
expect(src_1.PARSER_PROFILES['fss-parse-word']).toBe('technical');
expect(src_1.PARSER_PROFILES['fss-parse-excel']).toBe('data');
expect(src_1.PARSER_PROFILES['fss-parse-audio']).toBe('meeting');
expect(src_1.PARSER_PROFILES['fss-parse-video']).toBe('meeting');
expect(src_1.PARSER_PROFILES['fss-parse-email']).toBe('data');
expect(src_1.PARSER_PROFILES['fss-parse-diagram']).toBe('schema');
});
});
describe('BALANCED_FIELDS', () => {
it('should include universal document fields', () => {
expect(src_1.BALANCED_FIELDS).toContain('word_count');
expect(src_1.BALANCED_FIELDS).toContain('page_count');
expect(src_1.BALANCED_FIELDS).toContain('character_count');
expect(src_1.BALANCED_FIELDS).toContain('author');
expect(src_1.BALANCED_FIELDS).toContain('format');
});
it('should include PDF/Word structure fields', () => {
expect(src_1.BALANCED_FIELDS).toContain('has_tables');
expect(src_1.BALANCED_FIELDS).toContain('has_images');
expect(src_1.BALANCED_FIELDS).toContain('table_count');
expect(src_1.BALANCED_FIELDS).toContain('image_count');
expect(src_1.BALANCED_FIELDS).toContain('has_toc');
expect(src_1.BALANCED_FIELDS).toContain('has_forms');
});
it('should include Excel/Data fields', () => {
expect(src_1.BALANCED_FIELDS).toContain('sheet_count');
expect(src_1.BALANCED_FIELDS).toContain('row_count');
expect(src_1.BALANCED_FIELDS).toContain('column_count');
expect(src_1.BALANCED_FIELDS).toContain('record_count');
expect(src_1.BALANCED_FIELDS).toContain('format_detected');
});
it('should include image fields', () => {
expect(src_1.BALANCED_FIELDS).toContain('width');
expect(src_1.BALANCED_FIELDS).toContain('height');
expect(src_1.BALANCED_FIELDS).toContain('channels');
expect(src_1.BALANCED_FIELDS).toContain('has_alpha');
expect(src_1.BALANCED_FIELDS).toContain('ocr_confidence');
});
it('should include audio fields', () => {
expect(src_1.BALANCED_FIELDS).toContain('duration');
expect(src_1.BALANCED_FIELDS).toContain('bitrate');
expect(src_1.BALANCED_FIELDS).toContain('sample_rate');
expect(src_1.BALANCED_FIELDS).toContain('codec');
expect(src_1.BALANCED_FIELDS).toContain('has_transcript');
expect(src_1.BALANCED_FIELDS).toContain('speaker_count');
});
it('should include video fields', () => {
expect(src_1.BALANCED_FIELDS).toContain('fps');
expect(src_1.BALANCED_FIELDS).toContain('aspect_ratio');
expect(src_1.BALANCED_FIELDS).toContain('video_codec');
expect(src_1.BALANCED_FIELDS).toContain('audio_codec');
});
it('should include email fields', () => {
expect(src_1.BALANCED_FIELDS).toContain('from');
expect(src_1.BALANCED_FIELDS).toContain('to');
expect(src_1.BALANCED_FIELDS).toContain('cc');
expect(src_1.BALANCED_FIELDS).toContain('sender');
expect(src_1.BALANCED_FIELDS).toContain('recipients');
expect(src_1.BALANCED_FIELDS).toContain('message_id');
expect(src_1.BALANCED_FIELDS).toContain('has_attachments');
expect(src_1.BALANCED_FIELDS).toContain('attachment_count');
expect(src_1.BALANCED_FIELDS).toContain('importance');
});
it('should include presentation fields', () => {
expect(src_1.BALANCED_FIELDS).toContain('slide_count');
expect(src_1.BALANCED_FIELDS).toContain('total_slides');
expect(src_1.BALANCED_FIELDS).toContain('chart_count');
expect(src_1.BALANCED_FIELDS).toContain('has_speaker_notes');
});
it('should include diagram fields', () => {
expect(src_1.BALANCED_FIELDS).toContain('diagram_count');
expect(src_1.BALANCED_FIELDS).toContain('diagram_type');
expect(src_1.BALANCED_FIELDS).toContain('valid_diagrams');
expect(src_1.BALANCED_FIELDS).toContain('invalid_diagrams');
expect(src_1.BALANCED_FIELDS).toContain('node_count');
expect(src_1.BALANCED_FIELDS).toContain('edge_count');
});
it('should not contain duplicate fields', () => {
const uniqueFields = new Set(src_1.BALANCED_FIELDS);
expect(uniqueFields.size).toBe(src_1.BALANCED_FIELDS.length);
});
it('should have reasonable number of fields', () => {
// Should have enough fields to cover all parser types
expect(src_1.BALANCED_FIELDS.length).toBeGreaterThan(50);
// But not so many that balanced mode becomes complete mode
expect(src_1.BALANCED_FIELDS.length).toBeLessThan(100);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25zdGFudHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdDQU9nQjtBQUVoQixRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUN6QixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1FBQy9CLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLHFCQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLHFCQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLHFCQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsTUFBTSxDQUFDLHFCQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLHFCQUFlLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxNQUFNLENBQUMsd0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEQsTUFBTSxDQUFDLHdCQUFrQixDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyx3QkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sQ0FBQyx3QkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsd0JBQWtCLENBQUMs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LHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUNqRCxzREFBc0Q7WUFDdEQsTUFBTSxDQUFDLHFCQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELDJEQUEyRDtZQUMzRCxNQUFNLENBQUMscUJBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVVESUVOQ0VfVkFMVUVTLFxuICBET0NfUFVSUE9TRV9WQUxVRVMsXG4gIFBST0ZJTEVfVkFMVUVTLFxuICBERUZBVUxUUyxcbiAgQkFMQU5DRURfRklFTERTLFxuICBQQVJTRVJfUFJPRklMRVNcbn0gZnJvbSAnLi4vc3JjJztcblxuZGVzY3JpYmUoJ0NvbnN0YW50cycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ0FVRElFTkNFX1ZBTFVFUycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnRhaW4gYWxsIHZhbGlkIGF1ZGllbmNlIGxldmVscycsICgpID0+IHtcbiAgICAgIGV4cGVjdChBVURJRU5DRV9WQUxVRVMpLnRvQ29udGFpbignYWxsJyk7XG4gICAgICBleHBlY3QoQVVESUVOQ0VfVkFMVUVTKS50b0NvbnRhaW4oJ2JlZ2lubmVyJyk7XG4gICAgICBleHBlY3QoQVVESUVOQ0VfVkFMVUVTKS50b0NvbnRhaW4oJ2ludGVybWVkaWF0ZScpO1xuICAgICAgZXhwZWN0KEFVRElFTkNFX1ZBTFVFUykudG9Db250YWluKCdleHBlcnQnKTtcbiAgICAgIGV4cGVjdChBVURJRU5DRV9WQUxVRVMpLnRvSGF2ZUxlbmd0aCg0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0RPQ19QVVJQT1NFX1ZBTFVFUycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnRhaW4gYWxsIHZhbGlkIGRvYyBwdXJwb3NlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChET0NfUFVSUE9TRV9WQUxVRVMpLnRvQ29udGFpbigncmVmZXJlbmNlJyk7XG4gICAgICBleHBlY3QoRE9DX1BVUlBPU0VfVkFMVUVTKS50b0NvbnRhaW4oJ3R1dG9yaWFsJyk7XG4gICAgICBleHBlY3QoRE9DX1BVUlBPU0VfVkFMVUVTKS50b0NvbnRhaW4oJ3Ryb3VibGVzaG9vdGluZycpO1xuICAgICAgZXhwZWN0KERPQ19QVVJQT1NFX1ZBTFVFUykudG9Db250YWluKCdjb25jZXB0dWFsJyk7XG4gICAgICBleHBlY3QoRE9DX1BVUlBPU0VfVkFMVUVTKS50b0NvbnRhaW4oJ2d1aWRlJyk7XG4gICAgICBleHBlY3QoRE9DX1BVUlBPU0VfVkFMVUVTKS50b0NvbnRhaW4oJ3NwZWNpZmljYXRpb24nKTtcbiAgICAgIGV4cGVjdChET0NfUFVSUE9TRV9WQUxVRVMpLnRvSGF2ZUxlbmd0aCg2KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BST0ZJTEVfVkFMVUVTJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29udGFpbiBhbGwgdmFsaWQgcHJvZmlsZSB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJvZmlsZXMgPSBbXG4gICAgICAgICdzY3JhcGVkJywgJ3Jlc2VhcmNoJywgJ3RlY2huaWNhbCcsICdjb2RlJywgJ2RhdGEnLCAnY2hhbmdlbG9nJyxcbiAgICAgICAgJ2xlZ2FsJywgJ3Rlc3QnLCAnc2NoZW1hJywgJ3Ryb3VibGVzaG9vdCcsICdtZWV0aW5nJywgJ2ZhcScsICdjb25maWcnXG4gICAgICBdO1xuICAgICAgZXhwZWN0ZWRQcm9maWxlcy5mb3JFYWNoKHByb2ZpbGUgPT4ge1xuICAgICAgICBleHBlY3QoUFJPRklMRV9WQUxVRVMpLnRvQ29udGFpbihwcm9maWxlKTtcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KFBST0ZJTEVfVkFMVUVTKS50b0hhdmVMZW5ndGgoMTMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnREVGQVVMVFMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoREVGQVVMVFMucHJvZmlsZSkudG9CZSgnZGF0YScpO1xuICAgICAgZXhwZWN0KERFRkFVTFRTLmF1ZGllbmNlKS50b0JlKCdhbGwnKTtcbiAgICAgIGV4cGVjdChERUZBVUxUUy5leHRyYWN0aW9uQ29uZmlkZW5jZSkudG9CZSgxLjApO1xuICAgICAgZXhwZWN0KERFRkFVTFRTLmNvbnRlbnRRdWFsaXR5KS50b0JlKDEuNSk7XG4gICAgICBleHBlY3QoREVGQVVMVFMuY29tcGxleGl0eSkudG9CZSgzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBjb25maWRlbmNlIGluIHZhbGlkIHJhbmdlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KERFRkFVTFRTLmV4dHJhY3Rpb25Db25maWRlbmNlKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKDApO1xuICAgICAgZXhwZWN0KERFRkFVTFRTLmV4dHJhY3Rpb25Db25maWRlbmNlKS50b0JlTGVzc1RoYW5PckVxdWFsKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHF1YWxpdHkgaW4gdmFsaWQgcmFuZ2UnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoREVGQVVMVFMuY29udGVudFF1YWxpdHkpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMCk7XG4gICAgICBleHBlY3QoREVGQVVMVFMuY29udGVudFF1YWxpdHkpLnRvQmVMZXNzVGhhbk9yRXF1YWwoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQQVJTRVJfUFJPRklMRVMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIHByb2ZpbGVzIGZvciBhbGwgcGFyc2VycycsICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUGFyc2VycyA9IFtcbiAgICAgICAgJ2Zzcy1wYXJzZS1wZGYnLFxuICAgICAgICAnZnNzLXBhcnNlLXdvcmQnLFxuICAgICAgICAnZnNzLXBhcnNlLWV4Y2VsJyxcbiAgICAgICAgJ2Zzcy1wYXJzZS1pbWFnZScsXG4gICAgICAgICdmc3MtcGFyc2UtYXVkaW8nLFxuICAgICAgICAnZnNzLXBhcnNlLXZpZGVvJyxcbiAgICAgICAgJ2Zzcy1wYXJzZS1lbWFpbCcsXG4gICAgICAgICdmc3MtcGFyc2UtcHJlc2VudGF0aW9uJyxcbiAgICAgICAgJ2Zzcy1wYXJzZS1kYXRhJyxcbiAgICAgICAgJ2Zzcy1wYXJzZS1kaWFncmFtJ1xuICAgICAgXTtcbiAgICAgIGV4cGVjdGVkUGFyc2Vycy5mb3JFYWNoKHBhcnNlciA9PiB7XG4gICAgICAgIGV4cGVjdChQQVJTRVJfUFJPRklMRVNbcGFyc2VyXSkudG9CZURlZmluZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgdmFsaWQgcHJvZmlsZSB0eXBlcycsICgpID0+IHtcbiAgICAgIE9iamVjdC52YWx1ZXMoUEFSU0VSX1BST0ZJTEVTKS5mb3JFYWNoKHByb2ZpbGUgPT4ge1xuICAgICAgICBleHBlY3QoUFJPRklMRV9WQUxVRVMpLnRvQ29udGFpbihwcm9maWxlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGFwcHJvcHJpYXRlIHByb2ZpbGVzIGZvciBwYXJzZXIgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoUEFSU0VSX1BST0ZJTEVTWydmc3MtcGFyc2UtcGRmJ10pLnRvQmUoJ3RlY2huaWNhbCcpO1xuICAgICAgZXhwZWN0KFBBUlNFUl9QUk9GSUxFU1snZnNzLXBhcnNlLXdvcmQnXSkudG9CZSgndGVjaG5pY2FsJyk7XG4gICAgICBleHBlY3QoUEFSU0VSX1BST0ZJTEVTWydmc3MtcGFyc2UtZXhjZWwnXSkudG9CZSgnZGF0YScpO1xuICAgICAgZXhwZWN0KFBBUlNFUl9QUk9GSUxFU1snZnNzLXBhcnNlLWF1ZGlvJ10pLnRvQmUoJ21lZXRpbmcnKTtcbiAgICAgIGV4cGVjdChQQVJTRVJfUFJPRklMRVNbJ2Zzcy1wYXJzZS12aWRlbyddKS50b0JlKCdtZWV0aW5nJyk7XG4gICAgICBleHBlY3QoUEFSU0VSX1BST0ZJTEVTWydmc3MtcGFyc2UtZW1haWwnXSkudG9CZSgnZGF0YScpO1xuICAgICAgZXhwZWN0KFBBUlNFUl9QUk9GSUxFU1snZnNzLXBhcnNlLWRpYWdyYW0nXSkudG9CZSgnc2NoZW1hJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCQUxBTkNFRF9GSUVMRFMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHVuaXZlcnNhbCBkb2N1bWVudCBmaWVsZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ3dvcmRfY291bnQnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbigncGFnZV9jb3VudCcpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdjaGFyYWN0ZXJfY291bnQnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignYXV0aG9yJyk7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2Zvcm1hdCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIFBERi9Xb3JkIHN0cnVjdHVyZSBmaWVsZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2hhc190YWJsZXMnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignaGFzX2ltYWdlcycpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCd0YWJsZV9jb3VudCcpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdpbWFnZV9jb3VudCcpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdoYXNfdG9jJyk7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2hhc19mb3JtcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIEV4Y2VsL0RhdGEgZmllbGRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdzaGVldF9jb3VudCcpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdyb3dfY291bnQnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignY29sdW1uX2NvdW50Jyk7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ3JlY29yZF9jb3VudCcpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdmb3JtYXRfZGV0ZWN0ZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5jbHVkZSBpbWFnZSBmaWVsZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ3dpZHRoJyk7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2hlaWdodCcpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdjaGFubmVscycpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdoYXNfYWxwaGEnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignb2NyX2NvbmZpZGVuY2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5jbHVkZSBhdWRpbyBmaWVsZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2R1cmF0aW9uJyk7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2JpdHJhdGUnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignc2FtcGxlX3JhdGUnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignY29kZWMnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignaGFzX3RyYW5zY3JpcHQnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignc3BlYWtlcl9jb3VudCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHZpZGVvIGZpZWxkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignZnBzJyk7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2FzcGVjdF9yYXRpbycpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCd2aWRlb19jb2RlYycpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdhdWRpb19jb2RlYycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIGVtYWlsIGZpZWxkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignZnJvbScpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCd0bycpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdjYycpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdzZW5kZXInKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbigncmVjaXBpZW50cycpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdtZXNzYWdlX2lkJyk7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2hhc19hdHRhY2htZW50cycpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdhdHRhY2htZW50X2NvdW50Jyk7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2ltcG9ydGFuY2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5jbHVkZSBwcmVzZW50YXRpb24gZmllbGRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdzbGlkZV9jb3VudCcpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCd0b3RhbF9zbGlkZXMnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignY2hhcnRfY291bnQnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignaGFzX3NwZWFrZXJfbm90ZXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5jbHVkZSBkaWFncmFtIGZpZWxkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignZGlhZ3JhbV9jb3VudCcpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdkaWFncmFtX3R5cGUnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbigndmFsaWRfZGlhZ3JhbXMnKTtcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMpLnRvQ29udGFpbignaW52YWxpZF9kaWFncmFtcycpO1xuICAgICAgZXhwZWN0KEJBTEFOQ0VEX0ZJRUxEUykudG9Db250YWluKCdub2RlX2NvdW50Jyk7XG4gICAgICBleHBlY3QoQkFMQU5DRURfRklFTERTKS50b0NvbnRhaW4oJ2VkZ2VfY291bnQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGNvbnRhaW4gZHVwbGljYXRlIGZpZWxkcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVuaXF1ZUZpZWxkcyA9IG5ldyBTZXQoQkFMQU5DRURfRklFTERTKTtcbiAgICAgIGV4cGVjdCh1bmlxdWVGaWVsZHMuc2l6ZSkudG9CZShCQUxBTkNFRF9GSUVMRFMubGVuZ3RoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSByZWFzb25hYmxlIG51bWJlciBvZiBmaWVsZHMnLCAoKSA9PiB7XG4gICAgICAvLyBTaG91bGQgaGF2ZSBlbm91Z2ggZmllbGRzIHRvIGNvdmVyIGFsbCBwYXJzZXIgdHlwZXNcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oNTApO1xuICAgICAgLy8gQnV0IG5vdCBzbyBtYW55IHRoYXQgYmFsYW5jZWQgbW9kZSBiZWNvbWVzIGNvbXBsZXRlIG1vZGVcbiAgICAgIGV4cGVjdChCQUxBTkNFRF9GSUVMRFMubGVuZ3RoKS50b0JlTGVzc1RoYW4oMTAwKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==