resig.js
Version:
Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.
226 lines • 19.1 kB
JavaScript
;
/**
* Signal-Σ Extensions
* Advanced primitives for extensibility following mathematical patterns
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.globalExtensionRegistry = exports.ExtensionRegistry = exports.validateExtension = exports.composeExtensions = exports.ExampleExtensions = exports.createExtension = exports.ExtensionPatterns = exports.createArrayCommand = exports.createTextCommand = exports.createCommand = exports.createUndoRedoManager = exports.UndoRedoManager = exports.mapThemeColors = exports.composeThemes = exports.createDarkTheme = exports.createLightTheme = exports.createThemeManager = exports.ThemeManager = exports.createSyncedRegister = exports.createSyncedSet = exports.createSyncedCounter = exports.createRealtimeSync = exports.RealtimeSync = exports.composeDragBehaviors = exports.createDragContainer = exports.DragContainer = void 0;
// Drag-n-Drop System (Operad patterns)
var drag_drop_1 = require("./drag-drop");
Object.defineProperty(exports, "DragContainer", { enumerable: true, get: function () { return drag_drop_1.DragContainer; } });
Object.defineProperty(exports, "createDragContainer", { enumerable: true, get: function () { return drag_drop_1.createDragContainer; } });
Object.defineProperty(exports, "composeDragBehaviors", { enumerable: true, get: function () { return drag_drop_1.composeDragBehaviors; } });
// Real-time Sync System (Commutative monoid operations)
var realtime_sync_1 = require("./realtime-sync");
Object.defineProperty(exports, "RealtimeSync", { enumerable: true, get: function () { return realtime_sync_1.RealtimeSync; } });
Object.defineProperty(exports, "createRealtimeSync", { enumerable: true, get: function () { return realtime_sync_1.createRealtimeSync; } });
Object.defineProperty(exports, "createSyncedCounter", { enumerable: true, get: function () { return realtime_sync_1.createSyncedCounter; } });
Object.defineProperty(exports, "createSyncedSet", { enumerable: true, get: function () { return realtime_sync_1.createSyncedSet; } });
Object.defineProperty(exports, "createSyncedRegister", { enumerable: true, get: function () { return realtime_sync_1.createSyncedRegister; } });
// Theme System (Functor map patterns)
var theme_system_1 = require("./theme-system");
Object.defineProperty(exports, "ThemeManager", { enumerable: true, get: function () { return theme_system_1.ThemeManager; } });
Object.defineProperty(exports, "createThemeManager", { enumerable: true, get: function () { return theme_system_1.createThemeManager; } });
Object.defineProperty(exports, "createLightTheme", { enumerable: true, get: function () { return theme_system_1.createLightTheme; } });
Object.defineProperty(exports, "createDarkTheme", { enumerable: true, get: function () { return theme_system_1.createDarkTheme; } });
Object.defineProperty(exports, "composeThemes", { enumerable: true, get: function () { return theme_system_1.composeThemes; } });
Object.defineProperty(exports, "mapThemeColors", { enumerable: true, get: function () { return theme_system_1.mapThemeColors; } });
// Undo/Redo System (Coalgebraic time-travel)
var undo_redo_1 = require("./undo-redo");
Object.defineProperty(exports, "UndoRedoManager", { enumerable: true, get: function () { return undo_redo_1.UndoRedoManager; } });
Object.defineProperty(exports, "createUndoRedoManager", { enumerable: true, get: function () { return undo_redo_1.createUndoRedoManager; } });
Object.defineProperty(exports, "createCommand", { enumerable: true, get: function () { return undo_redo_1.createCommand; } });
Object.defineProperty(exports, "createTextCommand", { enumerable: true, get: function () { return undo_redo_1.createTextCommand; } });
Object.defineProperty(exports, "createArrayCommand", { enumerable: true, get: function () { return undo_redo_1.createArrayCommand; } });
// Extension utilities and patterns
exports.ExtensionPatterns = {
// Operad composition for UI components
Operad: {
compose: (f, g) => (a) => g(f(a)),
plug: (outer, inner) => (t) => outer(inner(t)),
identity: (x) => x,
},
// Commutative monoid for data synchronization
CommutativeMonoid: {
empty: () => [],
combine: (a, b) => [...a, ...b],
isCommutative: true,
isAssociative: true,
hasIdentity: true,
},
// Functor for theme transformations
Functor: {
map: (f) => (fa) => fa.map(f),
identity: (fa) => fa,
composition: (f, g) => (a) => g(f(a)),
},
// Coalgebra for time-travel and state evolution
Coalgebra: {
unfold: (seed, next) => {
const result = [];
let current = seed;
while (true) {
const [value, nextState] = next(current);
result.push(value);
current = nextState;
// Prevent infinite loops in example
if (result.length > 1000)
break;
}
return result;
},
observe: (state, observer) => observer(state),
transition: (state, transition) => transition(state),
},
};
// Extension factory for creating custom extensions
const createExtension = (name, pattern, implementation) => {
return {
name,
pattern,
create: implementation.create,
compose: implementation.compose,
map: implementation.map,
unfold: implementation.unfold,
// Mathematical properties verification
verify: () => {
switch (pattern) {
case 'operad':
return {
hasIdentity: true,
hasComposition: !!implementation.compose,
isAssociative: true, // Assumed for operads
};
case 'monoid':
return {
hasIdentity: true,
hasComposition: !!implementation.compose,
isAssociative: true,
isCommutative: true, // For commutative monoids
};
case 'functor':
return {
hasMap: !!implementation.map,
preservesIdentity: true,
preservesComposition: true,
};
case 'coalgebra':
return {
hasUnfold: !!implementation.unfold,
isObservable: true,
hasTransitions: true,
};
default:
return {};
}
},
};
};
exports.createExtension = createExtension;
// Example extensions using the factory
exports.ExampleExtensions = {
// Drag-drop as operad
DragDropOperad: (0, exports.createExtension)('drag-drop', 'operad', {
create: (config) => ({
container: config.container,
items: config.items,
options: config.options,
}),
compose: (a, b) => ({ behaviors: [a, b] }),
}),
// Sync as commutative monoid
SyncMonoid: (0, exports.createExtension)('realtime-sync', 'monoid', {
create: (config) => ({ config }),
compose: (a, _b) => {
// Merge sync managers (theoretical - would need careful implementation)
return a; // Simplified
},
}),
// Theme as functor
ThemeFunctor: (0, exports.createExtension)('theme-system', 'functor', {
create: (config) => ({ config }),
map: (transform, theme) => ({ theme, transform }),
}),
// Undo/Redo as coalgebra
UndoRedoCoalgebra: (0, exports.createExtension)('undo-redo', 'coalgebra', {
create: (config) => ({
initialState: config.initialState,
options: config.options,
}),
unfold: (manager, _next) => {
// Unfold history states
const history = manager.getHistory().value();
return history.map((memento) => memento.state);
},
}),
};
// Extension composition utilities
const composeExtensions = (...extensions) => {
// Compose multiple extensions following their mathematical patterns
return extensions.reduce((acc, ext) => {
// Implementation would depend on the specific extension types
return { ...acc, ...ext };
});
};
exports.composeExtensions = composeExtensions;
// Extension validation
const validateExtension = (extension) => {
try {
const verification = extension.verify?.();
// Check mathematical properties based on pattern
switch (extension.pattern) {
case 'operad':
return verification?.hasIdentity && verification?.hasComposition;
case 'monoid':
return (verification?.hasIdentity &&
verification?.hasComposition &&
verification?.isAssociative);
case 'functor':
return verification?.hasMap && verification?.preservesIdentity;
case 'coalgebra':
return verification?.hasUnfold && verification?.isObservable;
default:
return true;
}
}
catch (error) {
console.error('Extension validation failed:', error);
return false;
}
};
exports.validateExtension = validateExtension;
// Extension registry for dynamic loading
class ExtensionRegistry {
constructor() {
this.extensions = new Map();
}
register(name, extension) {
if ((0, exports.validateExtension)(extension)) {
this.extensions.set(name, extension);
}
else {
throw new Error(`Extension ${name} failed validation`);
}
}
get(name) {
return this.extensions.get(name);
}
list() {
return Array.from(this.extensions.keys());
}
compose(names) {
const extensions = names
.map((name) => this.extensions.get(name))
.filter(Boolean);
return (0, exports.composeExtensions)(...extensions);
}
}
exports.ExtensionRegistry = ExtensionRegistry;
// Global extension registry
exports.globalExtensionRegistry = new ExtensionRegistry();
// Auto-register built-in extensions
exports.globalExtensionRegistry.register('drag-drop', exports.ExampleExtensions.DragDropOperad);
exports.globalExtensionRegistry.register('realtime-sync', exports.ExampleExtensions.SyncMonoid);
exports.globalExtensionRegistry.register('theme-system', exports.ExampleExtensions.ThemeFunctor);
exports.globalExtensionRegistry.register('undo-redo', exports.ExampleExtensions.UndoRedoCoalgebra);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXh0ZW5zaW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCx1Q0FBdUM7QUFDdkMseUNBT3FCO0FBTm5CLDBHQUFBLGFBQWEsT0FBQTtBQUNiLGdIQUFBLG1CQUFtQixPQUFBO0FBQ25CLGlIQUFBLG9CQUFvQixPQUFBO0FBTXRCLHdEQUF3RDtBQUN4RCxpREFVeUI7QUFUdkIsNkdBQUEsWUFBWSxPQUFBO0FBQ1osbUhBQUEsa0JBQWtCLE9BQUE7QUFDbEIsb0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsZ0hBQUEsZUFBZSxPQUFBO0FBQ2YscUhBQUEsb0JBQW9CLE9BQUE7QUFPdEIsc0NBQXNDO0FBQ3RDLCtDQVl3QjtBQVh0Qiw0R0FBQSxZQUFZLE9BQUE7QUFDWixrSEFBQSxrQkFBa0IsT0FBQTtBQUNsQixnSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQiwrR0FBQSxlQUFlLE9BQUE7QUFDZiw2R0FBQSxhQUFhLE9BQUE7QUFDYiw4R0FBQSxjQUFjLE9BQUE7QUFRaEIsNkNBQTZDO0FBQzdDLHlDQVVxQjtBQVRuQiw0R0FBQSxlQUFlLE9BQUE7QUFDZixrSEFBQSxxQkFBcUIsT0FBQTtBQUNyQiwwR0FBQSxhQUFhLE9BQUE7QUFDYiw4R0FBQSxpQkFBaUIsT0FBQTtBQUNqQiwrR0FBQSxrQkFBa0IsT0FBQTtBQU9wQixtQ0FBbUM7QUFDdEIsUUFBQSxpQkFBaUIsR0FBRztJQUMvQix1Q0FBdUM7SUFDdkMsTUFBTSxFQUFFO1FBQ04sT0FBTyxFQUNMLENBQVUsQ0FBYyxFQUFFLENBQWMsRUFBRSxFQUFFLENBQzVDLENBQUMsQ0FBSSxFQUFFLEVBQUUsQ0FDUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxFQUNGLENBQVUsS0FBa0IsRUFBRSxLQUFrQixFQUFFLEVBQUUsQ0FDcEQsQ0FBQyxDQUFJLEVBQUUsRUFBRSxDQUNQLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsUUFBUSxFQUFFLENBQUksQ0FBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsOENBQThDO0lBQzlDLGlCQUFpQixFQUFFO1FBQ2pCLEtBQUssRUFBRSxHQUFXLEVBQUUsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sRUFBRSxDQUFJLENBQU0sRUFBRSxDQUFNLEVBQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakQsYUFBYSxFQUFFLElBQUk7UUFDbkIsYUFBYSxFQUFFLElBQUk7UUFDbkIsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFFRCxvQ0FBb0M7SUFDcEMsT0FBTyxFQUFFO1FBQ1AsR0FBRyxFQUNELENBQU8sQ0FBYyxFQUFFLEVBQUUsQ0FDekIsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNWLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2IsUUFBUSxFQUFFLENBQUksRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzVCLFdBQVcsRUFDVCxDQUFVLENBQWMsRUFBRSxDQUFjLEVBQUUsRUFBRSxDQUM1QyxDQUFDLENBQUksRUFBRSxFQUFFLENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNaO0lBRUQsZ0RBQWdEO0lBQ2hELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxDQUFPLElBQU8sRUFBRSxJQUFzQixFQUFPLEVBQUU7WUFDckQsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztZQUVuQixPQUFPLElBQUksRUFBRSxDQUFDO2dCQUNaLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixPQUFPLEdBQUcsU0FBUyxDQUFDO2dCQUVwQixvQ0FBb0M7Z0JBQ3BDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJO29CQUFFLE1BQU07WUFDbEMsQ0FBQztZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBTyxLQUFRLEVBQUUsUUFBcUIsRUFBSyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUV0RSxVQUFVLEVBQUUsQ0FBSSxLQUFRLEVBQUUsVUFBdUIsRUFBSyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztLQUMzRTtDQUNGLENBQUM7QUFFRixtREFBbUQ7QUFDNUMsTUFBTSxlQUFlLEdBQUcsQ0FDN0IsSUFBWSxFQUNaLE9BQXNELEVBQ3RELGNBS0MsRUFDRCxFQUFFO0lBQ0YsT0FBTztRQUNMLElBQUk7UUFDSixPQUFPO1FBQ1AsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1FBQzdCLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTztRQUMvQixHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUc7UUFDdkIsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1FBRTdCLHVDQUF1QztRQUN2QyxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ1gsUUFBUSxPQUFPLEVBQUUsQ0FBQztnQkFDaEIsS0FBSyxRQUFRO29CQUNYLE9BQU87d0JBQ0wsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLGNBQWMsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU87d0JBQ3hDLGFBQWEsRUFBRSxJQUFJLEVBQUUsc0JBQXNCO3FCQUM1QyxDQUFDO2dCQUVKLEtBQUssUUFBUTtvQkFDWCxPQUFPO3dCQUNMLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixjQUFjLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPO3dCQUN4QyxhQUFhLEVBQUUsSUFBSTt3QkFDbkIsYUFBYSxFQUFFLElBQUksRUFBRSwwQkFBMEI7cUJBQ2hELENBQUM7Z0JBRUosS0FBSyxTQUFTO29CQUNaLE9BQU87d0JBQ0wsTUFBTSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRzt3QkFDNUIsaUJBQWlCLEVBQUUsSUFBSTt3QkFDdkIsb0JBQW9CLEVBQUUsSUFBSTtxQkFDM0IsQ0FBQztnQkFFSixLQUFLLFdBQVc7b0JBQ2QsT0FBTzt3QkFDTCxTQUFTLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNO3dCQUNsQyxZQUFZLEVBQUUsSUFBSTt3QkFDbEIsY0FBYyxFQUFFLElBQUk7cUJBQ3JCLENBQUM7Z0JBRUo7b0JBQ0UsT0FBTyxFQUFFLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUF2RFcsUUFBQSxlQUFlLG1CQXVEMUI7QUFFRix1Q0FBdUM7QUFDMUIsUUFBQSxpQkFBaUIsR0FBRztJQUMvQixzQkFBc0I7SUFDdEIsY0FBYyxFQUFFLElBQUEsdUJBQWUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFO1FBQ3JELE1BQU0sRUFBRSxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztTQUN4QixDQUFDO1FBQ0YsT0FBTyxFQUFFLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3JELENBQUM7SUFFRiw2QkFBNkI7SUFDN0IsVUFBVSxFQUFFLElBQUEsdUJBQWUsRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFFO1FBQ3JELE1BQU0sRUFBRSxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JDLE9BQU8sRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFPLEVBQUUsRUFBRTtZQUMzQix3RUFBd0U7WUFDeEUsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ3pCLENBQUM7S0FDRixDQUFDO0lBRUYsbUJBQW1CO0lBQ25CLFlBQVksRUFBRSxJQUFBLHVCQUFlLEVBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRTtRQUN2RCxNQUFNLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNyQyxHQUFHLEVBQUUsQ0FBQyxTQUFjLEVBQUUsS0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO0tBQzVELENBQUM7SUFFRix5QkFBeUI7SUFDekIsaUJBQWlCLEVBQUUsSUFBQSx1QkFBZSxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUU7UUFDM0QsTUFBTSxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQztRQUNGLE1BQU0sRUFBRSxDQUFDLE9BQVksRUFBRSxLQUFVLEVBQUUsRUFBRTtZQUNuQyx3QkFBd0I7WUFDeEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELENBQUM7S0FDRixDQUFDO0NBQ0gsQ0FBQztBQUVGLGtDQUFrQztBQUMzQixNQUFNLGlCQUFpQixHQUFHLENBQUksR0FBRyxVQUFlLEVBQUssRUFBRTtJQUM1RCxvRUFBb0U7SUFDcEUsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3BDLDhEQUE4RDtRQUM5RCxPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQU8sQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQU5XLFFBQUEsaUJBQWlCLHFCQU01QjtBQUVGLHVCQUF1QjtBQUNoQixNQUFNLGlCQUFpQixHQUFHLENBQUMsU0FBYyxFQUFXLEVBQUU7SUFDM0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFFMUMsaURBQWlEO1FBQ2pELFFBQVEsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLEtBQUssUUFBUTtnQkFDWCxPQUFPLFlBQVksRUFBRSxXQUFXLElBQUksWUFBWSxFQUFFLGNBQWMsQ0FBQztZQUVuRSxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxDQUNMLFlBQVksRUFBRSxXQUFXO29CQUN6QixZQUFZLEVBQUUsY0FBYztvQkFDNUIsWUFBWSxFQUFFLGFBQWEsQ0FDNUIsQ0FBQztZQUVKLEtBQUssU0FBUztnQkFDWixPQUFPLFlBQVksRUFBRSxNQUFNLElBQUksWUFBWSxFQUFFLGlCQUFpQixDQUFDO1lBRWpFLEtBQUssV0FBVztnQkFDZCxPQUFPLFlBQVksRUFBRSxTQUFTLElBQUksWUFBWSxFQUFFLFlBQVksQ0FBQztZQUUvRDtnQkFDRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMsQ0FBQztBQTdCVyxRQUFBLGlCQUFpQixxQkE2QjVCO0FBRUYseUNBQXlDO0FBQ3pDLE1BQWEsaUJBQWlCO0lBQTlCO1FBQ1UsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUF3QjlDLENBQUM7SUF0QkMsUUFBUSxDQUFJLElBQVksRUFBRSxTQUFZO1FBQ3BDLElBQUksSUFBQSx5QkFBaUIsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLG9CQUFvQixDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRCxHQUFHLENBQUksSUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWU7UUFDckIsTUFBTSxVQUFVLEdBQUcsS0FBSzthQUNyQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQixPQUFPLElBQUEseUJBQWlCLEVBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUF6QkQsOENBeUJDO0FBRUQsNEJBQTRCO0FBQ2YsUUFBQSx1QkFBdUIsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7QUFFL0Qsb0NBQW9DO0FBQ3BDLCtCQUF1QixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUseUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDaEYsK0JBQXVCLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSx5QkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRiwrQkFBdUIsQ0FBQyxRQUFRLENBQzlCLGNBQWMsRUFDZCx5QkFBaUIsQ0FBQyxZQUFZLENBQy9CLENBQUM7QUFDRiwrQkFBdUIsQ0FBQyxRQUFRLENBQzlCLFdBQVcsRUFDWCx5QkFBaUIsQ0FBQyxpQkFBaUIsQ0FDcEMsQ0FBQyJ9