/** Copyright (C) 2020-2026 Kedron Holdings LLC, All Rights Reserved. This file is part of Reactor.
 *  For info and license terms please see https://reactor.toggledbits.com/
 *  ------------------------------------------------------------------------------
*/
function a13_0x55fd(_0x48ec04, _0x3bbe9d) {
    _0x48ec04 = _0x48ec04 - 0x190;
    const _0x4f7abb = a13_0x4f7a();
    let _0x55fdc9 = _0x4f7abb[_0x48ec04];
    return _0x55fdc9;
}
const a13_0x51eea1 = a13_0x55fd;
(function (_0x5a46db, _0x4a799f) {
    const _0x229a78 = a13_0x55fd, _0x29de46 = _0x5a46db();
    while (!![]) {
        try {
            const _0x905bc = -parseInt(_0x229a78(0x1af)) / 0x1 + -parseInt(_0x229a78(0x19e)) / 0x2 * (-parseInt(_0x229a78(0x1a3)) / 0x3) + parseInt(_0x229a78(0x1a7)) / 0x4 * (parseInt(_0x229a78(0x194)) / 0x5) + -parseInt(_0x229a78(0x1b2)) / 0x6 * (-parseInt(_0x229a78(0x19a)) / 0x7) + parseInt(_0x229a78(0x1a5)) / 0x8 + parseInt(_0x229a78(0x1a6)) / 0x9 + -parseInt(_0x229a78(0x1a0)) / 0xa * (parseInt(_0x229a78(0x1a1)) / 0xb);
            if (_0x905bc === _0x4a799f)
                break;
            else
                _0x29de46['push'](_0x29de46['shift']());
        } catch (_0x257f01) {
            _0x29de46['push'](_0x29de46['shift']());
        }
    }
}(a13_0x4f7a, 0xe4bba));
const version = 0x6235, Logger = require(a13_0x51eea1(0x193)), Observable = require(a13_0x51eea1(0x1a9)), Observer = require(a13_0x51eea1(0x196)), util = require(a13_0x51eea1(0x1b0));
var expressions = {};
const validName = /^\p{Alphabetic}[\p{Alphabetic}0-9_$]*$/iu;
function a13_0x4f7a() {
    const _0x1a03c1 = [
        'getID',
        '5650HbOkDR',
        '28853Gqlsza',
        'Needs\x20subclass\x20implementation',
        '1168548xErmqk',
        'debug',
        '10174968VlcHCz',
        '2922516XZKCRy',
        '24412zQSWki',
        'Expression\x20name\x20\x22',
        './Observable.js',
        'mixin',
        '%1:\x20Expression._destroy',
        'test',
        'isValidName',
        'toString',
        '1033863oKJjun',
        './util',
        '\x22\x20already\x20exists.',
        '29112MTHFrH',
        '_destroy',
        'getValue',
        'add',
        'exports',
        '__deleted',
        './Logger.js',
        '795nmSNwk',
        'unsubscribe',
        './Observer.js',
        'Expression\x20named\x20\x22',
        'get',
        'has',
        '154dbnTSp',
        'constructor',
        'name',
        'getLogger',
        '4uSOXzn'
    ];
    a13_0x4f7a = function () {
        return _0x1a03c1;
    };
    return a13_0x4f7a();
}
class Expression {
    constructor(_0xf29f9d) {
        const _0xdfdebb = a13_0x51eea1;
        this['id'] = _0xf29f9d, this['log'] = Logger[_0xdfdebb(0x19d)](this);
    }
    static ['isValidName'](_0x53e2fa) {
        const _0x3d53e0 = a13_0x51eea1;
        return validName[_0x3d53e0(0x1ac)](_0x53e2fa);
    }
    static [a13_0x51eea1(0x199)](_0x12389d) {
        return !!expressions[_0x12389d];
    }
    static [a13_0x51eea1(0x190)](_0x1aaeb2) {
        const _0x253868 = a13_0x51eea1;
        let _0x5657e4 = _0x1aaeb2['getID']();
        if (!Expression[_0x253868(0x1ad)](_0x5657e4))
            throw new Error(_0x253868(0x1a8) + _0x5657e4 + '\x22\x20is\x20invalid');
        if (expressions[_0x5657e4])
            throw new Error(_0x253868(0x197) + _0x5657e4 + _0x253868(0x1b1));
        return expressions[_0x5657e4] = _0x1aaeb2, _0x1aaeb2;
    }
    static [a13_0x51eea1(0x198)](_0x5794ee) {
        return expressions[_0x5794ee];
    }
    [a13_0x51eea1(0x1ae)]() {
        const _0x32eff2 = a13_0x51eea1;
        return this[_0x32eff2(0x19b)][_0x32eff2(0x19c)] + '#' + String(this['id']);
    }
    [a13_0x51eea1(0x1b3)]() {
        const _0x27bc30 = a13_0x51eea1;
        this['log'][_0x27bc30(0x1a4)](0x5, _0x27bc30(0x1ab), this), this['id'] && (this[_0x27bc30(0x195)](), this['disconnect'](), delete expressions[this['id']], this[_0x27bc30(0x192)] = this['id'], this['id'] = null);
    }
    [a13_0x51eea1(0x19f)]() {
        return this['id'];
    }
    [a13_0x51eea1(0x1b4)]() {
        const _0x162305 = a13_0x51eea1;
        throw new ReferenceError(_0x162305(0x1a2));
    }
    ['setValue']() {
        const _0xb1389d = a13_0x51eea1;
        throw new ReferenceError(_0xb1389d(0x1a2));
    }
}
util[a13_0x51eea1(0x1aa)](Expression, Observer), util[a13_0x51eea1(0x1aa)](Expression, Observable), module[a13_0x51eea1(0x191)] = Expression;