@eui/components 18.2.16-snapshot-1756456305763 → 18.2.16-snapshot-1756489547144
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/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/variables.html +499 -71
- package/docs/properties.html +1 -1
- package/esm2022/eui-file-upload/utils/eui-file-upload.validators.mjs +3 -2
- package/esm2022/eui-file-upload/utils/mime-types.mjs +292 -39
- package/eui-file-upload/utils/mime-types.d.ts.map +1 -1
- package/fesm2022/eui-components-eui-file-upload.mjs +293 -39
- package/fesm2022/eui-components-eui-file-upload.mjs.map +1 -1
- package/package.json +9 -9
- package/directives/package.json +0 -3
- package/eui-accordion/package.json +0 -3
- package/eui-alert/package.json +0 -3
- package/eui-autocomplete/package.json +0 -3
- package/eui-avatar/package.json +0 -3
- package/eui-badge/package.json +0 -3
- package/eui-block-content/package.json +0 -3
- package/eui-block-document/package.json +0 -3
- package/eui-breadcrumb/package.json +0 -3
- package/eui-button/package.json +0 -3
- package/eui-button-group/package.json +0 -3
- package/eui-button-v2/package.json +0 -3
- package/eui-card/package.json +0 -3
- package/eui-chip/package.json +0 -3
- package/eui-chip-list/package.json +0 -3
- package/eui-dashboard-button/package.json +0 -3
- package/eui-dashboard-card/package.json +0 -3
- package/eui-date-range-selector/package.json +0 -3
- package/eui-datepicker/package.json +0 -3
- package/eui-dialog/package.json +0 -3
- package/eui-dimmer/package.json +0 -3
- package/eui-disable-content/package.json +0 -3
- package/eui-discussion-thread/package.json +0 -3
- package/eui-dropdown/package.json +0 -3
- package/eui-feedback-message/package.json +0 -3
- package/eui-fieldset/package.json +0 -3
- package/eui-file-upload/package.json +0 -3
- package/eui-growl/package.json +0 -3
- package/eui-icon/package.json +0 -3
- package/eui-icon-button/package.json +0 -3
- package/eui-icon-button-expander/package.json +0 -3
- package/eui-icon-color/package.json +0 -3
- package/eui-icon-input/package.json +0 -3
- package/eui-icon-state/package.json +0 -3
- package/eui-icon-toggle/package.json +0 -3
- package/eui-input-checkbox/package.json +0 -3
- package/eui-input-group/package.json +0 -3
- package/eui-input-number/package.json +0 -3
- package/eui-input-radio/package.json +0 -3
- package/eui-input-text/package.json +0 -3
- package/eui-label/package.json +0 -3
- package/eui-language-selector/package.json +0 -3
- package/eui-list/package.json +0 -3
- package/eui-menu/package.json +0 -3
- package/eui-message-box/package.json +0 -3
- package/eui-navbar/package.json +0 -3
- package/eui-overlay/package.json +0 -3
- package/eui-page/package.json +0 -3
- package/eui-paginator/package.json +0 -3
- package/eui-popover/package.json +0 -3
- package/eui-progress-bar/package.json +0 -3
- package/eui-progress-circle/package.json +0 -3
- package/eui-select/package.json +0 -3
- package/eui-sidebar-menu/package.json +0 -3
- package/eui-skeleton/package.json +0 -3
- package/eui-slide-toggle/package.json +0 -3
- package/eui-split-button/package.json +0 -3
- package/eui-table/package.json +0 -3
- package/eui-table-v2/package.json +0 -3
- package/eui-tabs/package.json +0 -3
- package/eui-textarea/package.json +0 -3
- package/eui-timebar/package.json +0 -3
- package/eui-timeline/package.json +0 -3
- package/eui-timepicker/package.json +0 -3
- package/eui-tree/package.json +0 -3
- package/eui-tree-list/package.json +0 -3
- package/eui-user-profile/package.json +0 -3
- package/eui-wizard/package.json +0 -3
- package/externals/charts/package.json +0 -3
- package/externals/eui-editor/package.json +0 -3
- package/externals/helpers/package.json +0 -3
- package/externals/quill/package.json +0 -3
- package/externals/search/favourite-queries/package.json +0 -3
- package/layout/package.json +0 -3
- package/pipes/package.json +0 -3
- package/shared/package.json +0 -3
- package/validators/package.json +0 -3
package/docs/properties.html
CHANGED
@@ -129,7 +129,8 @@ const validateFileMimeType = (file, mimeTypes) => {
|
|
129
129
|
const reader = new FileReader();
|
130
130
|
reader.onloadend = () => {
|
131
131
|
const buffer = reader.result;
|
132
|
-
|
132
|
+
// Read more bytes to support complex MIME type detection (e.g., ASF format analysis)
|
133
|
+
const headerBytes = new Uint8Array(buffer).slice(0, Math.min(1024, buffer.byteLength));
|
133
134
|
const mime = getMimeType(headerBytes);
|
134
135
|
if (mimeTypes.includes(mime)) {
|
135
136
|
subscriber.next(null);
|
@@ -142,4 +143,4 @@ const validateFileMimeType = (file, mimeTypes) => {
|
|
142
143
|
reader.readAsArrayBuffer(file);
|
143
144
|
});
|
144
145
|
};
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ldWktZmlsZS11cGxvYWQvdXRpbHMvZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sY0FBYyxDQUFDO0FBRXJEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQzFCLENBQUMsUUFBZ0IsRUFBZSxFQUFFLENBQ2xDLENBQUMsT0FBd0IsRUFBK0IsRUFBRSxDQUN0RCxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBRS9FOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQ3pCLENBQUMsT0FBZSxFQUFlLEVBQUUsQ0FDakMsQ0FBQyxPQUF3QixFQUE4QixFQUFFO0lBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2pDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssSUFBSSxTQUFTLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMs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QUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVOLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFVLEVBQUUsU0FBcUIsRUFBa0QsRUFBRTtJQUMvRyxPQUFPLElBQUksVUFBVSxDQUE0QixDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFTLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQXFCLENBQUM7WUFDNUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB6aXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgZ2V0TWltZVR5cGUsIE1pbWVUeXBlIH0gZnJvbSAnLi9taW1lLXR5cGVzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFZhbGlkYXRvciB0aGF0IHJlcXVpcmVzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBmaWxlcyB0aGF0IGNhbiBiZSB1cGxvYWRlZC5cbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICogVmFsaWRhdGUgdGhhdCB0aGUgdXNlciBzZWxlY3RlZCBtYXhpbXVtIDMgZmlsZXM6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsZVVwbG9hZCA9IG5ldyBGb3JtQ29udHJvbChudWxsLCBtYXhGaWxlc1ZhbGlkYXRvcigzKSk7XG4gKiBjb25zb2xlLmxvZyhmaWxlVXBsb2FkLmVycm9ycyk7IC8vIHsgbWF4RmlsZXM6IDMgfVxuICogYGBgXG4gKlxuICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVycm9yIG1hcCB3aXRoIHRoZVxuICogYG1heEZpbGVzYCBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heEZpbGVzVmFsaWRhdG9yID1cbiAgICAobWF4RmlsZXM6IG51bWJlcik6IFZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgbWF4RmlsZXM6IG51bWJlciB9IHwgbnVsbCA9PlxuICAgICAgICBjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gbWF4RmlsZXMgPyB7IG1heEZpbGVzIH0gOiBudWxsO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdG9yIHRoYXQgcmVxdWlyZXMgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGZpbGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgc2VsZWN0IGEgZmlsZSBoYXZlIGEgc2l6ZSB1cCB0byAzMDBLYjpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWxlVXBsb2FkID0gbmV3IEZvcm1Db250cm9sKG51bGwsIG1heFNpemVWYWxpZGF0b3IoMzAwMDAwKSk7XG4gKiBjb25zb2xlLmxvZyhmaWxlVXBsb2FkLmVycm9ycyk7IC8vIHsgbWF4U2l6ZTogMzAwMDAwIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEEgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlcnJvciBtYXAgd2l0aCB0aGVcbiAqIGBtYXhTaXplYCBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heFNpemVWYWxpZGF0b3IgPVxuICAgIChtYXhTaXplOiBudW1iZXIpOiBWYWxpZGF0b3JGbiA9PlxuICAgIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IG1heFNpemU6IG51bWJlciB9IHwgbnVsbCA9PiB7XG4gICAgICAgIGxldCB0b3RhbFNpemUgPSAwO1xuICAgICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZS5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgdG90YWxTaXplICs9IGZpbGUuc2l6ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgJiYgdG90YWxTaXplID4gbWF4U2l6ZSAqIDEuMDI0ID8geyBtYXhTaXplIH0gOiBudWxsO1xuICAgIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyB0aGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgcGVyIGZpbGUgdGhhdCBjYW4gYmUgdXBsb2FkZWQuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqIFZhbGlkYXRlcyB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgc2VsZWN0IGEgZmlsZSB0aGF0IGV4Y2VlZHMgdGhlIHByb3ZpZGVkIHNpemVcbiAqXG4gKiBAcmV0dXJucyBBIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3IgbWFwIHdpdGggdGhlXG4gKiBgbWF4RmlsZVNpemVgIGFuZCB0aGUgYGluZGV4ZXNgIG9mIHRoZSBmaWxlL2ZpbGVzIHRoYXQgZXhjZWVkZWQgdGhlIG1heCBzaXplIGlmIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZhaWxzLCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgY29uc3QgbWF4RmlsZVNpemVWYWxpZGF0b3IgPVxuICAgIChtYXhGaWxlU2l6ZTogbnVtYmVyKTogVmFsaWRhdG9yRm4gPT5cbiAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBtYXhGaWxlU2l6ZTogbnVtYmVyLCBpbmRleGVzOiBBcnJheTxudW1iZXI+IH0gfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUluZGV4ZXMgPVtdO1xuICAgICAgICBsZXQgbWF4RmlsZUV4Y2VlZGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICBjb250cm9sLnZhbHVlLmZvckVhY2goKGZpbGU6IEZpbGUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS5zaXplID4gbWF4RmlsZVNpemUgKiAxLjAyNCkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgbWF4RmlsZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250cm9sLnZhbHVlICYmIG1heEZpbGVFeGNlZWRlZCA/IHsgbWF4RmlsZVNpemUsIGluZGV4ZXM6IGZpbGVJbmRleGVzIH0gOiBudWxsO1xuICAgIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyBhbiBhcnJheSBvZiBtaW1lIHR5cGUgdGhhdCBjYW4gYmUgdXBsb2FkZWQuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqIFZhbGlkYXRlIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBzZWxlY3QgYSBmaWxlIGhhdmluZyBhbm90aGVyIGV4dGVuc2lvbiB0aGFuIC5qcGcgb3IgLmpwZWc6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsZVVwbG9hZCA9IG5ldyBGb3JtQ29udHJvbChudWxsLCBtaW1lVHlwZUV4dGVuc2lvblZhbGlkYXRvcihbJ2ltYWdlL2pwZWcnXSkpLFxuICogY29uc29sZS5sb2coZmlsZVVwbG9hZC5lcnJvcnMpOyAvLyB7IGludmFsaWRGaWxlRXh0ZW5zaW9uOiBbJ2ltYWdlL2pwZWcnXSB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBBIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3IgbWFwIHdpdGggdGhlXG4gKiBgaW52YWxpZEZpbGVFeHRlbnNpb25gIGlmIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZhaWxzLCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgY29uc3QgbWltZVR5cGVFeHRlbnNpb25WYWxpZGF0b3IgPVxuICAgIChtaW1lVHlwZXM6IHN0cmluZ1tdKTogVmFsaWRhdG9yRm4gPT5cbiAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBpbnZhbGlkRmlsZUV4dGVuc2lvbjogc3RyaW5nW10gfSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBpbnZhbGlkRmlsZUV4dGVuc2lvbjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnRyb2wudmFsdWUuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtaW1lVHlwZXMuaW5kZXhPZihmaWxlLnR5cGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkRmlsZUV4dGVuc2lvbi5wdXNoKGZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbC52YWx1ZSAmJiBpbnZhbGlkRmlsZUV4dGVuc2lvbi5sZW5ndGggPiAwID8geyBpbnZhbGlkRmlsZUV4dGVuc2lvbiB9IDogbnVsbDtcbiAgICB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdG9yIHRoYXQgcmVxdWlyZXMgYW4gYXJyYXkgb2YgbWltZSB0eXBlIHRoYXQgY2FuIGJlIHVwbG9hZGVkLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgc2VsZWN0IGEgZmlsZSBoYXZpbmcgYW5vdGhlciBleHRlbnNpb24gdGhhbiAuanBnIG9yIC5qcGVnOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbGVVcGxvYWQgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgbWltZVR5cGVFeHRlbnNpb25WYWxpZGF0b3IoWydpbWFnZS9qcGVnJ10pKSxcbiAqIGNvbnNvbGUubG9nKGZpbGVVcGxvYWQuZXJyb3JzKTsgLy8geyBpbnZhbGlkTWltZUZpbGVUeXBlOiBbJ2ltYWdlL2pwZWcnXSB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBBbiBBc3luYyB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVycm9yIG1hcCB3aXRoIHRoZVxuICogYGludmFsaWRNaW1lRmlsZVR5cGVgIGlmIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZhaWxzLCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgY29uc3QgYXN5bmNNaW1lVHlwZUV4dGVuc2lvblZhbGlkYXRvciA9XG4gICAgKG1pbWVUeXBlczogTWltZVR5cGVbXSk6IEFzeW5jVmFsaWRhdG9yRm4gPT5cbiAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiA9PiB7XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRXJyb3JPYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD5bXSA9IFtdO1xuICAgICAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIGZpbGVzXG4gICAgICAgICAgICBjb250cm9sLnZhbHVlLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBwdXNoIG9ic2VydmFibGUgd2hpY2ggd2lsbCBjaGVjayB0aGUgbWltZSB2YWxpZGF0aW9uIHR5cGVcbiAgICAgICAgICAgICAgICBmaWxlRXJyb3JPYnNlcnZhYmxlcy5wdXNoKHZhbGlkYXRlRmlsZU1pbWVUeXBlKGZpbGUsIG1pbWVUeXBlcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gemlwKC4uLmZpbGVFcnJvck9ic2VydmFibGVzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoZmlsZUVycm9ycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBmaWxlRXJyb3JzLmZpbHRlcigoZmlsZUVycm9yKSA9PiBmaWxlRXJyb3IgIT09IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBzaG91bGQgYmUgeyBmaWxlTmFtZTogRmlsZVR5cGUgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGludmFsaWRNaW1lRmlsZVR5cGU6IGVycm9ycyB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfTtcblxuY29uc3QgdmFsaWRhdGVGaWxlTWltZVR5cGUgPSAoZmlsZTogRmlsZSwgbWltZVR5cGVzOiBNaW1lVHlwZVtdKTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IE1pbWVUeXBlIH0gfCBudWxsPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHsgW3A6IHN0cmluZ106IE1pbWVUeXBlIH0+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSByZWFkZXIucmVzdWx0IGFzIEFycmF5QnVmZmVyO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyQnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpLnNsaWNlKDAsIDgpO1xuICAgICAgICAgICAgY29uc3QgbWltZSA9IGdldE1pbWVUeXBlKGhlYWRlckJ5dGVzKTtcbiAgICAgICAgICAgIGlmIChtaW1lVHlwZXMuaW5jbHVkZXMobWltZSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh7IFtmaWxlLm5hbWVdOiBtaW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgfSk7XG59O1xuIl19
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ldWktZmlsZS11cGxvYWQvdXRpbHMvZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sY0FBYyxDQUFDO0FBRXJEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQzFCLENBQUMsUUFBZ0IsRUFBZSxFQUFFLENBQ2xDLENBQUMsT0FBd0IsRUFBK0IsRUFBRSxDQUN0RCxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBRS9FOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQ3pCLENBQUMsT0FBZSxFQUFlLEVBQUUsQ0FDakMsQ0FBQyxPQUF3QixFQUE4QixFQUFFO0lBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2pDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssSUFBSSxTQUFTLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMs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QUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVOLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFVLEVBQUUsU0FBcUIsRUFBa0QsRUFBRTtJQUMvRyxPQUFPLElBQUksVUFBVSxDQUE0QixDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFTLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQXFCLENBQUM7WUFDNUMscUZBQXFGO1lBQ3JGLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDdkYsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMzQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgemlwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGdldE1pbWVUeXBlLCBNaW1lVHlwZSB9IGZyb20gJy4vbWltZS10eXBlcyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgZmlsZXMgdGhhdCBjYW4gYmUgdXBsb2FkZWQuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqIFZhbGlkYXRlIHRoYXQgdGhlIHVzZXIgc2VsZWN0ZWQgbWF4aW11bSAzIGZpbGVzOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbGVVcGxvYWQgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgbWF4RmlsZXNWYWxpZGF0b3IoMykpO1xuICogY29uc29sZS5sb2coZmlsZVVwbG9hZC5lcnJvcnMpOyAvLyB7IG1heEZpbGVzOiAzIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEEgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlcnJvciBtYXAgd2l0aCB0aGVcbiAqIGBtYXhGaWxlc2AgaWYgdGhlIHZhbGlkYXRpb24gY2hlY2sgZmFpbHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXhGaWxlc1ZhbGlkYXRvciA9XG4gICAgKG1heEZpbGVzOiBudW1iZXIpOiBWYWxpZGF0b3JGbiA9PlxuICAgIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IG1heEZpbGVzOiBudW1iZXIgfSB8IG51bGwgPT5cbiAgICAgICAgY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA+IG1heEZpbGVzID8geyBtYXhGaWxlcyB9IDogbnVsbDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFZhbGlkYXRvciB0aGF0IHJlcXVpcmVzIHRoZSBtYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBvZiBmaWxlcyB0aGF0IGNhbiBiZSB1cGxvYWRlZC5cbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICogVmFsaWRhdGUgdGhhdCB0aGUgdXNlciBkb2Vzbid0IHNlbGVjdCBhIGZpbGUgaGF2ZSBhIHNpemUgdXAgdG8gMzAwS2I6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsZVVwbG9hZCA9IG5ldyBGb3JtQ29udHJvbChudWxsLCBtYXhTaXplVmFsaWRhdG9yKDMwMDAwMCkpO1xuICogY29uc29sZS5sb2coZmlsZVVwbG9hZC5lcnJvcnMpOyAvLyB7IG1heFNpemU6IDMwMDAwMCB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBBIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3IgbWFwIHdpdGggdGhlXG4gKiBgbWF4U2l6ZWAgaWYgdGhlIHZhbGlkYXRpb24gY2hlY2sgZmFpbHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXhTaXplVmFsaWRhdG9yID1cbiAgICAobWF4U2l6ZTogbnVtYmVyKTogVmFsaWRhdG9yRm4gPT5cbiAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBtYXhTaXplOiBudW1iZXIgfSB8IG51bGwgPT4ge1xuICAgICAgICBsZXQgdG90YWxTaXplID0gMDtcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnRyb2wudmFsdWUuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSArPSBmaWxlLnNpemU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250cm9sLnZhbHVlICYmIHRvdGFsU2l6ZSA+IG1heFNpemUgKiAxLjAyNCA/IHsgbWF4U2l6ZSB9IDogbnVsbDtcbiAgICB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdG9yIHRoYXQgcmVxdWlyZXMgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIHBlciBmaWxlIHRoYXQgY2FuIGJlIHVwbG9hZGVkLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgdXNlciBkb2Vzbid0IHNlbGVjdCBhIGZpbGUgdGhhdCBleGNlZWRzIHRoZSBwcm92aWRlZCBzaXplXG4gKlxuICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVycm9yIG1hcCB3aXRoIHRoZVxuICogYG1heEZpbGVTaXplYCBhbmQgdGhlIGBpbmRleGVzYCBvZiB0aGUgZmlsZS9maWxlcyB0aGF0IGV4Y2VlZGVkIHRoZSBtYXggc2l6ZSBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heEZpbGVTaXplVmFsaWRhdG9yID1cbiAgICAobWF4RmlsZVNpemU6IG51bWJlcik6IFZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgbWF4RmlsZVNpemU6IG51bWJlciwgaW5kZXhlczogQXJyYXk8bnVtYmVyPiB9IHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVJbmRleGVzID1bXTtcbiAgICAgICAgbGV0IG1heEZpbGVFeGNlZWRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZS5mb3JFYWNoKChmaWxlOiBGaWxlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IG1heEZpbGVTaXplICogMS4wMjQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZUluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIG1heEZpbGVFeGNlZWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbC52YWx1ZSAmJiBtYXhGaWxlRXhjZWVkZWQgPyB7IG1heEZpbGVTaXplLCBpbmRleGVzOiBmaWxlSW5kZXhlcyB9IDogbnVsbDtcbiAgICB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdG9yIHRoYXQgcmVxdWlyZXMgYW4gYXJyYXkgb2YgbWltZSB0eXBlIHRoYXQgY2FuIGJlIHVwbG9hZGVkLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgc2VsZWN0IGEgZmlsZSBoYXZpbmcgYW5vdGhlciBleHRlbnNpb24gdGhhbiAuanBnIG9yIC5qcGVnOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbGVVcGxvYWQgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgbWltZVR5cGVFeHRlbnNpb25WYWxpZGF0b3IoWydpbWFnZS9qcGVnJ10pKSxcbiAqIGNvbnNvbGUubG9nKGZpbGVVcGxvYWQuZXJyb3JzKTsgLy8geyBpbnZhbGlkRmlsZUV4dGVuc2lvbjogWydpbWFnZS9qcGVnJ10gfVxuICogYGBgXG4gKlxuICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVycm9yIG1hcCB3aXRoIHRoZVxuICogYGludmFsaWRGaWxlRXh0ZW5zaW9uYCBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbWVUeXBlRXh0ZW5zaW9uVmFsaWRhdG9yID1cbiAgICAobWltZVR5cGVzOiBzdHJpbmdbXSk6IFZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgaW52YWxpZEZpbGVFeHRlbnNpb246IHN0cmluZ1tdIH0gfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgaW52YWxpZEZpbGVFeHRlbnNpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICBjb250cm9sLnZhbHVlLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWltZVR5cGVzLmluZGV4T2YoZmlsZS50eXBlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZEZpbGVFeHRlbnNpb24ucHVzaChmaWxlLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgJiYgaW52YWxpZEZpbGVFeHRlbnNpb24ubGVuZ3RoID4gMCA/IHsgaW52YWxpZEZpbGVFeHRlbnNpb24gfSA6IG51bGw7XG4gICAgfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFZhbGlkYXRvciB0aGF0IHJlcXVpcmVzIGFuIGFycmF5IG9mIG1pbWUgdHlwZSB0aGF0IGNhbiBiZSB1cGxvYWRlZC5cbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICogVmFsaWRhdGUgdGhhdCB0aGUgdXNlciBkb2Vzbid0IHNlbGVjdCBhIGZpbGUgaGF2aW5nIGFub3RoZXIgZXh0ZW5zaW9uIHRoYW4gLmpwZyBvciAuanBlZzpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWxlVXBsb2FkID0gbmV3IEZvcm1Db250cm9sKG51bGwsIG1pbWVUeXBlRXh0ZW5zaW9uVmFsaWRhdG9yKFsnaW1hZ2UvanBlZyddKSksXG4gKiBjb25zb2xlLmxvZyhmaWxlVXBsb2FkLmVycm9ycyk7IC8vIHsgaW52YWxpZE1pbWVGaWxlVHlwZTogWydpbWFnZS9qcGVnJ10gfVxuICogYGBgXG4gKlxuICogQHJldHVybnMgQW4gQXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlcnJvciBtYXAgd2l0aCB0aGVcbiAqIGBpbnZhbGlkTWltZUZpbGVUeXBlYCBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzeW5jTWltZVR5cGVFeHRlbnNpb25WYWxpZGF0b3IgPVxuICAgIChtaW1lVHlwZXM6IE1pbWVUeXBlW10pOiBBc3luY1ZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xuICAgICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZUVycm9yT2JzZXJ2YWJsZXM6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+W10gPSBbXTtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciBmaWxlc1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZS5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcHVzaCBvYnNlcnZhYmxlIHdoaWNoIHdpbGwgY2hlY2sgdGhlIG1pbWUgdmFsaWRhdGlvbiB0eXBlXG4gICAgICAgICAgICAgICAgZmlsZUVycm9yT2JzZXJ2YWJsZXMucHVzaCh2YWxpZGF0ZUZpbGVNaW1lVHlwZShmaWxlLCBtaW1lVHlwZXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHppcCguLi5maWxlRXJyb3JPYnNlcnZhYmxlcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGZpbGVFcnJvcnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gZmlsZUVycm9ycy5maWx0ZXIoKGZpbGVFcnJvcikgPT4gZmlsZUVycm9yICE9PSBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3Igc2hvdWxkIGJlIHsgZmlsZU5hbWU6IEZpbGVUeXBlIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpbnZhbGlkTWltZUZpbGVUeXBlOiBlcnJvcnMgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH07XG5cbmNvbnN0IHZhbGlkYXRlRmlsZU1pbWVUeXBlID0gKGZpbGU6IEZpbGUsIG1pbWVUeXBlczogTWltZVR5cGVbXSk6IE9ic2VydmFibGU8eyBba2V5OiBzdHJpbmddOiBNaW1lVHlwZSB9IHwgbnVsbD4gPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTx7IFtwOiBzdHJpbmddOiBNaW1lVHlwZSB9Pigoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gcmVhZGVyLnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcbiAgICAgICAgICAgIC8vIFJlYWQgbW9yZSBieXRlcyB0byBzdXBwb3J0IGNvbXBsZXggTUlNRSB0eXBlIGRldGVjdGlvbiAoZS5nLiwgQVNGIGZvcm1hdCBhbmFseXNpcylcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKS5zbGljZSgwLCBNYXRoLm1pbigxMDI0LCBidWZmZXIuYnl0ZUxlbmd0aCkpO1xuICAgICAgICAgICAgY29uc3QgbWltZSA9IGdldE1pbWVUeXBlKGhlYWRlckJ5dGVzKTtcbiAgICAgICAgICAgIGlmIChtaW1lVHlwZXMuaW5jbHVkZXMobWltZSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh7IFtmaWxlLm5hbWVdOiBtaW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgfSk7XG59O1xuIl19
|
@@ -2,7 +2,7 @@ export const getMimeType = (header) => {
|
|
2
2
|
// convert Uint8Array to hex string
|
3
3
|
const hex = uint8ArrayToHexString(header);
|
4
4
|
// map hex string to mime type
|
5
|
-
if (hex.startsWith('
|
5
|
+
if (hex.startsWith('ffd8ff'))
|
6
6
|
return 'image/jpeg';
|
7
7
|
if (hex.startsWith('89504e47'))
|
8
8
|
return 'image/png';
|
@@ -26,24 +26,10 @@ export const getMimeType = (header) => {
|
|
26
26
|
return 'image/vnd.adobe.photoshop';
|
27
27
|
if (hex.startsWith('06054b50'))
|
28
28
|
return 'application/x-indesign';
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
if (hex.startsWith('504b0304'))
|
34
|
-
return 'application/vnd.oasis.opendocument.text';
|
35
|
-
if (hex.startsWith('504b0304'))
|
36
|
-
return 'application/vnd.oasis.opendocument.spreadsheet';
|
37
|
-
if (hex.startsWith('504b0304'))
|
38
|
-
return 'application/vnd.oasis.opendocument.presentation';
|
39
|
-
if (hex.startsWith('504b0304'))
|
40
|
-
return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
|
41
|
-
if (hex.startsWith('504b0304'))
|
42
|
-
return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
|
43
|
-
if (hex.startsWith('504b0304'))
|
44
|
-
return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
|
45
|
-
if (hex.startsWith('504b0304'))
|
46
|
-
return 'application/zip';
|
29
|
+
// Handle ZIP-based formats by examining content
|
30
|
+
if (hex.startsWith('504b0304')) {
|
31
|
+
return identifyZipBasedFormat(header);
|
32
|
+
}
|
47
33
|
if (hex.startsWith('7b2274797065223a226a736f6e227d'))
|
48
34
|
return 'application/json';
|
49
35
|
if (hex.startsWith('7573746172'))
|
@@ -75,11 +61,7 @@ export const getMimeType = (header) => {
|
|
75
61
|
if (hex.startsWith('0a010301'))
|
76
62
|
return 'audio/qcelp';
|
77
63
|
if (hex.startsWith('3026b2758e66cf11'))
|
78
|
-
return
|
79
|
-
if (hex.startsWith('3026b2758e66cf11'))
|
80
|
-
return 'video/x-ms-asf';
|
81
|
-
if (hex.startsWith('3026b2758e66cf11'))
|
82
|
-
return 'application/vnd.ms-asf';
|
64
|
+
return identifyAsfFormat(header);
|
83
65
|
if (hex.startsWith('000001ba'))
|
84
66
|
return 'video/mpeg';
|
85
67
|
if (hex.startsWith('00000020667479703367'))
|
@@ -91,11 +73,7 @@ export const getMimeType = (header) => {
|
|
91
73
|
if (hex.startsWith('4f707573'))
|
92
74
|
return 'audio/opus';
|
93
75
|
if (hex.startsWith('4f676753'))
|
94
|
-
return
|
95
|
-
if (hex.startsWith('4f676753'))
|
96
|
-
return 'audio/ogg';
|
97
|
-
if (hex.startsWith('4f676753'))
|
98
|
-
return 'application/ogg';
|
76
|
+
return identifyOggFormat(header);
|
99
77
|
if (hex.startsWith('664c6143'))
|
100
78
|
return 'audio/x-flac';
|
101
79
|
if (hex.startsWith('4d414320'))
|
@@ -140,8 +118,6 @@ export const getMimeType = (header) => {
|
|
140
118
|
return 'application/x-sqlite3';
|
141
119
|
if (hex.startsWith('4e45531a00000001'))
|
142
120
|
return 'application/x-nintendo-nes-rom';
|
143
|
-
if (hex.startsWith('504b0304'))
|
144
|
-
return 'application/x-google-chrome-extension';
|
145
121
|
if (hex.startsWith('4d534346'))
|
146
122
|
return 'application/vnd.ms-cab-compressed';
|
147
123
|
if (hex.startsWith('213c617263683e0a'))
|
@@ -185,13 +161,7 @@ export const getMimeType = (header) => {
|
|
185
161
|
if (hex.startsWith('424f4f4b4d4f4249'))
|
186
162
|
return 'application/x-mobipocket-ebook';
|
187
163
|
if (hex.startsWith('667479706174'))
|
188
|
-
return
|
189
|
-
if (hex.startsWith('667479706174'))
|
190
|
-
return 'image/heif-sequence';
|
191
|
-
if (hex.startsWith('667479706174'))
|
192
|
-
return 'image/heic';
|
193
|
-
if (hex.startsWith('667479706174'))
|
194
|
-
return 'image/heic-sequence';
|
164
|
+
return identifyHeifFormat(header);
|
195
165
|
if (hex.startsWith('4b545820'))
|
196
166
|
return 'image/ktx';
|
197
167
|
if (hex.startsWith('4449434d'))
|
@@ -212,7 +182,290 @@ export const getMimeType = (header) => {
|
|
212
182
|
return 'audio/vnd.dolby.dd-raw';
|
213
183
|
return null;
|
214
184
|
};
|
185
|
+
const identifyZipBasedFormat = (data) => {
|
186
|
+
try {
|
187
|
+
const fileEntries = extractZipFileList(data);
|
188
|
+
// Chrome extension
|
189
|
+
if (fileEntries.includes('manifest.json')) {
|
190
|
+
return 'application/x-google-chrome-extension';
|
191
|
+
}
|
192
|
+
// EPUB
|
193
|
+
if (fileEntries.includes('META-INF/container.xml') || fileEntries.includes('mimetype')) {
|
194
|
+
return 'application/epub+zip';
|
195
|
+
}
|
196
|
+
// OpenDocument formats
|
197
|
+
if (fileEntries.includes('META-INF/manifest.xml')) {
|
198
|
+
if (fileEntries.some(f => f.endsWith('.odp')))
|
199
|
+
return 'application/vnd.oasis.opendocument.presentation';
|
200
|
+
if (fileEntries.some(f => f.endsWith('.ods')))
|
201
|
+
return 'application/vnd.oasis.opendocument.spreadsheet';
|
202
|
+
if (fileEntries.some(f => f.endsWith('.odt')))
|
203
|
+
return 'application/vnd.oasis.opendocument.text';
|
204
|
+
}
|
205
|
+
// Microsoft Office formats
|
206
|
+
if (fileEntries.includes('[Content_Types].xml')) {
|
207
|
+
if (fileEntries.includes('ppt/presentation.xml'))
|
208
|
+
return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
|
209
|
+
if (fileEntries.includes('xl/workbook.xml'))
|
210
|
+
return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
|
211
|
+
if (fileEntries.includes('word/document.xml'))
|
212
|
+
return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
|
213
|
+
}
|
214
|
+
// Default to generic ZIP
|
215
|
+
return 'application/zip';
|
216
|
+
}
|
217
|
+
catch {
|
218
|
+
return 'application/zip';
|
219
|
+
}
|
220
|
+
};
|
221
|
+
const extractZipFileList = (data) => {
|
222
|
+
// Simplified ZIP parsing - looks for central directory entries
|
223
|
+
const files = [];
|
224
|
+
let offset = 0;
|
225
|
+
while (offset < data.length - 4) {
|
226
|
+
// Look for local file header signature (0x04034b50)
|
227
|
+
if (data[offset] === 0x50 && data[offset + 1] === 0x4b &&
|
228
|
+
data[offset + 2] === 0x03 && data[offset + 3] === 0x04) {
|
229
|
+
const filenameLength = data[offset + 26] | (data[offset + 27] << 8);
|
230
|
+
const extraFieldLength = data[offset + 28] | (data[offset + 29] << 8);
|
231
|
+
if (filenameLength > 0 && offset + 30 + filenameLength <= data.length) {
|
232
|
+
const filename = new TextDecoder().decode(data.slice(offset + 30, offset + 30 + filenameLength));
|
233
|
+
files.push(filename);
|
234
|
+
}
|
235
|
+
offset += 30 + filenameLength + extraFieldLength;
|
236
|
+
}
|
237
|
+
else {
|
238
|
+
offset++;
|
239
|
+
}
|
240
|
+
}
|
241
|
+
return files;
|
242
|
+
};
|
215
243
|
const uint8ArrayToHexString = (uint8Array) => {
|
216
244
|
return Array.prototype.map.call(uint8Array, (byte) => ('00' + byte.toString(16)).slice(-2)).join('');
|
217
245
|
};
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWltZS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2V1aS1maWxlLXVwbG9hZC91dGlscy9taW1lLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlKQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFrQixFQUFZLEVBQUU7SUFDeEQsbUNBQW1DO0lBQ25DLE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFDLDhCQUE4QjtJQUM5QixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUM1RCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDbkQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3BELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztRQUFFLE9BQU8sYUFBYSxDQUFDO0lBQzdELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBQzNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBQzNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUNwRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDL0MsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3BELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQztRQUFFLE9BQU8sb0JBQW9CLENBQUM7SUFDMUUsSUFBSSxHQUFH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VUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sbUJBQW1CLENBQUM7SUFDM0QsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sa0JBQWtCLENBQUM7SUFDMUQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sZUFBZSxDQUFDO0lBQ3ZELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ2xFLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBQzNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLDhCQUE4QixDQUFDO0lBQ3RFLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLGFBQWEsQ0FBQztJQUNyRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyx3QkFBd0IsQ0FBQztJQUVoRSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLHFCQUFxQixHQUFHLENBQUMsVUFBVSxFQUFVLEVBQUU7SUFDakQsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgTWltZVR5cGUgPVxuICAgIHwgJ2ltYWdlL2pwZWcnXG4gICAgfCAnaW1hZ2UvcG5nJ1xuICAgIHwgJ2ltYWdlL2dpZidcbiAgICB8ICdpbWFnZS93ZWJwJ1xuICAgIHwgJ2ltYWdlL2ZsaWYnXG4gICAgfCAnaW1hZ2UveC14Y2YnXG4gICAgfCAnaW1hZ2UveC1jYW5vbi1jcjInXG4gICAgfCAnaW1hZ2UveC1jYW5vbi1jcjMnXG4gICAgfCAnaW1hZ2UvdGlmZidcbiAgICB8ICdpbWFnZS9ibXAnXG4gICAgfCAnaW1hZ2UvaWNucydcbiAgICB8ICdpbWFnZS92bmQubXMtcGhvdG8nXG4gICAgfCAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWluZGVzaWduJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL2VwdWIremlwJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gteHBpbnN0YWxsJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXG4gICAgfCAnYXBwbGljYXRpb24vemlwJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfCAnYXBwbGljYXRpb24veC10YXInXG4gICAgfCAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCdcbiAgICB8ICdhcHBsaWNhdGlvbi9nemlwJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYnppcDInXG4gICAgfCAnYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYXBwbGUtZGlza2ltYWdlJ1xuICAgIHwgJ3ZpZGVvL21wNCdcbiAgICB8ICdhdWRpby9taWRpJ1xuICAgIHwgJ3ZpZGVvL3gtbWF0cm9za2EnXG4gICAgfCAndmlkZW8vd2VibSdcbiAgICB8ICd2aWRlby9xdWlja3RpbWUnXG4gICAgfCAndmlkZW8vdm5kLmF2aSdcbiAgICB8ICdhdWRpby92bmQud2F2ZSdcbiAgICB8ICdhdWRpby9xY2VscCdcbiAgICB8ICdhdWRpby94LW1zLWFzZidcbiAgICB8ICd2aWRlby94LW1zLWFzZidcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQubXMtYXNmJ1xuICAgIHwgJ3ZpZGVvL21wZWcnXG4gICAgfCAndmlkZW8vM2dwcCdcbiAgICB8ICdhdWRpby9tcGVnJ1xuICAgIHwgJ2F1ZGlvL21wNCdcbiAgICB8ICdhdWRpby9vcHVzJ1xuICAgIHwgJ3ZpZGVvL29nZydcbiAgICB8ICdhdWRpby9vZ2cnXG4gICAgfCAnYXBwbGljYXRpb24vb2dnJ1xuICAgIHwgJ2F1ZGlvL3gtZmxhYydcbiAgICB8ICdhdWRpby9hcGUnXG4gICAgfCAnYXVkaW8vd2F2cGFjaydcbiAgICB8ICdhdWRpby9hbXInXG4gICAgfCAnYXBwbGljYXRpb24vcGRmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtZWxmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCdcbiAgICB8ICdhcHBsaWNhdGlvbi9ydGYnXG4gICAgfCAnYXBwbGljYXRpb24vd2FzbSdcbiAgICB8ICdmb250L3dvZmYnXG4gICAgfCAnZm9udC93b2ZmMidcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCdcbiAgICB8ICdmb250L3R0ZidcbiAgICB8ICdmb250L290ZidcbiAgICB8ICdpbWFnZS94LWljb24nXG4gICAgfCAndmlkZW8veC1mbHYnXG4gICAgfCAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCdcbiAgICB8ICdhcHBsaWNhdGlvbi9lcHMnXG4gICAgfCAnYXBwbGljYXRpb24veC14eidcbiAgICB8ICdhcHBsaWNhdGlvbi94LXNxbGl0ZTMnXG4gICAgfCAnYXBwbGljYXRpb24veC1uaW50ZW5kby1uZXMtcm9tJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtZ29vZ2xlLWNocm9tZS1leHRlbnNpb24nXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm1zLWNhYi1jb21wcmVzc2VkJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtZGViJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtdW5peC1hcmNoaXZlJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtcnBtJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtY29tcHJlc3MnXG4gICAgfCAnYXBwbGljYXRpb24veC1semlwJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtY2ZiJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbWllJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYXBhY2hlLWFycm93J1xuICAgIHwgJ2FwcGxpY2F0aW9uL214ZidcbiAgICB8ICd2aWRlby9tcDJ0J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYmxlbmRlcidcbiAgICB8ICdpbWFnZS9icGcnXG4gICAgfCAnaW1hZ2UvajJjJ1xuICAgIHwgJ2ltYWdlL2pwMidcbiAgICB8ICdpbWFnZS9qcHgnXG4gICAgfCAnaW1hZ2UvanBtJ1xuICAgIHwgJ2ltYWdlL21qMidcbiAgICB8ICdhdWRpby9haWZmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3htbCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2snXG4gICAgfCAnaW1hZ2UvaGVpZidcbiAgICB8ICdpbWFnZS9oZWlmLXNlcXVlbmNlJ1xuICAgIHwgJ2ltYWdlL2hlaWMnXG4gICAgfCAnaW1hZ2UvaGVpYy1zZXF1ZW5jZSdcbiAgICB8ICdpbWFnZS9rdHgnXG4gICAgfCAnYXBwbGljYXRpb24vZGljb20nXG4gICAgfCAnYXVkaW8veC1tdXNlcGFjaydcbiAgICB8ICd0ZXh0L2NhbGVuZGFyJ1xuICAgIHwgJ3RleHQvdmNhcmQnXG4gICAgfCAnbW9kZWwvZ2x0Zi1iaW5hcnknXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcCdcbiAgICB8ICdhdWRpby94LXZvYydcbiAgICB8ICdhdWRpby92bmQuZG9sYnkuZGQtcmF3J1xuICAgIHwgJ2F1ZGlvL3gtbTRhJ1xuICAgIHwgJ2ltYWdlL2FwbmcnXG4gICAgfCAnaW1hZ2UveC1vbHltcHVzLW9yZidcbiAgICB8ICdpbWFnZS94LXNvbnktYXJ3J1xuICAgIHwgJ2ltYWdlL3gtYWRvYmUtZG5nJ1xuICAgIHwgJ2ltYWdlL3gtbmlrb24tbmVmJ1xuICAgIHwgJ2ltYWdlL3gtcGFuYXNvbmljLXJ3MidcbiAgICB8ICdpbWFnZS94LWZ1amlmaWxtLXJhZidcbiAgICB8ICd2aWRlby94LW00didcbiAgICB8ICd2aWRlby8zZ3BwMidcbiAgICB8ICdhcHBsaWNhdGlvbi94LWVzcmktc2hhcGUnXG4gICAgfCAnYXVkaW8vYWFjJ1xuICAgIHwgJ2F1ZGlvL3gtaXQnXG4gICAgfCAnYXVkaW8veC1zM20nXG4gICAgfCAnYXVkaW8veC14bSdcbiAgICB8ICd2aWRlby9NUDFTJ1xuICAgIHwgJ3ZpZGVvL01QMlAnXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLnNrZXRjaHVwLnNrcCdcbiAgICB8ICdpbWFnZS9hdmlmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbHpoLWNvbXByZXNzZWQnXG4gICAgfCAnYXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWFzYXInXG4gICAgfCAnbW9kZWwvc3RsJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscCdcbiAgICB8ICdtb2RlbC8zbWYnXG4gICAgfCAnaW1hZ2UvanhsJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3pzdGQnXG4gICAgfCAnaW1hZ2UvamxzJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1vdXRsb29rJ1xuICAgIHwgJ2ltYWdlL3ZuZC5kd2cnXG4gICAgfCAnYXBwbGljYXRpb24veC1wYXJxdWV0J1xuICAgIHwgJ2FwcGxpY2F0aW9uL2phdmEtdm0nXG4gICAgfCAnYXBwbGljYXRpb24veC1hcmonXG4gICAgfCAnYXBwbGljYXRpb24veC1jcGlvJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYWNlLWNvbXByZXNzZWQnXG4gICAgfCAnYXBwbGljYXRpb24vYXZybydcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQuaWNjcHJvZmlsZSc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc2VtaS1zdHlsZVxuXG5leHBvcnQgY29uc3QgZ2V0TWltZVR5cGUgPSAoaGVhZGVyOiBVaW50OEFycmF5KTogTWltZVR5cGUgPT4ge1xuICAgIC8vIGNvbnZlcnQgVWludDhBcnJheSB0byBoZXggc3RyaW5nXG4gICAgY29uc3QgaGV4ID0gdWludDhBcnJheVRvSGV4U3RyaW5nKGhlYWRlcik7XG5cbiAgICAvLyBtYXAgaGV4IHN0cmluZyB0byBtaW1lIHR5cGVcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2ZmZDhmZmUwMDAxMDRhNDYnKSkgcmV0dXJuICdpbWFnZS9qcGVnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzg5NTA0ZTQ3JykpIHJldHVybiAnaW1hZ2UvcG5nJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGM0OTQ2JykpIHJldHVybiAnaW1hZ2UvZmxpZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2NzY5NmQ3MDIwNzg2MzY2JykpIHJldHVybiAnaW1hZ2UveC14Y2YnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDk0OTJhMDAnKSkgcmV0dXJuICdpbWFnZS94LWNhbm9uLWNyMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ5MmEwMCcpKSByZXR1cm4gJ2ltYWdlL3gtY2Fub24tY3IzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ5NDkyYTAwJykpIHJldHVybiAnaW1hZ2UvdGlmZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjRkJykpIHJldHVybiAnaW1hZ2UvYm1wJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY5NjM2ZTczJykpIHJldHVybiAnaW1hZ2UvaWNucyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ5MWEwMDAwMDA0ODQ1NDE1MDUwJykpIHJldHVybiAnaW1hZ2Uvdm5kLm1zLXBob3RvJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzM4NDI1MDUzJykpIHJldHVybiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwNjA1NGI1MCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtaW5kZXNpZ24nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTA0YjAzMDQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9lcHViK3ppcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc1MDRiMDMwNCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gteHBpbnN0YWxsJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc1MDRiMDMwNCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTA0YjAzMDQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTA0YjAzMDQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi96aXAnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnN2IyMjc0Nzk3MDY1MjIzYTIyNmE3MzZmNmUyMjdkJykpIHJldHVybiAnYXBwbGljYXRpb24vanNvbic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc3NTczNzQ2MTcyJykpIHJldHVybiAnYXBwbGljYXRpb24veC10YXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTI2MTcyMjExYTA3MDAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzFmOGIwOCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL2d6aXAnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI1YTY4JykpIHJldHVybiAnYXBwbGljYXRpb24veC1iemlwMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczNzdhYmNhZjI3MWMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNzhkYScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtYXBwbGUtZGlza2ltYWdlJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDIwNjY3NDc5NzA2ZDcwJykpIHJldHVybiAndmlkZW8vbXA0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRkNTQ2ODY0JykpIHJldHVybiAnYXVkaW8vbWlkaSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxYTQ1ZGZhMzkzNDI4Mjg4JykpIHJldHVybiAndmlkZW8veC1tYXRyb3NrYSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxYTQ1ZGZhMycpKSByZXR1cm4gJ3ZpZGVvL3dlYm0nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAwMTQ2Njc0Nzk3MDcxNzQnKSkgcmV0dXJuICd2aWRlby9xdWlja3RpbWUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTI0OTQ2NDYnKSkgcmV0dXJuICd2aWRlby92bmQuYXZpJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUyNDk0NjQ2JykpIHJldHVybiAnYXVkaW8vdm5kLndhdmUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMGEwMTAzMDEnKSkgcmV0dXJuICdhdWRpby9xY2VscCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczMDI2YjI3NThlNjZjZjExJykpIHJldHVybiAnYXVkaW8veC1tcy1hc2YnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMzAyNmIyNzU4ZTY2Y2YxMScpKSByZXR1cm4gJ3ZpZGVvL3gtbXMtYXNmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzMwMjZiMjc1OGU2NmNmMTEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtYXNmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMWJhJykpIHJldHVybiAndmlkZW8vbXBlZyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDAwMDAyMDY2NzQ3OTcwMzM2NycpKSByZXR1cm4gJ3ZpZGVvLzNncHAnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDk0NDMzJykpIHJldHVybiAnYXVkaW8vbXBlZyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDAwMDAyMDY2NzQ3OTcwNGQzNDQxMjAnKSkgcmV0dXJuICdhdWRpby9tcDQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGY3MDc1NzMnKSkgcmV0dXJuICdhdWRpby9vcHVzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRmNjc2NzUzJykpIHJldHVybiAndmlkZW8vb2dnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRmNjc2NzUzJykpIHJldHVybiAnYXVkaW8vb2dnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRmNjc2NzUzJykpIHJldHVybiAnYXBwbGljYXRpb24vb2dnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY2NGM2MTQzJykpIHJldHVybiAnYXVkaW8veC1mbGFjJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRkNDE0MzIwJykpIHJldHVybiAnYXVkaW8vYXBlJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzc3NzY3MDZiJykpIHJldHVybiAnYXVkaW8vd2F2cGFjayc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcyMzIxNDE0ZDUyMGEnKSkgcmV0dXJuICdhdWRpby9hbXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMjU1MDQ0NDYyZDMxMmUnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9wZGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnN2Y0NTRjNDYnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWVsZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDVhJykpIHJldHVybiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQzNTc1MycpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzdiNWM3Mjc0NjYzMScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3J0Zic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDYxNzM2ZCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3dhc20nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNzc0ZjQ2NDYnKSkgcmV0dXJuICdmb250L3dvZmYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNzc0ZjQ2MzInKSkgcmV0dXJuICdmb250L3dvZmYyJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDEwMDAwMDAwOCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDEwMDAwMDAnKSkgcmV0dXJuICdmb250L3R0Zic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZjU0NTQ0ZjAwJykpIHJldHVybiAnZm9udC9vdGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAxMDAwMTAwJykpIHJldHVybiAnaW1hZ2UveC1pY29uJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGM1NjAxMDUnKSkgcmV0dXJuICd2aWRlby94LWZsdic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcyNTIxNTA1MycpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMjUyMTUwNTMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9lcHMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZmQzNzdhNTg1YTAwJykpIHJldHVybiAnYXBwbGljYXRpb24veC14eic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc1MzUxNGM2OTc0NjUyMDY2NmY3MjZkNjE3NDIwMzMwMCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtc3FsaXRlMyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZTQ1NTMxYTAwMDAwMDAxJykpIHJldHVybiAnYXBwbGljYXRpb24veC1uaW50ZW5kby1uZXMtcm9tJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24veC1nb29nbGUtY2hyb21lLWV4dGVuc2lvbic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDUzNDM0NicpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcyMTNjNjE3MjYzNjgzZTBhJykpIHJldHVybiAnYXBwbGljYXRpb24veC1kZWInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMWY4YjA4JykpIHJldHVybiAnYXBwbGljYXRpb24veC11bml4LWFyY2hpdmUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZWRhYmVlZGInKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXJwbSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxZjlkOTAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWNvbXByZXNzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRjNWE0OTUwJykpIHJldHVybiAnYXBwbGljYXRpb24veC1semlwJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2QwY2YxMWUwYTFiMTFhZTEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWNmYic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDQ5NDU1ZicpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbWllJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQxNDE1MjMxNDYnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWFwYWNoZS1hcnJvdyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwNjBlMmIzNDAyMDUwMTAxJykpIHJldHVybiAnYXBwbGljYXRpb24vbXhmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ3JykpIHJldHVybiAndmlkZW8vbXAydCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjUwZTQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWJsZW5kZXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI1MDQ3ZmInKSkgcmV0dXJuICdpbWFnZS9icGcnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZmY0ZmZmNTEnKSkgcmV0dXJuICdpbWFnZS9qMmMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAwMGM2YTUwMjAyMDBkMGEnKSkgcmV0dXJuICdpbWFnZS9qcDInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNmE1MDIwMjAwZDBhODcwYScpKSByZXR1cm4gJ2ltYWdlL2pweCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2YTUwMjAyMDBkMGE4NzBhJykpIHJldHVybiAnaW1hZ2UvanBtJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDBjNmE1MDIwMjAwZDBhJykpIHJldHVybiAnaW1hZ2UvbWoyJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGY1MjRkJykpIHJldHVybiAnYXVkaW8vYWlmZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczYzNmNzg2ZDZjMjAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94bWwnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI0ZjRmNGI0ZDRmNDI0OScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9vayc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2Njc0Nzk3MDYxNzQnKSkgcmV0dXJuICdpbWFnZS9oZWlmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY2NzQ3OTcwNjE3NCcpKSByZXR1cm4gJ2ltYWdlL2hlaWYtc2VxdWVuY2UnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNjY3NDc5NzA2MTc0JykpIHJldHVybiAnaW1hZ2UvaGVpYyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2Njc0Nzk3MDYxNzQnKSkgcmV0dXJuICdpbWFnZS9oZWljLXNlcXVlbmNlJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRiNTQ1ODIwJykpIHJldHVybiAnaW1hZ2Uva3R4JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ0NDk0MzRkJykpIHJldHVybiAnYXBwbGljYXRpb24vZGljb20nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGQ1MDQzNGInKSkgcmV0dXJuICdhdWRpby94LW11c2VwYWNrJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzU2NjU2ZTY0JykpIHJldHVybiAndGV4dC9jYWxlbmRhcic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjQ1NDc0OTRlM2E1NjQzNDE1MjQ0JykpIHJldHVybiAndGV4dC92Y2FyZCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2NzZjNTQ1OCcpKSByZXR1cm4gJ21vZGVsL2dsdGYtYmluYXJ5JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2Q0YzNiMmExJykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0NjRmNTI0ZCcpKSByZXR1cm4gJ2F1ZGlvL3gtdm9jJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY0NjQ2ZjZjJykpIHJldHVybiAnYXVkaW8vdm5kLmRvbGJ5LmRkLXJhdyc7XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IHVpbnQ4QXJyYXlUb0hleFN0cmluZyA9ICh1aW50OEFycmF5KTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHVpbnQ4QXJyYXksIChieXRlKSA9PiAoJzAwJyArIGJ5dGUudG9TdHJpbmcoMTYpKS5zbGljZSgtMikpLmpvaW4oJycpO1xufTtcbiJdfQ==
|
246
|
+
const identifyAsfFormat = (data) => {
|
247
|
+
// ASF files all start with the same GUID: 3026b2758e66cf11a6d900aa0062ce6c
|
248
|
+
// To distinguish between audio, video, and application ASF, we need to examine
|
249
|
+
// the stream properties in the ASF header
|
250
|
+
try {
|
251
|
+
// Look for stream properties object GUID starting at offset 30
|
252
|
+
// Audio stream properties: b7dc0791a9b711cf8ee600c00c205365
|
253
|
+
// Video stream properties: bc19efc05b4d11cf9b1100aa00bbcb8b
|
254
|
+
if (data.length < 100) {
|
255
|
+
// Not enough data to analyze, default to application
|
256
|
+
return 'application/vnd.ms-asf';
|
257
|
+
}
|
258
|
+
const hex = uint8ArrayToHexString(data);
|
259
|
+
// Look for video stream properties GUID (indicates video content)
|
260
|
+
if (hex.includes('bc19efc05b4d11cf9b1100aa00bbcb8b')) {
|
261
|
+
return 'video/x-ms-asf';
|
262
|
+
}
|
263
|
+
// Look for audio stream properties GUID (indicates audio content)
|
264
|
+
if (hex.includes('b7dc0791a9b711cf8ee600c00c205365')) {
|
265
|
+
return 'audio/x-ms-asf';
|
266
|
+
}
|
267
|
+
// Check for Windows Media Audio/Video codec identifiers
|
268
|
+
// WMA codec: 161 (0xa1) or 162 (0xa2) or 163 (0xa3)
|
269
|
+
// WMV codec: Common values include various Windows Media Video identifiers
|
270
|
+
// Scan through the header for codec information
|
271
|
+
for (let i = 0; i < Math.min(data.length - 4, 1000); i++) {
|
272
|
+
// Look for audio codec indicators
|
273
|
+
if (data[i] === 0xa1 || data[i] === 0xa2 || data[i] === 0xa3) {
|
274
|
+
// Found WMA codec indicator
|
275
|
+
return 'audio/x-ms-asf';
|
276
|
+
}
|
277
|
+
}
|
278
|
+
// Look for common video indicators in the first 1KB
|
279
|
+
const textContent = new TextDecoder('utf-8', { fatal: false }).decode(data.slice(0, Math.min(1000, data.length)));
|
280
|
+
// Check for video-related strings
|
281
|
+
if (textContent.toLowerCase().includes('video') ||
|
282
|
+
textContent.toLowerCase().includes('wmv') ||
|
283
|
+
textContent.toLowerCase().includes('mpeg')) {
|
284
|
+
return 'video/x-ms-asf';
|
285
|
+
}
|
286
|
+
// Check for audio-related strings
|
287
|
+
if (textContent.toLowerCase().includes('audio') ||
|
288
|
+
textContent.toLowerCase().includes('wma') ||
|
289
|
+
textContent.toLowerCase().includes('music')) {
|
290
|
+
return 'audio/x-ms-asf';
|
291
|
+
}
|
292
|
+
// Default to application/vnd.ms-asf if we can't determine the specific type
|
293
|
+
return 'application/vnd.ms-asf';
|
294
|
+
}
|
295
|
+
catch {
|
296
|
+
// If any error occurs during analysis, default to application type
|
297
|
+
return 'application/vnd.ms-asf';
|
298
|
+
}
|
299
|
+
};
|
300
|
+
const identifyHeifFormat = (data) => {
|
301
|
+
// HEIF/HEIC files all start with the same ftyp box signature: 667479706174
|
302
|
+
// To distinguish between formats, we need to examine the brand and compatible brands
|
303
|
+
// in the ftyp (file type) box
|
304
|
+
try {
|
305
|
+
if (data.length < 20) {
|
306
|
+
// Not enough data to analyze, default to HEIF
|
307
|
+
return 'image/heif';
|
308
|
+
}
|
309
|
+
const hex = uint8ArrayToHexString(data);
|
310
|
+
// The ftyp box structure:
|
311
|
+
// Bytes 0-3: Box size (4 bytes)
|
312
|
+
// Bytes 4-7: Box type "ftyp" (4 bytes) - 667479706174
|
313
|
+
// Bytes 8-11: Major brand (4 bytes)
|
314
|
+
// Bytes 12-15: Minor version (4 bytes)
|
315
|
+
// Bytes 16+: Compatible brands (4 bytes each)
|
316
|
+
// Extract major brand (4 bytes starting at offset 8)
|
317
|
+
// Convert to ASCII string for easier comparison
|
318
|
+
const majorBrand = String.fromCharCode(data[8], data[9], data[10], data[11]);
|
319
|
+
// Look for compatible brands in the first 100 bytes
|
320
|
+
const compatibleBrandsHex = hex.substring(32, Math.min(200, hex.length)); // Start after major brand + minor version
|
321
|
+
// HEIC brands: 'heic', 'heix', 'hevc', 'hevx'
|
322
|
+
if (majorBrand === 'heic' ||
|
323
|
+
compatibleBrandsHex.includes('68656963') || // 'heic'
|
324
|
+
compatibleBrandsHex.includes('68656978') || // 'heix'
|
325
|
+
compatibleBrandsHex.includes('68657663') || // 'hevc'
|
326
|
+
compatibleBrandsHex.includes('68657678')) { // 'hevx'
|
327
|
+
// Check for sequence/animation indicators
|
328
|
+
if (compatibleBrandsHex.includes('68657673') || // 'hevs' - HEIC sequence
|
329
|
+
compatibleBrandsHex.includes('6d736631') || // 'msf1' - sequence
|
330
|
+
majorBrand === 'hevs') {
|
331
|
+
return 'image/heic-sequence';
|
332
|
+
}
|
333
|
+
return 'image/heic';
|
334
|
+
}
|
335
|
+
// HEIF brands: 'mif1', 'msf1'
|
336
|
+
if (majorBrand === 'mif1' || majorBrand === 'msf1' ||
|
337
|
+
compatibleBrandsHex.includes('6d696631') || // 'mif1'
|
338
|
+
compatibleBrandsHex.includes('6d736631')) { // 'msf1'
|
339
|
+
// Check for sequence/animation indicators
|
340
|
+
if (majorBrand === 'msf1' ||
|
341
|
+
compatibleBrandsHex.includes('6d736631')) { // 'msf1' - sequence
|
342
|
+
return 'image/heif-sequence';
|
343
|
+
}
|
344
|
+
return 'image/heif';
|
345
|
+
}
|
346
|
+
// Check for specific sequence indicators in the data
|
347
|
+
if (hex.includes('6d736631') || // 'msf1' - multi-image sequence
|
348
|
+
hex.includes('68657673')) { // 'hevs' - HEIC sequence
|
349
|
+
// If we find HEIC-related brands, it's HEIC sequence
|
350
|
+
if (hex.includes('68656963') || hex.includes('68657663')) {
|
351
|
+
return 'image/heic-sequence';
|
352
|
+
}
|
353
|
+
return 'image/heif-sequence';
|
354
|
+
}
|
355
|
+
// If we find HEIC indicators but no sequence, it's single HEIC
|
356
|
+
if (hex.includes('68656963') || // 'heic'
|
357
|
+
hex.includes('68657663') || // 'hevc'
|
358
|
+
hex.includes('68656978') || // 'heix'
|
359
|
+
hex.includes('68657678')) { // 'hevx'
|
360
|
+
return 'image/heic';
|
361
|
+
}
|
362
|
+
// Default to HEIF for any other case
|
363
|
+
return 'image/heif';
|
364
|
+
}
|
365
|
+
catch {
|
366
|
+
// If any error occurs during analysis, default to HEIF
|
367
|
+
return 'image/heif';
|
368
|
+
}
|
369
|
+
};
|
370
|
+
const identifyOggFormat = (data) => {
|
371
|
+
// OGG files all start with "OggS" (4f676753) but can contain different codecs
|
372
|
+
// To distinguish between audio, video, and application OGG, we need to examine
|
373
|
+
// the codec information in the OGG page headers
|
374
|
+
try {
|
375
|
+
if (data.length < 64) {
|
376
|
+
// Not enough data to analyze, default to audio
|
377
|
+
return 'audio/ogg';
|
378
|
+
}
|
379
|
+
const hex = uint8ArrayToHexString(data);
|
380
|
+
// Look for codec identification patterns in the first few hundred bytes
|
381
|
+
// Common video codecs in OGG:
|
382
|
+
// - Theora: "theora" or "\x80theora"
|
383
|
+
// - VP8/VP9: various signatures
|
384
|
+
// - Dirac: "BBCD"
|
385
|
+
// Common audio codecs in OGG:
|
386
|
+
// - Vorbis: "vorbis" or "\x01vorbis"
|
387
|
+
// - Opus: "OpusHead"
|
388
|
+
// - FLAC: "fLaC"
|
389
|
+
// - Speex: "Speex"
|
390
|
+
// Convert some bytes to text for string matching
|
391
|
+
const textContent = new TextDecoder('utf-8', { fatal: false }).decode(data.slice(0, Math.min(512, data.length)));
|
392
|
+
const lowerContent = textContent.toLowerCase();
|
393
|
+
// Check for video codec indicators first (as they're more specific)
|
394
|
+
if (lowerContent.includes('theora') ||
|
395
|
+
hex.includes('8074686f726120') || // "\x80theora "
|
396
|
+
hex.includes('7468656f7261') || // "theora"
|
397
|
+
lowerContent.includes('dirac') ||
|
398
|
+
hex.includes('42424344') || // "BBCD" - Dirac
|
399
|
+
lowerContent.includes('vp8') ||
|
400
|
+
lowerContent.includes('vp9')) {
|
401
|
+
return 'video/ogg';
|
402
|
+
}
|
403
|
+
// Check for audio codec indicators
|
404
|
+
if (lowerContent.includes('vorbis') ||
|
405
|
+
hex.includes('01766f72626973') || // "\x01vorbis"
|
406
|
+
hex.includes('766f72626973') || // "vorbis"
|
407
|
+
lowerContent.includes('opushead') ||
|
408
|
+
hex.includes('4f7075734865616420') || // "OpusHead "
|
409
|
+
lowerContent.includes('speex') ||
|
410
|
+
hex.includes('53706565782020') || // "Speex "
|
411
|
+
lowerContent.includes('flac') ||
|
412
|
+
hex.includes('664c6143')) { // "fLaC"
|
413
|
+
return 'audio/ogg';
|
414
|
+
}
|
415
|
+
// Look for OGG stream structure patterns
|
416
|
+
// OGG pages have a specific structure, look for multiple "OggS" signatures
|
417
|
+
// which might indicate a complex multimedia container
|
418
|
+
let oggSCount = 0;
|
419
|
+
for (let i = 0; i < Math.min(data.length - 4, 1000); i += 4) {
|
420
|
+
if (data[i] === 0x4f && data[i + 1] === 0x67 &&
|
421
|
+
data[i + 2] === 0x67 && data[i + 3] === 0x53) {
|
422
|
+
oggSCount++;
|
423
|
+
}
|
424
|
+
}
|
425
|
+
// Multiple OGG pages might indicate a more complex application format
|
426
|
+
if (oggSCount > 3) {
|
427
|
+
// Check if it's likely a multimedia container vs pure audio/video
|
428
|
+
if (lowerContent.includes('application') ||
|
429
|
+
lowerContent.includes('metadata') ||
|
430
|
+
lowerContent.includes('index') ||
|
431
|
+
(!lowerContent.includes('audio') && !lowerContent.includes('video') &&
|
432
|
+
!lowerContent.includes('vorbis') && !lowerContent.includes('theora'))) {
|
433
|
+
return 'application/ogg';
|
434
|
+
}
|
435
|
+
}
|
436
|
+
// Look for file extension hints in metadata (if present)
|
437
|
+
if (lowerContent.includes('.ogv') || lowerContent.includes('video')) {
|
438
|
+
return 'video/ogg';
|
439
|
+
}
|
440
|
+
if (lowerContent.includes('.oga') || lowerContent.includes('audio') || lowerContent.includes('music')) {
|
441
|
+
return 'audio/ogg';
|
442
|
+
}
|
443
|
+
// Check the OGG page header flags
|
444
|
+
// Byte 5 in OGG page header contains flags
|
445
|
+
// If we have enough data, check the stream type
|
446
|
+
if (data.length > 26) {
|
447
|
+
const pageHeaderType = data[5];
|
448
|
+
// Fresh packet start (0x02) often indicates beginning of codec data
|
449
|
+
if ((pageHeaderType & 0x02) === 0x02) {
|
450
|
+
// Look at the packet data starting around byte 27
|
451
|
+
const packetStart = data.slice(27, Math.min(data.length, 50));
|
452
|
+
const packetHex = uint8ArrayToHexString(packetStart);
|
453
|
+
// Check for Vorbis identification header
|
454
|
+
if (packetHex.startsWith('01766f72626973')) {
|
455
|
+
return 'audio/ogg';
|
456
|
+
}
|
457
|
+
// Check for Theora identification header
|
458
|
+
if (packetHex.startsWith('8074686f726120')) {
|
459
|
+
return 'video/ogg';
|
460
|
+
}
|
461
|
+
}
|
462
|
+
}
|
463
|
+
// Default to audio/ogg as it's the most common OGG format
|
464
|
+
return 'audio/ogg';
|
465
|
+
}
|
466
|
+
catch {
|
467
|
+
// If any error occurs during analysis, default to audio
|
468
|
+
return 'audio/ogg';
|
469
|
+
}
|
470
|
+
};
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWltZS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2V1aS1maWxlLXVwbG9hZC91dGlscy9taW1lLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlKQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFrQixFQUFZLEVBQUU7SUFDeEQsbUNBQW1DO0lBQ25DLE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFDLDhCQUE4QjtJQUM5QixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDbEQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ25ELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUNwRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFBRSxPQUFPLGFBQWEsQ0FBQztJQUM3RCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQztJQUMzRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQztJQUMzRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDcEQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQy9DLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUNwRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUM7UUFBRSxPQUFPLG9CQUFvQixDQUFDO0lBQzFFLElBQUksR0FBRyxD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QUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN2RyxPQUFPLFdBQVcsQ0FBQztRQUNwQixDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLDJDQUEyQztRQUMzQyxnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixvRUFBb0U7WUFDcEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsa0RBQWtEO2dCQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRXJELHlDQUF5QztnQkFDekMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztvQkFDNUMsT0FBTyxXQUFXLENBQUM7Z0JBQ3BCLENBQUM7Z0JBRUQseUNBQXlDO2dCQUN6QyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO29CQUM1QyxPQUFPLFdBQVcsQ0FBQztnQkFDcEIsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO1FBRUQsMERBQTBEO1FBQzFELE9BQU8sV0FBVyxDQUFDO0lBRXBCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUix3REFBd0Q7UUFDeEQsT0FBTyxXQUFXLENBQUM7SUFDcEIsQ0FBQztBQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1pbWVUeXBlID1cbiAgICB8ICdpbWFnZS9qcGVnJ1xuICAgIHwgJ2ltYWdlL3BuZydcbiAgICB8ICdpbWFnZS9naWYnXG4gICAgfCAnaW1hZ2Uvd2VicCdcbiAgICB8ICdpbWFnZS9mbGlmJ1xuICAgIHwgJ2ltYWdlL3gteGNmJ1xuICAgIHwgJ2ltYWdlL3gtY2Fub24tY3IyJ1xuICAgIHwgJ2ltYWdlL3gtY2Fub24tY3IzJ1xuICAgIHwgJ2ltYWdlL3RpZmYnXG4gICAgfCAnaW1hZ2UvYm1wJ1xuICAgIHwgJ2ltYWdlL2ljbnMnXG4gICAgfCAnaW1hZ2Uvdm5kLm1zLXBob3RvJ1xuICAgIHwgJ2ltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AnXG4gICAgfCAnYXBwbGljYXRpb24veC1pbmRlc2lnbidcbiAgICB8ICdhcHBsaWNhdGlvbi9lcHViK3ppcCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LXhwaW5zdGFsbCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQnXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbidcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ppcCdcbiAgICB8ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtdGFyJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnXG4gICAgfCAnYXBwbGljYXRpb24vZ3ppcCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWJ6aXAyJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWFwcGxlLWRpc2tpbWFnZSdcbiAgICB8ICd2aWRlby9tcDQnXG4gICAgfCAnYXVkaW8vbWlkaSdcbiAgICB8ICd2aWRlby94LW1hdHJvc2thJ1xuICAgIHwgJ3ZpZGVvL3dlYm0nXG4gICAgfCAndmlkZW8vcXVpY2t0aW1lJ1xuICAgIHwgJ3ZpZGVvL3ZuZC5hdmknXG4gICAgfCAnYXVkaW8vdm5kLndhdmUnXG4gICAgfCAnYXVkaW8vcWNlbHAnXG4gICAgfCAnYXVkaW8veC1tcy1hc2YnXG4gICAgfCAndmlkZW8veC1tcy1hc2YnXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm1zLWFzZidcbiAgICB8ICd2aWRlby9tcGVnJ1xuICAgIHwgJ3ZpZGVvLzNncHAnXG4gICAgfCAnYXVkaW8vbXBlZydcbiAgICB8ICdhdWRpby9tcDQnXG4gICAgfCAnYXVkaW8vb3B1cydcbiAgICB8ICd2aWRlby9vZ2cnXG4gICAgfCAnYXVkaW8vb2dnJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL29nZydcbiAgICB8ICdhdWRpby94LWZsYWMnXG4gICAgfCAnYXVkaW8vYXBlJ1xuICAgIHwgJ2F1ZGlvL3dhdnBhY2snXG4gICAgfCAnYXVkaW8vYW1yJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3BkZidcbiAgICB8ICdhcHBsaWNhdGlvbi94LWVsZidcbiAgICB8ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnXG4gICAgfCAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnXG4gICAgfCAnYXBwbGljYXRpb24vcnRmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3dhc20nXG4gICAgfCAnZm9udC93b2ZmJ1xuICAgIHwgJ2ZvbnQvd29mZjInXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnXG4gICAgfCAnZm9udC90dGYnXG4gICAgfCAnZm9udC9vdGYnXG4gICAgfCAnaW1hZ2UveC1pY29uJ1xuICAgIHwgJ3ZpZGVvL3gtZmx2J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnXG4gICAgfCAnYXBwbGljYXRpb24vZXBzJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gteHonXG4gICAgfCAnYXBwbGljYXRpb24veC1zcWxpdGUzJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbmludGVuZG8tbmVzLXJvbSdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWdvb2dsZS1jaHJvbWUtZXh0ZW5zaW9uJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWRlYidcbiAgICB8ICdhcHBsaWNhdGlvbi94LXVuaXgtYXJjaGl2ZSdcbiAgICB8ICdhcHBsaWNhdGlvbi94LXJwbSdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWNvbXByZXNzJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbHppcCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWNmYidcbiAgICB8ICdhcHBsaWNhdGlvbi94LW1pZSdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWFwYWNoZS1hcnJvdydcbiAgICB8ICdhcHBsaWNhdGlvbi9teGYnXG4gICAgfCAndmlkZW8vbXAydCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWJsZW5kZXInXG4gICAgfCAnaW1hZ2UvYnBnJ1xuICAgIHwgJ2ltYWdlL2oyYydcbiAgICB8ICdpbWFnZS9qcDInXG4gICAgfCAnaW1hZ2UvanB4J1xuICAgIHwgJ2ltYWdlL2pwbSdcbiAgICB8ICdpbWFnZS9tajInXG4gICAgfCAnYXVkaW8vYWlmZidcbiAgICB8ICdhcHBsaWNhdGlvbi94bWwnXG4gICAgfCAnYXBwbGljYXRpb24veC1tb2JpcG9ja2V0LWVib29rJ1xuICAgIHwgJ2ltYWdlL2hlaWYnXG4gICAgfCAnaW1hZ2UvaGVpZi1zZXF1ZW5jZSdcbiAgICB8ICdpbWFnZS9oZWljJ1xuICAgIHwgJ2ltYWdlL2hlaWMtc2VxdWVuY2UnXG4gICAgfCAnaW1hZ2Uva3R4J1xuICAgIHwgJ2FwcGxpY2F0aW9uL2RpY29tJ1xuICAgIHwgJ2F1ZGlvL3gtbXVzZXBhY2snXG4gICAgfCAndGV4dC9jYWxlbmRhcidcbiAgICB8ICd0ZXh0L3ZjYXJkJ1xuICAgIHwgJ21vZGVsL2dsdGYtYmluYXJ5J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC50Y3BkdW1wLnBjYXAnXG4gICAgfCAnYXVkaW8veC12b2MnXG4gICAgfCAnYXVkaW8vdm5kLmRvbGJ5LmRkLXJhdydcbiAgICB8ICdhdWRpby94LW00YSdcbiAgICB8ICdpbWFnZS9hcG5nJ1xuICAgIHwgJ2ltYWdlL3gtb2x5bXB1cy1vcmYnXG4gICAgfCAnaW1hZ2UveC1zb255LWFydydcbiAgICB8ICdpbWFnZS94LWFkb2JlLWRuZydcbiAgICB8ICdpbWFnZS94LW5pa29uLW5lZidcbiAgICB8ICdpbWFnZS94LXBhbmFzb25pYy1ydzInXG4gICAgfCAnaW1hZ2UveC1mdWppZmlsbS1yYWYnXG4gICAgfCAndmlkZW8veC1tNHYnXG4gICAgfCAndmlkZW8vM2dwcDInXG4gICAgfCAnYXBwbGljYXRpb24veC1lc3JpLXNoYXBlJ1xuICAgIHwgJ2F1ZGlvL2FhYydcbiAgICB8ICdhdWRpby94LWl0J1xuICAgIHwgJ2F1ZGlvL3gtczNtJ1xuICAgIHwgJ2F1ZGlvL3gteG0nXG4gICAgfCAndmlkZW8vTVAxUydcbiAgICB8ICd2aWRlby9NUDJQJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5za2V0Y2h1cC5za3AnXG4gICAgfCAnaW1hZ2UvYXZpZidcbiAgICB8ICdhcHBsaWNhdGlvbi94LWx6aC1jb21wcmVzc2VkJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3BncC1lbmNyeXB0ZWQnXG4gICAgfCAnYXBwbGljYXRpb24veC1hc2FyJ1xuICAgIHwgJ21vZGVsL3N0bCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQubXMtaHRtbGhlbHAnXG4gICAgfCAnbW9kZWwvM21mJ1xuICAgIHwgJ2ltYWdlL2p4bCdcbiAgICB8ICdhcHBsaWNhdGlvbi96c3RkJ1xuICAgIHwgJ2ltYWdlL2pscydcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQubXMtb3V0bG9vaydcbiAgICB8ICdpbWFnZS92bmQuZHdnJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtcGFycXVldCdcbiAgICB8ICdhcHBsaWNhdGlvbi9qYXZhLXZtJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYXJqJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtY3BpbydcbiAgICB8ICdhcHBsaWNhdGlvbi94LWFjZS1jb21wcmVzc2VkJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL2F2cm8nXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLmljY3Byb2ZpbGUnOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNlbWktc3R5bGVcblxuZXhwb3J0IGNvbnN0IGdldE1pbWVUeXBlID0gKGhlYWRlcjogVWludDhBcnJheSk6IE1pbWVUeXBlID0+IHtcbiAgICAvLyBjb252ZXJ0IFVpbnQ4QXJyYXkgdG8gaGV4IHN0cmluZ1xuICAgIGNvbnN0IGhleCA9IHVpbnQ4QXJyYXlUb0hleFN0cmluZyhoZWFkZXIpO1xuXG4gICAgLy8gbWFwIGhleCBzdHJpbmcgdG8gbWltZSB0eXBlXG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCdmZmQ4ZmYnKSkgcmV0dXJuICdpbWFnZS9qcGVnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzg5NTA0ZTQ3JykpIHJldHVybiAnaW1hZ2UvcG5nJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGM0OTQ2JykpIHJldHVybiAnaW1hZ2UvZmxpZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2NzY5NmQ3MDIwNzg2MzY2JykpIHJldHVybiAnaW1hZ2UveC14Y2YnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDk0OTJhMDAnKSkgcmV0dXJuICdpbWFnZS94LWNhbm9uLWNyMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ5MmEwMCcpKSByZXR1cm4gJ2ltYWdlL3gtY2Fub24tY3IzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ5NDkyYTAwJykpIHJldHVybiAnaW1hZ2UvdGlmZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjRkJykpIHJldHVybiAnaW1hZ2UvYm1wJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY5NjM2ZTczJykpIHJldHVybiAnaW1hZ2UvaWNucyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ5MWEwMDAwMDA0ODQ1NDE1MDUwJykpIHJldHVybiAnaW1hZ2Uvdm5kLm1zLXBob3RvJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzM4NDI1MDUzJykpIHJldHVybiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwNjA1NGI1MCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtaW5kZXNpZ24nO1xuXHQvLyBIYW5kbGUgWklQLWJhc2VkIGZvcm1hdHMgYnkgZXhhbWluaW5nIGNvbnRlbnRcblx0aWYgKGhleC5zdGFydHNXaXRoKCc1MDRiMDMwNCcpKSB7XG5cdFx0cmV0dXJuIGlkZW50aWZ5WmlwQmFzZWRGb3JtYXQoaGVhZGVyKTtcblx0fVxuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnN2IyMjc0Nzk3MDY1MjIzYTIyNmE3MzZmNmUyMjdkJykpIHJldHVybiAnYXBwbGljYXRpb24vanNvbic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc3NTczNzQ2MTcyJykpIHJldHVybiAnYXBwbGljYXRpb24veC10YXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTI2MTcyMjExYTA3MDAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzFmOGIwOCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL2d6aXAnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI1YTY4JykpIHJldHVybiAnYXBwbGljYXRpb24veC1iemlwMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczNzdhYmNhZjI3MWMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNzhkYScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtYXBwbGUtZGlza2ltYWdlJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDIwNjY3NDc5NzA2ZDcwJykpIHJldHVybiAndmlkZW8vbXA0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRkNTQ2ODY0JykpIHJldHVybiAnYXVkaW8vbWlkaSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxYTQ1ZGZhMzkzNDI4Mjg4JykpIHJldHVybiAndmlkZW8veC1tYXRyb3NrYSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxYTQ1ZGZhMycpKSByZXR1cm4gJ3ZpZGVvL3dlYm0nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAwMTQ2Njc0Nzk3MDcxNzQnKSkgcmV0dXJuICd2aWRlby9xdWlja3RpbWUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTI0OTQ2NDYnKSkgcmV0dXJuICd2aWRlby92bmQuYXZpJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUyNDk0NjQ2JykpIHJldHVybiAnYXVkaW8vdm5kLndhdmUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMGEwMTAzMDEnKSkgcmV0dXJuICdhdWRpby9xY2VscCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczMDI2YjI3NThlNjZjZjExJykpIHJldHVybiBpZGVudGlmeUFzZkZvcm1hdChoZWFkZXIpO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAxYmEnKSkgcmV0dXJuICd2aWRlby9tcGVnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDIwNjY3NDc5NzAzMzY3JykpIHJldHVybiAndmlkZW8vM2dwcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ0MzMnKSkgcmV0dXJuICdhdWRpby9tcGVnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDIwNjY3NDc5NzA0ZDM0NDEyMCcpKSByZXR1cm4gJ2F1ZGlvL21wNCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZjcwNzU3MycpKSByZXR1cm4gJ2F1ZGlvL29wdXMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGY2NzY3NTMnKSkgcmV0dXJuIGlkZW50aWZ5T2dnRm9ybWF0KGhlYWRlcik7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2NjRjNjE0MycpKSByZXR1cm4gJ2F1ZGlvL3gtZmxhYyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDQxNDMyMCcpKSByZXR1cm4gJ2F1ZGlvL2FwZSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc3Nzc2NzA2YicpKSByZXR1cm4gJ2F1ZGlvL3dhdnBhY2snO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMjMyMTQxNGQ1MjBhJykpIHJldHVybiAnYXVkaW8vYW1yJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzI1NTA0NDQ2MmQzMTJlJykpIHJldHVybiAnYXBwbGljYXRpb24vcGRmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzdmNDU0YzQ2JykpIHJldHVybiAnYXBwbGljYXRpb24veC1lbGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGQ1YScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MzU3NTMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc3YjVjNzI3NDY2MzEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9ydGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDA2MTczNmQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi93YXNtJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzc3NGY0NjQ2JykpIHJldHVybiAnZm9udC93b2ZmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzc3NGY0NjMyJykpIHJldHVybiAnZm9udC93b2ZmMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDAxMDAwMDAwMDgnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDAxMDAwMDAwJykpIHJldHVybiAnZm9udC90dGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGY1NDU0NGYwMCcpKSByZXR1cm4gJ2ZvbnQvb3RmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMTAwMDEwMCcpKSByZXR1cm4gJ2ltYWdlL3gtaWNvbic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0NjRjNTYwMTA1JykpIHJldHVybiAndmlkZW8veC1mbHYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMjUyMTUwNTMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzI1MjE1MDUzJykpIHJldHVybiAnYXBwbGljYXRpb24vZXBzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2ZkMzc3YTU4NWEwMCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gteHonO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTM1MTRjNjk3NDY1MjA2NjZmNzI2ZDYxNzQyMDMzMDAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXNxbGl0ZTMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGU0NTUzMWEwMDAwMDAwMScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbmludGVuZG8tbmVzLXJvbSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDUzNDM0NicpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcyMTNjNjE3MjYzNjgzZTBhJykpIHJldHVybiAnYXBwbGljYXRpb24veC1kZWInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMWY4YjA4JykpIHJldHVybiAnYXBwbGljYXRpb24veC11bml4LWFyY2hpdmUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZWRhYmVlZGInKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXJwbSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxZjlkOTAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWNvbXByZXNzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRjNWE0OTUwJykpIHJldHVybiAnYXBwbGljYXRpb24veC1semlwJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2QwY2YxMWUwYTFiMTFhZTEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWNmYic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDQ5NDU1ZicpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbWllJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQxNDE1MjMxNDYnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWFwYWNoZS1hcnJvdyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwNjBlMmIzNDAyMDUwMTAxJykpIHJldHVybiAnYXBwbGljYXRpb24vbXhmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ3JykpIHJldHVybiAndmlkZW8vbXAydCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjUwZTQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWJsZW5kZXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI1MDQ3ZmInKSkgcmV0dXJuICdpbWFnZS9icGcnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZmY0ZmZmNTEnKSkgcmV0dXJuICdpbWFnZS9qMmMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAwMGM2YTUwMjAyMDBkMGEnKSkgcmV0dXJuICdpbWFnZS9qcDInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNmE1MDIwMjAwZDBhODcwYScpKSByZXR1cm4gJ2ltYWdlL2pweCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2YTUwMjAyMDBkMGE4NzBhJykpIHJldHVybiAnaW1hZ2UvanBtJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDBjNmE1MDIwMjAwZDBhJykpIHJldHVybiAnaW1hZ2UvbWoyJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGY1MjRkJykpIHJldHVybiAnYXVkaW8vYWlmZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczYzNmNzg2ZDZjMjAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94bWwnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI0ZjRmNGI0ZDRmNDI0OScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9vayc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2Njc0Nzk3MDYxNzQnKSkgcmV0dXJuIGlkZW50aWZ5SGVpZkZvcm1hdChoZWFkZXIpO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGI1NDU4MjAnKSkgcmV0dXJuICdpbWFnZS9rdHgnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDQ0OTQzNGQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9kaWNvbSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDUwNDM0YicpKSByZXR1cm4gJ2F1ZGlvL3gtbXVzZXBhY2snO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTY2NTZlNjQnKSkgcmV0dXJuICd0ZXh0L2NhbGVuZGFyJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQyNDU0NzQ5NGUzYTU2NDM0MTUyNDQnKSkgcmV0dXJuICd0ZXh0L3ZjYXJkJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY3NmM1NDU4JykpIHJldHVybiAnbW9kZWwvZ2x0Zi1iaW5hcnknO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZDRjM2IyYTEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQudGNwZHVtcC5wY2FwJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGY1MjRkJykpIHJldHVybiAnYXVkaW8veC12b2MnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNjQ2NDZmNmMnKSkgcmV0dXJuICdhdWRpby92bmQuZG9sYnkuZGQtcmF3JztcblxuICAgIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaWRlbnRpZnlaaXBCYXNlZEZvcm1hdCA9IChkYXRhOiBVaW50OEFycmF5KTogTWltZVR5cGUgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IGZpbGVFbnRyaWVzID0gZXh0cmFjdFppcEZpbGVMaXN0KGRhdGEpO1xuXG5cdFx0Ly8gQ2hyb21lIGV4dGVuc2lvblxuXHRcdGlmIChmaWxlRW50cmllcy5pbmNsdWRlcygnbWFuaWZlc3QuanNvbicpKSB7XG5cdFx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL3gtZ29vZ2xlLWNocm9tZS1leHRlbnNpb24nO1xuXHRcdH1cblxuXHRcdC8vIEVQVUJcblx0XHRpZiAoZmlsZUVudHJpZXMuaW5jbHVkZXMoJ01FVEEtSU5GL2NvbnRhaW5lci54bWwnKSB8fCBmaWxlRW50cmllcy5pbmNsdWRlcygnbWltZXR5cGUnKSkge1xuXHRcdFx0cmV0dXJuICdhcHBsaWNhdGlvbi9lcHViK3ppcCc7XG5cdFx0fVxuXG5cdFx0Ly8gT3BlbkRvY3VtZW50IGZvcm1hdHNcblx0XHRpZiAoZmlsZUVudHJpZXMuaW5jbHVkZXMoJ01FVEEtSU5GL21hbmlmZXN0LnhtbCcpKSB7XG5cdFx0XHRpZiAoZmlsZUVudHJpZXMuc29tZShmID0+IGYuZW5kc1dpdGgoJy5vZHAnKSkpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24nO1xuXHRcdFx0aWYgKGZpbGVFbnRyaWVzLnNvbWUoZiA9PiBmLmVuZHNXaXRoKCcub2RzJykpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQnO1xuXHRcdFx0aWYgKGZpbGVFbnRyaWVzLnNvbWUoZiA9PiBmLmVuZHNXaXRoKCcub2R0JykpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCc7XG5cdFx0fVxuXG5cdFx0Ly8gTWljcm9zb2Z0IE9mZmljZSBmb3JtYXRzXG5cdFx0aWYgKGZpbGVFbnRyaWVzLmluY2x1ZGVzKCdbQ29udGVudF9UeXBlc10ueG1sJykpIHtcblx0XHRcdGlmIChmaWxlRW50cmllcy5pbmNsdWRlcygncHB0L3ByZXNlbnRhdGlvbi54bWwnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJztcblx0XHRcdGlmIChmaWxlRW50cmllcy5pbmNsdWRlcygneGwvd29ya2Jvb2sueG1sJykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnO1xuXHRcdFx0aWYgKGZpbGVFbnRyaWVzLmluY2x1ZGVzKCd3b3JkL2RvY3VtZW50LnhtbCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50Jztcblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IHRvIGdlbmVyaWMgWklQXG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi96aXAnO1xuXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24vemlwJztcblx0fVxufTtcblxuY29uc3QgZXh0cmFjdFppcEZpbGVMaXN0ID0gKGRhdGE6IFVpbnQ4QXJyYXkpOiBzdHJpbmdbXSA9PiB7XG5cdC8vIFNpbXBsaWZpZWQgWklQIHBhcnNpbmcgLSBsb29rcyBmb3IgY2VudHJhbCBkaXJlY3RvcnkgZW50cmllc1xuXHRjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcblx0bGV0IG9mZnNldCA9IDA7XG5cblx0d2hpbGUgKG9mZnNldCA8IGRhdGEubGVuZ3RoIC0gNCkge1xuXHRcdC8vIExvb2sgZm9yIGxvY2FsIGZpbGUgaGVhZGVyIHNpZ25hdHVyZSAoMHgwNDAzNGI1MClcblx0XHRpZiAoZGF0YVtvZmZzZXRdID09PSAweDUwICYmIGRhdGFbb2Zmc2V0ICsgMV0gPT09IDB4NGIgJiZcblx0XHRcdGRhdGFbb2Zmc2V0ICsgMl0gPT09IDB4MDMgJiYgZGF0YVtvZmZzZXQgKyAzXSA9PT0gMHgwNCkge1xuXG5cdFx0XHRjb25zdCBmaWxlbmFtZUxlbmd0aCA9IGRhdGFbb2Zmc2V0ICsgMjZdIHwgKGRhdGFbb2Zmc2V0ICsgMjddIDw8IDgpO1xuXHRcdFx0Y29uc3QgZXh0cmFGaWVsZExlbmd0aCA9IGRhdGFbb2Zmc2V0ICsgMjhdIHwgKGRhdGFbb2Zmc2V0ICsgMjldIDw8IDgpO1xuXG5cdFx0XHRpZiAoZmlsZW5hbWVMZW5ndGggPiAwICYmIG9mZnNldCArIDMwICsgZmlsZW5hbWVMZW5ndGggPD0gZGF0YS5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgZmlsZW5hbWUgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YS5zbGljZShvZmZzZXQgKyAzMCwgb2Zmc2V0ICsgMzAgKyBmaWxlbmFtZUxlbmd0aCkpO1xuXHRcdFx0XHRmaWxlcy5wdXNoKGZpbGVuYW1lKTtcblx0XHRcdH1cblxuXHRcdFx0b2Zmc2V0ICs9IDMwICsgZmlsZW5hbWVMZW5ndGggKyBleHRyYUZpZWxkTGVuZ3RoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQrKztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmlsZXM7XG59O1xuXG5jb25zdCB1aW50OEFycmF5VG9IZXhTdHJpbmcgPSAodWludDhBcnJheSk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh1aW50OEFycmF5LCAoYnl0ZSkgPT4gKCcwMCcgKyBieXRlLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKS5qb2luKCcnKTtcbn07XG5cbmNvbnN0IGlkZW50aWZ5QXNmRm9ybWF0ID0gKGRhdGE6IFVpbnQ4QXJyYXkpOiBNaW1lVHlwZSA9PiB7XG5cdC8vIEFTRiBmaWxlcyBhbGwgc3RhcnQgd2l0aCB0aGUgc2FtZSBHVUlEOiAzMDI2YjI3NThlNjZjZjExYTZkOTAwYWEwMDYyY2U2Y1xuXHQvLyBUbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIGF1ZGlvLCB2aWRlbywgYW5kIGFwcGxpY2F0aW9uIEFTRiwgd2UgbmVlZCB0byBleGFtaW5lXG5cdC8vIHRoZSBzdHJlYW0gcHJvcGVydGllcyBpbiB0aGUgQVNGIGhlYWRlclxuXG5cdHRyeSB7XG5cdFx0Ly8gTG9vayBmb3Igc3RyZWFtIHByb3BlcnRpZXMgb2JqZWN0IEdVSUQgc3RhcnRpbmcgYXQgb2Zmc2V0IDMwXG5cdFx0Ly8gQXVkaW8gc3RyZWFtIHByb3BlcnRpZXM6IGI3ZGMwNzkxYTliNzExY2Y4ZWU2MDBjMDBjMjA1MzY1XG5cdFx0Ly8gVmlkZW8gc3RyZWFtIHByb3BlcnRpZXM6IGJjMTllZmMwNWI0ZDExY2Y5YjExMDBhYTAwYmJjYjhiXG5cblx0XHRpZiAoZGF0YS5sZW5ndGggPCAxMDApIHtcblx0XHRcdC8vIE5vdCBlbm91Z2ggZGF0YSB0byBhbmFseXplLCBkZWZhdWx0IHRvIGFwcGxpY2F0aW9uXG5cdFx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1hc2YnO1xuXHRcdH1cblxuXHRcdGNvbnN0IGhleCA9IHVpbnQ4QXJyYXlUb0hleFN0cmluZyhkYXRhKTtcblxuXHRcdC8vIExvb2sgZm9yIHZpZGVvIHN0cmVhbSBwcm9wZXJ0aWVzIEdVSUQgKGluZGljYXRlcyB2aWRlbyBjb250ZW50KVxuXHRcdGlmIChoZXguaW5jbHVkZXMoJ2JjMTllZmMwNWI0ZDExY2Y5YjExMDBhYTAwYmJjYjhiJykpIHtcblx0XHRcdHJldHVybiAndmlkZW8veC1tcy1hc2YnO1xuXHRcdH1cblxuXHRcdC8vIExvb2sgZm9yIGF1ZGlvIHN0cmVhbSBwcm9wZXJ0aWVzIEdVSUQgKGluZGljYXRlcyBhdWRpbyBjb250ZW50KVxuXHRcdGlmIChoZXguaW5jbHVkZXMoJ2I3ZGMwNzkxYTliNzExY2Y4ZWU2MDBjMDBjMjA1MzY1JykpIHtcblx0XHRcdHJldHVybiAnYXVkaW8veC1tcy1hc2YnO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBXaW5kb3dzIE1lZGlhIEF1ZGlvL1ZpZGVvIGNvZGVjIGlkZW50aWZpZXJzXG5cdFx0Ly8gV01BIGNvZGVjOiAxNjEgKDB4YTEpIG9yIDE2MiAoMHhhMikgb3IgMTYzICgweGEzKVxuXHRcdC8vIFdNViBjb2RlYzogQ29tbW9uIHZhbHVlcyBpbmNsdWRlIHZhcmlvdXMgV2luZG93cyBNZWRpYSBWaWRlbyBpZGVudGlmaWVyc1xuXG5cdFx0Ly8gU2NhbiB0aHJvdWdoIHRoZSBoZWFkZXIgZm9yIGNvZGVjIGluZm9ybWF0aW9uXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihkYXRhLmxlbmd0aCAtIDQsIDEwMDApOyBpKyspIHtcblx0XHRcdC8vIExvb2sgZm9yIGF1ZGlvIGNvZGVjIGluZGljYXRvcnNcblx0XHRcdGlmIChkYXRhW2ldID09PSAweGExIHx8IGRhdGFbaV0gPT09IDB4YTIgfHwgZGF0YVtpXSA9PT0gMHhhMykge1xuXHRcdFx0XHQvLyBGb3VuZCBXTUEgY29kZWMgaW5kaWNhdG9yXG5cdFx0XHRcdHJldHVybiAnYXVkaW8veC1tcy1hc2YnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIExvb2sgZm9yIGNvbW1vbiB2aWRlbyBpbmRpY2F0b3JzIGluIHRoZSBmaXJzdCAxS0Jcblx0XHRjb25zdCB0ZXh0Q29udGVudCA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiBmYWxzZSB9KS5kZWNvZGUoZGF0YS5zbGljZSgwLCBNYXRoLm1pbigxMDAwLCBkYXRhLmxlbmd0aCkpKTtcblxuXHRcdC8vIENoZWNrIGZvciB2aWRlby1yZWxhdGVkIHN0cmluZ3Ncblx0XHRpZiAodGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndmlkZW8nKSB8fFxuXHRcdCAgICB0ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd3bXYnKSB8fFxuXHRcdCAgICB0ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdtcGVnJykpIHtcblx0XHRcdHJldHVybiAndmlkZW8veC1tcy1hc2YnO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBhdWRpby1yZWxhdGVkIHN0cmluZ3Ncblx0XHRpZiAodGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYXVkaW8nKSB8fFxuXHRcdCAgICB0ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd3bWEnKSB8fFxuXHRcdCAgICB0ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdtdXNpYycpKSB7XG5cdFx0XHRyZXR1cm4gJ2F1ZGlvL3gtbXMtYXNmJztcblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IHRvIGFwcGxpY2F0aW9uL3ZuZC5tcy1hc2YgaWYgd2UgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyB0eXBlXG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtYXNmJztcblxuXHR9IGNhdGNoIHtcblx0XHQvLyBJZiBhbnkgZXJyb3Igb2NjdXJzIGR1cmluZyBhbmFseXNpcywgZGVmYXVsdCB0byBhcHBsaWNhdGlvbiB0eXBlXG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtYXNmJztcblx0fVxufTtcblxuY29uc3QgaWRlbnRpZnlIZWlmRm9ybWF0ID0gKGRhdGE6IFVpbnQ4QXJyYXkpOiBNaW1lVHlwZSA9PiB7XG5cdC8vIEhFSUYvSEVJQyBmaWxlcyBhbGwgc3RhcnQgd2l0aCB0aGUgc2FtZSBmdHlwIGJveCBzaWduYXR1cmU6IDY2NzQ3OTcwNjE3NFxuXHQvLyBUbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIGZvcm1hdHMsIHdlIG5lZWQgdG8gZXhhbWluZSB0aGUgYnJhbmQgYW5kIGNvbXBhdGlibGUgYnJhbmRzXG5cdC8vIGluIHRoZSBmdHlwIChmaWxlIHR5cGUpIGJveFxuXG5cdHRyeSB7XG5cdFx0aWYgKGRhdGEubGVuZ3RoIDwgMjApIHtcblx0XHRcdC8vIE5vdCBlbm91Z2ggZGF0YSB0byBhbmFseXplLCBkZWZhdWx0IHRvIEhFSUZcblx0XHRcdHJldHVybiAnaW1hZ2UvaGVpZic7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGV4ID0gdWludDhBcnJheVRvSGV4U3RyaW5nKGRhdGEpO1xuXG5cdFx0Ly8gVGhlIGZ0eXAgYm94IHN0cnVjdHVyZTpcblx0XHQvLyBCeXRlcyAwLTM6IEJveCBzaXplICg0IGJ5dGVzKVxuXHRcdC8vIEJ5dGVzIDQtNzogQm94IHR5cGUgXCJmdHlwXCIgKDQgYnl0ZXMpIC0gNjY3NDc5NzA2MTc0XG5cdFx0Ly8gQnl0ZXMgOC0xMTogTWFqb3IgYnJhbmQgKDQgYnl0ZXMpXG5cdFx0Ly8gQnl0ZXMgMTItMTU6IE1pbm9yIHZlcnNpb24gKDQgYnl0ZXMpXG5cdFx0Ly8gQnl0ZXMgMTYrOiBDb21wYXRpYmxlIGJyYW5kcyAoNCBieXRlcyBlYWNoKVxuXG5cdFx0Ly8gRXh0cmFjdCBtYWpvciBicmFuZCAoNCBieXRlcyBzdGFydGluZyBhdCBvZmZzZXQgOClcblx0XHQvLyBDb252ZXJ0IHRvIEFTQ0lJIHN0cmluZyBmb3IgZWFzaWVyIGNvbXBhcmlzb25cblx0XHRjb25zdCBtYWpvckJyYW5kID0gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0XHRcdGRhdGFbOF0sIGRhdGFbOV0sIGRhdGFbMTBdLCBkYXRhWzExXSxcblx0XHQpO1xuXG5cdFx0Ly8gTG9vayBmb3IgY29tcGF0aWJsZSBicmFuZHMgaW4gdGhlIGZpcnN0IDEwMCBieXRlc1xuXHRcdGNvbnN0IGNvbXBhdGlibGVCcmFuZHNIZXggPSBoZXguc3Vic3RyaW5nKDMyLCBNYXRoLm1pbigyMDAsIGhleC5sZW5ndGgpKTsgLy8gU3RhcnQgYWZ0ZXIgbWFqb3IgYnJhbmQgKyBtaW5vciB2ZXJzaW9uXG5cblx0XHQvLyBIRUlDIGJyYW5kczogJ2hlaWMnLCAnaGVpeCcsICdoZXZjJywgJ2hldngnXG5cdFx0aWYgKG1ham9yQnJhbmQgPT09ICdoZWljJyB8fFxuXHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1Njk2MycpIHx8IC8vICdoZWljJ1xuXHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1Njk3OCcpIHx8IC8vICdoZWl4J1xuXHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1NzY2MycpIHx8IC8vICdoZXZjJ1xuXHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1NzY3OCcpKSB7IC8vICdoZXZ4J1xuXG5cdFx0XHQvLyBDaGVjayBmb3Igc2VxdWVuY2UvYW5pbWF0aW9uIGluZGljYXRvcnNcblx0XHRcdGlmIChjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1NzY3MycpIHx8IC8vICdoZXZzJyAtIEhFSUMgc2VxdWVuY2Vcblx0XHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ZDczNjYzMScpIHx8IC8vICdtc2YxJyAtIHNlcXVlbmNlXG5cdFx0XHQgICAgbWFqb3JCcmFuZCA9PT0gJ2hldnMnKSB7XG5cdFx0XHRcdHJldHVybiAnaW1hZ2UvaGVpYy1zZXF1ZW5jZSc7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAnaW1hZ2UvaGVpYyc7XG5cdFx0fVxuXG5cdFx0Ly8gSEVJRiBicmFuZHM6ICdtaWYxJywgJ21zZjEnXG5cdFx0aWYgKG1ham9yQnJhbmQgPT09ICdtaWYxJyB8fCBtYWpvckJyYW5kID09PSAnbXNmMScgfHxcblx0XHQgICAgY29tcGF0aWJsZUJyYW5kc0hleC5pbmNsdWRlcygnNmQ2OTY2MzEnKSB8fCAvLyAnbWlmMSdcblx0XHQgICAgY29tcGF0aWJsZUJyYW5kc0hleC5pbmNsdWRlcygnNmQ3MzY2MzEnKSkgeyAvLyAnbXNmMSdcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIHNlcXVlbmNlL2FuaW1hdGlvbiBpbmRpY2F0b3JzXG5cdFx0XHRpZiAobWFqb3JCcmFuZCA9PT0gJ21zZjEnIHx8XG5cdFx0XHQgICAgY29tcGF0aWJsZUJyYW5kc0hleC5pbmNsdWRlcygnNmQ3MzY2MzEnKSkgeyAvLyAnbXNmMScgLSBzZXF1ZW5jZVxuXHRcdFx0XHRyZXR1cm4gJ2ltYWdlL2hlaWYtc2VxdWVuY2UnO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gJ2ltYWdlL2hlaWYnO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBzcGVjaWZpYyBzZXF1ZW5jZSBpbmRpY2F0b3JzIGluIHRoZSBkYXRhXG5cdFx0aWYgKGhleC5pbmNsdWRlcygnNmQ3MzY2MzEnKSB8fCAvLyAnbXNmMScgLSBtdWx0aS1pbWFnZSBzZXF1ZW5jZVxuXHRcdCAgICBoZXguaW5jbHVkZXMoJzY4NjU3NjczJykpIHsgLy8gJ2hldnMnIC0gSEVJQyBzZXF1ZW5jZVxuXG5cdFx0XHQvLyBJZiB3ZSBmaW5kIEhFSUMtcmVsYXRlZCBicmFuZHMsIGl0J3MgSEVJQyBzZXF1ZW5jZVxuXHRcdFx0aWYgKGhleC5pbmNsdWRlcygnNjg2NTY5NjMnKSB8fCBoZXguaW5jbHVkZXMoJzY4NjU3NjYzJykpIHtcblx0XHRcdFx0cmV0dXJuICdpbWFnZS9oZWljLXNlcXVlbmNlJztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICdpbWFnZS9oZWlmLXNlcXVlbmNlJztcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBmaW5kIEhFSUMgaW5kaWNhdG9ycyBidXQgbm8gc2VxdWVuY2UsIGl0J3Mgc2luZ2xlIEhFSUNcblx0XHRpZiAoaGV4LmluY2x1ZGVzKCc2ODY1Njk2MycpIHx8IC8vICdoZWljJ1xuXHRcdCAgICBoZXguaW5jbHVkZXMoJzY4NjU3NjYzJykgfHwgLy8gJ2hldmMnXG5cdFx0ICAgIGhleC5pbmNsdWRlcygnNjg2NTY5NzgnKSB8fCAvLyAnaGVpeCdcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc2ODY1NzY3OCcpKSB7IC8vICdoZXZ4J1xuXHRcdFx0cmV0dXJuICdpbWFnZS9oZWljJztcblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IHRvIEhFSUYgZm9yIGFueSBvdGhlciBjYXNlXG5cdFx0cmV0dXJuICdpbWFnZS9oZWlmJztcblxuXHR9IGNhdGNoIHtcblx0XHQvLyBJZiBhbnkgZXJyb3Igb2NjdXJzIGR1cmluZyBhbmFseXNpcywgZGVmYXVsdCB0byBIRUlGXG5cdFx0cmV0dXJuICdpbWFnZS9oZWlmJztcblx0fVxufTtcblxuY29uc3QgaWRlbnRpZnlPZ2dGb3JtYXQgPSAoZGF0YTogVWludDhBcnJheSk6IE1pbWVUeXBlID0+IHtcblx0Ly8gT0dHIGZpbGVzIGFsbCBzdGFydCB3aXRoIFwiT2dnU1wiICg0ZjY3Njc1MykgYnV0IGNhbiBjb250YWluIGRpZmZlcmVudCBjb2RlY3Ncblx0Ly8gVG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhdWRpbywgdmlkZW8sIGFuZCBhcHBsaWNhdGlvbiBPR0csIHdlIG5lZWQgdG8gZXhhbWluZVxuXHQvLyB0aGUgY29kZWMgaW5mb3JtYXRpb24gaW4gdGhlIE9HRyBwYWdlIGhlYWRlcnNcblxuXHR0cnkge1xuXHRcdGlmIChkYXRhLmxlbmd0aCA8IDY0KSB7XG5cdFx0XHQvLyBOb3QgZW5vdWdoIGRhdGEgdG8gYW5hbHl6ZSwgZGVmYXVsdCB0byBhdWRpb1xuXHRcdFx0cmV0dXJuICdhdWRpby9vZ2cnO1xuXHRcdH1cblxuXHRcdGNvbnN0IGhleCA9IHVpbnQ4QXJyYXlUb0hleFN0cmluZyhkYXRhKTtcblxuXHRcdC8vIExvb2sgZm9yIGNvZGVjIGlkZW50aWZpY2F0aW9uIHBhdHRlcm5zIGluIHRoZSBmaXJzdCBmZXcgaHVuZHJlZCBieXRlc1xuXHRcdC8vIENvbW1vbiB2aWRlbyBjb2RlY3MgaW4gT0dHOlxuXHRcdC8vIC0gVGhlb3JhOiBcInRoZW9yYVwiIG9yIFwiXFx4ODB0aGVvcmFcIlxuXHRcdC8vIC0gVlA4L1ZQOTogdmFyaW91cyBzaWduYXR1cmVzXG5cdFx0Ly8gLSBEaXJhYzogXCJCQkNEXCJcblxuXHRcdC8vIENvbW1vbiBhdWRpbyBjb2RlY3MgaW4gT0dHOlxuXHRcdC8vIC0gVm9yYmlzOiBcInZvcmJpc1wiIG9yIFwiXFx4MDF2b3JiaXNcIlxuXHRcdC8vIC0gT3B1czogXCJPcHVzSGVhZFwiXG5cdFx0Ly8gLSBGTEFDOiBcImZMYUNcIlxuXHRcdC8vIC0gU3BlZXg6IFwiU3BlZXhcIlxuXG5cdFx0Ly8gQ29udmVydCBzb21lIGJ5dGVzIHRvIHRleHQgZm9yIHN0cmluZyBtYXRjaGluZ1xuXHRcdGNvbnN0IHRleHRDb250ZW50ID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgZmF0YWw6IGZhbHNlIH0pLmRlY29kZShkYXRhLnNsaWNlKDAsIE1hdGgubWluKDUxMiwgZGF0YS5sZW5ndGgpKSk7XG5cdFx0Y29uc3QgbG93ZXJDb250ZW50ID0gdGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKTtcblxuXHRcdC8vIENoZWNrIGZvciB2aWRlbyBjb2RlYyBpbmRpY2F0b3JzIGZpcnN0IChhcyB0aGV5J3JlIG1vcmUgc3BlY2lmaWMpXG5cdFx0aWYgKGxvd2VyQ29udGVudC5pbmNsdWRlcygndGhlb3JhJykgfHxcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc4MDc0Njg2ZjcyNjEyMCcpIHx8IC8vIFwiXFx4ODB0aGVvcmEgXCJcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc3NDY4NjU2ZjcyNjEnKSB8fCAgIC8vIFwidGhlb3JhXCJcblx0XHQgICAgbG93ZXJDb250ZW50LmluY2x1ZGVzKCdkaXJhYycpIHx8XG5cdFx0ICAgIGhleC5pbmNsdWRlcygnNDI0MjQzNDQnKSB8fCAgICAgICAvLyBcIkJCQ0RcIiAtIERpcmFjXG5cdFx0ICAgIGxvd2VyQ29udGVudC5pbmNsdWRlcygndnA4JykgfHxcblx0XHQgICAgbG93ZXJDb250ZW50LmluY2x1ZGVzKCd2cDknKSkge1xuXHRcdFx0cmV0dXJuICd2aWRlby9vZ2cnO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBhdWRpbyBjb2RlYyBpbmRpY2F0b3JzXG5cdFx0aWYgKGxvd2VyQ29udGVudC5pbmNsdWRlcygndm9yYmlzJykgfHxcblx0XHQgICAgaGV4LmluY2x1ZGVzKCcwMTc2NmY3MjYyNjk3MycpIHx8IC8vIFwiXFx4MDF2b3JiaXNcIlxuXHRcdCAgICBoZXguaW5jbHVkZXMoJzc2NmY3MjYyNjk3MycpIHx8ICAgLy8gXCJ2b3JiaXNcIlxuXHRcdCAgICBsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ29wdXNoZWFkJykgfHxcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc0ZjcwNzU3MzQ4NjU2MTY0MjAnKSB8fCAvLyBcIk9wdXNIZWFkIFwiXG5cdFx0ICAgIGxvd2VyQ29udGVudC5pbmNsdWRlcygnc3BlZXgnKSB8fFxuXHRcdCAgICBoZXguaW5jbHVkZXMoJzUzNzA2NTY1NzgyMDIwJykgfHwgLy8gXCJTcGVleCAgXCJcblx0XHQgICAgbG93ZXJDb250ZW50LmluY2x1ZGVzKCdmbGFjJykgfHxcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc2NjRjNjE0MycpKSB7ICAgICAgLy8gXCJmTGFDXCJcblx0XHRcdHJldHVybiAnYXVkaW8vb2dnJztcblx0XHR9XG5cblx0XHQvLyBMb29rIGZvciBPR0cgc3RyZWFtIHN0cnVjdHVyZSBwYXR0ZXJuc1xuXHRcdC8vIE9HRyBwYWdlcyBoYXZlIGEgc3BlY2lmaWMgc3RydWN0dXJlLCBsb29rIGZvciBtdWx0aXBsZSBcIk9nZ1NcIiBzaWduYXR1cmVzXG5cdFx0Ly8gd2hpY2ggbWlnaHQgaW5kaWNhdGUgYSBjb21wbGV4IG11bHRpbWVkaWEgY29udGFpbmVyXG5cdFx0bGV0IG9nZ1NDb3VudCA9IDA7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihkYXRhLmxlbmd0aCAtIDQsIDEwMDApOyBpICs9IDQpIHtcblx0XHRcdGlmIChkYXRhW2ldID09PSAweDRmICYmIGRhdGFbaSArIDFdID09PSAweDY3ICYmXG5cdFx0XHQgICAgZGF0YVtpICsgMl0gPT09IDB4NjcgJiYgZGF0YVtpICsgM10gPT09IDB4NTMpIHtcblx0XHRcdFx0b2dnU0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgT0dHIHBhZ2VzIG1pZ2h0IGluZGljYXRlIGEgbW9yZSBjb21wbGV4IGFwcGxpY2F0aW9uIGZvcm1hdFxuXHRcdGlmIChvZ2dTQ291bnQgPiAzKSB7XG5cdFx0XHQvLyBDaGVjayBpZiBpdCdzIGxpa2VseSBhIG11bHRpbWVkaWEgY29udGFpbmVyIHZzIHB1cmUgYXVkaW8vdmlkZW9cblx0XHRcdGlmIChsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uJykgfHxcblx0XHRcdCAgICBsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ21ldGFkYXRhJykgfHxcblx0XHRcdCAgICBsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ2luZGV4JykgfHxcblx0XHRcdCAgICAoIWxvd2VyQ29udGVudC5pbmNsdWRlcygnYXVkaW8nKSAmJiAhbG93ZXJDb250ZW50LmluY2x1ZGVzKCd2aWRlbycpICYmXG5cdFx0XHQgICAgICFsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ3ZvcmJpcycpICYmICFsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ3RoZW9yYScpKSkge1xuXHRcdFx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL29nZyc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTG9vayBmb3IgZmlsZSBleHRlbnNpb24gaGludHMgaW4gbWV0YWRhdGEgKGlmIHByZXNlbnQpXG5cdFx0aWYgKGxvd2VyQ29udGVudC5pbmNsdWRlcygnLm9ndicpIHx8IGxvd2VyQ29udGVudC5pbmNsdWRlcygndmlkZW8nKSkge1xuXHRcdFx0cmV0dXJuICd2aWRlby9vZ2cnO1xuXHRcdH1cblxuXHRcdGlmIChsb3dlckNvbnRlbnQuaW5jbHVkZXMoJy5vZ2EnKSB8fCBsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ2F1ZGlvJykgfHwgbG93ZXJDb250ZW50LmluY2x1ZGVzKCdtdXNpYycpKSB7XG5cdFx0XHRyZXR1cm4gJ2F1ZGlvL29nZyc7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgdGhlIE9HRyBwYWdlIGhlYWRlciBmbGFnc1xuXHRcdC8vIEJ5dGUgNSBpbiBPR0cgcGFnZSBoZWFkZXIgY29udGFpbnMgZmxhZ3Ncblx0XHQvLyBJZiB3ZSBoYXZlIGVub3VnaCBkYXRhLCBjaGVjayB0aGUgc3RyZWFtIHR5cGVcblx0XHRpZiAoZGF0YS5sZW5ndGggPiAyNikge1xuXHRcdFx0Y29uc3QgcGFnZUhlYWRlclR5cGUgPSBkYXRhWzVdO1xuXHRcdFx0Ly8gRnJlc2ggcGFja2V0IHN0YXJ0ICgweDAyKSBvZnRlbiBpbmRpY2F0ZXMgYmVnaW5uaW5nIG9mIGNvZGVjIGRhdGFcblx0XHRcdGlmICgocGFnZUhlYWRlclR5cGUgJiAweDAyKSA9PT0gMHgwMikge1xuXHRcdFx0XHQvLyBMb29rIGF0IHRoZSBwYWNrZXQgZGF0YSBzdGFydGluZyBhcm91bmQgYnl0ZSAyN1xuXHRcdFx0XHRjb25zdCBwYWNrZXRTdGFydCA9IGRhdGEuc2xpY2UoMjcsIE1hdGgubWluKGRhdGEubGVuZ3RoLCA1MCkpO1xuXHRcdFx0XHRjb25zdCBwYWNrZXRIZXggPSB1aW50OEFycmF5VG9IZXhTdHJpbmcocGFja2V0U3RhcnQpO1xuXG5cdFx0XHRcdC8vIENoZWNrIGZvciBWb3JiaXMgaWRlbnRpZmljYXRpb24gaGVhZGVyXG5cdFx0XHRcdGlmIChwYWNrZXRIZXguc3RhcnRzV2l0aCgnMDE3NjZmNzI2MjY5NzMnKSkge1xuXHRcdFx0XHRcdHJldHVybiAnYXVkaW8vb2dnJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGZvciBUaGVvcmEgaWRlbnRpZmljYXRpb24gaGVhZGVyXG5cdFx0XHRcdGlmIChwYWNrZXRIZXguc3RhcnRzV2l0aCgnODA3NDY4NmY3MjYxMjAnKSkge1xuXHRcdFx0XHRcdHJldHVybiAndmlkZW8vb2dnJztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIERlZmF1bHQgdG8gYXVkaW8vb2dnIGFzIGl0J3MgdGhlIG1vc3QgY29tbW9uIE9HRyBmb3JtYXRcblx0XHRyZXR1cm4gJ2F1ZGlvL29nZyc7XG5cblx0fSBjYXRjaCB7XG5cdFx0Ly8gSWYgYW55IGVycm9yIG9jY3VycyBkdXJpbmcgYW5hbHlzaXMsIGRlZmF1bHQgdG8gYXVkaW9cblx0XHRyZXR1cm4gJ2F1ZGlvL29nZyc7XG5cdH1cbn07XG4iXX0=
|