{"version":3,"sources":["compiler.ts"],"sourcesContent":["// deno-lint-ignore-file no-cond-assign\n/**\n ╔══════════════════════════════════════════════════════════════════════════════════════╗\n ║  Datex Compiler                                                                      ║\n ╠══════════════════════════════════════════════════════════════════════════════════════╣\n ║  Compiles datex to binary                                                            ║\n ║  Visit https://docs.unyt.org/datex for more information                              ║\n ╠═════════════════════════════════════════╦════════════════════════════════════════════╣\n ║  © 2020 unyt.org                        ║                                            ║\n ╚═════════════════════════════════════════╩════════════════════════════════════════════╝\n */\n\nimport { Logger } from \"../utils/logger.ts\";\nconst logger = new Logger(\"datex compiler\");\n\nimport { ReadableStream, Runtime } from \"../runtime/runtime.ts\";\nimport { Endpoint, IdEndpoint, Target, WildcardTarget, Institution, Person, BROADCAST, target_clause, endpoints, LOCAL_ENDPOINT } from \"../types/addressing.ts\";\nimport { Pointer, PointerProperty, ReactiveValue } from \"../runtime/pointers.ts\";\nimport { CompilerError, RuntimeError, Error as DatexError, ValueError } from \"../types/errors.ts\";\nimport { Function as DatexFunction } from \"../types/function.ts\";\n\nimport { crypto, Crypto } from \"../runtime/crypto.ts\";\nimport { Stream } from \"../types/stream.ts\";\nimport { Type } from \"../types/type.ts\";\nimport { Tuple } from \"../types/tuple.ts\";\nimport { BinaryCode } from \"./binary_codes.ts\";\nimport { Scope } from \"../types/scope.ts\";\nimport { ProtocolDataType } from \"./protocol_types.ts\";\nimport { Quantity } from \"../types/quantity.ts\";\nimport { EXTENDED_OBJECTS, INHERITED_PROPERTIES, VOID, SLOT_WRITE, SLOT_READ, SLOT_EXEC, NOT_EXISTING, SLOT_GET, SLOT_SET, DX_IGNORE, DX_BOUND_LOCAL_SLOT, DX_RETURN_POINTER_VALUE, DX_REPLACE, DX_PTR } from \"../runtime/constants.ts\";\nimport { arrayBufferToBase64, base64ToArrayBuffer, buffer2hex, hex2buffer } from \"../utils/utils.ts\";\nimport { RuntimePerformance } from \"../runtime/performance_measure.ts\";\nimport { Conjunction, Disjunction, Logical, Negation } from \"../types/logic.ts\";\nimport { Regex } from \"./tokens_regex.ts\";\nimport { baseURL, TypedArray } from \"../utils/global_values.ts\";\nimport type { datex_scope } from \"../utils/global_types.ts\";\nimport { unit_symbol } from \"./unit_codes.ts\";\nimport { Time } from \"../types/time.ts\";\n\n// WASM\nimport wasm_init, {init_runtime as wasm_init_runtime, compile as wasm_compile, decompile as wasm_decompile} from \"../wasm/adapter/pkg/datex_wasm.js\";\nimport { MessageLogger } from \"../utils/message_logger.ts\";\nimport { JSTransferableFunction } from \"../types/js-function.ts\";\nimport { client_type } from \"../utils/constants.ts\";\nimport { normalizePath } from \"../utils/normalize-path.ts\";\nimport { VolatileMap } from \"../utils/volatile-map.ts\";\n\n// await wasm_init();\n// wasm_init_runtime();\n\nlet WebRTCInterface: undefined|typeof import(\"../network/communication-interfaces/webrtc-interface.ts\").WebRTCInterface;\n\nexport const activePlugins:string[] = [];\n\n// for actions on variables, pointers, ...\nenum ACTION_TYPE {\n    GET, \n    SET, // =\n    INIT, // :=\n    OTHER, // +=, -=, ...\n    SET_REFERENCE // $= for variables\n}\n\n// Raw DATEX as return type\nexport class DatexResponse<T> {\n    constructor(public datex:string|URL|Scope, public data?:unknown[]) {}\n\n    async evaluate():Promise<T> {\n        if (this.datex instanceof URL) {\n            return <T>(await Runtime.getURLContent(this.datex))[0]\n        }\n        else if (typeof this.datex == \"string\") {\n            return <Promise<T>>Runtime.executeDatexLocally(this.datex, this.data);\n        }\n        else if (this.datex instanceof Scope) {\n            return this.datex.execute(Runtime.endpoint);\n        }\n        else throw new Error(\"Invalid DATEX Response data\");\n    }\n}\n\n\n\nexport const ProtocolDataTypesMap = [\n    \"REQUEST\", \"RESPONSE\", \"DATA\", \"TMP_SCOPE\", \"LOCAL\", \"HELLO\", \"DEBUGGER\", \"SOURCE_MAP\", \"UPDATE\", \"GOODBYE\", \"TRACE\", \"TRACE_BACK\"\n]\n\n\ntype compiler_sub_scope = {\n    last_value_index: number,  // byte index of last, pointer, var, object, ...\n    first_value_index?: number, // byte index of first value in subscope\n    start_index: number, // index for the opening bracket of the subscope\n    wait_for_add: boolean,\n    in_template_string: boolean,\n    path_info_index: number,\n    while?: number, // start_index, indicate that currently in a while loop\n    iterate?: 0|1, // indicate that currently in a iterate loop, two steps\n    loop_start?: number, // index indicates loop start\n    jfa_index?: number,\n    if?: number, // start_index, indicate that currently in a if condition\n    else?: boolean, // currently waiting for else\n    value_count?: number, // count inserted values\n    if_end_indices?: number[], // contains indices inside if statements to jump to the end\n    param_type_close?: boolean, // wait for parameterized type end: )>\n    function?: number,\n    use_parent_index?: number, // use (x,y,z) declartion finish after sub scope close\n    imported_vars?: [string, string?][],\n\n    try_start?:number, // inner start index of try scope block\n    try_close?:boolean, // auto close try scope block\n\n    exports?:Object,\n\n    object_slot_index?: number,\n    object_slots?: Map<string, number>,\n\n    comma_indices?: number[], // contains all indices where a comma was inserted\n\n    has_ce?: boolean, // subscope contains ;\n    ce_index?: number, // index of last ;\n    first_element_pos?: number, // last element had key\n    parent_type?: BinaryCode, // Array or Object or empty\n    auto_close_scope?: BinaryCode, // does a tuple need to be auto-closed?\n\n    vars?: {[name:string]: [type:'val'|'var'|'ref'|'const', slot:number]}\n};\n\n\ntype extract_var_scope = {\n    _is_extract_var_scope: true,\n\n    buffer: ArrayBuffer,\n    uint8: Uint8Array,\n    data_view: DataView,\n    b_index: number,\n    inner_scope: compiler_sub_scope,\n    inserted_values: Map<unknown, [number]>,\n    dynamic_indices: [number][],\n    preemptive_pointers: Map<string, compiler_scope|extract_var_scope>\n    options: compiler_options,\n    assignment_end_indices: Set<number>,\n    var_index?: number,\n\n    stack: [Endpoint, string?][]\n}\n\nexport type compiler_scope = {\n\n    _is_extract_var_scope: false,\n\n    datex: string,\n\n    return_data?: {datex:string},\n\n    data?: unknown[],\n    options: compiler_options,\n\n    preemptive_pointers: Map<string, compiler_scope|extract_var_scope>,\n    \n    jmp_label_indices:  {[label:string]:[number]}, // jmp label -> binary index\n    indices_waiting_for_jmp_lbl: {[label:string]:[number][]}, // jmp instructions waiting for resolved label indices\n\n    assignment_end_indices: Set<number>, // contains a list of all indices at which a assignment ends (x = .), needed for inserted value indexing\n\n    inserted_values: Map<unknown, [number]>, // save start indices of all inserted values\n\n    used_lbls: string[], // already used lbls\n\n    addJSTypeDefs?: boolean, // should add url() imports for types to load via JS modules\n\n    last_cache_point?: number, // index of last cache point (at LBL)\n\n    add_header: boolean,\n    is_child_scope_block?: boolean, // allow \\x,\\y,\\z, \\(...), execute in parent scope during runtime\n    extract_pointers?: boolean, // extract pointers/labels from scope, required for transform\n    extract_var_index?: number\n    extract_var_indices?: Map<BinaryCode, Map<string|number, number>>\n    extract_var_scope?:extract_var_scope\n    precompiled?: PrecompiledDXB, // save precompiled in precompiled object if provided\n    last_precompiled?: number, // index from where to split last_precompiled buffer part\n\n    var_index?:number,\n\n\n    buffer: ArrayBuffer,\n    uint8: Uint8Array,\n    data_view: DataView,\n\n    // pre-generated for header\n    receiver_buffer?: ArrayBuffer, // already generated buffer containing the receivers filter\n    sender_buffer?: ArrayBuffer, // already generated buffer containing the sender\n\n    full_dxb_size?: number\n    pre_header_size?: number\n    signed_header_size?: number\n\n    stack: [Endpoint, string?][],\n\n    unused_plugins?: Set<string>, // set of all plugins used in the script, to check against options.required_plugins\n\n    b_index: number,\n\n    streaming?: ReadableStreamDefaultReader<unknown>,\n\n    max_block_size?: number, // max size of each block, if not Infinity (default), dxb might be split into multiple blocks\n\n    internal_var_index: [number] // count up for every new internal variable\n    internal_vars: WeakMap<Record<string, unknown>, number> // save variables for values with an internal variable\n    internal_primitive_vars: WeakMap<Record<string, unknown>, number> // save variables for primitive values with an internal variable\n\n    serialized_values: WeakMap<Record<string, unknown>, unknown> // cache serialized versions of values (if they are used multiple times)\n    dynamic_indices: [number][], // contains all dynamic index [number] arrays\n    jmp_indices: [number][], // contains all positions (as dynamic indices) at which a jmp to xy index exists (and might need to be updated if a buffer shift occurs)\n\n    current_data_index?: number,\n\n    current_line_nr: number,\n    end: boolean,\n\n    is_outer_insert?: boolean,\n\n    last_command_end?: boolean,\n\n    subscopes: compiler_sub_scope[],\n    inner_scope: compiler_sub_scope,\n\n    // for compile instructions\n    compile_datex_scope?: datex_scope\n    compile_compiler_scope?: compiler_scope\n\n    _code_block_type?: number // 0/undefined: no code block, 1: () code block, 2: single line code block\n}\n\nexport type compiler_options = {\n    /** Header options */\n    sid?:number,     // scope id\n    return_index?: number // unique block return index\n    inc?: number, // incremenented block index (should not be changed)\n    end_of_scope?:boolean, // is last block for this scope id\n    from?: Endpoint,  // sender\n    to?: target_clause|Pointer<target_clause>, // receivers\n    flood?: boolean, // no receiver, flood to all\n    type?: ProtocolDataType,    // what kind of data is in the body?\n    sign?: boolean,  // sign the header + body\n    encrypt?: boolean, // encrypt the body?\n    sym_encrypt_key?: CryptoKey, // encrypt with the provided symmetric encryption key\n    send_sym_encrypt_key?: boolean, // send the encrypted encryption key to all receivers (only send once for a session per default)\n    allow_execute?:boolean, // allow calling functions, per default only allowed for datex requests\n    \n    plugins?: string[] // list of enabled plugins\n    required_plugins?: string[] // list of enabled plugins that must be used\n\n    stream_abort_signal?: AbortSignal // abort signal for stream\n\n    // for routing header\n    __routing_ttl?:number,\n    __routing_prio?:number,\n    __routing_to?: endpoints|Pointer<target_clause>\n\n    // for special compiler info\n    inserted_ptrs?: Set<Pointer>\n    force_id?: boolean // use endpoint id as sender, also if other identifier available\n    collapse_pointers?: boolean // collapse all pointers to their actual values (not pointers injected into a scope)\n    keep_external_pointers?: boolean, // if true and collapse_pointers is true, non-origin pointers are not collapsed\n    collapse_injected_pointers?: boolean // collapse pointers injected to a scope \n    collapse_first_inserted?: boolean // collapse outer pointer to actual value\n    _first_insert_done?: boolean // set to true after first insert\n    keep_first_transform?: boolean // if collapse_first_inserted is true, the outer transform is not collapsed (restored as transform)\n    no_create_pointers?: boolean // don't add $$ to clone pointers (useful for value comparison)\n    parent_scope?: compiler_scope, // reference to parent scope, required for val var ref\n    pseudo_parent?: boolean, // if true, handle variables from parent_scope like normal variables (no reindexing), required for init blocks, ...\n    only_leak_inserts?: boolean, // only __insert__ placeholder variables from parent scope are accessible\n    no_duplicate_value_optimization?: boolean, // dont collapse multiple identical primitive ´´ values to a single reference (only relevant for rendering as datex script, mostly for strings)\n\n    preemptive_pointer_init?: boolean, // directly sent the pointer values for owned pointers\n    init_scope?: boolean, // is not a real subscope, only a init block\n    context_location?: URL, // location of the dx file\n\n    // used by insert commands, shared over multiple dx file compilations\n    insert_header?: {\n        buffer: ArrayBuffer,\n        index: number,\n        cache:  Map<string,string>, // insert value (url, enpoint string) -> variable\n        vars?: {[name:string]: [type:'val'|'var'|'ref', slot:number]}, // reference to the vars of the most outer parent scope\n        var_index: number,\n        root_scope: compiler_scope // most outer parent scope\n    }\n\n\n    __v2?: boolean\n}\n\nconst utf8_decoder = new TextDecoder();\n\nexport const INSERT_MARK = '\\u0001\\udddd\\uaaaa\\ueeee\\u0001'\n\nexport class Compiler {\n\n    static readonly VERSION_NUMBER = 1;\n\n    static SIGN_DEFAULT = true; // can be changed\n\n    static BIG_BANG_TIME = Date.UTC(2024, 0, 0, 0, 0, 0, 0)\n    static MAX_INT_32 = 2_147_483_647;\n    static MIN_INT_32 = -2_147_483_648;\n\n    static MIN_INT_64 = -9223372036854775808n;\n    static MAX_INT_64 = 9223372036854775807n;\n\n    static MAX_INT_8 = 127;\n    static MIN_INT_8 = -128;\n\n    static MAX_INT_16 = 32_767;\n    static MIN_INT_16 = -32_768;\n\n    static MAX_UINT_16 = 65_535;\n    static MAX_UINT_32 = 4_294_967_295;\n\n    static readonly signature_size = 96 // 256;\n\n    static _buffer_block_size = 64;\n\n    private static utf8_encoder = new TextEncoder();\n\n    private static local_url = new URL('@@local', baseURL);\n\n    private static getBaseStack(context_location:URL = this.local_url):[Endpoint, string] {\n        return [Runtime.endpoint, 'compiler' + (context_location ? ': ' + context_location?.toString() : '')]\n    }\n\n    private static combineBuffers(buffer1:ArrayBuffer, buffer2:ArrayBuffer) {\n        const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n        tmp.set(new Uint8Array(buffer1), 0);\n        tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n        return tmp.buffer;\n    }\n\n    private static sid_return_indices = new VolatileMap<number,number>();\n    private static sid_incs = new VolatileMap<number,number>();\n    private static sid_incs_remote:Map<Target, VolatileMap<number,number>> = new Map();\n\n    public static readonly MAX_SID = 4_294_967_295;\n    public static readonly MAX_BLOCK = 65_535;\n\n    public static readonly MAX_DXB_BLOCK_SIZE = Compiler.MAX_UINT_16; // default max block size (Infinity)\n\n    /** create a new random SID */\n    public static generateSID(keepalive = false):number{\n        let sid:number;\n        // get unique SID\n        do {\n            sid = Math.round(Math.random() * this.MAX_SID);\n        } while (this.sid_return_indices.has(sid));\n\n        this.sid_return_indices.set(sid,0);\n        this.sid_incs.set(sid,0);\n\n        // TODO: alternative solution? at some point, the map max size will be reached\n        if (keepalive) {\n            this.sid_return_indices.keepalive(sid, Infinity)\n            this.sid_incs.keepalive(sid, Infinity)\n        }\n        return sid;\n    }\n\n    /** get return index ++ for a specific SID */\n    public static getNextReturnIndexForSID(sid:number):number {\n        if (!this.sid_return_indices.has(sid)) {this.sid_return_indices.set(sid,0);this.sid_incs.set(sid,0);} // sid not yet loaded?\n        let c = <number>this.sid_return_indices.keepalive(sid);\n        if (c > this.MAX_BLOCK) c = 0;\n        this.sid_return_indices.set(sid, c+1);\n        return c; \n    }\n\n    private static getBlockInc(sid:number):number {\n        if (!this.sid_return_indices.has(sid)) {this.sid_return_indices.set(sid,0);this.sid_incs.set(sid,0);} // sid not yet loaded?\n\n        let c = <number>this.sid_incs.keepalive(sid);\n        if (c > this.MAX_BLOCK) c = 0;\n        this.sid_incs.set(sid, c+1);\n        return c;\n    }\n\n    // count up inc individually for different remote receivers (important for RESPONSE dxb)\n    private static getBlockIncForRemoteSID(sid: number, remote_endpoint:Endpoint, reset_inc = false) {\n        if (!(remote_endpoint instanceof Target)) throw new CompilerError(\"Can only send datex responses to endpoint targets\");\n        if (!this.sid_incs_remote.has(remote_endpoint)) this.sid_incs_remote.set(remote_endpoint, new VolatileMap());\n\n        const sid_incs = this.sid_incs_remote.get(remote_endpoint)!;\n\n        if (!sid_incs.has(sid)) {\n            if (reset_inc) return 0; // don't even bother to create a 0-entry, just return 0 directly\n            sid_incs.set(sid, 0); // sid not yet loaded?\n        }\n\n        let c = sid_incs.keepalive(sid)!;\n        if (c > this.MAX_BLOCK) c = 0;\n        sid_incs.set(sid, c+1);\n        //logger.warn(\"INC for remote SID \" + sid, c, (reset_inc?'RESET':''));\n\n        // reset to 0 if scope is closed (responses are sent with the same scope id again and again, but the inc has to be reset each time)\n        if (reset_inc) sid_incs.set(sid, 0);\n\n        return c;\n    }\n\n    // 0 2 1 5 -> byte\n    public static convertNumbersToByte(bit_distribution:number[], ...nrs:(boolean|number)[]):number {\n        if (bit_distribution.reduce((a,b)=>a+b) > 8) throw Error(\"Bit size bigger than 8 bits\");\n        let binary = \"\";\n        for (let s = bit_distribution.length-1; s>=0; s--) {\n            const size = bit_distribution[s];\n            const nr = Number(nrs[s])||0;\n            if (nr > 2**size - 1) throw Error(\"Number \" + nr + \" is bigger than \" + size + \"  bits\");\n            binary = (nr?.toString(2)||'').padStart(size, '0') + binary;\n        }\n\n        return parseInt(binary, 2);\n    }\n\n\n    // get sender from header\n    public static extractHeaderSender(dx_block: ArrayBuffer, last_byte?:[number], _appspace_byte = true, _start = 8): Endpoint|undefined {\n        const header_uint8 = new Uint8Array(dx_block);\n        let i = _start;\n\n        const sender_type = header_uint8[i++];\n\n        // not anonynmous?\n        if (sender_type != 0) {\n            \n            const name_length = header_uint8[i++]; // get name length\n            const subspace_number = header_uint8[i++]; // get subspace number\n            let instance_length = header_uint8[i++]; // get instance length\n\n            let has_appspace = false;\n            if (_appspace_byte) has_appspace = !!header_uint8[i++];\n\n            if (instance_length == 0) throw new RuntimeError(\"Invalid sender\");\n            else if (instance_length == 255) instance_length = 0;\n\n            const name_binary = header_uint8.subarray(i, i+=name_length);\n            const name = (sender_type == BinaryCode.ENDPOINT || sender_type == BinaryCode.ENDPOINT_WILDCARD) ? name_binary : utf8_decoder.decode(name_binary)  // get name\n\n            const subspaces:string[]= [];\n            for (let n=0; n<subspace_number; n++) {\n                const length = header_uint8[i++];\n                if (length == 0) {\n                    throw new RuntimeError(\"Invalid sender\");\n                }\n                else {\n                    const subspace_name = utf8_decoder.decode(header_uint8.subarray(i, i+=length));\n                    subspaces.push(subspace_name);\n                }\n            }\n\n            const instance = utf8_decoder.decode(header_uint8.subarray(i, i+=instance_length))  // get instance\n            \n            if (last_byte) last_byte[0] = i;\n\n            const appspace = has_appspace ? this.extractHeaderSender(dx_block, last_byte, false, i) : undefined;\n\n            return <Endpoint> Target.get(name, instance, sender_type);\n        }\n\n        if (last_byte) last_byte[0] = i;\n        return undefined;\n    }\n\n     // get sender from header\n     public static extractHeaderSenderV2(dx_block: ArrayBuffer, last_byte?:[number], _appspace_byte = true, _start = 8): Endpoint|undefined {\n        const header_uint8 = new Uint8Array(dx_block);\n        const header_data_view = new DataView(header_uint8.buffer);\n\n        let i = _start;\n\n        const sender_type = header_uint8[i++];\n\n        // not anonynmous?\n        if (sender_type != 0xff) {\n            \n            const name_length = 18;\n            const name_binary = header_uint8.subarray(i, i+=name_length);\n            const name = (sender_type == BinaryCode.ENDPOINT || sender_type == BinaryCode.ENDPOINT_WILDCARD) ? name_binary : utf8_decoder.decode(name_binary).replaceAll(\"\\x00\", \"\")  // get name\n            const instance = header_data_view.getUint16(i, true) || undefined;\n            i += 2;\n\n            if (last_byte) last_byte[0] = i;\n\n            let bin_type = 0;\n            if (sender_type == 0) bin_type = BinaryCode.ENDPOINT;\n            else if (sender_type == 1) bin_type = BinaryCode.PERSON_ALIAS;\n            else if (sender_type == 2) bin_type = BinaryCode.INSTITUTION_ALIAS;\n\n            return <Endpoint> Target.get(name, instance, bin_type);\n        }\n\n        if (last_byte) last_byte[0] = i;\n        return undefined;\n    }\n\n    // dx block can be header or full dxb\n    protected static extractHeaderReceiverDataList(dx_block: ArrayBuffer, start_byte:number):Map<Endpoint, ArrayBuffer> {\n\n        const header_uint8 = new Uint8Array(dx_block);\n        let i = start_byte;\n\n        const targets_map = new Map<Endpoint, ArrayBuffer>();\n        const targets_nr = header_uint8[i++];\n        const target_list = [];\n\n        // same as in Runtime\n        for (let n=0; n<targets_nr; n++) {\n            const type = header_uint8[i++];\n\n            // is pointer\n            if (type == BinaryCode.POINTER) {\n                // TODO get receivers from pointer\n            }\n\n            // filter target\n            else {\n                \n                const name_length = header_uint8[i++]; // get name length\n                const subspace_number = header_uint8[i++]; // get subspace number\n                const instance_length = header_uint8[i++]; // get instance length\n    \n                const name_binary = header_uint8.subarray(i, i+=name_length);\n                const name = type == BinaryCode.ENDPOINT ? name_binary : utf8_decoder.decode(name_binary)  // get name\n    \n                const subspaces = [];\n                for (let n=0; n<subspace_number; n++) {\n                    const length = header_uint8[i++];\n                    const subspace_name = utf8_decoder.decode(header_uint8.subarray(i, i+=length));\n                    subspaces.push(subspace_name);\n                }\n    \n                const instance = utf8_decoder.decode(header_uint8.subarray(i, i+=instance_length))  // get instance\n\n                const target = <Endpoint> Target.get(name, instance, type);\n\n                target_list.push(target)\n    \n                // get attached symmetric key?\n                const has_key = header_uint8[i++];\n                if (has_key) {\n                    // add to keys\n                    targets_map.set(target, header_uint8.slice(i, i+512));\n                    i += 512;\n                }\n            }\n            \n        }\n        return targets_map;\n    }\n\n    /** Set receivers of header of existing block */\n    public static updateHeaderReceiver(dx_block:ArrayBuffer, to:Disjunction<Endpoint>):ArrayBuffer|void {\n        // create receiver buffer, create new\n        // extract keys\n\n        // TODO extract and recombine more efficient!\n        // first get keys from old receiver header\n        const last_byte:[number] = [0];\n        const _sender = Compiler.extractHeaderSender(dx_block, last_byte);\n        //console.log(\"> sender\", sender, last_byte[0]);\n        const keys = Compiler.extractHeaderReceiverDataList(dx_block, last_byte[0]+2);\n\n        // now add the required keys back into the old header\n        const receiver_buffer = Compiler.targetsToDXB(to, keys, true);\n        \n        if (!receiver_buffer) {\n            logger.error(\"could not get receiver buffer\");\n            return;\n        }\n\n        const receiver_start_index = last_byte[0];\n\n        // get dimensions - create new buffers\n        const routing_header_size = receiver_start_index + Uint16Array.BYTES_PER_ELEMENT + new DataView(dx_block).getUint16(receiver_start_index, true);\n\n        let uint8 = new Uint8Array(dx_block);\n        const routing_part = uint8.slice(0, receiver_start_index);\n        const main_part = uint8.slice(routing_header_size);\n\n        // calculate new dimensions\n        const total_header_size = receiver_start_index+Uint16Array.BYTES_PER_ELEMENT+receiver_buffer.byteLength;\n        const total_size = total_header_size + main_part.byteLength;\n\n        const new_dx_block = new ArrayBuffer(total_size);\n        const data_view = new DataView(new_dx_block);\n        uint8 = new Uint8Array(new_dx_block);\n        \n        // re-write to new buffer\n        uint8.set(routing_part);\n        uint8.set(main_part, total_header_size);\n\n        data_view.setUint16(receiver_start_index, receiver_buffer.byteLength, true);\n        uint8.set(new Uint8Array(receiver_buffer), receiver_start_index+Uint16Array.BYTES_PER_ELEMENT);\n\n        return new_dx_block;\n    }\n\n    /** Add a header to a Datex block */\n    public static DEFAULT_TTL = 10;\n\n    private static device_types = {\n        \"default\": 0,\n        \"mobile\": 1,\n        \"network\": 2,\n        \"embedded\": 3,\n        \"virtual\": 4\n    }\n\n    /** return the total size of the (not yet generated) block (including the header); also saves sizes and receiver_buffer to SCOPE */\n    public static async getScopeBlockSize(SCOPE:compiler_scope) {\n        if (SCOPE.full_dxb_size) return SCOPE.full_dxb_size; // alreadx calculated\n\n        const [receiver_buffer, sender_buffer, pre_header_size, signed_header_size, full_dxb_size] = await this.generateScopeBlockMetaInfo(\n            SCOPE.options.to,\n            SCOPE.options.from,\n            SCOPE.options.sign,\n            SCOPE.options.encrypt,\n            SCOPE.options.flood,\n            SCOPE.options.send_sym_encrypt_key,\n            SCOPE.options.sym_encrypt_key,\n            SCOPE.buffer.byteLength,\n            SCOPE.options.force_id\n        );\n\n        // save in scope\n        SCOPE.receiver_buffer = receiver_buffer;\n        SCOPE.sender_buffer = sender_buffer;\n        SCOPE.pre_header_size = pre_header_size;\n        SCOPE.signed_header_size = signed_header_size;\n        SCOPE.full_dxb_size = full_dxb_size;\n\n        return SCOPE.full_dxb_size;\n    }\n\n    public static async generateScopeBlockMetaInfo(\n        to: target_clause|Pointer<target_clause>, // receivers\n        from: Endpoint = Runtime.endpoint, // sender\n        sign: boolean = Compiler.SIGN_DEFAULT,  // sign the header + body\n        encrypt = false, // encrypt (sym_encrypt_key must be provided)\n        flood = false, // flood to all\n        send_sym_encrypt_key = true, // add encryption key info to header\n        sym_encrypt_key: CryptoKey, // send encryption key to receivers\n        dxb_block_length:number,\n        force_id = false // force sender endpoint id\n    ):Promise<[receiver_buffer:ArrayBuffer, sender_buffer:ArrayBuffer, pre_header_size:number, signed_header_size:number, full_dxb_size:number]> {\n        let receiver_buffer: ArrayBuffer =  new ArrayBuffer(0);\n\n        // generate dynamic receivers buffer\n        if (!flood && to) {\n            let evaluated_endpoints: Pointer<target_clause>|Disjunction<Endpoint>;\n\n            // encrypted keys map\n            const endpoint_key_map = new Map<Endpoint, ArrayBuffer>();\n            \n            // pointer\n            if (to instanceof Pointer) evaluated_endpoints = to;\n            \n            // endpoint or list of endpoints\n            else {\n                evaluated_endpoints = <Disjunction<Endpoint>> Logical.collapse(to, Target);\n                //console.log(\"evaluate\", to, evaluated_endpoints);\n\n                // get enc keys?\n                if (send_sym_encrypt_key && sym_encrypt_key) {\n                    for (const endpoint of evaluated_endpoints) {\n                        endpoint_key_map.set(endpoint, await Crypto.encryptSymmetricKeyForEndpoint(sym_encrypt_key, endpoint));\n                    }\n                }\n            }\n\n            receiver_buffer = Compiler.targetsToDXB(evaluated_endpoints, endpoint_key_map, true);\n        }\n\n        // if (force_id && from) from = from.id_endpoint; \n\n        // generate sender buffer\n        const sender_buffer = from ? this.endpointToDXB(from) : new ArrayBuffer(1);\n\n        const pre_header_size = 10 + sender_buffer.byteLength + (receiver_buffer.byteLength??0) + (sign?Crypto.SIGN_BUFFER_SIZE:0);\n        const signed_header_size = 18 + (encrypt ? Crypto.IV_BUFFER_SIZE : 0);\n        \n        const full_dxb_size = pre_header_size + signed_header_size + dxb_block_length;\n\n        return [receiver_buffer, sender_buffer, pre_header_size, signed_header_size, full_dxb_size];\n    }\n\n    /** return a buffer containing the header and the scope dx_block */\n    public static async appendHeader(\n        dx_block:ArrayBuffer = new ArrayBuffer(0), \n        end_of_scope = true, // is last block for this scope id\n        from: Endpoint = Runtime.endpoint,  // sender\n        to?: target_clause|Pointer<target_clause>, // receivers\n        flood = false, // flood to all\n        type: ProtocolDataType = ProtocolDataType.REQUEST,    // what kind of data is in the body?\n        sign: boolean = Compiler.SIGN_DEFAULT,  // sign the header + body\n        encrypt = false, // encrypt (sym_encrypt_key must be provided)\n        send_sym_encrypt_key = true, // add encryption key info to header\n        sym_encrypt_key?: CryptoKey, // send encryption key to receivers\n        allow_execute = type == ProtocolDataType.REQUEST || type == ProtocolDataType.LOCAL, // allow calling functions, per default only allowed for datex requests\n       \n        sid:number = type == ProtocolDataType.RESPONSE ? -1 : (type == ProtocolDataType.DATA ? 0 : this.generateSID()),     // scope id \n        return_index = 0,  // generated index or fixed value\n        block_inc: number = type == ProtocolDataType.RESPONSE ? this.getBlockIncForRemoteSID(sid, <Endpoint>to, end_of_scope) : this.getBlockInc(sid), // should not be overriden; count up block for unique order, if response unique inc for different receivers\n\n        force_id = false,\n\n        // for routing header\n        __routing_ttl:number = Compiler.DEFAULT_TTL,\n        __routing_prio = 0,\n        __routing_to?: endpoints|Pointer<target_clause>,\n\n        // can be provided if it already exists in the SCOPE (gets generated otherwise)\n        receiver_buffer?:ArrayBuffer,\n        sender_buffer?: ArrayBuffer,\n        pre_header_size?: number,\n        signed_header_size?: number,\n        full_dxb_size?: number\n    ) {\n\n        const compile_measure = RuntimePerformance.startMeasure(\"compile time\", \"header\")\n\n        // cannot generate new sid if type is RESPONSE\n        if (sid == -1) throw new CompilerError(\"Cannot generate a new SID for a RESPONSE\");\n\n        // scope header data not yet generated\n        if (full_dxb_size == undefined) {\n            [receiver_buffer, sender_buffer, pre_header_size, signed_header_size, full_dxb_size] = await this.generateScopeBlockMetaInfo(\n                to,\n                from,\n                sign,\n                encrypt,\n                flood, \n                send_sym_encrypt_key,\n                sym_encrypt_key,\n                dx_block.byteLength,\n                force_id\n            )\n        }\n\n        // get device type\n        const device_type = this.device_types.mobile;\n\n        // encryption\n        let iv;\n        if (encrypt) {\n            if (!sym_encrypt_key) throw new CompilerError(\"No symmetric encryption key provided\");\n            [dx_block, iv] = await Crypto.encryptSymmetric(dx_block, sym_encrypt_key);\n        }\n       \n        // init buffers\n        // not-signed header part\n        const pre_header = new ArrayBuffer(pre_header_size!); // unsigned part, includes 'dxb' and routing information\n        const pre_header_data_view = new DataView(pre_header);\n        const pre_header_uint8     = new Uint8Array(pre_header); \n        // potentially signed header part\n       \n        const header = new ArrayBuffer(signed_header_size!);\n        const header_data_view = new DataView(header);\n        const header_uint8     = new Uint8Array(header); \n\n        let i = 0;\n\n        // Magic number (\\01d)\n        pre_header_uint8[i++] = 0x01;\n        pre_header_uint8[i++] = 0x64;\n\n        // version number\n        pre_header_uint8[i++] = this.VERSION_NUMBER;\n        \n        // Full Block size (set at the end)\n        i += 2;\n     \n        // ROUTING HEADER /////////////////////////////////////////////////\n        // ttl\n        pre_header_uint8[i++] = __routing_ttl;\n        // initial ttl (originally: prio, currently unused)\n        pre_header_uint8[i++] = __routing_ttl; //__routing_prio;\n\n        // signed = 1, encrypted+signed = 2, encrypted = 3, others = 0\n        pre_header_uint8[i++] = sign && !encrypt ? 1: (sign && encrypt ? 2 : (!sign && encrypt ? 3 : 0));\n\n        // sender\n        pre_header_uint8.set(new Uint8Array(sender_buffer!), i);\n        i += sender_buffer!.byteLength;\n\n        // receivers\n        if (!flood && to) {\n            // receivers buffer size\n            pre_header_data_view.setUint16(i, receiver_buffer!.byteLength, true);\n            i+=Uint16Array.BYTES_PER_ELEMENT;\n      \n            // add receiver buffer\n            pre_header_uint8.set(new Uint8Array(receiver_buffer!), i);\n            i+=receiver_buffer!.byteLength;\n        }\n\n        // flood to all, ignore receiver if provided\n        else if (flood) {\n            pre_header_data_view.setUint16(i, Compiler.MAX_UINT_16, true);\n            i+=Uint16Array.BYTES_PER_ELEMENT;\n        }\n\n        // no receivers\n        else {\n            pre_header_data_view.setUint16(i, 0, true);\n            i+=Uint16Array.BYTES_PER_ELEMENT;\n        }\n\n        ///////////////////////////////////////////////////////////////////\n        \n\n        const signature_index = i;\n\n        i = 0;\n\n        // sid\n        header_data_view.setUint32(i, sid, true);\n        i+=Uint32Array.BYTES_PER_ELEMENT\n\n        // block index\n        header_data_view.setUint16(i, return_index, true);\n        i+=Uint16Array.BYTES_PER_ELEMENT\n\n        // block inc\n        header_data_view.setUint16(i, block_inc, true);\n        i+=Uint16Array.BYTES_PER_ELEMENT\n\n        // type \n        header_uint8[i++] = type;\n\n        // flags encrypted - executable - end_of_scope - device_type (5 bits)\n        header_uint8[i++] = this.convertNumbersToByte([1,1,1,5], encrypt, allow_execute, end_of_scope, device_type);\n        \n        // timestamp (current time)\n        header_data_view.setBigUint64(i, BigInt(Date.now()-this.BIG_BANG_TIME), true);\n        i+=BigUint64Array.BYTES_PER_ELEMENT\n        \n        // symmetric encryption initialization vector (if exists)\n        if (encrypt && iv) {\n            header_uint8.set(iv, i);\n            i+=iv.byteLength;\n        }\n       \n        const header_and_body = this.combineBuffers(header, dx_block);\n\n        // signature\n        if (sign) pre_header_uint8.set(new Uint8Array(await Crypto.sign(header_and_body)), signature_index)  // add signature to pre header\n\n        // combine all header + body\n        // set block size\n        const block_size = pre_header.byteLength + header_and_body.byteLength;\n        if (block_size > this.MAX_DXB_BLOCK_SIZE) {\n            pre_header_data_view.setUint16(3, 0, true);\n            logger.debug(\"DXB block size exceeds maximum size of \" + this.MAX_DXB_BLOCK_SIZE + \" bytes\")\n        }\n        else pre_header_data_view.setUint16(3, block_size, true);\n\n        // return as ArrayBuffer or [ArrayBuffer]\n        const buffer = this.combineBuffers(pre_header, header_and_body);\n        if (RuntimePerformance.enabled) RuntimePerformance.endMeasure(compile_measure)\n        return buffer;\n    }\n\n    public static endpointToDXB(target:Endpoint) {\n        // targets buffer part\n        let target_buffer = new ArrayBuffer(50) // estimated size\n        let target_uint8 = new Uint8Array(target_buffer);\n        let i = 0;\n\n        function handleRequiredBufferSize(size_in_bytes:number) {\n            if (size_in_bytes>=target_buffer.byteLength-1) {\n                const new_size = (target_buffer.byteLength??0) + Math.ceil((size_in_bytes-target_buffer.byteLength)/8)*8;\n                const old_uint8 = target_uint8;\n                target_buffer    = new ArrayBuffer(new_size);\n                target_uint8    = new Uint8Array(target_buffer);  // default                 \n                target_uint8.set(old_uint8); // copy from old buffer\n            }\n        }\n\n        const name_bin = (target instanceof IdEndpoint) ? target.binary : this.utf8_encoder.encode(target.name); \n        const instance_bin = this.utf8_encoder.encode(target.instance); \n\n        target_uint8[i++] = target.type;\n        target_uint8[i++] = name_bin.byteLength; // write name length to buffer\n        target_uint8[i++] = 0//target.subspaces.length; // write subspace number to buffer\n        target_uint8[i++] = instance_bin.byteLength == 0 ? 255 : instance_bin.byteLength;  // write instance length to buffer, 0 = wildcard, 255 = no instance\n        target_uint8[i++] = 0; // has appspace?\n        target_uint8.set(name_bin, i);  // write name to buffer\n        i += name_bin.byteLength;\n\n        // for (const subspace of target.subspaces ?? []) {\n        //     const subspace_bin = Compiler.utf8_encoder.encode(subspace); \n        //     handleRequiredBufferSize(i+1+subspace_bin.byteLength);\n        //     target_uint8[i++] = subspace_bin.length;  // write subspace length to buffer\n        //     target_uint8.set(subspace_bin, i);  // write subspace_bin to buffer\n        //     i += subspace_bin.byteLength;\n        // }\n\n        handleRequiredBufferSize(instance_bin.length);\n        target_uint8.set(instance_bin, i);  // write channel to buffer\n        i += instance_bin.byteLength;\n\n        target_buffer = target_buffer.slice(0, i);\n\n        \n        return target_buffer;\n    }\n    \n    // create binary representation of <Filter>, max 255 ands by 255 ors, max 127 different targets in total\n    // also add encrypted keys at the end\n    public static targetsToDXB(clause:Disjunction<Endpoint>|Pointer<target_clause>, keys_map?:Map<Endpoint,ArrayBuffer>, extended_keys = false): ArrayBuffer {\n        const encrypted_key_size = 512;\n\n        if (clause instanceof Pointer) {\n            const buffer = new ArrayBuffer(1 + Pointer.MAX_POINTER_ID_SIZE) // estimated size\n            const uint8 = new Uint8Array(buffer);\n            uint8[0] = 1;\n            uint8.set(clause.id_buffer, 1);   // write pointer id to buffer\n            return clause.id_buffer;\n        }\n\n        else if (clause instanceof Disjunction) {\n            const list = clause;\n            \n            let buffer = new ArrayBuffer(3 + list.size*30) // estimated size\n            let dataview = new DataView(buffer);\n            let uint8 = new Uint8Array(buffer);\n\n            function handleRequiredBufferSize(size_in_bytes:number) {\n                if (size_in_bytes>=buffer.byteLength-1) {\n                    let new_size = (buffer.byteLength??0) + Math.ceil((size_in_bytes-buffer.byteLength)/8)*8;\n                    let old_uint8 = uint8;\n                    buffer    = new ArrayBuffer(new_size);\n                    uint8    = new Uint8Array(buffer);  // default                 \n                    uint8.set(old_uint8); // copy from old buffer\n                }\n            }\n\n\n            // indicate endpoint list\n            let i = 0;\n            uint8[i++] = 0;\n\n            // endpoint number\n            dataview.setInt16(1, list.size, true);\n            i += Int16Array.BYTES_PER_ELEMENT;\n\n            for (let endpoint of list) {\n                let key = (endpoint instanceof Endpoint) ? keys_map?.get(endpoint) : null;\n                let name_bin = (endpoint instanceof IdEndpoint) ? endpoint.binary : this.utf8_encoder.encode(endpoint.name); \n                let instance_bin = this.utf8_encoder.encode(endpoint.instance); \n                handleRequiredBufferSize(i+4+name_bin.length)\n                uint8[i++] = endpoint.type;\n                uint8[i++] = name_bin.byteLength; // write name length to buffer\n                uint8[i++] = 0//endpoint.subspaces.length; // write subspace number to buffer\n                uint8[i++] = instance_bin.byteLength;  // write instance length to buffer\n                uint8.set(name_bin, i);  // write name to buffer\n                i += name_bin.byteLength;\n\n                // for (let subspace of endpoint.subspaces ?? []) {\n                //     let subspace_bin = Compiler.utf8_encoder.encode(subspace); \n                //     handleRequiredBufferSize(i+1+subspace_bin.byteLength);\n                //     uint8[i++] = subspace_bin.length;  // write subspace length to buffer\n                //     uint8.set(subspace_bin, i);  // write subspace_bin to buffer\n                //     i += subspace_bin.byteLength;\n                // }\n\n                handleRequiredBufferSize(i+instance_bin.length+1+(key?encrypted_key_size+1:0));\n                uint8.set(instance_bin, i);  // write channel to buffer\n                i += instance_bin.byteLength;\n\n                if (extended_keys) {\n                    // has key?\n                    uint8[i++] = key?1:0;  \n                    if (key) { // add key\n                        uint8.set(new Uint8Array(key), i);\n                        i += key.byteLength;\n                    }\n                }\n            }\n\n            return buffer.slice(0, i); // slice target buffer\n        }\n\n        else throw new CompilerError(\"Invalid target list\")\n\n    }\n\n    /** compiler builder functions */\n\n    static builder = {\n\n        // resize buffer by given amount of bytes, or create new\n        resizeBuffer: (add_bytes:number=Compiler._buffer_block_size, SCOPE:compiler_scope|extract_var_scope) => {\n            let new_size = (SCOPE.buffer?.byteLength??0)+add_bytes;\n            //logger.info(\"extending buffer size to \" + new_size + \" bytes\");\n            let old_uint8 = SCOPE.uint8;\n            SCOPE.buffer    = new ArrayBuffer(new_size);\n            SCOPE.uint8     = new Uint8Array(SCOPE.buffer);  // default \n            SCOPE.data_view = new DataView(SCOPE.buffer);\n            \n            if (old_uint8) SCOPE.uint8.set(old_uint8); // copy from old buffer\n        },\n\n        // auto resize buffer it too smol\n        handleRequiredBufferSize: (size_in_bytes:number, SCOPE:compiler_scope|extract_var_scope) => {\n            if (size_in_bytes>=SCOPE.buffer.byteLength-1) \n                Compiler.builder.resizeBuffer(Math.max(Compiler._buffer_block_size, Math.ceil((size_in_bytes-SCOPE.buffer.byteLength)/8)*8), SCOPE);\n        },\n\n\n\n        // insert during compile time\n        compilerInsert: async (SCOPE:compiler_scope, value:URL|Blob|DatexResponse<unknown>) => {\n\n            let compiled_script:ArrayBuffer;\n            let cache_var: string;\n            // cache for internal variables of existing inserted values\n            const insert_header = SCOPE.options.insert_header!;\n            const cache = insert_header.cache;\n\n            try {\n\n                // raw datex url\n                if (value instanceof DatexResponse && value.datex instanceof URL) value = value.datex;\n\n                // URL already in insert cache\n                if (value instanceof URL && cache.has(value.toString())) {\n                    cache_var = cache.get(value.toString())!;\n                    // logger.debug(\"insert cached: ? ?\", value, cache_var);\n                    await Compiler.builder.insertValVarRef(SCOPE, cache_var, ACTION_TYPE.GET);\n                }\n\n                // create new  \n                else {\n                    cache_var = `__insert__${cache.size}` // placeholder var __insert__\n                    // logger.debug(\"insert: ?\", cache_var);\n\n                    const var_index = insert_header.var_index++;\n                    cache.set(value.toString(), cache_var);\n                    if (!insert_header.vars) throw new CompilerError(\"Insert resolution error\");\n                    insert_header.vars[cache_var] = [\"var\", var_index]; // points to the SCOPE.inner_scope.vars of the most outer parent scope\n    \n                    // get script/resource from url\n                    if (value instanceof URL)  {\n                        // logger.debug(\"url: ?\", value);\n                        compiled_script = await Compiler.builder.urlToDXB(value, insert_header);\n                    }\n                    // text/datex or application/json(5)\n                    else if (value instanceof Blob) {\n                        compiled_script = await Compiler.builder.blobToDXB(value, insert_header);\n                    }\n   \n                    // raw datex script text\n                    else if (value instanceof DatexResponse) {\n                        if (typeof value.datex == \"string\") compiled_script = await Compiler.builder.scriptToDXB(value.datex, value.data, undefined, insert_header);\n                        else throw new CompilerError(\"Invalid raw DATEX\");\n                    }\n        \n                    // TODO endpoint default?\n    \n                    else {\n                        throw new CompilerError(\"Cannot insert value\");\n                    }\n\n                    // insert compiled script into insert buffer\n                    if (compiled_script) {\n\n                        // special insert buffer that goes to the top of the dxb\n                        let insert_buffer = insert_header.buffer;\n                        let insert_uint8 = new Uint8Array(insert_buffer);\n                        let insert_dataview = new DataView(insert_buffer);\n\n                        const handleRequiredBufferSize = (size_in_bytes:number) => {\n                            const add_bytes = Math.max(Compiler._buffer_block_size, Math.ceil((size_in_bytes-insert_buffer.byteLength)/8)*8);\n                            if (size_in_bytes>=insert_buffer.byteLength-1) {\n                                const new_size = (insert_buffer?.byteLength??0)+add_bytes;\n                                const old_uint8 = insert_uint8;\n                                insert_header.buffer = insert_buffer = new ArrayBuffer(new_size);\n                                insert_uint8     = new Uint8Array(insert_buffer);  // default \n                                insert_dataview = new DataView(insert_buffer);\n                                \n                                if (old_uint8) insert_uint8.set(old_uint8); // copy from old buffer\n                            }        \n                        }\n\n                        // create new entry in insert buffer\n                        handleRequiredBufferSize(insert_header.index+20+compiled_script.byteLength);\n\n                        // #x =\n      \n                        insert_uint8[insert_header.index++] = BinaryCode.SET_INTERNAL_VAR;\n                        insert_uint8[insert_header.index++] = 0;\n                        insert_dataview.setUint16(insert_header!.index, var_index, true);\n                        insert_header.index += Uint16Array.BYTES_PER_ELEMENT;\n\n                        // add do\n                        insert_uint8[insert_header.index++] = BinaryCode.DO;\n\n                        insert_uint8.set(new Uint8Array(compiled_script), insert_header.index)\n                        insert_header.index += compiled_script.byteLength;\n                        insert_uint8[insert_header.index++] = BinaryCode.CLOSE_AND_STORE;\n                    }\n\n\n                    // resolve from cache_var name\n                    const [_type, index, _parent_var] = await Compiler.builder.resolveValVarRef(SCOPE, cache_var);\n                    // variable not found\n                    if (index == -1) throw new CompilerError(\"Error during insert resolution\", SCOPE.stack);\n\n                    // insert internal var containing insert value\n                    Compiler.builder.insertVariable(SCOPE, index, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR)\n\n                }\n                \n            } catch (e) {\n                    if (e instanceof DatexError) e.pushToStack(...SCOPE.stack);\n                    throw e;\n            }\n        },\n\n        // __ToDXB: used for compile time inserts from different resources\n\n        /**\n         * Resolve URL and compile content to dxb (if datex script or json), with references to parent scope\n         * @param url URL to datex script or json\n         * @param parent_scope\n         * @returns compiled dxb array\n         */\n        urlToDXB: async (url:URL, insert_header:compiler_options[\"insert_header\"]) => {\n            const [data,type] = await Runtime.getURLContent(url, true);\n\n            // DATEX Script file\n            if (type?.startsWith(\"text/datex\") || url.toString().endsWith(\".dx\")) return Compiler.builder.scriptToDXB(<string>data, [], url, insert_header);\n            // JSON file\n            else if (type?.startsWith(\"application/json\") || url.toString().endsWith(\".json\")) return Compiler.builder.scriptToDXB(<string>data, [], url, insert_header);\n            // DATEX Binary file\n            else if (type == \"application/datex\" || url.toString().endsWith(\".dxb\")) {\n                // remove header\n                const res = Runtime.parseHeaderSynchronousPart(<ArrayBuffer>data);\n                if (!(res instanceof Array)) throw new CompilerError(\"Invalid DATEX Binary resource\");\n                return res[1].buffer;\n            }\n\n            else throw new CompilerError(\"Cannot compile resource type to dxb: '\" + type + \"'\");\n        },\n\n        /**\n         * Compiles blob content to dxb (if datex or json), with references to parent scope\n         * @param blob Blob containing JSON or DATEX Script data\n         * @param parent_scope \n         * @returns compiled dxb array\n         */\n        blobToDXB: async (blob:Blob, insert_header:compiler_options[\"insert_header\"]) => {\n            // text/datex or application/json(5)\n            if (blob.type == \"text/datex\" || blob.type.startsWith(\"application/json\")) {\n                const script = await blob.text();\n                return Compiler.builder.scriptToDXB(script, [], undefined, insert_header);\n            }\n            else throw new CompilerError(\"Cannot compile mime type to dxb: <\" + blob.type + \">\");\n        },\n\n        /**\n         * Compiles datex script to dxb, with references to parent scope\n         * @param script DATEX Script text\n         * @param data compiler insert data\n         * @param context_location\n         * @param parent_scope \n         * @returns compiled dxb array\n         */\n        scriptToDXB: (script:string, data:unknown[]|undefined, context_location:URL|undefined, insert_header:compiler_options[\"insert_header\"]) => {\n            return <Promise<ArrayBuffer>> this.compile(script, data, {context_location, insert_header, parent_scope:insert_header!.root_scope, only_leak_inserts:true}, false, true);\n        },\n\n        getAssignAction: (assign_string:string): [ACTION_TYPE, BinaryCode|undefined] => {\n            let action_type = ACTION_TYPE.GET; \n            let action_specifier:BinaryCode|undefined;\n\n            // is =, +=, -=\n            if (assign_string) {\n                assign_string = assign_string.replace(/ /g, '');\n\n                if (assign_string == \"=\") action_type = ACTION_TYPE.SET;\n                else if (assign_string == \"$=\") action_type = ACTION_TYPE.SET_REFERENCE; // only for variables\n                else if (assign_string == \":=\") action_type = ACTION_TYPE.INIT;\n                \n                else if (assign_string == \"+=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.ADD\n                }\n                else if (assign_string == \"-=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.SUBTRACT\n                }\n                else if (assign_string == \"*=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.MULTIPLY\n                }\n                else if (assign_string == \"/=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.DIVIDE\n                }\n                else if (assign_string == \"&=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.AND\n                }\n                else if (assign_string == \"|=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.OR\n                }\n\n            }\n\n            return [action_type, action_specifier]\n        },\n\n        // getArgsTemplate(args_string: string, SCOPE:compiler_scope):Datex.code_block_args_template {\n        //     const args_template = []\n        //     const arg_names = []\n        //     let in_multi_with = false;\n        //     for (let arg of args_string.split(\",\")) {\n        //         arg = arg.trim()\n        //         if (in_multi_with || arg.match(/^with *\\(/)) { // with multiple variables\n        //             in_multi_with = true;\n        //             // end of multi with?\n        //             if (arg.includes(')')) in_multi_with = false;\n        //             args_template.push([Datex.WITH, arg.replace('with', '').replace(/[() ]/g, '')])\n        //         }\n        //         else if (arg.startsWith('with ')) args_template.push([Datex.WITH, arg.replace('with ', '')]) // with\n        //         else if (arg.startsWith('<')) {\n        //             let m = arg.match(Regex.TYPE)\n        //             if (!m) throw new SyntaxError(\"Invalid token on line \"+SCOPE.current_line_nr);\n        //             args_template.push([Type.get(m[1], m[2], m[3]), arg.replace(m[0],'').trim()])\n        //         }\n        //         else args_template.push([null, arg]);\n\n        //         // last name double?\n        //         if (arg_names.includes(args_template[args_template.length-1][1])) throw new CompilerError(\"Duplicate code block argument variable names are not allowed\");\n        //     }\n        //     return args_template\n        // },\n\n        // update last_value_index / set first_value_index\n        valueIndex: (SCOPE:compiler_scope|extract_var_scope) => {\n\n            // if child value for path, it is not an actual value\n            if (SCOPE.inner_scope.path_info_index != -1 && SCOPE.inner_scope.path_info_index === SCOPE.b_index-1) return;\n\n            if ('value_count' in SCOPE.inner_scope) SCOPE.inner_scope.value_count!--; // update value count\n\n            SCOPE.inner_scope.last_value_index = SCOPE.b_index;\n            if (SCOPE.inner_scope.first_value_index === undefined) SCOPE.inner_scope.first_value_index = SCOPE.b_index;\n        },\n\n        // save all indices where commas (ELEMENT) where inserted (trailing commas can be removed on scope exit)\n        commaIndex: (index:number, SCOPE:compiler_scope) => {\n            if (!SCOPE.inner_scope.comma_indices) SCOPE.inner_scope.comma_indices = [];\n            SCOPE.inner_scope.comma_indices.push(index);\n        },\n\n        // add index where an assignment ends\n        assignmentEndIndex: (SCOPE:compiler_scope|extract_var_scope, index?:number) => {\n            SCOPE.assignment_end_indices.add(index ?? SCOPE.b_index);\n        },\n\n        // index that gets updated if the buffer is shifted within\n\n        getDynamicIndex: (index:number, SCOPE:compiler_scope): [number] => {\n            const dyn_index:[number] = [index];\n            SCOPE.dynamic_indices.push(dyn_index);\n            return dyn_index;\n        },\n\n\n        // shift dynamic indices & jmp indices correctly (all indices after a specific index)\n        shiftDynamicIndices: (SCOPE:compiler_scope, shift:number, after:number) => {\n            // update dynamic indices\n            for (const i of SCOPE.dynamic_indices) {\n                if (i[0] > after) i[0] += shift;\n            }\n\n            // update jmp_indices\n            try {\n                for (const [i] of SCOPE.jmp_indices) {\n                    if (i > after) {\n                        const jmp_to = SCOPE.data_view.getUint32(i, true);\n                        if (jmp_to > after) SCOPE.data_view.setUint32(i, jmp_to + shift, true); // shift current jmp_to index in buffer\n                    }\n                }\n            }\n            // bug investigation https://github.com/unyt-org/datex-core-js-legacy/issues/23\n            catch (e) {\n                console.error(\"jmp_indices error (https://github.com/unyt-org/datex-core-js-legacy/issues/23)\", e);\n            }\n\n            // update assignment_end_indices\n            const new_end_indices = new Set<number>();\n            for (const i of SCOPE.assignment_end_indices) {\n                 new_end_indices.add(i > after ? i+shift : i);\n            }\n            SCOPE.assignment_end_indices = new_end_indices;\n\n            // shift other internal indices\n            if (SCOPE.b_index > after) SCOPE.b_index += shift;\n            if (SCOPE.inner_scope.last_value_index > after) SCOPE.inner_scope.last_value_index += shift;\n            if (SCOPE.inner_scope.first_value_index > after) SCOPE.inner_scope.first_value_index += shift;\n        },\n\n        insertByteAtIndex: (byte:number, index:number|[number], SCOPE:compiler_scope) => {\n            // get value from dynamic index\n            if (index instanceof Array) index = index[0];\n\n            // is current b_index (no shift needed, normal insert)\n            if (index == SCOPE.b_index) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = byte;\n                return;\n            }\n\n            // shift for gap\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE); // buffer overflowing to right\n            SCOPE.uint8.copyWithin(index+1, index);\n\n            SCOPE.uint8[index++] = byte;\n\n            // update indices\n            Compiler.builder.shiftDynamicIndices(SCOPE, 1, index-2); // shift starting at correct index\n        },\n\n        // add sub_result=_1234=... at a specific index (for recursive objects)\n        createInternalVariableAtIndex: (index:number|[number], SCOPE:compiler_scope, val?:any):number => {\n\n            if (!SCOPE.internal_vars) {\n                // DEBUG message since CDN prod crashes here\n                console.error(\"Scope is missing internal_vars (https://github.com/unyt-org/datex-core-js-legacy/issues/23)\", new Error().stack);\n            }\n            // already has an internal variable reference?\n            if (SCOPE.internal_vars.has((val))) return SCOPE.internal_vars.get(val)!;\n            if (SCOPE.internal_primitive_vars?.has((val))) return SCOPE.internal_primitive_vars.get(val)!;\n\n            // get value from dynamic index\n            if (index instanceof Array) index = index[0];\n            \n            const var_number = SCOPE.internal_var_index[0]++;\n            const add_scope_global = !SCOPE.assignment_end_indices.has(index); // only add if not already an assignment before\n            const gap = Uint16Array.BYTES_PER_ELEMENT + 2 + (add_scope_global?1:0);\n\n            // shift for gap\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+gap, SCOPE); // buffer overflowing to right\n            SCOPE.uint8.copyWithin(index+gap, index);\n\n            // update indices\n            Compiler.builder.shiftDynamicIndices(SCOPE, gap, index);\n\n            // #sub_result = \n            if (add_scope_global) SCOPE.uint8[index++] = BinaryCode.SET_VAR_SUB_RESULT;\n    \n            // #1234 = \n            Compiler.builder.insertVariable(SCOPE, var_number, ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR, index);\n\n      \n\n            // save for future requests\n            // not primitive\n            if (typeof val == \"object\" || typeof val == \"function\") SCOPE.internal_vars.set(val, var_number)\n            // primitive\n            else  SCOPE.internal_primitive_vars.set(val, var_number)\n\n            return var_number;\n        },\n\n\n        resolveInternalProxyName: (SCOPE:compiler_scope, name:string):number => {\n            // in current scope\n            if (SCOPE.inner_scope.object_slots?.has(name)) return SCOPE.inner_scope.object_slots!.get(name)!;\n\n            // check parent scope\n            else if (SCOPE.options.parent_scope) {\n                return Compiler.builder.resolveInternalProxyName(SCOPE.options.parent_scope, name); \n            }\n\n            throw new CompilerError(`Internal variable #${name} does not exist in this context`, SCOPE.stack)\n        },\n\n        /******* Some recursive insanity to trace the correct var/ref/val names from parent compiler_scopes */\n\n        insertValVarRef: async (SCOPE:compiler_scope, name:string, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode) => {\n            // get variable or get proxy for parent variable\n            const [type, index, parent_var] = await Compiler.builder.resolveValVarRef(SCOPE, <string>name);\n                        \n            // variable not found\n            if (index == -1) {\n                // readonly - #std variable? (#std.name)\n                if (action_type == ACTION_TYPE.GET && Runtime.STD_STATIC_SCOPE && name in Runtime.STD_STATIC_SCOPE) {\n                    Compiler.builder.insertVariable(SCOPE, undefined, ACTION_TYPE.GET, undefined, BinaryCode.VAR_STD, undefined);\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_GET;\n                    Compiler.builder.addText(name, SCOPE);\n                    return;\n                }\n                // readonly - #std.type?\n                if (action_type == ACTION_TYPE.GET && Type.has('std', name)) {\n                    Compiler.builder.addTypeByNamespaceAndName(SCOPE, 'std', name);\n                    return;\n                }\n                else throw new CompilerError(\"Variable '\"+name+\"' was not declared in scope\", SCOPE.stack);\n            }\n\n            // cannot set reference ($=) of ref variable\n            if (action_type == ACTION_TYPE.SET_REFERENCE && type === \"ref\") {\n                throw new CompilerError(\"Cannot override the reference of the reference variable '\"+name+\"'\")\n            }\n\n            // cannot set reference ($=) of val variable\n            if (action_type == ACTION_TYPE.SET_REFERENCE && type === \"val\") {\n                throw new CompilerError(\"Cannot override the reference of the value variable '\"+name+\"'\")\n            }\n\n            // val variables from parent scope are readonly\n            if (action_type != ACTION_TYPE.GET && parent_var && type === \"val\"){\n                throw new CompilerError(\"The value variables '\"+name+\"' borrowed from the parent scope is readonly\")\n            }\n\n            // const is readonly\n            if ((action_type == ACTION_TYPE.SET_REFERENCE || action_type == ACTION_TYPE.SET) && type === \"const\") {\n                throw new CompilerError(\"The const variable '\"+name+\"' is readonly\")\n            }\n\n            // insert at current position of scope\n            await Compiler.builder.insertVariable(SCOPE, index, action_type, action_specifier, BinaryCode.INTERNAL_VAR);\n        },\n\n        // recursively generates right variable index for val var ref\n        // resolve pseudo variable var,ref,val, recursively update parents\n        resolveValVarRef: async (SCOPE:compiler_scope, name:string): Promise<[type:'val'|'var'|'ref'|'const'|null, index:number, parent_var:boolean]> => {\n\n            // is direct scope variable, can just insert\n            if (SCOPE.inner_scope.vars && name in SCOPE.inner_scope.vars) {\n                // return variable\n                return [SCOPE.inner_scope.vars[name][0], SCOPE.inner_scope.vars[name][1], false]\n            }\n            // might be a parent variable, recurse TODO: better placeholder than __insert__, prevent accidental leaks\n            else if (SCOPE.options.parent_scope && (!SCOPE.options.only_leak_inserts || name.startsWith(\"__insert__\"))) {\n                // variable index in parent scope\n                const [type, index] = await Compiler.builder.resolveValVarRef(SCOPE.options.parent_scope, name); \n                // variable not found\n                if (index == -1) return [null, -1, true];\n                // map parent variable to scope variable (keep if pseudo_parent) and return\n                else return [type, SCOPE.options.pseudo_parent ? index : Compiler.builder.getExtractedVariable(SCOPE, BinaryCode.INTERNAL_VAR, index), true]\n            }\n            // no parent scope, stop\n            else return [null, -1, false];\n            \n        },\n\n        getExtractedVariable: (SCOPE:compiler_scope, base_type:BinaryCode, v_name:string|number)=> {\n            let index:number\n            let insert_new = false;\n\n\n            if (!SCOPE.extract_var_indices) throw new CompilerError(\"Cannot extract variable in non child scope block\")\n            if (!SCOPE.extract_var_scope) throw new CompilerError(\"Cannot extract variable in non child scope block\")\n\n            if (!SCOPE.extract_var_indices.has(base_type)) throw new CompilerError(\"Invalid variable base type\");\n\n            if (SCOPE.extract_var_indices.get(base_type)!.has(v_name)) {\n                index = SCOPE.extract_var_indices.get(base_type)!.get(v_name)!;\n            }\n            else {\n                index = SCOPE.extract_var_index!++;\n                SCOPE.extract_var_indices.get(base_type)!.set(v_name, index);\n                insert_new = true;\n            }\n\n            // insert at top of scope dxb if new\n            if (insert_new) {\n                // pointer\n                if (base_type == BinaryCode.POINTER) Compiler.builder.addPointerByID(SCOPE.extract_var_scope, <string>v_name, ACTION_TYPE.GET, undefined, undefined, NOT_EXISTING); // sync\n                // variable/label\n                else Compiler.builder.insertVariable(SCOPE.extract_var_scope, v_name, ACTION_TYPE.GET, undefined, base_type)\n            }\n\n            return index;\n        },\n\n        // insert #0, #1, instead of variable/pointer/..., inserts variable into the extract_var_scope at the top of the dxb, returns index #0, #1, ...\n        insertExtractedVariable: (SCOPE:compiler_scope, base_type:BinaryCode, v_name:string|number)=> {\n            // create or get proxy internal var for the requested variable/pointer\n            const index = Compiler.builder.getExtractedVariable(SCOPE, base_type, v_name);\n            // insert at current position of scope\n            Compiler.builder.insertVariable(SCOPE, index, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n            return index;\n        },\n\n        // v: variable name or empty, action type: set/get/delete/other, action_specifier: for other actions (+=,-=,...), base_type: e.g. BinaryCode.VAR\n        // returns promise if action_type is ACTION_TYPE.INIT (TODO probably could convert to sync)\n        insertVariable: (SCOPE:compiler_scope|extract_var_scope, v?:string|number, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?: BinaryCode, base_type:BinaryCode=BinaryCode.INTERNAL_VAR,  index:number=SCOPE.b_index, init_brackets = false, prefix_action?: BinaryCode):void|Promise<void> => {\n            \n            const is_b_index = index==SCOPE.b_index; // index is same as scope index\n\n            if (is_b_index) Compiler.builder.handleRequiredBufferSize(index, SCOPE);\n            SCOPE.uint8[index++] = base_type + action_type;\n\n            if (action_specifier != undefined) {\n                if (is_b_index) Compiler.builder.handleRequiredBufferSize(index, SCOPE);\n                SCOPE.uint8[index++] = action_specifier;\n            }\n          \n            // has a variable name/id (is empty for predefined internal variables with custom binary codes)\n            if (v != undefined) {\n                let v_name_bin:Uint8Array\n                const is_number = typeof v == \"number\";\n                if (!is_number) {\n                    v_name_bin = this.utf8_encoder.encode(v);  // convert var name to binary\n                    if (is_b_index) Compiler.builder.handleRequiredBufferSize(index+v_name_bin.byteLength+1, SCOPE);\n                }\n                else {\n                    if (is_b_index) Compiler.builder.handleRequiredBufferSize(index+Uint16Array.BYTES_PER_ELEMENT+1, SCOPE);\n                }\n\n                SCOPE.uint8[index++] = is_number ? 0 : v_name_bin!.byteLength; // set length or 0 if hex variable\n\n                if (is_number) { // write hex var name to buffer\n                    if (v > 65535) { // does not fit in Uint16\n                        throw new CompilerError(\"Invalid variable id: \" + v + \" (too big)\", SCOPE.stack);\n                    }\n                    SCOPE.data_view.setUint16(index, v, true);\n                    index += Uint16Array.BYTES_PER_ELEMENT;\n                }\n                else {\n                    SCOPE.uint8.set(v_name_bin!, index);   // write var name to buffer\n                    index+=v_name_bin!.byteLength;\n                }\n            }\n\n            // is assignment end\n            if (action_type != ACTION_TYPE.GET) Compiler.builder.assignmentEndIndex(SCOPE, index);\n\n            if (is_b_index) SCOPE.b_index = index; // update scope index\n\n            if (action_type == ACTION_TYPE.INIT) return Compiler.builder.addInitBlock(<compiler_scope>SCOPE, init_brackets); // might be a promise\n            else if (prefix_action != undefined) SCOPE.uint8[SCOPE.b_index++] = prefix_action;\n        },\n\n\n        handleStream: (stream:Stream|ReadableStream, SCOPE:compiler_scope) => {\n            SCOPE.streaming = stream.getReader();\n        },\n\n        // add jmp or jfa / jtr - auto change jmp index if buffer is shifted later on\n        addJmp: (SCOPE:compiler_scope, type:BinaryCode.JMP|BinaryCode.JTR|BinaryCode.JFA, to_index?: number) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = type;\n\n            // already has a jmp index\n            if (to_index != undefined) SCOPE.data_view.setUint32(SCOPE.b_index, to_index, true);  // set jmp index\n            SCOPE.jmp_indices.push(Compiler.builder.getDynamicIndex(SCOPE.b_index, SCOPE)) // store current position of jmp index\n            \n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n        },\n\n        // add data types\n        addText: (s:string, SCOPE:compiler_scope|extract_var_scope) => {\n            Compiler.builder.valueIndex(SCOPE);\n            let str_bin = Compiler.utf8_encoder.encode(s);  // convert string to binary\n            let short_string = str_bin.byteLength < 256;\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+str_bin.byteLength+(short_string?1:Uint32Array.BYTES_PER_ELEMENT)+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = short_string ? BinaryCode.SHORT_TEXT : BinaryCode.TEXT;\n            // write string length to buffer\n            if (short_string) {\n                SCOPE.uint8[SCOPE.b_index++] = str_bin.byteLength // 1 byte length\n            }\n            else {\n                SCOPE.data_view.setUint32(SCOPE.b_index, str_bin.byteLength, true); // 4 byte length\n                SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; \n            }\n          \n            SCOPE.uint8.set(str_bin, SCOPE.b_index);   // write string to buffer\n            SCOPE.b_index+=str_bin.byteLength;\n        },\n\n        addDisjunction: (elements:Set<any>, SCOPE:compiler_scope) => {\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DISJUNCTION;\n            Compiler.builder.addConnective(elements, SCOPE);\n        },\n\n        addConjunction: (elements:Set<any>, SCOPE:compiler_scope) => {\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CONJUNCTION;\n            Compiler.builder.addConnective(elements, SCOPE);\n        },\n\n        addConnective: (elements:Set<any>, SCOPE:compiler_scope) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT, SCOPE);\n\n            SCOPE.data_view.setUint32(SCOPE.b_index, elements.size, true);\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;   // 4 byte length\n            \n            for (let el of elements) {\n                Compiler.builder.insert(el, SCOPE);\n            }\n        },\n\n        addUrl: (url_string:string, SCOPE:compiler_scope) => {\n            Compiler.builder.valueIndex(SCOPE);\n            let str_bin = Compiler.utf8_encoder.encode(url_string);  // convert string to binary\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+str_bin.byteLength+(Uint32Array.BYTES_PER_ELEMENT)+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.URL;\n            // write url length to buffer\n            SCOPE.data_view.setUint32(SCOPE.b_index, str_bin.byteLength, true); // 4 byte length\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; \n\n            SCOPE.uint8.set(str_bin, SCOPE.b_index);   // write string to buffer\n            SCOPE.b_index+=str_bin.byteLength;\n        },\n\n        addRelativePath: (path:string, SCOPE:compiler_scope) => {\n            Compiler.builder.valueIndex(SCOPE);\n            const str_bin = Compiler.utf8_encoder.encode(path);  // convert string to binary\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+str_bin.byteLength+(Uint32Array.BYTES_PER_ELEMENT)+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.RESOLVE_RELATIVE_PATH;\n            // write url length to buffer\n            SCOPE.data_view.setUint32(SCOPE.b_index, str_bin.byteLength, true); // 4 byte length\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; \n\n            SCOPE.uint8.set(str_bin, SCOPE.b_index);   // write string to buffer\n            SCOPE.b_index+=str_bin.byteLength;\n        },\n\n        addBoolean: (b:boolean, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = b ? BinaryCode.TRUE : BinaryCode.FALSE;\n        },\n        addInt: (i:bigint|number, SCOPE:compiler_scope) => {\n            if (i<=Compiler.MAX_INT_8 && i>=Compiler.MIN_INT_8)   return Compiler.builder.addInt8(i, SCOPE); // INT8\n            if (i<=Compiler.MAX_INT_16 && i>=Compiler.MIN_INT_16) return Compiler.builder.addInt16(i, SCOPE); // INT16\n            if (i<=Compiler.MAX_INT_32 && i>=Compiler.MIN_INT_32) return Compiler.builder.addInt32(i, SCOPE); // INT32\n            else if (i<=Compiler.MAX_INT_64 && i>=Compiler.MIN_INT_64) return Compiler.builder.addInt64(i, SCOPE); // INT64\n            else return Compiler.builder.addBigInt(i, SCOPE); // BIG_INT\n        },\n        addInt8: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int8Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INT_8;\n            SCOPE.data_view.setInt8(SCOPE.b_index, Number(i));\n            SCOPE.b_index+=Int8Array.BYTES_PER_ELEMENT;\n        },\n        addInt16: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int16Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INT_16;\n            SCOPE.data_view.setInt16(SCOPE.b_index, Number(i), true);\n            SCOPE.b_index+=Int16Array.BYTES_PER_ELEMENT;\n        },\n        addInt32: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int32Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INT_32;\n            SCOPE.data_view.setInt32(SCOPE.b_index, Number(i), true);\n            SCOPE.b_index+=Int32Array.BYTES_PER_ELEMENT;\n        },\n        addInt64: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+BigInt64Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INT_64;\n            SCOPE.data_view.setBigInt64(SCOPE.b_index, BigInt(i), true);\n            SCOPE.b_index+=BigInt64Array.BYTES_PER_ELEMENT;\n        },\n        addBigInt: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+BigInt64Array.BYTES_PER_ELEMENT+2, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.BIG_INT;\n            \n            SCOPE.uint8[SCOPE.b_index++] = i < 0 ? 0 : 1; // 0 for negative, 1 for positive (and 0)\n\n            const bigint_buffer = Quantity.bigIntToBuffer(BigInt(i < 0 ? -i : i));\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint32Array.BYTES_PER_ELEMENT+bigint_buffer.byteLength, SCOPE);\n\n            // invalid bigint size\n            if (bigint_buffer.byteLength > Compiler.MAX_UINT_32) throw new CompilerError(\"Integer too big\");\n\n            // buffer size\n            SCOPE.data_view.setUint32(SCOPE.b_index, bigint_buffer.byteLength, true)\n            SCOPE.b_index+=Uint32Array.BYTES_PER_ELEMENT;\n\n            // bigint\n            SCOPE.uint8.set(bigint_buffer, SCOPE.b_index);\n            SCOPE.b_index += bigint_buffer.byteLength;\n        },\n        addQuantity: (u:Quantity, SCOPE:compiler_scope) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Float64Array.BYTES_PER_ELEMENT+2, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.QUANTITY;\n\n            const sign = u.sign;\n            SCOPE.uint8[SCOPE.b_index++] = sign == -1 ? 0 : 1; // 0 for negative, 1 for positive (and 0)\n\n            const num_buffer = Quantity.bigIntToBuffer(u.numerator);\n            const den_buffer = Quantity.bigIntToBuffer(u.denominator);\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+(Uint16Array.BYTES_PER_ELEMENT*2)+den_buffer.byteLength+num_buffer.byteLength, SCOPE);\n\n            // buffer sizes\n            SCOPE.data_view.setUint16(SCOPE.b_index, num_buffer.byteLength, true)\n            SCOPE.b_index+=Uint16Array.BYTES_PER_ELEMENT;\n            SCOPE.data_view.setUint16(SCOPE.b_index, den_buffer.byteLength, true)\n            SCOPE.b_index+=Uint16Array.BYTES_PER_ELEMENT;\n\n            // numerator\n            SCOPE.uint8.set(num_buffer, SCOPE.b_index);\n            SCOPE.b_index += num_buffer.byteLength;\n\n            // denominator\n            SCOPE.uint8.set(den_buffer, SCOPE.b_index);\n            SCOPE.b_index += den_buffer.byteLength;\n\n            // unit\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+u.unit_binary.byteLength, SCOPE);\n            SCOPE.uint8.set(new Uint8Array(u.unit_binary), SCOPE.b_index)\n            SCOPE.b_index+=u.unit_binary.byteLength;\n        },\n\n        // TODO\n        addTime: (t:Time, SCOPE:compiler_scope) => {\n            Compiler.builder.valueIndex(SCOPE);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+BigUint64Array.BYTES_PER_ELEMENT+1, SCOPE);\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TIME;\n\n            SCOPE.data_view.setBigInt64(SCOPE.b_index, BigInt(isNaN(t.getTime()) ? 0 : Number(t.getTime())), true)\n            SCOPE.b_index+=BigUint64Array.BYTES_PER_ELEMENT;\n        },\n\n        addFloat64: (f:number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Float64Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.FLOAT_64;\n            SCOPE.data_view.setFloat64(SCOPE.b_index, f, true);\n            SCOPE.b_index+=Float64Array.BYTES_PER_ELEMENT;\n        },\n        addFloatAsInt32: (f:number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int32Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.FLOAT_AS_INT_32;\n            SCOPE.data_view.setInt32(SCOPE.b_index, f, true);\n            SCOPE.b_index+=Int32Array.BYTES_PER_ELEMENT;\n        },\n        addFloatAsInt8: (f:number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int8Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.FLOAT_AS_INT_8;\n            SCOPE.data_view.setInt8(SCOPE.b_index, f);\n            SCOPE.b_index+=Int8Array.BYTES_PER_ELEMENT;\n        },\n\n        // get +/- as immediate operators (no space inbetween) before next token\n        tryPlusOrMinus: (SCOPE:compiler_scope) => {\n            // + but not ++\n            if (SCOPE.datex[0] == \"+\" && SCOPE.datex[1] != \"+\") {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD; \n                SCOPE.datex = SCOPE.datex.slice(1);\n            }\n            // - but not -> or --\n            else if (SCOPE.datex[0] == \"-\" && SCOPE.datex[1] != \"-\" && SCOPE.datex[1] != \">\") {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBTRACT; \n                SCOPE.datex = SCOPE.datex.slice(1);\n            }\n        },\n\n        addFloat: (f:number, SCOPE:compiler_scope) => {\n            // can be saved as Int32 (is an integer within the Int32 bounds and not -0)\n            const isInt = Number.isInteger(f) && !Object.is(f, -0);\n            if (isInt && f<=Compiler.MAX_INT_8 && f>= Compiler.MIN_INT_8) return Compiler.builder.addFloatAsInt8(f, SCOPE); // float as int8\n            else if (isInt && f<=Compiler.MAX_INT_32 && f>= Compiler.MIN_INT_32) return Compiler.builder.addFloatAsInt32(f, SCOPE); // float as int32\n            else return Compiler.builder.addFloat64(f, SCOPE); // FLOAT_64\n        },\n\n        getFullObject(obj:Record<string, unknown>) {\n            const fullObj:Record<string, unknown> = {};\n            for (const prop in obj) {\n                fullObj[prop] = obj[prop];\n            }\n            return fullObj;\n        },\n\n        addScopeBlock: async (type:BinaryCode, brackets:boolean, extract_pointers: boolean, SCOPE:compiler_scope) => {\n\n            const return_data:{datex:string} = {datex: SCOPE.datex}; \n\n            const compiled = <ArrayBuffer> await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, true, extract_pointers, undefined, Infinity, brackets?1:2, SCOPE.current_data_index);\n            SCOPE.datex = return_data.datex; // update position in current datex script\n\n            // insert scope block\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+compiled.byteLength, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = type;\n            SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index)\n            SCOPE.b_index += compiled.byteLength;\n        },\n\n        insertScopeBlock: (type:BinaryCode, value:Scope, SCOPE:compiler_scope)=>{\n            // insert scope block\n              \n            SCOPE.uint8[SCOPE.b_index++] = type;\n\n            // injected vars\n            // collapse injected var pointers only if collapse_bound_pointers is true\n            for (const v of value.internal_vars) {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                Compiler.builder.insert(v, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n            }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT+(value.compiled?.byteLength??0), SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n            SCOPE.data_view.setUint32(SCOPE.b_index, value.compiled?.byteLength??0, true);\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT\n            if (value.compiled) {\n                SCOPE.uint8.set(new Uint8Array(value.compiled), SCOPE.b_index)\n                SCOPE.b_index += value.compiled.byteLength;\n            }\n        },\n\n        // addCodeBlock: (compiled:ArrayBuffer, args_template:Datex.code_block_args_template=[], SCOPE:compiler_scope) => {\n\n        \n        //     if (!compiled) {\n        //         throw new CompilerError(\"Code block has no content\");\n        //     }\n            \n        //     DatexCompiler.builder.valueIndex(SCOPE);\n\n        //     DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint16Array.BYTES_PER_ELEMENT+1, SCOPE);\n\n        //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n            \n        //     // injected variables (args)\n        //     SCOPE.data_view.setUint16(SCOPE.b_index, args_template.length, true);   // # of params\n        //     SCOPE.b_index += Uint16Array.BYTES_PER_ELEMENT;\n\n        //     for (let param of args_template) {\n        //         DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n        //         if (param[0] instanceof Type) {\n        //             DatexCompiler.builder.addTypeByNamespaceAndName(SCOPE, param[0].namespace, param[0].name);\n        //         }\n        //         else if (param[0] == Datex.WITH) {SCOPE.uint8[SCOPE.b_index++] = 1} // use variable from outer scope ('with')\n        //         else {SCOPE.uint8[SCOPE.b_index++] = 0} // no type specified\n\n        //         let v_name_bin = DatexCompiler.utf8_encoder.encode(param[1]);  // convert var name to binary\n        //         DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+v_name_bin.byteLength+2, SCOPE);\n        //         SCOPE.uint8[SCOPE.b_index++] = v_name_bin.byteLength;\n        //         SCOPE.uint8.set(v_name_bin, SCOPE.b_index);   // write var name to buffer\n        //         SCOPE.b_index+=v_name_bin.byteLength;\n        //     }\n\n        //     // Buffer\n        //     DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint32Array.BYTES_PER_ELEMENT+compiled.byteLength, SCOPE);\n\n        //     //console.log(\"codec \" + codec, \"buffer\",buffer);\n        //     SCOPE.data_view.setUint32(SCOPE.b_index, compiled.byteLength, true);   // buffer length\n        //     SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n\n        //     SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index);\n        //     SCOPE.b_index += compiled.byteLength;\n        // },\n\n\n        // insertGeneratedDatex: async (generator_function:()=>Promise<ArrayBuffer>, SCOPE:compiler_scope) => {\n        //     // TODO improve\n        //     DatexCompiler.builder.addCodeBlock(await generator_function(), [], SCOPE);\n        // },\n\n\n        addKey: (k:string|number|bigint, SCOPE:compiler_scope) => {\n            \n            // string key\n            if (typeof k == \"string\") {\n                const key_bin = Compiler.utf8_encoder.encode(k);  // convert key to binary\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+key_bin.byteLength+2, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT_WITH_KEY\n                SCOPE.uint8[SCOPE.b_index++] = key_bin.byteLength;  // write key length to buffer\n                SCOPE.uint8.set(key_bin, SCOPE.b_index);   // write key to buffer\n                SCOPE.b_index+=key_bin.byteLength;\n            }\n            // int key\n            else {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint32Array.BYTES_PER_ELEMENT+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT_WITH_INT_KEY\n                SCOPE.data_view.setUint32(SCOPE.b_index, Number(k), true)\n                SCOPE.b_index+=Uint32Array.BYTES_PER_ELEMENT;\n            }\n\n        },\n\n        addObjectSlot:  (k:string, SCOPE:compiler_scope) => {\n            if (!SCOPE.inner_scope.object_slot_index) SCOPE.inner_scope.object_slot_index = 0xfa00;\n            if (!SCOPE.inner_scope.object_slots) SCOPE.inner_scope.object_slots = new Map();\n            let slot:number;\n            if (k == \"write\") slot = SLOT_WRITE;\n            else if (k == \"read\")  slot = SLOT_READ;\n            else if (k == \"exec\")  slot = SLOT_EXEC;\n            else if (k == \"get\")  slot = SLOT_GET;\n            else if (k == \"set\")  slot = SLOT_SET;\n            else slot = SCOPE.inner_scope.object_slot_index++;\n\n            SCOPE.inner_scope.object_slots.set(k, slot);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint16Array.BYTES_PER_ELEMENT+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INTERNAL_OBJECT_SLOT;\n            SCOPE.data_view.setUint16(SCOPE.b_index, slot, true)\n            SCOPE.b_index+=Uint16Array.BYTES_PER_ELEMENT;\n        },\n\n\n        addNull: (SCOPE:compiler_scope) => {\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NULL;\n        },\n        addVoid: (SCOPE:compiler_scope) => {\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.VOID;\n        },\n\n\n        addFilterTargetFromParts: (type:BinaryCode, name:string|Uint8Array, instance:string, SCOPE:compiler_scope) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+4, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            const type_index = SCOPE.b_index;\n            SCOPE.uint8[SCOPE.b_index++] = instance == \"*\" ? type+1 : type;\n            const name_bin = (name instanceof Uint8Array) ? name : Compiler.utf8_encoder.encode(name); \n            const instance_bin = Compiler.utf8_encoder.encode(instance); \n            SCOPE.uint8[SCOPE.b_index++] = name_bin.byteLength; // write name length to buffer\n            SCOPE.uint8[SCOPE.b_index++] = 0;  // write subspace number to buffer\n            // instance length == 0 => wildcard, instance length == 255 => any instance\n            SCOPE.uint8[SCOPE.b_index++] = instance ? (instance == \"*\" ? 0 : instance_bin.byteLength) : 255;  // write instance length to buffer\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+name_bin.byteLength, SCOPE);\n            SCOPE.uint8.set(name_bin, SCOPE.b_index);  // write name to buffer\n            SCOPE.b_index+=name_bin.byteLength;\n\n            // for (const subspace of subspaces ?? []) {\n            //     // wildcard\n            //     if (subspace == \"*\") {\n            //         SCOPE.uint8[SCOPE.b_index++] = 0;\n            //         SCOPE.uint8[type_index] = type + 1;\n            //     }\n            //     else {\n            //         const subspace_bin = Compiler.utf8_encoder.encode(subspace); \n            //         Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+subspace_bin.byteLength, SCOPE);\n            //         SCOPE.uint8[SCOPE.b_index++] = subspace_bin.byteLength;  // write subspace length to buffer\n            //         SCOPE.uint8.set(subspace_bin, SCOPE.b_index);  // write subspace_bin to buffer\n            //         SCOPE.b_index+=subspace_bin.byteLength;\n            //     }\n            // }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+instance_bin.byteLength, SCOPE);\n\n            // add instance if not wildcard\n            if (instance != \"*\") {\n                SCOPE.uint8.set(instance_bin, SCOPE.b_index);  // write instance to buffer\n                SCOPE.b_index+=instance_bin.byteLength;\n            }\n\n\n            // // append appspace?\n            // if (appspace) Compiler.builder.addTarget(appspace, SCOPE);\n        },\n        \n        addPersonByNameAndChannel: (name:Uint8Array|string, instance:string, SCOPE:compiler_scope) => {\n            Compiler.builder.addFilterTargetFromParts(BinaryCode.PERSON_ALIAS, name, instance, SCOPE);\n        },\n      \n     \n        addInstitutionByNameAndChannel: (name:Uint8Array|string, instance:string, SCOPE:compiler_scope) => {\n            Compiler.builder.addFilterTargetFromParts(BinaryCode.INSTITUTION_ALIAS, name, instance, SCOPE);\n        },\n       \n        addIdEndpointByIdAndChannel: (id:Uint8Array|string, instance:string, SCOPE:compiler_scope) => {\n            Compiler.builder.addFilterTargetFromParts(BinaryCode.ENDPOINT, id, instance, SCOPE);\n        },\n\n        addBuffer: (buffer:Uint8Array, SCOPE:compiler_scope) => {\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT+buffer.byteLength, SCOPE);\n\n            //console.log(\"codec \" + codec, \"buffer\",buffer);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.BUFFER; \n            SCOPE.data_view.setUint32(SCOPE.b_index, buffer.byteLength, true);   // buffer length\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n\n            SCOPE.uint8.set(buffer, SCOPE.b_index);\n            SCOPE.b_index += buffer.byteLength;\n        },\n\n        addTarget: (el:Target, SCOPE:compiler_scope) => {\n            if (el instanceof Institution) Compiler.builder.addInstitutionByNameAndChannel(el.binary, el.instance, SCOPE);\n            else if (el instanceof Person) Compiler.builder.addPersonByNameAndChannel(el.binary, el.instance, SCOPE);\n            else if (el instanceof IdEndpoint) Compiler.builder.addIdEndpointByIdAndChannel(el.binary, el.instance, SCOPE);\n        },\n\n\n        addTypeByNamespaceAndName: (SCOPE:compiler_scope, namespace:string, name:string, variation?:string, parameters?:any[]|true, jsTypeDefModule?:string|URL) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n\n            Compiler.builder.valueIndex(SCOPE);\n\n            // remember if js type def modules should be added to this scope\n            if (SCOPE.addJSTypeDefs == undefined) {\n                const receiver = Compiler.builder.getScopeReceiver(SCOPE);\n                SCOPE.addJSTypeDefs = receiver != Runtime.endpoint && receiver != LOCAL_ENDPOINT;\n            }\n\n            const addTypeDefs = SCOPE.addJSTypeDefs && jsTypeDefModule;\n\n            if (addTypeDefs) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+4, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n                if (jsTypeDefModule instanceof URL) Compiler.builder.addUrl(jsTypeDefModule.toString(), SCOPE);\n                else {\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_URL;\n                    Compiler.builder.addText(jsTypeDefModule.toString(), SCOPE);\n                }\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n            }\n\n            const is_extended_type = !!(variation || parameters);\n\n            // short binary codes for std types\n            if ((namespace == \"std\" || !namespace) && !is_extended_type) {\n                switch (name) {\n                    case \"text\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_TEXT;return;\n                    case \"integer\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_INT;return;\n                    case \"decimal\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_FLOAT;return;\n                    case \"boolean\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_BOOLEAN;return;\n                    case \"null\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_NULL;return;\n                    case \"void\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_VOID;return;\n                    case \"buffer\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_BUFFER;return;\n                    case \"datex\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_CODE_BLOCK;return;\n                    case \"unit\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_UNIT;return;\n                    case \"time\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_TIME;return;\n                    case \"url\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_URL;return;\n                    case \"Array\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ARRAY;return;\n                    case \"Object\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_OBJECT;return;\n                    case \"Set\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_SET;return;\n                    case \"Map\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_MAP;return;\n                    case \"Tuple\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_TUPLE;return;\n                    case \"Function\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_FUNCTION;return;\n                    case \"Stream\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_STREAM;return;\n                    case \"Any\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ANY;return;\n                    case \"Task\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_TASK;return;\n                    case \"Assertion\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ASSERTION;return;\n                }\n            }\n\n            const name_bin = Compiler.utf8_encoder.encode(name);  // convert type name to binary\n            const ns_bin = Compiler.utf8_encoder.encode(namespace);  // convert type namespace to binary\n            const variation_bin = variation ? Compiler.utf8_encoder.encode(variation) : undefined;  // convert type namespace to binary\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+name_bin.byteLength+ns_bin.byteLength+4+(variation_bin ? variation_bin.byteLength : 0)+(is_extended_type?2:0), SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = is_extended_type ? BinaryCode.EXTENDED_TYPE : BinaryCode.TYPE;  \n            SCOPE.uint8[SCOPE.b_index++] = ns_bin.byteLength;\n            SCOPE.uint8[SCOPE.b_index++] = name_bin.byteLength;\n\n            if (is_extended_type) {\n                SCOPE.uint8[SCOPE.b_index++] = variation_bin ? variation_bin.byteLength : 0;\n                SCOPE.uint8[SCOPE.b_index++] = parameters ? 1 : 0;\n            }\n\n            SCOPE.uint8.set(ns_bin, SCOPE.b_index);  // write type namespace to buffer\n            SCOPE.b_index+=ns_bin.byteLength;\n            SCOPE.uint8.set(name_bin, SCOPE.b_index);  // write type name to buffer\n            SCOPE.b_index+=name_bin.byteLength;\n            if (variation) {\n                SCOPE.uint8.set(variation_bin!, SCOPE.b_index);  // write type variation to buffer\n                SCOPE.b_index+=variation_bin!.byteLength;\n            }\n            // insert parameters directly\n            if (parameters instanceof Array) {\n                Compiler.builder.addTuple(new Tuple(parameters), SCOPE);\n            }\n\n            if (addTypeDefs) {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n            }\n        },\n\n        \n        addPointerBodyByID: (id:string|Uint8Array, SCOPE:compiler_scope|extract_var_scope) => {\n            const id_bin = id instanceof Uint8Array ? id : hex2buffer(id, Pointer.MAX_POINTER_ID_SIZE, true);  // convert pointer name to binary\n            if (id_bin.byteLength > Pointer.MAX_POINTER_ID_SIZE) {\n                throw new CompilerError(\"Pointer ID size must not exceed \" + Pointer.MAX_POINTER_ID_SIZE + \" bytes\", SCOPE.stack);\n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Pointer.MAX_POINTER_ID_SIZE+1, SCOPE);\n            SCOPE.uint8.set(id_bin, SCOPE.b_index);   // write pointer name to buffer\n            SCOPE.b_index+=Pointer.MAX_POINTER_ID_SIZE;\n\n            // add flags\n            const knows_pointer = Pointer.get(id)?.value_initialized ?? false;\n            const has_hash = false\n            SCOPE.uint8[SCOPE.b_index++] = this.convertNumbersToByte([1,1,6], knows_pointer, has_hash);\n        },\n\n\n        // for internal vars / pointers / labels init \n        // assumes that uint32 gap is left before b_index to be set to jmp index\n        addInitBlock: async (SCOPE:compiler_scope, brackets = false) => {\n\n            const return_data:{datex:string} = {datex: SCOPE.datex}; \n            const compiled = <ArrayBuffer> await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, false, false, undefined, Infinity, brackets?1:2, SCOPE.current_data_index);\n            SCOPE.datex = return_data.datex; // update position in current datex script\n\n            // remove redundant \";\"\n            if (SCOPE.datex[0] == ';') SCOPE.datex = SCOPE.datex.slice(1);\n\n            // insert scope block\n            Compiler.builder.insertInitBlock(SCOPE, compiled);\n        },\n\n        addInitBlockForValue: (SCOPE:compiler_scope|extract_var_scope, value:any) => {\n\n            //const compiled = <ArrayBuffer> this.compile(\"?\", [value], {parent_scope:SCOPE, abs_offset, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, collapse_first_inserted:true}, false, false, false, undefined, Infinity); // sync           \n            const compiled = this.compileValue(value, {parent_scope: SCOPE, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, collapse_first_inserted:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false);\n\n            // insert scope block\n            Compiler.builder.insertInitBlock(SCOPE, compiled);\n        },\n\n        insertInitBlock: (SCOPE:compiler_scope|extract_var_scope, compiled:ArrayBuffer) => {\n\n            // > max uint8\n            if (compiled.byteLength > 0xff_ff_ff_ff) throw new CompilerError(\"pointer init block it too large\");\n         \n            // insert scope block\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint32Array.BYTES_PER_ELEMENT+compiled.byteLength, SCOPE);\n                            \n            SCOPE.data_view.setUint32(SCOPE.b_index, compiled.byteLength, true);\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; // leave space for JMP\n            SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index)\n            SCOPE.b_index += compiled.byteLength;\n        },\n\n        insertInitBlockPlaceholder: (SCOPE: compiler_scope|extract_var_scope) => {\n            const insertIndex = SCOPE.b_index; \n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; // leave space for JMP\n            return insertIndex\n        },\n\n        addValVarRefDeclaration: async (name:string, type:'val'|'var'|'ref'|'const', SCOPE:compiler_scope, init = false, init_brackets = false) => {\n            const INNER_SCOPE = SCOPE.inner_scope;\n\n            if (!INNER_SCOPE.vars) INNER_SCOPE.vars = {}\n\n            // TODO replace with Object.hasOwn\n            if (Object.hasOwn(INNER_SCOPE.vars, name)) throw new CompilerError(\"Cannot redeclare \"+type+\" '\"+name + \"'\", SCOPE.stack);\n            else {\n                if (SCOPE.var_index==undefined) SCOPE.var_index = 0x0100; // 0x00 - 0xff reserved for extracted variables for function, do, ...\n                const index = SCOPE.var_index++;\n                if (name!=undefined) INNER_SCOPE.vars[name] = [type, index];\n\n                let prefix_action: BinaryCode;\n                if (type == \"ref\") prefix_action = BinaryCode.CREATE_POINTER;  \n                else if (type == \"val\") prefix_action = BinaryCode.COPY;  \n\n                await Compiler.builder.insertVariable(SCOPE, index, init ? ACTION_TYPE.INIT : ACTION_TYPE.SET_REFERENCE, undefined, BinaryCode.INTERNAL_VAR, undefined, init_brackets, prefix_action);\n\n                return index;\n            }\n        },\n\n        addPointerByID: (SCOPE:compiler_scope|extract_var_scope, id:string|Uint8Array, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode, init_brackets = false, value?:any):Promise<void>|void => {\n\n            // insert preemptive pointer\n            const id_buffer = typeof id == \"string\" ? hex2buffer(id, Pointer.MAX_POINTER_ID_SIZE, true) : id;\n            const pointer_origin = (id_buffer[0]==BinaryCode.ENDPOINT || id_buffer[0]==BinaryCode.PERSON_ALIAS || id_buffer[0]==BinaryCode.INSTITUTION_ALIAS) ? <IdEndpoint> Target.get(id_buffer.slice(1,19), id_buffer.slice(19,21), id_buffer[0]) : null;\n            \n            const singleReceiver = \n                SCOPE.options.to instanceof Endpoint ? \n                    SCOPE.options.to :\n                    (\n                        (\n                            SCOPE.options.to instanceof Disjunction && \n                            SCOPE.options.to.size == 1 && \n                            [...SCOPE.options.to][0] instanceof Endpoint\n                        ) ? \n                        [...SCOPE.options.to][0] as Endpoint :\n                        null\n                    )\n\n            if (\n                pointer_origin && \n                SCOPE.options.preemptive_pointer_init !== false && // preemptive_pointer_init enabled\n                action_type == ACTION_TYPE.GET && // is get\n                Runtime.endpoint.equals(pointer_origin) &&  // is own pointer\n                SCOPE.options.to != Runtime.endpoint && // not sending to self\n                !(singleReceiver && Pointer.get(id)?.subscribers?.has(singleReceiver)) // receiver is subscribed to pointer - assume it already has the current pointer value\n            ) {\n                return Compiler.builder.addPreemptivePointer(SCOPE, id)\n            }\n\n            // normal insert\n            return Compiler.builder.addPointerNormal(SCOPE, id, action_type, action_specifier, init_brackets, value);\n        },\n\n        // just $aabbcc = \n        addPointerNormal: (SCOPE:compiler_scope|extract_var_scope, id:string|Uint8Array, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode, init_brackets = false, value?:any, transform_scope?: Scope<any>):Promise<void>|void => {\n        \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.POINTER + action_type;\n            if (action_specifier != undefined) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = action_specifier;\n            }\n            Compiler.builder.addPointerBodyByID(id, SCOPE);\n            \n            if (action_type == ACTION_TYPE.INIT) {\n                \n                if (value == NOT_EXISTING) {\n                    if (!SCOPE.datex) throw new CompilerError(\"cannot insert init block in scope, missing datex source code\");\n                    return Compiler.builder.addInitBlock(<compiler_scope>SCOPE, init_brackets) // async\n                }\n                else if (transform_scope) {\n                    const insertIndex = Compiler.builder.insertInitBlockPlaceholder(SCOPE);\n                    Compiler.builder.insert_transform_scope(SCOPE, transform_scope);\n                    const size = SCOPE.b_index-insertIndex-Uint32Array.BYTES_PER_ELEMENT;\n                    SCOPE.data_view.setUint32(insertIndex, size, true);\n                }\n                else return Compiler.builder.addInitBlockForValue(SCOPE, value) // sync\n            }\n        },\n\n        // ($aabb := [...]; $aabb)\n        addPreemptivePointer: (SCOPE:compiler_scope|extract_var_scope, id:string|Uint8Array)=>{\n            const normalized_id = Pointer.normalizePointerId(id);\n            const ptr = Pointer.get(normalized_id);\n\n            let parentScope:compiler_scope|extract_var_scope = SCOPE;\n            const ancestorScopes = new Set<compiler_scope|extract_var_scope>()\n            while (parentScope.options.parent_scope) {\n                parentScope = parentScope.options.parent_scope;\n                ancestorScopes.add(parentScope)\n            }\n            const alreadyInitializing = parentScope.preemptive_pointers.has(normalized_id) ?? false;\n\n            let deferSizeIndex = -1;\n\n            // TODO: enable\n            const defer = false // alreadyInitializing && ancestorScopes.has(parentScope.preemptive_pointers.get(normalized_id)!); // defer if already loading pointer in direct ancestor\n\n\n            // preemptive value already exists and was not yet initialized in scope\n            if (ptr?.value_initialized && !alreadyInitializing) {\n\n                parentScope.preemptive_pointers.set(normalized_id, SCOPE);\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                Compiler.builder.addPointerNormal(SCOPE, id, ACTION_TYPE.INIT, undefined, true, ptr, (ptr.force_local_transform && ptr.transform_scope) ? ptr.transform_scope : undefined); // sync\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n                Compiler.builder.addPointerNormal(SCOPE, id, ACTION_TYPE.GET, undefined, undefined, ptr.val); // sync\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n\n                // auto add receivers as subscribers for preemptively loaded pointers\n                // they don't have to explicitly subscribe to the pointer after it was loaded\n                if (ptr.is_origin && SCOPE.options.to) {\n                    for (const endpoint of Logical.collapse(SCOPE.options.to, Target)) {\n                        // should not happen\n                        if (!(endpoint instanceof Endpoint)) {\n                            logger.error(\"Not a valid endpoint:\" + endpoint);\n                            continue;\n                        }\n                        // subscribing to own pointers is not allowed\n                        // should not happen because pointers are not sent with preemptive loading to own endpoint anyway\n                        if (Runtime.endpoint.equals(endpoint) || endpoint.equals(LOCAL_ENDPOINT)) continue;\n                        logger.debug(\"auto subscribing \" + endpoint + \" to \" + ptr.idString());\n                        ptr.addSubscriber(endpoint);\n                    }\n                }\n\n            }\n            // just add normal pointer\n            else {\n                if (defer) {\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DEFER;\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n                    deferSizeIndex = SCOPE.b_index;\n                    SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n                }\n                Compiler.builder.addPointerNormal(SCOPE, id, ACTION_TYPE.GET, undefined, undefined, NOT_EXISTING); // sync\n                if (defer) SCOPE.data_view.setUint32(deferSizeIndex, SCOPE.b_index-deferSizeIndex-Uint32Array.BYTES_PER_ELEMENT, true);\n            }\n        },\n\n        addPointer: (p:Pointer, SCOPE:compiler_scope|extract_var_scope, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode):Promise<void>|void => {\n\n            // pointer get\n            if (SCOPE.options.inserted_ptrs && action_type == ACTION_TYPE.GET) SCOPE.options.inserted_ptrs.add(p)\n\n            // ignore value - insert void\n            if (p.value_initialized && p.val?.[DX_IGNORE]) {\n                Compiler.builder.addVoid(SCOPE);\n                return;\n            }\n\n            // pointer is sent to receiver, so he gets access (TODO: improve)\n            if (Runtime.OPTIONS.PROTECT_POINTERS) {\n                const receiver = Compiler.builder.getScopeReceiver(SCOPE);\n                if (receiver !== Runtime.endpoint) {\n                    if (receiver instanceof Endpoint) p.grantAccessTo(receiver)\n                    else if (receiver instanceof Disjunction) {\n                        for (const endpoint of receiver) {\n                            if (endpoint instanceof Endpoint) p.grantAccessTo(endpoint)\n                            else logger.error(\"Can't grant access to receiver:\" + endpoint);\n                        }\n                    }\n                    else logger.error(\"Can't grant access to receivers:\" + receiver);\n                }\n            }\n            \n            // pre extract per default\n            if ((<compiler_scope>SCOPE).extract_pointers && action_type == ACTION_TYPE.GET) {\n                Compiler.builder.insertExtractedVariable(<compiler_scope>SCOPE, BinaryCode.POINTER, buffer2hex(p.id_buffer));\n            }\n            // add normally\n            else return Compiler.builder.addPointerByID(SCOPE, p.id_buffer, action_type, action_specifier, undefined, NOT_EXISTING)\n        },\n\n        // add <Array>\n        addArray: (a:Array<any>, SCOPE:compiler_scope, is_root=true, parents:Set<any>=new Set(), unassigned_children:[number, any, number][]=[], start_index:[number]=[0]) => {\n    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = a instanceof Tuple ? BinaryCode.TUPLE_START : BinaryCode.ARRAY_START;\n\n            // trim array (don't send unnecessary empty elements)\n            const trimmed_length = Runtime.runtime_actions.getTrimmedArrayLength(a);\n\n            let parent_var:number|undefined;\n\n            // shadow object?\n            a = <Array<any>><unknown>Pointer.getByValue(a)?.shadow_object ?? a;\n\n            // iterate over array elements\n            for (let i = 0; i<trimmed_length; i++) {\n\n                let val = a[i];\n\n                // ignore in DATEX\n                if (val?.[DX_IGNORE]) {\n                    continue;\n                }\n            \n                // is recursive value?\n                if (SCOPE.inserted_values.has(val) && parents.has(val)) {\n                    // make sure variable for parent exists\n                    parent_var = parent_var ?? Compiler.builder.createInternalVariableAtIndex(start_index, SCOPE, a)\n                    // get variable for the already-existing value\n                    const value_index = SCOPE.inserted_values.get(val);\n                    const existing_val_var = val == a ? parent_var : Compiler.builder.createInternalVariableAtIndex(value_index, SCOPE, val)\n                    unassigned_children.push([parent_var, BigInt(i), existing_val_var])\n                    val = VOID; // insert void instead (array has to be filled at the right indices, need to insert some value at this index)\n                }\n                \n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT;  \n\n                // TODO: // compress multiple identical values (at least 4)\n                // if (i+4 < trimmed_length && a[i+1]===val && a[i+2]===val && a[i+3]===val && a[i+4]===val) {\n                //     const start = i;\n                //     let end = i+4;\n                //     for (end; end<trimmed_length; end++) {\n                //         if (a[end] !== val) break;\n                //     }\n                //     i = end;\n                //     // ...(var x = []; iterate (0..10)(x+=0);x)\n                //     /// ...(var x = [];\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EXTEND;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                //     Compiler.builder.insertVariable(SCOPE, SCOPE.internal_var_index++, ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ARRAY_START;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ARRAY_END;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n\n                //     // (#iterator = $$<Iterator>\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                //     Compiler.builder.insertVariable(SCOPE, SCOPE.internal_var_index++, ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ITERATOR;\n\n                //     // (start..end);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.RANGE;\n                //     Compiler.builder.addInt(BigInt(start), SCOPE);\n                //     Compiler.builder.addInt(BigInt(end), SCOPE);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n\n                //     Compiler.builder.addJmp(SCOPE,  BinaryCode.JFA);\n                //     // index-\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NEXT;\n                //     Compiler.builder.insertVariable(SCOPE, 'i', ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n\n\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n\n                //     console.log(\"compress\",val,start,end)\n                // }\n\n                Compiler.builder.insert(val, SCOPE, false, new Set(parents), unassigned_children); // shallow clone parents set\n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = a instanceof Tuple ? BinaryCode.TUPLE_END : BinaryCode.ARRAY_END;\n\n            if (is_root && unassigned_children.length) Compiler.builder.addChildrenAssignments(unassigned_children, SCOPE, start_index)\n        },\n\n        // add tuple\n        addTuple: (o:Tuple, SCOPE:compiler_scope, is_root=true, parents:Set<any>=new Set(), unassigned_children:[number, any, number][]=[], start_index:[number]=[0]) => {\n\n            const entries = o.entries();\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TUPLE_START;\n\n            let parent_var:number;\n        \n\n            for (const [key,val] of entries) {\n\n                if (o[INHERITED_PROPERTIES]?.has(key)) continue; // ignore inherited properties\n\n                // is recursive value?\n                if (SCOPE.inserted_values.has(val) && parents.has(val)) {\n                    // make sure variable for parent exists\n                    parent_var = parent_var ?? Compiler.builder.createInternalVariableAtIndex(start_index, SCOPE, o)\n                    // get variable for the already-existing value\n                    let value_index = SCOPE.inserted_values.get(val);\n                    let existing_val_var = val == o ? parent_var : Compiler.builder.createInternalVariableAtIndex(value_index, SCOPE, val)\n                    unassigned_children.push([parent_var, key, existing_val_var])\n                }\n                else {\n                    // non-key property (number index)\n                    if (typeof key == \"number\" || typeof key == \"bigint\") SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT; \n                    // key property\n                    else Compiler.builder.addKey(key, SCOPE);\n                    Compiler.builder.insert(val, SCOPE, false, new Set(parents), unassigned_children); // shallow clone parents set\n                }\n               \n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TUPLE_END;\n\n            if (is_root && unassigned_children.length) Compiler.builder.addChildrenAssignments(unassigned_children, SCOPE, start_index)\n        },\n\n        // add object or tuple\n        addObject: (o:Object, SCOPE:compiler_scope, is_root=true, parents:Set<any>=new Set(), unassigned_children:[number, any, number][]=[], start_index:[number]=[0], pointer?: Pointer) => {\n\n            const entries = Object.entries(Pointer.getByValue(o)?.shadow_object ?? o);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBJECT_START;\n\n            let parent_var:number;\n\n            for (let i = 0; i<entries.length; i++) {\n                const [key,val] = entries[i];\n\n                if (o[INHERITED_PROPERTIES]?.has(key)) continue; // ignore inherited properties\n\n                // is recursive value?\n                if (SCOPE.inserted_values.has(val) && parents.has(val)) {\n                    // make sure variable for parent exists\n                    parent_var = parent_var ?? Compiler.builder.createInternalVariableAtIndex(start_index, SCOPE, o)\n                    // get variable for the already-existing value\n                    const value_index = SCOPE.inserted_values.get(val);\n                    const existing_val_var = val == o ? parent_var : Compiler.builder.createInternalVariableAtIndex(value_index, SCOPE, val)\n                    unassigned_children.push([parent_var, key, existing_val_var])\n                }\n                else {\n                    Compiler.builder.addKey(key, SCOPE);\n                    // check if is getter property -> insert pointer\n                    if (pointer?.autoGetterProperties.has(key)) {\n                        val.handleLazyTransformInit();\n                        Compiler.builder.addPointer(val, SCOPE);\n                    }\n                    else {\n                        Compiler.builder.insert(val, SCOPE, false, new Set(parents), unassigned_children); // shallow clone parents set\n                    }\n                }\n               \n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBJECT_END;\n\n            if (is_root && unassigned_children.length) Compiler.builder.addChildrenAssignments(unassigned_children, SCOPE, start_index)\n        },\n\n        addChildrenAssignments: (unassigned_children:[number, any, number][], SCOPE:compiler_scope, root_start_index:[number]) => {\n            // adds __123.xy = _456 - if has recursive assignments\n            \n            Compiler.builder.insertByteAtIndex(BinaryCode.SUBSCOPE_START, root_start_index, SCOPE) // add (\n            for (const assignment of unassigned_children) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n                Compiler.builder.insertVariable(SCOPE, assignment[0], ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR); // parent\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_SET;\n                Compiler.builder.insert(assignment[1], SCOPE, true, undefined, undefined, false, false);  // insert key (don't save insert index for key value)\n                Compiler.builder.insertVariable(SCOPE, assignment[2], ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR); // value\n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;  // add )\n        },\n\n\n        check_perm_prefix: (SCOPE:compiler_scope) => {\n            // check if permission prefix (@xy x: ...)\n            // start index is either last comma index or scope start index if no comma\n            const start_index = (SCOPE.inner_scope.comma_indices ? SCOPE.inner_scope.comma_indices[SCOPE.inner_scope.comma_indices.length-1] : SCOPE.inner_scope.start_index) + 1;\n            const permission_prefix = (SCOPE.b_index - start_index) != 0 && SCOPE.uint8[SCOPE.b_index-1] != BinaryCode.CLOSE_AND_STORE; // not a permission_prefix if command before (;)\n\n            // console.log(start_index, SCOPE.inner_scope.comma_indices, SCOPE.b_index)\n\n            if (permission_prefix) {\n                // replace ELEMENT byte (is not an element, but a permission prefix)\n                if (SCOPE.uint8[start_index-1] == BinaryCode.ELEMENT) SCOPE.uint8[start_index-1] = BinaryCode.KEY_PERMISSION;\n                // else insert byte (start of object/tuple)\n                else Compiler.builder.insertByteAtIndex(BinaryCode.KEY_PERMISSION, start_index, SCOPE);\n            }\n            return permission_prefix;\n        },\n\n\n        // detect Record\n        detect_record: (SCOPE:compiler_scope) => {\n            if (SCOPE.inner_scope.parent_type==undefined || SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START) {\n                // last ( bracket can be replaced with record bracket (if no commands before)\n                if (SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START && !SCOPE.inner_scope.has_ce) {\n                    Compiler.builder.change_inner_scope_parent_type(SCOPE, BinaryCode.TUPLE_START)\n                }\n                // create new subscope\n                else {\n                    Compiler.builder.enter_subscope(SCOPE, BinaryCode.TUPLE_START);\n                    SCOPE.inner_scope.auto_close_scope = BinaryCode.TUPLE_END;\n                }\n            }\n        },\n\n        insert_exports: (SCOPE:compiler_scope) => {\n            if (SCOPE.uint8[SCOPE.b_index-1] != BinaryCode.CLOSE_AND_STORE) SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; // add ;\n            // TODO: use tuple, object just workaround for better compatibility\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBJECT_START;\n\n            for (const [key, int] of Object.entries(SCOPE.inner_scope.exports)) {\n                Compiler.builder.addKey(key, SCOPE);\n                Compiler.builder.insertVariable(SCOPE, int, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n            }\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBJECT_END;\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; \n        },\n\n        enter_subscope: (SCOPE:compiler_scope, type:BinaryCode|null = BinaryCode.SUBSCOPE_START, start_index?:number) => {\n\n            // update parent scope value indices\n            const parent_scope = SCOPE.subscopes[SCOPE.subscopes.length-1];\n            parent_scope.last_value_index = SCOPE.b_index;  // last 'value' in parent scope is the new scope\n            if (parent_scope.first_value_index == undefined) parent_scope.first_value_index = SCOPE.b_index;  // last 'value' in parent scope is the new scope\n            if ('value_count' in parent_scope) parent_scope.value_count--; // update value count\n\n\n            if (type !== null) {\n                // start at current position\n                if (start_index == undefined) {\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = type;\n                }\n                // start at another position (earlier)\n                else {\n                    Compiler.builder.insertByteAtIndex(type, start_index, SCOPE);\n                }\n            }\n\n            SCOPE.inner_scope = {\n                last_value_index: -1,\n                start_index: start_index !=undefined ? start_index : SCOPE.b_index-1,\n                wait_for_add: false,\n                in_template_string: false,\n                path_info_index: -1,\n                parent_type: type,\n                vars: Object.create(parent_scope?.vars??{}),\n                loop_start: parent_scope.loop_start // copy information from outer loop until overriden\n            };\n            SCOPE.subscopes.push(SCOPE.inner_scope);\n        },\n\n        has_open_subscopes: (SCOPE:compiler_scope) => {\n            // check for missing object brackets\n            for (const scope of SCOPE.subscopes) {\n                if (scope.parent_type == BinaryCode.OBJECT_START) return true;\n                if (scope.parent_type == BinaryCode.ARRAY_START) return true;\n                if (scope.parent_type == BinaryCode.SUBSCOPE_START) return true;\n            }\n            return false;\n        },\n\n        exit_subscope: (SCOPE:compiler_scope, type:BinaryCode = BinaryCode.SUBSCOPE_END) => {\n\n\n            // auto-close subscopes here?\n            while (SCOPE.inner_scope.auto_close_scope!=undefined) {\n                const type = SCOPE.inner_scope.auto_close_scope;\n                delete SCOPE.inner_scope.auto_close_scope;\n                Compiler.builder.exit_subscope(SCOPE, type);\n            }\n\n\n            \n            // check if code block close after outer ')'\n            if (type == BinaryCode.SUBSCOPE_END && SCOPE._code_block_type==1 && SCOPE.subscopes.length == 1) {\n                SCOPE.end = true;\n                return true;\n            } \n\n            // override subscope with tuple/record end bracket\n            if (SCOPE.inner_scope.parent_type == BinaryCode.TUPLE_START && type == BinaryCode.SUBSCOPE_END) type = BinaryCode.TUPLE_END;\n\n            if (SCOPE.inner_scope.parent_type == BinaryCode.OBJECT_START && type != BinaryCode.OBJECT_END) throw new SyntaxError(\"Missing closing object bracket\");\n            if (SCOPE.inner_scope.parent_type == BinaryCode.ARRAY_START && type != BinaryCode.ARRAY_END)  throw new SyntaxError(\"Missing closing array bracket\");\n            if (SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START && type != BinaryCode.SUBSCOPE_END)  throw new SyntaxError(\"Missing closing bracket\");\n\n            // cannot close subscope (already in outer scope)\n            if (SCOPE.subscopes.length == 1) {\n                if (type == BinaryCode.OBJECT_END) throw new SyntaxError(\"Invalid closing object bracket\");\n                if (type == BinaryCode.ARRAY_END)  throw new SyntaxError(\"Invalid closing array bracket\");\n                if (type == BinaryCode.SUBSCOPE_END)  throw new SyntaxError(\"Invalid closing bracket\");\n            }\n\n            // exports\n            if (SCOPE.inner_scope.exports) Compiler.builder.insert_exports(SCOPE);\n\n            if (type !== null) {\n\n                // override trailing comma(s) if <Array>, <Tuple>, <Record> or <Object>\n                if (SCOPE.inner_scope.comma_indices?.length && type !== BinaryCode.SUBSCOPE_END) {\n                    let _comma_index:number | undefined;\n                    while ((_comma_index = SCOPE.inner_scope.comma_indices.pop()) == SCOPE.b_index-1) SCOPE.b_index--;\n                }\n                \n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = type;\n            }\n\n\n\n            SCOPE.subscopes.pop();\n            SCOPE.inner_scope = SCOPE.subscopes[SCOPE.subscopes.length-1];\n        },\n\n        change_inner_scope_parent_type: (SCOPE:compiler_scope, type:BinaryCode = BinaryCode.TUPLE_START) => {\n            SCOPE.inner_scope.parent_type = type;\n            SCOPE.uint8[SCOPE.inner_scope.start_index] = type;\n        },\n\n        // \\n -> \\u00A,  \\ -> '',  \\\\ -> \\\n        unescape_string: (str:string):string => str\n            // special escape characters\n            .replace(Regex.ESCAPE_BACKSPACE, '\\b') \n            .replace(Regex.ESCAPE_LINE_FEED, '\\n')\n            .replace(Regex.ESCAPE_FORM_FEED, '\\f')\n            .replace(Regex.ESCAPE_CARRIAGE_RETURN, '\\r')\n            .replace(Regex.ESCAPE_HORIZONTAL_TAB, '\\t')\n            .replace(Regex.ESCAPE_VERTICAL_TAB, '\\v')\n            \n            .replace(Regex.ESCAPE_OCTAL, (_,x)=>{  // \\nnn\n                let code = parseInt(x,8);\n                if (code >= 256) return x; // max octal representation, just return string (TODO not properly handled, should return valid part of octal escape code)\n                return String.fromCharCode(code)\n            })\n            .replace(Regex.ESCAPE_UNICODE, (_,x)=>{  // \\unnnn\n                let code = parseInt(x,16);\n                if (isNaN(code) || x.length!=4 || !x.match(Regex.HEX_STRING)) throw new SyntaxError(\"Invalid Unicode escape sequence\");\n                return String.fromCharCode(code)\n            })\n            .replace(Regex.ESCAPE_HEX, (_,x)=>{  // \\xnn\n                let code = parseInt(x,16);\n                if (isNaN(code) || x.length!=2 || !x.match(Regex.HEX_STRING)) throw new SyntaxError(\"Invalid hexadecimal escape sequence\");\n                return String.fromCharCode(code)\n            })\n            // ignore all other sequences, just return the character\n            .replace(Regex.ESCAPE_SEQUENCE, '$1'),\n\n\n        // serialize values, but use cached values for this scope\n        serializeValue: (v:any, SCOPE:compiler_scope):any => {\n            if (SCOPE.serialized_values.has(v)) return SCOPE.serialized_values.get(v);\n            else {\n                const receiver = Compiler.builder.getScopeReceiver(SCOPE);\n                const s = Runtime.serializeValue(v, receiver);\n                SCOPE.serialized_values.set(v,s);\n                return s;\n            }\n        },\n        \n        getScopeReceiver: (SCOPE: compiler_scope) => {\n            let receiver:target_clause = Runtime.endpoint;\n            let options:compiler_options | undefined = SCOPE.options;\n            while(options) {\n                if (options.to) {\n                    receiver = options.to as target_clause;\n                    break;\n                }\n                options = options.parent_scope?.options;\n            }\n            if (!SCOPE.options?.to) SCOPE.options.to = receiver;\n            return receiver;\n        },\n\n        // // insert Maybe\n        // insertMaybe: async (maybe:Maybe, SCOPE:compiler_scope) => {\n\n        // },\n\n        insert_transform_scope: (SCOPE: compiler_scope|extract_var_scope, transform_scope: Scope<any>) => {\n            const compiled = transform_scope.compiled;\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TRANSFORM;\n\n            for (const v of transform_scope.internal_vars) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                Compiler.builder.insert(v, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n            }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT+compiled.byteLength, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n            SCOPE.data_view.setUint32(SCOPE.b_index, compiled.byteLength, true);\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT\n            SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index)\n            SCOPE.b_index += compiled.byteLength;\n        },\n\n\n        // insert any value besides Maybes\n\n        insert: (value:any, SCOPE:compiler_scope, is_root=true, parents?:Set<any>, unassigned_children?:[number, any, number][], replace_optimization = true, register_insert_index = true) => {\n\n            let forceCollapse = false;\n\n            if (value?.[DX_REPLACE]) value = value[DX_REPLACE];\n            if (value?.[DX_RETURN_POINTER_VALUE]) {\n                forceCollapse = true;\n                value = value[DX_RETURN_POINTER_VALUE];\n            }\n\n            const indirectReferencePtr = (value instanceof Pointer && value.indirectReference) ? true : false;\n\n            // make sure normal pointers are collapsed (ignore error if uninitialized pointer is passed in)\n            try {\n                value = ReactiveValue.collapseValue(value);\n            }\n            catch {}\n\n            const receiver = Compiler.builder.getScopeReceiver(SCOPE);\n            // bound local slot? (eg. #env) - only when sending to remote\n            const toRemote = receiver && receiver!==Runtime.endpoint && receiver !== LOCAL_ENDPOINT;\n\n            if (toRemote && value?.[DX_BOUND_LOCAL_SLOT]) {\n                const v_name = value[DX_BOUND_LOCAL_SLOT];\n                if (typeof v_name !== \"string\") throw new Error(\"Invalid DX_BOUND_LOCAL_SLOT, must be of type string\");\n                const mapped = Compiler.builder.mapInternalVarNameToByteCode(v_name, ACTION_TYPE.GET, SCOPE);\n                if (typeof mapped == \"number\") {\n                    Compiler.builder.insertVariable(SCOPE, undefined, ACTION_TYPE.GET, undefined, mapped);\n                }\n                else {\n                    throw new Error(\"Invalid DX_BOUND_LOCAL_SLOT: \" + v_name);\n                }\n                return;\n            }\n            // bound pointer property (eg. #env->LANG) - only when sending to remote\n            if (toRemote && value instanceof PointerProperty && value.pointer.val?.[DX_BOUND_LOCAL_SLOT]) {\n                const v_name = value.pointer.val?.[DX_BOUND_LOCAL_SLOT];\n                if (typeof v_name !== \"string\") throw new Error(\"Invalid DX_BOUND_LOCAL_SLOT, must be of type string\");\n                const mapped = Compiler.builder.mapInternalVarNameToByteCode(v_name, ACTION_TYPE.GET, SCOPE);\n                if (typeof mapped == \"number\") {\n                    Compiler.builder.insertVariable(SCOPE, undefined, ACTION_TYPE.GET, undefined, mapped);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_GET_REF\n                    Compiler.builder.insert(value.key, SCOPE, undefined, undefined, undefined, undefined, false);\n                }\n                else {\n                    throw new Error(\"Invalid DX_BOUND_LOCAL_SLOT: \" + v_name);\n                }\n                return;\n            }\n\n\n            // handle <Stream> and ReadableStream, if streaming (<<)\n            if ((value instanceof Stream || value instanceof ReadableStream) && SCOPE.uint8[SCOPE.b_index-1] == BinaryCode.STREAM) return Compiler.builder.handleStream(value, SCOPE); \n\n            // same value already inserted -> refer to the value with an internal variable\n            if (replace_optimization && SCOPE.inserted_values?.has(value)) {\n                // get variable for the already-existing value\n                const value_index = SCOPE.inserted_values.get(value)!;\n                const existing_val_var = Compiler.builder.createInternalVariableAtIndex(value_index, SCOPE, value)\n                // set internal var at current index\n                Compiler.builder.insertVariable(SCOPE, existing_val_var, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                SCOPE.options._first_insert_done = true;\n                return;\n            }\n    \n            // get dynamic index for start of value\n            const start_index = Compiler.builder.getDynamicIndex(SCOPE.b_index, SCOPE);\n\n            // add original value to inserted values map (only if useful, exclude short values like boolean and null)\n            if (register_insert_index && !indirectReferencePtr && !(SCOPE.options.no_duplicate_value_optimization && \n                (typeof value == \"bigint\" || typeof value == \"number\" || typeof value == \"string\")) && value!==VOID && \n                value !==null && \n                typeof value != \"boolean\" &&\n                !((typeof value == \"bigint\" || typeof value == \"number\") && value<=Compiler.MAX_INT_32 && value>=Compiler.MIN_INT_32)\n            ) {\n                SCOPE.inserted_values.set(value, start_index) \n            }\n\n            let type:Type|undefined\n            const original_value = value;\n \n            // exception for functions: convert to Datex.Function & create Pointer reference (proxifyValue required!)\n            if (value instanceof Function && !(value instanceof DatexFunction) && !(value instanceof JSTransferableFunction)) value = Pointer.proxifyValue(DatexFunction.createFromJSFunction(value));\n\n            // excpetion for MediaStream: always register as WebRTC mediastream when transmitting\n            if (globalThis.MediaStream && value instanceof MediaStream) {\n                if (!WebRTCInterface) throw new Error(\"Cannot bind MediaStream to WebRTCInterface (not yet initialized)\")\n                WebRTCInterface.registerMediaStream(value);\n            }\n\n            // streams: always create pointer binding\n            if (value instanceof Stream) value = Pointer.proxifyValue(value);\n\n            // exception for Date: convert to Time (TODO: different approach?)\n            if (value instanceof Date && !(value instanceof Time)) {\n                try {\n                    value = new Time(value);\n                }\n                catch (e) {\n                    console.log(\"failed to convert Date to Time\",e);\n                }\n            }\n\n            // is not a Datex.Error -> convert to Datex.Error\n            if (value instanceof Error && !(value instanceof DatexError)) {\n                value = DatexError.fromJSError(value);\n            }\n\n            // proxify to pointer \n            value = Pointer.pointerifyValue(value);\n\n            const skip_first_collapse = !SCOPE.options._first_insert_done&&SCOPE.options.collapse_first_inserted;\n\n            const option_collapse = forceCollapse || SCOPE.options.collapse_pointers && !(SCOPE.options.keep_external_pointers && value instanceof Pointer && !value.is_origin);\n            const no_proxify = value instanceof ReactiveValue && (((value instanceof Pointer && value.is_anonymous) || option_collapse) || skip_first_collapse);\n\n            // proxify pointer exceptions:\n            if (no_proxify) {\n               \n                // handle pointers with transform (always ...)\n \n                // only if not ignore_first_collapse or, if ignore_first_collapse and keep_first_transform is enabled\n                if (!SCOPE.options.no_create_pointers && value instanceof Pointer && (value.force_local_transform || !skip_first_collapse || SCOPE.options.keep_first_transform)) {\n                    \n                    if (value.transform_scope) {\n                        SCOPE.options._first_insert_done = true; // set to true before next insert\n                        Compiler.builder.insert_transform_scope(SCOPE, value.transform_scope);\n                        return;\n                    }\n\n                    else if (value.smart_transform_method) {\n                        console.warn(\"DATEX serialization of JS transforms is not yet supported: \", value.smart_transform_method.toString())\n                        // TODO:\n                        // const isTransferableFn = value.smart_transform_method instanceof JSTransferableFunction;\n                        // const transferableFn = isTransferableFn ? value.smart_transform_method as unknown as JSTransferableFunction : JSTransferableFunction.create(value.smart_transform_method);\n                        // if (!isTransferableFn) transferableFn.source = `() => always(${transferableFn.source})`;\n\n                        // value.smart_transform_method = transferableFn;\n                        // Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n                        // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                        // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n                        // Compiler.builder.insert(transferableFn, SCOPE, is_root, parents, unassigned_children);\n                        // Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n                        // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                        // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.VOID;\n                        // return;\n                    }\n                    \n                }\n\n                // indirect reference pointer\n                if (indirectReferencePtr) {\n                    SCOPE.options._first_insert_done = true;\n                    Compiler.builder.insert(ReactiveValue.collapseValue(value, true), SCOPE, is_root, parents, unassigned_children);\n                    return;\n                }\n\n\n                value = value.val; // don't proxify anonymous pointers or serialize ptr\n                // add $$ operator, not if no_create_pointers enabled or skip_first_collapse or forceCollapse\n                if (option_collapse && !forceCollapse && !SCOPE.options.no_create_pointers && !skip_first_collapse) SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n            }\n\n            // temporary to find errors: throw if a cloned html element without a unique ptr id\n            if (globalThis.HTMLElement && value instanceof HTMLElement && value.hasAttribute(\"uix-ptr\") && !(value as any)[DX_PTR]) console.error(\"Invalid cloned HTMLElement \" + value.tagName + (value.hasAttribute(\"id\")?\"#\"+value.getAttribute(\"id\"):\"\"));\n\n\n            // first value was collapsed (if no_proxify == false, it was still collapsed because it's not a pointer reference)\n            // if (SCOPE.options.collapse_first_inserted)  SCOPE.options.collapse_first_inserted = false; // reset\n            SCOPE.options._first_insert_done = true;\n                \n            // serialize if not pointer\n            if (!(value instanceof Pointer)) {\n                // Check for Complex types\n                // get datex type first\n                type = Type.ofValue(value);\n                \n                if (!type) throw new ValueError(\"Cannot get type for value \" + value)\n\n                // convert to <type> + serialized object ; also always for type variations\n                // exception for explicit type quantity, type variation is always included in primitive representation without explicit cast\n                if (type?.is_complex || type.root_type !== type && !Type.std.quantity.matchesType(type)) {\n                    Compiler.builder.addTypeByNamespaceAndName(SCOPE, type.namespace, type.name, type.variation, type.parameters, type.jsTypeDefModule);\n                    value = Compiler.builder.serializeValue(value, SCOPE);\n                }\n                else if (type?.serializable_not_complex) { // for UintArray Buffers\n                    value = Compiler.builder.serializeValue(value, SCOPE);\n                }\n\n                // try to proxify serialized value again to pointer (proxify exceptions!) \n                if (!no_proxify) value = Pointer.pointerifyValue(value);\n            }\n\n            // ignore value - insert void\n            if (value?.[DX_IGNORE]) {\n                Compiler.builder.addVoid(SCOPE);\n            }\n            \n            // only fundamentals here:\n            else if (value instanceof Quantity)              Compiler.builder.addQuantity(value, SCOPE); // UNIT\n            else if (value===VOID)                           Compiler.builder.addVoid(SCOPE); // Datex.VOID\n            else if (value===null)                           Compiler.builder.addNull(SCOPE); // NULL\n            else if (typeof value == 'bigint')               Compiler.builder.addInt(value, SCOPE); // INT\n            else if (typeof value == 'number')               Compiler.builder.addFloat(value, SCOPE); // FLOAT\n            else if (typeof value == \"string\")               Compiler.builder.addText(value, SCOPE); // STRING\n            else if (typeof value == \"boolean\")              Compiler.builder.addBoolean(value, SCOPE); // BOOLEAN\n            else if (value instanceof URL)                   Compiler.builder.addUrl(value.href, SCOPE); // URL\n            else if (value instanceof Time)                  Compiler.builder.addTime(value, SCOPE); // Time\n            else if (value instanceof Disjunction)           Compiler.builder.addDisjunction(value, SCOPE); // |\n            else if (value instanceof Conjunction)           Compiler.builder.addConjunction(value, SCOPE); // &\n            else if (value instanceof Negation) {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT; \n                Compiler.builder.insert(value.not(), SCOPE, is_root, parents, unassigned_children); // shallow clone parents set\n            }\n            else if (value instanceof DatexResponse) {\n                // raw datex script response not allowed in insert method, must use async compilerInsert method\n                if (!(value.datex instanceof Scope)) throw new CompilerError(\"Insertion of non-compiled raw DATEX Response currently not possible when using optimized (synchronous) DATEX compilation\");\n                else Compiler.builder.insertScopeBlock(BinaryCode.DO, value.datex, SCOPE);\n            }\n\n            else if (value instanceof PointerProperty) {\n                const _SCOPE = SCOPE.extract_pointers ? SCOPE.extract_var_scope! : SCOPE;\n                // $pointer\n                Compiler.builder.addPointer(value.pointer, _SCOPE);\n                // ->\n                Compiler.builder.handleRequiredBufferSize(_SCOPE.b_index, _SCOPE);\n                _SCOPE.inner_scope.path_info_index = _SCOPE.b_index++;\n                _SCOPE.uint8[_SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_GET_REF;\n                // key\n                Compiler.builder.insert(value.key, <compiler_scope>_SCOPE, undefined, undefined, undefined, undefined, false); // TODO cast to compiler_scope might ignore uninitialized scope properties\n                \n                // insert injected var if extract pointers\n                if (SCOPE.extract_pointers) {\n                    const index = SCOPE.extract_var_index!++;\n                    Compiler.builder.insertVariable(SCOPE, index, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                }\n            \n            }\n            else if (value instanceof Pointer)      {\n                // pointer action follows (if not a path property)?\n                if (SCOPE.inner_scope.path_info_index == -1) {\n                    let m:RegExpMatchArray|null;\n                    let action_type:ACTION_TYPE = ACTION_TYPE.GET;\n                    let action_specifier:number|undefined = undefined;\n                    SCOPE.datex = SCOPE.datex?.replace(/^[^\\S\\n]+/, \"\"); // clear whitespaces\n                    // match =, +=, -=\n                    if ((m = SCOPE.datex?.match(Regex.ASSIGN_SET)) && SCOPE.datex[1]!=\"=\") { // make sure it is '=', not '=='\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.SET;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_ADD)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.ADD;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_SUB)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.SUBTRACT;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_MUTIPLY)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.MULTIPLY;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_DIVIDE)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.DIVIDE;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_AND)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.AND;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_OR)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.OR;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_REFERENCE)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.CREATE_POINTER;\n                    }\n                    Compiler.builder.addPointer(value, SCOPE, action_type, action_specifier); // POINTER (assignment)\n                }\n                else {\n                    Compiler.builder.addPointer(value, SCOPE); // POINTER\n                }\n            }\n            else if (value instanceof WildcardTarget)   Compiler.builder.addTarget(value.target, SCOPE); // Filter Target: ORG, APP, LABEL, ALIAS\n            else if (value instanceof Endpoint)         Compiler.builder.addTarget(value, SCOPE); // Filter Target: ORG, APP, LABEL, ALIAS\n            else if (value instanceof Type) {\n                Compiler.builder.addTypeByNamespaceAndName(SCOPE, value.namespace, value.name, value.variation, value.parameters, value.jsTypeDefModule); // Type\n            }\n            else if (value instanceof Uint8Array)        Compiler.builder.addBuffer(value, SCOPE); // Uint8Array\n            else if (value instanceof ArrayBuffer)       Compiler.builder.addBuffer(new Uint8Array(value), SCOPE); // Buffer\n            else if (value instanceof Scope) { // Datex Scope\n                // insert scope block\n                Compiler.builder.insertScopeBlock(BinaryCode.PLAIN_SCOPE, value, SCOPE);\n            }\n\n            // complex objects (with recursion)\n            else if (value instanceof Array) { \n\n                // byte array (optimized)\n                if (type?.variation == \"8\") Compiler.builder.addBuffer(new Uint8Array(new Int8Array(value).buffer), SCOPE);\n                else if (type?.variation == \"16\") Compiler.builder.addBuffer(new Uint8Array(new Int16Array(value).buffer), SCOPE);\n                else if (type?.variation == \"32\") Compiler.builder.addBuffer(new Uint8Array(new Int32Array(value).buffer), SCOPE);\n                else if (type?.variation == \"64\") Compiler.builder.addBuffer(new Uint8Array(new BigInt64Array(value).buffer), SCOPE);\n                else if (type?.variation == \"u8\") Compiler.builder.addBuffer(new Uint8Array(value), SCOPE);\n                else if (type?.variation == \"u16\") Compiler.builder.addBuffer(new Uint8Array(new Uint16Array(value).buffer), SCOPE);\n                else if (type?.variation == \"u32\") Compiler.builder.addBuffer(new Uint8Array(new Uint32Array(value).buffer), SCOPE);\n                else if (type?.variation == \"u64\") Compiler.builder.addBuffer(new Uint8Array(new BigUint64Array(value).buffer), SCOPE);\n\n                // normal array\n                else {\n                    // add current value to parents list\n                    if (!parents) parents = new Set();\n                    parents.add(original_value);\n                    Compiler.builder.addArray(value, SCOPE, is_root, parents, unassigned_children, start_index);\n                }\n            } \n            else if (value instanceof Tuple)  {\n                // add current value to parents list\n                if (!parents) parents = new Set();\n                parents.add(original_value);         \n                Compiler.builder.addTuple(value, SCOPE, is_root, parents, unassigned_children, start_index);\n            }\n            else if (typeof value == \"object\")  {\n                // add current value to parents list\n                if (!parents) parents = new Set();\n                parents.add(original_value);       \n                Compiler.builder.addObject(value, SCOPE, is_root, parents, unassigned_children, start_index, Pointer.getByValue(original_value));\n            }\n\n            // convert symbols to Datex.VOID (not supported) TODO create pointers for symbols (custom class)?\n            else if (typeof value == \"symbol\") {\n                Compiler.builder.addVoid(SCOPE); // Datex.VOID\n            }\n            else {\n                console.error(\"Unsupported native value\", value);\n                throw new ValueError(\"Failed to compile an unsupported native type\")\n            }\n\n            // add extended values\n            // TODO handle correctly when extending frozen object\n            // first add extended objects if extended object\n            if (value?.[EXTENDED_OBJECTS]) {\n                for (let ext of value[EXTENDED_OBJECTS]||[]){\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.AND;\n                    Compiler.builder.insert(ext, SCOPE, is_root, parents, unassigned_children); // shallow clone parents set\n                }\n            }\n        },\n\n        mapInternalVarNameToByteCode: (v_name: string, action_type: ACTION_TYPE, SCOPE: compiler_scope) => {\n            if (v_name == \"result\") return BinaryCode.VAR_RESULT\n            else if (v_name == \"sub_result\") return BinaryCode.VAR_SUB_RESULT\n            else if (v_name == \"_origin\") return BinaryCode._VAR_ORIGIN\n            else if (v_name == \"it\") return BinaryCode.VAR_IT\n            else if (v_name == \"void\") return BinaryCode.VAR_VOID\n\n            else if (v_name == \"origin\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #origin\", SCOPE.stack); return BinaryCode.VAR_ORIGIN}\n            else if (v_name == \"endpoint\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #endpoint\", SCOPE.stack); return BinaryCode.VAR_ENDPOINT}\n            else if (v_name == \"location\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #location\", SCOPE.stack); return BinaryCode.VAR_LOCATION}\n            else if (v_name == \"env\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #env\", SCOPE.stack); return BinaryCode.VAR_ENV}\n            // else if (v_name == \"timestamp\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #timestamp\", SCOPE.stack); base_type = BinaryCode.VAR_TIMESTAMP; v_name = undefined}\n            // else if (v_name == \"encrypted\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #encrypted\", SCOPE.stack); base_type = BinaryCode.VAR_ENCRYPTED; v_name = undefined}\n            // else if (v_name == \"signed\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #signed\", SCOPE.stack); base_type = BinaryCode.VAR_SIGNED; v_name = undefined}\n            else if (v_name == \"meta\") {  if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #meta\", SCOPE.stack); return BinaryCode.VAR_META}\n            else if (v_name == \"public\") {  if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #public\", SCOPE.stack); return BinaryCode.VAR_PUBLIC}\n            else if (v_name == \"this\") {  if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #this\", SCOPE.stack); return BinaryCode.VAR_THIS}\n            else if (v_name == \"remote\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #remote\", SCOPE.stack); return BinaryCode.VAR_REMOTE}\n            else if (v_name == \"entrypoint\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #entrypoint\", SCOPE.stack); return BinaryCode.VAR_ENTRYPOINT}\n            else if (v_name == \"std\") {  if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #std\", SCOPE.stack); return BinaryCode.VAR_STD}\n\n            return v_name;\n        }\n\n    }\n\n\n    static async parseNextExpression (SCOPE:compiler_scope) {\n        let m:RegExpMatchArray|null;\n\n        const last_command_end = SCOPE.last_command_end; // remember last command\n\n        SCOPE.datex = SCOPE.datex.replace(/^[^\\S\\n]+/, \"\"); //(/^[^\\S\\r\\n]+/\n        SCOPE.last_command_end = false; // reset 'last command was ;'\n        \n        let isEffectiveValue = false;\n\n        // END \n        if (!SCOPE.datex) {\n            SCOPE.end = true;\n            SCOPE.last_command_end = last_command_end; // last command still valid\n        }\n\n        else if (m = SCOPE.datex.match(Regex.URL)) {   \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const url = m[0].replace(/\\\\(.)/, '$1')\n            Compiler.builder.addUrl(url, SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // SEPERATOR\n        else if (m = SCOPE.datex.match(Regex.SEPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n        }\n\n        // INSERT data (?)\n        else if (m = SCOPE.datex.match(Regex.INSERT)) {     \n            SCOPE.datex = SCOPE.datex.substring(m[0].length); \n\n            if (SCOPE.current_data_index == undefined) SCOPE.current_data_index = 0;\n\n            const d_index = m[1] ? parseInt(m[1]) : SCOPE.current_data_index++;\n\n            // precompiling, don't insert a value\n            if (SCOPE.precompiled) {\n                // add buffer if not size 0\n                if (SCOPE.b_index-(SCOPE.last_precompiled??0) != 0) SCOPE.precompiled.appendBufferPlaceholder(SCOPE.last_precompiled??0,SCOPE.b_index);\n                SCOPE.precompiled.appendDataIndex(d_index);\n                SCOPE.last_precompiled = SCOPE.b_index;\n                return;\n            }\n\n            else {\n                const d = SCOPE.data?.[d_index];\n\n                // special exception: insert raw datex script (dxb Scope can be inserted normally (synchronous))\n                if (d instanceof DatexResponse && !(d.datex instanceof Scope)) await Compiler.builder.compilerInsert(SCOPE, d);\n                else Compiler.builder.insert(d, SCOPE, undefined, undefined, undefined, undefined, false); // disable replace optimization for now to prevent invalid replacement, e.g. for path properties\n            }\n            isEffectiveValue = true;\n        }\n         \n        /**\n         * INSERT inline command\n         * value resolution similar to 'get'\n         *   * resolves URL value\n         *   * resolve endpoint #default\n         *   * inserts scope as script code\n         * Similar to 'compile get', but actual datex script execution happens on receiver endpoint(s)\n         */\n\n        else if (m = SCOPE.datex.match(Regex.INSERT_COMMAND)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            // COMPILE:\n            // TODO add a 'return' command somehow\n            const return_data:{datex:string} = {datex: SCOPE.datex};\n    \n            // create compiler scope first time\n            if (!SCOPE.compile_compiler_scope) {\n                SCOPE.compile_compiler_scope = this.createCompilerScope(return_data, SCOPE.data, {}, false, false, false, undefined, Infinity, m[1]?1:2, SCOPE.current_data_index)\n            }\n            // reset scope for next DATEX script snippet\n            else {\n                this.resetScope(SCOPE.compile_compiler_scope, return_data, m[1]?1:2);\n            }\n            // compile snippet in compiler scope\n            const compiled = <ArrayBuffer> await this.compileLoop(SCOPE.compile_compiler_scope);\n            // update position in current datex script\n            //console.log(\"new datex\",return_data.datex)\n            SCOPE.datex = return_data.datex;\n\n\n            // RUN:\n\n            try {\n                // create datex scope to run\n                if (!SCOPE.compile_datex_scope) {\n                    SCOPE.compile_datex_scope = Runtime.createNewInitialScope(undefined, undefined, undefined, undefined, SCOPE.options.context_location, true);\n                }\n                // set dxb as scope buffer\n                Runtime.updateScope(SCOPE.compile_datex_scope, compiled, {sender:Runtime.endpoint, executable:true})\n                \n                // execute scope -> get script from path                \n                const value = await Runtime.simpleScopeExecution(SCOPE.compile_datex_scope);\n                // insert\n                await Compiler.builder.compilerInsert(SCOPE, value);\n\n            } catch (e) {\n                if (e instanceof DatexError) e.pushToStack(...SCOPE.stack);\n                throw e;\n            }\n     \n        }\n\n        // COMPILE inline script\n        // run at compile time\n        // insert values literally, but collapse pointer references\n        else if (m = SCOPE.datex.match(Regex.COMPILE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n\n            // COMPILE:\n            // compiles and injects result directly\n            // if value is scope, the compiled scope value is injected\n            // TODO add a 'return' command somehow\n            let return_data:{datex:string} = {datex: SCOPE.datex};\n    \n            // create compiler scope first time\n            if (!SCOPE.compile_compiler_scope) {\n                SCOPE.compile_compiler_scope = this.createCompilerScope(return_data, SCOPE.data, {}, false, false, false, undefined, Infinity, !!m[1]?1:2, SCOPE.current_data_index)\n            }\n            // reset scope for next DATEX script snippet\n            else {\n                this.resetScope(SCOPE.compile_compiler_scope, return_data, !!m[1]?1:2);\n            }\n            // compile snippet in compiler scope\n            let compiled = <ArrayBuffer> await this.compileLoop(SCOPE.compile_compiler_scope);\n            // update position in current datex script\n            //console.log(\"new datex\",return_data.datex)\n            SCOPE.datex = return_data.datex;\n\n            try {\n                // create datex scope to run\n                if (!SCOPE.compile_datex_scope) {\n                    SCOPE.compile_datex_scope = Runtime.createNewInitialScope(undefined, undefined, undefined, undefined, SCOPE.options.context_location, true);\n                }\n                // set dxb as scope buffer\n                Runtime.updateScope(SCOPE.compile_datex_scope, compiled, {sender:Runtime.endpoint, executable:true})\n                \n                // execute scope -> get script from path\n                let value:any\n                \n                value = await Runtime.simpleScopeExecution(SCOPE.compile_datex_scope)\n\n                // already compiled in <Scope>\n                if (value instanceof Scope) {\n                    let compiled_script = value.compiled;\n\n                    // add scope header\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DO;\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n                    SCOPE.data_view.setUint32(SCOPE.b_index, compiled_script.byteLength, true);\n                    SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+10+compiled_script.byteLength, SCOPE);\n                    SCOPE.uint8.set(new Uint8Array(compiled_script), SCOPE.b_index)\n                    SCOPE.b_index += compiled_script.byteLength;\n                }\n                else Compiler.builder.insert(value, SCOPE);\n\n            } catch (e) {\n                    if (e instanceof DatexError) e.pushToStack(...SCOPE.stack);\n                    throw e;\n            }\n\n        }\n\n        // KEY  (check before variable and keywords!, only if not in :: filter)\n        else if (m = SCOPE.datex.match(Regex.KEY)) {   \n            //if (SCOPE.inner_scope.parent_type == BinaryCode.ARRAY_START) throw new SyntaxError(\"Invalid key in <Array>\");\n            // // convert tuple to record\n            // if (SCOPE.inner_scope.parent_type == BinaryCode.TUPLE_START) DatexCompiler.builder.change_inner_scope_parent_type(SCOPE, BinaryCode.RECORD_START)\n            // if (SCOPE.inner_scope.auto_close_scope == BinaryCode.TUPLE_END) SCOPE.inner_scope.auto_close_scope = BinaryCode.RECORD_END;\n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            const key = m[0].substring(0,m[0].length-1).trim(); // get key\n            const int_key = Number.isInteger(Number(key)) ? Number(key) : null;\n\n            // check/add  permission prefix (@xy x: ...)\n            const permission_prefix = false // TODO: Compiler.builder.check_perm_prefix(SCOPE);\n\n            // override current BinaryCode.ELEMENT\n            if (!permission_prefix && SCOPE.inner_scope.first_element_pos!=undefined) SCOPE.b_index = SCOPE.inner_scope.first_element_pos;\n\n            Compiler.builder.detect_record(SCOPE);\n\n            if (key.startsWith(\"#\")) Compiler.builder.addObjectSlot(key.slice(1), SCOPE); // object slot\n            else Compiler.builder.addKey(int_key??key, SCOPE); // normal key\n\n            isEffectiveValue = true;\n        }\n\n\n        // EXIT\n        else if (m = SCOPE.datex.match(Regex.EXIT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EXIT;\n        }\n\n        // RESOLVE\n        else if (m = SCOPE.datex.match(Regex.GET)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n        }\n\n        // COUNT\n        else if (m = SCOPE.datex.match(Regex.COUNT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.COUNT;\n        }\n\n        // ABOUT\n        else if (m = SCOPE.datex.match(Regex.ABOUT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ABOUT;\n        }\n\n        // RETURN\n        else if (m = SCOPE.datex.match(Regex.RETURN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.RETURN;\n        }\n\n        // ITERATOR\n        else if (m = SCOPE.datex.match(Regex.ITERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ITERATOR;\n        }\n\n        // SKIP\n        else if (m = SCOPE.datex.match(Regex.SKIP)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            if (!('loop_start' in  SCOPE.inner_scope)) throw new CompilerError(\"Invalid 'skip' command\", SCOPE.stack);\n            Compiler.builder.addJmp(SCOPE, BinaryCode.JMP, SCOPE.inner_scope.loop_start);\n            Compiler.builder.valueIndex(SCOPE);\n        }\n\n        // LEAVE\n        else if (m = SCOPE.datex.match(Regex.LEAVE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // TODO jump to end\n        }\n\n        // ITERATE\n        else if (m = SCOPE.datex.match(Regex.ITERATE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.inner_scope.iterate = 0;\n            SCOPE.inner_scope.value_count = 1; \n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n\n            // #iter = iterator\n            Compiler.builder.insertVariable(SCOPE, 'i', ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ITERATOR;\n        }\n\n        // WHILE\n        else if (m = SCOPE.datex.match(Regex.WHILE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            SCOPE.inner_scope.while = SCOPE.b_index+1;\n            SCOPE.inner_scope.loop_start = SCOPE.b_index+1;\n            SCOPE.inner_scope.value_count = 2; \n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n            // add jfa\n            Compiler.builder.addJmp(SCOPE,  BinaryCode.JFA);\n        }\n\n        // IF\n        else if (m = SCOPE.datex.match(Regex.ELSE_IF)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n\n            // is else if \n            if (m[1]) {\n                // no previous if\n                if (!SCOPE.inner_scope.if_end_indices?.length) throw new CompilerError(\"Invalid else-if statement - no preceding if statement\", SCOPE.stack);\n                SCOPE.b_index--; // override SUBSCOPE_END\n            }\n\n            // is only if\n            else {\n                Compiler.builder.valueIndex(SCOPE); // new value start\n            }\n\n            SCOPE.inner_scope.value_count = 2;\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT, SCOPE);\n            if (!m[1]) SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START; // start subscope only if first 'if'\n\n            SCOPE.inner_scope.if = SCOPE.b_index;\n \n            // add jfa\n            Compiler.builder.addJmp(SCOPE,  BinaryCode.JFA);\n        }\n\n        // ELSE\n        else if (m = SCOPE.datex.match(Regex.ELSE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n\n            // is no previous if\n            if (!SCOPE.inner_scope.if_end_indices?.length) throw new CompilerError(\"Invalid else statement - no preceding if statement\", SCOPE.stack);\n\n            SCOPE.b_index--; // override previous SUBSCOPE_END\n\n            SCOPE.inner_scope.else = true;\n            SCOPE.inner_scope.value_count = 1; \n        }\n\n        // FUN\n        else if (m = SCOPE.datex.match(Regex.FUN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // remove fun\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_FUNCTION;\n            isEffectiveValue = true;\n        }\n\n        // \\n\n        else if (m = SCOPE.datex.match(/^\\n/)) {\n            SCOPE.current_line_nr++;\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            SCOPE.last_command_end = last_command_end; // last command still valid\n        }           \n     \n\n        // DOC_COMMENT - before ASSIGN, ...\n        else if (m = SCOPE.datex.match(Regex.DOC_COMMENT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // remove comment\n            SCOPE.current_line_nr += m[0].split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            SCOPE.last_command_end = last_command_end; // last command still valid\n\n            const doc_comment = m[3]??m[2];\n            // TODO: reenable? replace with markdown insertion\n            // SCOPE.datex = `<text/markdown> '${doc_comment.replace(/\\'/g, \"\\\\'\")}';\\n` + SCOPE.datex;\n        }\n\n        // COMMENT - before ASSIGN, ...\n        else if (m = SCOPE.datex.match(Regex.COMMENT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // remove comment\n            SCOPE.current_line_nr += m[0].split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            SCOPE.last_command_end = last_command_end; // last command still valid\n        }\n\n        \n        // Datex.VOID (check before variable!)\n        else if (m = SCOPE.datex.match(Regex.VOID)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addVoid(SCOPE);\n            isEffectiveValue = true;\n        }\n\n\n        // REMOTE CALL (::) \n        else if (m = SCOPE.datex.match(Regex.REMOTE_CALL)) {\n            if (SCOPE._code_block_type!>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            await Compiler.builder.addScopeBlock(BinaryCode.REMOTE, !!m[1], false, SCOPE)\n        }\n\n        // TRANSFORM\n        else if (m = SCOPE.datex.match(Regex.ALWAYS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.TRANSFORM, !!m[1], true, SCOPE)\n        }\n\n\n        // Datex.VOID (empty brackets)\n        else if (m = SCOPE.datex.match(Regex.QUASI_VOID)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addVoid(SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // SUBSCOPE START\n        else if (m = SCOPE.datex.match(Regex.SUBSCOPE_START)) {        \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n         \n            Compiler.builder.enter_subscope(SCOPE);\n        } \n\n    \n        // SYNC_SILENT (<==:)\n        else if (m = SCOPE.datex.match(Regex.SYNC_SILENT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode._SYNC_SILENT;\n        }\n\n        // SYNC (<==)\n        else if (m = SCOPE.datex.match(Regex.SYNC)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SYNC;\n        }\n\n\n        // STOP_SYNC (</=)\n        else if (m = SCOPE.datex.match(Regex.STOP_SYNC)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STOP_SYNC;\n        }\n\n        \n        // STREAM (before type and <=)\n        else if (m = SCOPE.datex.match(Regex.STREAM)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STREAM;\n        }\n\n        // STOP_STREAM\n        else if (m = SCOPE.datex.match(Regex.STOP_STREAM)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STOP_STREAM;\n        }\n\n        // TYPE (before <)\n        // if function arg parsing (42), don't allow type definitions\n        else if (\n            (SCOPE._code_block_type==42 && (m = SCOPE.datex.match(Regex.TYPE_FUNCTION_ARG_COMPAT))) || \n            (SCOPE._code_block_type!=42 && (m = SCOPE.datex.match(Regex.TYPE)))\n        ) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // is parameterized type\n            if (m[4] == \"(\") {\n                SCOPE.datex = \"(\" + SCOPE.datex;\n                SCOPE.inner_scope.param_type_close = true;\n                Compiler.builder.addTypeByNamespaceAndName(SCOPE, m[1], m[2], m[3]?.slice(1), true);\n            }\n            // is type definition\n            else if (m[5]) {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TEMPLATE;  \n                Compiler.builder.addTypeByNamespaceAndName(SCOPE, m[1], m[2], m[3]?.slice(1))\n            }\n            // normal type\n            else Compiler.builder.addTypeByNamespaceAndName(SCOPE, m[1], m[2], m[3]?.slice(1))\n        }\n\n        // COMPARE \n        // ===\n        else if (m = SCOPE.datex.match(Regex.EQUAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EQUAL;\n        }\n        // ~==\n        else if (m = SCOPE.datex.match(Regex.NOT_EQUAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT_EQUAL;\n        }\n        // ==\n        else if (m = SCOPE.datex.match(Regex.EQUAL_VALUE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EQUAL_VALUE;\n        }\n        // ~=\n        else if (m = SCOPE.datex.match(Regex.NOT_EQUAL_VALUE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT_EQUAL_VALUE;\n        }\n        // >=\n        else if (m = SCOPE.datex.match(Regex.GREATER_EQUAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GREATER_EQUAL;\n        }\n        // <=\n        else if (m = SCOPE.datex.match(Regex.LESS_EQUAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.LESS_EQUAL;\n        }\n        // >\n        else if (m = SCOPE.datex.match(Regex.GREATER)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            // is type close )>, ignore\n            if (SCOPE.inner_scope.param_type_close) {\n                SCOPE.inner_scope.param_type_close = false;\n            }\n            // is greater >\n            else {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GREATER;\n            }\n        }\n      \n        // <\n        else if (m = SCOPE.datex.match(Regex.LESS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.LESS;\n        }\n      \n        // YEET\n        else if (m = SCOPE.datex.match(Regex.YEET)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.YEET;  \n        }\n        \n        \n        // TRY\n        else if (m = SCOPE.datex.match(Regex.TRY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            // no opening scope, add closing\n            if (!m[1]) SCOPE.inner_scope.try_close = true;\n\n            Compiler.builder.enter_subscope(SCOPE);\n            SCOPE.inner_scope.try_start = SCOPE.b_index\n        }\n\n        // ACCEPT\n        else if (m = SCOPE.datex.match(Regex.ACCEPT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            // TODO\n        }\n\n\n        // RELATIVE_PATH (before ..)\n        else if (m = SCOPE.datex.match(Regex.RELATIVE_PATH)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const path = m[0].replace(/\\\\(.)/, '$1')\n            Compiler.builder.addRelativePath(path, SCOPE);\n        }\n\n        // SPREAD (...) = <Tuple>/<Record>\n        else if (m = SCOPE.datex.match(Regex.SPREAD)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EXTEND;\n        }\n\n        // Range (..) => <Tuple>\n        else if (m = SCOPE.datex.match(Regex.RANGE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.insertByteAtIndex(BinaryCode.RANGE, SCOPE.inner_scope.last_value_index, SCOPE)\n        }\n  \n        // PATH_SEPERATOR (.)\n        else if (m = SCOPE.datex.match(Regex.PATH_SEPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n         \n            //SCOPE.inner_scope.current_path_depth++;\n            //DatexCompiler.builder.handle_path(SCOPE);\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.inner_scope.path_info_index = SCOPE.b_index++;\n            SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_GET;\n\n            // if '.' before:  WILDCARD (.*)\n            if (m = SCOPE.datex.match(Regex.WILDCARD)) {               \n                SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n                \n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.WILDCARD;\n                isEffectiveValue = true;\n            }\n            // default property key (string)\n            else if (m = SCOPE.datex.match(Regex.PROPERTY)) {               \n                SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n                \n                Compiler.builder.addText(m[0], SCOPE);\n                isEffectiveValue = true;\n            }\n        }\n\n        // PATH_REF_SEPERATOR (->)\n        else if (m = SCOPE.datex.match(Regex.PATH_REF_SEPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            const wildcard = SCOPE.datex.match(Regex.WILDCARD);\n\n            // normal scope or extract_var_scope\n            const _SCOPE = (SCOPE.extract_pointers && !wildcard) ? SCOPE.extract_var_scope! : SCOPE;\n\n            Compiler.builder.handleRequiredBufferSize(_SCOPE.b_index, _SCOPE);\n            _SCOPE.inner_scope.path_info_index = _SCOPE.b_index++;\n            _SCOPE.uint8[_SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_GET_REF;\n\n            // if '->' before:  WILDCARD (->*)\n            if (wildcard) {               \n                SCOPE.datex = SCOPE.datex.substring(wildcard[0].length);  // pop datex\n                \n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.WILDCARD;\n            }\n            // default property key (string)\n            else if (m = SCOPE.datex.match(Regex.PROPERTY)) {               \n                SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n                \n                Compiler.builder.addText(m[0], _SCOPE);\n            }\n        }\n\n\n        // JMP instructions\n        else if (m = SCOPE.datex.match(Regex.JUMP)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            let jmp_label = m[2]\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+5, SCOPE);\n            \n            Compiler.builder.valueIndex(SCOPE);\n\n            let jmp_to:number|undefined;\n            let type = m[1] == \"jmp\" ?  BinaryCode.JMP : ( m[1] == \"jtr\" ? BinaryCode.JTR : BinaryCode.JFA);\n\n            // label was before\n            if (Object.keys(SCOPE.jmp_label_indices).includes(jmp_label)) {\n                SCOPE.used_lbls.push(jmp_label)\n                jmp_to = SCOPE.jmp_label_indices[jmp_label][0];\n            }\n            // wait until label index resolved\n            else { \n                if (!SCOPE.indices_waiting_for_jmp_lbl[jmp_label]) SCOPE.indices_waiting_for_jmp_lbl[jmp_label] = []\n                SCOPE.indices_waiting_for_jmp_lbl[jmp_label].push(Compiler.builder.getDynamicIndex(SCOPE.b_index+1, SCOPE)); \n            }\n            \n            // add jmp\n            Compiler.builder.addJmp(SCOPE, type, jmp_to);\n        }\n\n        // JMP label\n        else if (m = SCOPE.datex.match(Regex.JUMP_LBL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            let jmp_label = m[1]\n            SCOPE.jmp_label_indices[jmp_label] = Compiler.builder.getDynamicIndex(SCOPE.b_index, SCOPE);\n\n            if (SCOPE.used_lbls.includes(jmp_label)) throw new CompilerError(\"Multiple use of label: \" + jmp_label, SCOPE.stack);\n            \n            // resolve index for earlier jumps\n            if (SCOPE.indices_waiting_for_jmp_lbl[jmp_label]) {\n                for (let [i] of SCOPE.indices_waiting_for_jmp_lbl[jmp_label]) {\n                    SCOPE.data_view.setUint32(i, SCOPE.b_index, true); // insert label index  \n                }\n                delete SCOPE.indices_waiting_for_jmp_lbl[jmp_label];\n                SCOPE.used_lbls.push(jmp_label)\n            }\n\n            // cache dxb from here on when executing (might need to jump to this position later on)\n            if (SCOPE.last_cache_point == undefined) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.last_cache_point = SCOPE.b_index\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CACHE_POINT;\n            }\n\n        }\n\n        // USE static scope (check before variable!)\n        else if (m = SCOPE.datex.match(Regex.USE_PROPS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            SCOPE.inner_scope.use_parent_index = await Compiler.builder.addValVarRefDeclaration(undefined, 'var', SCOPE);\n            SCOPE.inner_scope.imported_vars = <[string, string?][]> m[1].split(\",\").map(v=>v.trim().split(/ +as +/))\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n        }\n\n\n        else if (m = SCOPE.datex.match(Regex.USE_ALL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const name = m[1]\n\n            await Compiler.builder.addValVarRefDeclaration(name, 'var', SCOPE)\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n        }\n\n        else if (m = SCOPE.datex.match(Regex.USE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.insertVariable(SCOPE, 'void', ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n        }\n\n        \n        // BOOLEAN (check before variable!)\n        else if (m = SCOPE.datex.match(Regex.BOOLEAN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addBoolean(m[0] == \"true\" ? true : false, SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // NULL (check before variable!)\n        else if (m = SCOPE.datex.match(Regex.NULL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addNull(SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // EMPTY_ARRAY (shortcut)\n        else if (m = SCOPE.datex.match(Regex.EMPTY_ARRAY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ARRAY;\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.VOID;\n            isEffectiveValue = true;\n        }\n\n        // EMPTY_OBJECT (shortcut)\n        else if (m = SCOPE.datex.match(Regex.EMPTY_OBJECT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_OBJECT;\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.VOID;\n            isEffectiveValue = true;\n        }\n\n\n        // ARRAY_START\n        else if (m = SCOPE.datex.match(Regex.ARRAY_START)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.enter_subscope(SCOPE, BinaryCode.ARRAY_START);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.inner_scope.first_element_pos = SCOPE.b_index;\n            Compiler.builder.commaIndex(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT;  \n\n        }\n\n        // ARRAY_END\n        else if (m = SCOPE.datex.match(Regex.ARRAY_END)) {\n            if (SCOPE._code_block_type!>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            } \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            Compiler.builder.exit_subscope(SCOPE, BinaryCode.ARRAY_END);\n            isEffectiveValue = true;\n            //DatexCompiler.builder.close_current_path(SCOPE); // new path scope\n        }\n\n\n        // TEMPLATE STRING (before OBJECT_END) '... (\n        else if (!SCOPE.inner_scope.in_template_string && (m = SCOPE.datex.match(Regex.TSTRING_START))) {                            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            const escaped_string = m[0].substring(1,m[0].length-1);\n            SCOPE.current_line_nr += escaped_string.split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            const str = Compiler.builder.unescape_string(escaped_string);\n            \n\n            SCOPE.inner_scope.in_template_string = true;\n\n            Compiler.builder.enter_subscope(SCOPE); // outer subscope\n\n            // add string if it is not empty\n            if (str.length) {\n                Compiler.builder.addText(str, SCOPE);\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;\n            }\n  \n            Compiler.builder.addTypeByNamespaceAndName(SCOPE, \"std\", \"text\");\n            Compiler.builder.enter_subscope(SCOPE);\n        }\n\n        // ) ... (\n        else if (SCOPE.subscopes[SCOPE.subscopes.length-3]?.in_template_string && (m = SCOPE.datex.match(Regex.TSTRING_B_CLOSE))) {                            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            const escaped_string = m[0].substring(1,m[0].length-1);\n            SCOPE.current_line_nr += escaped_string.split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            const str = Compiler.builder.unescape_string(escaped_string);\n\n            Compiler.builder.exit_subscope(SCOPE);\n\n            if (str.length) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;\n                Compiler.builder.addText(str, SCOPE);\n            }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;\n            Compiler.builder.addTypeByNamespaceAndName(SCOPE, \"std\", \"text\");\n\n            Compiler.builder.enter_subscope(SCOPE);\n        }\n\n        // ) ... '\n        else if (SCOPE.subscopes[SCOPE.subscopes.length-3]?.in_template_string && (m = SCOPE.datex.match(Regex.TSTRING_END))) {                            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            const escaped_string = m[0].substring(1,m[0].length-1);\n            SCOPE.current_line_nr += escaped_string.split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            const str = Compiler.builder.unescape_string(escaped_string);\n\n            Compiler.builder.exit_subscope(SCOPE);\n\n            // only add string if not empty\n            if (str.length) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;\n            \n                Compiler.builder.addText(str, SCOPE);\n            }\n          \n\n            Compiler.builder.exit_subscope(SCOPE); // outer subscope\n\n            SCOPE.inner_scope.in_template_string = false;\n            isEffectiveValue = true;\n        }\n\n\n        // OBJECT_START\n        else if (m = SCOPE.datex.match(Regex.OBJECT_START)) {           \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.enter_subscope(SCOPE, BinaryCode.OBJECT_START);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.inner_scope.first_element_pos = SCOPE.b_index;\n            Compiler.builder.commaIndex(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT;  \n        }\n\n        // OBJECT_END\n        else if (m = SCOPE.datex.match(Regex.OBJECT_END)) {\n            if (SCOPE._code_block_type!>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.exit_subscope(SCOPE, BinaryCode.OBJECT_END);\n            isEffectiveValue = true;\n            //DatexCompiler.builder.close_current_path(SCOPE); // new path scope\n        }\n\n        // COMMA\n        else if (m = SCOPE.datex.match(Regex.COMMA)) {      \n            if (SCOPE._code_block_type!>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            // detect TUPLE\n            if (SCOPE.inner_scope.parent_type==undefined || SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START) {\n                // last ( bracket can be replaced with tuple bracket\n                if (SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START && SCOPE.inner_scope.start_index == SCOPE.inner_scope.first_value_index-1) {\n                    Compiler.builder.change_inner_scope_parent_type(SCOPE, BinaryCode.TUPLE_START)\n                    Compiler.builder.commaIndex(SCOPE.inner_scope.start_index+1, SCOPE);\n                    Compiler.builder.insertByteAtIndex(BinaryCode.ELEMENT, SCOPE.inner_scope.start_index+1, SCOPE); // also add first ELEMENT\n                }\n                // create new subscope\n                else {\n\n                    const index = Math.max(SCOPE.inner_scope.ce_index??0, SCOPE.inner_scope.first_value_index); // save index from current sub scope\n                    if (index === -1) throw new SyntaxError(\"Invalid leading comma\") // value must exist before\n                    Compiler.builder.commaIndex(index, SCOPE);\n                    Compiler.builder.insertByteAtIndex(BinaryCode.ELEMENT, index, SCOPE); // also add first ELEMENT\n                    Compiler.builder.enter_subscope(SCOPE, BinaryCode.TUPLE_START, index);\n                    SCOPE.inner_scope.auto_close_scope = BinaryCode.TUPLE_END;\n                }\n            }\n\n            // always add BinaryCode.ELEMENT (migh be overriden with BinaryCode.ELEMENT_WITH_KEY)\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.inner_scope.first_element_pos = SCOPE.b_index; // set first element index\n            Compiler.builder.commaIndex(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT;  \n        }\n\n\n        // BUFFER\n        else if (m = SCOPE.datex.match(Regex.BUFFER)) {              \n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            let content = m[1];\n            let buffer:Uint8Array;\n\n            try {\n                buffer = hex2buffer(content);\n            }\n            catch(e) {\n                throw new ValueError(\"Invalid <Buffer> format (base 16)\");\n            }\n\n            Compiler.builder.addBuffer(buffer, SCOPE);\n            isEffectiveValue = true;\n        }\n\n       \n\n        // CLOSE_AND_STORE\n        else if ((m = SCOPE.datex.match(Regex.CLOSE_AND_STORE)) !== null) {     \n            if (SCOPE._code_block_type>=2 && !Compiler.builder.has_open_subscopes(SCOPE)) {\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n\n            SCOPE.current_line_nr += m[0].split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            // auto-close subscopes here?\n            while (SCOPE.inner_scope.auto_close_scope!=undefined) {\n                const type = SCOPE.inner_scope.auto_close_scope;\n                delete SCOPE.inner_scope.auto_close_scope;\n                Compiler.builder.exit_subscope(SCOPE, type);\n            }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n\n            // remember ; in inner scope\n            SCOPE.inner_scope.has_ce = true;\n            SCOPE.inner_scope.ce_index = SCOPE.b_index;\n\n            SCOPE.last_command_end = true;\n\n            // finish 'use' command (TODO just temporary position)\n            if (SCOPE.inner_scope.imported_vars && SCOPE.inner_scope.use_parent_index!=undefined) {\n                for (let v of SCOPE.inner_scope.imported_vars) {\n    \n                    await Compiler.builder.addValVarRefDeclaration(v[1]??v[0], 'var', SCOPE)\n                    Compiler.builder.insertVariable(SCOPE, SCOPE.inner_scope.use_parent_index, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_GET;\n                    Compiler.builder.addText(v[0], SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n                }\n                delete SCOPE.inner_scope.imported_vars;\n                delete SCOPE.inner_scope.use_parent_index;\n\n            }\n           \n        }\n\n        // INFINITY\n        else if (m = SCOPE.datex.match(Regex.INFINITY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addFloat(m[1]?.[0]=='-' ? -Infinity : +Infinity, SCOPE)\n            isEffectiveValue = true;\n        }\n                \n        // NAN\n        else if (m = SCOPE.datex.match(Regex.NAN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addFloat(NaN, SCOPE)\n            isEffectiveValue = true;\n        }\n\n        // PERSON\n        else if (m = SCOPE.datex.match(Regex.PERSON_ALIAS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // const subspace_string = m[2].substring(1);\n            // const subspaces = subspace_string ? subspace_string.split(\":\") : null;\n            Compiler.builder.addPersonByNameAndChannel(m[1], m[3], SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // INSTITUTION\n        else if (m = SCOPE.datex.match(Regex.INSTITUTION_ALIAS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // const subspace_string = m[2].substring(1);\n            // const subspaces = subspace_string ? subspace_string.split(\":\") : null;\n            Compiler.builder.addInstitutionByNameAndChannel(m[1], m[3], SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // ID_ENDPOINT\n        else if (m = SCOPE.datex.match(Regex.ENDPOINT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // const subspace_string = m[2].substring(1);\n            // const subspaces = subspace_string ? subspace_string.split(\":\") : null;\n            const endpoint = IdEndpoint.get('@@'+m[1])\n            Compiler.builder.addIdEndpointByIdAndChannel(endpoint.binary, m[3], SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // BROADCAST_ENDPOINT TODO: how to use this with new subspaces?\n        else if (m = SCOPE.datex.match(Regex.BROADCAST_ENDPOINT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const subspace_string = m[2].substring(1);\n            const subspaces = subspace_string ? subspace_string.split(\":\") : null;\n            Compiler.builder.addIdEndpointByIdAndChannel(BROADCAST.binary, m[6], SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // STRING or ESCAPED_KEY\n        else if (m = SCOPE.datex.match(Regex.STRING_OR_ESCAPED_KEY)) {                                  \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const escaped_string = m[1].substring(1,m[1].length-1);\n            SCOPE.current_line_nr += escaped_string.split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            let string_or_key = Compiler.builder.unescape_string(escaped_string) // get key and format\n\n            // is escaped key\n            if (m[2]) {\n                if (SCOPE.inner_scope.parent_type == BinaryCode.ARRAY_START) throw new SyntaxError(\"Invalid key in <Array>\");\n                // // convert tuple to record\n                // if (SCOPE.inner_scope.parent_type == BinaryCode.TUPLE_START) DatexCompiler.builder.change_inner_scope_parent_type(SCOPE, BinaryCode.RECORD_START)\n                // if (SCOPE.inner_scope.auto_close_scope == BinaryCode.TUPLE_END) SCOPE.inner_scope.auto_close_scope = BinaryCode.RECORD_END;\n                \n                // check/add  permission prefix (@xy x: ...)\n                const permission_prefix = false // TODO: Compiler.builder.check_perm_prefix(SCOPE);\n\n                // override current BinaryCode.ELEMENT\n                if (!permission_prefix && SCOPE.inner_scope.first_element_pos!=undefined) SCOPE.b_index = SCOPE.inner_scope.first_element_pos;\n                Compiler.builder.detect_record(SCOPE);\n                Compiler.builder.addKey(string_or_key, SCOPE);\n            }\n            // is string\n            else Compiler.builder.addText(string_or_key, SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // DYNAMIC_KEY_END\n        else if (m = SCOPE.datex.match(Regex.DYNAMIC_KEY_END)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            // closing )\n            Compiler.builder.exit_subscope(SCOPE);\n\n            // override current BinaryCode.ELEMENT\n            const current_b_index = SCOPE.b_index;\n            if (SCOPE.inner_scope.first_element_pos!=undefined) SCOPE.b_index = SCOPE.inner_scope.first_element_pos;\n            Compiler.builder.detect_record(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT_WITH_DYNAMIC_KEY;\n            SCOPE.b_index = current_b_index;\n        }\n\n        // SUBSCOPE_END\n        else if (m = SCOPE.datex.match(Regex.SUBSCOPE_END)) {\n            if (SCOPE._code_block_type>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            } \n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            let end = Compiler.builder.exit_subscope(SCOPE);\n            // was block close -> end compilation at this point\n            if (end && last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n\n            // block close (TODO still required?)\n            /*else if (SCOPE.subscopes.length == 1) {\n\n                DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.COMMAND_END;\n                SCOPE.last_command_end = true;\n                // reset\n                DatexCompiler.builder.close_current_path(SCOPE); // new path scope\n            }*/\n            isEffectiveValue = true;\n        }\n\n        // FREEZE\n        else if (m = SCOPE.datex.match(Regex.FREEZE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.FREEZE;  \n        }\n\n        // SEAL\n        else if (m = SCOPE.datex.match(Regex.SEAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SEAL;  \n        }\n\n        // HAS\n        else if (m = SCOPE.datex.match(Regex.HAS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.HAS;  \n        }\n\n        // KEYS\n        else if (m = SCOPE.datex.match(Regex.KEYS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.KEYS;  \n        }\n\n        // DELETE pointer (before VARIABLE)\n        else if (m = SCOPE.datex.match(Regex.DELETE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DELETE_POINTER;  \n        }\n\n        // // SUBSCRIBE to pointer\n        // else if (m = SCOPE.datex.match(Regex.SUBSCRIBE)) {\n        //     SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n        //     Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n        //     Compiler.builder.valueIndex(SCOPE);\n        //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCRIBE;  \n        // }\n\n        // // UNSUBSCRIBE from pointer\n        // else if (m = SCOPE.datex.match(Regex.UNSUBSCRIBE)) {\n        //     SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n        //     Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n        //     Compiler.builder.valueIndex(SCOPE);\n        //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.UNSUBSCRIBE;  \n        // }\n        \n        // COPY value\n        else if (m = SCOPE.datex.match(Regex.COPY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.COPY;  \n        }\n\n        // CLONE value\n        else if (m = SCOPE.datex.match(Regex.CLONE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLONE;  \n        }\n\n        // CLONE_COLLAPSE value\n        else if (m = SCOPE.datex.match(Regex.CLONE_COLLAPSE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLONE_COLLAPSE;  \n        }\n        \n\n        // COLLAPSE logical value\n        else if (m = SCOPE.datex.match(Regex.COLLAPSE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.COLLAPSE;  \n        }\n\n        // create new type short command\n        else if (m = SCOPE.datex.match(Regex.CREATE_TYPE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            console.log(\"create type\",m)\n\n            const exporting = !!m[1];\n            const type = \"ref\";\n            const name = m[3];\n            const init_eternal = true;\n            const init_brackets = !!m[4];\n\n            // restore \"(\"\n            if (!init_eternal && init_brackets) SCOPE.datex = \"(\" + SCOPE.datex;\n\n            if (exporting) {\n                if (!SCOPE.inner_scope.exports) SCOPE.inner_scope.exports = {};\n                // remember internal variable for exports\n                SCOPE.inner_scope.exports[name] = await Compiler.builder.addValVarRefDeclaration(name, type, SCOPE, init_eternal, init_brackets);\n            }\n\n            else await Compiler.builder.addValVarRefDeclaration(name, type, SCOPE, init_eternal, init_brackets);\n        }\n\n        // typeof\n        else if (m = SCOPE.datex.match(Regex.TYPEOF)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET_TYPE;  \n        }\n            \n        // ORIGIN of pointer\n        else if (m = SCOPE.datex.match(Regex.ORIGIN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ORIGIN;  \n        }\n\n        // SUBSCRIBERS of pointer\n        else if (m = SCOPE.datex.match(Regex.SUBSCRIBERS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCRIBERS;  \n        }\n\n        // NEXT\n        else if (m = SCOPE.datex.match(Regex.NEXT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NEXT;  \n        }\n\n        // TEMPLATE\n        else if (m = SCOPE.datex.match(Regex.TEMPLATE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TEMPLATE;  \n        }\n        \n        // EXTENDS\n        else if (m = SCOPE.datex.match(Regex.EXTENDS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EXTENDS;  \n        }\n\n        // IMPLEMENTS\n        else if (m = SCOPE.datex.match(Regex.IMPLEMENTS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.IMPLEMENTS;  \n        }\n\n        // MATCHES\n        else if (m = SCOPE.datex.match(Regex.MATCHES)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.MATCHES;  \n        }\n        \n\n        // DEFAULT\n        else if (m = SCOPE.datex.match(Regex.DEFAULT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            const brackets = !!m[1];\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DEFAULT;  \n\n            await Compiler.builder.addInitBlock(SCOPE, brackets);\n            Compiler.builder.valueIndex(SCOPE);\n        }\n\n        // DEBUGGER\n        else if (m = SCOPE.datex.match(Regex.DEBUGGER)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DEBUGGER;  \n        }\n\n        // NEW\n        else if (m = SCOPE.datex.match(Regex.NEW)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NEW;  \n        }\n\n        // CONSTRUCTOR_METHOD\n        else if (m = SCOPE.datex.match(Regex.CONSTRUCTOR_METHOD)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            console.log(\"constructor\", m[0]);\n        }\n\n        // SCOPE (plain DATEX Scope)\n        else if (m = SCOPE.datex.match(Regex.SCOPE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.PLAIN_SCOPE, !!m[1], false, SCOPE)  \n        }\n\n        // OBSERVE value\n        else if (m = SCOPE.datex.match(Regex.OBSERVE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBSERVE;  \n        }\n\n        // FUNCTION\n        else if (m = SCOPE.datex.match(Regex.FUNCTION)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const exporting = !!m[1]\n            const name = m[2];\n            if (name) {\n                if (exporting) {\n                    if (!SCOPE.inner_scope.exports) SCOPE.inner_scope.exports = {};\n                    // remember internal variable for exports\n                    SCOPE.inner_scope.exports[name] = await Compiler.builder.addValVarRefDeclaration(name, 'ref', SCOPE);\n                }\n    \n                else await Compiler.builder.addValVarRefDeclaration(name, 'ref', SCOPE);\n            }\n            else if (exporting) {\n                throw new CompilerError(\"Invalid function declaration: cannot export a function without a name (use 'export function NAME()')\")\n            }\n\n            const params:{[name:string]: [named:boolean, type:'val'|'var'|'ref'|'const', type_init:string, default_init:string, exporting:boolean]} = {}\n\n            while (true) {\n                const param = SCOPE.datex.match(Regex.FUNCTION_PARAM);\n\n                if (!param) break; // no param match\n\n                SCOPE.datex = SCOPE.datex.substring(param[0].length);\n                const param_modifiers = param[1]?.trim().split(\" \").map(v=>v.trim()) ?? '';\n                const param_name = param[2];\n                let param_end = param[3]\n\n                if (param_name in params) throw new CompilerError(\"Function variable '\"+param_name+\"' was already declared\")\n                params[param_name] = [param_modifiers.includes(\"named\"), (param_modifiers.includes(\"ref\") ? \"ref\" : (param_modifiers.includes(\"val\") ? \"val\" : \"var\")), \"<Any>\", \"\", param_modifiers.includes(\"export\")];\n\n                if (param_end == \",\") {\n                    continue;\n                }\n\n                if (param_end == \":\") {\n                    // veryyy inefficient way of doing things TODO\n                    let return_data:{datex:string} = {datex: SCOPE.datex}; \n                    // ignore result - very bad\n                    await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, pseudo_parent:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, false, false, undefined, Infinity, 42 /*illegal*/, SCOPE.current_data_index);\n                    params[param_name][2] = SCOPE.datex.replace(return_data.datex, \"\");\n                    if (return_data.datex[0] == \")\") {\n                        SCOPE.datex = return_data.datex;\n                        break;\n                    } // end of parameter list\n                    else if (return_data.datex[0] == \"=\") param_end = \"=\";\n                    SCOPE.datex = return_data.datex.slice(1).trimStart()\n                }\n                \n                \n                if (param_end == \"=\") {\n                    // veryyy inefficient way of doing things TODO\n                    let return_data:{datex:string} = {datex: SCOPE.datex}; \n                    // ignore result - very bad\n                    await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, pseudo_parent:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, false, false, undefined, Infinity, 2, SCOPE.current_data_index);\n                    params[param_name][3] = SCOPE.datex.replace(return_data.datex, \"\");\n                    if (return_data.datex[0] == \")\") {\n                        SCOPE.datex = return_data.datex;\n                        break;\n                    } // end of parameter list\n                    SCOPE.datex = return_data.datex.slice(1).trimStart();\n                }\n\n                if (param_end == \")\") {\n                    SCOPE.datex = \")\" + SCOPE.datex; // fake )\n                    break; // end of parameter list\n                }\n          \n            }\n\n            // remove )\n            SCOPE.datex = SCOPE.datex.slice(1).replace(/^(\\s*\\=\\>)?\\s*/, ''); // trim and ignore '=>'\n\n            let has_bracket = SCOPE.datex[0] == \"(\";\n            if (has_bracket) SCOPE.datex = SCOPE.datex.slice(1).trimStart();\n\n            let i = 0;\n\n            let type_signature = '<Function((';\n\n            let init = \"scope (\";\n            for (let [name, [named,type,type_init,default_init,exporting]] of Object.entries(params)) {\n                init += `\\n${exporting?'export ':''}${type} ${name} = (#it.${i++}${default_init ? ' default '+default_init : ''});`\n                type_signature += `${named?name+': ':''}${type_init},`\n            }\n            init += \";\";\n\n            type_signature += '),)>';\n\n            SCOPE.datex = type_signature + init + SCOPE.datex;\n        }\n\n        // PLUGIN\n        else if (m = SCOPE.datex.match(Regex.PLUGIN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const name = m[1];\n\n            \n            // plugin enabled?\n            if (SCOPE.options.plugins?.includes(name) || activePlugins.includes(name) || SCOPE.options.required_plugins?.includes(name)) {\n                SCOPE.unused_plugins?.delete(name);\n                SCOPE.datex = `export const ${name} = (` + SCOPE.datex;\n            }\n\n            // not enabled, ignore\n            else {\n                // compile and ignore (required to find closing bracket)\n                // TODO: optimize this, no full compilation required\n                const brackets = true;\n                const return_data:{datex:string} = {datex: SCOPE.datex}; \n                await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, true, false, undefined, Infinity, brackets?1:2, SCOPE.current_data_index);\n\n                SCOPE.datex = return_data.datex; // update position in current datex script\n            }\n\n        }\n\n        // RUN\n        else if (m = SCOPE.datex.match(Regex.RUN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.RUN, !!m[1], false, SCOPE)  \n        }\n\n        // DO\n        else if (m = SCOPE.datex.match(Regex.DO)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.DO, !!m[1], false, SCOPE)  \n        }\n\n        // ASSERT\n        else if (m = SCOPE.datex.match(Regex.ASSERT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.ASSERT, !!m[1], false, SCOPE)  \n        }\n\n        // RESPONSE\n        else if (m = SCOPE.datex.match(Regex.RESPONSE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.RESPONSE, !!m[1], false, SCOPE)  \n        }\n\n        // DEFER\n        else if (m = SCOPE.datex.match(Regex.DEFER)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.DEFER, !!m[1], false, SCOPE)     \n        }\n\n        // AWAIT\n        else if (m = SCOPE.datex.match(Regex.AWAIT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.AWAIT;  \n        }\n\n        // OR_OPERATOR\n        else if (m = SCOPE.datex.match(Regex.OR_OPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n         \n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OR;  \n        }\n\n        // AND_OPERATOR\n        else if (m = SCOPE.datex.match(Regex.AND_OPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.AND;  \n        }\n\n        // NOT_OPERATOR\n        else if (m = SCOPE.datex.match(Regex.NOT_OPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT;  \n        }\n\n        // POINTER\n        else if (m = SCOPE.datex.match(Regex.POINTER)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            let [action_type, action_specifier] = Compiler.builder.getAssignAction(m[2]);\n\n            const id = m[1].replace(/_/g, \"\");\n            const init_brackets = !!m[3];\n\n            // restore \"(\"\n            if (action_type!=ACTION_TYPE.INIT && init_brackets) SCOPE.datex = \"(\" + SCOPE.datex;\n\n            // pre extract\n            if (SCOPE.extract_pointers && action_type == ACTION_TYPE.GET) {\n                // TODO handle := INIT here?\n                Compiler.builder.insertExtractedVariable(SCOPE, BinaryCode.POINTER, id)\n            }\n            // insert normally\n            else await Compiler.builder.addPointerByID(SCOPE, id, action_type, action_specifier, init_brackets, NOT_EXISTING)\n            isEffectiveValue = true;\n        }\n\n        // var, ref, (export) val\n        else if (m = SCOPE.datex.match(Regex.VAR_REF_VAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const exporting = !!m[1];\n            const type = <\"val\" | \"var\" | \"ref\" | \"const\"> m[2];\n            const name = m[3];\n            const init_eternal = !!m[4];\n            const init_brackets = !!m[5];\n\n            // restore \"(\"\n            if (!init_eternal && init_brackets) SCOPE.datex = \"(\" + SCOPE.datex;\n\n            if (exporting) {\n                if (!SCOPE.inner_scope.exports) SCOPE.inner_scope.exports = {};\n                // remember internal variable for exports\n                SCOPE.inner_scope.exports[name] = await Compiler.builder.addValVarRefDeclaration(name, type, SCOPE, init_eternal, init_brackets);\n            }\n\n            else await Compiler.builder.addValVarRefDeclaration(name, type, SCOPE, init_eternal, init_brackets);\n        }\n\n\n        // export x\n        else if (m = SCOPE.datex.match(Regex.DIRECT_EXPORT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const name = m[1];\n            // TODO replace with Object.hasOwn\n            if (!SCOPE.inner_scope.vars.hasOwnProperty(name)) throw new CompilerError(\"Cannot export undeclared variable '\"+name+\"'\");\n\n            if (!SCOPE.inner_scope.exports) SCOPE.inner_scope.exports = {};\n            // remember internal variable index for exports\n            SCOPE.inner_scope.exports[name] = SCOPE.inner_scope.vars[name][1];\n\n        }\n        \n\n        // INTERNAL_VAR or ROOT_VARIABLE or LABELED_POINTER\n        else if ((m = SCOPE.datex.match(Regex.INTERNAL_VAR)) || (m = SCOPE.datex.match(Regex.ROOT_VARIABLE)) || (m = SCOPE.datex.match(Regex.LABELED_POINTER))) {\n            let v_name:string|number|undefined = m[2]; // get var name\n            const is_internal = m[1] == \"#\"; // is internal variable (#)?\n            const is_label = m[1] == \"$\";\n            const is_hex = v_name.match(Regex.HEX_VARIABLE) && (is_internal || is_label);\n            const init_brackets = !!m[4];\n\n            // variable options\n            let base_type = is_internal ? BinaryCode.INTERNAL_VAR : (is_label ? BinaryCode.LABEL : -1); // var or internal var\n    \n            // SCOPE.inner_scope.path_info_index == -1: is child property -> GET action\n            // TODO re-enable is_property? example: 'c = count x;' is not working with this enabled!!?\n            const is_property = false // (SCOPE.inner_scope.path_info_index !== -1);\n\n            if (is_property) SCOPE.datex = SCOPE.datex.substring(m[1].length + m[2].length + m[3].length);  // pop datex (not \"=\" or \"+=\")\n            else SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex (also \"=\" or \"+=\")\n\n            const [action_type, action_specifier] = is_property ? [ACTION_TYPE.GET] : Compiler.builder.getAssignAction(m[3]);\n\n            if (is_hex) v_name = parseInt(v_name.replace(/[-_]/g,''),16) || 0;\n\n            // restore \"(\"\n            if (action_type!=ACTION_TYPE.INIT && init_brackets) SCOPE.datex = \"(\" + SCOPE.datex;\n\n            // is a value\n            if (action_type == ACTION_TYPE.GET) Compiler.builder.valueIndex(SCOPE);\n\n            // default internal variable shorthands\n            if (is_internal) {\n                const mapped = typeof v_name == \"string\" ? Compiler.builder.mapInternalVarNameToByteCode(v_name, action_type, SCOPE) : undefined;\n                if (typeof mapped == \"number\") {\n                    base_type = mapped;\n                    v_name = undefined;\n                }\n                // resolve internal var proxy name\n                else if (typeof v_name == \"string\") {\n                    v_name = Compiler.builder.resolveInternalProxyName(SCOPE, <string>v_name);\n                }\n            }\n\n            // is var,val,ref\n            if (base_type == -1) {\n                await Compiler.builder.insertValVarRef(SCOPE, <string>v_name, action_type, action_specifier);\n            }\n\n            // force extract label/pointer (for transform), recursion not required\n            else if (SCOPE.extract_pointers && action_type == ACTION_TYPE.GET && (base_type == BinaryCode.LABEL || base_type == BinaryCode.POINTER)) {\n                Compiler.builder.insertExtractedVariable(SCOPE, base_type, v_name)\n            }\n            // // '->' property follows (property is handled afterwards)\n            // else if (SCOPE.extract_pointers && action_type == ACTION_TYPE.GET &&  SCOPE.datex.trim().startsWith(\"->\")) {\n            //     Compiler.builder.insertExtractedVariable(SCOPE, base_type, v_name)\n            // }\n\n            // insert normally (pointer,label,internal var)\n            else await Compiler.builder.insertVariable(SCOPE, v_name, action_type, action_specifier, base_type, undefined, init_brackets);\n            \n            isEffectiveValue = true;\n        }\n\n\n        // CREATE_POINTER\n        else if (m = SCOPE.datex.match(Regex.CREATE_POINTER)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n        }\n\n        // HEX (before UNIT)\n        else if (m = SCOPE.datex.match(Regex.HEX)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addInt(parseInt(m[1].replaceAll('_',''), 16), SCOPE)\n            isEffectiveValue = true;\n        }\n\n        // BIN (before UNIT)\n        else if (m = SCOPE.datex.match(Regex.BIN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addInt(parseInt(m[1].replaceAll('_',''), 2), SCOPE)\n            isEffectiveValue = true;\n        }\n\n        // OCT (before UNIT)\n        else if (m = SCOPE.datex.match(Regex.OCT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addInt(parseInt(m[1].replaceAll('_',''), 8), SCOPE)\n            isEffectiveValue = true;\n        }\n\n\n        // QUANTITY (before FLOAT)\n        else if (m = SCOPE.datex.match(Regex.QUANTITY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const value = m[1];\n            const unit = <unit_symbol>m[2];\n            try {\n                Compiler.builder.addQuantity(new Quantity(value, unit), SCOPE)\n            }\n            catch (e){\n                if (e instanceof DatexError) e.setStack(...SCOPE.stack);\n                throw e;\n            }\n            isEffectiveValue = true;\n        }\n\n        \n        // TIME\n        else if (m = SCOPE.datex.match(Regex.TIME)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            try {\n                Compiler.builder.addTime(new Time(m[0]), SCOPE)\n            }\n            catch (e){\n                if (e instanceof DatexError) e.setStack(...SCOPE.stack);\n                throw e;\n            }\n            isEffectiveValue = true;\n        }\n\n        // FLOAT (before INT)\n        else if (m = SCOPE.datex.match(Regex.FLOAT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addFloat(parseFloat(m[0].replace(/[_ ]/g, \"\")), SCOPE)\n            isEffectiveValue = true;\n        }\n\n        // INT   \n        else if (m = SCOPE.datex.match(Regex.INT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const intString = m[0].replace(/[_ ]/g, \"\");\n            let int:number|bigint = parseInt(intString);\n            // use bigint if int is out of range\n            if (!Number.isSafeInteger(int)) int = BigInt(intString);\n            Compiler.builder.addInt(int, SCOPE)\n            isEffectiveValue = true;\n        }\n\n\n        // ASSIGN (=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_SET)) {\n            if (SCOPE._code_block_type==42 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_SET;\n        }\n        \n        // ASSIGN_ADD (+=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_ADD)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.ADD, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_SUBTRACT (-=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_SUB)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.SUBTRACT, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_MUTIPLY (*=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_MUTIPLY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.MULTIPLY, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_DIVIDE (/=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_DIVIDE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.DIVIDE, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_POWER (^=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_POWER)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.POWER, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_AND (&=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_AND)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.AND, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_OR (|=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_OR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.OR, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_REFERENCE ($=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_REFERENCE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_SET_REFERENCE;\n        }\n\n        // INCREMENT\n        else if (m = SCOPE.datex.match(Regex.INCREMENT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.datex = \"+=1\" + SCOPE.datex;\n            // TODO\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INCREMENT;  \n        }\n\n        // DECREMENT\n        else if (m = SCOPE.datex.match(Regex.DECREMENT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            // TODO\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DECREMENT;  \n        }\n\n        // ADD\n        else if (m = SCOPE.datex.match(Regex.ADD)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;  \n        }\n\n        // SUBTRACT\n        else if (m = SCOPE.datex.match(Regex.SUBTRACT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBTRACT;  \n        }\n\n        // MULTIPLY\n        else if (m = SCOPE.datex.match(Regex.MULTIPLY)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.MULTIPLY;  \n        }\n\n        // POWER ^\n        else if (m = SCOPE.datex.match(Regex.POWER)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.POWER;  \n        }\n\n        // MODULO ^\n        else if (m = SCOPE.datex.match(Regex.MODULO)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.MODULO;  \n        }\n\n        // DIVIDE\n        else if (m = SCOPE.datex.match(Regex.DIVIDE)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DIVIDE;  \n        }\n    \n        // OR\n        else if (m = SCOPE.datex.match(Regex.OR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n         \n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OR;  \n        }\n\n        // AND\n        else if (m = SCOPE.datex.match(Regex.AND)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.AND;  \n        }\n\n        // NOT\n        else if (m = SCOPE.datex.match(Regex.NOT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT;  \n        }\n\n       \n\n        else {\n            throw new SyntaxError(\"Invalid token on line \"+SCOPE.current_line_nr+\" near '\" + SCOPE.datex.split(\"\\n\")[0] + \"'\");\n        }\n\n        // immediate +/- operation possible\n        if (isEffectiveValue) Compiler.builder.tryPlusOrMinus(SCOPE);\n\n\n        // after inserted last value for value_count\n        if (!SCOPE.inner_scope?.value_count) {\n\n            let end_index:number;\n\n            if ('iterate' in SCOPE.inner_scope) {\n                // insert initialisation\n                if (SCOPE.inner_scope.iterate == 0) {\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n                    SCOPE.inner_scope.loop_start = SCOPE.b_index;\n\n                    // ... jtr loop_start (next #i);\n                    SCOPE.inner_scope.jfa_index = SCOPE.b_index+1;\n                    Compiler.builder.addJmp(SCOPE,  BinaryCode.JFA);\n\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NEXT;\n                    Compiler.builder.insertVariable(SCOPE, 'i', ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n\n                    // // #it = #iter->val;\n                    // Compiler.builder.insertVariable(SCOPE, 'it', ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n                    // Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                    // Compiler.builder.insertVariable(SCOPE, 'i', ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                    // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_GET;\n                    // Compiler.builder.addString('val', SCOPE);\n                    // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n\n                    // now wait for iterate block\n                    SCOPE.inner_scope.iterate = 1;\n                    SCOPE.inner_scope.value_count = 1;\n                }\n                // next() + jump instrution at the end\n                else {\n                    // jmp to start\n                    Compiler.builder.addJmp(SCOPE, BinaryCode.JMP, SCOPE.inner_scope.loop_start)\n\n                    // insert end index for jfa end\n                    SCOPE.data_view.setUint32(SCOPE.inner_scope.jfa_index, SCOPE.b_index, true);\n                    \n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                            \n                    delete SCOPE.inner_scope.loop_start;\n                    delete SCOPE.inner_scope.iterate;\n                }\n                \n            }\n\n            else if ('while' in SCOPE.inner_scope) {\n                // jmp start\n                Compiler.builder.addJmp(SCOPE, BinaryCode.JMP, SCOPE.inner_scope.loop_start)\n\n                // insert end index for jfa end\n                SCOPE.data_view.setUint32(SCOPE.inner_scope.loop_start+1, SCOPE.b_index, true);\n\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n\n                delete SCOPE.inner_scope.loop_start;\n                delete SCOPE.inner_scope.while;\n            }\n            else if ('if' in SCOPE.inner_scope) {\n\n                // add if_end_indices\n                if (!SCOPE.inner_scope.if_end_indices) SCOPE.inner_scope.if_end_indices = [];\n                SCOPE.inner_scope.if_end_indices.push(SCOPE.b_index+1);\n                \n                // jmp start\n                Compiler.builder.addJmp(SCOPE, BinaryCode.JMP)\n\n                // insert end index for jfa end -> jump to next else (if) or end\n                SCOPE.data_view.setUint32(SCOPE.inner_scope.if+1, SCOPE.b_index, true);\n                end_index = SCOPE.b_index; // set end_index to before SUBSCOPE_END\n\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END; // assume already end of 'if'-subscope - might be overidden\n            }\n\n            // update end index for all current if/else clauses\n            if ('else' in SCOPE.inner_scope || 'if' in SCOPE.inner_scope) {\n                // set end index for all previous ifs/else ifs\n                end_index = end_index ?? SCOPE.b_index;\n                for (let index of SCOPE.inner_scope.if_end_indices??[]) {\n                    SCOPE.data_view.setUint32(index, end_index, true);\n                }\n\n                // handle only 'else'\n                if ('else' in SCOPE.inner_scope) {\n                    delete SCOPE.inner_scope.if_end_indices;\n                    delete SCOPE.inner_scope.else;\n\n                    // definitly end of 'if'-subscope\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                }\n                // delete 'if'\n                else delete SCOPE.inner_scope.if;\n            \n            }\n\n            // reset value_count\n            delete SCOPE.inner_scope.value_count;\n        }\n\n\n        // handle function scope block\n        if (SCOPE.inner_scope.function != null && SCOPE.b_index != SCOPE.inner_scope.function) {\n            // block with brackets ?\n            let has_brackets = false;\n            SCOPE.datex = SCOPE.datex.replace(/^[^\\S\\n]+/, \"\"); //(/^[^\\S\\r\\n]+/\n            if (SCOPE.datex[0] == \"(\") {\n                has_brackets = true;\n                SCOPE.datex = SCOPE.datex.slice(1);\n            }\n            await Compiler.builder.addScopeBlock(BinaryCode.FUNCTION, has_brackets, false, SCOPE);\n            SCOPE.inner_scope.function = null;\n        }\n    }\n\n    static async createBlockFromScope(SCOPE:compiler_scope):Promise<ArrayBuffer> {\n\n        return SCOPE.add_header ? await this.appendHeader(\n            SCOPE.buffer,\n            SCOPE.options.end_of_scope,\n            SCOPE.options.from, //sender\n            SCOPE.options.to, // to\n            SCOPE.options.flood, // flood\n            SCOPE.options.type, // type\n            SCOPE.options.sign, \n            SCOPE.options.encrypt, // encrypt\n            SCOPE.options.send_sym_encrypt_key,\n            SCOPE.options.sym_encrypt_key, // encryption key\n            SCOPE.options.allow_execute, // allow execute\n\n            SCOPE.options.sid,\n            SCOPE.options.return_index,\n            SCOPE.options.inc,\n\n            SCOPE.options.force_id,\n\n            SCOPE.options.__routing_ttl,\n            SCOPE.options.__routing_prio,\n            SCOPE.options.__routing_to,\n\n            SCOPE.receiver_buffer,\n            SCOPE.sender_buffer,\n            SCOPE.pre_header_size,\n            SCOPE.signed_header_size,\n            SCOPE.full_dxb_size\n        ) : SCOPE.buffer;\n    }\n\n    /**\n     * Workaround: recursively cache all blob values in the iterable\n     */\n    static cacheValues(iterable: Iterable<unknown>, promises:Promise<void>[] = []): Promise<void>[] {\n        for (const val of iterable) {\n            if (val instanceof Blob) promises.push(Runtime.cacheValue(val));\n            else if (typeof val == \"object\" && (val as any)?.[Symbol.iterator]) this.cacheValues((val as any), promises);\n        }\n        return promises;\n    }\n\n\n    // compile loop\n    static async compileLoop(SCOPE:compiler_scope):Promise<ArrayBuffer|ReadableStream<ArrayBuffer>>  {\n\n        // make sure WebRTC interface is loaded\n        ({ WebRTCInterface } = await import(\"../network/communication-interfaces/webrtc-interface.ts\"));\n\n        // cache inserted blob values\n        const promises = SCOPE.data ? this.cacheValues(SCOPE.data) : [];\n        if (promises.length) await Promise.all(promises);\n\n        const body_compile_measure = RuntimePerformance.enabled ? RuntimePerformance.startMeasure(\"compile time\", \"body\") : undefined;\n\n        if (!SCOPE.datex) SCOPE.datex = \";\";//throw new CompilerError(\"DATEX Script is empty\");\n\n        // iterate over all tokens / commands, stop if end not reached after 1000 tokens\n        for (let i=0;i<500_000;i++) {            \n            await this.parseNextExpression(SCOPE); // parse and update index in binary\n\n            // streaming, generate multiple blocks as ReadableStream\n            if (SCOPE.streaming) {\n\n                const _end_of_scope = SCOPE.options.end_of_scope;\n                \n                SCOPE.buffer = SCOPE.buffer.slice(0, SCOPE.b_index);  // slice until current index\n                return new ReadableStream<ArrayBuffer>({\n                    async start(controller:ReadableStreamDefaultController<ArrayBuffer>) {\n                        SCOPE.options.end_of_scope = false;\n\n                        // first part of scope until the stream starts\n                        controller.enqueue(await Compiler.createBlockFromScope(SCOPE));\n                                                \n                        // read stream and insert\n                        const reader = SCOPE.streaming!;\n                        let next:ReadableStreamReadResult<any>,\n                            value: any;\n                        while (true) {\n                            if (SCOPE.options.stream_abort_signal?.aborted) {\n                                console.log(`Stream ${SCOPE.options.sid} was aborted`)\n                                break;\n                            }\n                            next = await reader.read()\n                            if (SCOPE.options.stream_abort_signal?.aborted) {\n                                console.log(`Stream ${SCOPE.options.sid} was aborted`)\n                                break;\n                            }\n                            if (next.done) break;\n                            value = next.value;\n                                                \n                            // optimized: create array buffer dxb\n                            if (value instanceof ArrayBuffer || value instanceof TypedArray) {\n                                SCOPE.buffer = new ArrayBuffer(value.byteLength+1+Uint32Array.BYTES_PER_ELEMENT);\n                                SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n                                SCOPE.data_view = new DataView(SCOPE.buffer);\n                                SCOPE.uint8[0] = BinaryCode.BUFFER;\n                                SCOPE.data_view.setUint32(1, value.byteLength, true);   // buffer length\n                                SCOPE.uint8.set(value instanceof Uint8Array ? value : new Uint8Array(value), 1+Uint32Array.BYTES_PER_ELEMENT);\n                            }\n                            // insert another value\n                            else SCOPE.buffer = Compiler.compileValue(value, {}, false);\n\n                            const buffer = await Compiler.createBlockFromScope(SCOPE);\n                            (buffer as any)._is_stream = true; // internal flag, set when the outgoing message is a stream, used to prevent recursive stream logs\n                            controller.enqueue(buffer);\n                        }\n\n                        // continue after stream, reset SCOPE to previous state\n                        // TODO not working properly with jumps, buffers and indices are reset\n                        SCOPE.b_index = 0;\n                        SCOPE.buffer = new ArrayBuffer(400);\n                        SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n                        SCOPE.data_view = new DataView(SCOPE.buffer);\n                        SCOPE.options.end_of_scope = _end_of_scope;\n                        SCOPE.streaming = null;\n\n                        let res = await Compiler.compileLoop(SCOPE);\n\n                        // is single block\n                        if (res instanceof ArrayBuffer) {\n                            if (SCOPE.options.end_of_scope) controller.enqueue(new ArrayBuffer(0)); // indicate last block following\n                            controller.enqueue(res);\n                        }\n                        // is another stream of blocks\n                        else {\n                            const reader = res.getReader();\n                            let next:ReadableStreamReadResult<ArrayBuffer>;\n                            while (true) {\n                                next = await reader.read()\n                                if (next.done) break;\n                                controller.enqueue(next.value);\n                            }\n                        }\n\n                        controller.close();\n                    }\n                })\n            }\n\n            // end of scope reached\n            if (SCOPE.end || !SCOPE.datex) { \n\n                // check for required plugins\n                if (SCOPE.unused_plugins?.size) {\n                    const ext = [...SCOPE.unused_plugins];\n                    if (SCOPE.unused_plugins.size == 1) throw new CompilerError(`Plugin \"${ext[0]}\" is required, but not found in script`);\n                    else throw new CompilerError(`Plugins \"${ext.join(\",\")}\" are required, but not found in script`);\n                }\n\n                // check for missing object brackets\n                for (const scope of SCOPE.subscopes) {\n                    if (scope.parent_type == BinaryCode.OBJECT_START) {\n                        console.warn(SCOPE.datex)\n                        throw new SyntaxError(\"Missing closing object bracket\");\n                    }\n                    if (scope.parent_type == BinaryCode.ARRAY_START) throw new SyntaxError(\"Missing closing array bracket\");\n                    if (scope.parent_type == BinaryCode.SUBSCOPE_START) throw new SyntaxError(\"Missing closing bracket\");\n                }\n\n                if (Object.keys(SCOPE.indices_waiting_for_jmp_lbl).length) {\n                    throw new CompilerError(\"Jump to non-existing lbl: \" + Object.keys(SCOPE.indices_waiting_for_jmp_lbl), SCOPE.stack);\n                }\n\n                if (SCOPE.return_data) SCOPE.return_data.datex = SCOPE.datex;\n\n                // add ; if missing (only if end of scope)\n                if (SCOPE.options.end_of_scope!==false && !SCOPE.last_command_end) {\n                    // auto-close subscopes here?\n                    while (SCOPE.inner_scope?.auto_close_scope!=undefined) {\n                        const type = SCOPE.inner_scope.auto_close_scope;\n                        delete SCOPE.inner_scope.auto_close_scope;\n                        Compiler.builder.exit_subscope(SCOPE, type);\n                    }\n\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; \n                }\n\n                \n                // insert preemptive pointer inits\n                // console.log(\"PRREMITVE\",SCOPE.preemptive_pointers)\n                // if (SCOPE.preemptive_pointers.size) {\n                //     for (const id of SCOPE.preemptive_pointers) {\n                //         const ptr = Pointer.get(id);\n                //         if (ptr) {\n                //             await Compiler.builder.addPointerByID(SCOPE, id, ACTION_TYPE.INIT, undefined, true, ptr.val);\n                //         }\n                //         // otherwise pointer was not yet initialized, cannot be loaded preemptively\n                //     }\n                // }\n                \n                // exports tuple\n                if (SCOPE.inner_scope.exports) Compiler.builder.insert_exports(SCOPE);\n\n                SCOPE.buffer = SCOPE.buffer.slice(0, SCOPE.b_index);  // slice until current index (remove 0s at the end)\n\n                // insert buffer for compile time insertions at top\n                if (SCOPE.options.insert_header && SCOPE.is_outer_insert) {\n                    SCOPE.options.insert_header.buffer = SCOPE.options.insert_header.buffer.slice(0, SCOPE.options.insert_header.index);  // slice until current index (remove 0s at the end)\n                    SCOPE.buffer = Compiler.combineBuffers(SCOPE.options.insert_header.buffer, SCOPE.buffer);\n                }\n\n                // prefix extract_var_scope? -> scope block\n                /*\n                    var1 var2 var3 BinaryCode.SCOPE_BLOCK [SCOPE.buffer.byteLength] [SCOPE.buffer]\n                */\n                if (SCOPE.extract_var_scope) {\n                    SCOPE.extract_var_scope.uint8[SCOPE.extract_var_scope.b_index++] = BinaryCode.SCOPE_BLOCK;\n                    SCOPE.extract_var_scope.data_view.setUint32(SCOPE.extract_var_scope.b_index, SCOPE.buffer.byteLength, true);\n                    SCOPE.extract_var_scope.b_index += Uint32Array.BYTES_PER_ELEMENT;\n\n                    SCOPE.extract_var_scope.buffer = SCOPE.extract_var_scope.buffer.slice(0, SCOPE.extract_var_scope.b_index);  // slice until current index (remove 0s at the end)\n                    SCOPE.buffer = Compiler.combineBuffers(SCOPE.extract_var_scope.buffer, SCOPE.buffer);\n                }\n\n                if (SCOPE.precompiled) {\n                    // add last buffer part to precompiled dxb if available\n                    SCOPE.precompiled.appendBufferPlaceholder(SCOPE.last_precompiled??0,SCOPE.b_index);\n                    // now insert actual buffer data\n                    SCOPE.precompiled.autoInsertBuffer(SCOPE.buffer);\n                }\n\n                // check if max block size exceeded -> return ReadableStream with multiple blocks (only if full block with header)\n                if (SCOPE.add_header && (await this.getScopeBlockSize(SCOPE) >= SCOPE.max_block_size??Compiler.MAX_DXB_BLOCK_SIZE)) {\n                    const original_buffer = SCOPE.buffer;\n                    const total_header_size = SCOPE.pre_header_size + SCOPE.signed_header_size;\n                    const max_body_size = SCOPE.max_block_size - total_header_size;\n                    console.log(\"block too big (\"+await this.getScopeBlockSize(SCOPE)+\" bytes), splitting into parts with body size \" + max_body_size)\n                    let split_index = 0;\n                    // return ReadableStream (could actually just be an array of ArrayBuffers, since all buffers are already known, but ReadableStream is needed anyways)\n                    return new ReadableStream<ArrayBuffer>({\n                        async start(controller:ReadableStreamDefaultController<ArrayBuffer>) {\n                            let last_block = false;\n                            // add block by block\n                            while (!last_block) {\n                                SCOPE.buffer = original_buffer.slice(split_index, split_index + max_body_size);\n                                split_index += max_body_size\n                                SCOPE.full_dxb_size = total_header_size + SCOPE.buffer.byteLength; // update full_dxb_size to new shortened size \n                                last_block = split_index>=original_buffer.byteLength;\n                                SCOPE.options.end_of_scope = last_block // set EOS to true if no more blocks coming, else false\n                                const block = await Compiler.createBlockFromScope(SCOPE);\n                                if (last_block) controller.enqueue(new ArrayBuffer(0)); // indicate last block following\n                                controller.enqueue(block);\n                            }\n\n                            controller.close();\n                        }\n                    })\n                    \n                }\n\n                // return a single block (or split into multiple blocks if too big)\n                else {\n                    if (RuntimePerformance.enabled) RuntimePerformance.endMeasure(body_compile_measure); // compile time for a single block (dxb body) can be measure here\n                    return Compiler.createBlockFromScope(SCOPE);\n                }\n\n            } // end reached\n        }\n\n        // end not reached after 500_000 iterations\n        throw new SyntaxError(\"DATEX Script to big to compile\");\n    }\n\n\n\n    /** create compiled dxb (stored as a string) from any value */\n    static valueToBase64DXB(value:any, inserted_ptrs?:Set<Pointer>):string {\n        const dxb = Compiler.compileValue(value, {inserted_ptrs})\n        return arrayBufferToBase64(dxb);\n    }\n\n    /** create compiled dxb (stored as a string) from a DATEX Script string */\n    static async datexScriptToBase64DXB(dx:string, type = ProtocolDataType.DATA, data = [], options:compiler_options={}):Promise<string> {\n        const dxb = <ArrayBuffer> await Compiler.compile(dx, data, {sign:false, encrypt: false, type, ...options})\n        return arrayBufferToBase64(dxb);\n    }\n\n    /**\n     * Compile a DATEX Script to a DXB or DX file\n     * The file is saved in storage if runnning on deno, and downloaded if running in a browser\n     * @param script_or_url script or path to script file\n     * @param output_name_or_path full output file path as url (only works with deno) or file name (extension is optional and automatically inferred by default)\n     * @param file_type export file type (dx or dxb)\n     * @param type export file protocol type (only relevant for DATEX Binary file export)\n     * @param data insert data for script\n     */\n    static async compileAndExport(script_or_url:string|URL, output_name_or_path?:string|URL, file_type: DATEX_FILE_TYPE = FILE_TYPE.DATEX_BINARY, type = ProtocolDataType.DATA, data = []) {\n        // compile\n        const blob = await this.compileToFile(script_or_url, file_type, type, data);\n        // export\n        return this.export(blob, output_name_or_path, file_type, script_or_url instanceof URL ? script_or_url : undefined)\n    }\n\n    static async exportValue(value: any, output_name_or_path?:string|URL, file_type: DATEX_FILE_TYPE = FILE_TYPE.DATEX_BINARY, collapse_pointers = true, collapse_first_inserted = true, keep_external_pointers = true, resolve_slots = true) {\n        // compile value\n        const buffer = await this.compile(\"?\", [value], {collapse_pointers, collapse_first_inserted, keep_external_pointers, no_create_pointers: false, flood: true, to: undefined}) as ArrayBuffer;\n\n        if (file_type[0] == \"application/datex\") {\n            // export\n            return this.export(buffer, output_name_or_path, file_type)\n        }\n        else {\n            return this.export(MessageLogger.decompile(buffer, true, false, resolve_slots), output_name_or_path, file_type)\n        }\n\n    }\n\n    protected static async export(dxb_or_datex_script:Blob|ArrayBuffer|string, output_name_or_path?:string|URL, file_type: DATEX_FILE_TYPE = FILE_TYPE.DATEX_BINARY, original_url?:URL) {\n        // compile\n        const blob = dxb_or_datex_script instanceof Blob ? dxb_or_datex_script : new Blob([dxb_or_datex_script], {type:file_type[0]});\n\n        // export\n        if (client_type == \"deno\") {\n            let export_path:URL;\n            // export url\n            if (output_name_or_path instanceof URL) export_path = output_name_or_path;\n            // auto infer export url from import url\n            else if (original_url instanceof URL) {\n                let name:string\n                // name provided\n                if (typeof output_name_or_path == \"string\") name = output_name_or_path;\n                // default filename (remove extension from current url path)\n                else name = original_url.pathname.split('/').pop()!.split('.').slice(0, -1).join('.');\n\n                // normalize file name\n                name = this.normalizeFileName(name, file_type);\n\n                export_path = new URL(name, original_url);\n            }\n            // cannot find a url\n            else throw new CompilerError(\"Cannot export file - import or export URL required\");\n\n            logger.success(\"exporting to \" + export_path);\n\n            await this.saveFile(blob, export_path)\n        }\n        else {\n            let name:string\n            // use filename if url provided\n            if (output_name_or_path instanceof URL) name = output_name_or_path.pathname.split('/').pop()!;\n            else if (output_name_or_path) {\n                name = output_name_or_path;\n            }\n            // default filename\n            else {\n                const date = new Date();\n                const timestamp = `${date.getFullYear()}_${date.getMonth()+1}_${date.getDate()}_${date.getHours().toString().padStart(2,'0')}${date.getMinutes().toString().padStart(2,'0')}${date.getSeconds().toString().padStart(2,'0')}`\n                name = `datex_script_${timestamp}`;\n            }\n\n            // normalize file name\n            name = this.normalizeFileName(name, file_type);\n\n            logger.success(\"downloading \" + name);\n\n            this.downloadFile(blob, name);\n        }\n    }\n\n    private static normalizeFileName(name: string, file_type: DATEX_FILE_TYPE){\n        if (!name.includes(\".\")) name += \".\" + file_type[1];  // auto add file extension\n\n        const extension = name.split(\".\").pop()!;\n        if (\n            extension != file_type[1] && !(extension.startsWith(\"json\") && file_type[1] == \"dx\") // exception: json  TODO: valid JSON output (JSON5 should be valid)\n        ) \n            throw new CompilerError(`Output file extension \".${extension}\" does not match output file type \".${file_type[1]}\"`);\n        return name;\n    }\n\n    /**\n     * Compile a DATEX Script to a DXB or DX file blob\n     * @param script_or_url Path to DATEX Script file or DATEX Script text\n     * @param file_type export file type (dx or dxb)\n     * @param type export file protocol type (only relevant for DATEX Binary file export)\n     * @param data insert data for script\n     * @returns Blob with compiled file\n     */\n    static async compileToFile(script_or_url:string|URL, file_type: DATEX_FILE_TYPE = FILE_TYPE.DATEX_BINARY, type = ProtocolDataType.DATA, data = []):Promise<Blob> {\n\n        let script:string;\n       \n        // DATEX Script as string\n        if (typeof script_or_url == \"string\") script = script_or_url;\n        // Fetch Script from URL\n        else {\n            const [data, type] = await Runtime.getURLContent(script_or_url, true, false);\n            // only DATEX Script and JSON allowed\n            if (!(type?.startsWith(\"text/datex\") || type?.startsWith(\"application/json\") || script_or_url.toString().endsWith(\".dx\") || script_or_url.toString().endsWith(\".json\"))) throw new CompilerError(\"Invalid file type: Only DATEX Script and JSON files can be compiled\");\n            script = <string> data;\n\n        }\n        const context_location = (script_or_url instanceof URL) ? script_or_url : undefined;\n\n        if (file_type[0] == \"application/datex\") {\n            const dxb = <ArrayBuffer> await Compiler.compile(script, data, {sign:false, encrypt: false, type, context_location});\n            return new Blob([dxb], {type: file_type[0]});\n        }\n        else if (file_type[0] == \"text/datex\") {\n            const dxb_no_header = <ArrayBuffer> await Compiler.compile(script, data, {sign:false, encrypt: false, type, context_location}, false);\n            return new Blob([wasm_decompile(new Uint8Array(dxb_no_header), true, false, false)], {type: file_type[0]});\n        }\n        else throw new CompilerError(\"Invalid DATEX File type\");\n    }\n\n    /**\n     * Download a blob file (only works in browsers)\n     * @param file file as blob\n     * @param file_name File name\n     */\n    private static downloadFile(file:Blob, file_name:string) {\n        const a = document.createElement(\"a\");\n        const url = URL.createObjectURL(file);\n        a.href = url;\n        a.download = file_name;\n        document.body.appendChild(a);\n        a.click();\n        a.remove();\n    }\n\n    /**\n     * Save a file in storage (only works on deno)\n     * @param file File name\n     * @param file_path path where the file should be stored\n     */\n     private static async saveFile(file:Blob, file_path:string|URL) {\n        return await Deno.writeFile(normalizePath(file_path), new Uint8Array(await file.arrayBuffer()));\n    }\n\n\n    /** create a dxb file created from a DATEX Script string and convert to data url */\n    static async datexScriptToDataURL(dx:string, type = ProtocolDataType.DATA):Promise<string> {\n        const dxb = <ArrayBuffer> await Compiler.compile(dx, [], {sign:false, encrypt: false, type})\n\n        const blob = new Blob([dxb], {type: \"text/dxb\"}); // workaround to prevent download\n\n        return new Promise(resolve=>{\n            const a = new FileReader();\n            a.onload = function(e) {resolve(<string>e.target.result);}\n            a.readAsDataURL(blob);\n        });\n    }\n\n    /** create a dxb file created from a DATEX Script string and convert to object url */\n    static async datexScriptToObjectURL(dx:string, type = ProtocolDataType.DATA):Promise<string> {\n        const dxb = <ArrayBuffer> await Compiler.compile(dx, [], {sign:false, encrypt: false, type})\n\n        const blob = new Blob([dxb], {type: \"text/dxb\"}); // workaround to prevent download\n        return URL.createObjectURL(blob);\n    }\n\n    /** does not create a full DXB block, only a buffer containing a dxb encoded value */\n    static encodeValue(value:any, inserted_ptrs?:Set<Pointer>, add_command_end = true, deep_clone = false, collapse_first_inserted = false, no_create_pointers = false, keep_first_transform = true, collapse_injected_pointers = false, no_duplicate_value_optimization = false):ArrayBuffer {\n        // add_command_end -> end_of_scope -> add ; at the end\n        return this.compileValue(value, {inserted_ptrs, collapse_pointers:deep_clone, collapse_injected_pointers:collapse_injected_pointers, collapse_first_inserted:collapse_first_inserted, no_create_pointers:no_create_pointers, keep_first_transform:keep_first_transform, no_duplicate_value_optimization}, add_command_end)\n    }\n\n    /** also adds preemptive pointers */\n    static encodeValueAsync(value:any, inserted_ptrs?:Set<Pointer>, add_command_end = true, deep_clone = false, collapse_first_inserted = false, no_create_pointers = false, keep_first_transform = true, collapse_injected_pointers = false, no_duplicate_value_optimization = false):ArrayBuffer {\n        // add_command_end -> end_of_scope -> add ; at the end\n        return this.compileValue(value, {preemptive_pointer_init: true, inserted_ptrs, collapse_pointers:deep_clone, collapse_injected_pointers:collapse_injected_pointers, collapse_first_inserted:collapse_first_inserted, no_create_pointers:no_create_pointers, keep_first_transform:keep_first_transform, no_duplicate_value_optimization}, add_command_end)\n    }\n\n    static encodeValueBase64(value:any, inserted_ptrs?:Set<Pointer>, add_command_end = true, deep_clone = false, collapse_first_inserted = false, no_create_pointers = false, keep_first_transform = true, collapse_injected_pointers = false):string {\n        return arrayBufferToBase64(this.encodeValue(value, inserted_ptrs, add_command_end, deep_clone, collapse_first_inserted, no_create_pointers, keep_first_transform, collapse_injected_pointers));\n    }\n\n    /** also adds preemptive pointers */\n    static async encodeValueBase64Async(value:any, inserted_ptrs?:Set<Pointer>, add_command_end = true, deep_clone = false, collapse_first_inserted = false, no_create_pointers = false, keep_first_transform = true, collapse_injected_pointers = false):string {\n        return arrayBufferToBase64(await this.encodeValueAsync(value, inserted_ptrs, add_command_end, deep_clone, collapse_first_inserted, no_create_pointers, keep_first_transform, collapse_injected_pointers));\n    }\n\n    // creates a unique hash for a given value\n    static getValueHash(value:any):Promise<ArrayBuffer> {\n        return crypto.subtle.digest('SHA-256', Compiler.encodeValue(value, undefined, true, true, true, true));\n    }\n\n    static async getValueHashString(value:any):Promise<string> {\n        return arrayBufferToBase64(await Compiler.getValueHash(value))\n    }\n\n    /**\n     * returns pointer id for pointer values, hash for primitive values\n     * @param value\n     * @returns \n     */\n    static getUniqueValueIdentifier(value:any): Promise<string>|string {\n        // value is pointer - get id\n        if (value instanceof Pointer) return value.idString();\n        const ptr = Pointer.getByValue(value);\n        if (ptr) return ptr.idString();\n        // get value hash\n        else return this.getValueHashString(value);\n    }\n\n    // same as compile, but accepts a precompiled dxb array instead of a Datex Script string -> faster compilation\n    static compilePrecompiled(precompiled:PrecompiledDXB, data:any[] = [], options:compiler_options={}, add_header=true):Promise<ArrayBuffer>|ArrayBuffer {\n        \n        // get / compile all array buffers\n        const buffers:ArrayBuffer[] = [];\n        const compiled_cache = new Map<any,ArrayBuffer>();\n        let buffer: ArrayBuffer;\n        let total_size = 0;\n\n        for (const part of precompiled) {\n            if (part instanceof ArrayBuffer) buffer = part;\n            else if (part instanceof Array) throw new Error(\"Invalid precompiled dxb\");\n            else if (part in data) {\n                // already compiled, in cache\n                if (compiled_cache.has(data[part])) buffer = compiled_cache.get(data[part])!;\n                // compile value\n                else compiled_cache.set(data[part], buffer = Compiler.compileValue(data[part], options, false));\n            }\n            else throw new CompilerError(\"Missing data value for precompiled dxb\");\n\n            buffers.push(buffer);\n            total_size += buffer.byteLength;\n        }\n\n        // combine array buffers\n        let i = 0;\n        const finalBuffer = new ArrayBuffer(total_size);\n        const finalBufferView = new Uint8Array(finalBuffer);\n\n        for (const buffer of buffers) {\n            finalBufferView.set(new Uint8Array(buffer), i);\n            i += buffer.byteLength;\n        }\n\n        // console.log(MessageLogger.decompile(finalBuffer, false))\n\n        // no header\n        if (!add_header) return finalBuffer;\n\n        // add header\n        return Compiler.appendHeader(\n            finalBuffer,\n            options.end_of_scope,\n            options.force_id ? (options.from??Runtime.endpoint) : options.from, //sender\n            options.to, // to\n            options.flood, // flood\n            options.type, // type\n            options.sign, \n            options.encrypt, // encrypt\n            options.send_sym_encrypt_key,\n            options.sym_encrypt_key, // encryption key\n            options.allow_execute, // allow execute\n\n            options.sid,\n            options.return_index,\n            options.inc,\n\n            options.force_id,\n\n            options.__routing_ttl,\n            options.__routing_prio,\n            options.__routing_to\n        ) \n\n    }\n\n    // force disable encryption + signatures for all blocks (e.g. when using a crypto proxy)\n    static DISABLE_CRYPTO = false;\n\n    /** compiles datex code to binary + adds  data (binary, strings, intergers,...) if provided */\n    static compile(datex:string|{datex:string}|PrecompiledDXB, data:any[] = [], options:compiler_options={}, add_header=true, is_child_scope_block = false, extract_pointers = false, save_precompiled?:PrecompiledDXB, max_block_size?:number, _code_block_type?:0|1|2|42, _current_data_index=0): Promise<ArrayBuffer|ReadableStream<ArrayBuffer>>|ArrayBuffer {\n\n        if (this.DISABLE_CRYPTO) {\n            options.encrypt = false;\n            options.sign = false;\n        }\n\n        // _datex is precompiled dxb\n        if (datex instanceof PrecompiledDXB) {\n            return Compiler.compilePrecompiled(datex, data, options, add_header);\n        }\n\n        // do optimized synchronous single value compilation\n        if (datex === '?' && !add_header) {\n            return Compiler.compileValue(data[0], options);\n        }\n\n        // replace insert marks with explicitly inserted (?) - also works inside strings\n        if (typeof datex == \"string\") datex = datex.replaceAll(INSERT_MARK, '(?)');\n        // @ts-ignore\n        else if (typeof datex?.datex == \"string\") datex.datex = datex.datex.replaceAll(INSERT_MARK, '(?)');\n\n        const SCOPE = this.createCompilerScope(datex, data, options, add_header, is_child_scope_block, extract_pointers, save_precompiled, max_block_size, _code_block_type, _current_data_index);\n\n        return SCOPE.options.__v2 ? base64ToArrayBuffer(btoa(wasm_compile(SCOPE.datex))) : Compiler.compileLoop(SCOPE);\n    }\n\n\n    static createCompilerScope(datex:string|{datex:string}, data:any[] = [], options:compiler_options={}, add_header=true, is_child_scope_block = false, extract_pointers = false, save_precompiled?:PrecompiledDXB, max_block_size?:number, _code_block_type?:0|1|2|42, _current_data_index=0):compiler_scope{\n        \n        const stack = [Compiler.getBaseStack(options.context_location)];\n        \n        // get datex as string\n        let return_data:{datex:string};\n        if (typeof datex == \"object\" && datex) {\n            return_data = datex;\n            datex = datex.datex;\n        }\n        if (typeof datex != \"string\") throw new CompilerError(\"'datex' must be a string or a precompiled dxb\", stack);\n\n        // remove shebang\n        datex = datex.replace(/^#!.*/,'');\n\n        if (save_precompiled) save_precompiled.datex = datex;\n\n        //globalThis.performance?.mark(\"compile_start\");\n\n        if (options.encrypt && !options.sym_encrypt_key) throw new CompilerError(\"Cannot encrypt without a symmetric encryption key\", stack);\n\n\n        // init scope - state variables\n        const SCOPE:compiler_scope = {\n            datex: datex,\n\n            return_data: return_data,\n\n            data: data,\n            options: options,\n\n            stack: stack,\n\n            inserted_values: new Map(),\n\n            jmp_label_indices: {},\n            preemptive_pointers: new Map(),\n            indices_waiting_for_jmp_lbl: {},\n            assignment_end_indices: new Set(),\n            used_lbls: [],\n            \n            jmp_indices: [],\n\n            add_header: add_header,\n            is_child_scope_block: is_child_scope_block,\n            extract_pointers: extract_pointers,\n            precompiled: save_precompiled,\n\n            max_block_size: max_block_size, // might be bigger than MAX_BLOCK_SIZE\n\n            buffer: new ArrayBuffer(400),\n            uint8: null,\n            data_view: null,\n\n            b_index: 0,\n\n            internal_var_index: options.parent_scope?.internal_var_index ?? [0],\n            internal_vars: new WeakMap(),\n            internal_primitive_vars: new Map(),\n\n            serialized_values: new WeakMap(),\n            dynamic_indices: [],\n\n            current_data_index: _current_data_index,\n\n            current_line_nr: 1,\n            end: false,\n\n            subscopes: [{\n                start_index: -1, // has no brackets\n                last_value_index: -1,  // byte index of last, pointer, var, object, ...\n                wait_for_add: false,\n                in_template_string: false,\n                path_info_index: -1,\n                vars: {}\n            }],\n            inner_scope: null,\n\n            _code_block_type: _code_block_type\n        };\n\n        // keep track of used extensions\n        if (SCOPE.options.required_plugins?.length) SCOPE.unused_plugins = new Set(SCOPE.options.required_plugins);\n\n        if (!SCOPE.options.insert_header) {\n            SCOPE.options.insert_header = {\n                buffer: new ArrayBuffer(100),\n                index: 0,\n                cache: new Map(),\n                vars: SCOPE.subscopes[0].vars,\n                var_index: 0x0300,\n                root_scope: SCOPE\n            }\n            SCOPE.is_outer_insert = true; // if true, add insert header to current compiled dxb\n        }\n\n        if (is_child_scope_block) {\n            SCOPE.extract_var_index = 0;\n            SCOPE.extract_var_indices = new Map();\n            SCOPE.extract_var_scope = <extract_var_scope>{\n                _is_extract_var_scope: true,\n                b_index: 0,\n                buffer: new ArrayBuffer(400),\n                inner_scope: {},\n                dynamic_indices: [],\n                inserted_values: new Map(),\n                preemptive_pointers: new Map(),\n                assignment_end_indices: new Set(),\n                options: {}\n            }\n            SCOPE.extract_var_scope.uint8 = new Uint8Array(SCOPE.extract_var_scope.buffer);\n            SCOPE.extract_var_scope.data_view = new DataView(SCOPE.extract_var_scope.buffer);\n            SCOPE.extract_var_indices.set(BinaryCode.LABEL, new Map());\n            SCOPE.extract_var_indices.set(BinaryCode.POINTER, new Map());\n            SCOPE.extract_var_indices.set(BinaryCode.INTERNAL_VAR, new Map()); // for parent internal var references\n        }\n\n        SCOPE.inner_scope = SCOPE.subscopes[0];\n        SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n        SCOPE.data_view = new DataView(SCOPE.buffer);\n\n        return SCOPE;\n    }\n\n    // reset everything to compile a new datex snippet within the same compiler scope\n    static resetScope(SCOPE:compiler_scope, datex:string|{datex:string}, _code_block_type?:0|1|2|42) {\n        // get datex as string\n        let return_data:{datex:string}|undefined;\n        if (typeof datex == \"object\" && datex) {\n            return_data = datex;\n            datex = datex.datex;\n        }\n        if (typeof datex != \"string\") throw new CompilerError(\"'datex' must be a string or a precompiled dxb\", SCOPE.stack);\n\n        SCOPE.b_index = 0;\n        SCOPE.datex = datex;\n        SCOPE.return_data = return_data;\n        SCOPE.end = false;\n        SCOPE._code_block_type = _code_block_type;\n\n        SCOPE.buffer = new ArrayBuffer(400);\n        SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n        SCOPE.data_view = new DataView(SCOPE.buffer);\n    }\n\n\n\n    /** optimized compiler for single value encoding (no header), synchronous! */\n    static compileValue(value:any, options:compiler_options = {}, add_command_end = true):ArrayBuffer{\n\n        if (options.preemptive_pointer_init != true) options.preemptive_pointer_init = false; // default is false\n\n        const SCOPE:compiler_scope = {\n            options: options,\n\n            inserted_values: new Map(),\n\n            jmp_label_indices: {},\n            preemptive_pointers: new Map(),\n            indices_waiting_for_jmp_lbl: {},\n            assignment_end_indices: new Set(),\n            used_lbls: [],\n            \n            stack: [Compiler.getBaseStack(options.context_location)],\n\n            jmp_indices: [],\n\n            is_child_scope_block: false,\n            add_header: false,\n\n            buffer: new ArrayBuffer(500),\n            uint8: null,\n            data_view: null,\n\n            b_index: 0,\n\n            internal_var_index: options.parent_scope?.internal_var_index ?? [0],\n            internal_vars: new WeakMap(),\n            internal_primitive_vars: new Map(),\n\n            serialized_values: new WeakMap(),\n            dynamic_indices: [],\n\n            current_line_nr: 1,\n            end: false,\n\n            subscopes: [{\n                start_index: -1, // has no brackets\n                last_value_index: -1,  // byte index of last, pointer, var, object, ...\n                wait_for_add: false,\n                in_template_string: false,\n                path_info_index: -1\n            }],\n            inner_scope: null\n        };\n\n        SCOPE.inner_scope = SCOPE.subscopes[0];\n        SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n        SCOPE.data_view = new DataView(SCOPE.buffer);\n\n        // insert value\n        Compiler.builder.insert(value, SCOPE);\n\n        // ;\n        if (add_command_end) {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; \n        }\n\n        // slice until current index (remove 0s at the end)\n        SCOPE.buffer = SCOPE.buffer.slice(0, SCOPE.b_index);  \n\n        // directly return SCOPE buffer without header\n        return SCOPE.buffer;\n    }\n}\n\n\n/**\n * ! nested PrecompiledDXB (appendPrecompiledDXB): recursive self-reference not allowed!\n */\nexport class PrecompiledDXB extends Array<ArrayBuffer|number|[number,number]> {\n\n    #datex?:string\n    #appended_pdxb: PrecompiledDXB[] = [];\n\n    set datex(datex:string){\n        if (this.#datex == undefined) this.#datex = datex;\n    }\n    get datex(){\n        let d = this.#datex??\"\";\n        for (let a of this.#appended_pdxb) {\n            d += \"\\n\" + a.datex;\n        }\n        return d;\n    }\n\n    private constructor(){super()}\n\n\n    appendBuffer(buffer:ArrayBuffer) {\n        this.push(buffer);\n    }\n\n    // buffer not yet inserted, only remember buffer slice start/end\n    appendBufferPlaceholder(start_index:number, end_index:number) {\n        this.push([start_index, end_index]);\n    }\n\n    // insert buffer at placeholder positions\n    autoInsertBuffer(buffer:ArrayBuffer) {\n        for (let i=0;i<this.length;i++) {\n            if (this[i] instanceof Array) this[i] = buffer.slice(this[i][0], this[i][1]);\n        }\n    }\n\n    appendDataIndex(index:number) {\n        this.push(index);\n    }\n\n    freeze(){\n        Object.freeze(this);\n    }\n\n    // static\n\n    public static async create(datex:string, options:compiler_options={}){\n        const precompiled = new PrecompiledDXB();\n        await Compiler.compile(datex, [], options, false, false, false, precompiled);\n        precompiled.freeze(); // no more changes allowed \n        return precompiled;\n    }\n\n    public static combine(...precompiled_dxbs: PrecompiledDXB[]): PrecompiledDXB {\n        const precompiled = new PrecompiledDXB();\n        precompiled.#appended_pdxb = precompiled_dxbs;\n        precompiled.freeze(); // no more changes allowed \n        return precompiled;\n    }\n \n\n    // custom iterator, also iterate over appended PrecompiledDXB\n\n    *[Symbol.iterator](){\n\n        // map data index of multiple combined precompileddxb (assuming the are all in order, eg. `?0 = ?1 + ?2`, `?0 = ?2 * x` => `?0 = ?1 + ?2; ?3 = ?4 * x`)\n        let dataIndexShift = 0;\n        let lastDataIndex = 0;\n        // remember last data index of current section for shift\n        const collectDataIndex = (val:number|[number, number]|ArrayBuffer) => {\n            if (typeof val == \"number\") lastDataIndex = val;\n            return val;\n        }\n        // add shift if data index\n        const convertIndexShift = (val:number|[number, number]|ArrayBuffer) => {\n            if (typeof val == \"number\") return collectDataIndex(val + dataIndexShift);\n            return collectDataIndex(val);\n        }\n\n        // iterate over this\n        for (let i = 0; i < this.length; i++) yield collectDataIndex(this[i]);\n        dataIndexShift = lastDataIndex == 0 ? 0 : lastDataIndex+1;\n\n        // iterate over appended PrecompiledDXB\n        for (let a = 0; a < this.#appended_pdxb.length; a++) {\n            const pdxb = this.#appended_pdxb[a];\n            // iterate over self (no infinite recursion)\n            if (pdxb == this) {\n                for (let i = 0; i < pdxb.length; i++) yield convertIndexShift(pdxb[i]);\n            }\n            // iterate over another precompiled dxb\n            else {\n                // TODO: nested index shift supported?\n                for (const p of pdxb) yield convertIndexShift(p);\n            }\n            dataIndexShift = lastDataIndex == 0 ? 0 : lastDataIndex+1;\n        }\n    }\n}\n\n// file types: TODO: move?\n\nexport const FILE_TYPE = {\n    DATEX_SCRIPT: [\"text/datex\",        \"dx\"],\n    DATEX_BINARY: [\"application/datex\", \"dxb\"],\n    JSON:         [\"application/json\", \"json\"]\n} as const;\n\nexport type DATEX_FILE_TYPE = typeof FILE_TYPE[keyof typeof FILE_TYPE];\n\n\n// debug:\nsetInterval(()=> {\n    logger.debug(\n        \"SID cache sizes (VolatileMap): \" + \n        Compiler.sid_return_indices.size +  \"- \" +\n        Compiler.sid_incs.size +  \"- \" +\n        Compiler.sid_incs_remote.size +  \"- \"\n    )\n}, 1000*60*30 /*30min*/)"],"names":["ACTION_TYPE","WebRTCInterface","Logger","logger","ReadableStream","Runtime","Endpoint","IdEndpoint","Target","WildcardTarget","Institution","Person","BROADCAST","LOCAL_ENDPOINT","Pointer","PointerProperty","ReactiveValue","CompilerError","RuntimeError","Error","DatexError","ValueError","Function","DatexFunction","crypto","Crypto","Stream","Type","Tuple","BinaryCode","Scope","ProtocolDataType","Quantity","EXTENDED_OBJECTS","INHERITED_PROPERTIES","VOID","SLOT_WRITE","SLOT_READ","SLOT_EXEC","NOT_EXISTING","SLOT_GET","SLOT_SET","DX_IGNORE","DX_BOUND_LOCAL_SLOT","DX_RETURN_POINTER_VALUE","DX_REPLACE","DX_PTR","arrayBufferToBase64","base64ToArrayBuffer","buffer2hex","hex2buffer","RuntimePerformance","Conjunction","Disjunction","Logical","Negation","Regex","baseURL","TypedArray","Time","compile","wasm_compile","decompile","wasm_decompile","MessageLogger","JSTransferableFunction","client_type","normalizePath","VolatileMap","activePlugins","DatexResponse","constructor","datex","data","evaluate","URL","getURLContent","executeDatexLocally","execute","endpoint","ProtocolDataTypesMap","utf8_decoder","TextDecoder","INSERT_MARK","Compiler","VERSION_NUMBER","SIGN_DEFAULT","BIG_BANG_TIME","Date","UTC","MAX_INT_32","MIN_INT_32","MIN_INT_64","MAX_INT_64","MAX_INT_8","MIN_INT_8","MAX_INT_16","MIN_INT_16","MAX_UINT_16","MAX_UINT_32","signature_size","_buffer_block_size","utf8_encoder","TextEncoder","local_url","getBaseStack","context_location","toString","combineBuffers","buffer1","buffer2","tmp","Uint8Array","byteLength","set","buffer","sid_return_indices","sid_incs","sid_incs_remote","Map","MAX_SID","MAX_BLOCK","MAX_DXB_BLOCK_SIZE","generateSID","keepalive","sid","Math","round","random","has","Infinity","getNextReturnIndexForSID","c","getBlockInc","getBlockIncForRemoteSID","remote_endpoint","reset_inc","get","convertNumbersToByte","bit_distribution","nrs","reduce","a","b","binary","s","length","size","nr","Number","padStart","parseInt","extractHeaderSender","dx_block","last_byte","_appspace_byte","_start","header_uint8","i","sender_type","name_length","subspace_number","instance_length","has_appspace","name_binary","subarray","name","ENDPOINT","ENDPOINT_WILDCARD","decode","subspaces","n","subspace_name","push","instance","extractHeaderSenderV2","header_data_view","DataView","replaceAll","getUint16","undefined","bin_type","PERSON_ALIAS","INSTITUTION_ALIAS","extractHeaderReceiverDataList","start_byte","targets_map","targets_nr","target_list","type","POINTER","target","slice","updateHeaderReceiver","to","keys","receiver_buffer","targetsToDXB","error","receiver_start_index","routing_header_size","Uint16Array","BYTES_PER_ELEMENT","uint8","routing_part","main_part","total_header_size","new_dx_block","ArrayBuffer","data_view","setUint16","DEFAULT_TTL","device_types","getScopeBlockSize","SCOPE","full_dxb_size","sender_buffer","pre_header_size","signed_header_size","generateScopeBlockMetaInfo","options","from","sign","encrypt","flood","send_sym_encrypt_key","sym_encrypt_key","force_id","dxb_block_length","evaluated_endpoints","endpoint_key_map","collapse","encryptSymmetricKeyForEndpoint","endpointToDXB","SIGN_BUFFER_SIZE","IV_BUFFER_SIZE","appendHeader","end_of_scope","REQUEST","allow_execute","LOCAL","RESPONSE","DATA","return_index","block_inc","__routing_ttl","__routing_prio","__routing_to","iv","compile_measure","startMeasure","device_type","mobile","encryptSymmetric","pre_header","pre_header_data_view","pre_header_uint8","header","signature_index","setUint32","Uint32Array","setBigUint64","BigInt","now","BigUint64Array","header_and_body","block_size","debug","enabled","endMeasure","target_buffer","target_uint8","handleRequiredBufferSize","size_in_bytes","new_size","ceil","old_uint8","name_bin","encode","instance_bin","clause","keys_map","extended_keys","MAX_POINTER_ID_SIZE","id_buffer","list","dataview","setInt16","Int16Array","key","encrypted_key_size","builder","resizeBuffer","add_bytes","max","compilerInsert","value","compiled_script","cache_var","insert_header","cache","insertValVarRef","var_index","vars","urlToDXB","Blob","blobToDXB","scriptToDXB","insert_buffer","insert_uint8","insert_dataview","index","SET_INTERNAL_VAR","DO","CLOSE_AND_STORE","_type","_parent_var","resolveValVarRef","stack","insertVariable","INTERNAL_VAR","e","pushToStack","url","startsWith","endsWith","res","parseHeaderSynchronousPart","Array","blob","script","text","parent_scope","root_scope","only_leak_inserts","getAssignAction","assign_string","action_specifier","action_type","replace","ADD","SUBTRACT","MULTIPLY","DIVIDE","AND","OR","valueIndex","inner_scope","path_info_index","b_index","value_count","last_value_index","first_value_index","commaIndex","comma_indices","assignmentEndIndex","assignment_end_indices","add","getDynamicIndex","dyn_index","dynamic_indices","shiftDynamicIndices","shift","after","jmp_indices","jmp_to","getUint32","console","new_end_indices","Set","insertByteAtIndex","byte","copyWithin","createInternalVariableAtIndex","val","internal_vars","internal_primitive_vars","var_number","internal_var_index","add_scope_global","gap","SET_VAR_SUB_RESULT","resolveInternalProxyName","object_slots","parent_var","STD_STATIC_SCOPE","VAR_STD","CHILD_GET","addText","addTypeByNamespaceAndName","pseudo_parent","getExtractedVariable","base_type","v_name","insert_new","extract_var_indices","extract_var_scope","extract_var_index","addPointerByID","insertExtractedVariable","v","init_brackets","prefix_action","is_b_index","v_name_bin","is_number","addInitBlock","handleStream","stream","streaming","getReader","addJmp","to_index","str_bin","short_string","SHORT_TEXT","TEXT","addDisjunction","elements","DISJUNCTION","addConnective","addConjunction","CONJUNCTION","el","insert","addUrl","url_string","addRelativePath","path","RESOLVE_RELATIVE_PATH","addBoolean","TRUE","FALSE","addInt","addInt8","addInt16","addInt32","addInt64","addBigInt","Int8Array","INT_8","setInt8","INT_16","Int32Array","INT_32","setInt32","BigInt64Array","INT_64","setBigInt64","BIG_INT","bigint_buffer","bigIntToBuffer","addQuantity","u","Float64Array","QUANTITY","num_buffer","numerator","den_buffer","denominator","unit_binary","addTime","t","TIME","isNaN","getTime","addFloat64","f","FLOAT_64","setFloat64","addFloatAsInt32","FLOAT_AS_INT_32","addFloatAsInt8","FLOAT_AS_INT_8","tryPlusOrMinus","addFloat","isInt","isInteger","Object","is","getFullObject","obj","fullObj","prop","addScopeBlock","brackets","extract_pointers","return_data","compiled","getScopeReceiver","current_data_index","insertScopeBlock","SUBSCOPE_START","SUBSCOPE_END","SCOPE_BLOCK","addKey","k","key_bin","ELEMENT_WITH_KEY","ELEMENT_WITH_INT_KEY","addObjectSlot","slot","object_slot_index","INTERNAL_OBJECT_SLOT","addNull","NULL","addVoid","addFilterTargetFromParts","addPersonByNameAndChannel","addInstitutionByNameAndChannel","addIdEndpointByIdAndChannel","id","addBuffer","BUFFER","addTarget","namespace","variation","parameters","jsTypeDefModule","addJSTypeDefs","receiver","addTypeDefs","GET","STD_TYPE_URL","is_extended_type","STD_TYPE_TEXT","STD_TYPE_INT","STD_TYPE_FLOAT","STD_TYPE_BOOLEAN","STD_TYPE_NULL","STD_TYPE_VOID","STD_TYPE_BUFFER","STD_TYPE_CODE_BLOCK","STD_TYPE_UNIT","STD_TYPE_TIME","STD_TYPE_ARRAY","STD_TYPE_OBJECT","STD_TYPE_SET","STD_TYPE_MAP","STD_TYPE_TUPLE","STD_TYPE_FUNCTION","STD_TYPE_STREAM","STD_TYPE_ANY","STD_TYPE_TASK","STD_TYPE_ASSERTION","ns_bin","variation_bin","EXTENDED_TYPE","TYPE","addTuple","addPointerBodyByID","id_bin","knows_pointer","value_initialized","preemptive_pointer_init","insertInitBlock","addInitBlockForValue","compileValue","collapse_first_inserted","insertInitBlockPlaceholder","insertIndex","addValVarRefDeclaration","init","INNER_SCOPE","hasOwn","CREATE_POINTER","COPY","pointer_origin","singleReceiver","equals","subscribers","addPreemptivePointer","addPointerNormal","transform_scope","insert_transform_scope","normalized_id","normalizePointerId","ptr","parentScope","ancestorScopes","alreadyInitializing","preemptive_pointers","force_local_transform","is_origin","idString","addSubscriber","addPointer","p","inserted_ptrs","OPTIONS","PROTECT_POINTERS","grantAccessTo","addArray","is_root","parents","unassigned_children","start_index","TUPLE_START","ARRAY_START","trimmed_length","runtime_actions","getTrimmedArrayLength","getByValue","shadow_object","inserted_values","value_index","existing_val_var","ELEMENT","TUPLE_END","ARRAY_END","addChildrenAssignments","o","entries","addObject","pointer","OBJECT_START","autoGetterProperties","handleLazyTransformInit","OBJECT_END","root_start_index","assignment","CHILD_SET","check_perm_prefix","permission_prefix","KEY_PERMISSION","detect_record","parent_type","has_ce","enter_subscope","auto_close_scope","change_inner_scope_parent_type","insert_exports","int","exports","subscopes","wait_for_add","in_template_string","create","loop_start","has_open_subscopes","scope","exit_subscope","_code_block_type","end","SyntaxError","pop","unescape_string","str","ESCAPE_BACKSPACE","ESCAPE_LINE_FEED","ESCAPE_FORM_FEED","ESCAPE_CARRIAGE_RETURN","ESCAPE_HORIZONTAL_TAB","ESCAPE_VERTICAL_TAB","ESCAPE_OCTAL","_","x","code","String","fromCharCode","ESCAPE_UNICODE","match","HEX_STRING","ESCAPE_HEX","ESCAPE_SEQUENCE","serializeValue","serialized_values","TRANSFORM","replace_optimization","register_insert_index","forceCollapse","indirectReferencePtr","indirectReference","collapseValue","toRemote","mapped","mapInternalVarNameToByteCode","CHILD_GET_REF","STREAM","_first_insert_done","no_duplicate_value_optimization","original_value","proxifyValue","createFromJSFunction","globalThis","MediaStream","registerMediaStream","log","fromJSError","pointerifyValue","skip_first_collapse","option_collapse","collapse_pointers","keep_external_pointers","no_proxify","is_anonymous","no_create_pointers","keep_first_transform","smart_transform_method","warn","HTMLElement","hasAttribute","tagName","getAttribute","ofValue","is_complex","root_type","std","quantity","matchesType","serializable_not_complex","href","NOT","not","_SCOPE","m","ASSIGN_SET","substring","ASSIGN_ADD","ASSIGN_SUB","ASSIGN_MUTIPLY","ASSIGN_DIVIDE","ASSIGN_AND","ASSIGN_OR","ASSIGN_REFERENCE","PLAIN_SCOPE","ext","VAR_RESULT","VAR_SUB_RESULT","_VAR_ORIGIN","VAR_IT","VAR_VOID","VAR_ORIGIN","VAR_ENDPOINT","VAR_LOCATION","VAR_ENV","VAR_META","VAR_PUBLIC","VAR_THIS","VAR_REMOTE","VAR_ENTRYPOINT","parseNextExpression","last_command_end","isEffectiveValue","SEPERATOR","INSERT","d_index","precompiled","last_precompiled","appendBufferPlaceholder","appendDataIndex","d","INSERT_COMMAND","compile_compiler_scope","resetScope","createCompilerScope","compileLoop","compile_datex_scope","createNewInitialScope","updateScope","sender","executable","simpleScopeExecution","COMPILE","KEY","trim","int_key","first_element_pos","EXIT","COUNT","ABOUT","RETURN","ITERATOR","SKIP","JMP","LEAVE","ITERATE","iterate","STD_TYPE_ITERATOR","WHILE","while","JFA","ELSE_IF","if_end_indices","if","ELSE","else","FUN","current_line_nr","DOC_COMMENT","split","COMMENT","REMOTE_CALL","REMOTE","ALWAYS","QUASI_VOID","SYNC_SILENT","_SYNC_SILENT","SYNC","STOP_SYNC","STOP_STREAM","TYPE_FUNCTION_ARG_COMPAT","param_type_close","TEMPLATE","EQUAL","NOT_EQUAL","EQUAL_VALUE","NOT_EQUAL_VALUE","GREATER_EQUAL","LESS_EQUAL","GREATER","LESS","YEET","TRY","try_close","try_start","ACCEPT","RELATIVE_PATH","SPREAD","EXTEND","RANGE","PATH_SEPERATOR","WILDCARD","PROPERTY","PATH_REF_SEPERATOR","wildcard","JUMP","jmp_label","JTR","jmp_label_indices","includes","used_lbls","indices_waiting_for_jmp_lbl","JUMP_LBL","last_cache_point","CACHE_POINT","USE_PROPS","use_parent_index","imported_vars","map","USE_ALL","USE","BOOLEAN","EMPTY_ARRAY","EMPTY_OBJECT","TSTRING_START","escaped_string","TSTRING_B_CLOSE","TSTRING_END","COMMA","ce_index","content","INFINITY","NAN","NaN","BROADCAST_ENDPOINT","subspace_string","STRING_OR_ESCAPED_KEY","string_or_key","DYNAMIC_KEY_END","current_b_index","ELEMENT_WITH_DYNAMIC_KEY","FREEZE","SEAL","HAS","KEYS","DELETE","DELETE_POINTER","CLONE","CLONE_COLLAPSE","COLLAPSE","CREATE_TYPE","exporting","TYPEOF","GET_TYPE","ORIGIN","SUBSCRIBERS","NEXT","EXTENDS","IMPLEMENTS","MATCHES","DEFAULT","DEBUGGER","NEW","CONSTRUCTOR_METHOD","OBSERVE","FUNCTION","params","param","FUNCTION_PARAM","param_modifiers","param_name","param_end","trimStart","type_signature","named","type_init","default_init","PLUGIN","plugins","required_plugins","unused_plugins","delete","RUN","ASSERT","DEFER","AWAIT","OR_OPERATOR","AND_OPERATOR","NOT_OPERATOR","VAR_REF_VAL","init_eternal","DIRECT_EXPORT","hasOwnProperty","ROOT_VARIABLE","LABELED_POINTER","is_internal","is_label","is_hex","HEX_VARIABLE","LABEL","HEX","BIN","OCT","unit","setStack","FLOAT","parseFloat","INT","intString","isSafeInteger","CHILD_ACTION","ASSIGN_POWER","POWER","CHILD_SET_REFERENCE","INCREMENT","DECREMENT","MODULO","end_index","jfa_index","function","has_brackets","createBlockFromScope","add_header","inc","cacheValues","iterable","promises","cacheValue","Symbol","iterator","Promise","all","body_compile_measure","_end_of_scope","start","controller","next","enqueue","reader","stream_abort_signal","aborted","read","done","_is_stream","close","join","is_outer_insert","autoInsertBuffer","max_block_size","original_buffer","max_body_size","split_index","last_block","block","valueToBase64DXB","datexScriptToBase64DXB","dx","compileAndExport","script_or_url","output_name_or_path","file_type","FILE_TYPE","DATEX_BINARY","compileToFile","export","exportValue","resolve_slots","dxb_or_datex_script","original_url","export_path","pathname","normalizeFileName","success","saveFile","date","timestamp","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","downloadFile","extension","file","file_name","document","createElement","createObjectURL","download","body","appendChild","click","remove","file_path","Deno","writeFile","arrayBuffer","datexScriptToDataURL","resolve","FileReader","onload","result","readAsDataURL","datexScriptToObjectURL","encodeValue","add_command_end","deep_clone","collapse_injected_pointers","encodeValueAsync","encodeValueBase64","encodeValueBase64Async","getValueHash","subtle","digest","getValueHashString","getUniqueValueIdentifier","compilePrecompiled","buffers","compiled_cache","total_size","part","finalBuffer","finalBufferView","DISABLE_CRYPTO","is_child_scope_block","save_precompiled","_current_data_index","PrecompiledDXB","__v2","btoa","WeakMap","_is_extract_var_scope","appendBuffer","freeze","combine","precompiled_dxbs","dataIndexShift","lastDataIndex","collectDataIndex","convertIndexShift","pdxb","DATEX_SCRIPT","JSON","setInterval"],"mappings":"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","sourceRoot":"/lib/datex-core-js-legacy-0.3.15/compiler/","file":"compiler.ts"}